diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6b9a27367..8223fe60e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -51,24 +51,15 @@ jobs: echo GOPATH=$(go env GOPATH) >> $GITHUB_ENV echo GOBIN=$(go env GOPATH)/bin >> $GITHUB_ENV echo $(go env GOPATH)/bin >> $GITHUB_PATH - - name: Install patched gox - run: | - mkdir -p "$GOPATH/src/github.com/mitchellh" - cd "$GOPATH/src/github.com/mitchellh" - git clone https://github.com/aslakhellesoy/gox - cd gox - git fetch - git checkout db6184738b77fbd5089e5fa1112177f391c91b24 - go install github.com/mitchellh/gox - if: github.event.inputs.run-on-runner != 'ARM64' && github.event_name != 'schedule' - name: Install brew and node deps run: | curl https://raw.githubusercontent.com/Homebrew/homebrew-core/31b24d65a7210ea0a5689d5ad00dd8d1bf5211db/Formula/protobuf.rb --output protobuf.rb curl https://raw.githubusercontent.com/Homebrew/homebrew-core/d600b1f7119f6e6a4e97fb83233b313b0468b7e4/Formula/s/swift-protobuf.rb --output swift-protobuf.rb HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 HOMEBREW_NO_AUTO_UPDATE=1 HOMEBREW_NO_INSTALL_CLEANUP=1 brew install ./protobuf.rb HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 HOMEBREW_NO_AUTO_UPDATE=1 HOMEBREW_NO_INSTALL_CLEANUP=1 brew install --ignore-dependencies ./swift-protobuf.rb - HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 HOMEBREW_NO_AUTO_UPDATE=1 HOMEBREW_NO_INSTALL_CLEANUP=1 brew install mingw-w64 - HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 HOMEBREW_NO_AUTO_UPDATE=1 HOMEBREW_NO_INSTALL_CLEANUP=1 brew install grpcurl + HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 HOMEBREW_NO_AUTO_UPDATE=1 HOMEBREW_NO_INSTALL_CLEANUP=1 brew install mingw-w64 + HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 HOMEBREW_NO_AUTO_UPDATE=1 HOMEBREW_NO_INSTALL_CLEANUP=1 brew install grpcurl + HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 HOMEBREW_NO_AUTO_UPDATE=1 HOMEBREW_NO_INSTALL_CLEANUP=1 brew tap messense/macos-cross-toolchains && brew install x86_64-unknown-linux-musl npm i -g node-gyp if: github.event.inputs.run-on-runner != 'ARM64' && github.event_name != 'schedule' - name: Checkout @@ -116,18 +107,18 @@ jobs: make setup-go make setup-gomobile which gomobile - - name: Cross-compile library mac/win + - name: Cross-compile library mac/win/linux run: | make download-tantivy-all echo $FLAGS mkdir -p .release echo $SDKROOT - gox -cgo -ldflags="$FLAGS" -osarch="darwin/amd64" --tags="envproduction nographviz nowatchdog nosigar nomutexdeadlockdetector" -output="{{.OS}}-{{.Arch}}" github.com/anyproto/anytype-heart/cmd/grpcserver + GOOS="darwin" GOARCH="amd64" CGO_ENABLED="1" go build -tags="envproduction nographviz nowatchdog nosigar nomutexdeadlockdetector" -ldflags="$FLAGS" -o darwin-amd64 github.com/anyproto/anytype-heart/cmd/grpcserver export SDKROOT=$(xcrun --sdk macosx --show-sdk-path) echo $SDKROOT - gox -cgo -ldflags="$FLAGS" -osarch="darwin/arm64" --tags="envproduction nographviz nowatchdog nosigar nomutexdeadlockdetector" -output="{{.OS}}-{{.Arch}}" github.com/anyproto/anytype-heart/cmd/grpcserver - make protos-server - CC="x86_64-w64-mingw32-gcc" CXX="x86_64-w64-mingw32-g++" gox -cgo -ldflags="$FLAGS -linkmode external -extldflags=-static" -osarch="windows/amd64" --tags="envproduction nographviz nowatchdog nosigar nomutexdeadlockdetector noheic" -output="{{.OS}}-{{.Arch}}" github.com/anyproto/anytype-heart/cmd/grpcserver + GOOS="darwin" GOARCH="arm64" CGO_ENABLED="1" go build -tags="envproduction nographviz nowatchdog nosigar nomutexdeadlockdetector" -ldflags="$FLAGS" -o darwin-arm64 github.com/anyproto/anytype-heart/cmd/grpcserver + GOOS="windows" GOARCH="amd64" CGO_ENABLED="1" CC="x86_64-w64-mingw32-gcc" CXX="x86_64-w64-mingw32-g++" go build -tags="envproduction nographviz nowatchdog nosigar nomutexdeadlockdetector noheic" -ldflags="$FLAGS -linkmode external -extldflags=-static" -o windows-amd64 github.com/anyproto/anytype-heart/cmd/grpcserver + GOOS="linux" GOARCH="amd64" CGO_ENABLED="1" CC="x86_64-linux-musl-gcc" go build -tags="envproduction nographviz nowatchdog nosigar nomutexdeadlockdetector noheic" -ldflags="$FLAGS -linkmode external -extldflags=-static" -o linux-amd64 github.com/anyproto/anytype-heart/cmd/grpcserver ls -lha . - name: run perf tests run: | @@ -199,6 +190,17 @@ jobs: mv js_${VERSION}_${OSARCH}.tar.gz .release/ done if: github.event_name == 'push' + - name: Pack server unix + run: | + declare -a arr=("linux-amd64") + for i in "${arr[@]}" + do + OSARCH=${i%.*} + cp ./${i}* ./grpc-server + tar -czf js_${VERSION}_${OSARCH}.tar.gz grpc-server protobuf json + mv js_${VERSION}_${OSARCH}.tar.gz .release/ + done + if: github.event_name == 'push' - name: Make swift protos run: | mkdir -p .release @@ -271,128 +273,4 @@ jobs: fail_on_unmatched_files: true files: '.release/*' env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - build_linux: - if: github.event_name == 'push' - runs-on: ubuntu-22.04 - steps: - - name: Install Go - uses: actions/setup-go@v1 - with: - go-version: 1.22 - - name: Setup GO - run: | - echo GOPATH=$(go env GOPATH) >> $GITHUB_ENV - echo GOBIN=$(go env GOPATH)/bin >> $GITHUB_ENV - echo $(go env GOPATH)/bin >> $GITHUB_PATH - - - name: Setup license repositor - uses: actions/checkout@master - with: - repository: anyproto/open - ref: refs/heads/main - path: ./open - - - name: Check licenses - run: | - cd open - python3 tools/generate.py --platform golang - cd .. - sudo gem install license_finder - license_finder inherited_decisions add open/decisions.yml - license_finder --enabled-package-managers gomodules - - - name: Install patched gox - run: | - rm -rf $GOPATH/src/github.com/mitchellh - mkdir -p $GOPATH/src/github.com/mitchellh - cd $GOPATH/src/github.com/mitchellh - git clone https://github.com/aslakhellesoy/gox - cd gox - git fetch - git checkout db6184738b77fbd5089e5fa1112177f391c91b24 - go install github.com/mitchellh/gox - - name: Apt install and node deps - run: | - sudo apt update - sudo apt install -y protobuf-compiler libprotoc-dev - curl -O https://pub-c60a000d68b544109df4fe5837762101.r2.dev/linux-compiler-musl-x86.zip - unzip linux-compiler-musl-x86.zip -d $HOME - npm i -g node-gyp - - name: Checkout - uses: actions/checkout@v3 - - uses: actions/cache@v3 - with: - path: | - ~/go/pkg/mod - key: ${{ runner.os }}-go-${{ matrix.go-version }}-${{ hashFiles('**/go.sum') }} - restore-keys: | - ${{ runner.os }}-go-${{ matrix.go-version }}- - - name: Set env vars - env: - UNSPLASH_KEY: ${{ secrets.UNSPLASH_KEY }} - INHOUSE_KEY: ${{ secrets.INHOUSE_KEY }} - run: | - GIT_SUMMARY=$(git describe --tags --always) - echo GOPRIVATE=github.com/anyproto >> $GITHUB_ENV - echo "FLAGS=-X github.com/anyproto/anytype-heart/util/vcs.GitSummary=${GIT_SUMMARY} -X github.com/anyproto/anytype-heart/metrics.DefaultInHouseKey=${INHOUSE_KEY} -X github.com/anyproto/anytype-heart/util/unsplash.DefaultToken=${UNSPLASH_KEY}" >> $GITHUB_ENV - echo VERSION=${GITHUB_REF##*/} >> $GITHUB_ENV - git config --global url."https://${{ secrets.ANYTYPE_PAT }}@github.com/".insteadOf "https://github.com/" - - name: Go mod download - run: | - go mod download - - name: install protoc - run: | - HAS_SYSTEM_PROTOBUF=false make setup-protoc - - name: setup go - run: | - make setup-go - - name: Cross-compile library for linux amd64/arm64 - run: | - make download-tantivy-all - echo $FLAGS - mkdir -p .release - CXX=$HOME/linux-compiler-musl-x86/bin/x86_64-linux-musl-g++ CC=$HOME/linux-compiler-musl-x86/bin/x86_64-linux-musl-gcc gox -cgo -osarch="linux/amd64" -ldflags="$FLAGS -linkmode external -extldflags=-static" --tags="envproduction nographviz nowatchdog nosigar nomutexdeadlockdetector" -output="{{.OS}}-{{.Arch}}" github.com/anyproto/anytype-heart/cmd/grpcserver - make protos-server - - name: Make JS protos - run: | - make protos-js - mv dist/js/pb protobuf - mkdir -p protobuf/protos - cp pb/protos/*.proto ./protobuf/protos - cp pb/protos/service/*.proto ./protobuf/protos - cp pkg/lib/pb/model/protos/*.proto ./protobuf/protos - - name: Add system relations - run: | - mkdir -p json/ - cp pkg/lib/bundle/systemRelations.json ./json - cp pkg/lib/bundle/systemTypes.json ./json - cp pkg/lib/bundle/internalRelations.json ./json - cp pkg/lib/bundle/internalTypes.json ./json - - name: Upload protobuf artifact for linux build - uses: actions/upload-artifact@v4 - with: - name: libs - path: | - protobuf - if-no-files-found: error - retention-days: 1 - - name: Pack server unix - run: | - declare -a arr=("linux-amd64") - for i in "${arr[@]}" - do - OSARCH=${i%.*} - cp ./${i}* ./grpc-server - tar -czf js_${VERSION}_${OSARCH}.tar.gz grpc-server protobuf json - mv js_${VERSION}_${OSARCH}.tar.gz .release/ - done - - name: Release - if: github.event_name == 'push' - uses: softprops/action-gh-release@v1 - with: - prerelease: ${{ contains(github.ref, '-rc') }} - fail_on_unmatched_files: true - files: '.release/*' - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.mockery.yaml b/.mockery.yaml index 1a242eeba..04a57f080 100644 --- a/.mockery.yaml +++ b/.mockery.yaml @@ -69,10 +69,6 @@ packages: github.com/anyproto/anytype-heart/core/block/import/common/objectcreator: interfaces: Service: - BlockService: - config: - dir: "{{.InterfaceDir}}/mock_blockservice" - outpkg: "mock_blockservice" github.com/anyproto/anytype-heart/core/block/import/common/syncer: interfaces: BlockService: @@ -222,4 +218,7 @@ packages: Updater: github.com/anyproto/anytype-heart/core/block/import/notion/api/files: interfaces: - Downloader: \ No newline at end of file + Downloader: + github.com/anyproto/anytype-heart/core/block/detailservice: + interfaces: + Service: \ No newline at end of file diff --git a/Makefile b/Makefile index cf84d0f5b..d253e4d40 100644 --- a/Makefile +++ b/Makefile @@ -339,7 +339,7 @@ endif ### Tantivy Section REPO := anyproto/tantivy-go -VERSION := v0.1.0 +VERSION := v0.1.1 OUTPUT_DIR := deps/libs SHA_FILE = tantivity_sha256.txt diff --git a/clientlibrary/service/service.pb.go b/clientlibrary/service/service.pb.go index eeacc4cd3..1ce356774 100644 --- a/clientlibrary/service/service.pb.go +++ b/clientlibrary/service/service.pb.go @@ -25,326 +25,327 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package func init() { proto.RegisterFile("pb/protos/service/service.proto", fileDescriptor_93a29dc403579097) } var fileDescriptor_93a29dc403579097 = []byte{ - // 5098 bytes of a gzipped FileDescriptorProto + // 5118 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x9d, 0xdd, 0x6f, 0x24, 0x49, 0x52, 0xc0, 0xb7, 0x5f, 0x58, 0xa8, 0xe3, 0x16, 0xe8, 0x85, 0x65, 0x6f, 0xb9, 0x9b, 0xef, 0x19, 0xcf, 0x8c, 0xed, 0xf6, 0xec, 0xcc, 0x7e, 0x1c, 0x7b, 0x48, 0xc8, 0x63, 0x8f, 0xbd, 0xe6, 0x6c, 0x8f, 0x71, 0xb7, 0x67, 0xa4, 0x95, 0x90, 0xa8, 0xa9, 0x0e, 0xb7, 0x0b, 0x57, 0x57, 0xd6, 0x55, - 0x65, 0xb7, 0xa7, 0x0f, 0x81, 0x40, 0x20, 0x10, 0x08, 0xc4, 0x89, 0xaf, 0x17, 0x1e, 0x90, 0xee, - 0xaf, 0xe1, 0xf1, 0x1e, 0x79, 0x84, 0xdd, 0x7f, 0xe4, 0x54, 0x99, 0x59, 0xf9, 0x11, 0x95, 0x91, - 0x55, 0xde, 0xa7, 0x19, 0x75, 0xfc, 0x22, 0x22, 0xb3, 0x32, 0x32, 0x33, 0xf2, 0xa3, 0xca, 0xd1, - 0xcd, 0xe2, 0xcd, 0x56, 0x51, 0x32, 0xce, 0xaa, 0xad, 0x0a, 0xca, 0x65, 0x9a, 0x40, 0xf3, 0xef, - 0x48, 0xfc, 0x3c, 0x7c, 0x37, 0xce, 0x57, 0x7c, 0x55, 0xc0, 0x47, 0x1f, 0x1a, 0x32, 0x61, 0xf3, - 0x79, 0x9c, 0x4f, 0x2b, 0x89, 0x7c, 0xf4, 0x81, 0x91, 0xc0, 0x12, 0x72, 0xae, 0x7e, 0x7f, 0xfa, - 0xf3, 0xff, 0x1f, 0x44, 0xef, 0xed, 0x64, 0x29, 0xe4, 0x7c, 0x47, 0x69, 0x0c, 0xbf, 0x8a, 0xbe, - 0xbb, 0x5d, 0x14, 0xfb, 0xc0, 0x5f, 0x41, 0x59, 0xa5, 0x2c, 0x1f, 0xde, 0x1d, 0x29, 0x07, 0xa3, - 0xd3, 0x22, 0x19, 0x6d, 0x17, 0xc5, 0xc8, 0x08, 0x47, 0xa7, 0xf0, 0x93, 0x05, 0x54, 0xfc, 0xa3, - 0x7b, 0x61, 0xa8, 0x2a, 0x58, 0x5e, 0xc1, 0xf0, 0x3c, 0xfa, 0xad, 0xed, 0xa2, 0x18, 0x03, 0xdf, - 0x85, 0xba, 0x02, 0x63, 0x1e, 0x73, 0x18, 0xae, 0xb5, 0x54, 0x5d, 0x40, 0xfb, 0x78, 0xd8, 0x0d, - 0x2a, 0x3f, 0x93, 0xe8, 0x3b, 0xb5, 0x9f, 0x8b, 0x05, 0x9f, 0xb2, 0xab, 0x7c, 0x78, 0xbb, 0xad, - 0xa8, 0x44, 0xda, 0xf6, 0x9d, 0x10, 0xa2, 0xac, 0xbe, 0x8e, 0x7e, 0xfd, 0x75, 0x9c, 0x65, 0xc0, - 0x77, 0x4a, 0xa8, 0x0b, 0xee, 0xea, 0x48, 0xd1, 0x48, 0xca, 0xb4, 0xdd, 0xbb, 0x41, 0x46, 0x19, - 0xfe, 0x2a, 0xfa, 0xae, 0x94, 0x9c, 0x42, 0xc2, 0x96, 0x50, 0x0e, 0xbd, 0x5a, 0x4a, 0x48, 0x3c, - 0xf2, 0x16, 0x84, 0x6d, 0xef, 0xb0, 0x7c, 0x09, 0x25, 0xf7, 0xdb, 0x56, 0xc2, 0xb0, 0x6d, 0x03, - 0x29, 0xdb, 0xff, 0x30, 0x88, 0xbe, 0xbf, 0x9d, 0x24, 0x6c, 0x91, 0xf3, 0x43, 0x96, 0xc4, 0xd9, - 0x61, 0x9a, 0x5f, 0x1e, 0xc3, 0xd5, 0xce, 0x45, 0xcd, 0xe7, 0x33, 0x18, 0x3e, 0x73, 0x9f, 0xaa, - 0x44, 0x47, 0x9a, 0x1d, 0xd9, 0xb0, 0xf6, 0xfd, 0xc9, 0xf5, 0x94, 0x54, 0x59, 0xfe, 0x65, 0x10, - 0xdd, 0xc0, 0x65, 0x19, 0xb3, 0x6c, 0x09, 0xa6, 0x34, 0x9f, 0x76, 0x18, 0x76, 0x71, 0x5d, 0x9e, - 0xcf, 0xae, 0xab, 0xa6, 0x4a, 0x94, 0x45, 0xef, 0xdb, 0xe1, 0x32, 0x86, 0x4a, 0x74, 0xa7, 0x47, - 0x74, 0x44, 0x28, 0x44, 0x7b, 0x7e, 0xdc, 0x07, 0x55, 0xde, 0xd2, 0x68, 0xa8, 0xbc, 0x65, 0xac, - 0xd2, 0xce, 0x1e, 0x7a, 0x2d, 0x58, 0x84, 0xf6, 0xf5, 0xa8, 0x07, 0xa9, 0x5c, 0xfd, 0x69, 0xf4, - 0x1b, 0xaf, 0x59, 0x79, 0x59, 0x15, 0x71, 0x02, 0xaa, 0x2b, 0xdc, 0x77, 0xb5, 0x1b, 0x29, 0xee, - 0x0d, 0x0f, 0xba, 0x30, 0x2b, 0x68, 0x1b, 0xe1, 0xcb, 0x02, 0xf0, 0x18, 0x64, 0x14, 0x6b, 0x21, - 0x15, 0xb4, 0x18, 0x52, 0xb6, 0x2f, 0xa3, 0xa1, 0xb1, 0xfd, 0xe6, 0xcf, 0x20, 0xe1, 0xdb, 0xd3, - 0x29, 0x6e, 0x15, 0xa3, 0x2b, 0x88, 0xd1, 0xf6, 0x74, 0x4a, 0xb5, 0x8a, 0x1f, 0x55, 0xce, 0xae, - 0xa2, 0x0f, 0x90, 0xb3, 0xc3, 0xb4, 0x12, 0x0e, 0x37, 0xc3, 0x56, 0x14, 0xa6, 0x9d, 0x8e, 0xfa, - 0xe2, 0xca, 0xf1, 0x5f, 0x0d, 0xa2, 0xef, 0x79, 0x3c, 0x9f, 0xc2, 0x9c, 0x2d, 0x61, 0xf8, 0xa4, - 0xdb, 0x9a, 0x24, 0xb5, 0xff, 0x8f, 0xaf, 0xa1, 0xe1, 0x09, 0x93, 0x31, 0x64, 0x90, 0x70, 0x32, - 0x4c, 0xa4, 0xb8, 0x33, 0x4c, 0x34, 0x66, 0xf5, 0xb0, 0x46, 0xb8, 0x0f, 0x7c, 0x67, 0x51, 0x96, - 0x90, 0x73, 0xb2, 0x2d, 0x0d, 0xd2, 0xd9, 0x96, 0x0e, 0xea, 0xa9, 0xcf, 0x3e, 0xf0, 0xed, 0x2c, - 0x23, 0xeb, 0x23, 0xc5, 0x9d, 0xf5, 0xd1, 0x98, 0xf2, 0x90, 0x44, 0xbf, 0x69, 0x3d, 0x31, 0x7e, - 0x90, 0x9f, 0xb3, 0x21, 0xfd, 0x2c, 0x84, 0x5c, 0xfb, 0x58, 0xeb, 0xe4, 0x3c, 0xd5, 0x78, 0xf1, - 0xb6, 0x60, 0x25, 0xdd, 0x2c, 0x52, 0xdc, 0x59, 0x0d, 0x8d, 0x29, 0x0f, 0x7f, 0x12, 0xbd, 0xa7, - 0x46, 0xc9, 0x66, 0x3e, 0xbb, 0xe7, 0x1d, 0x42, 0xf1, 0x84, 0x76, 0xbf, 0x83, 0x32, 0x83, 0x83, - 0x92, 0xa9, 0xc1, 0xe7, 0xae, 0x57, 0x0f, 0x0d, 0x3d, 0xf7, 0xc2, 0x50, 0xcb, 0xf6, 0x2e, 0x64, - 0x40, 0xda, 0x96, 0xc2, 0x0e, 0xdb, 0x1a, 0x52, 0xb6, 0xcb, 0xe8, 0x77, 0xf4, 0x63, 0xa9, 0xe7, - 0x51, 0x21, 0xaf, 0x07, 0xe9, 0x75, 0xa2, 0xde, 0x36, 0xa4, 0x7d, 0x6d, 0xf4, 0x83, 0x5b, 0xf5, - 0x51, 0x3d, 0xd0, 0x5f, 0x1f, 0xd4, 0xff, 0xee, 0x85, 0x21, 0x65, 0xfb, 0x1f, 0x07, 0xd1, 0x0f, - 0x94, 0xec, 0x45, 0x1e, 0xbf, 0xc9, 0x40, 0x4c, 0x89, 0xc7, 0xc0, 0xaf, 0x58, 0x79, 0x39, 0x5e, - 0xe5, 0x09, 0x31, 0xfd, 0xfb, 0xe1, 0x8e, 0xe9, 0x9f, 0x54, 0xb2, 0x32, 0x3e, 0x55, 0x51, 0xce, - 0x0a, 0x9c, 0xf1, 0x35, 0x35, 0xe0, 0xac, 0xa0, 0x32, 0x3e, 0x17, 0x69, 0x59, 0x3d, 0xaa, 0x87, - 0x4d, 0xbf, 0xd5, 0x23, 0x7b, 0x9c, 0xbc, 0x13, 0x42, 0xcc, 0xb0, 0xd5, 0x04, 0x30, 0xcb, 0xcf, - 0xd3, 0xd9, 0x59, 0x31, 0xad, 0xc3, 0xf8, 0x91, 0x3f, 0x42, 0x2d, 0x84, 0x18, 0xb6, 0x08, 0x54, - 0x79, 0xfb, 0x67, 0x93, 0x18, 0xa9, 0xae, 0xb4, 0x57, 0xb2, 0xf9, 0x21, 0xcc, 0xe2, 0x64, 0xa5, - 0xfa, 0xff, 0x27, 0xa1, 0x8e, 0x87, 0x69, 0x5d, 0x88, 0x4f, 0xaf, 0xa9, 0xa5, 0xca, 0xf3, 0xdf, - 0x83, 0xe8, 0x5e, 0x53, 0xfd, 0x8b, 0x38, 0x9f, 0x81, 0x6a, 0x4f, 0x59, 0xfa, 0xed, 0x7c, 0x7a, - 0x0a, 0x15, 0x8f, 0x4b, 0x3e, 0xfc, 0xc2, 0x5f, 0xc9, 0x90, 0x8e, 0x2e, 0xdb, 0x8f, 0xbe, 0x95, - 0xae, 0x69, 0xf5, 0x71, 0x3d, 0xb0, 0xa9, 0x21, 0xc0, 0x6d, 0x75, 0x21, 0xc1, 0x03, 0xc0, 0x9d, - 0x10, 0x62, 0x5a, 0x5d, 0x08, 0x0e, 0xf2, 0x65, 0xca, 0x61, 0x1f, 0x72, 0x28, 0xdb, 0xad, 0x2e, - 0x55, 0x5d, 0x84, 0x68, 0x75, 0x02, 0x35, 0x83, 0x8d, 0xe3, 0x4d, 0x4f, 0x8e, 0xeb, 0x01, 0x23, - 0xad, 0xe9, 0x71, 0xa3, 0x1f, 0x6c, 0x56, 0x77, 0x96, 0xcf, 0x53, 0x58, 0xb2, 0x4b, 0xbc, 0xba, - 0xb3, 0x4d, 0x48, 0x80, 0x58, 0xdd, 0x79, 0x41, 0x33, 0x83, 0x59, 0x7e, 0x5e, 0xa5, 0x70, 0x85, - 0x66, 0x30, 0x5b, 0xb9, 0x16, 0x13, 0x33, 0x98, 0x07, 0x53, 0x1e, 0x8e, 0xa3, 0x5f, 0x13, 0xc2, - 0x3f, 0x62, 0x69, 0x3e, 0xbc, 0xe9, 0x51, 0xaa, 0x05, 0xda, 0xea, 0x2d, 0x1a, 0x40, 0x25, 0xae, - 0x7f, 0xdd, 0x89, 0xf3, 0x04, 0x32, 0x6f, 0x89, 0x8d, 0x38, 0x58, 0x62, 0x07, 0x33, 0xa9, 0x83, - 0x10, 0xd6, 0xe3, 0xd7, 0xf8, 0x22, 0x2e, 0xd3, 0x7c, 0x36, 0xf4, 0xe9, 0x5a, 0x72, 0x22, 0x75, - 0xf0, 0x71, 0x28, 0x84, 0x95, 0xe2, 0x76, 0x51, 0x94, 0xf5, 0xb0, 0xe8, 0x0b, 0x61, 0x17, 0x09, - 0x86, 0x70, 0x0b, 0xf5, 0x7b, 0xdb, 0x85, 0x24, 0x4b, 0xf3, 0xa0, 0x37, 0x85, 0xf4, 0xf1, 0x66, - 0x50, 0x14, 0xbc, 0x87, 0x10, 0x2f, 0xa1, 0xa9, 0x99, 0xef, 0xc9, 0xd8, 0x40, 0x30, 0x78, 0x11, - 0x68, 0xd6, 0x69, 0x42, 0x7c, 0x14, 0x5f, 0x42, 0xfd, 0x80, 0xa1, 0x9e, 0xd7, 0x86, 0x3e, 0x7d, - 0x87, 0x20, 0xd6, 0x69, 0x7e, 0x52, 0xb9, 0x5a, 0x44, 0x1f, 0x08, 0xf9, 0x49, 0x5c, 0xf2, 0x34, - 0x49, 0x8b, 0x38, 0x6f, 0xf2, 0x7f, 0x5f, 0xbf, 0x6e, 0x51, 0xda, 0xe5, 0x66, 0x4f, 0x5a, 0xb9, - 0xfd, 0xcf, 0x41, 0x74, 0x1b, 0xfb, 0x3d, 0x81, 0x72, 0x9e, 0x8a, 0x65, 0x64, 0x25, 0x07, 0xe1, - 0xe1, 0xe7, 0x61, 0xa3, 0x2d, 0x05, 0x5d, 0x9a, 0x1f, 0x5e, 0x5f, 0x51, 0x15, 0xec, 0x8f, 0xa3, - 0x48, 0x2e, 0x57, 0xc4, 0x92, 0xd2, 0xed, 0xb5, 0x6a, 0x1d, 0xe3, 0xac, 0x27, 0x6f, 0x07, 0x08, - 0x33, 0x55, 0xc8, 0xdf, 0xc5, 0x4a, 0x79, 0xe8, 0xd5, 0x10, 0x22, 0x62, 0xaa, 0x40, 0x08, 0x2e, - 0xe8, 0xf8, 0x82, 0x5d, 0xf9, 0x0b, 0x5a, 0x4b, 0xc2, 0x05, 0x55, 0x84, 0xd9, 0xbb, 0x52, 0x05, - 0xf5, 0xed, 0x5d, 0x35, 0xc5, 0x08, 0xed, 0x5d, 0x61, 0x46, 0x19, 0x66, 0xd1, 0x6f, 0xdb, 0x86, - 0x9f, 0x33, 0x76, 0x39, 0x8f, 0xcb, 0xcb, 0xe1, 0x63, 0x5a, 0xb9, 0x61, 0xb4, 0xa3, 0xf5, 0x5e, - 0xac, 0x19, 0x16, 0x6c, 0x87, 0x75, 0xa2, 0x71, 0x56, 0x66, 0x68, 0x58, 0x70, 0x6c, 0x28, 0x84, - 0x18, 0x16, 0x08, 0xd4, 0x24, 0xd0, 0xca, 0xdb, 0x45, 0x2c, 0xd6, 0xed, 0xfe, 0x87, 0x22, 0x85, - 0x44, 0x02, 0xdd, 0x82, 0xcc, 0xac, 0x60, 0xd7, 0x64, 0x0c, 0x78, 0x25, 0xe6, 0x14, 0x6d, 0x0c, - 0xd4, 0x4a, 0xcc, 0x83, 0xe1, 0xf0, 0xdc, 0x2f, 0xe3, 0xe2, 0xc2, 0x1f, 0x9e, 0x42, 0x14, 0x0e, - 0xcf, 0x06, 0xc1, 0xb1, 0x34, 0x86, 0xb8, 0x4c, 0x2e, 0xfc, 0xb1, 0x24, 0x65, 0xe1, 0x58, 0xd2, - 0x0c, 0x8e, 0x25, 0x29, 0x78, 0x9d, 0xf2, 0x8b, 0x23, 0xe0, 0xb1, 0x3f, 0x96, 0x5c, 0x26, 0x1c, - 0x4b, 0x2d, 0xd6, 0x64, 0x49, 0xb6, 0xc3, 0xf1, 0xe2, 0x4d, 0x95, 0x94, 0xe9, 0x1b, 0x18, 0x06, - 0xac, 0x68, 0x88, 0xc8, 0x92, 0x48, 0xd8, 0x4c, 0x00, 0xca, 0x67, 0x23, 0x3b, 0x98, 0x56, 0x68, - 0x02, 0x68, 0x6c, 0x58, 0x04, 0x31, 0x01, 0xf8, 0x49, 0x5c, 0xbd, 0xfd, 0x92, 0x2d, 0x8a, 0xaa, - 0xa3, 0x7a, 0x08, 0x0a, 0x57, 0xaf, 0x0d, 0x2b, 0x9f, 0x6f, 0xa3, 0xdf, 0xb5, 0x1f, 0xe9, 0x59, - 0x5e, 0x69, 0xaf, 0x9b, 0xf4, 0x73, 0xb2, 0x30, 0x62, 0xcb, 0x2b, 0x80, 0x9b, 0x14, 0xa8, 0xf1, - 0xcc, 0x77, 0x81, 0xc7, 0x69, 0x56, 0x0d, 0x1f, 0xf8, 0x6d, 0x34, 0x72, 0x22, 0x05, 0xf2, 0x71, - 0xb8, 0xcf, 0xee, 0x2e, 0x8a, 0x2c, 0x4d, 0xda, 0x7b, 0x9f, 0x4a, 0x57, 0x8b, 0xc3, 0x7d, 0xd6, - 0xc6, 0xf0, 0xf8, 0x36, 0x06, 0x2e, 0xff, 0x33, 0x59, 0x15, 0xe0, 0x1f, 0xdf, 0x1c, 0x24, 0x3c, - 0xbe, 0x61, 0x14, 0xd7, 0x67, 0x0c, 0xfc, 0x30, 0x5e, 0xb1, 0x05, 0x31, 0x06, 0x69, 0x71, 0xb8, - 0x3e, 0x36, 0x66, 0xb2, 0x10, 0xed, 0xe1, 0x20, 0xe7, 0x50, 0xe6, 0x71, 0xb6, 0x97, 0xc5, 0xb3, - 0x6a, 0x48, 0xf4, 0x1b, 0x97, 0x22, 0xb2, 0x10, 0x9a, 0xf6, 0x3c, 0xc6, 0x83, 0x6a, 0x2f, 0x5e, - 0xb2, 0x32, 0xe5, 0xf4, 0x63, 0x34, 0x48, 0xe7, 0x63, 0x74, 0x50, 0xaf, 0xb7, 0xed, 0x32, 0xb9, - 0x48, 0x97, 0x30, 0x0d, 0x78, 0x6b, 0x90, 0x1e, 0xde, 0x2c, 0xd4, 0xd3, 0x68, 0x63, 0xb6, 0x28, - 0x13, 0x20, 0x1b, 0x4d, 0x8a, 0x3b, 0x1b, 0x4d, 0x63, 0xca, 0xc3, 0xdf, 0x0e, 0xa2, 0xdf, 0x93, - 0x52, 0x7b, 0x43, 0x72, 0x37, 0xae, 0x2e, 0xde, 0xb0, 0xb8, 0x9c, 0x0e, 0x3f, 0xf6, 0xd9, 0xf1, - 0xa2, 0xda, 0xf5, 0xd3, 0xeb, 0xa8, 0xe0, 0xc7, 0x7a, 0x98, 0x56, 0x56, 0x8f, 0xf3, 0x3e, 0x56, - 0x07, 0x09, 0x3f, 0x56, 0x8c, 0xe2, 0x01, 0x44, 0xc8, 0xe5, 0xe2, 0xff, 0x01, 0xa9, 0xef, 0xee, - 0x00, 0xac, 0x75, 0x72, 0x78, 0x7c, 0xac, 0x85, 0x6e, 0xb4, 0x6c, 0x52, 0x36, 0xfc, 0x11, 0x33, - 0xea, 0x8b, 0x93, 0x9e, 0x75, 0xaf, 0x08, 0x7b, 0x6e, 0xf5, 0x8c, 0x51, 0x5f, 0x9c, 0xf0, 0x6c, - 0x0d, 0x6b, 0x21, 0xcf, 0x9e, 0xa1, 0x6d, 0xd4, 0x17, 0xc7, 0x19, 0x85, 0x62, 0x9a, 0x79, 0xe1, - 0x71, 0xc0, 0x0e, 0x9e, 0x1b, 0xd6, 0x7b, 0xb1, 0xca, 0xe1, 0xdf, 0x0f, 0xa2, 0xef, 0x1b, 0x8f, - 0x47, 0x6c, 0x9a, 0x9e, 0xaf, 0x24, 0xf4, 0x2a, 0xce, 0x16, 0x50, 0x0d, 0x9f, 0x52, 0xd6, 0xda, - 0xac, 0x2e, 0xc1, 0xb3, 0x6b, 0xe9, 0xe0, 0xbe, 0xb3, 0x5d, 0x14, 0xd9, 0x6a, 0x02, 0xf3, 0x22, - 0x23, 0xfb, 0x8e, 0x83, 0x84, 0xfb, 0x0e, 0x46, 0x71, 0xa6, 0x39, 0x61, 0x75, 0x1e, 0xeb, 0xcd, - 0x34, 0x85, 0x28, 0x9c, 0x69, 0x36, 0x08, 0xce, 0x95, 0x26, 0x6c, 0x87, 0x65, 0x19, 0x24, 0xbc, - 0x7d, 0xa8, 0xa9, 0x35, 0x0d, 0x11, 0xce, 0x95, 0x10, 0x69, 0xd6, 0xff, 0xcd, 0x9a, 0x2b, 0x2e, - 0xe1, 0xf9, 0xea, 0x30, 0xcd, 0x2f, 0x87, 0xfe, 0xb4, 0xc0, 0x00, 0xc4, 0xfa, 0xdf, 0x0b, 0xe2, - 0xb5, 0xdd, 0x59, 0x3e, 0x65, 0xfe, 0xb5, 0x5d, 0x2d, 0x09, 0xaf, 0xed, 0x14, 0x81, 0x4d, 0x9e, - 0x02, 0x65, 0xb2, 0x96, 0x84, 0x4d, 0x2a, 0xc2, 0x37, 0x14, 0xaa, 0x5d, 0x62, 0x72, 0x28, 0x44, - 0xfb, 0xc2, 0x6b, 0x9d, 0x1c, 0x8e, 0xd0, 0x66, 0x91, 0xb7, 0x07, 0x3c, 0xb9, 0xf0, 0x47, 0xa8, - 0x83, 0x84, 0x23, 0x14, 0xa3, 0xb8, 0x4a, 0x13, 0xa6, 0x17, 0xa9, 0x0f, 0xfc, 0xf1, 0xd1, 0x5a, - 0xa0, 0xae, 0x75, 0x72, 0x78, 0x69, 0x74, 0x30, 0x17, 0xcf, 0xcc, 0x1b, 0xe4, 0x52, 0x16, 0x5e, - 0x1a, 0x69, 0x06, 0x97, 0x5e, 0x0a, 0xea, 0xc7, 0xe9, 0x2f, 0xbd, 0x91, 0x87, 0x4b, 0xef, 0x70, - 0xca, 0xc9, 0xbf, 0x0f, 0xa2, 0x9b, 0xb6, 0x97, 0x63, 0x56, 0xf7, 0x91, 0x57, 0x71, 0x96, 0x4e, - 0x63, 0x0e, 0x13, 0x76, 0x09, 0x39, 0xda, 0xb7, 0x71, 0x4b, 0x2b, 0xf9, 0x91, 0xa3, 0x40, 0xec, - 0xdb, 0xf4, 0x52, 0xc4, 0x71, 0x22, 0xe9, 0xb3, 0x0a, 0x76, 0xe2, 0x8a, 0x18, 0xc9, 0x1c, 0x24, - 0x1c, 0x27, 0x18, 0xc5, 0xf9, 0xaa, 0x94, 0xbf, 0x78, 0x5b, 0x40, 0x99, 0x42, 0x9e, 0x80, 0x3f, - 0x5f, 0xc5, 0x54, 0x38, 0x5f, 0xf5, 0xd0, 0xad, 0x6d, 0x0d, 0x3d, 0x38, 0xb5, 0xef, 0x25, 0x60, - 0x22, 0x70, 0x2f, 0x81, 0x40, 0x71, 0x25, 0x0d, 0xe0, 0xdd, 0x1a, 0x6c, 0x59, 0x09, 0x6e, 0x0d, - 0xd2, 0x74, 0x6b, 0xb3, 0x48, 0x33, 0xe3, 0xba, 0x9b, 0x74, 0x14, 0x7d, 0x6c, 0x77, 0x97, 0xf5, - 0x5e, 0xac, 0x7f, 0x77, 0xea, 0x14, 0xb2, 0x58, 0x4c, 0x21, 0x81, 0x2d, 0xa0, 0x86, 0xe9, 0xb3, - 0x3b, 0x65, 0xb1, 0xca, 0xe1, 0x5f, 0x0f, 0xa2, 0x8f, 0x7c, 0x1e, 0x5f, 0x16, 0xc2, 0xef, 0x93, - 0x6e, 0x5b, 0x92, 0x24, 0x2e, 0x5e, 0x84, 0x35, 0x54, 0x19, 0xfe, 0x3c, 0xfa, 0xb0, 0x11, 0x99, - 0x7b, 0x19, 0xaa, 0x00, 0x6e, 0x02, 0xa5, 0xcb, 0x8f, 0x39, 0xed, 0x7e, 0xab, 0x37, 0x6f, 0xd6, - 0x26, 0x6e, 0xb9, 0x2a, 0xb4, 0x36, 0xd1, 0x36, 0x94, 0x98, 0x58, 0x9b, 0x78, 0x30, 0x3c, 0x53, - 0x37, 0x48, 0xdd, 0x4f, 0x7c, 0x63, 0x9c, 0x36, 0x61, 0xf7, 0x92, 0x87, 0xdd, 0x20, 0x8e, 0x9d, - 0x46, 0xac, 0x96, 0x04, 0x8f, 0x43, 0x16, 0xd0, 0xb2, 0x60, 0xbd, 0x17, 0xab, 0x1c, 0xfe, 0x65, - 0xf4, 0xbd, 0x56, 0xc5, 0xf6, 0x20, 0xe6, 0x8b, 0x12, 0xa6, 0xc3, 0xad, 0x8e, 0x72, 0x37, 0xa0, - 0x76, 0xfd, 0xa4, 0xbf, 0x42, 0x2b, 0x77, 0x6d, 0x38, 0xd9, 0xc4, 0xba, 0x0c, 0x4f, 0x43, 0x26, - 0x5d, 0x36, 0x98, 0xbb, 0xd2, 0x3a, 0xad, 0xe5, 0xa7, 0x1d, 0xc8, 0xdb, 0xcb, 0x38, 0xcd, 0xc4, - 0x71, 0xc9, 0xc7, 0x21, 0xa3, 0x0e, 0x1a, 0x5c, 0x7e, 0x92, 0x2a, 0xad, 0x51, 0x52, 0xf4, 0x37, - 0x6b, 0xd9, 0xb2, 0x41, 0xf7, 0x4a, 0xcf, 0xaa, 0x65, 0xb3, 0x27, 0xad, 0xdc, 0xf2, 0x66, 0xdb, - 0xae, 0xfe, 0xd9, 0x0e, 0x72, 0x9f, 0x57, 0xa5, 0xea, 0x89, 0xf4, 0xcd, 0x9e, 0xb4, 0xf2, 0xfa, - 0x17, 0xd1, 0x87, 0x6d, 0xaf, 0x6a, 0x52, 0xd8, 0xea, 0x34, 0x85, 0xe6, 0x85, 0x27, 0xfd, 0x15, - 0x4c, 0xaa, 0xff, 0x65, 0x5a, 0x71, 0x56, 0xae, 0xc6, 0x17, 0xec, 0xaa, 0xb9, 0x7b, 0xec, 0xf6, - 0x56, 0x05, 0x8c, 0x2c, 0x82, 0x48, 0xf5, 0xfd, 0x64, 0xcb, 0x95, 0xb9, 0xa3, 0x5c, 0x11, 0xae, - 0x2c, 0xa2, 0xc3, 0x95, 0x4b, 0x9a, 0xb1, 0xaa, 0xa9, 0x95, 0xb9, 0x50, 0xbd, 0xe6, 0x2f, 0x6a, - 0xfb, 0x52, 0xf5, 0xc3, 0x6e, 0xd0, 0x64, 0x0f, 0x4a, 0xbc, 0x9b, 0x9e, 0x9f, 0xeb, 0x3a, 0xf9, - 0x4b, 0x6a, 0x23, 0x44, 0xf6, 0x40, 0xa0, 0x26, 0x19, 0xdd, 0x4b, 0x33, 0x10, 0x67, 0x6f, 0x2f, - 0xcf, 0xcf, 0x33, 0x16, 0x4f, 0x51, 0x32, 0x5a, 0x8b, 0x47, 0xb6, 0x9c, 0x48, 0x46, 0x7d, 0x9c, - 0x39, 0x79, 0xa9, 0xa5, 0xa7, 0x90, 0xb0, 0x3c, 0x49, 0x33, 0x7c, 0x15, 0x4b, 0x68, 0x6a, 0x21, - 0x71, 0xf2, 0xd2, 0x82, 0xcc, 0x24, 0x55, 0x8b, 0xea, 0x6e, 0xdf, 0x94, 0xff, 0x7e, 0x5b, 0xd1, - 0x12, 0x13, 0x93, 0x94, 0x07, 0x33, 0x6b, 0xb2, 0x5a, 0x78, 0x56, 0x08, 0xe3, 0xb7, 0xda, 0x5a, - 0x52, 0x42, 0xac, 0xc9, 0x5c, 0xc2, 0xac, 0x2d, 0xea, 0xdf, 0x77, 0xd9, 0x55, 0x2e, 0x8c, 0xde, - 0x69, 0xab, 0x34, 0x32, 0x62, 0x6d, 0x81, 0x19, 0x65, 0xf8, 0xc7, 0xd1, 0xaf, 0x0a, 0xc3, 0x25, - 0x2b, 0x86, 0x37, 0x3c, 0x0a, 0xa5, 0x75, 0x6b, 0xea, 0x26, 0x29, 0x37, 0x97, 0xff, 0x74, 0x6c, - 0x9c, 0x55, 0xf1, 0x0c, 0x86, 0xf7, 0x88, 0x16, 0x17, 0x52, 0xe2, 0xf2, 0x5f, 0x9b, 0x72, 0xa3, - 0xe2, 0x98, 0x4d, 0x95, 0x75, 0x4f, 0x0d, 0xb5, 0x30, 0x14, 0x15, 0x36, 0x64, 0x8e, 0x4b, 0x8e, - 0xe3, 0x65, 0x3a, 0xd3, 0x13, 0x8e, 0x1c, 0xb7, 0x2a, 0x74, 0x5c, 0x62, 0x98, 0x91, 0x05, 0x11, - 0xc7, 0x25, 0x24, 0xac, 0x7c, 0xfe, 0xdb, 0x20, 0xba, 0x65, 0x98, 0xfd, 0x66, 0x17, 0xeb, 0x20, - 0x3f, 0x67, 0xaf, 0x53, 0x7e, 0x71, 0x98, 0xe6, 0x97, 0xd5, 0xf0, 0x33, 0xca, 0xa4, 0x9f, 0xd7, - 0x45, 0xf9, 0xfc, 0xda, 0x7a, 0x26, 0x83, 0x6c, 0xb6, 0x78, 0xcc, 0xb9, 0xa8, 0xd4, 0x40, 0x19, - 0xa4, 0xde, 0x09, 0xc2, 0x1c, 0x91, 0x41, 0x86, 0x78, 0xd3, 0xc4, 0xda, 0x79, 0xc6, 0x72, 0xdc, - 0xc4, 0xc6, 0x42, 0x2d, 0x24, 0x9a, 0xb8, 0x05, 0x99, 0xf1, 0xb8, 0x11, 0xc9, 0xdd, 0x88, 0xed, - 0x2c, 0x43, 0xe3, 0xb1, 0x56, 0xd5, 0x00, 0x31, 0x1e, 0x7b, 0x41, 0xe5, 0xe7, 0x34, 0xfa, 0x4e, - 0xfd, 0x48, 0x4f, 0x4a, 0x58, 0xa6, 0x80, 0x8f, 0xf0, 0x2d, 0x09, 0xd1, 0xff, 0x5d, 0xc2, 0xf4, - 0xac, 0xb3, 0xbc, 0x2a, 0xb2, 0xb8, 0xba, 0x50, 0x07, 0xaf, 0x6e, 0x9d, 0x1b, 0x21, 0x3e, 0x7a, - 0xbd, 0xdf, 0x41, 0x99, 0x41, 0xbd, 0x91, 0xe9, 0x21, 0xe6, 0x81, 0x5f, 0xb5, 0x35, 0xcc, 0xac, - 0x75, 0x72, 0x66, 0x27, 0x78, 0x3f, 0xce, 0x32, 0x28, 0x57, 0x8d, 0xec, 0x28, 0xce, 0xd3, 0x73, - 0xa8, 0x38, 0xda, 0x09, 0x56, 0xd4, 0x08, 0x63, 0xc4, 0x4e, 0x70, 0x00, 0x37, 0xd9, 0x3c, 0xf2, - 0x7c, 0x90, 0x4f, 0xe1, 0x2d, 0xca, 0xe6, 0xb1, 0x1d, 0xc1, 0x10, 0xd9, 0x3c, 0xc5, 0x9a, 0x1d, - 0xd1, 0xe7, 0x19, 0x4b, 0x2e, 0xd5, 0x14, 0xe0, 0x36, 0xb0, 0x90, 0xe0, 0x39, 0xe0, 0x4e, 0x08, - 0x31, 0x93, 0x80, 0x10, 0x9c, 0x42, 0x91, 0xc5, 0x09, 0xbe, 0xc7, 0x21, 0x75, 0x94, 0x8c, 0x98, - 0x04, 0x30, 0x83, 0x8a, 0xab, 0xee, 0x87, 0xf8, 0x8a, 0x8b, 0xae, 0x87, 0xdc, 0x09, 0x21, 0x66, - 0x1a, 0x14, 0x82, 0x71, 0x91, 0xa5, 0x1c, 0x75, 0x03, 0xa9, 0x21, 0x24, 0x44, 0x37, 0x70, 0x09, - 0x64, 0xf2, 0x08, 0xca, 0x19, 0x78, 0x4d, 0x0a, 0x49, 0xd0, 0x64, 0x43, 0x98, 0xeb, 0x7e, 0xb2, - 0xee, 0xac, 0x58, 0xa1, 0xeb, 0x7e, 0xaa, 0x5a, 0xac, 0x58, 0x11, 0xd7, 0xfd, 0x1c, 0x00, 0x15, - 0xf1, 0x24, 0xae, 0xb8, 0xbf, 0x88, 0x42, 0x12, 0x2c, 0x62, 0x43, 0x98, 0x39, 0x5a, 0x16, 0x71, - 0xc1, 0xd1, 0x1c, 0xad, 0x0a, 0x60, 0x9d, 0xcc, 0xde, 0x24, 0xe5, 0x66, 0x24, 0x91, 0xad, 0x02, - 0x7c, 0x2f, 0x85, 0x6c, 0x5a, 0xa1, 0x91, 0x44, 0x3d, 0xf7, 0x46, 0x4a, 0x8c, 0x24, 0x6d, 0x0a, - 0x85, 0x92, 0xda, 0x37, 0xf6, 0xd5, 0x0e, 0x6d, 0x19, 0xdf, 0x09, 0x21, 0x66, 0x7c, 0x6a, 0x0a, - 0xbd, 0x13, 0x97, 0x65, 0x5a, 0x4f, 0xfe, 0x0f, 0xfc, 0x05, 0x6a, 0xe4, 0xc4, 0xf8, 0xe4, 0xe3, - 0x50, 0xf7, 0x6a, 0x06, 0x6e, 0x5f, 0xc1, 0xf0, 0xd0, 0x7d, 0x37, 0xc8, 0x98, 0x8c, 0x53, 0x48, - 0xac, 0xa3, 0x45, 0xdf, 0xd3, 0xf4, 0x9c, 0x2c, 0x3e, 0xe8, 0xc2, 0xac, 0xeb, 0xf8, 0xda, 0xc5, - 0x11, 0x5b, 0xc2, 0x84, 0xbd, 0x78, 0x9b, 0x56, 0x3c, 0xcd, 0x67, 0x6a, 0xe6, 0x7e, 0x46, 0x58, - 0xf2, 0xc1, 0xc4, 0x75, 0xfc, 0x4e, 0x25, 0x93, 0x40, 0xa0, 0xb2, 0x1c, 0xc3, 0x95, 0x37, 0x81, - 0xc0, 0x16, 0x35, 0x47, 0x24, 0x10, 0x21, 0xde, 0xec, 0xa3, 0x68, 0xe7, 0xea, 0x9d, 0xc5, 0x09, - 0x6b, 0x72, 0x39, 0xca, 0x1a, 0x06, 0x89, 0xa5, 0x6c, 0x50, 0xc1, 0xac, 0x2f, 0xb5, 0x7f, 0xd3, - 0xc5, 0x1e, 0x12, 0x76, 0xda, 0xdd, 0xec, 0x51, 0x0f, 0xd2, 0xe3, 0xca, 0x9c, 0x8f, 0x53, 0xae, - 0xda, 0xc7, 0xe3, 0x8f, 0x7a, 0x90, 0xd6, 0x9e, 0x8c, 0x5d, 0xad, 0xe7, 0x71, 0x72, 0x39, 0x2b, - 0xd9, 0x22, 0x9f, 0xee, 0xb0, 0x8c, 0x95, 0x68, 0x4f, 0xc6, 0x29, 0x35, 0x42, 0x89, 0x3d, 0x99, - 0x0e, 0x15, 0x93, 0xc1, 0xd9, 0xa5, 0xd8, 0xce, 0xd2, 0x19, 0x5e, 0x51, 0x3b, 0x86, 0x04, 0x40, - 0x64, 0x70, 0x5e, 0xd0, 0x13, 0x44, 0x72, 0xc5, 0xcd, 0xd3, 0x24, 0xce, 0xa4, 0xbf, 0x2d, 0xda, - 0x8c, 0x03, 0x76, 0x06, 0x91, 0x47, 0xc1, 0x53, 0xcf, 0xc9, 0xa2, 0xcc, 0x0f, 0x72, 0xce, 0xc8, - 0x7a, 0x36, 0x40, 0x67, 0x3d, 0x2d, 0x10, 0x0d, 0xab, 0x13, 0x78, 0x5b, 0x97, 0xa6, 0xfe, 0xc7, - 0x37, 0xac, 0xd6, 0xbf, 0x8f, 0x94, 0x3c, 0x34, 0xac, 0x22, 0x0e, 0x55, 0x46, 0x39, 0x91, 0x01, - 0x13, 0xd0, 0x76, 0xc3, 0xe4, 0x61, 0x37, 0xe8, 0xf7, 0x33, 0xe6, 0xab, 0x0c, 0x42, 0x7e, 0x04, - 0xd0, 0xc7, 0x4f, 0x03, 0x9a, 0xed, 0x16, 0xa7, 0x3e, 0x17, 0x90, 0x5c, 0xb6, 0xae, 0xfb, 0xb8, - 0x05, 0x95, 0x08, 0xb1, 0xdd, 0x42, 0xa0, 0xfe, 0x26, 0x3a, 0x48, 0x58, 0x1e, 0x6a, 0xa2, 0x5a, - 0xde, 0xa7, 0x89, 0x14, 0x67, 0x16, 0xbf, 0x5a, 0xaa, 0x22, 0x53, 0x36, 0xd3, 0x3a, 0x61, 0xc1, - 0x86, 0x88, 0xc5, 0x2f, 0x09, 0x9b, 0x9c, 0x1c, 0xfb, 0x3c, 0x6a, 0xdf, 0x1d, 0x6e, 0x59, 0x39, - 0xa2, 0xef, 0x0e, 0x53, 0x2c, 0x5d, 0x49, 0x19, 0x23, 0x1d, 0x56, 0xdc, 0x38, 0xd9, 0xe8, 0x07, - 0x9b, 0x25, 0x8f, 0xe3, 0x73, 0x27, 0x83, 0xb8, 0x94, 0x5e, 0x37, 0x03, 0x86, 0x0c, 0x46, 0x2c, - 0x79, 0x02, 0x38, 0x1a, 0xc2, 0x1c, 0xcf, 0x3b, 0x2c, 0xe7, 0x90, 0x73, 0xdf, 0x10, 0xe6, 0x1a, - 0x53, 0x60, 0x68, 0x08, 0xa3, 0x14, 0x50, 0xdc, 0x8a, 0xfd, 0x20, 0xe0, 0xc7, 0xf1, 0xdc, 0x9b, - 0xb1, 0xc9, 0xbd, 0x1e, 0x29, 0x0f, 0xc5, 0x2d, 0xe2, 0xac, 0x03, 0x37, 0xdb, 0xcb, 0x24, 0x2e, - 0x67, 0x7a, 0x77, 0x63, 0x3a, 0x7c, 0x42, 0xdb, 0x71, 0x49, 0xe2, 0xc0, 0x2d, 0xac, 0x81, 0x86, - 0x9d, 0x83, 0x79, 0x3c, 0xd3, 0x35, 0xf5, 0xd4, 0x40, 0xc8, 0x5b, 0x55, 0x7d, 0xd8, 0x0d, 0x22, - 0x3f, 0xaf, 0xd2, 0x29, 0xb0, 0x80, 0x1f, 0x21, 0xef, 0xe3, 0x07, 0x83, 0x28, 0x7b, 0xab, 0xeb, - 0x2d, 0x57, 0x74, 0xdb, 0xf9, 0x54, 0xad, 0x63, 0x47, 0xc4, 0xe3, 0x41, 0x5c, 0x28, 0x7b, 0x23, - 0x78, 0xd4, 0x47, 0x9b, 0x0d, 0xda, 0x50, 0x1f, 0xd5, 0xfb, 0xaf, 0x7d, 0xfa, 0xa8, 0x0f, 0x56, - 0x3e, 0x7f, 0xaa, 0xfa, 0xe8, 0x6e, 0xcc, 0xe3, 0x3a, 0x6f, 0x7f, 0x95, 0xc2, 0x95, 0x5a, 0x08, - 0x7b, 0xea, 0xdb, 0x50, 0x23, 0xf1, 0xd2, 0x18, 0x5a, 0x15, 0x6f, 0xf5, 0xe6, 0x03, 0xbe, 0xd5, - 0x0a, 0xa1, 0xd3, 0x37, 0x5a, 0x2a, 0x6c, 0xf5, 0xe6, 0x03, 0xbe, 0xd5, 0xdb, 0xa8, 0x9d, 0xbe, - 0xd1, 0x2b, 0xa9, 0x5b, 0xbd, 0x79, 0xe5, 0xfb, 0x6f, 0x9a, 0x8e, 0x6b, 0x3b, 0xaf, 0xf3, 0xb0, - 0x84, 0xa7, 0x4b, 0xf0, 0xa5, 0x93, 0xae, 0x3d, 0x8d, 0x86, 0xd2, 0x49, 0x5a, 0xc5, 0xfa, 0x84, - 0x89, 0xaf, 0x14, 0x27, 0xac, 0x4a, 0xc5, 0x81, 0xf9, 0xb3, 0x1e, 0x46, 0x1b, 0x38, 0xb4, 0x68, - 0x0a, 0x29, 0x99, 0xe3, 0x46, 0x07, 0x35, 0xb7, 0x7b, 0x37, 0x02, 0xf6, 0xda, 0x97, 0x7c, 0x37, - 0x7b, 0xd2, 0xe6, 0xe0, 0xcf, 0x61, 0xec, 0x13, 0xc7, 0x50, 0xab, 0x7a, 0x0f, 0x1d, 0x9f, 0xf4, - 0x57, 0x50, 0xee, 0xff, 0xae, 0x59, 0x57, 0x60, 0xff, 0xaa, 0x13, 0x3c, 0xed, 0x63, 0x11, 0x75, - 0x84, 0x67, 0xd7, 0xd2, 0x51, 0x05, 0xf9, 0xaf, 0x41, 0x74, 0xc7, 0x5b, 0x10, 0xf7, 0xec, 0xf9, - 0xf7, 0xfb, 0xd8, 0xf6, 0x9f, 0x41, 0x7f, 0xf1, 0x6d, 0x54, 0x55, 0xe9, 0xfe, 0xa9, 0x59, 0xde, - 0x37, 0x1a, 0xe2, 0x0d, 0x8c, 0x97, 0xe5, 0x14, 0x4a, 0xd5, 0x63, 0x43, 0x41, 0x67, 0x60, 0xdc, - 0x6f, 0x3f, 0xbd, 0xa6, 0x96, 0xf5, 0xb9, 0x1d, 0x07, 0x56, 0x6f, 0xd6, 0x59, 0xe5, 0x09, 0x59, - 0xb6, 0x68, 0x5c, 0xa0, 0xcf, 0xae, 0xab, 0x46, 0xf5, 0x64, 0x0b, 0x16, 0x6f, 0xef, 0x3f, 0xeb, - 0x69, 0xd8, 0x79, 0x9f, 0xff, 0x93, 0xeb, 0x29, 0xa9, 0xb2, 0xfc, 0x7c, 0x10, 0xdd, 0x77, 0x58, - 0x73, 0xda, 0x81, 0xf6, 0x64, 0x7e, 0x14, 0xb0, 0x4f, 0x29, 0xe9, 0xc2, 0xfd, 0xc1, 0xb7, 0x53, - 0x36, 0xdf, 0xa6, 0x71, 0x54, 0xf6, 0xd2, 0x8c, 0x43, 0xd9, 0xfe, 0x36, 0x8d, 0x6b, 0x57, 0x52, - 0x23, 0xfa, 0xdb, 0x34, 0x01, 0xdc, 0xfa, 0x36, 0x8d, 0xc7, 0xb3, 0xf7, 0xdb, 0x34, 0x5e, 0x6b, - 0xc1, 0x6f, 0xd3, 0x84, 0x35, 0xa8, 0xc9, 0xa7, 0x29, 0x82, 0xdc, 0x55, 0xef, 0x65, 0xd1, 0xdd, - 0x64, 0x7f, 0x7a, 0x1d, 0x15, 0x62, 0xfa, 0x95, 0x9c, 0xb8, 0x11, 0xd7, 0xe3, 0x99, 0x3a, 0xb7, - 0xe2, 0xb6, 0x7a, 0xf3, 0xca, 0xf7, 0x4f, 0xd4, 0xda, 0x4b, 0x4f, 0x36, 0xac, 0x14, 0xef, 0x37, - 0xae, 0x87, 0x26, 0x8f, 0xda, 0x82, 0xdd, 0xf2, 0x1b, 0xfd, 0x60, 0xa2, 0xba, 0x35, 0xa1, 0x1a, - 0x7d, 0xd4, 0x65, 0x08, 0x35, 0xf9, 0x56, 0x6f, 0x9e, 0x98, 0xe4, 0xa4, 0x6f, 0xd9, 0xda, 0x3d, - 0x8c, 0xb9, 0x6d, 0xfd, 0xa4, 0xbf, 0x82, 0x72, 0xbf, 0x54, 0x49, 0xad, 0xed, 0x5e, 0xb4, 0xf3, - 0x66, 0x97, 0xa9, 0xb1, 0xd3, 0xcc, 0xa3, 0xbe, 0x78, 0x28, 0xbd, 0xb1, 0x27, 0xf8, 0xae, 0xf4, - 0xc6, 0x3b, 0xc9, 0x7f, 0x72, 0x3d, 0x25, 0x55, 0x96, 0x7f, 0x1d, 0x44, 0x37, 0xc9, 0xb2, 0xa8, - 0x38, 0xf8, 0xac, 0xaf, 0x65, 0x14, 0x0f, 0x9f, 0x5f, 0x5b, 0x4f, 0x15, 0xea, 0x3f, 0x06, 0xd1, - 0xad, 0x40, 0xa1, 0x64, 0x80, 0x5c, 0xc3, 0xba, 0x1b, 0x28, 0x3f, 0xbc, 0xbe, 0x22, 0x35, 0xdd, - 0xdb, 0xf8, 0xb8, 0xfd, 0xd1, 0x96, 0x80, 0xed, 0x31, 0xfd, 0xd1, 0x96, 0x6e, 0x2d, 0xbc, 0x05, - 0x55, 0x27, 0x25, 0x6a, 0x65, 0xe4, 0xdb, 0x82, 0x12, 0x39, 0x0b, 0x5a, 0x11, 0xad, 0x75, 0x72, - 0x3e, 0x27, 0x2f, 0xde, 0x16, 0x71, 0x3e, 0xa5, 0x9d, 0x48, 0x79, 0xb7, 0x13, 0xcd, 0xe1, 0xad, - 0xbb, 0x5a, 0x7a, 0xca, 0x9a, 0x65, 0xde, 0x23, 0x4a, 0x5f, 0x23, 0xc1, 0xad, 0xbb, 0x16, 0x4a, - 0x78, 0x53, 0x39, 0x6d, 0xc8, 0x1b, 0x4a, 0x65, 0x1f, 0xf7, 0x41, 0xd1, 0x02, 0x42, 0x7b, 0xd3, - 0x27, 0x02, 0x1b, 0x21, 0x2b, 0xad, 0x53, 0x81, 0xcd, 0x9e, 0x34, 0xe1, 0x76, 0x0c, 0xfc, 0x4b, - 0x88, 0xa7, 0x50, 0x06, 0xdd, 0x6a, 0xaa, 0x97, 0x5b, 0x9b, 0xf6, 0xb9, 0xdd, 0x61, 0xd9, 0x62, - 0x9e, 0xab, 0xc6, 0x24, 0xdd, 0xda, 0x54, 0xb7, 0x5b, 0x44, 0xe3, 0x4d, 0x4b, 0xe3, 0x56, 0xa4, - 0x97, 0x8f, 0xc3, 0x66, 0x9c, 0xac, 0x72, 0xbd, 0x17, 0x4b, 0xd7, 0x53, 0x85, 0x51, 0x47, 0x3d, - 0x51, 0x24, 0x6d, 0xf6, 0xa4, 0xf1, 0xee, 0xa1, 0xe5, 0x56, 0xc7, 0xd3, 0x56, 0x87, 0xad, 0x56, - 0x48, 0x3d, 0xe9, 0xaf, 0x80, 0xf7, 0x6a, 0x55, 0x54, 0xd5, 0xeb, 0xa2, 0xbd, 0x34, 0xcb, 0x86, - 0xeb, 0x81, 0x30, 0x69, 0xa0, 0xe0, 0x5e, 0xad, 0x07, 0x26, 0x22, 0xb9, 0xd9, 0xdb, 0xcc, 0x87, - 0x5d, 0x76, 0x04, 0xd5, 0x2b, 0x92, 0x6d, 0x1a, 0xed, 0xb7, 0x59, 0x8f, 0x5a, 0xd7, 0x76, 0x14, - 0x7e, 0x70, 0xad, 0x0a, 0x6f, 0xf5, 0xe6, 0xd1, 0x65, 0x00, 0x41, 0x89, 0x99, 0xe5, 0x1e, 0x65, - 0xc2, 0x99, 0x49, 0xee, 0x77, 0x50, 0x68, 0xcf, 0x52, 0x76, 0xa3, 0xd7, 0xe9, 0x74, 0x06, 0xdc, - 0x7b, 0x8e, 0x65, 0x03, 0xc1, 0x73, 0x2c, 0x04, 0xa2, 0xa6, 0x93, 0xbf, 0xeb, 0xcd, 0xda, 0x83, - 0xa9, 0xaf, 0xe9, 0x94, 0xb2, 0x45, 0x85, 0x9a, 0xce, 0x4b, 0xa3, 0xd1, 0x40, 0xbb, 0x55, 0x2f, - 0xd1, 0x3f, 0x0e, 0x99, 0x41, 0x6f, 0xd2, 0xaf, 0xf7, 0x62, 0xd1, 0x8c, 0x62, 0x1c, 0xa6, 0xf3, - 0x94, 0xfb, 0x66, 0x14, 0xcb, 0x46, 0x8d, 0x84, 0x66, 0x94, 0x36, 0x4a, 0x55, 0xaf, 0xce, 0x11, - 0x0e, 0xa6, 0xe1, 0xea, 0x49, 0xa6, 0x5f, 0xf5, 0x34, 0xdb, 0x3a, 0x76, 0xcd, 0x75, 0xc8, 0xf0, - 0x0b, 0xb5, 0x58, 0xf6, 0xc4, 0xb6, 0x78, 0xb9, 0x12, 0x83, 0xa1, 0x51, 0x87, 0x52, 0xc0, 0xc7, - 0x09, 0x35, 0xd7, 0x9c, 0x0c, 0x17, 0x05, 0xc4, 0x65, 0x9c, 0x27, 0xde, 0xc5, 0xa9, 0x30, 0xd8, - 0x22, 0x43, 0x8b, 0x53, 0x52, 0x03, 0x1d, 0xea, 0xbb, 0xaf, 0x45, 0x7a, 0xba, 0x82, 0x7e, 0xff, - 0xd0, 0x7d, 0x2b, 0xf2, 0x51, 0x0f, 0x12, 0x1f, 0xea, 0x37, 0x80, 0xde, 0x96, 0x97, 0x4e, 0x3f, - 0x0e, 0x98, 0x72, 0xd1, 0xd0, 0x42, 0x98, 0x56, 0x41, 0x41, 0xad, 0x13, 0x5c, 0xe0, 0x3f, 0x86, - 0x95, 0x2f, 0xa8, 0x4d, 0x7e, 0x2a, 0x90, 0x50, 0x50, 0xb7, 0x51, 0x94, 0x67, 0xda, 0xeb, 0xa0, - 0x07, 0x01, 0x7d, 0x7b, 0xe9, 0xb3, 0xd6, 0xc9, 0xa1, 0x9e, 0xb3, 0x9b, 0x2e, 0x9d, 0x53, 0x0c, - 0x4f, 0x41, 0x77, 0xd3, 0xa5, 0xff, 0x10, 0x63, 0xbd, 0x17, 0x8b, 0x2f, 0x0c, 0xc4, 0x1c, 0xde, - 0x36, 0x27, 0xf9, 0x9e, 0xe2, 0x0a, 0x79, 0xeb, 0x28, 0xff, 0x61, 0x37, 0x68, 0xae, 0xe7, 0x9e, - 0x94, 0x2c, 0x81, 0xaa, 0x52, 0x5f, 0xb2, 0x73, 0xef, 0x3f, 0x29, 0xd9, 0x08, 0x7d, 0xc7, 0xee, - 0x5e, 0x18, 0x52, 0xb6, 0xbf, 0x8c, 0xde, 0x3d, 0x64, 0xb3, 0x31, 0xe4, 0xd3, 0xe1, 0x0f, 0xdc, - 0x0b, 0xb1, 0x6c, 0x36, 0xaa, 0x7f, 0xd6, 0xf6, 0x6e, 0x50, 0x62, 0x73, 0xa5, 0x6f, 0x17, 0xde, - 0x2c, 0x66, 0x63, 0x1e, 0x73, 0x74, 0xa5, 0x4f, 0xfc, 0x3e, 0xaa, 0x05, 0xc4, 0x95, 0x3e, 0x07, - 0x40, 0xf6, 0x26, 0x25, 0x80, 0xd7, 0x5e, 0x2d, 0x08, 0xda, 0x53, 0x80, 0x99, 0x75, 0xb5, 0xbd, - 0x3a, 0xb1, 0xc5, 0x57, 0xf0, 0x8c, 0x8e, 0x90, 0x12, 0xb3, 0x6e, 0x9b, 0x32, 0xc1, 0x20, 0xab, - 0x2f, 0xbe, 0xad, 0xb1, 0x98, 0xcf, 0xe3, 0x72, 0x85, 0x82, 0x41, 0xd5, 0xd2, 0x02, 0x88, 0x60, - 0xf0, 0x82, 0x26, 0xca, 0x9b, 0xc7, 0x9c, 0x5c, 0xee, 0xb3, 0x92, 0x2d, 0x78, 0x9a, 0x03, 0xfe, - 0xbe, 0x82, 0x7e, 0xa0, 0x36, 0x43, 0x44, 0x39, 0xc5, 0x9a, 0xac, 0x50, 0x10, 0xf2, 0x76, 0xa0, - 0xf8, 0x1e, 0x6c, 0xc5, 0x59, 0x89, 0x4f, 0x07, 0xa5, 0x15, 0x0c, 0x11, 0x59, 0x21, 0x09, 0xa3, - 0xb6, 0x3f, 0x49, 0xf3, 0x99, 0xb7, 0xed, 0x4f, 0xec, 0xaf, 0x29, 0xde, 0xa2, 0x01, 0x33, 0xbe, - 0xcb, 0x87, 0x26, 0xbf, 0x61, 0xa4, 0xde, 0x92, 0xf4, 0x3e, 0x74, 0x9b, 0x20, 0xc6, 0x77, 0x3f, - 0x89, 0x5c, 0xbd, 0x2c, 0x20, 0x87, 0x69, 0x73, 0x07, 0xce, 0xe7, 0xca, 0x21, 0x82, 0xae, 0x30, - 0x69, 0x46, 0x55, 0x21, 0x3f, 0x5d, 0xe4, 0x27, 0x25, 0x3b, 0x4f, 0x33, 0x28, 0xd1, 0xa8, 0x2a, - 0xd5, 0x2d, 0x39, 0x31, 0xaa, 0xfa, 0x38, 0x73, 0x99, 0x42, 0x48, 0x9d, 0x8f, 0x1a, 0x4f, 0xca, - 0x38, 0xc1, 0x97, 0x29, 0xa4, 0x8d, 0x36, 0x46, 0xec, 0xa4, 0x05, 0x70, 0x13, 0xe9, 0x47, 0xc0, - 0xcb, 0x34, 0xa9, 0xc6, 0xc0, 0x4f, 0xe2, 0x32, 0x9e, 0x03, 0x87, 0x12, 0x47, 0xba, 0x42, 0x46, - 0x0e, 0x43, 0x44, 0x3a, 0xc5, 0x2a, 0x87, 0x7f, 0x18, 0xbd, 0x5f, 0x0f, 0xf4, 0x90, 0xab, 0xef, - 0xef, 0xbf, 0x10, 0x7f, 0xb8, 0x63, 0xf8, 0x81, 0xb6, 0x31, 0xe6, 0x25, 0xc4, 0xf3, 0xc6, 0xf6, - 0x7b, 0xfa, 0x77, 0x01, 0x3e, 0x19, 0xd4, 0x0d, 0x72, 0xcc, 0x78, 0x7a, 0x5e, 0xaf, 0xab, 0xd4, - 0x29, 0x16, 0x6a, 0x10, 0x5b, 0x3c, 0x0a, 0x7c, 0x32, 0xc0, 0xc7, 0x99, 0x81, 0xc6, 0x96, 0x9e, - 0x42, 0x91, 0xe1, 0x81, 0xc6, 0xd1, 0x16, 0x00, 0x31, 0xd0, 0x78, 0x41, 0x13, 0x5d, 0xb6, 0x78, - 0x02, 0xe1, 0xca, 0x4c, 0xa0, 0x5f, 0x65, 0x26, 0xce, 0x3b, 0x02, 0x59, 0xf4, 0xfe, 0x11, 0xcc, - 0xdf, 0x40, 0x59, 0x5d, 0xa4, 0xc5, 0x7e, 0x3d, 0xc3, 0xc6, 0x7c, 0x81, 0xdf, 0xa2, 0x33, 0xc4, - 0x48, 0x23, 0x44, 0x1a, 0x42, 0xa0, 0x66, 0x28, 0x33, 0xc0, 0x41, 0x75, 0x1c, 0xcf, 0x41, 0x7c, - 0x00, 0x61, 0xb8, 0x4e, 0x19, 0xb1, 0x20, 0x62, 0x28, 0x23, 0x61, 0xeb, 0x75, 0x23, 0xc3, 0x9c, - 0xc2, 0xac, 0x8e, 0xb0, 0xf2, 0x24, 0x5e, 0xcd, 0x21, 0xe7, 0xca, 0x24, 0xda, 0x84, 0xb5, 0x4c, - 0xfa, 0x79, 0x62, 0x13, 0xb6, 0x8f, 0x9e, 0x95, 0x74, 0x3b, 0x0f, 0xfe, 0x84, 0x95, 0x5c, 0xfe, - 0x75, 0x8d, 0xb3, 0x32, 0x43, 0x49, 0xb7, 0xfb, 0x50, 0x1d, 0x92, 0x48, 0xba, 0xc3, 0x1a, 0xd6, - 0x67, 0xa9, 0x9d, 0x32, 0xbc, 0x82, 0x52, 0xc7, 0xc9, 0x8b, 0x79, 0x9c, 0x66, 0x2a, 0x1a, 0xbe, - 0x08, 0xd8, 0x26, 0x74, 0x88, 0xcf, 0x52, 0xf7, 0xd5, 0xb5, 0x3e, 0xe4, 0x1d, 0x2e, 0x21, 0xda, - 0x13, 0xee, 0xb0, 0x4f, 0xec, 0x09, 0x77, 0x6b, 0x99, 0xa5, 0x9a, 0x61, 0x05, 0xb7, 0x12, 0xc4, - 0x0e, 0x9b, 0xe2, 0x0d, 0x22, 0xcb, 0x26, 0x02, 0x89, 0xa5, 0x5a, 0x50, 0xc1, 0xcc, 0x6d, 0x06, - 0xdb, 0x4b, 0xf3, 0x38, 0x4b, 0x7f, 0x8a, 0xef, 0x3e, 0x5b, 0x76, 0x1a, 0x82, 0x98, 0xdb, 0xfc, - 0xa4, 0xcf, 0xd5, 0x3e, 0xf0, 0x49, 0x5a, 0x0f, 0xfd, 0x0f, 0x03, 0xcf, 0x4d, 0x10, 0xdd, 0xae, - 0x2c, 0x52, 0xb9, 0xfa, 0xd9, 0x20, 0xba, 0x89, 0x1f, 0xeb, 0x76, 0x51, 0x8c, 0xeb, 0x94, 0xe4, - 0x14, 0x12, 0x48, 0x0b, 0x3e, 0xfc, 0x34, 0xfc, 0xac, 0x10, 0x4e, 0x9c, 0xac, 0xf7, 0x50, 0xb3, - 0xce, 0x6b, 0xeb, 0xb1, 0x64, 0x2c, 0xff, 0xec, 0xd4, 0x59, 0x05, 0xa5, 0x9a, 0x29, 0xf7, 0x81, - 0xa3, 0xde, 0x69, 0x71, 0x23, 0x0b, 0xac, 0x2b, 0x4a, 0xf4, 0xce, 0xb0, 0x86, 0xd9, 0xdd, 0xb1, - 0xb8, 0x53, 0xa8, 0x58, 0xb6, 0x04, 0x71, 0xfd, 0x6d, 0x83, 0x34, 0x66, 0x51, 0xc4, 0xee, 0x0e, - 0x4d, 0x9b, 0x74, 0xa3, 0xed, 0x76, 0x3b, 0x5f, 0x1d, 0xe0, 0x33, 0x72, 0x8f, 0x25, 0x81, 0x11, - 0xe9, 0x46, 0x00, 0xb7, 0x76, 0x3f, 0x4b, 0x16, 0x4f, 0x93, 0xb8, 0xe2, 0x27, 0xf1, 0x2a, 0x63, - 0xf1, 0x54, 0xcc, 0xeb, 0x78, 0xf7, 0xb3, 0x61, 0x46, 0x36, 0x44, 0xed, 0x7e, 0x52, 0xb0, 0x59, - 0xd9, 0xa9, 0xbf, 0xa6, 0xa5, 0xae, 0x16, 0xde, 0x45, 0x39, 0x92, 0x28, 0x2f, 0xbe, 0x56, 0x78, - 0x2f, 0x0c, 0x99, 0x57, 0xa2, 0xa4, 0x48, 0xa4, 0x21, 0xb7, 0x7c, 0x3a, 0x4e, 0x02, 0x72, 0x3b, - 0x40, 0x98, 0xcf, 0x24, 0xc8, 0xdf, 0x9b, 0x3f, 0x08, 0xc1, 0xd5, 0x47, 0x74, 0x37, 0x7c, 0xba, - 0x36, 0x34, 0xb2, 0xbf, 0x43, 0xb6, 0xd9, 0x93, 0x36, 0x0b, 0x37, 0xf5, 0x21, 0xdf, 0x23, 0xa8, - 0x3c, 0xef, 0x37, 0xd7, 0xc2, 0x91, 0x91, 0x12, 0x0b, 0xb7, 0x36, 0x65, 0x02, 0xbd, 0x96, 0xbd, - 0x98, 0xa6, 0x5c, 0xc9, 0x9a, 0x0b, 0xbb, 0x1b, 0x6d, 0x03, 0x6d, 0x8a, 0xa8, 0x15, 0x4d, 0x9b, - 0xb1, 0xbc, 0x66, 0x26, 0x6c, 0x36, 0xcb, 0x40, 0x41, 0xa7, 0x10, 0xcb, 0xef, 0xad, 0x6d, 0xb5, - 0x6d, 0x79, 0x41, 0x62, 0x2c, 0x0f, 0x2a, 0x98, 0x34, 0xb2, 0xc6, 0xe4, 0x19, 0x44, 0xf3, 0x60, - 0xd7, 0xda, 0x66, 0x1c, 0x80, 0x48, 0x23, 0xbd, 0xa0, 0x79, 0x0d, 0xab, 0x16, 0xef, 0x43, 0xf3, - 0x24, 0xf0, 0xd7, 0x69, 0x84, 0xb2, 0x25, 0x26, 0x5e, 0xc3, 0xf2, 0x60, 0x66, 0x9d, 0x80, 0x3c, - 0x3c, 0x5f, 0x1d, 0x4c, 0xf1, 0x3a, 0x01, 0xeb, 0x0b, 0x86, 0x58, 0x27, 0x50, 0xac, 0xdb, 0x74, - 0xfa, 0x53, 0xbc, 0x87, 0x71, 0x65, 0x2a, 0xe7, 0x69, 0x3a, 0x2f, 0x18, 0x6a, 0x3a, 0x4a, 0xc1, - 0x7d, 0xa4, 0xf6, 0x87, 0x7e, 0x3d, 0x8f, 0xd4, 0xf7, 0x81, 0xdf, 0x07, 0x5d, 0x98, 0xf4, 0xf0, - 0xfc, 0xf6, 0xff, 0x7c, 0x7d, 0x63, 0xf0, 0x8b, 0xaf, 0x6f, 0x0c, 0xfe, 0xef, 0xeb, 0x1b, 0x83, - 0x9f, 0x7d, 0x73, 0xe3, 0x9d, 0x5f, 0x7c, 0x73, 0xe3, 0x9d, 0xff, 0xfd, 0xe6, 0xc6, 0x3b, 0x5f, - 0xbd, 0xab, 0xfe, 0x12, 0xe2, 0x9b, 0x5f, 0x11, 0x7f, 0xcf, 0xf0, 0xd9, 0x2f, 0x03, 0x00, 0x00, - 0xff, 0xff, 0x51, 0x6f, 0x77, 0xac, 0x2d, 0x71, 0x00, 0x00, + 0x65, 0xb7, 0xa7, 0x0f, 0x81, 0x40, 0x20, 0x10, 0x08, 0xc4, 0x89, 0x8f, 0x7b, 0xe1, 0x01, 0x89, + 0xbf, 0x86, 0xc7, 0x7d, 0xe4, 0x11, 0xed, 0xfe, 0x23, 0xa8, 0x32, 0xb3, 0xf2, 0x23, 0x2a, 0x23, + 0xab, 0xbc, 0x4f, 0x33, 0xea, 0xf8, 0x45, 0x44, 0x66, 0x65, 0x64, 0x66, 0xe4, 0x47, 0x95, 0xa3, + 0x9b, 0xc5, 0x9b, 0xad, 0xa2, 0x64, 0x9c, 0x55, 0x5b, 0x15, 0x94, 0xcb, 0x34, 0x81, 0xe6, 0xdf, + 0x91, 0xf8, 0x79, 0xf8, 0x6e, 0x9c, 0xaf, 0xf8, 0xaa, 0x80, 0x8f, 0x3e, 0x34, 0x64, 0xc2, 0xe6, + 0xf3, 0x38, 0x9f, 0x56, 0x12, 0xf9, 0xe8, 0x03, 0x23, 0x81, 0x25, 0xe4, 0x5c, 0xfd, 0xfe, 0xf4, + 0x97, 0xdf, 0x0c, 0xa2, 0xf7, 0x76, 0xb2, 0x14, 0x72, 0xbe, 0xa3, 0x34, 0x86, 0x5f, 0x45, 0xdf, + 0xdf, 0x2e, 0x8a, 0x7d, 0xe0, 0xaf, 0xa0, 0xac, 0x52, 0x96, 0x0f, 0xef, 0x8e, 0x94, 0x83, 0xd1, + 0x69, 0x91, 0x8c, 0xb6, 0x8b, 0x62, 0x64, 0x84, 0xa3, 0x53, 0xf8, 0xd9, 0x02, 0x2a, 0xfe, 0xd1, + 0xbd, 0x30, 0x54, 0x15, 0x2c, 0xaf, 0x60, 0x78, 0x1e, 0xfd, 0xd6, 0x76, 0x51, 0x8c, 0x81, 0xef, + 0x42, 0x5d, 0x81, 0x31, 0x8f, 0x39, 0x0c, 0xd7, 0x5a, 0xaa, 0x2e, 0xa0, 0x7d, 0x3c, 0xec, 0x06, + 0x95, 0x9f, 0x49, 0xf4, 0xbd, 0xda, 0xcf, 0xc5, 0x82, 0x4f, 0xd9, 0x55, 0x3e, 0xbc, 0xdd, 0x56, + 0x54, 0x22, 0x6d, 0xfb, 0x4e, 0x08, 0x51, 0x56, 0x5f, 0x47, 0xbf, 0xfe, 0x3a, 0xce, 0x32, 0xe0, + 0x3b, 0x25, 0xd4, 0x05, 0x77, 0x75, 0xa4, 0x68, 0x24, 0x65, 0xda, 0xee, 0xdd, 0x20, 0xa3, 0x0c, + 0x7f, 0x15, 0x7d, 0x5f, 0x4a, 0x4e, 0x21, 0x61, 0x4b, 0x28, 0x87, 0x5e, 0x2d, 0x25, 0x24, 0x1e, + 0x79, 0x0b, 0xc2, 0xb6, 0x77, 0x58, 0xbe, 0x84, 0x92, 0xfb, 0x6d, 0x2b, 0x61, 0xd8, 0xb6, 0x81, + 0x94, 0xed, 0x7f, 0x18, 0x44, 0x3f, 0xdc, 0x4e, 0x12, 0xb6, 0xc8, 0xf9, 0x21, 0x4b, 0xe2, 0xec, + 0x30, 0xcd, 0x2f, 0x8f, 0xe1, 0x6a, 0xe7, 0xa2, 0xe6, 0xf3, 0x19, 0x0c, 0x9f, 0xb9, 0x4f, 0x55, + 0xa2, 0x23, 0xcd, 0x8e, 0x6c, 0x58, 0xfb, 0xfe, 0xe4, 0x7a, 0x4a, 0xaa, 0x2c, 0xff, 0x32, 0x88, + 0x6e, 0xe0, 0xb2, 0x8c, 0x59, 0xb6, 0x04, 0x53, 0x9a, 0x4f, 0x3b, 0x0c, 0xbb, 0xb8, 0x2e, 0xcf, + 0x67, 0xd7, 0x55, 0x53, 0x25, 0xca, 0xa2, 0xf7, 0xed, 0x70, 0x19, 0x43, 0x25, 0xba, 0xd3, 0x23, + 0x3a, 0x22, 0x14, 0xa2, 0x3d, 0x3f, 0xee, 0x83, 0x2a, 0x6f, 0x69, 0x34, 0x54, 0xde, 0x32, 0x56, + 0x69, 0x67, 0x0f, 0xbd, 0x16, 0x2c, 0x42, 0xfb, 0x7a, 0xd4, 0x83, 0x54, 0xae, 0xfe, 0x34, 0xfa, + 0x8d, 0xd7, 0xac, 0xbc, 0xac, 0x8a, 0x38, 0x01, 0xd5, 0x15, 0xee, 0xbb, 0xda, 0x8d, 0x14, 0xf7, + 0x86, 0x07, 0x5d, 0x98, 0x15, 0xb4, 0x8d, 0xf0, 0x65, 0x01, 0x78, 0x0c, 0x32, 0x8a, 0xb5, 0x90, + 0x0a, 0x5a, 0x0c, 0x29, 0xdb, 0x97, 0xd1, 0xd0, 0xd8, 0x7e, 0xf3, 0x67, 0x90, 0xf0, 0xed, 0xe9, + 0x14, 0xb7, 0x8a, 0xd1, 0x15, 0xc4, 0x68, 0x7b, 0x3a, 0xa5, 0x5a, 0xc5, 0x8f, 0x2a, 0x67, 0x57, + 0xd1, 0x07, 0xc8, 0xd9, 0x61, 0x5a, 0x09, 0x87, 0x9b, 0x61, 0x2b, 0x0a, 0xd3, 0x4e, 0x47, 0x7d, + 0x71, 0xe5, 0xf8, 0xaf, 0x06, 0xd1, 0x0f, 0x3c, 0x9e, 0x4f, 0x61, 0xce, 0x96, 0x30, 0x7c, 0xd2, + 0x6d, 0x4d, 0x92, 0xda, 0xff, 0xc7, 0xd7, 0xd0, 0xf0, 0x84, 0xc9, 0x18, 0x32, 0x48, 0x38, 0x19, + 0x26, 0x52, 0xdc, 0x19, 0x26, 0x1a, 0xb3, 0x7a, 0x58, 0x23, 0xdc, 0x07, 0xbe, 0xb3, 0x28, 0x4b, + 0xc8, 0x39, 0xd9, 0x96, 0x06, 0xe9, 0x6c, 0x4b, 0x07, 0xf5, 0xd4, 0x67, 0x1f, 0xf8, 0x76, 0x96, + 0x91, 0xf5, 0x91, 0xe2, 0xce, 0xfa, 0x68, 0x4c, 0x79, 0x48, 0xa2, 0xdf, 0xb4, 0x9e, 0x18, 0x3f, + 0xc8, 0xcf, 0xd9, 0x90, 0x7e, 0x16, 0x42, 0xae, 0x7d, 0xac, 0x75, 0x72, 0x9e, 0x6a, 0xbc, 0x78, + 0x5b, 0xb0, 0x92, 0x6e, 0x16, 0x29, 0xee, 0xac, 0x86, 0xc6, 0x94, 0x87, 0x3f, 0x89, 0xde, 0x53, + 0xa3, 0x64, 0x33, 0x9f, 0xdd, 0xf3, 0x0e, 0xa1, 0x78, 0x42, 0xbb, 0xdf, 0x41, 0x99, 0xc1, 0x41, + 0xc9, 0xd4, 0xe0, 0x73, 0xd7, 0xab, 0x87, 0x86, 0x9e, 0x7b, 0x61, 0xa8, 0x65, 0x7b, 0x17, 0x32, + 0x20, 0x6d, 0x4b, 0x61, 0x87, 0x6d, 0x0d, 0x29, 0xdb, 0x65, 0xf4, 0x3b, 0xfa, 0xb1, 0xd4, 0xf3, + 0xa8, 0x90, 0xd7, 0x83, 0xf4, 0x3a, 0x51, 0x6f, 0x1b, 0xd2, 0xbe, 0x36, 0xfa, 0xc1, 0xad, 0xfa, + 0xa8, 0x1e, 0xe8, 0xaf, 0x0f, 0xea, 0x7f, 0xf7, 0xc2, 0x90, 0xb2, 0xfd, 0x8f, 0x83, 0xe8, 0x47, + 0x4a, 0xf6, 0x22, 0x8f, 0xdf, 0x64, 0x20, 0xa6, 0xc4, 0x63, 0xe0, 0x57, 0xac, 0xbc, 0x1c, 0xaf, + 0xf2, 0x84, 0x98, 0xfe, 0xfd, 0x70, 0xc7, 0xf4, 0x4f, 0x2a, 0x59, 0x19, 0x9f, 0xaa, 0x28, 0x67, + 0x05, 0xce, 0xf8, 0x9a, 0x1a, 0x70, 0x56, 0x50, 0x19, 0x9f, 0x8b, 0xb4, 0xac, 0x1e, 0xd5, 0xc3, + 0xa6, 0xdf, 0xea, 0x91, 0x3d, 0x4e, 0xde, 0x09, 0x21, 0x66, 0xd8, 0x6a, 0x02, 0x98, 0xe5, 0xe7, + 0xe9, 0xec, 0xac, 0x98, 0xd6, 0x61, 0xfc, 0xc8, 0x1f, 0xa1, 0x16, 0x42, 0x0c, 0x5b, 0x04, 0xaa, + 0xbc, 0xfd, 0xb3, 0x49, 0x8c, 0x54, 0x57, 0xda, 0x2b, 0xd9, 0xfc, 0x10, 0x66, 0x71, 0xb2, 0x52, + 0xfd, 0xff, 0x93, 0x50, 0xc7, 0xc3, 0xb4, 0x2e, 0xc4, 0xa7, 0xd7, 0xd4, 0x52, 0xe5, 0xf9, 0xaf, + 0x41, 0x74, 0xaf, 0xa9, 0xfe, 0x45, 0x9c, 0xcf, 0x40, 0xb5, 0xa7, 0x2c, 0xfd, 0x76, 0x3e, 0x3d, + 0x85, 0x8a, 0xc7, 0x25, 0x1f, 0x7e, 0xe1, 0xaf, 0x64, 0x48, 0x47, 0x97, 0xed, 0x27, 0xdf, 0x49, + 0xd7, 0xb4, 0xfa, 0xb8, 0x1e, 0xd8, 0xd4, 0x10, 0xe0, 0xb6, 0xba, 0x90, 0xe0, 0x01, 0xe0, 0x4e, + 0x08, 0x31, 0xad, 0x2e, 0x04, 0x07, 0xf9, 0x32, 0xe5, 0xb0, 0x0f, 0x39, 0x94, 0xed, 0x56, 0x97, + 0xaa, 0x2e, 0x42, 0xb4, 0x3a, 0x81, 0x9a, 0xc1, 0xc6, 0xf1, 0xa6, 0x27, 0xc7, 0xf5, 0x80, 0x91, + 0xd6, 0xf4, 0xb8, 0xd1, 0x0f, 0x36, 0xab, 0x3b, 0xcb, 0xe7, 0x29, 0x2c, 0xd9, 0x25, 0x5e, 0xdd, + 0xd9, 0x26, 0x24, 0x40, 0xac, 0xee, 0xbc, 0xa0, 0x99, 0xc1, 0x2c, 0x3f, 0xaf, 0x52, 0xb8, 0x42, + 0x33, 0x98, 0xad, 0x5c, 0x8b, 0x89, 0x19, 0xcc, 0x83, 0x29, 0x0f, 0xc7, 0xd1, 0xaf, 0x09, 0xe1, + 0x1f, 0xb1, 0x34, 0x1f, 0xde, 0xf4, 0x28, 0xd5, 0x02, 0x6d, 0xf5, 0x16, 0x0d, 0xa0, 0x12, 0xd7, + 0xbf, 0xee, 0xc4, 0x79, 0x02, 0x99, 0xb7, 0xc4, 0x46, 0x1c, 0x2c, 0xb1, 0x83, 0x99, 0xd4, 0x41, + 0x08, 0xeb, 0xf1, 0x6b, 0x7c, 0x11, 0x97, 0x69, 0x3e, 0x1b, 0xfa, 0x74, 0x2d, 0x39, 0x91, 0x3a, + 0xf8, 0x38, 0x14, 0xc2, 0x4a, 0x71, 0xbb, 0x28, 0xca, 0x7a, 0x58, 0xf4, 0x85, 0xb0, 0x8b, 0x04, + 0x43, 0xb8, 0x85, 0xfa, 0xbd, 0xed, 0x42, 0x92, 0xa5, 0x79, 0xd0, 0x9b, 0x42, 0xfa, 0x78, 0x33, + 0x28, 0x0a, 0xde, 0x43, 0x88, 0x97, 0xd0, 0xd4, 0xcc, 0xf7, 0x64, 0x6c, 0x20, 0x18, 0xbc, 0x08, + 0x34, 0xeb, 0x34, 0x21, 0x3e, 0x8a, 0x2f, 0xa1, 0x7e, 0xc0, 0x50, 0xcf, 0x6b, 0x43, 0x9f, 0xbe, + 0x43, 0x10, 0xeb, 0x34, 0x3f, 0xa9, 0x5c, 0x2d, 0xa2, 0x0f, 0x84, 0xfc, 0x24, 0x2e, 0x79, 0x9a, + 0xa4, 0x45, 0x9c, 0x37, 0xf9, 0xbf, 0xaf, 0x5f, 0xb7, 0x28, 0xed, 0x72, 0xb3, 0x27, 0xad, 0xdc, + 0xfe, 0x72, 0x10, 0xdd, 0xc6, 0x7e, 0x4f, 0xa0, 0x9c, 0xa7, 0x62, 0x19, 0x59, 0xc9, 0x41, 0x78, + 0xf8, 0x79, 0xd8, 0x68, 0x4b, 0x41, 0x97, 0xe6, 0xc7, 0xd7, 0x57, 0x54, 0x05, 0xfb, 0xe3, 0x28, + 0x92, 0xcb, 0x15, 0xb1, 0xa4, 0x74, 0x7b, 0xad, 0x5a, 0xc7, 0x38, 0xeb, 0xc9, 0xdb, 0x01, 0xc2, + 0x4c, 0x15, 0xf2, 0x77, 0xb1, 0x52, 0x1e, 0x7a, 0x35, 0x84, 0x88, 0x98, 0x2a, 0x10, 0x82, 0x0b, + 0x3a, 0xbe, 0x60, 0x57, 0xfe, 0x82, 0xd6, 0x92, 0x70, 0x41, 0x15, 0x61, 0xf6, 0xae, 0x54, 0x41, + 0x7d, 0x7b, 0x57, 0x4d, 0x31, 0x42, 0x7b, 0x57, 0x98, 0x51, 0x86, 0x59, 0xf4, 0xdb, 0xb6, 0xe1, + 0xe7, 0x8c, 0x5d, 0xce, 0xe3, 0xf2, 0x72, 0xf8, 0x98, 0x56, 0x6e, 0x18, 0xed, 0x68, 0xbd, 0x17, + 0x6b, 0x86, 0x05, 0xdb, 0x61, 0x9d, 0x68, 0x9c, 0x95, 0x19, 0x1a, 0x16, 0x1c, 0x1b, 0x0a, 0x21, + 0x86, 0x05, 0x02, 0x35, 0x09, 0xb4, 0xf2, 0x76, 0x11, 0x8b, 0x75, 0xbb, 0xff, 0xa1, 0x48, 0x21, + 0x91, 0x40, 0xb7, 0x20, 0x33, 0x2b, 0xd8, 0x35, 0x19, 0x03, 0x5e, 0x89, 0x39, 0x45, 0x1b, 0x03, + 0xb5, 0x12, 0xf3, 0x60, 0x38, 0x3c, 0xf7, 0xcb, 0xb8, 0xb8, 0xf0, 0x87, 0xa7, 0x10, 0x85, 0xc3, + 0xb3, 0x41, 0x70, 0x2c, 0x8d, 0x21, 0x2e, 0x93, 0x0b, 0x7f, 0x2c, 0x49, 0x59, 0x38, 0x96, 0x34, + 0x83, 0x63, 0x49, 0x0a, 0x5e, 0xa7, 0xfc, 0xe2, 0x08, 0x78, 0xec, 0x8f, 0x25, 0x97, 0x09, 0xc7, + 0x52, 0x8b, 0x35, 0x59, 0x92, 0xed, 0x70, 0xbc, 0x78, 0x53, 0x25, 0x65, 0xfa, 0x06, 0x86, 0x01, + 0x2b, 0x1a, 0x22, 0xb2, 0x24, 0x12, 0x36, 0x13, 0x80, 0xf2, 0xd9, 0xc8, 0x0e, 0xa6, 0x15, 0x9a, + 0x00, 0x1a, 0x1b, 0x16, 0x41, 0x4c, 0x00, 0x7e, 0x12, 0x57, 0x6f, 0xbf, 0x64, 0x8b, 0xa2, 0xea, + 0xa8, 0x1e, 0x82, 0xc2, 0xd5, 0x6b, 0xc3, 0xca, 0xe7, 0xdb, 0xe8, 0x77, 0xed, 0x47, 0x7a, 0x96, + 0x57, 0xda, 0xeb, 0x26, 0xfd, 0x9c, 0x2c, 0x8c, 0xd8, 0xf2, 0x0a, 0xe0, 0x26, 0x05, 0x6a, 0x3c, + 0xf3, 0x5d, 0xe0, 0x71, 0x9a, 0x55, 0xc3, 0x07, 0x7e, 0x1b, 0x8d, 0x9c, 0x48, 0x81, 0x7c, 0x1c, + 0xee, 0xb3, 0xbb, 0x8b, 0x22, 0x4b, 0x93, 0xf6, 0xde, 0xa7, 0xd2, 0xd5, 0xe2, 0x70, 0x9f, 0xb5, + 0x31, 0x3c, 0xbe, 0x8d, 0x81, 0xcb, 0xff, 0x4c, 0x56, 0x05, 0xf8, 0xc7, 0x37, 0x07, 0x09, 0x8f, + 0x6f, 0x18, 0xc5, 0xf5, 0x19, 0x03, 0x3f, 0x8c, 0x57, 0x6c, 0x41, 0x8c, 0x41, 0x5a, 0x1c, 0xae, + 0x8f, 0x8d, 0x99, 0x2c, 0x44, 0x7b, 0x38, 0xc8, 0x39, 0x94, 0x79, 0x9c, 0xed, 0x65, 0xf1, 0xac, + 0x1a, 0x12, 0xfd, 0xc6, 0xa5, 0x88, 0x2c, 0x84, 0xa6, 0x3d, 0x8f, 0xf1, 0xa0, 0xda, 0x8b, 0x97, + 0xac, 0x4c, 0x39, 0xfd, 0x18, 0x0d, 0xd2, 0xf9, 0x18, 0x1d, 0xd4, 0xeb, 0x6d, 0xbb, 0x4c, 0x2e, + 0xd2, 0x25, 0x4c, 0x03, 0xde, 0x1a, 0xa4, 0x87, 0x37, 0x0b, 0xf5, 0x34, 0xda, 0x98, 0x2d, 0xca, + 0x04, 0xc8, 0x46, 0x93, 0xe2, 0xce, 0x46, 0xd3, 0x98, 0xf2, 0xf0, 0xb7, 0x83, 0xe8, 0xf7, 0xa4, + 0xd4, 0xde, 0x90, 0xdc, 0x8d, 0xab, 0x8b, 0x37, 0x2c, 0x2e, 0xa7, 0xc3, 0x8f, 0x7d, 0x76, 0xbc, + 0xa8, 0x76, 0xfd, 0xf4, 0x3a, 0x2a, 0xf8, 0xb1, 0x1e, 0xa6, 0x95, 0xd5, 0xe3, 0xbc, 0x8f, 0xd5, + 0x41, 0xc2, 0x8f, 0x15, 0xa3, 0x78, 0x00, 0x11, 0x72, 0xb9, 0xf8, 0x7f, 0x40, 0xea, 0xbb, 0x3b, + 0x00, 0x6b, 0x9d, 0x1c, 0x1e, 0x1f, 0x6b, 0xa1, 0x1b, 0x2d, 0x9b, 0x94, 0x0d, 0x7f, 0xc4, 0x8c, + 0xfa, 0xe2, 0xa4, 0x67, 0xdd, 0x2b, 0xc2, 0x9e, 0x5b, 0x3d, 0x63, 0xd4, 0x17, 0x27, 0x3c, 0x5b, + 0xc3, 0x5a, 0xc8, 0xb3, 0x67, 0x68, 0x1b, 0xf5, 0xc5, 0x71, 0x46, 0xa1, 0x98, 0x66, 0x5e, 0x78, + 0x1c, 0xb0, 0x83, 0xe7, 0x86, 0xf5, 0x5e, 0xac, 0x72, 0xf8, 0xf7, 0x83, 0xe8, 0x87, 0xc6, 0xe3, + 0x11, 0x9b, 0xa6, 0xe7, 0x2b, 0x09, 0xbd, 0x8a, 0xb3, 0x05, 0x54, 0xc3, 0xa7, 0x94, 0xb5, 0x36, + 0xab, 0x4b, 0xf0, 0xec, 0x5a, 0x3a, 0xb8, 0xef, 0x6c, 0x17, 0x45, 0xb6, 0x9a, 0xc0, 0xbc, 0xc8, + 0xc8, 0xbe, 0xe3, 0x20, 0xe1, 0xbe, 0x83, 0x51, 0x9c, 0x69, 0x4e, 0x58, 0x9d, 0xc7, 0x7a, 0x33, + 0x4d, 0x21, 0x0a, 0x67, 0x9a, 0x0d, 0x82, 0x73, 0xa5, 0x09, 0xdb, 0x61, 0x59, 0x06, 0x09, 0x6f, + 0x1f, 0x6a, 0x6a, 0x4d, 0x43, 0x84, 0x73, 0x25, 0x44, 0x9a, 0xf5, 0x7f, 0xb3, 0xe6, 0x8a, 0x4b, + 0x78, 0xbe, 0x3a, 0x4c, 0xf3, 0xcb, 0xa1, 0x3f, 0x2d, 0x30, 0x00, 0xb1, 0xfe, 0xf7, 0x82, 0x78, + 0x6d, 0x77, 0x96, 0x4f, 0x99, 0x7f, 0x6d, 0x57, 0x4b, 0xc2, 0x6b, 0x3b, 0x45, 0x60, 0x93, 0xa7, + 0x40, 0x99, 0xac, 0x25, 0x61, 0x93, 0x8a, 0xf0, 0x0d, 0x85, 0x6a, 0x97, 0x98, 0x1c, 0x0a, 0xd1, + 0xbe, 0xf0, 0x5a, 0x27, 0x87, 0x23, 0xb4, 0x59, 0xe4, 0xed, 0x01, 0x4f, 0x2e, 0xfc, 0x11, 0xea, + 0x20, 0xe1, 0x08, 0xc5, 0x28, 0xae, 0xd2, 0x84, 0xe9, 0x45, 0xea, 0x03, 0x7f, 0x7c, 0xb4, 0x16, + 0xa8, 0x6b, 0x9d, 0x1c, 0x5e, 0x1a, 0x1d, 0xcc, 0xc5, 0x33, 0xf3, 0x06, 0xb9, 0x94, 0x85, 0x97, + 0x46, 0x9a, 0xc1, 0xa5, 0x97, 0x82, 0xfa, 0x71, 0xfa, 0x4b, 0x6f, 0xe4, 0xe1, 0xd2, 0x3b, 0x9c, + 0x72, 0xf2, 0xef, 0x83, 0xe8, 0xa6, 0xed, 0xe5, 0x98, 0xd5, 0x7d, 0xe4, 0x55, 0x9c, 0xa5, 0xd3, + 0x98, 0xc3, 0x84, 0x5d, 0x42, 0x8e, 0xf6, 0x6d, 0xdc, 0xd2, 0x4a, 0x7e, 0xe4, 0x28, 0x10, 0xfb, + 0x36, 0xbd, 0x14, 0x71, 0x9c, 0x48, 0xfa, 0xac, 0x82, 0x9d, 0xb8, 0x22, 0x46, 0x32, 0x07, 0x09, + 0xc7, 0x09, 0x46, 0x71, 0xbe, 0x2a, 0xe5, 0x2f, 0xde, 0x16, 0x50, 0xa6, 0x90, 0x27, 0xe0, 0xcf, + 0x57, 0x31, 0x15, 0xce, 0x57, 0x3d, 0x74, 0x6b, 0x5b, 0x43, 0x0f, 0x4e, 0xed, 0x7b, 0x09, 0x98, + 0x08, 0xdc, 0x4b, 0x20, 0x50, 0x5c, 0x49, 0x03, 0x78, 0xb7, 0x06, 0x5b, 0x56, 0x82, 0x5b, 0x83, + 0x34, 0xdd, 0xda, 0x2c, 0xd2, 0xcc, 0xb8, 0xee, 0x26, 0x1d, 0x45, 0x1f, 0xdb, 0xdd, 0x65, 0xbd, + 0x17, 0xeb, 0xdf, 0x9d, 0x3a, 0x85, 0x2c, 0x16, 0x53, 0x48, 0x60, 0x0b, 0xa8, 0x61, 0xfa, 0xec, + 0x4e, 0x59, 0xac, 0x72, 0xf8, 0xd7, 0x83, 0xe8, 0x23, 0x9f, 0xc7, 0x97, 0x85, 0xf0, 0xfb, 0xa4, + 0xdb, 0x96, 0x24, 0x89, 0x8b, 0x17, 0x61, 0x0d, 0x55, 0x86, 0x3f, 0x8f, 0x3e, 0x6c, 0x44, 0xe6, + 0x5e, 0x86, 0x2a, 0x80, 0x9b, 0x40, 0xe9, 0xf2, 0x63, 0x4e, 0xbb, 0xdf, 0xea, 0xcd, 0x9b, 0xb5, + 0x89, 0x5b, 0xae, 0x0a, 0xad, 0x4d, 0xb4, 0x0d, 0x25, 0x26, 0xd6, 0x26, 0x1e, 0xcc, 0xec, 0x6a, + 0xd8, 0xd5, 0x7b, 0x9d, 0xf2, 0x0b, 0x91, 0xfb, 0xa0, 0x5d, 0x0d, 0xa7, 0xac, 0x1a, 0x22, 0x76, + 0x35, 0x48, 0x18, 0x67, 0x07, 0x0d, 0x58, 0xf7, 0x4d, 0xdf, 0xb8, 0xaa, 0x0d, 0xd9, 0x3d, 0xf3, + 0x61, 0x37, 0x88, 0xe3, 0xb5, 0x11, 0xab, 0x65, 0xc8, 0xe3, 0x90, 0x05, 0xb4, 0x14, 0x59, 0xef, + 0xc5, 0x2a, 0x87, 0x7f, 0x19, 0xfd, 0xa0, 0x55, 0xb1, 0x3d, 0x88, 0xf9, 0xa2, 0x84, 0xe9, 0x70, + 0xab, 0xa3, 0xdc, 0x0d, 0xa8, 0x5d, 0x3f, 0xe9, 0xaf, 0xd0, 0xca, 0x97, 0x1b, 0x4e, 0x86, 0x95, + 0x2e, 0xc3, 0xd3, 0x90, 0x49, 0x97, 0x0d, 0xe6, 0xcb, 0xb4, 0x4e, 0x6b, 0xc9, 0x6b, 0x47, 0xd7, + 0xf6, 0x32, 0x4e, 0x33, 0x71, 0x44, 0xf3, 0x71, 0xc8, 0xa8, 0x83, 0x06, 0x97, 0xbc, 0xa4, 0x4a, + 0x6b, 0x64, 0x16, 0x7d, 0xdc, 0x5a, 0x2a, 0x6d, 0xd0, 0x23, 0x81, 0x67, 0xa5, 0xb4, 0xd9, 0x93, + 0x56, 0x6e, 0x79, 0xb3, 0x55, 0x58, 0xff, 0x6c, 0x07, 0xb9, 0xcf, 0xab, 0x52, 0xf5, 0x44, 0xfa, + 0x66, 0x4f, 0x5a, 0x79, 0xfd, 0x8b, 0xe8, 0xc3, 0xb6, 0x57, 0x35, 0x11, 0x6d, 0x75, 0x9a, 0x42, + 0x73, 0xd1, 0x93, 0xfe, 0x0a, 0x66, 0x79, 0xf1, 0x65, 0x5a, 0x71, 0x56, 0xae, 0xc6, 0x17, 0xec, + 0xaa, 0xb9, 0xef, 0xec, 0xf6, 0x56, 0x05, 0x8c, 0x2c, 0x82, 0x58, 0x5e, 0xf8, 0xc9, 0x96, 0x2b, + 0x73, 0x2f, 0xba, 0x22, 0x5c, 0x59, 0x44, 0x87, 0x2b, 0x97, 0x34, 0x63, 0x55, 0x53, 0x2b, 0x73, + 0x89, 0x7b, 0xcd, 0x5f, 0xd4, 0xf6, 0x45, 0xee, 0x87, 0xdd, 0xa0, 0xc9, 0x58, 0x94, 0x78, 0x37, + 0x3d, 0x3f, 0xd7, 0x75, 0xf2, 0x97, 0xd4, 0x46, 0x88, 0x8c, 0x85, 0x40, 0x4d, 0x02, 0xbc, 0x97, + 0x66, 0x20, 0xce, 0xfb, 0x5e, 0x9e, 0x9f, 0x67, 0x2c, 0x9e, 0xa2, 0x04, 0xb8, 0x16, 0x8f, 0x6c, + 0x39, 0x91, 0x00, 0xfb, 0x38, 0x73, 0xda, 0x53, 0x4b, 0x4f, 0x21, 0x61, 0x79, 0x92, 0x66, 0xf8, + 0xfa, 0x97, 0xd0, 0xd4, 0x42, 0xe2, 0xb4, 0xa7, 0x05, 0x99, 0x89, 0xb1, 0x16, 0xd5, 0xdd, 0xbe, + 0x29, 0xff, 0xfd, 0xb6, 0xa2, 0x25, 0x26, 0x26, 0x46, 0x0f, 0x66, 0xd6, 0x81, 0xb5, 0xf0, 0xac, + 0x10, 0xc6, 0x6f, 0xb5, 0xb5, 0xa4, 0x84, 0x58, 0x07, 0xba, 0x84, 0x59, 0xcf, 0xd4, 0xbf, 0xef, + 0xb2, 0xab, 0x5c, 0x18, 0xbd, 0xd3, 0x56, 0x69, 0x64, 0xc4, 0x7a, 0x06, 0x33, 0xca, 0xf0, 0x4f, + 0xa3, 0x5f, 0x15, 0x86, 0x4b, 0x56, 0x0c, 0x6f, 0x78, 0x14, 0x4a, 0xeb, 0xa6, 0xd6, 0x4d, 0x52, + 0x6e, 0x2e, 0x1c, 0xea, 0xd8, 0x38, 0xab, 0xe2, 0x19, 0x0c, 0xef, 0x11, 0x2d, 0x2e, 0xa4, 0xc4, + 0x85, 0xc3, 0x36, 0xe5, 0x46, 0xc5, 0x31, 0x9b, 0x2a, 0xeb, 0x9e, 0x1a, 0x6a, 0x61, 0x28, 0x2a, + 0x6c, 0xc8, 0x24, 0x33, 0xc7, 0xf1, 0x32, 0x9d, 0xe9, 0x09, 0x47, 0x8e, 0x5b, 0x15, 0x4a, 0x66, + 0x0c, 0x33, 0xb2, 0x20, 0x22, 0x99, 0x21, 0x61, 0xe5, 0xf3, 0xdf, 0x06, 0xd1, 0x2d, 0xc3, 0xec, + 0x37, 0x3b, 0x67, 0x07, 0xf9, 0x39, 0xab, 0x53, 0x9f, 0xc3, 0x34, 0xbf, 0xac, 0x86, 0x9f, 0x51, + 0x26, 0xfd, 0xbc, 0x2e, 0xca, 0xe7, 0xd7, 0xd6, 0x33, 0x59, 0x6b, 0xb3, 0xad, 0x64, 0xce, 0x62, + 0xa5, 0x06, 0xca, 0x5a, 0xf5, 0xee, 0x13, 0xe6, 0x88, 0xac, 0x35, 0xc4, 0x9b, 0x26, 0xd6, 0xce, + 0x33, 0x96, 0xe3, 0x26, 0x36, 0x16, 0x6a, 0x21, 0xd1, 0xc4, 0x2d, 0xc8, 0x8c, 0xc7, 0x8d, 0x48, + 0xee, 0x80, 0x6c, 0x67, 0x19, 0x1a, 0x8f, 0xb5, 0xaa, 0x06, 0x88, 0xf1, 0xd8, 0x0b, 0x2a, 0x3f, + 0xa7, 0xd1, 0xf7, 0xea, 0x47, 0x7a, 0x52, 0xc2, 0x32, 0x05, 0x7c, 0x6d, 0xc0, 0x92, 0x10, 0xfd, + 0xdf, 0x25, 0x4c, 0xcf, 0x3a, 0xcb, 0xab, 0x22, 0x8b, 0xab, 0x0b, 0x75, 0xd8, 0xeb, 0xd6, 0xb9, + 0x11, 0xe2, 0xe3, 0xde, 0xfb, 0x1d, 0x94, 0x19, 0xd4, 0x1b, 0x99, 0x1e, 0x62, 0x1e, 0xf8, 0x55, + 0x5b, 0xc3, 0xcc, 0x5a, 0x27, 0x67, 0x76, 0x9f, 0xf7, 0xe3, 0x2c, 0x83, 0x72, 0xd5, 0xc8, 0x8e, + 0xe2, 0x3c, 0x3d, 0x87, 0x8a, 0xa3, 0xdd, 0x67, 0x45, 0x8d, 0x30, 0x46, 0xec, 0x3e, 0x07, 0x70, + 0x93, 0xcd, 0x23, 0xcf, 0x07, 0xf9, 0x14, 0xde, 0xa2, 0x6c, 0x1e, 0xdb, 0x11, 0x0c, 0x91, 0xcd, + 0x53, 0xac, 0xd9, 0x85, 0x7d, 0x9e, 0xb1, 0xe4, 0x52, 0x4d, 0x01, 0x6e, 0x03, 0x0b, 0x09, 0x9e, + 0x03, 0xee, 0x84, 0x10, 0x33, 0x09, 0x08, 0xc1, 0x29, 0x14, 0x59, 0x9c, 0xe0, 0xbb, 0x23, 0x52, + 0x47, 0xc9, 0x88, 0x49, 0x00, 0x33, 0xa8, 0xb8, 0xea, 0x4e, 0x8a, 0xaf, 0xb8, 0xe8, 0x4a, 0xca, + 0x9d, 0x10, 0x62, 0xa6, 0x41, 0x21, 0x18, 0x17, 0x59, 0xca, 0x51, 0x37, 0x90, 0x1a, 0x42, 0x42, + 0x74, 0x03, 0x97, 0x40, 0x26, 0x8f, 0xa0, 0x9c, 0x81, 0xd7, 0xa4, 0x90, 0x04, 0x4d, 0x36, 0x84, + 0xb9, 0x62, 0x28, 0xeb, 0xce, 0x8a, 0x15, 0xba, 0x62, 0xa8, 0xaa, 0xc5, 0x8a, 0x15, 0x71, 0xc5, + 0xd0, 0x01, 0x50, 0x11, 0x4f, 0xe2, 0x8a, 0xfb, 0x8b, 0x28, 0x24, 0xc1, 0x22, 0x36, 0x84, 0x99, + 0xa3, 0x65, 0x11, 0x17, 0x1c, 0xcd, 0xd1, 0xaa, 0x00, 0xd6, 0x69, 0xf0, 0x4d, 0x52, 0x6e, 0x46, + 0x12, 0xd9, 0x2a, 0xc0, 0xf7, 0x52, 0xc8, 0xa6, 0x15, 0x1a, 0x49, 0xd4, 0x73, 0x6f, 0xa4, 0xc4, + 0x48, 0xd2, 0xa6, 0x50, 0x28, 0xa9, 0xbd, 0x6a, 0x5f, 0xed, 0xd0, 0x36, 0xf5, 0x9d, 0x10, 0x62, + 0xc6, 0xa7, 0xa6, 0xd0, 0x3b, 0x71, 0x59, 0xa6, 0xf5, 0xe4, 0xff, 0xc0, 0x5f, 0xa0, 0x46, 0x4e, + 0x8c, 0x4f, 0x3e, 0x0e, 0x75, 0xaf, 0x66, 0xe0, 0xf6, 0x15, 0x0c, 0x0f, 0xdd, 0x77, 0x83, 0x8c, + 0xc9, 0x38, 0x85, 0xc4, 0x3a, 0xce, 0xf4, 0x3d, 0x4d, 0xcf, 0x69, 0xe6, 0x83, 0x2e, 0xcc, 0x7a, + 0x05, 0x40, 0xbb, 0x38, 0x62, 0x4b, 0x98, 0xb0, 0x17, 0x6f, 0xd3, 0x8a, 0xa7, 0xf9, 0x4c, 0xcd, + 0xdc, 0xcf, 0x08, 0x4b, 0x3e, 0x98, 0x78, 0x05, 0xa0, 0x53, 0xc9, 0x24, 0x10, 0xa8, 0x2c, 0xc7, + 0x70, 0xe5, 0x4d, 0x20, 0xb0, 0x45, 0xcd, 0x11, 0x09, 0x44, 0x88, 0x37, 0xfb, 0x28, 0xda, 0xb9, + 0x7a, 0x4f, 0x72, 0xc2, 0x9a, 0x5c, 0x8e, 0xb2, 0x86, 0x41, 0x62, 0x29, 0x1b, 0x54, 0x30, 0xeb, + 0x4b, 0xed, 0xdf, 0x74, 0xb1, 0x87, 0x84, 0x9d, 0x76, 0x37, 0x7b, 0xd4, 0x83, 0xf4, 0xb8, 0x32, + 0x67, 0xf2, 0x94, 0xab, 0xf6, 0x91, 0xfc, 0xa3, 0x1e, 0xa4, 0xb5, 0x27, 0x63, 0x57, 0xeb, 0x79, + 0x9c, 0x5c, 0xce, 0x4a, 0xb6, 0xc8, 0xa7, 0x3b, 0x2c, 0x63, 0x25, 0xda, 0x93, 0x71, 0x4a, 0x8d, + 0x50, 0x62, 0x4f, 0xa6, 0x43, 0xc5, 0x64, 0x70, 0x76, 0x29, 0xb6, 0xb3, 0x74, 0x86, 0x57, 0xd4, + 0x8e, 0x21, 0x01, 0x10, 0x19, 0x9c, 0x17, 0xf4, 0x04, 0x91, 0x5c, 0x71, 0xf3, 0x34, 0x89, 0x33, + 0xe9, 0x6f, 0x8b, 0x36, 0xe3, 0x80, 0x9d, 0x41, 0xe4, 0x51, 0xf0, 0xd4, 0x73, 0xb2, 0x28, 0xf3, + 0x83, 0x9c, 0x33, 0xb2, 0x9e, 0x0d, 0xd0, 0x59, 0x4f, 0x0b, 0x44, 0xc3, 0xea, 0x04, 0xde, 0xd6, + 0xa5, 0xa9, 0xff, 0xf1, 0x0d, 0xab, 0xf5, 0xef, 0x23, 0x25, 0x0f, 0x0d, 0xab, 0x88, 0x43, 0x95, + 0x51, 0x4e, 0x64, 0xc0, 0x04, 0xb4, 0xdd, 0x30, 0x79, 0xd8, 0x0d, 0xfa, 0xfd, 0x8c, 0xf9, 0x2a, + 0x83, 0x90, 0x1f, 0x01, 0xf4, 0xf1, 0xd3, 0x80, 0x66, 0xbb, 0xc5, 0xa9, 0xcf, 0x05, 0x24, 0x97, + 0xad, 0x2b, 0x46, 0x6e, 0x41, 0x25, 0x42, 0x6c, 0xb7, 0x10, 0xa8, 0xbf, 0x89, 0x0e, 0x12, 0x96, + 0x87, 0x9a, 0xa8, 0x96, 0xf7, 0x69, 0x22, 0xc5, 0x99, 0xc5, 0xaf, 0x96, 0xaa, 0xc8, 0x94, 0xcd, + 0xb4, 0x4e, 0x58, 0xb0, 0x21, 0x62, 0xf1, 0x4b, 0xc2, 0x26, 0x27, 0xc7, 0x3e, 0x8f, 0xda, 0xf7, + 0x95, 0x5b, 0x56, 0x8e, 0xe8, 0xfb, 0xca, 0x14, 0x4b, 0x57, 0x52, 0xc6, 0x48, 0x87, 0x15, 0x37, + 0x4e, 0x36, 0xfa, 0xc1, 0x66, 0xc9, 0xe3, 0xf8, 0xdc, 0xc9, 0x20, 0x2e, 0xa5, 0xd7, 0xcd, 0x80, + 0x21, 0x83, 0x11, 0x4b, 0x9e, 0x00, 0x8e, 0x86, 0x30, 0xc7, 0xf3, 0x0e, 0xcb, 0x39, 0xe4, 0xdc, + 0x37, 0x84, 0xb9, 0xc6, 0x14, 0x18, 0x1a, 0xc2, 0x28, 0x05, 0x14, 0xb7, 0x62, 0x3f, 0x08, 0xf8, + 0x71, 0x3c, 0xf7, 0x66, 0x6c, 0x72, 0xaf, 0x47, 0xca, 0x43, 0x71, 0x8b, 0x38, 0xeb, 0x90, 0xcf, + 0xf6, 0x32, 0x89, 0xcb, 0x99, 0xde, 0xdd, 0x98, 0x0e, 0x9f, 0xd0, 0x76, 0x5c, 0x92, 0x38, 0xe4, + 0x0b, 0x6b, 0xa0, 0x61, 0xe7, 0x60, 0x1e, 0xcf, 0x74, 0x4d, 0x3d, 0x35, 0x10, 0xf2, 0x56, 0x55, + 0x1f, 0x76, 0x83, 0xc8, 0xcf, 0xab, 0x74, 0x0a, 0x2c, 0xe0, 0x47, 0xc8, 0xfb, 0xf8, 0xc1, 0x20, + 0xca, 0xde, 0xea, 0x7a, 0xcb, 0x15, 0xdd, 0x76, 0x3e, 0x55, 0xeb, 0xd8, 0x11, 0xf1, 0x78, 0x10, + 0x17, 0xca, 0xde, 0x08, 0x1e, 0xf5, 0xd1, 0x66, 0x83, 0x36, 0xd4, 0x47, 0xf5, 0xfe, 0x6b, 0x9f, + 0x3e, 0xea, 0x83, 0x95, 0xcf, 0x9f, 0xab, 0x3e, 0xba, 0x1b, 0xf3, 0xb8, 0xce, 0xdb, 0x5f, 0xa5, + 0x70, 0xa5, 0x16, 0xc2, 0x9e, 0xfa, 0x36, 0xd4, 0x48, 0xbc, 0xa8, 0x86, 0x56, 0xc5, 0x5b, 0xbd, + 0xf9, 0x80, 0x6f, 0xb5, 0x42, 0xe8, 0xf4, 0x8d, 0x96, 0x0a, 0x5b, 0xbd, 0xf9, 0x80, 0x6f, 0xf5, + 0x06, 0x6c, 0xa7, 0x6f, 0xf4, 0x1a, 0xec, 0x56, 0x6f, 0x5e, 0xf9, 0xfe, 0x9b, 0xa6, 0xe3, 0xda, + 0xce, 0xeb, 0x3c, 0x2c, 0xe1, 0xe9, 0x12, 0x7c, 0xe9, 0xa4, 0x6b, 0x4f, 0xa3, 0xa1, 0x74, 0x92, + 0x56, 0xb1, 0x3e, 0x9b, 0xe2, 0x2b, 0xc5, 0x09, 0xab, 0x52, 0x71, 0x48, 0xff, 0xac, 0x87, 0xd1, + 0x06, 0x0e, 0x2d, 0x9a, 0x42, 0x4a, 0xe6, 0xb8, 0xd1, 0x41, 0xcd, 0x8d, 0xe2, 0x8d, 0x80, 0xbd, + 0xf6, 0xc5, 0xe2, 0xcd, 0x9e, 0xb4, 0x39, 0xf8, 0x73, 0x18, 0xfb, 0xc4, 0x31, 0xd4, 0xaa, 0xde, + 0x43, 0xc7, 0x27, 0xfd, 0x15, 0x94, 0xfb, 0xbf, 0x6b, 0xd6, 0x15, 0xd8, 0xbf, 0xea, 0x04, 0x4f, + 0xfb, 0x58, 0x44, 0x1d, 0xe1, 0xd9, 0xb5, 0x74, 0x54, 0x41, 0xfe, 0x73, 0x10, 0xdd, 0xf1, 0x16, + 0xc4, 0x3d, 0x7b, 0xfe, 0xfd, 0x3e, 0xb6, 0xfd, 0x67, 0xd0, 0x5f, 0x7c, 0x17, 0x55, 0x55, 0xba, + 0x7f, 0x6a, 0x96, 0xf7, 0x8d, 0x86, 0x78, 0xeb, 0xe3, 0x65, 0x39, 0x85, 0x52, 0xf5, 0xd8, 0x50, + 0xd0, 0x19, 0x18, 0xf7, 0xdb, 0x4f, 0xaf, 0xa9, 0x65, 0x7d, 0xe2, 0xc7, 0x81, 0xd5, 0xdb, 0x7c, + 0x56, 0x79, 0x42, 0x96, 0x2d, 0x1a, 0x17, 0xe8, 0xb3, 0xeb, 0xaa, 0x51, 0x3d, 0xd9, 0x82, 0xc5, + 0x17, 0x03, 0x9e, 0xf5, 0x34, 0xec, 0x7c, 0x43, 0xe0, 0x93, 0xeb, 0x29, 0xa9, 0xb2, 0xfc, 0xf7, + 0x20, 0xba, 0xef, 0xb0, 0xe6, 0xb4, 0x03, 0xed, 0xc9, 0xfc, 0x24, 0x60, 0x9f, 0x52, 0xd2, 0x85, + 0xfb, 0x83, 0xef, 0xa6, 0x6c, 0xbe, 0x87, 0xe3, 0xa8, 0xec, 0xa5, 0x19, 0x87, 0xb2, 0xfd, 0x3d, + 0x1c, 0xd7, 0xae, 0xa4, 0x46, 0xf4, 0xf7, 0x70, 0x02, 0xb8, 0xf5, 0x3d, 0x1c, 0x8f, 0x67, 0xef, + 0xf7, 0x70, 0xbc, 0xd6, 0x82, 0xdf, 0xc3, 0x09, 0x6b, 0x50, 0x93, 0x4f, 0x53, 0x04, 0xb9, 0xab, + 0xde, 0xcb, 0xa2, 0xbb, 0xc9, 0xfe, 0xf4, 0x3a, 0x2a, 0xc4, 0xf4, 0x2b, 0x39, 0x71, 0x0b, 0xaf, + 0xc7, 0x33, 0x75, 0x6e, 0xe2, 0x6d, 0xf5, 0xe6, 0x95, 0xef, 0x9f, 0xa9, 0xb5, 0x97, 0x9e, 0x6c, + 0x58, 0x29, 0xde, 0xa9, 0x5c, 0x0f, 0x4d, 0x1e, 0xb5, 0x05, 0xbb, 0xe5, 0x37, 0xfa, 0xc1, 0x44, + 0x75, 0x6b, 0x42, 0x35, 0xfa, 0xa8, 0xcb, 0x10, 0x6a, 0xf2, 0xad, 0xde, 0x3c, 0x31, 0xc9, 0x49, + 0xdf, 0xb2, 0xb5, 0x7b, 0x18, 0x73, 0xdb, 0xfa, 0x49, 0x7f, 0x05, 0xe5, 0x7e, 0xa9, 0x92, 0x5a, + 0xdb, 0xbd, 0x68, 0xe7, 0xcd, 0x2e, 0x53, 0x63, 0xa7, 0x99, 0x47, 0x7d, 0xf1, 0x50, 0x7a, 0x63, + 0x4f, 0xf0, 0x5d, 0xe9, 0x8d, 0x77, 0x92, 0xff, 0xe4, 0x7a, 0x4a, 0xaa, 0x2c, 0xff, 0x3a, 0x88, + 0x6e, 0x92, 0x65, 0x51, 0x71, 0xf0, 0x59, 0x5f, 0xcb, 0x28, 0x1e, 0x3e, 0xbf, 0xb6, 0x9e, 0x2a, + 0xd4, 0x7f, 0x0c, 0xa2, 0x5b, 0x81, 0x42, 0xc9, 0x00, 0xb9, 0x86, 0x75, 0x37, 0x50, 0x7e, 0x7c, + 0x7d, 0x45, 0x6a, 0xba, 0xb7, 0xf1, 0x71, 0xfb, 0x43, 0x31, 0x01, 0xdb, 0x63, 0xfa, 0x43, 0x31, + 0xdd, 0x5a, 0x78, 0x0b, 0xaa, 0x4e, 0x4a, 0xd4, 0xca, 0xc8, 0xb7, 0x05, 0x25, 0x72, 0x16, 0xb4, + 0x22, 0x5a, 0xeb, 0xe4, 0x7c, 0x4e, 0x5e, 0xbc, 0x2d, 0xe2, 0x7c, 0x4a, 0x3b, 0x91, 0xf2, 0x6e, + 0x27, 0x9a, 0xc3, 0x5b, 0x77, 0xb5, 0xf4, 0x94, 0x35, 0xcb, 0xbc, 0x47, 0x94, 0xbe, 0x46, 0x82, + 0x5b, 0x77, 0x2d, 0x94, 0xf0, 0xa6, 0x72, 0xda, 0x90, 0x37, 0x94, 0xca, 0x3e, 0xee, 0x83, 0xa2, + 0x05, 0x84, 0xf6, 0xa6, 0x4f, 0x04, 0x36, 0x42, 0x56, 0x5a, 0xa7, 0x02, 0x9b, 0x3d, 0x69, 0xc2, + 0xed, 0x18, 0xf8, 0x97, 0x10, 0x4f, 0xa1, 0x0c, 0xba, 0xd5, 0x54, 0x2f, 0xb7, 0x36, 0xed, 0x73, + 0xbb, 0xc3, 0xb2, 0xc5, 0x3c, 0x57, 0x8d, 0x49, 0xba, 0xb5, 0xa9, 0x6e, 0xb7, 0x88, 0xc6, 0x9b, + 0x96, 0xc6, 0xad, 0x48, 0x2f, 0x1f, 0x87, 0xcd, 0x38, 0x59, 0xe5, 0x7a, 0x2f, 0x96, 0xae, 0xa7, + 0x0a, 0xa3, 0x8e, 0x7a, 0xa2, 0x48, 0xda, 0xec, 0x49, 0xe3, 0xdd, 0x43, 0xcb, 0xad, 0x8e, 0xa7, + 0xad, 0x0e, 0x5b, 0xad, 0x90, 0x7a, 0xd2, 0x5f, 0x01, 0xef, 0xd5, 0xaa, 0xa8, 0xaa, 0xd7, 0x45, + 0x7b, 0x69, 0x96, 0x0d, 0xd7, 0x03, 0x61, 0xd2, 0x40, 0xc1, 0xbd, 0x5a, 0x0f, 0x4c, 0x44, 0x72, + 0xb3, 0xb7, 0x99, 0x0f, 0xbb, 0xec, 0x08, 0xaa, 0x57, 0x24, 0xdb, 0x34, 0xda, 0x6f, 0xb3, 0x1e, + 0xb5, 0xae, 0xed, 0x28, 0xfc, 0xe0, 0x5a, 0x15, 0xde, 0xea, 0xcd, 0xa3, 0xcb, 0x00, 0x82, 0x12, + 0x33, 0xcb, 0x3d, 0xca, 0x84, 0x33, 0x93, 0xdc, 0xef, 0xa0, 0xd0, 0x9e, 0xa5, 0xec, 0x46, 0xaf, + 0xd3, 0xe9, 0x0c, 0xb8, 0xf7, 0x1c, 0xcb, 0x06, 0x82, 0xe7, 0x58, 0x08, 0x44, 0x4d, 0x27, 0x7f, + 0xd7, 0x9b, 0xb5, 0x07, 0x53, 0x5f, 0xd3, 0x29, 0x65, 0x8b, 0x0a, 0x35, 0x9d, 0x97, 0x46, 0xa3, + 0x81, 0x76, 0xab, 0x5e, 0xdc, 0x7f, 0x1c, 0x32, 0x83, 0xde, 0xde, 0x5f, 0xef, 0xc5, 0xa2, 0x19, + 0xc5, 0x38, 0x4c, 0xe7, 0x29, 0xf7, 0xcd, 0x28, 0x96, 0x8d, 0x1a, 0x09, 0xcd, 0x28, 0x6d, 0x94, + 0xaa, 0x5e, 0x9d, 0x23, 0x1c, 0x4c, 0xc3, 0xd5, 0x93, 0x4c, 0xbf, 0xea, 0x69, 0xb6, 0x75, 0xec, + 0x9a, 0xeb, 0x90, 0xe1, 0x17, 0x6a, 0xb1, 0xec, 0x89, 0x6d, 0xf1, 0x42, 0x27, 0x06, 0x43, 0xa3, + 0x0e, 0xa5, 0x80, 0x8f, 0x13, 0x6a, 0xae, 0x39, 0x19, 0x2e, 0x0a, 0x88, 0xcb, 0x38, 0x4f, 0xbc, + 0x8b, 0x53, 0x61, 0xb0, 0x45, 0x86, 0x16, 0xa7, 0xa4, 0x06, 0x3a, 0xd4, 0x77, 0x5f, 0xc5, 0xf4, + 0x74, 0x05, 0xfd, 0xce, 0xa3, 0xfb, 0x26, 0xe6, 0xa3, 0x1e, 0x24, 0x3e, 0xd4, 0x6f, 0x00, 0xbd, + 0x2d, 0x2f, 0x9d, 0x7e, 0x1c, 0x30, 0xe5, 0xa2, 0xa1, 0x85, 0x30, 0xad, 0x82, 0x82, 0x5a, 0x27, + 0xb8, 0xc0, 0x7f, 0x0a, 0x2b, 0x5f, 0x50, 0x9b, 0xfc, 0x54, 0x20, 0xa1, 0xa0, 0x6e, 0xa3, 0x28, + 0xcf, 0xb4, 0xd7, 0x41, 0x0f, 0x02, 0xfa, 0xf6, 0xd2, 0x67, 0xad, 0x93, 0x43, 0x3d, 0x67, 0x37, + 0x5d, 0x3a, 0xa7, 0x18, 0x9e, 0x82, 0xee, 0xa6, 0x4b, 0xff, 0x21, 0xc6, 0x7a, 0x2f, 0x16, 0x5f, + 0x18, 0x88, 0x39, 0xbc, 0x6d, 0x4e, 0xf2, 0x3d, 0xc5, 0x15, 0xf2, 0xd6, 0x51, 0xfe, 0xc3, 0x6e, + 0xd0, 0x5c, 0xcf, 0x3d, 0x29, 0x59, 0x02, 0x55, 0xa5, 0xbe, 0x9e, 0xe7, 0xde, 0x7f, 0x52, 0xb2, + 0x11, 0xfa, 0x76, 0xde, 0xbd, 0x30, 0xa4, 0x6c, 0x7f, 0x19, 0xbd, 0x7b, 0xc8, 0x66, 0x63, 0xc8, + 0xa7, 0xc3, 0x1f, 0xb9, 0x17, 0x62, 0xd9, 0x6c, 0x54, 0xff, 0xac, 0xed, 0xdd, 0xa0, 0xc4, 0xe6, + 0x4a, 0xdf, 0x2e, 0xbc, 0x59, 0xcc, 0xc6, 0x3c, 0xe6, 0xe8, 0x4a, 0x9f, 0xf8, 0x7d, 0x54, 0x0b, + 0x88, 0x2b, 0x7d, 0x0e, 0x80, 0xec, 0x4d, 0x4a, 0x00, 0xaf, 0xbd, 0x5a, 0x10, 0xb4, 0xa7, 0x00, + 0x33, 0xeb, 0x6a, 0x7b, 0x75, 0x62, 0x8b, 0xaf, 0xe0, 0x19, 0x1d, 0x21, 0x25, 0x66, 0xdd, 0x36, + 0x65, 0x82, 0x41, 0x56, 0x5f, 0x7c, 0xcf, 0x63, 0x31, 0x9f, 0xc7, 0xe5, 0x0a, 0x05, 0x83, 0xaa, + 0xa5, 0x05, 0x10, 0xc1, 0xe0, 0x05, 0x4d, 0x94, 0x37, 0x8f, 0x39, 0xb9, 0xdc, 0x67, 0x25, 0x5b, + 0xf0, 0x34, 0x07, 0xfc, 0x4d, 0x07, 0xfd, 0x40, 0x6d, 0x86, 0x88, 0x72, 0x8a, 0x35, 0x59, 0xa1, + 0x20, 0xe4, 0xed, 0x40, 0xf1, 0x0d, 0xda, 0x8a, 0xb3, 0x12, 0x9f, 0x0e, 0x4a, 0x2b, 0x18, 0x22, + 0xb2, 0x42, 0x12, 0x46, 0x6d, 0x7f, 0x92, 0xe6, 0x33, 0x6f, 0xdb, 0x9f, 0xd8, 0x5f, 0x70, 0xbc, + 0x45, 0x03, 0x66, 0x7c, 0x97, 0x0f, 0x4d, 0x7e, 0x37, 0x49, 0xbd, 0x99, 0xe9, 0x7d, 0xe8, 0x36, + 0x41, 0x8c, 0xef, 0x7e, 0x12, 0xb9, 0x7a, 0x59, 0x40, 0x0e, 0xd3, 0xe6, 0x0e, 0x9c, 0xcf, 0x95, + 0x43, 0x04, 0x5d, 0x61, 0xd2, 0x8c, 0xaa, 0x42, 0x7e, 0xba, 0xc8, 0x4f, 0x4a, 0x76, 0x9e, 0x66, + 0x50, 0xa2, 0x51, 0x55, 0xaa, 0x5b, 0x72, 0x62, 0x54, 0xf5, 0x71, 0xe6, 0x32, 0x85, 0x90, 0x3a, + 0x1f, 0x52, 0x9e, 0x94, 0x71, 0x82, 0x2f, 0x53, 0x48, 0x1b, 0x6d, 0x8c, 0xd8, 0x49, 0x0b, 0xe0, + 0x26, 0xd2, 0x8f, 0x80, 0x97, 0x69, 0x52, 0x8d, 0x81, 0x9f, 0xc4, 0x65, 0x3c, 0x07, 0x0e, 0x25, + 0x8e, 0x74, 0x85, 0x8c, 0x1c, 0x86, 0x88, 0x74, 0x8a, 0x55, 0x0e, 0xff, 0x30, 0x7a, 0xbf, 0x1e, + 0xe8, 0x21, 0x57, 0xdf, 0xfc, 0x7f, 0x21, 0xfe, 0x58, 0xc8, 0xf0, 0x03, 0x6d, 0x63, 0xcc, 0x4b, + 0x88, 0xe7, 0x8d, 0xed, 0xf7, 0xf4, 0xef, 0x02, 0x7c, 0x32, 0xa8, 0x1b, 0xe4, 0x98, 0xf1, 0xf4, + 0xbc, 0x5e, 0x57, 0xa9, 0x53, 0x2c, 0xd4, 0x20, 0xb6, 0x78, 0x14, 0xf8, 0x4c, 0x81, 0x8f, 0x33, + 0x03, 0x8d, 0x2d, 0x3d, 0x85, 0x22, 0xc3, 0x03, 0x8d, 0xa3, 0x2d, 0x00, 0x62, 0xa0, 0xf1, 0x82, + 0x26, 0xba, 0x6c, 0xf1, 0x04, 0xc2, 0x95, 0x99, 0x40, 0xbf, 0xca, 0x4c, 0x9c, 0x77, 0x04, 0xb2, + 0xe8, 0xfd, 0x23, 0x98, 0xbf, 0x81, 0xb2, 0xba, 0x48, 0x8b, 0xfd, 0x7a, 0x86, 0x8d, 0xf9, 0x02, + 0xbf, 0x45, 0x67, 0x88, 0x91, 0x46, 0x88, 0x34, 0x84, 0x40, 0xcd, 0x50, 0x66, 0x80, 0x83, 0xea, + 0x38, 0x9e, 0x83, 0xf8, 0xe8, 0xc2, 0x70, 0x9d, 0x32, 0x62, 0x41, 0xc4, 0x50, 0x46, 0xc2, 0xd6, + 0xeb, 0x46, 0x86, 0x39, 0x85, 0x59, 0x1d, 0x61, 0xe5, 0x49, 0xbc, 0x9a, 0x43, 0xce, 0x95, 0x49, + 0xb4, 0x09, 0x6b, 0x99, 0xf4, 0xf3, 0xc4, 0x26, 0x6c, 0x1f, 0x3d, 0x2b, 0xe9, 0x76, 0x1e, 0xfc, + 0x09, 0x2b, 0xb9, 0xfc, 0x8b, 0x1e, 0x67, 0x65, 0x86, 0x92, 0x6e, 0xf7, 0xa1, 0x3a, 0x24, 0x91, + 0x74, 0x87, 0x35, 0xac, 0x4f, 0x61, 0x3b, 0x65, 0x78, 0x05, 0xa5, 0x8e, 0x93, 0x17, 0xf3, 0x38, + 0xcd, 0x54, 0x34, 0x7c, 0x11, 0xb0, 0x4d, 0xe8, 0x10, 0x9f, 0xc2, 0xee, 0xab, 0x6b, 0x7d, 0x3c, + 0x3c, 0x5c, 0x42, 0xb4, 0x27, 0xdc, 0x61, 0x9f, 0xd8, 0x13, 0xee, 0xd6, 0x32, 0x4b, 0x35, 0xc3, + 0x0a, 0x6e, 0x25, 0x88, 0x1d, 0x36, 0xc5, 0x1b, 0x44, 0x96, 0x4d, 0x04, 0x12, 0x4b, 0xb5, 0xa0, + 0x82, 0x99, 0xdb, 0x0c, 0xb6, 0x97, 0xe6, 0x71, 0x96, 0xfe, 0x1c, 0xdf, 0x7d, 0xb6, 0xec, 0x34, + 0x04, 0x31, 0xb7, 0xf9, 0x49, 0x9f, 0xab, 0x7d, 0xe0, 0x93, 0xb4, 0x1e, 0xfa, 0x1f, 0x06, 0x9e, + 0x9b, 0x20, 0xba, 0x5d, 0x59, 0xa4, 0x72, 0xf5, 0x8b, 0x41, 0x74, 0x13, 0x3f, 0xd6, 0xed, 0xa2, + 0x18, 0xd7, 0x29, 0xc9, 0x29, 0x24, 0x90, 0x16, 0x7c, 0xf8, 0x69, 0xf8, 0x59, 0x21, 0x9c, 0x38, + 0x59, 0xef, 0xa1, 0x66, 0x9d, 0xd7, 0xd6, 0x63, 0xc9, 0x58, 0xfe, 0xa9, 0xab, 0xb3, 0x0a, 0x4a, + 0x35, 0x53, 0xee, 0x03, 0x47, 0xbd, 0xd3, 0xe2, 0x46, 0x16, 0x58, 0x57, 0x94, 0xe8, 0x9d, 0x61, + 0x0d, 0xb3, 0xbb, 0x63, 0x71, 0xa7, 0x50, 0xb1, 0x6c, 0x09, 0xe2, 0xfa, 0xdb, 0x06, 0x69, 0xcc, + 0xa2, 0x88, 0xdd, 0x1d, 0x9a, 0x36, 0xe9, 0x46, 0xdb, 0xed, 0x76, 0xbe, 0x3a, 0xc0, 0x67, 0xe4, + 0x1e, 0x4b, 0x02, 0x23, 0xd2, 0x8d, 0x00, 0x6e, 0xed, 0x7e, 0x96, 0x2c, 0x9e, 0x26, 0x71, 0xc5, + 0x4f, 0xe2, 0x55, 0xc6, 0xe2, 0xa9, 0x98, 0xd7, 0xf1, 0xee, 0x67, 0xc3, 0x8c, 0x6c, 0x88, 0xda, + 0xfd, 0xa4, 0x60, 0xb3, 0xb2, 0x53, 0x7f, 0xc1, 0x4b, 0x5d, 0x2d, 0xbc, 0x8b, 0x72, 0x24, 0x51, + 0x5e, 0x7c, 0xad, 0xf0, 0x5e, 0x18, 0x32, 0xaf, 0x44, 0x49, 0x91, 0x48, 0x43, 0x6e, 0xf9, 0x74, + 0x9c, 0x04, 0xe4, 0x76, 0x80, 0x30, 0x9f, 0x49, 0x90, 0xbf, 0x37, 0x7f, 0x84, 0x82, 0xab, 0x0f, + 0xf7, 0x6e, 0xf8, 0x74, 0x6d, 0x68, 0x64, 0x7f, 0xfb, 0x6c, 0xb3, 0x27, 0x6d, 0x16, 0x6e, 0xea, + 0xe3, 0xc1, 0x47, 0x50, 0x79, 0xde, 0x6f, 0xae, 0x85, 0x23, 0x23, 0x25, 0x16, 0x6e, 0x6d, 0xca, + 0x04, 0x7a, 0x2d, 0x7b, 0x31, 0x4d, 0xb9, 0x92, 0x35, 0x17, 0x76, 0x37, 0xda, 0x06, 0xda, 0x14, + 0x51, 0x2b, 0x9a, 0x36, 0x63, 0x79, 0xcd, 0x4c, 0xd8, 0x6c, 0x96, 0x81, 0x82, 0x4e, 0x21, 0x96, + 0xdf, 0x78, 0xdb, 0x6a, 0xdb, 0xf2, 0x82, 0xc4, 0x58, 0x1e, 0x54, 0x30, 0x69, 0x64, 0x8d, 0xc9, + 0x33, 0x88, 0xe6, 0xc1, 0xae, 0xb5, 0xcd, 0x38, 0x00, 0x91, 0x46, 0x7a, 0x41, 0xf3, 0x1a, 0x56, + 0x2d, 0xde, 0x87, 0xe6, 0x49, 0xe0, 0x2f, 0xe2, 0x08, 0x65, 0x4b, 0x4c, 0xbc, 0x86, 0xe5, 0xc1, + 0xcc, 0x3a, 0x01, 0x79, 0x78, 0xbe, 0x3a, 0x98, 0xe2, 0x75, 0x02, 0xd6, 0x17, 0x0c, 0xb1, 0x4e, + 0xa0, 0x58, 0xb7, 0xe9, 0xf4, 0xe7, 0x7f, 0x0f, 0xe3, 0xca, 0x54, 0xce, 0xd3, 0x74, 0x5e, 0x30, + 0xd4, 0x74, 0x94, 0x82, 0xfb, 0x48, 0xed, 0x8f, 0x0b, 0x7b, 0x1e, 0xa9, 0xef, 0xa3, 0xc2, 0x0f, + 0xba, 0x30, 0xe9, 0xe1, 0xf9, 0xed, 0xff, 0xf9, 0xe6, 0xc6, 0xe0, 0xeb, 0x6f, 0x6e, 0x0c, 0xfe, + 0xef, 0x9b, 0x1b, 0x83, 0x5f, 0x7c, 0x7b, 0xe3, 0x9d, 0xaf, 0xbf, 0xbd, 0xf1, 0xce, 0xff, 0x7e, + 0x7b, 0xe3, 0x9d, 0xaf, 0xde, 0x55, 0x7f, 0x7d, 0xf1, 0xcd, 0xaf, 0x88, 0xbf, 0xa1, 0xf8, 0xec, + 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x4f, 0x9f, 0x53, 0xa1, 0x71, 0x00, 0x00, } // This is a compile-time assertion to ensure that this generated file @@ -469,6 +470,7 @@ type ClientCommandsHandler interface { ObjectCreateRelationOption(context.Context, *pb.RpcObjectCreateRelationOptionRequest) *pb.RpcObjectCreateRelationOptionResponse RelationListRemoveOption(context.Context, *pb.RpcRelationListRemoveOptionRequest) *pb.RpcRelationListRemoveOptionResponse RelationOptions(context.Context, *pb.RpcRelationOptionsRequest) *pb.RpcRelationOptionsResponse + RelationListWithValue(context.Context, *pb.RpcRelationListWithValueRequest) *pb.RpcRelationListWithValueResponse // Object Relations // *** ObjectRelationAdd(context.Context, *pb.RpcObjectRelationAddRequest) *pb.RpcObjectRelationAddResponse @@ -2621,6 +2623,26 @@ func RelationOptions(b []byte) (resp []byte) { return resp } +func RelationListWithValue(b []byte) (resp []byte) { + defer func() { + if PanicHandler != nil { + if r := recover(); r != nil { + resp, _ = (&pb.RpcRelationListWithValueResponse{Error: &pb.RpcRelationListWithValueResponseError{Code: pb.RpcRelationListWithValueResponseError_UNKNOWN_ERROR, Description: "panic recovered"}}).Marshal() + PanicHandler(r) + } + } + }() + + in := new(pb.RpcRelationListWithValueRequest) + if err := in.Unmarshal(b); err != nil { + resp, _ = (&pb.RpcRelationListWithValueResponse{Error: &pb.RpcRelationListWithValueResponseError{Code: pb.RpcRelationListWithValueResponseError_BAD_INPUT, Description: err.Error()}}).Marshal() + return resp + } + + resp, _ = clientCommandsHandler.RelationListWithValue(context.Background(), in).Marshal() + return resp +} + func ObjectRelationAdd(b []byte) (resp []byte) { defer func() { if PanicHandler != nil { @@ -6061,6 +6083,8 @@ func CommandAsync(cmd string, data []byte, callback func(data []byte)) { cd = RelationListRemoveOption(data) case "RelationOptions": cd = RelationOptions(data) + case "RelationListWithValue": + cd = RelationListWithValue(data) case "ObjectRelationAdd": cd = ObjectRelationAdd(data) case "ObjectRelationDelete": @@ -7765,6 +7789,20 @@ func (h *ClientCommandsHandlerProxy) RelationOptions(ctx context.Context, req *p call, _ := actualCall(ctx, req) return call.(*pb.RpcRelationOptionsResponse) } +func (h *ClientCommandsHandlerProxy) RelationListWithValue(ctx context.Context, req *pb.RpcRelationListWithValueRequest) *pb.RpcRelationListWithValueResponse { + actualCall := func(ctx context.Context, req any) (any, error) { + return h.client.RelationListWithValue(ctx, req.(*pb.RpcRelationListWithValueRequest)), nil + } + for _, interceptor := range h.interceptors { + toCall := actualCall + currentInterceptor := interceptor + actualCall = func(ctx context.Context, req any) (any, error) { + return currentInterceptor(ctx, req, "RelationListWithValue", toCall) + } + } + call, _ := actualCall(ctx, req) + return call.(*pb.RpcRelationListWithValueResponse) +} func (h *ClientCommandsHandlerProxy) ObjectRelationAdd(ctx context.Context, req *pb.RpcObjectRelationAddRequest) *pb.RpcObjectRelationAddResponse { actualCall := func(ctx context.Context, req any) (any, error) { return h.client.ObjectRelationAdd(ctx, req.(*pb.RpcObjectRelationAddRequest)), nil diff --git a/core/anytype/bootstrap.go b/core/anytype/bootstrap.go index f0683fc5f..5e266f4d6 100644 --- a/core/anytype/bootstrap.go +++ b/core/anytype/bootstrap.go @@ -38,6 +38,7 @@ import ( "github.com/anyproto/anytype-heart/core/block/bookmark" decorator "github.com/anyproto/anytype-heart/core/block/bookmark/bookmarkimporter" "github.com/anyproto/anytype-heart/core/block/collection" + "github.com/anyproto/anytype-heart/core/block/detailservice" "github.com/anyproto/anytype-heart/core/block/editor" "github.com/anyproto/anytype-heart/core/block/editor/converter" "github.com/anyproto/anytype-heart/core/block/editor/lastused" @@ -267,6 +268,7 @@ func Bootstrap(a *app.App, components ...app.Component) { Register(core.New()). Register(core.NewTempDirService()). Register(treemanager.New()). + Register(detailservice.New()). Register(block.New()). Register(indexer.New()). Register(detailsupdater.New()). diff --git a/core/application/account_create.go b/core/application/account_create.go index 2204d0cd8..53c63b19b 100644 --- a/core/application/account_create.go +++ b/core/application/account_create.go @@ -13,6 +13,7 @@ import ( "github.com/anyproto/anytype-heart/core/anytype/account" "github.com/anyproto/anytype-heart/core/anytype/config" "github.com/anyproto/anytype-heart/core/block" + "github.com/anyproto/anytype-heart/core/block/detailservice" "github.com/anyproto/anytype-heart/core/domain/objectorigin" "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pkg/lib/bundle" @@ -150,14 +151,15 @@ func (s *Service) setAccountAndProfileDetails(ctx context.Context, req *pb.RpcAc } accountObjects := spc.DerivedIDs() - if err := bs.SetDetails(nil, + ds := app.MustComponent[detailservice.Service](s.app) + if err := ds.SetDetails(nil, accountObjects.Profile, profileDetails, ); err != nil { return errors.Join(ErrSetDetails, err) } - if err := bs.SetDetails(nil, + if err := ds.SetDetails(nil, accountObjects.Workspace, commonDetails, ); err != nil { diff --git a/core/application/account_create_from_export.go b/core/application/account_create_from_export.go index 7d9077953..a4000e6a7 100644 --- a/core/application/account_create_from_export.go +++ b/core/application/account_create_from_export.go @@ -16,7 +16,7 @@ import ( "github.com/anyproto/anytype-heart/core/anytype" "github.com/anyproto/anytype-heart/core/anytype/account" "github.com/anyproto/anytype-heart/core/anytype/config" - "github.com/anyproto/anytype-heart/core/block" + "github.com/anyproto/anytype-heart/core/block/detailservice" "github.com/anyproto/anytype-heart/metrics" "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pkg/lib/bundle" @@ -160,7 +160,7 @@ func (s *Service) getBootstrapConfig(req *pb.RpcAccountRecoverFromLegacyExportRe func (s *Service) setDetails(profile *pb.Profile, icon int64) error { profileDetails, accountDetails := buildDetails(profile, icon) - bs := s.app.MustComponent(block.CName).(*block.Service) + ds := app.MustComponent[detailservice.Service](s.app) spaceService := app.MustComponent[space.Service](s.app) spc, err := spaceService.GetPersonalSpace(context.Background()) @@ -169,13 +169,13 @@ func (s *Service) setDetails(profile *pb.Profile, icon int64) error { } accountObjects := spc.DerivedIDs() - if err := bs.SetDetails(nil, + if err := ds.SetDetails(nil, accountObjects.Profile, profileDetails, ); err != nil { return err } - if err := bs.SetDetails(nil, + if err := ds.SetDetails(nil, accountObjects.Workspace, accountDetails, ); err != nil { diff --git a/core/block.go b/core/block.go index 2f804fe82..17d9f9cd8 100644 --- a/core/block.go +++ b/core/block.go @@ -416,40 +416,6 @@ func (mw *Middleware) ObjectListDelete(cctx context.Context, req *pb.RpcObjectLi return response(pb.RpcObjectListDeleteResponseError_NULL, nil) } -func (mw *Middleware) ObjectListSetIsArchived(cctx context.Context, req *pb.RpcObjectListSetIsArchivedRequest) *pb.RpcObjectListSetIsArchivedResponse { - ctx := mw.newContext(cctx) - response := func(code pb.RpcObjectListSetIsArchivedResponseErrorCode, err error) *pb.RpcObjectListSetIsArchivedResponse { - m := &pb.RpcObjectListSetIsArchivedResponse{Error: &pb.RpcObjectListSetIsArchivedResponseError{Code: code}} - if err != nil { - m.Error.Description = getErrorDescription(err) - } - return m - } - err := mw.doBlockService(func(bs *block.Service) (err error) { - return bs.SetPagesIsArchived(ctx, *req) - }) - if err != nil { - return response(pb.RpcObjectListSetIsArchivedResponseError_UNKNOWN_ERROR, err) - } - return response(pb.RpcObjectListSetIsArchivedResponseError_NULL, nil) -} -func (mw *Middleware) ObjectListSetIsFavorite(cctx context.Context, req *pb.RpcObjectListSetIsFavoriteRequest) *pb.RpcObjectListSetIsFavoriteResponse { - response := func(code pb.RpcObjectListSetIsFavoriteResponseErrorCode, err error) *pb.RpcObjectListSetIsFavoriteResponse { - m := &pb.RpcObjectListSetIsFavoriteResponse{Error: &pb.RpcObjectListSetIsFavoriteResponseError{Code: code}} - if err != nil { - m.Error.Description = getErrorDescription(err) - } - return m - } - err := mw.doBlockService(func(bs *block.Service) (err error) { - return bs.SetPagesIsFavorite(*req) - }) - if err != nil { - return response(pb.RpcObjectListSetIsFavoriteResponseError_UNKNOWN_ERROR, err) - } - return response(pb.RpcObjectListSetIsFavoriteResponseError_NULL, nil) -} - func (mw *Middleware) BlockReplace(cctx context.Context, req *pb.RpcBlockReplaceRequest) *pb.RpcBlockReplaceResponse { ctx := mw.newContext(cctx) response := func(code pb.RpcBlockReplaceResponseErrorCode, blockId string, err error) *pb.RpcBlockReplaceResponse { diff --git a/core/block/collection/service.go b/core/block/collection/service.go index a20530326..1f557af07 100644 --- a/core/block/collection/service.go +++ b/core/block/collection/service.go @@ -192,7 +192,7 @@ func (s *Service) CreateCollection(details *types.Struct, flags []*model.Interna tmpls := []template.StateTransformer{} - blockContent := template.MakeCollectionDataviewContent() + blockContent := template.MakeDataviewContent(true, nil, nil) tmpls = append(tmpls, template.WithDataview(blockContent, false), ) diff --git a/core/block/delete.go b/core/block/delete.go index 364db8b3b..20cfda5cf 100644 --- a/core/block/delete.go +++ b/core/block/delete.go @@ -128,16 +128,12 @@ func (s *Service) DeleteObject(objectId string) (err error) { } func (s *Service) OnDelete(id domain.FullID, workspaceRemove func() error) error { - var ( - isFavorite bool - ) - err := s.DoFullId(id, func(b smartblock.SmartBlock) error { b.ObjectCloseAllSessions() st := b.NewState() - isFavorite = pbtypes.GetBool(st.LocalDetails(), bundle.RelationKeyIsFavorite.String()) - if isFavorite { - _ = s.SetPageIsFavorite(pb.RpcObjectSetIsFavoriteRequest{IsFavorite: false, ContextId: id.ObjectID}) + isFavorite := pbtypes.GetBool(st.LocalDetails(), bundle.RelationKeyIsFavorite.String()) + if err := s.detailsService.SetIsFavorite(id.ObjectID, isFavorite); err != nil { + log.With("objectId", id).Errorf("failed to favorite object: %v", err) } b.SetIsDeleted() if workspaceRemove != nil { diff --git a/core/block/details_test.go b/core/block/detailservice/details_test.go similarity index 99% rename from core/block/details_test.go rename to core/block/detailservice/details_test.go index 01791fd85..453e30d75 100644 --- a/core/block/details_test.go +++ b/core/block/detailservice/details_test.go @@ -1,4 +1,4 @@ -package block +package detailservice import ( "testing" diff --git a/core/block/detailservice/mock_detailservice/mock_Service.go b/core/block/detailservice/mock_detailservice/mock_Service.go new file mode 100644 index 000000000..3ff60d154 --- /dev/null +++ b/core/block/detailservice/mock_detailservice/mock_Service.go @@ -0,0 +1,1001 @@ +// Code generated by mockery. DO NOT EDIT. + +package mock_detailservice + +import ( + context "context" + + app "github.com/anyproto/any-sync/app" + + domain "github.com/anyproto/anytype-heart/core/domain" + + mock "github.com/stretchr/testify/mock" + + model "github.com/anyproto/anytype-heart/pkg/lib/pb/model" + + pb "github.com/anyproto/anytype-heart/pb" + + session "github.com/anyproto/anytype-heart/core/session" + + smartblock "github.com/anyproto/anytype-heart/core/block/editor/smartblock" + + types "github.com/gogo/protobuf/types" +) + +// MockService is an autogenerated mock type for the Service type +type MockService struct { + mock.Mock +} + +type MockService_Expecter struct { + mock *mock.Mock +} + +func (_m *MockService) EXPECT() *MockService_Expecter { + return &MockService_Expecter{mock: &_m.Mock} +} + +// GetObject provides a mock function with given fields: ctx, objectID +func (_m *MockService) GetObject(ctx context.Context, objectID string) (smartblock.SmartBlock, error) { + ret := _m.Called(ctx, objectID) + + if len(ret) == 0 { + panic("no return value specified for GetObject") + } + + var r0 smartblock.SmartBlock + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string) (smartblock.SmartBlock, error)); ok { + return rf(ctx, objectID) + } + if rf, ok := ret.Get(0).(func(context.Context, string) smartblock.SmartBlock); ok { + r0 = rf(ctx, objectID) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(smartblock.SmartBlock) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { + r1 = rf(ctx, objectID) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockService_GetObject_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetObject' +type MockService_GetObject_Call struct { + *mock.Call +} + +// GetObject is a helper method to define mock.On call +// - ctx context.Context +// - objectID string +func (_e *MockService_Expecter) GetObject(ctx interface{}, objectID interface{}) *MockService_GetObject_Call { + return &MockService_GetObject_Call{Call: _e.mock.On("GetObject", ctx, objectID)} +} + +func (_c *MockService_GetObject_Call) Run(run func(ctx context.Context, objectID string)) *MockService_GetObject_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(string)) + }) + return _c +} + +func (_c *MockService_GetObject_Call) Return(sb smartblock.SmartBlock, err error) *MockService_GetObject_Call { + _c.Call.Return(sb, err) + return _c +} + +func (_c *MockService_GetObject_Call) RunAndReturn(run func(context.Context, string) (smartblock.SmartBlock, error)) *MockService_GetObject_Call { + _c.Call.Return(run) + return _c +} + +// GetObjectByFullID provides a mock function with given fields: ctx, id +func (_m *MockService) GetObjectByFullID(ctx context.Context, id domain.FullID) (smartblock.SmartBlock, error) { + ret := _m.Called(ctx, id) + + if len(ret) == 0 { + panic("no return value specified for GetObjectByFullID") + } + + var r0 smartblock.SmartBlock + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, domain.FullID) (smartblock.SmartBlock, error)); ok { + return rf(ctx, id) + } + if rf, ok := ret.Get(0).(func(context.Context, domain.FullID) smartblock.SmartBlock); ok { + r0 = rf(ctx, id) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(smartblock.SmartBlock) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, domain.FullID) error); ok { + r1 = rf(ctx, id) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockService_GetObjectByFullID_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetObjectByFullID' +type MockService_GetObjectByFullID_Call struct { + *mock.Call +} + +// GetObjectByFullID is a helper method to define mock.On call +// - ctx context.Context +// - id domain.FullID +func (_e *MockService_Expecter) GetObjectByFullID(ctx interface{}, id interface{}) *MockService_GetObjectByFullID_Call { + return &MockService_GetObjectByFullID_Call{Call: _e.mock.On("GetObjectByFullID", ctx, id)} +} + +func (_c *MockService_GetObjectByFullID_Call) Run(run func(ctx context.Context, id domain.FullID)) *MockService_GetObjectByFullID_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(domain.FullID)) + }) + return _c +} + +func (_c *MockService_GetObjectByFullID_Call) Return(sb smartblock.SmartBlock, err error) *MockService_GetObjectByFullID_Call { + _c.Call.Return(sb, err) + return _c +} + +func (_c *MockService_GetObjectByFullID_Call) RunAndReturn(run func(context.Context, domain.FullID) (smartblock.SmartBlock, error)) *MockService_GetObjectByFullID_Call { + _c.Call.Return(run) + return _c +} + +// Init provides a mock function with given fields: a +func (_m *MockService) Init(a *app.App) error { + ret := _m.Called(a) + + if len(ret) == 0 { + panic("no return value specified for Init") + } + + var r0 error + if rf, ok := ret.Get(0).(func(*app.App) error); ok { + r0 = rf(a) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MockService_Init_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Init' +type MockService_Init_Call struct { + *mock.Call +} + +// Init is a helper method to define mock.On call +// - a *app.App +func (_e *MockService_Expecter) Init(a interface{}) *MockService_Init_Call { + return &MockService_Init_Call{Call: _e.mock.On("Init", a)} +} + +func (_c *MockService_Init_Call) Run(run func(a *app.App)) *MockService_Init_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(*app.App)) + }) + return _c +} + +func (_c *MockService_Init_Call) Return(err error) *MockService_Init_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockService_Init_Call) RunAndReturn(run func(*app.App) error) *MockService_Init_Call { + _c.Call.Return(run) + return _c +} + +// ListRelationsWithValue provides a mock function with given fields: spaceId, value +func (_m *MockService) ListRelationsWithValue(spaceId string, value *types.Value) ([]string, []int64, error) { + ret := _m.Called(spaceId, value) + + if len(ret) == 0 { + panic("no return value specified for ListRelationsWithValue") + } + + var r0 []string + var r1 []int64 + var r2 error + if rf, ok := ret.Get(0).(func(string, *types.Value) ([]string, []int64, error)); ok { + return rf(spaceId, value) + } + if rf, ok := ret.Get(0).(func(string, *types.Value) []string); ok { + r0 = rf(spaceId, value) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]string) + } + } + + if rf, ok := ret.Get(1).(func(string, *types.Value) []int64); ok { + r1 = rf(spaceId, value) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).([]int64) + } + } + + if rf, ok := ret.Get(2).(func(string, *types.Value) error); ok { + r2 = rf(spaceId, value) + } else { + r2 = ret.Error(2) + } + + return r0, r1, r2 +} + +// MockService_ListRelationsWithValue_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListRelationsWithValue' +type MockService_ListRelationsWithValue_Call struct { + *mock.Call +} + +// ListRelationsWithValue is a helper method to define mock.On call +// - spaceId string +// - value *types.Value +func (_e *MockService_Expecter) ListRelationsWithValue(spaceId interface{}, value interface{}) *MockService_ListRelationsWithValue_Call { + return &MockService_ListRelationsWithValue_Call{Call: _e.mock.On("ListRelationsWithValue", spaceId, value)} +} + +func (_c *MockService_ListRelationsWithValue_Call) Run(run func(spaceId string, value *types.Value)) *MockService_ListRelationsWithValue_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(string), args[1].(*types.Value)) + }) + return _c +} + +func (_c *MockService_ListRelationsWithValue_Call) Return(keys []string, counters []int64, err error) *MockService_ListRelationsWithValue_Call { + _c.Call.Return(keys, counters, err) + return _c +} + +func (_c *MockService_ListRelationsWithValue_Call) RunAndReturn(run func(string, *types.Value) ([]string, []int64, error)) *MockService_ListRelationsWithValue_Call { + _c.Call.Return(run) + return _c +} + +// ModifyDetails provides a mock function with given fields: objectId, modifier +func (_m *MockService) ModifyDetails(objectId string, modifier func(*types.Struct) (*types.Struct, error)) error { + ret := _m.Called(objectId, modifier) + + if len(ret) == 0 { + panic("no return value specified for ModifyDetails") + } + + var r0 error + if rf, ok := ret.Get(0).(func(string, func(*types.Struct) (*types.Struct, error)) error); ok { + r0 = rf(objectId, modifier) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MockService_ModifyDetails_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ModifyDetails' +type MockService_ModifyDetails_Call struct { + *mock.Call +} + +// ModifyDetails is a helper method to define mock.On call +// - objectId string +// - modifier func(*types.Struct)(*types.Struct , error) +func (_e *MockService_Expecter) ModifyDetails(objectId interface{}, modifier interface{}) *MockService_ModifyDetails_Call { + return &MockService_ModifyDetails_Call{Call: _e.mock.On("ModifyDetails", objectId, modifier)} +} + +func (_c *MockService_ModifyDetails_Call) Run(run func(objectId string, modifier func(*types.Struct) (*types.Struct, error))) *MockService_ModifyDetails_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(string), args[1].(func(*types.Struct) (*types.Struct, error))) + }) + return _c +} + +func (_c *MockService_ModifyDetails_Call) Return(_a0 error) *MockService_ModifyDetails_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *MockService_ModifyDetails_Call) RunAndReturn(run func(string, func(*types.Struct) (*types.Struct, error)) error) *MockService_ModifyDetails_Call { + _c.Call.Return(run) + return _c +} + +// ModifyDetailsList provides a mock function with given fields: req +func (_m *MockService) ModifyDetailsList(req *pb.RpcObjectListModifyDetailValuesRequest) error { + ret := _m.Called(req) + + if len(ret) == 0 { + panic("no return value specified for ModifyDetailsList") + } + + var r0 error + if rf, ok := ret.Get(0).(func(*pb.RpcObjectListModifyDetailValuesRequest) error); ok { + r0 = rf(req) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MockService_ModifyDetailsList_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ModifyDetailsList' +type MockService_ModifyDetailsList_Call struct { + *mock.Call +} + +// ModifyDetailsList is a helper method to define mock.On call +// - req *pb.RpcObjectListModifyDetailValuesRequest +func (_e *MockService_Expecter) ModifyDetailsList(req interface{}) *MockService_ModifyDetailsList_Call { + return &MockService_ModifyDetailsList_Call{Call: _e.mock.On("ModifyDetailsList", req)} +} + +func (_c *MockService_ModifyDetailsList_Call) Run(run func(req *pb.RpcObjectListModifyDetailValuesRequest)) *MockService_ModifyDetailsList_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(*pb.RpcObjectListModifyDetailValuesRequest)) + }) + return _c +} + +func (_c *MockService_ModifyDetailsList_Call) Return(_a0 error) *MockService_ModifyDetailsList_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *MockService_ModifyDetailsList_Call) RunAndReturn(run func(*pb.RpcObjectListModifyDetailValuesRequest) error) *MockService_ModifyDetailsList_Call { + _c.Call.Return(run) + return _c +} + +// Name provides a mock function with given fields: +func (_m *MockService) Name() string { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for Name") + } + + var r0 string + if rf, ok := ret.Get(0).(func() string); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(string) + } + + return r0 +} + +// MockService_Name_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Name' +type MockService_Name_Call struct { + *mock.Call +} + +// Name is a helper method to define mock.On call +func (_e *MockService_Expecter) Name() *MockService_Name_Call { + return &MockService_Name_Call{Call: _e.mock.On("Name")} +} + +func (_c *MockService_Name_Call) Run(run func()) *MockService_Name_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *MockService_Name_Call) Return(name string) *MockService_Name_Call { + _c.Call.Return(name) + return _c +} + +func (_c *MockService_Name_Call) RunAndReturn(run func() string) *MockService_Name_Call { + _c.Call.Return(run) + return _c +} + +// ObjectTypeAddRelations provides a mock function with given fields: ctx, objectTypeId, relationKeys +func (_m *MockService) ObjectTypeAddRelations(ctx context.Context, objectTypeId string, relationKeys []domain.RelationKey) error { + ret := _m.Called(ctx, objectTypeId, relationKeys) + + if len(ret) == 0 { + panic("no return value specified for ObjectTypeAddRelations") + } + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, string, []domain.RelationKey) error); ok { + r0 = rf(ctx, objectTypeId, relationKeys) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MockService_ObjectTypeAddRelations_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectTypeAddRelations' +type MockService_ObjectTypeAddRelations_Call struct { + *mock.Call +} + +// ObjectTypeAddRelations is a helper method to define mock.On call +// - ctx context.Context +// - objectTypeId string +// - relationKeys []domain.RelationKey +func (_e *MockService_Expecter) ObjectTypeAddRelations(ctx interface{}, objectTypeId interface{}, relationKeys interface{}) *MockService_ObjectTypeAddRelations_Call { + return &MockService_ObjectTypeAddRelations_Call{Call: _e.mock.On("ObjectTypeAddRelations", ctx, objectTypeId, relationKeys)} +} + +func (_c *MockService_ObjectTypeAddRelations_Call) Run(run func(ctx context.Context, objectTypeId string, relationKeys []domain.RelationKey)) *MockService_ObjectTypeAddRelations_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(string), args[2].([]domain.RelationKey)) + }) + return _c +} + +func (_c *MockService_ObjectTypeAddRelations_Call) Return(_a0 error) *MockService_ObjectTypeAddRelations_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *MockService_ObjectTypeAddRelations_Call) RunAndReturn(run func(context.Context, string, []domain.RelationKey) error) *MockService_ObjectTypeAddRelations_Call { + _c.Call.Return(run) + return _c +} + +// ObjectTypeRemoveRelations provides a mock function with given fields: ctx, objectTypeId, relationKeys +func (_m *MockService) ObjectTypeRemoveRelations(ctx context.Context, objectTypeId string, relationKeys []domain.RelationKey) error { + ret := _m.Called(ctx, objectTypeId, relationKeys) + + if len(ret) == 0 { + panic("no return value specified for ObjectTypeRemoveRelations") + } + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, string, []domain.RelationKey) error); ok { + r0 = rf(ctx, objectTypeId, relationKeys) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MockService_ObjectTypeRemoveRelations_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectTypeRemoveRelations' +type MockService_ObjectTypeRemoveRelations_Call struct { + *mock.Call +} + +// ObjectTypeRemoveRelations is a helper method to define mock.On call +// - ctx context.Context +// - objectTypeId string +// - relationKeys []domain.RelationKey +func (_e *MockService_Expecter) ObjectTypeRemoveRelations(ctx interface{}, objectTypeId interface{}, relationKeys interface{}) *MockService_ObjectTypeRemoveRelations_Call { + return &MockService_ObjectTypeRemoveRelations_Call{Call: _e.mock.On("ObjectTypeRemoveRelations", ctx, objectTypeId, relationKeys)} +} + +func (_c *MockService_ObjectTypeRemoveRelations_Call) Run(run func(ctx context.Context, objectTypeId string, relationKeys []domain.RelationKey)) *MockService_ObjectTypeRemoveRelations_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(string), args[2].([]domain.RelationKey)) + }) + return _c +} + +func (_c *MockService_ObjectTypeRemoveRelations_Call) Return(_a0 error) *MockService_ObjectTypeRemoveRelations_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *MockService_ObjectTypeRemoveRelations_Call) RunAndReturn(run func(context.Context, string, []domain.RelationKey) error) *MockService_ObjectTypeRemoveRelations_Call { + _c.Call.Return(run) + return _c +} + +// SetDetails provides a mock function with given fields: ctx, objectId, details +func (_m *MockService) SetDetails(ctx session.Context, objectId string, details []*model.Detail) error { + ret := _m.Called(ctx, objectId, details) + + if len(ret) == 0 { + panic("no return value specified for SetDetails") + } + + var r0 error + if rf, ok := ret.Get(0).(func(session.Context, string, []*model.Detail) error); ok { + r0 = rf(ctx, objectId, details) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MockService_SetDetails_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetDetails' +type MockService_SetDetails_Call struct { + *mock.Call +} + +// SetDetails is a helper method to define mock.On call +// - ctx session.Context +// - objectId string +// - details []*model.Detail +func (_e *MockService_Expecter) SetDetails(ctx interface{}, objectId interface{}, details interface{}) *MockService_SetDetails_Call { + return &MockService_SetDetails_Call{Call: _e.mock.On("SetDetails", ctx, objectId, details)} +} + +func (_c *MockService_SetDetails_Call) Run(run func(ctx session.Context, objectId string, details []*model.Detail)) *MockService_SetDetails_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(session.Context), args[1].(string), args[2].([]*model.Detail)) + }) + return _c +} + +func (_c *MockService_SetDetails_Call) Return(_a0 error) *MockService_SetDetails_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *MockService_SetDetails_Call) RunAndReturn(run func(session.Context, string, []*model.Detail) error) *MockService_SetDetails_Call { + _c.Call.Return(run) + return _c +} + +// SetDetailsAndUpdateLastUsed provides a mock function with given fields: ctx, objectId, details +func (_m *MockService) SetDetailsAndUpdateLastUsed(ctx session.Context, objectId string, details []*model.Detail) error { + ret := _m.Called(ctx, objectId, details) + + if len(ret) == 0 { + panic("no return value specified for SetDetailsAndUpdateLastUsed") + } + + var r0 error + if rf, ok := ret.Get(0).(func(session.Context, string, []*model.Detail) error); ok { + r0 = rf(ctx, objectId, details) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MockService_SetDetailsAndUpdateLastUsed_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetDetailsAndUpdateLastUsed' +type MockService_SetDetailsAndUpdateLastUsed_Call struct { + *mock.Call +} + +// SetDetailsAndUpdateLastUsed is a helper method to define mock.On call +// - ctx session.Context +// - objectId string +// - details []*model.Detail +func (_e *MockService_Expecter) SetDetailsAndUpdateLastUsed(ctx interface{}, objectId interface{}, details interface{}) *MockService_SetDetailsAndUpdateLastUsed_Call { + return &MockService_SetDetailsAndUpdateLastUsed_Call{Call: _e.mock.On("SetDetailsAndUpdateLastUsed", ctx, objectId, details)} +} + +func (_c *MockService_SetDetailsAndUpdateLastUsed_Call) Run(run func(ctx session.Context, objectId string, details []*model.Detail)) *MockService_SetDetailsAndUpdateLastUsed_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(session.Context), args[1].(string), args[2].([]*model.Detail)) + }) + return _c +} + +func (_c *MockService_SetDetailsAndUpdateLastUsed_Call) Return(_a0 error) *MockService_SetDetailsAndUpdateLastUsed_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *MockService_SetDetailsAndUpdateLastUsed_Call) RunAndReturn(run func(session.Context, string, []*model.Detail) error) *MockService_SetDetailsAndUpdateLastUsed_Call { + _c.Call.Return(run) + return _c +} + +// SetDetailsList provides a mock function with given fields: ctx, objectIds, details +func (_m *MockService) SetDetailsList(ctx session.Context, objectIds []string, details []*model.Detail) error { + ret := _m.Called(ctx, objectIds, details) + + if len(ret) == 0 { + panic("no return value specified for SetDetailsList") + } + + var r0 error + if rf, ok := ret.Get(0).(func(session.Context, []string, []*model.Detail) error); ok { + r0 = rf(ctx, objectIds, details) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MockService_SetDetailsList_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetDetailsList' +type MockService_SetDetailsList_Call struct { + *mock.Call +} + +// SetDetailsList is a helper method to define mock.On call +// - ctx session.Context +// - objectIds []string +// - details []*model.Detail +func (_e *MockService_Expecter) SetDetailsList(ctx interface{}, objectIds interface{}, details interface{}) *MockService_SetDetailsList_Call { + return &MockService_SetDetailsList_Call{Call: _e.mock.On("SetDetailsList", ctx, objectIds, details)} +} + +func (_c *MockService_SetDetailsList_Call) Run(run func(ctx session.Context, objectIds []string, details []*model.Detail)) *MockService_SetDetailsList_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(session.Context), args[1].([]string), args[2].([]*model.Detail)) + }) + return _c +} + +func (_c *MockService_SetDetailsList_Call) Return(_a0 error) *MockService_SetDetailsList_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *MockService_SetDetailsList_Call) RunAndReturn(run func(session.Context, []string, []*model.Detail) error) *MockService_SetDetailsList_Call { + _c.Call.Return(run) + return _c +} + +// SetIsArchived provides a mock function with given fields: objectId, isArchived +func (_m *MockService) SetIsArchived(objectId string, isArchived bool) error { + ret := _m.Called(objectId, isArchived) + + if len(ret) == 0 { + panic("no return value specified for SetIsArchived") + } + + var r0 error + if rf, ok := ret.Get(0).(func(string, bool) error); ok { + r0 = rf(objectId, isArchived) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MockService_SetIsArchived_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetIsArchived' +type MockService_SetIsArchived_Call struct { + *mock.Call +} + +// SetIsArchived is a helper method to define mock.On call +// - objectId string +// - isArchived bool +func (_e *MockService_Expecter) SetIsArchived(objectId interface{}, isArchived interface{}) *MockService_SetIsArchived_Call { + return &MockService_SetIsArchived_Call{Call: _e.mock.On("SetIsArchived", objectId, isArchived)} +} + +func (_c *MockService_SetIsArchived_Call) Run(run func(objectId string, isArchived bool)) *MockService_SetIsArchived_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(string), args[1].(bool)) + }) + return _c +} + +func (_c *MockService_SetIsArchived_Call) Return(_a0 error) *MockService_SetIsArchived_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *MockService_SetIsArchived_Call) RunAndReturn(run func(string, bool) error) *MockService_SetIsArchived_Call { + _c.Call.Return(run) + return _c +} + +// SetIsFavorite provides a mock function with given fields: objectId, isFavorite +func (_m *MockService) SetIsFavorite(objectId string, isFavorite bool) error { + ret := _m.Called(objectId, isFavorite) + + if len(ret) == 0 { + panic("no return value specified for SetIsFavorite") + } + + var r0 error + if rf, ok := ret.Get(0).(func(string, bool) error); ok { + r0 = rf(objectId, isFavorite) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MockService_SetIsFavorite_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetIsFavorite' +type MockService_SetIsFavorite_Call struct { + *mock.Call +} + +// SetIsFavorite is a helper method to define mock.On call +// - objectId string +// - isFavorite bool +func (_e *MockService_Expecter) SetIsFavorite(objectId interface{}, isFavorite interface{}) *MockService_SetIsFavorite_Call { + return &MockService_SetIsFavorite_Call{Call: _e.mock.On("SetIsFavorite", objectId, isFavorite)} +} + +func (_c *MockService_SetIsFavorite_Call) Run(run func(objectId string, isFavorite bool)) *MockService_SetIsFavorite_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(string), args[1].(bool)) + }) + return _c +} + +func (_c *MockService_SetIsFavorite_Call) Return(_a0 error) *MockService_SetIsFavorite_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *MockService_SetIsFavorite_Call) RunAndReturn(run func(string, bool) error) *MockService_SetIsFavorite_Call { + _c.Call.Return(run) + return _c +} + +// SetListIsArchived provides a mock function with given fields: objectIds, isArchived +func (_m *MockService) SetListIsArchived(objectIds []string, isArchived bool) error { + ret := _m.Called(objectIds, isArchived) + + if len(ret) == 0 { + panic("no return value specified for SetListIsArchived") + } + + var r0 error + if rf, ok := ret.Get(0).(func([]string, bool) error); ok { + r0 = rf(objectIds, isArchived) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MockService_SetListIsArchived_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetListIsArchived' +type MockService_SetListIsArchived_Call struct { + *mock.Call +} + +// SetListIsArchived is a helper method to define mock.On call +// - objectIds []string +// - isArchived bool +func (_e *MockService_Expecter) SetListIsArchived(objectIds interface{}, isArchived interface{}) *MockService_SetListIsArchived_Call { + return &MockService_SetListIsArchived_Call{Call: _e.mock.On("SetListIsArchived", objectIds, isArchived)} +} + +func (_c *MockService_SetListIsArchived_Call) Run(run func(objectIds []string, isArchived bool)) *MockService_SetListIsArchived_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].([]string), args[1].(bool)) + }) + return _c +} + +func (_c *MockService_SetListIsArchived_Call) Return(_a0 error) *MockService_SetListIsArchived_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *MockService_SetListIsArchived_Call) RunAndReturn(run func([]string, bool) error) *MockService_SetListIsArchived_Call { + _c.Call.Return(run) + return _c +} + +// SetListIsFavorite provides a mock function with given fields: objectIds, isFavorite +func (_m *MockService) SetListIsFavorite(objectIds []string, isFavorite bool) error { + ret := _m.Called(objectIds, isFavorite) + + if len(ret) == 0 { + panic("no return value specified for SetListIsFavorite") + } + + var r0 error + if rf, ok := ret.Get(0).(func([]string, bool) error); ok { + r0 = rf(objectIds, isFavorite) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MockService_SetListIsFavorite_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetListIsFavorite' +type MockService_SetListIsFavorite_Call struct { + *mock.Call +} + +// SetListIsFavorite is a helper method to define mock.On call +// - objectIds []string +// - isFavorite bool +func (_e *MockService_Expecter) SetListIsFavorite(objectIds interface{}, isFavorite interface{}) *MockService_SetListIsFavorite_Call { + return &MockService_SetListIsFavorite_Call{Call: _e.mock.On("SetListIsFavorite", objectIds, isFavorite)} +} + +func (_c *MockService_SetListIsFavorite_Call) Run(run func(objectIds []string, isFavorite bool)) *MockService_SetListIsFavorite_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].([]string), args[1].(bool)) + }) + return _c +} + +func (_c *MockService_SetListIsFavorite_Call) Return(_a0 error) *MockService_SetListIsFavorite_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *MockService_SetListIsFavorite_Call) RunAndReturn(run func([]string, bool) error) *MockService_SetListIsFavorite_Call { + _c.Call.Return(run) + return _c +} + +// SetSource provides a mock function with given fields: ctx, objectId, source +func (_m *MockService) SetSource(ctx session.Context, objectId string, source []string) error { + ret := _m.Called(ctx, objectId, source) + + if len(ret) == 0 { + panic("no return value specified for SetSource") + } + + var r0 error + if rf, ok := ret.Get(0).(func(session.Context, string, []string) error); ok { + r0 = rf(ctx, objectId, source) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MockService_SetSource_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetSource' +type MockService_SetSource_Call struct { + *mock.Call +} + +// SetSource is a helper method to define mock.On call +// - ctx session.Context +// - objectId string +// - source []string +func (_e *MockService_Expecter) SetSource(ctx interface{}, objectId interface{}, source interface{}) *MockService_SetSource_Call { + return &MockService_SetSource_Call{Call: _e.mock.On("SetSource", ctx, objectId, source)} +} + +func (_c *MockService_SetSource_Call) Run(run func(ctx session.Context, objectId string, source []string)) *MockService_SetSource_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(session.Context), args[1].(string), args[2].([]string)) + }) + return _c +} + +func (_c *MockService_SetSource_Call) Return(_a0 error) *MockService_SetSource_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *MockService_SetSource_Call) RunAndReturn(run func(session.Context, string, []string) error) *MockService_SetSource_Call { + _c.Call.Return(run) + return _c +} + +// SetSpaceInfo provides a mock function with given fields: spaceId, details +func (_m *MockService) SetSpaceInfo(spaceId string, details *types.Struct) error { + ret := _m.Called(spaceId, details) + + if len(ret) == 0 { + panic("no return value specified for SetSpaceInfo") + } + + var r0 error + if rf, ok := ret.Get(0).(func(string, *types.Struct) error); ok { + r0 = rf(spaceId, details) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MockService_SetSpaceInfo_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetSpaceInfo' +type MockService_SetSpaceInfo_Call struct { + *mock.Call +} + +// SetSpaceInfo is a helper method to define mock.On call +// - spaceId string +// - details *types.Struct +func (_e *MockService_Expecter) SetSpaceInfo(spaceId interface{}, details interface{}) *MockService_SetSpaceInfo_Call { + return &MockService_SetSpaceInfo_Call{Call: _e.mock.On("SetSpaceInfo", spaceId, details)} +} + +func (_c *MockService_SetSpaceInfo_Call) Run(run func(spaceId string, details *types.Struct)) *MockService_SetSpaceInfo_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(string), args[1].(*types.Struct)) + }) + return _c +} + +func (_c *MockService_SetSpaceInfo_Call) Return(_a0 error) *MockService_SetSpaceInfo_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *MockService_SetSpaceInfo_Call) RunAndReturn(run func(string, *types.Struct) error) *MockService_SetSpaceInfo_Call { + _c.Call.Return(run) + return _c +} + +// SetWorkspaceDashboardId provides a mock function with given fields: ctx, workspaceId, id +func (_m *MockService) SetWorkspaceDashboardId(ctx session.Context, workspaceId string, id string) (string, error) { + ret := _m.Called(ctx, workspaceId, id) + + if len(ret) == 0 { + panic("no return value specified for SetWorkspaceDashboardId") + } + + var r0 string + var r1 error + if rf, ok := ret.Get(0).(func(session.Context, string, string) (string, error)); ok { + return rf(ctx, workspaceId, id) + } + if rf, ok := ret.Get(0).(func(session.Context, string, string) string); ok { + r0 = rf(ctx, workspaceId, id) + } else { + r0 = ret.Get(0).(string) + } + + if rf, ok := ret.Get(1).(func(session.Context, string, string) error); ok { + r1 = rf(ctx, workspaceId, id) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockService_SetWorkspaceDashboardId_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetWorkspaceDashboardId' +type MockService_SetWorkspaceDashboardId_Call struct { + *mock.Call +} + +// SetWorkspaceDashboardId is a helper method to define mock.On call +// - ctx session.Context +// - workspaceId string +// - id string +func (_e *MockService_Expecter) SetWorkspaceDashboardId(ctx interface{}, workspaceId interface{}, id interface{}) *MockService_SetWorkspaceDashboardId_Call { + return &MockService_SetWorkspaceDashboardId_Call{Call: _e.mock.On("SetWorkspaceDashboardId", ctx, workspaceId, id)} +} + +func (_c *MockService_SetWorkspaceDashboardId_Call) Run(run func(ctx session.Context, workspaceId string, id string)) *MockService_SetWorkspaceDashboardId_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(session.Context), args[1].(string), args[2].(string)) + }) + return _c +} + +func (_c *MockService_SetWorkspaceDashboardId_Call) Return(setId string, err error) *MockService_SetWorkspaceDashboardId_Call { + _c.Call.Return(setId, err) + return _c +} + +func (_c *MockService_SetWorkspaceDashboardId_Call) RunAndReturn(run func(session.Context, string, string) (string, error)) *MockService_SetWorkspaceDashboardId_Call { + _c.Call.Return(run) + return _c +} + +// NewMockService creates a new instance of MockService. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockService(t interface { + mock.TestingT + Cleanup(func()) +}) *MockService { + mock := &MockService{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/core/block/detailservice/relations.go b/core/block/detailservice/relations.go new file mode 100644 index 000000000..af0181e93 --- /dev/null +++ b/core/block/detailservice/relations.go @@ -0,0 +1,146 @@ +package detailservice + +import ( + "context" + "fmt" + "slices" + "strings" + "time" + + "github.com/gogo/protobuf/types" + "go.uber.org/zap" + "golang.org/x/exp/maps" + + "github.com/anyproto/anytype-heart/core/block/cache" + "github.com/anyproto/anytype-heart/core/block/editor/smartblock" + "github.com/anyproto/anytype-heart/core/domain" + "github.com/anyproto/anytype-heart/pkg/lib/bundle" + coresb "github.com/anyproto/anytype-heart/pkg/lib/core/smartblock" + "github.com/anyproto/anytype-heart/pkg/lib/database" + "github.com/anyproto/anytype-heart/pkg/lib/localstore/addr" + "github.com/anyproto/anytype-heart/pkg/lib/pb/model" + "github.com/anyproto/anytype-heart/space/spacecore/typeprovider" + "github.com/anyproto/anytype-heart/util/pbtypes" + "github.com/anyproto/anytype-heart/util/slice" +) + +var ErrBundledTypeIsReadonly = fmt.Errorf("can't modify bundled object type") + +func (s *service) ObjectTypeAddRelations(ctx context.Context, objectTypeId string, relationKeys []domain.RelationKey) error { + if strings.HasPrefix(objectTypeId, bundle.TypePrefix) { + return ErrBundledTypeIsReadonly + } + return cache.Do(s, objectTypeId, func(b smartblock.SmartBlock) error { + st := b.NewState() + list := pbtypes.GetStringList(st.Details(), bundle.RelationKeyRecommendedRelations.String()) + for _, relKey := range relationKeys { + relId, err := b.Space().GetRelationIdByKey(ctx, relKey) + if err != nil { + return err + } + if !slices.Contains(list, relId) { + list = append(list, relId) + } + } + st.SetDetailAndBundledRelation(bundle.RelationKeyRecommendedRelations, pbtypes.StringList(list)) + return b.Apply(st) + }) +} + +func (s *service) ObjectTypeRemoveRelations(ctx context.Context, objectTypeId string, relationKeys []domain.RelationKey) error { + if strings.HasPrefix(objectTypeId, bundle.TypePrefix) { + return ErrBundledTypeIsReadonly + } + return cache.Do(s, objectTypeId, func(b smartblock.SmartBlock) error { + st := b.NewState() + list := pbtypes.GetStringList(st.Details(), bundle.RelationKeyRecommendedRelations.String()) + for _, relKey := range relationKeys { + relId, err := b.Space().GetRelationIdByKey(ctx, relKey) + if err != nil { + return fmt.Errorf("get relation id by key %s: %w", relKey, err) + } + list = slice.RemoveMut(list, relId) + } + st.SetDetailAndBundledRelation(bundle.RelationKeyRecommendedRelations, pbtypes.StringList(list)) + return b.Apply(st) + }) +} + +func (s *service) ListRelationsWithValue(spaceId string, value *types.Value) (keys []string, counters []int64, err error) { + countersByKeys := make(map[string]int64) + detailHandlesValue := generateFilter(value) + + err = s.store.QueryIterate(database.Query{Filters: []*model.BlockContentDataviewFilter{{ + RelationKey: bundle.RelationKeySpaceId.String(), + Condition: model.BlockContentDataviewFilter_Equal, + Value: pbtypes.String(spaceId), + }}}, func(details *types.Struct) { + for key, valueToCheck := range details.Fields { + if detailHandlesValue(valueToCheck) { + if counter, ok := countersByKeys[key]; ok { + countersByKeys[key] = counter + 1 + } else { + countersByKeys[key] = 1 + } + } + } + }) + + if err != nil { + return nil, nil, fmt.Errorf("failed to query objects: %w", err) + } + + keys = maps.Keys(countersByKeys) + slices.Sort(keys) + + for _, key := range keys { + counters = append(counters, countersByKeys[key]) + } + + return keys, counters, nil +} + +func generateFilter(value *types.Value) func(v *types.Value) bool { + equalFilter := func(v *types.Value) bool { + return v.Equal(value) + } + + stringValue := value.GetStringValue() + if stringValue == "" { + return equalFilter + } + + sbt, err := typeprovider.SmartblockTypeFromID(stringValue) + if err != nil { + log.Error("failed to determine smartblock type", zap.Error(err)) + } + + if sbt != coresb.SmartBlockTypeDate { + return equalFilter + } + + start, err := dateIDToDayStart(stringValue) + if err != nil { + log.Error("failed to convert date id to day start", zap.Error(err)) + return equalFilter + } + + end := start.Add(24 * time.Hour) + startTimestamp := start.Unix() + endTimestamp := end.Unix() + + return func(v *types.Value) bool { + numberValue := int64(v.GetNumberValue()) + if numberValue >= startTimestamp && numberValue < endTimestamp { + return true + } + return equalFilter(v) + } +} + +func dateIDToDayStart(id string) (time.Time, error) { + if !strings.HasPrefix(id, addr.DatePrefix) { + return time.Time{}, fmt.Errorf("invalid id: date prefix not found") + } + return time.Parse("2006-01-02", strings.TrimPrefix(id, addr.DatePrefix)) +} diff --git a/core/block/detailservice/relations_test.go b/core/block/detailservice/relations_test.go new file mode 100644 index 000000000..5db077243 --- /dev/null +++ b/core/block/detailservice/relations_test.go @@ -0,0 +1,210 @@ +package detailservice + +import ( + "context" + "testing" + "time" + + "github.com/gogo/protobuf/types" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + + "github.com/anyproto/anytype-heart/core/block/editor/smartblock" + "github.com/anyproto/anytype-heart/core/block/editor/smartblock/smarttest" + "github.com/anyproto/anytype-heart/core/block/editor/state" + "github.com/anyproto/anytype-heart/core/domain" + "github.com/anyproto/anytype-heart/pkg/lib/bundle" + "github.com/anyproto/anytype-heart/pkg/lib/localstore/addr" + "github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore" + "github.com/anyproto/anytype-heart/pkg/lib/pb/model" + "github.com/anyproto/anytype-heart/util/pbtypes" +) + +func relationObject(key domain.RelationKey, format model.RelationFormat) objectstore.TestObject { + return objectstore.TestObject{ + bundle.RelationKeyId: pbtypes.String(key.URL()), + bundle.RelationKeySpaceId: pbtypes.String(spaceId), + bundle.RelationKeyLayout: pbtypes.Float64(float64(model.ObjectType_relation)), + bundle.RelationKeyRelationKey: pbtypes.String(key.String()), + bundle.RelationKeyRelationFormat: pbtypes.Int64(int64(format)), + } +} + +func TestService_ListRelationsWithValue(t *testing.T) { + store := objectstore.NewStoreFixture(t) + store.AddObjects(t, []objectstore.TestObject{ + // relations + relationObject(bundle.RelationKeyLastModifiedDate, model.RelationFormat_date), + relationObject(bundle.RelationKeyAddedDate, model.RelationFormat_date), + relationObject(bundle.RelationKeyCreatedDate, model.RelationFormat_date), + relationObject(bundle.RelationKeyLinks, model.RelationFormat_object), + relationObject(bundle.RelationKeyName, model.RelationFormat_longtext), + relationObject(bundle.RelationKeyIsHidden, model.RelationFormat_checkbox), + relationObject(bundle.RelationKeyIsFavorite, model.RelationFormat_checkbox), + relationObject("daysTillSummer", model.RelationFormat_number), + relationObject(bundle.RelationKeyCoverX, model.RelationFormat_number), + { + bundle.RelationKeyId: pbtypes.String("obj1"), + bundle.RelationKeySpaceId: pbtypes.String(spaceId), + bundle.RelationKeyCreatedDate: pbtypes.Int64(time.Now().Add(-5 * time.Minute).Unix()), + bundle.RelationKeyAddedDate: pbtypes.Int64(time.Now().Add(-3 * time.Minute).Unix()), + bundle.RelationKeyLastModifiedDate: pbtypes.Int64(time.Now().Add(-1 * time.Minute).Unix()), + bundle.RelationKeyIsFavorite: pbtypes.Bool(true), + "daysTillSummer": pbtypes.Int64(300), + bundle.RelationKeyLinks: pbtypes.StringList([]string{"obj2", "obj3"}), + }, + { + bundle.RelationKeyId: pbtypes.String("obj2"), + bundle.RelationKeySpaceId: pbtypes.String(spaceId), + bundle.RelationKeyName: pbtypes.String(addr.TimeToID(time.Now())), + bundle.RelationKeyCreatedDate: pbtypes.Int64(time.Now().Add(-24*time.Hour - 5*time.Minute).Unix()), + bundle.RelationKeyAddedDate: pbtypes.Int64(time.Now().Add(-24*time.Hour - 3*time.Minute).Unix()), + bundle.RelationKeyLastModifiedDate: pbtypes.Int64(time.Now().Add(-1 * time.Minute).Unix()), + bundle.RelationKeyCoverX: pbtypes.Int64(300), + }, + { + bundle.RelationKeyId: pbtypes.String("obj3"), + bundle.RelationKeySpaceId: pbtypes.String(spaceId), + bundle.RelationKeyIsHidden: pbtypes.Bool(true), + bundle.RelationKeyCreatedDate: pbtypes.Int64(time.Now().Add(-3 * time.Minute).Unix()), + bundle.RelationKeyLastModifiedDate: pbtypes.Int64(time.Now().Unix()), + bundle.RelationKeyIsFavorite: pbtypes.Bool(true), + bundle.RelationKeyCoverX: pbtypes.Int64(300), + }, + }) + + bs := service{store: store} + + for _, tc := range []struct { + name string + value *types.Value + expectedKeys []string + expectedCounters []int64 + }{ + { + "date object - today", + pbtypes.String(addr.TimeToID(time.Now())), + []string{bundle.RelationKeyAddedDate.String(), bundle.RelationKeyCreatedDate.String(), bundle.RelationKeyLastModifiedDate.String(), bundle.RelationKeyName.String()}, + []int64{1, 2, 3, 1}, + }, + { + "date object - yesterday", + pbtypes.String(addr.TimeToID(time.Now().Add(-24 * time.Hour))), + []string{bundle.RelationKeyAddedDate.String(), bundle.RelationKeyCreatedDate.String()}, + []int64{1, 1}, + }, + { + "number", + pbtypes.Int64(300), + []string{bundle.RelationKeyCoverX.String(), "daysTillSummer"}, + []int64{2, 1}, + }, + { + "bool", + pbtypes.Bool(true), + []string{bundle.RelationKeyIsFavorite.String(), bundle.RelationKeyIsHidden.String()}, + []int64{2, 1}, + }, + { + "string list", + pbtypes.StringList([]string{"obj2", "obj3"}), + []string{bundle.RelationKeyLinks.String()}, + []int64{1}, + }, + } { + t.Run(tc.name, func(t *testing.T) { + keys, counters, err := bs.ListRelationsWithValue(spaceId, tc.value) + assert.NoError(t, err) + assert.Equal(t, tc.expectedKeys, keys) + assert.Equal(t, tc.expectedCounters, counters) + }) + } +} + +func TestService_ObjectTypeAddRelations(t *testing.T) { + t.Run("add recommended relations", func(t *testing.T) { + // given + fx := newFixture(t) + sb := smarttest.New(bundle.TypeKeyTask.URL()) + sb.SetSpace(fx.space) + fx.space.EXPECT().GetObject(mock.Anything, mock.Anything).RunAndReturn(func(ctx context.Context, objectId string) (smartblock.SmartBlock, error) { + assert.Equal(t, bundle.TypeKeyTask.URL(), objectId) + return sb, nil + }) + fx.space.EXPECT().GetRelationIdByKey(mock.Anything, mock.Anything).RunAndReturn(func(ctx context.Context, key domain.RelationKey) (string, error) { + return key.URL(), nil + }) + + // when + err := fx.ObjectTypeAddRelations(nil, bundle.TypeKeyTask.URL(), []domain.RelationKey{ + bundle.RelationKeyAssignee, bundle.RelationKeyDone, + }) + + // then + assert.NoError(t, err) + assert.Equal(t, []string{bundle.RelationKeyAssignee.URL(), bundle.RelationKeyDone.URL()}, + pbtypes.GetStringList(sb.Details(), bundle.RelationKeyRecommendedRelations.String())) + }) + + t.Run("editing of bundled types is prohibited", func(t *testing.T) { + // given + fx := newFixture(t) + + // when + err := fx.ObjectTypeAddRelations(nil, bundle.TypeKeyTask.BundledURL(), []domain.RelationKey{ + bundle.RelationKeyAssignee, bundle.RelationKeyDone, + }) + + // then + assert.Error(t, err) + assert.ErrorIs(t, ErrBundledTypeIsReadonly, err) + }) +} + +func TestService_ObjectTypeRemoveRelations(t *testing.T) { + t.Run("remove recommended relations", func(t *testing.T) { + // given + fx := newFixture(t) + sb := smarttest.New(bundle.TypeKeyTask.URL()) + sb.SetSpace(fx.space) + sb.Doc.(*state.State).SetDetails(&types.Struct{Fields: map[string]*types.Value{ + bundle.RelationKeyRecommendedRelations.String(): pbtypes.StringList([]string{ + bundle.RelationKeyAssignee.URL(), + bundle.RelationKeyIsFavorite.URL(), + bundle.RelationKeyDone.URL(), + bundle.RelationKeyLinkedProjects.URL(), + }), + }}) + fx.space.EXPECT().GetObject(mock.Anything, mock.Anything).RunAndReturn(func(ctx context.Context, objectId string) (smartblock.SmartBlock, error) { + assert.Equal(t, bundle.TypeKeyTask.URL(), objectId) + return sb, nil + }) + fx.space.EXPECT().GetRelationIdByKey(mock.Anything, mock.Anything).RunAndReturn(func(ctx context.Context, key domain.RelationKey) (string, error) { + return key.URL(), nil + }) + + // when + err := fx.ObjectTypeRemoveRelations(nil, bundle.TypeKeyTask.URL(), []domain.RelationKey{ + bundle.RelationKeyAssignee, bundle.RelationKeyDone, + }) + + // then + assert.NoError(t, err) + assert.Equal(t, []string{bundle.RelationKeyIsFavorite.URL(), bundle.RelationKeyLinkedProjects.URL()}, + pbtypes.GetStringList(sb.Details(), bundle.RelationKeyRecommendedRelations.String())) + }) + + t.Run("editing of bundled types is prohibited", func(t *testing.T) { + // given + fx := newFixture(t) + + // when + err := fx.ObjectTypeRemoveRelations(nil, bundle.TypeKeyTask.BundledURL(), []domain.RelationKey{ + bundle.RelationKeyAssignee, bundle.RelationKeyDone, + }) + + // then + assert.Error(t, err) + assert.ErrorIs(t, ErrBundledTypeIsReadonly, err) + }) +} diff --git a/core/block/details.go b/core/block/detailservice/service.go similarity index 53% rename from core/block/details.go rename to core/block/detailservice/service.go index 237aded0b..8fd848a4c 100644 --- a/core/block/details.go +++ b/core/block/detailservice/service.go @@ -1,34 +1,111 @@ -package block +package detailservice import ( + "context" "errors" + "fmt" "slices" + "github.com/anyproto/any-sync/app" + "github.com/anyproto/any-sync/app/logger" "github.com/gogo/protobuf/types" "github.com/samber/lo" + "go.uber.org/zap" "github.com/anyproto/anytype-heart/core/block/cache" "github.com/anyproto/anytype-heart/core/block/editor/basic" + "github.com/anyproto/anytype-heart/core/block/editor/smartblock" + "github.com/anyproto/anytype-heart/core/block/object/idresolver" + "github.com/anyproto/anytype-heart/core/block/restriction" + "github.com/anyproto/anytype-heart/core/domain" "github.com/anyproto/anytype-heart/core/session" "github.com/anyproto/anytype-heart/pb" + "github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore" "github.com/anyproto/anytype-heart/pkg/lib/pb/model" + "github.com/anyproto/anytype-heart/space" "github.com/anyproto/anytype-heart/util/pbtypes" "github.com/anyproto/anytype-heart/util/slice" ) -func (s *Service) SetDetails(ctx session.Context, objectId string, details []*model.Detail) (err error) { +const CName = "details.service" + +var log = logger.NewNamed(CName) + +type Service interface { + cache.ObjectGetterComponent + + SetDetails(ctx session.Context, objectId string, details []*model.Detail) error + SetDetailsAndUpdateLastUsed(ctx session.Context, objectId string, details []*model.Detail) error + SetDetailsList(ctx session.Context, objectIds []string, details []*model.Detail) error + ModifyDetails(objectId string, modifier func(current *types.Struct) (*types.Struct, error)) error + ModifyDetailsList(req *pb.RpcObjectListModifyDetailValuesRequest) error + + ObjectTypeAddRelations(ctx context.Context, objectTypeId string, relationKeys []domain.RelationKey) error + ObjectTypeRemoveRelations(ctx context.Context, objectTypeId string, relationKeys []domain.RelationKey) error + + ListRelationsWithValue(spaceId string, value *types.Value) (keys []string, counters []int64, err error) + + SetSpaceInfo(spaceId string, details *types.Struct) error + SetWorkspaceDashboardId(ctx session.Context, workspaceId string, id string) (setId string, err error) + + SetIsFavorite(objectId string, isFavorite bool) error + SetIsArchived(objectId string, isArchived bool) error + SetListIsFavorite(objectIds []string, isFavorite bool) error + SetListIsArchived(objectIds []string, isArchived bool) error +} + +func New() Service { + return &service{} +} + +type service struct { + resolver idresolver.Resolver + spaceService space.Service + store objectstore.ObjectStore + restriction restriction.Service +} + +func (s *service) Init(a *app.App) error { + s.resolver = app.MustComponent[idresolver.Resolver](a) + s.spaceService = app.MustComponent[space.Service](a) + s.store = app.MustComponent[objectstore.ObjectStore](a) + s.restriction = app.MustComponent[restriction.Service](a) + return nil +} + +func (s *service) Name() string { + return CName +} + +func (s *service) GetObject(ctx context.Context, objectID string) (sb smartblock.SmartBlock, err error) { + spaceID, err := s.resolver.ResolveSpaceID(objectID) + if err != nil { + return nil, err + } + return s.GetObjectByFullID(ctx, domain.FullID{SpaceID: spaceID, ObjectID: objectID}) +} + +func (s *service) GetObjectByFullID(ctx context.Context, id domain.FullID) (sb smartblock.SmartBlock, err error) { + spc, err := s.spaceService.Get(ctx, id.SpaceID) + if err != nil { + return nil, fmt.Errorf("get space: %w", err) + } + return spc.GetObject(ctx, id.ObjectID) +} + +func (s *service) SetDetails(ctx session.Context, objectId string, details []*model.Detail) (err error) { return cache.Do(s, objectId, func(b basic.DetailsSettable) error { return b.SetDetails(ctx, details, true) }) } -func (s *Service) SetDetailsAndUpdateLastUsed(ctx session.Context, objectId string, details []*model.Detail) (err error) { +func (s *service) SetDetailsAndUpdateLastUsed(ctx session.Context, objectId string, details []*model.Detail) (err error) { return cache.Do(s, objectId, func(b basic.DetailsSettable) error { return b.SetDetailsAndUpdateLastUsed(ctx, details, true) }) } -func (s *Service) SetDetailsList(ctx session.Context, objectIds []string, details []*model.Detail) (err error) { +func (s *service) SetDetailsList(ctx session.Context, objectIds []string, details []*model.Detail) (err error) { var ( resultError error anySucceed bool @@ -46,7 +123,7 @@ func (s *Service) SetDetailsList(ctx session.Context, objectIds []string, detail } } if resultError != nil { - log.Warnf("SetDetailsList: %v", resultError) + log.Warn("SetDetailsList", zap.Error(resultError)) } if anySucceed { return nil @@ -55,19 +132,19 @@ func (s *Service) SetDetailsList(ctx session.Context, objectIds []string, detail } // ModifyDetails performs details get and update under the sb lock to make sure no modifications are done in the middle -func (s *Service) ModifyDetails(objectId string, modifier func(current *types.Struct) (*types.Struct, error)) (err error) { +func (s *service) ModifyDetails(objectId string, modifier func(current *types.Struct) (*types.Struct, error)) (err error) { return cache.Do(s, objectId, func(du basic.DetailsUpdatable) error { return du.UpdateDetails(modifier) }) } -func (s *Service) ModifyDetailsAndUpdateLastUsed(objectId string, modifier func(current *types.Struct) (*types.Struct, error)) (err error) { +func (s *service) ModifyDetailsAndUpdateLastUsed(objectId string, modifier func(current *types.Struct) (*types.Struct, error)) (err error) { return cache.Do(s, objectId, func(du basic.DetailsUpdatable) error { return du.UpdateDetailsAndLastUsed(modifier) }) } -func (s *Service) ModifyDetailsList(req *pb.RpcObjectListModifyDetailValuesRequest) (resultError error) { +func (s *service) ModifyDetailsList(req *pb.RpcObjectListModifyDetailValuesRequest) (resultError error) { var anySucceed bool for i, objectId := range req.ObjectIds { modifyDetailsFunc := s.ModifyDetails @@ -93,7 +170,7 @@ func (s *Service) ModifyDetailsList(req *pb.RpcObjectListModifyDetailValuesReque } } if resultError != nil { - log.Warnf("ModifyDetailsList: %v", resultError) + log.Warn("ModifyDetailsList", zap.Error(resultError)) } if anySucceed { return nil diff --git a/core/block/detailservice/service_test.go b/core/block/detailservice/service_test.go new file mode 100644 index 000000000..9b1fab0b6 --- /dev/null +++ b/core/block/detailservice/service_test.go @@ -0,0 +1,567 @@ +package detailservice + +import ( + "context" + "fmt" + "testing" + + "github.com/gogo/protobuf/types" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + + "github.com/anyproto/anytype-heart/core/block/editor" + "github.com/anyproto/anytype-heart/core/block/editor/basic" + "github.com/anyproto/anytype-heart/core/block/editor/smartblock" + "github.com/anyproto/anytype-heart/core/block/editor/smartblock/smarttest" + "github.com/anyproto/anytype-heart/core/block/object/idresolver/mock_idresolver" + "github.com/anyproto/anytype-heart/core/block/restriction" + "github.com/anyproto/anytype-heart/core/block/restriction/mock_restriction" + "github.com/anyproto/anytype-heart/core/block/simple" + "github.com/anyproto/anytype-heart/pb" + "github.com/anyproto/anytype-heart/pkg/lib/bundle" + coresb "github.com/anyproto/anytype-heart/pkg/lib/core/smartblock" + "github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore" + "github.com/anyproto/anytype-heart/pkg/lib/pb/model" + "github.com/anyproto/anytype-heart/pkg/lib/threads" + "github.com/anyproto/anytype-heart/space/clientspace/mock_clientspace" + "github.com/anyproto/anytype-heart/space/mock_space" + "github.com/anyproto/anytype-heart/util/pbtypes" +) + +const spaceId = "spaceId" + +type fixture struct { + Service + resolver *mock_idresolver.MockResolver + spaceService *mock_space.MockService + store *objectstore.StoreFixture + restriction *mock_restriction.MockService + space *mock_clientspace.MockSpace +} + +func newFixture(t *testing.T) *fixture { + resolver := mock_idresolver.NewMockResolver(t) + spaceService := mock_space.NewMockService(t) + store := objectstore.NewStoreFixture(t) + restriction := mock_restriction.NewMockService(t) + + spc := mock_clientspace.NewMockSpace(t) + resolver.EXPECT().ResolveSpaceID(mock.Anything).Return(spaceId, nil).Maybe() + spaceService.EXPECT().Get(mock.Anything, mock.Anything).Return(spc, nil).Maybe() + + s := &service{ + resolver: resolver, + spaceService: spaceService, + store: store, + restriction: restriction, + } + + return &fixture{ + s, + resolver, + spaceService, + store, + restriction, + spc, + } +} + +func TestService_SetDetailsList(t *testing.T) { + details := []*model.Detail{ + {Key: bundle.RelationKeyAssignee.String(), Value: pbtypes.String("Mark Twain")}, + {Key: bundle.RelationKeyDone.String(), Value: pbtypes.Bool(true)}, + {Key: bundle.RelationKeyLinkedProjects.String(), Value: pbtypes.StringList([]string{"important", "urgent"})}, + } + + t.Run("lastUsed is updated once", func(t *testing.T) { + // given + fx := newFixture(t) + objects := map[string]*smarttest.SmartTest{ + "obj1": smarttest.New("obj1"), + "obj2": smarttest.New("obj2"), + "obj3": smarttest.New("obj3"), + } + fx.space.EXPECT().GetObject(mock.Anything, mock.Anything).RunAndReturn(func(_ context.Context, objectId string) (smartblock.SmartBlock, error) { + object, ok := objects[objectId] + require.True(t, ok) + return object, nil + }) + + // when + err := fx.SetDetailsList(nil, []string{"obj1", "obj2", "obj3"}, details) + + // then + assert.NoError(t, err) + require.Len(t, objects["obj1"].Results.LastUsedUpdates, 3) + assert.Equal(t, []string{ + bundle.RelationKeyAssignee.String(), + bundle.RelationKeyDone.String(), + bundle.RelationKeyLinkedProjects.String(), + }, objects["obj1"].Results.LastUsedUpdates) + + // lastUsed should be updated only during the work under 1st object + assert.Len(t, objects["obj2"].Results.LastUsedUpdates, 0) + assert.Len(t, objects["obj3"].Results.LastUsedUpdates, 0) + + assert.Equal(t, "Mark Twain", pbtypes.GetString(objects["obj1"].NewState().Details(), bundle.RelationKeyAssignee.String())) + assert.True(t, pbtypes.GetBool(objects["obj2"].NewState().Details(), bundle.RelationKeyDone.String())) + assert.Equal(t, []string{"important", "urgent"}, pbtypes.GetStringList(objects["obj3"].NewState().Details(), bundle.RelationKeyLinkedProjects.String())) + }) + + t.Run("some updates failed", func(t *testing.T) { + // given + fx := newFixture(t) + fx.space.EXPECT().GetObject(mock.Anything, mock.Anything).RunAndReturn(func(_ context.Context, objectId string) (smartblock.SmartBlock, error) { + if objectId != "obj2" { + return nil, fmt.Errorf("failed to find object") + } + return smarttest.New(objectId), nil + }) + + // when + err := fx.SetDetailsList(nil, []string{"obj1", "obj2", "obj3"}, details) + + // then + assert.NoError(t, err) + }) + + t.Run("all updates failed", func(t *testing.T) { + // given + fx := newFixture(t) + fx.space.EXPECT().GetObject(mock.Anything, mock.Anything).RunAndReturn(func(_ context.Context, _ string) (smartblock.SmartBlock, error) { + return nil, fmt.Errorf("failed to find object") + }) + + // when + err := fx.SetDetailsList(nil, []string{"obj1", "obj2", "obj3"}, details) + + // then + assert.Error(t, err) + }) +} + +func TestService_ModifyDetailsList(t *testing.T) { + ops := []*pb.RpcObjectListModifyDetailValuesRequestOperation{ + {RelationKey: bundle.RelationKeyName.String(), Set: pbtypes.String("My favorite page")}, + {RelationKey: bundle.RelationKeyLinks.String(), Add: pbtypes.String("some link")}, + {RelationKey: bundle.RelationKeyDone.String(), Set: pbtypes.Bool(true)}, + } + + t.Run("lastUsed is updated once", func(t *testing.T) { + fx := newFixture(t) + objects := map[string]*smarttest.SmartTest{ + "obj1": smarttest.New("obj1"), + "obj2": smarttest.New("obj2"), + "obj3": smarttest.New("obj3"), + } + fx.space.EXPECT().GetObject(mock.Anything, mock.Anything).RunAndReturn(func(_ context.Context, objectId string) (smartblock.SmartBlock, error) { + object, ok := objects[objectId] + require.True(t, ok) + return object, nil + }) + + // when + err := fx.ModifyDetailsList(&pb.RpcObjectListModifyDetailValuesRequest{ + ObjectIds: []string{"obj1", "obj2", "obj3"}, + Operations: ops, + }) + + // then + assert.NoError(t, err) + require.Len(t, objects["obj1"].Results.LastUsedUpdates, 3) + + // lastUsed should be updated only during the work under 1st object + assert.Len(t, objects["obj2"].Results.LastUsedUpdates, 0) + assert.Len(t, objects["obj3"].Results.LastUsedUpdates, 0) + }) + + t.Run("some updates failed", func(t *testing.T) { + // given + fx := newFixture(t) + fx.space.EXPECT().GetObject(mock.Anything, mock.Anything).RunAndReturn(func(_ context.Context, objectId string) (smartblock.SmartBlock, error) { + if objectId != "obj2" { + return nil, fmt.Errorf("failed to find object") + } + return smarttest.New(objectId), nil + }) + + // when + err := fx.ModifyDetailsList(&pb.RpcObjectListModifyDetailValuesRequest{ + ObjectIds: []string{"obj1", "obj2", "obj3"}, + Operations: ops, + }) + + // then + assert.NoError(t, err) + }) + + t.Run("all updates failed", func(t *testing.T) { + // given + fx := newFixture(t) + fx.space.EXPECT().GetObject(mock.Anything, mock.Anything).RunAndReturn(func(_ context.Context, _ string) (smartblock.SmartBlock, error) { + return nil, fmt.Errorf("failed to find object") + }) + + // when + err := fx.ModifyDetailsList(&pb.RpcObjectListModifyDetailValuesRequest{ + ObjectIds: []string{"obj1", "obj2", "obj3"}, + Operations: ops, + }) + + // then + assert.Error(t, err) + }) +} + +func TestService_SetSpaceInfo(t *testing.T) { + var ( + wsObjectId = "workspace" + details = &types.Struct{Fields: map[string]*types.Value{ + bundle.RelationKeyName.String(): pbtypes.String("My space"), + bundle.RelationKeyIconOption.String(): pbtypes.Int64(5), + bundle.RelationKeyIconImage.String(): pbtypes.String("kitten.jpg"), + }} + ) + + t.Run("no error", func(t *testing.T) { + // given + fx := newFixture(t) + ws := smarttest.New(wsObjectId) + fx.space.EXPECT().DerivedIDs().Return(threads.DerivedSmartblockIds{Workspace: wsObjectId}) + fx.space.EXPECT().GetObject(mock.Anything, mock.Anything).RunAndReturn(func(_ context.Context, objectId string) (smartblock.SmartBlock, error) { + assert.Equal(t, wsObjectId, objectId) + return ws, nil + }) + + // when + err := fx.SetSpaceInfo(spaceId, details) + + // then + assert.NoError(t, err) + assert.Equal(t, "My space", pbtypes.GetString(ws.NewState().Details(), bundle.RelationKeyName.String())) + assert.Equal(t, int64(5), pbtypes.GetInt64(ws.NewState().Details(), bundle.RelationKeyIconOption.String())) + assert.Equal(t, "kitten.jpg", pbtypes.GetString(ws.NewState().Details(), bundle.RelationKeyIconImage.String())) + }) + + t.Run("error on details setting", func(t *testing.T) { + // given + fx := newFixture(t) + fx.space.EXPECT().DerivedIDs().Return(threads.DerivedSmartblockIds{Workspace: wsObjectId}) + fx.space.EXPECT().GetObject(mock.Anything, mock.Anything).RunAndReturn(func(_ context.Context, objectId string) (smartblock.SmartBlock, error) { + assert.Equal(t, wsObjectId, objectId) + return nil, fmt.Errorf("failed to get object") + }) + + // when + err := fx.SetSpaceInfo(spaceId, details) + + // then + assert.Error(t, err) + }) +} + +func TestService_SetWorkspaceDashboardId(t *testing.T) { + var ( + wsObjectId = "workspace" + dashboardId = "homepage" + ) + + t.Run("no error", func(t *testing.T) { + // given + fx := newFixture(t) + sb := smarttest.New(wsObjectId) + sb.SetType(coresb.SmartBlockTypeWorkspace) + fx.space.EXPECT().GetObject(mock.Anything, mock.Anything).RunAndReturn(func(_ context.Context, objectId string) (smartblock.SmartBlock, error) { + assert.Equal(t, wsObjectId, objectId) + ws := &editor.Workspaces{ + SmartBlock: sb, + AllOperations: basic.NewBasic(sb, fx.store, nil, nil, nil), + } + return ws, nil + }) + + // when + setId, err := fx.SetWorkspaceDashboardId(nil, wsObjectId, dashboardId) + + // then + assert.NoError(t, err) + assert.Equal(t, dashboardId, setId) + assert.Equal(t, dashboardId, pbtypes.GetString(sb.NewState().Details(), bundle.RelationKeySpaceDashboardId.String())) + }) + + t.Run("error if wrong smartblock type", func(t *testing.T) { + // given + fx := newFixture(t) + sb := smarttest.New(wsObjectId) + sb.SetType(coresb.SmartBlockTypePage) + fx.space.EXPECT().GetObject(mock.Anything, mock.Anything).RunAndReturn(func(_ context.Context, objectId string) (smartblock.SmartBlock, error) { + assert.Equal(t, wsObjectId, objectId) + ws := &editor.Workspaces{ + SmartBlock: sb, + AllOperations: basic.NewBasic(sb, fx.store, nil, nil, nil), + } + return ws, nil + }) + + // when + _, err := fx.SetWorkspaceDashboardId(nil, wsObjectId, dashboardId) + + // then + assert.Error(t, err) + assert.ErrorIs(t, ErrUnexpectedBlockType, err) + }) +} + +func TestService_SetListIsFavorite(t *testing.T) { + var ( + objects = []objectstore.TestObject{ + {bundle.RelationKeyId: pbtypes.String("obj1"), bundle.RelationKeySpaceId: pbtypes.String(spaceId)}, + {bundle.RelationKeyId: pbtypes.String("obj2"), bundle.RelationKeySpaceId: pbtypes.String(spaceId)}, + {bundle.RelationKeyId: pbtypes.String("obj3"), bundle.RelationKeySpaceId: pbtypes.String(spaceId)}, + } + homeId = "home" + ) + + t.Run("no error on favoriting", func(t *testing.T) { + // given + fx := newFixture(t) + sb := smarttest.New(homeId) + sb.AddBlock(simple.New(&model.Block{Id: homeId, ChildrenIds: []string{}})) + fx.store.AddObjects(t, objects) + fx.space.EXPECT().DerivedIDs().Return(threads.DerivedSmartblockIds{Home: homeId}) + fx.space.EXPECT().GetObject(mock.Anything, mock.Anything).RunAndReturn(func(_ context.Context, objectId string) (smartblock.SmartBlock, error) { + require.Equal(t, homeId, objectId) + return editor.NewDashboard(sb, fx.store, nil), nil + }) + + // when + err := fx.SetListIsFavorite([]string{"obj1", "obj2", "obj3"}, true) + + // then + assert.NoError(t, err) + assert.Len(t, sb.Blocks(), 4) + }) + + t.Run("no error on unfavoriting", func(t *testing.T) { + // given + fx := newFixture(t) + sb := smarttest.New(homeId) + sb.AddBlock(simple.New(&model.Block{Id: homeId, ChildrenIds: []string{"obj1", "obj2", "obj3"}})) + sb.AddBlock(simple.New(&model.Block{Id: "obj1", Content: &model.BlockContentOfLink{Link: &model.BlockContentLink{TargetBlockId: "obj1"}}})) + sb.AddBlock(simple.New(&model.Block{Id: "obj2", Content: &model.BlockContentOfLink{Link: &model.BlockContentLink{TargetBlockId: "obj2"}}})) + sb.AddBlock(simple.New(&model.Block{Id: "obj3", Content: &model.BlockContentOfLink{Link: &model.BlockContentLink{TargetBlockId: "obj3"}}})) + fx.store.AddObjects(t, objects) + fx.space.EXPECT().DerivedIDs().Return(threads.DerivedSmartblockIds{Home: homeId}) + fx.space.EXPECT().GetObject(mock.Anything, mock.Anything).RunAndReturn(func(_ context.Context, objectId string) (smartblock.SmartBlock, error) { + require.Equal(t, homeId, objectId) + return editor.NewDashboard(sb, fx.store, nil), nil + }) + + // when + err := fx.SetListIsFavorite([]string{"obj3", "obj1"}, false) + + // then + assert.NoError(t, err) + assert.Len(t, sb.Blocks(), 2) + }) + + t.Run("some updates failed", func(t *testing.T) { + // given + fx := newFixture(t) + sb := smarttest.New(homeId) + sb.AddBlock(simple.New(&model.Block{Id: homeId, ChildrenIds: []string{}})) + fx.store.AddObjects(t, objects) + fx.space.EXPECT().DerivedIDs().Return(threads.DerivedSmartblockIds{Home: homeId}) + flag := false + fx.space.EXPECT().GetObject(mock.Anything, mock.Anything).RunAndReturn(func(_ context.Context, objectId string) (smartblock.SmartBlock, error) { + require.Equal(t, homeId, objectId) + if flag { + return nil, fmt.Errorf("unexpected error") + } + flag = true + return editor.NewDashboard(sb, fx.store, nil), nil + }) + + // when + err := fx.SetListIsFavorite([]string{"obj3", "obj1"}, true) + + // then + assert.NoError(t, err) + assert.Len(t, sb.Blocks(), 2) + }) + + t.Run("all updates failed", func(t *testing.T) { + // given + fx := newFixture(t) + fx.store.AddObjects(t, objects) + fx.space.EXPECT().DerivedIDs().Return(threads.DerivedSmartblockIds{Home: homeId}) + fx.space.EXPECT().GetObject(mock.Anything, mock.Anything).RunAndReturn(func(_ context.Context, objectId string) (smartblock.SmartBlock, error) { + require.Equal(t, homeId, objectId) + return nil, fmt.Errorf("unexpected error") + }) + + // when + err := fx.SetListIsFavorite([]string{"obj3", "obj1"}, true) + + // then + assert.Error(t, err) + }) +} + +func TestService_SetIsArchived(t *testing.T) { + var ( + objects = []objectstore.TestObject{ + {bundle.RelationKeyId: pbtypes.String("obj1"), bundle.RelationKeySpaceId: pbtypes.String(spaceId)}, + } + binId = "bin" + ) + + t.Run("no error on moving to bin", func(t *testing.T) { + // given + fx := newFixture(t) + sb := smarttest.New(binId) + sb.AddBlock(simple.New(&model.Block{Id: binId, ChildrenIds: []string{}})) + fx.store.AddObjects(t, objects) + fx.space.EXPECT().DerivedIDs().Return(threads.DerivedSmartblockIds{Archive: binId}) + fx.space.EXPECT().GetObject(mock.Anything, mock.Anything).RunAndReturn(func(_ context.Context, objectId string) (smartblock.SmartBlock, error) { + if objectId == binId { + return editor.NewArchive(sb, fx.store), nil + } + return smarttest.New(objectId), nil + }) + fx.restriction.EXPECT().CheckRestrictions(mock.Anything, mock.Anything).Return(nil) + + // when + err := fx.SetIsArchived("obj1", true) + + // then + assert.NoError(t, err) + assert.Len(t, sb.Blocks(), 2) + }) + + t.Run("cannot move to bin an object with restriction", func(t *testing.T) { + // given + fx := newFixture(t) + sb := smarttest.New(binId) + sb.AddBlock(simple.New(&model.Block{Id: binId, ChildrenIds: []string{}})) + fx.store.AddObjects(t, objects) + fx.space.EXPECT().GetObject(mock.Anything, mock.Anything).RunAndReturn(func(_ context.Context, objectId string) (smartblock.SmartBlock, error) { + if objectId == binId { + return editor.NewArchive(sb, fx.store), nil + } + return smarttest.New(objectId), nil + }) + fx.restriction.EXPECT().CheckRestrictions(mock.Anything, mock.Anything).Return(restriction.ErrRestricted) + + // when + err := fx.SetIsArchived("obj1", true) + + // then + assert.Error(t, err) + assert.ErrorIs(t, err, restriction.ErrRestricted) + }) +} + +func TestService_SetListIsArchived(t *testing.T) { + var ( + objects = []objectstore.TestObject{ + {bundle.RelationKeyId: pbtypes.String("obj1"), bundle.RelationKeySpaceId: pbtypes.String(spaceId)}, + {bundle.RelationKeyId: pbtypes.String("obj2"), bundle.RelationKeySpaceId: pbtypes.String(spaceId)}, + {bundle.RelationKeyId: pbtypes.String("obj3"), bundle.RelationKeySpaceId: pbtypes.String(spaceId)}, + } + binId = "bin" + ) + + t.Run("no error on moving to bin", func(t *testing.T) { + // given + fx := newFixture(t) + sb := smarttest.New(binId) + sb.AddBlock(simple.New(&model.Block{Id: binId, ChildrenIds: []string{}})) + fx.store.AddObjects(t, objects) + fx.space.EXPECT().DerivedIDs().Return(threads.DerivedSmartblockIds{Archive: binId}) + fx.space.EXPECT().GetObject(mock.Anything, mock.Anything).RunAndReturn(func(_ context.Context, objectId string) (smartblock.SmartBlock, error) { + if objectId == binId { + return editor.NewArchive(sb, fx.store), nil + } + return smarttest.New(objectId), nil + }) + fx.restriction.EXPECT().CheckRestrictions(mock.Anything, mock.Anything).Return(nil) + + // when + err := fx.SetListIsArchived([]string{"obj1", "obj2", "obj3"}, true) + + // then + assert.NoError(t, err) + assert.Len(t, sb.Blocks(), 4) + }) + + t.Run("no error on moving from bin", func(t *testing.T) { + // given + fx := newFixture(t) + + sb := smarttest.New(binId) + sb.AddBlock(simple.New(&model.Block{Id: binId, ChildrenIds: []string{"obj1", "obj2", "obj3"}})) + sb.AddBlock(simple.New(&model.Block{Id: "obj1", Content: &model.BlockContentOfLink{Link: &model.BlockContentLink{TargetBlockId: "obj1"}}})) + sb.AddBlock(simple.New(&model.Block{Id: "obj2", Content: &model.BlockContentOfLink{Link: &model.BlockContentLink{TargetBlockId: "obj2"}}})) + sb.AddBlock(simple.New(&model.Block{Id: "obj3", Content: &model.BlockContentOfLink{Link: &model.BlockContentLink{TargetBlockId: "obj3"}}})) + + fx.store.AddObjects(t, objects) + fx.space.EXPECT().DerivedIDs().Return(threads.DerivedSmartblockIds{Archive: binId}) + fx.space.EXPECT().GetObject(mock.Anything, mock.Anything).RunAndReturn(func(_ context.Context, objectId string) (smartblock.SmartBlock, error) { + if objectId == binId { + return editor.NewArchive(sb, fx.store), nil + } + return smarttest.New(objectId), nil + }) + + // when + err := fx.SetListIsArchived([]string{"obj1", "obj2", "obj3"}, false) + + // then + assert.NoError(t, err) + assert.Len(t, sb.Blocks(), 1) + }) + + t.Run("some updates failed", func(t *testing.T) { + // given + fx := newFixture(t) + sb := smarttest.New(binId) + sb.AddBlock(simple.New(&model.Block{Id: binId, ChildrenIds: []string{}})) + fx.store.AddObjects(t, objects) + fx.space.EXPECT().DerivedIDs().Return(threads.DerivedSmartblockIds{Archive: binId}) + fx.space.EXPECT().GetObject(mock.Anything, mock.Anything).RunAndReturn(func(_ context.Context, objectId string) (smartblock.SmartBlock, error) { + if objectId == binId { + return editor.NewArchive(sb, fx.store), nil + } + if objectId == "obj2" { + return nil, fmt.Errorf("failed to get object") + } + return smarttest.New(objectId), nil + }) + fx.restriction.EXPECT().CheckRestrictions(mock.Anything, mock.Anything).Return(nil) + + // when + err := fx.SetListIsArchived([]string{"obj1", "obj2", "obj3"}, true) + + // then + assert.NoError(t, err) + assert.Len(t, sb.Blocks(), 3) + }) + + t.Run("all updates failed", func(t *testing.T) { + // given + fx := newFixture(t) + fx.store.AddObjects(t, objects) + fx.space.EXPECT().DerivedIDs().Return(threads.DerivedSmartblockIds{Archive: binId}) + fx.space.EXPECT().GetObject(mock.Anything, mock.Anything).RunAndReturn(func(_ context.Context, objectId string) (smartblock.SmartBlock, error) { + return nil, fmt.Errorf("failed to get object") + }) + + // when + err := fx.SetListIsArchived([]string{"obj1", "obj2", "obj3"}, true) + + // then + assert.Error(t, err) + }) +} diff --git a/core/block/detailservice/set_details.go b/core/block/detailservice/set_details.go new file mode 100644 index 000000000..3444283ac --- /dev/null +++ b/core/block/detailservice/set_details.go @@ -0,0 +1,221 @@ +package detailservice + +import ( + "context" + "errors" + "fmt" + + "github.com/gogo/protobuf/types" + "go.uber.org/zap" + + "github.com/anyproto/anytype-heart/core/block/cache" + "github.com/anyproto/anytype-heart/core/block/editor" + "github.com/anyproto/anytype-heart/core/block/editor/collection" + "github.com/anyproto/anytype-heart/core/block/editor/smartblock" + "github.com/anyproto/anytype-heart/core/session" + "github.com/anyproto/anytype-heart/pkg/lib/bundle" + coresb "github.com/anyproto/anytype-heart/pkg/lib/core/smartblock" + "github.com/anyproto/anytype-heart/pkg/lib/pb/model" + "github.com/anyproto/anytype-heart/util/pbtypes" +) + +var ErrUnexpectedBlockType = errors.New("unexpected block type") + +func (s *service) SetSpaceInfo(spaceId string, details *types.Struct) error { + ctx := context.TODO() + spc, err := s.spaceService.Get(ctx, spaceId) + if err != nil { + return err + } + workspaceId := spc.DerivedIDs().Workspace + + setDetails := make([]*model.Detail, 0, len(details.GetFields())) + for k, v := range details.GetFields() { + setDetails = append(setDetails, &model.Detail{ + Key: k, + Value: v, + }) + } + return s.SetDetails(nil, workspaceId, setDetails) +} + +func (s *service) SetWorkspaceDashboardId(ctx session.Context, workspaceId string, id string) (setId string, err error) { + err = cache.Do(s, workspaceId, func(ws *editor.Workspaces) error { + if ws.Type() != coresb.SmartBlockTypeWorkspace { + return ErrUnexpectedBlockType + } + if err = ws.SetDetails(ctx, []*model.Detail{ + { + Key: bundle.RelationKeySpaceDashboardId.String(), + Value: pbtypes.String(id), + }, + }, false); err != nil { + return err + } + return nil + }) + return id, err +} + +func (s *service) SetIsFavorite(objectId string, isFavorite bool) error { + spaceID, err := s.resolver.ResolveSpaceID(objectId) + if err != nil { + return fmt.Errorf("resolve spaceID: %w", err) + } + spc, err := s.spaceService.Get(context.Background(), spaceID) + if err != nil { + return fmt.Errorf("get space: %w", err) + } + return s.objectLinksCollectionModify(spc.DerivedIDs().Home, objectId, isFavorite) +} + +func (s *service) SetIsArchived(objectId string, isArchived bool) error { + spaceID, err := s.resolver.ResolveSpaceID(objectId) + if err != nil { + return fmt.Errorf("resolve spaceID: %w", err) + } + spc, err := s.spaceService.Get(context.Background(), spaceID) + if err != nil { + return fmt.Errorf("get space: %w", err) + } + if err := s.checkArchivedRestriction(isArchived, objectId); err != nil { + return err + } + return s.objectLinksCollectionModify(spc.DerivedIDs().Archive, objectId, isArchived) +} + +func (s *service) SetListIsFavorite(objectIds []string, isFavorite bool) error { + ids, err := s.store.HasIDs(objectIds...) + if err != nil { + return err + } + var ( + anySucceed bool + resultError error + ) + for _, id := range ids { + err := s.SetIsFavorite(id, isFavorite) + if err != nil { + log.Error("failed to favorite object", zap.String("objectId", id), zap.Error(err)) + resultError = errors.Join(resultError, err) + } else { + anySucceed = true + } + } + if resultError != nil { + log.Warn("failed to set objects as favorite", zap.Error(resultError)) + } + if anySucceed { + return nil + } + return resultError +} + +func (s *service) SetListIsArchived(objectIds []string, isArchived bool) error { + objectIdsPerSpace, err := s.partitionObjectIdsBySpaceId(objectIds) + if err != nil { + return fmt.Errorf("partition object ids by spaces: %w", err) + } + + var ( + resultErr error + anySucceed bool + ) + for spaceId, objectIdsOfThisSpace := range objectIdsPerSpace { + err = s.setIsArchivedForObjects(spaceId, objectIdsOfThisSpace, isArchived) + if err != nil { + log.Error("failed to set isArchived to objects", zap.String("spaceId", spaceId), + zap.Strings("objectIds", objectIdsOfThisSpace), zap.Bool("isArchived", isArchived), zap.Error(err)) + resultErr = errors.Join(resultErr, err) + continue + } + anySucceed = true + } + if anySucceed { + return nil + } + return resultErr +} + +func (s *service) checkArchivedRestriction(isArchived bool, objectId string) error { + if !isArchived { + return nil + } + return cache.Do(s, objectId, func(sb smartblock.SmartBlock) error { + return s.restriction.CheckRestrictions(sb, model.Restrictions_Delete) + }) +} + +func (s *service) objectLinksCollectionModify(collectionId string, objectId string, value bool) error { + return cache.Do(s, collectionId, func(b smartblock.SmartBlock) error { + coll, ok := b.(collection.Collection) + if !ok { + return fmt.Errorf("unsupported sb block type: %T", b) + } + if value { + return coll.AddObject(objectId) + } else { + return coll.RemoveObject(objectId) + } + }) +} + +func (s *service) partitionObjectIdsBySpaceId(objectIds []string) (map[string][]string, error) { + res := make(map[string][]string, len(objectIds)) + for _, objectId := range objectIds { + spaceId, err := s.resolver.ResolveSpaceID(objectId) + if err != nil { + return nil, fmt.Errorf("resolve spaceId: %w", err) + } + res[spaceId] = append(res[spaceId], objectId) + } + return res, nil +} + +func (s *service) setIsArchivedForObjects(spaceId string, objectIds []string, isArchived bool) error { + spc, err := s.spaceService.Get(context.Background(), spaceId) + if err != nil { + return fmt.Errorf("get space: %w", err) + } + return cache.Do(s, spc.DerivedIDs().Archive, func(b smartblock.SmartBlock) error { + archive, ok := b.(collection.Collection) + if !ok { + return fmt.Errorf("unexpected archive block type: %T", b) + } + + ids, err := s.store.HasIDs(objectIds...) + if err != nil { + return err + } + anySucceed, err := s.modifyArchiveLinks(archive, isArchived, ids...) + + if err != nil { + log.Warn("failed to archive", zap.Error(err)) + } + if anySucceed { + return nil + } + return err + }) +} + +func (s *service) modifyArchiveLinks( + coll collection.Collection, value bool, ids ...string, +) (anySucceed bool, resultErr error) { + for _, id := range ids { + err := s.checkArchivedRestriction(value, id) + if err == nil { + if value { + err = coll.AddObject(id) + } else { + err = coll.RemoveObject(id) + } + } + if err != nil { + resultErr = errors.Join(resultErr, err) + continue + } + anySucceed = true + } + return +} diff --git a/core/block/editor/converter/layout.go b/core/block/editor/converter/layout.go index ad10315fa..ccf2db36b 100644 --- a/core/block/editor/converter/layout.go +++ b/core/block/editor/converter/layout.go @@ -220,7 +220,7 @@ func (c *layoutConverter) fromNoteToCollection(st *state.State) error { } func (c *layoutConverter) fromAnyToCollection(st *state.State) error { - blockContent := template.MakeCollectionDataviewContent() + blockContent := template.MakeDataviewContent(true, nil, nil) template.InitTemplate(st, template.WithDataview(blockContent, false)) return nil } diff --git a/core/block/editor/dataview/dataview.go b/core/block/editor/dataview/dataview.go index 601f48fc0..cbd1201da 100644 --- a/core/block/editor/dataview/dataview.go +++ b/core/block/editor/dataview/dataview.go @@ -6,7 +6,6 @@ import ( "fmt" anystore "github.com/anyproto/any-store" - "github.com/globalsign/mgo/bson" "github.com/google/uuid" "github.com/anyproto/anytype-heart/core/block/editor/smartblock" @@ -19,7 +18,6 @@ import ( "github.com/anyproto/anytype-heart/core/session" "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pkg/lib/bundle" - "github.com/anyproto/anytype-heart/pkg/lib/database" "github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore" "github.com/anyproto/anytype-heart/pkg/lib/logging" "github.com/anyproto/anytype-heart/pkg/lib/pb/model" @@ -293,22 +291,12 @@ func (d *sdataview) CreateView(ctx session.Context, id string, if len(view.Sorts) == 0 { // todo: set depends on the view type - view.Sorts = defaultLastModifiedDateSort() + view.Sorts = template.DefaultLastModifiedDateSort() } tb.AddView(view) return &view, d.Apply(s) } -func defaultLastModifiedDateSort() []*model.BlockContentDataviewSort { - return []*model.BlockContentDataviewSort{ - { - Id: bson.NewObjectId().Hex(), - RelationKey: bundle.RelationKeyLastModifiedDate.String(), - Type: model.BlockContentDataviewSort_Desc, - }, - } -} - func (d *sdataview) UpdateViewGroupOrder(ctx session.Context, blockId string, order *model.BlockContentDataviewGroupOrder) error { st := d.NewStateCtx(ctx) dvBlock, err := getDataviewBlock(st, blockId) @@ -347,33 +335,6 @@ func (d *sdataview) DataviewMoveObjectsInView(ctx session.Context, req *pb.RpcBl return d.Apply(st) } -func SchemaBySources(sources []string, objectStore objectstore.ObjectStore) (database.Schema, error) { - // Empty schema - if len(sources) == 0 { - return database.NewEmptySchema(), nil - } - - // Try object type - objectType, err := objectStore.GetObjectType(sources[0]) - if err == nil { - sch := database.NewByType(objectType) - return sch, nil - } - - // Finally, try relations - relations := make([]*model.RelationLink, 0, len(sources)) - for _, relId := range sources { - rel, err := objectStore.GetRelationByID(relId) - if err != nil { - return nil, fmt.Errorf("failed to get relation %s: %w", relId, err) - } - - relations = append(relations, (&relationutils.Relation{Relation: rel}).RelationLink()) - } - sch := database.NewByRelations(relations) - return sch, nil -} - func (d *sdataview) listRestrictedSources(ctx context.Context) ([]string, error) { keys := []domain.TypeKey{ bundle.TypeKeyFile, @@ -471,71 +432,27 @@ func getDataviewBlock(s *state.State, id string) (dataview.Block, error) { return nil, fmt.Errorf("not a dataview block") } -func BlockBySource(objectStore objectstore.ObjectStore, source []string) (*model.BlockContentOfDataview, error) { - schema, err := SchemaBySources(source, objectStore) - if err != nil { - return nil, fmt.Errorf("get schema by sources: %w", err) +func BlockBySource(objectStore objectstore.ObjectStore, sources []string) (*model.BlockContentOfDataview, error) { + // Empty schema + if len(sources) == 0 { + return template.MakeDataviewContent(false, nil, nil), nil } - var ( - relations []*model.RelationLink - viewRelations []*model.BlockContentDataviewRelation - ) - - for _, rel := range schema.RequiredRelations() { - relations = append(relations, &model.RelationLink{ - Format: rel.Format, - Key: rel.Key, - }) - viewRelations = append(viewRelations, &model.BlockContentDataviewRelation{Key: rel.Key, IsVisible: true}) + // Try object type + objectType, err := objectStore.GetObjectType(sources[0]) + if err == nil { + return template.MakeDataviewContent(false, objectType, nil), nil } - for _, rel := range schema.ListRelations() { - // other relations should be added with - if pbtypes.HasRelationLink(relations, rel.Key) { - continue + // Finally, try relations + relations := make([]*model.RelationLink, 0, len(sources)) + for _, relId := range sources { + rel, err := objectStore.GetRelationByID(relId) + if err != nil { + return nil, fmt.Errorf("failed to get relation %s: %w", relId, err) } - relations = append(relations, &model.RelationLink{ - Format: rel.Format, - Key: rel.Key, - }) - viewRelations = append(viewRelations, &model.BlockContentDataviewRelation{Key: rel.Key, IsVisible: false}) - } - - schemaRelations := schema.ListRelations() - if !pbtypes.HasRelationLink(schemaRelations, bundle.RelationKeyName.String()) { - schemaRelations = append([]*model.RelationLink{bundle.MustGetRelationLink(bundle.RelationKeyName)}, schemaRelations...) + relations = append(relations, (&relationutils.Relation{Relation: rel}).RelationLink()) } - - for _, relKey := range template.DefaultDataviewRelations { - if pbtypes.HasRelationLink(relations, relKey.String()) { - continue - } - rel := bundle.MustGetRelation(relKey) - if rel.Hidden { - continue - } - relations = append(relations, &model.RelationLink{ - Format: rel.Format, - Key: rel.Key, - }) - viewRelations = append(viewRelations, &model.BlockContentDataviewRelation{Key: rel.Key, IsVisible: false}) - } - - return &model.BlockContentOfDataview{ - Dataview: &model.BlockContentDataview{ - RelationLinks: relations, - Views: []*model.BlockContentDataviewView{ - { - Id: bson.NewObjectId().Hex(), - Type: model.BlockContentDataviewView_Table, - Name: "All", - Sorts: defaultLastModifiedDateSort(), - Filters: nil, - Relations: viewRelations, - }, - }, - }, - }, nil + return template.MakeDataviewContent(false, objectType, relations), nil } diff --git a/core/block/editor/smartblock/smarttest/smarttest.go b/core/block/editor/smartblock/smarttest/smarttest.go index 8fbad36ce..d1caf97d6 100644 --- a/core/block/editor/smartblock/smarttest/smarttest.go +++ b/core/block/editor/smartblock/smarttest/smarttest.go @@ -25,6 +25,7 @@ import ( "github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore" "github.com/anyproto/anytype-heart/pkg/lib/pb/model" "github.com/anyproto/anytype-heart/pkg/lib/threads" + "github.com/anyproto/anytype-heart/util/pbtypes" "github.com/anyproto/anytype-heart/util/testMock" ) @@ -268,6 +269,49 @@ func (st *SmartTest) SetDetails(ctx session.Context, details []*model.Detail, sh return } +func (st *SmartTest) SetDetailsAndUpdateLastUsed(ctx session.Context, details []*model.Detail, showEvent bool) (err error) { + for _, detail := range details { + st.Results.LastUsedUpdates = append(st.Results.LastUsedUpdates, detail.Key) + } + return st.SetDetails(ctx, details, showEvent) +} + +func (st *SmartTest) UpdateDetails(update func(current *types.Struct) (*types.Struct, error)) (err error) { + details := st.Doc.(*state.State).CombinedDetails() + if details == nil || details.Fields == nil { + details = &types.Struct{Fields: map[string]*types.Value{}} + } + newDetails, err := update(details) + if err != nil { + return err + } + st.Doc.(*state.State).SetDetails(newDetails) + return nil +} + +func (st *SmartTest) UpdateDetailsAndLastUsed(update func(current *types.Struct) (*types.Struct, error)) (err error) { + details := st.Doc.(*state.State).CombinedDetails() + if details == nil || details.Fields == nil { + details = &types.Struct{Fields: map[string]*types.Value{}} + } + oldDetails := pbtypes.CopyStruct(details, true) + + newDetails, err := update(details) + if err != nil { + return err + } + + diff := pbtypes.StructDiff(oldDetails, newDetails) + if diff == nil || diff.Fields == nil { + return nil + } + + for key := range diff.Fields { + st.Results.LastUsedUpdates = append(st.Results.LastUsedUpdates, key) + } + return nil +} + func (st *SmartTest) Init(ctx *smartblock.InitContext) (err error) { if ctx.State == nil { ctx.State = st.NewState() @@ -408,4 +452,6 @@ func (st *SmartTest) Update(ctx session.Context, apply func(b simple.Block) erro type Results struct { Events [][]simple.EventMessage Applies [][]*model.Block + + LastUsedUpdates []string } diff --git a/core/block/editor/template/collection.go b/core/block/editor/template/collection.go index a9e4ebe5e..02acae011 100644 --- a/core/block/editor/template/collection.go +++ b/core/block/editor/template/collection.go @@ -1,6 +1,8 @@ package template import ( + "slices" + "github.com/globalsign/mgo/bson" "github.com/anyproto/anytype-heart/core/domain" @@ -9,68 +11,137 @@ import ( "github.com/anyproto/anytype-heart/util/pbtypes" ) -func MakeCollectionDataviewContent() *model.BlockContentOfDataview { - relations := []*model.RelationLink{ - { - Format: model.RelationFormat_shorttext, - Key: bundle.RelationKeyName.String(), - }, +const ( + CollectionStoreKey = "objects" + defaultViewName = "All" +) + +var ( + defaultDataviewRelations = []domain.RelationKey{ + bundle.RelationKeyName, + bundle.RelationKeyCreatedDate, + bundle.RelationKeyCreator, + bundle.RelationKeyLastModifiedDate, + bundle.RelationKeyLastModifiedBy, + bundle.RelationKeyLastOpenedDate, + bundle.RelationKeyBacklinks, } - viewRelations := []*model.BlockContentDataviewRelation{ - { - Key: bundle.RelationKeyName.String(), - IsVisible: true, - }, + + defaultCollectionRelations = []domain.RelationKey{ + bundle.RelationKeyName, + bundle.RelationKeyType, + bundle.RelationKeyCreatedDate, + bundle.RelationKeyCreator, + bundle.RelationKeyLastModifiedDate, + bundle.RelationKeyLastModifiedBy, + bundle.RelationKeyLastOpenedDate, + bundle.RelationKeyBacklinks, + bundle.RelationKeyTag, + bundle.RelationKeyDescription, } - for _, relKey := range DefaultDataviewRelations { - if pbtypes.HasRelationLink(relations, relKey.String()) { - continue + + defaultVisibleRelations = []domain.RelationKey{ + bundle.RelationKeyName, + bundle.RelationKeyType, + } +) + +func MakeDataviewContent(isCollection bool, ot *model.ObjectType, relLinks []*model.RelationLink) *model.BlockContentOfDataview { + var ( + defaultRelations = defaultCollectionRelations + visibleRelations = defaultVisibleRelations + sorts = DefaultLastModifiedDateSort() + ) + + if isCollection { + sorts = defaultNameSort() + } else if relLinks != nil { + for _, relLink := range relLinks { + visibleRelations = append(visibleRelations, domain.RelationKey(relLink.Key)) } - rel := bundle.MustGetRelation(relKey) - relations = append(relations, &model.RelationLink{ - Format: rel.Format, - Key: rel.Key, - }) - viewRelations = append(viewRelations, &model.BlockContentDataviewRelation{Key: rel.Key, IsVisible: false}) + } else if ot != nil { + defaultRelations = defaultDataviewRelations + relLinks = ot.RelationLinks + } else { + defaultRelations = defaultDataviewRelations } - blockContent := &model.BlockContentOfDataview{ + relationLinks, viewRelations := generateRelationLists(defaultRelations, relLinks, visibleRelations) + + return &model.BlockContentOfDataview{ Dataview: &model.BlockContentDataview{ - IsCollection: true, - RelationLinks: relations, + IsCollection: isCollection, + RelationLinks: relationLinks, Views: []*model.BlockContentDataviewView{ { - Id: bson.NewObjectId().Hex(), - Type: model.BlockContentDataviewView_Table, - Name: "All", - Sorts: []*model.BlockContentDataviewSort{ - { - RelationKey: "name", - Type: model.BlockContentDataviewSort_Asc, - }, - }, + Id: bson.NewObjectId().Hex(), + Type: model.BlockContentDataviewView_Table, + Name: defaultViewName, + Sorts: sorts, Filters: nil, Relations: viewRelations, }, }, }, } - return blockContent } -var DefaultDataviewRelations = make([]domain.RelationKey, 0, len(bundle.RequiredInternalRelations)) +func generateRelationLists( + defaultRelations []domain.RelationKey, + additionalRelations []*model.RelationLink, + visibleRelations []domain.RelationKey, +) ( + relationLinks []*model.RelationLink, + viewRelations []*model.BlockContentDataviewRelation, +) { + isVisible := func(key domain.RelationKey) bool { + return slices.Contains(visibleRelations, key) + } + + for _, relKey := range defaultRelations { + rel := bundle.MustGetRelation(relKey) + relationLinks = append(relationLinks, &model.RelationLink{ + Format: rel.Format, + Key: rel.Key, + }) + viewRelations = append(viewRelations, &model.BlockContentDataviewRelation{ + Key: rel.Key, + IsVisible: isVisible(relKey), + }) + } -func init() { - // fill DefaultDataviewRelations - // deprecated: we should remove this after we merge relations as objects - for _, rel := range bundle.RequiredInternalRelations { - if bundle.MustGetRelation(rel).Hidden { + for _, relLink := range additionalRelations { + if pbtypes.HasRelationLink(relationLinks, relLink.Key) { continue } - DefaultDataviewRelations = append(DefaultDataviewRelations, rel) + relationLinks = append(relationLinks, &model.RelationLink{ + Format: relLink.Format, + Key: relLink.Key, + }) + viewRelations = append(viewRelations, &model.BlockContentDataviewRelation{ + Key: relLink.Key, + IsVisible: isVisible(domain.RelationKey(relLink.Key)), + }) } - DefaultDataviewRelations = append(DefaultDataviewRelations, bundle.RelationKeyDone) - DefaultDataviewRelations = append(DefaultDataviewRelations, bundle.RelationKeyTag) + return relationLinks, viewRelations } -const CollectionStoreKey = "objects" +func DefaultLastModifiedDateSort() []*model.BlockContentDataviewSort { + return []*model.BlockContentDataviewSort{ + { + Id: bson.NewObjectId().Hex(), + RelationKey: bundle.RelationKeyLastModifiedDate.String(), + Type: model.BlockContentDataviewSort_Desc, + }, + } +} + +func defaultNameSort() []*model.BlockContentDataviewSort { + return []*model.BlockContentDataviewSort{ + { + Id: bson.NewObjectId().Hex(), + RelationKey: bundle.RelationKeyName.String(), + Type: model.BlockContentDataviewSort_Asc, + }, + } +} diff --git a/core/block/editor/template/collection_test.go b/core/block/editor/template/collection_test.go new file mode 100644 index 000000000..8d267c0fd --- /dev/null +++ b/core/block/editor/template/collection_test.go @@ -0,0 +1,99 @@ +package template + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "golang.org/x/exp/slices" + + "github.com/anyproto/anytype-heart/core/domain" + "github.com/anyproto/anytype-heart/pkg/lib/bundle" + "github.com/anyproto/anytype-heart/pkg/lib/pb/model" +) + +func assertDataviewBlock( + t *testing.T, + block *model.BlockContentOfDataview, + isCollection bool, + expectedRelations []domain.RelationKey, + isVisible func(key domain.RelationKey) bool, +) { + assert.Equal(t, isCollection, block.Dataview.IsCollection) + assert.Len(t, block.Dataview.RelationLinks, len(expectedRelations)) + for i, link := range block.Dataview.RelationLinks { + assert.Equal(t, expectedRelations[i], domain.RelationKey(link.Key)) + } + assert.Len(t, block.Dataview.Views, 1) + assert.Len(t, block.Dataview.Views[0].Relations, len(expectedRelations)) + for i, relation := range block.Dataview.Views[0].Relations { + assert.Equal(t, expectedRelations[i], domain.RelationKey(relation.Key)) + assert.Equal(t, isVisible(domain.RelationKey(relation.Key)), relation.IsVisible) + } +} + +func TestMakeDataviewContent(t *testing.T) { + for _, tc := range []struct { + name string + isCollection bool + ot *model.ObjectType + relLinks []*model.RelationLink + expectedRelations []domain.RelationKey + isVisible func(key domain.RelationKey) bool + }{ + { + name: "collection", + isCollection: true, + expectedRelations: defaultCollectionRelations, + isVisible: func(key domain.RelationKey) bool { + return slices.Contains(defaultVisibleRelations, key) + }, + }, + { + name: "set by object type", + ot: &model.ObjectType{ + RelationLinks: []*model.RelationLink{ + {Key: bundle.RelationKeyTasks.String()}, + {Key: bundle.RelationKeyLinkedProjects.String()}, + {Key: bundle.RelationKeyAssignee.String()}, + }, + }, + expectedRelations: append(defaultDataviewRelations, []domain.RelationKey{ + bundle.RelationKeyTasks, + bundle.RelationKeyLinkedProjects, + bundle.RelationKeyAssignee, + }...), + isVisible: func(key domain.RelationKey) bool { + return slices.Contains(defaultVisibleRelations, key) + }, + }, + { + name: "set by relation", + relLinks: []*model.RelationLink{ + {Key: bundle.RelationKeyAddedDate.String()}, + {Key: bundle.RelationKeyLastUsedDate.String()}, + }, + expectedRelations: append(defaultCollectionRelations, []domain.RelationKey{ + bundle.RelationKeyAddedDate, + bundle.RelationKeyLastUsedDate, + }...), + isVisible: func(key domain.RelationKey) bool { + return slices.Contains(append(defaultVisibleRelations, []domain.RelationKey{ + bundle.RelationKeyAddedDate, + bundle.RelationKeyLastUsedDate, + }...), key) + }, + }, + { + name: "empty", + expectedRelations: defaultDataviewRelations, + isVisible: func(key domain.RelationKey) bool { + return slices.Contains(defaultVisibleRelations, key) + }, + }, + } { + t.Run(tc.name, func(t *testing.T) { + block := MakeDataviewContent(tc.isCollection, tc.ot, tc.relLinks) + assertDataviewBlock(t, block, tc.isCollection, tc.expectedRelations, tc.isVisible) + }) + } +} diff --git a/core/block/import/common/objectcreator/mock_blockservice/mock_BlockService.go b/core/block/import/common/objectcreator/mock_blockservice/mock_BlockService.go deleted file mode 100644 index d3cdff829..000000000 --- a/core/block/import/common/objectcreator/mock_blockservice/mock_BlockService.go +++ /dev/null @@ -1,297 +0,0 @@ -// Code generated by mockery. DO NOT EDIT. - -package mock_blockservice - -import ( - context "context" - - domain "github.com/anyproto/anytype-heart/core/domain" - mock "github.com/stretchr/testify/mock" - - pb "github.com/anyproto/anytype-heart/pb" - - smartblock "github.com/anyproto/anytype-heart/core/block/editor/smartblock" -) - -// MockBlockService is an autogenerated mock type for the BlockService type -type MockBlockService struct { - mock.Mock -} - -type MockBlockService_Expecter struct { - mock *mock.Mock -} - -func (_m *MockBlockService) EXPECT() *MockBlockService_Expecter { - return &MockBlockService_Expecter{mock: &_m.Mock} -} - -// DeleteObject provides a mock function with given fields: objectId -func (_m *MockBlockService) DeleteObject(objectId string) error { - ret := _m.Called(objectId) - - if len(ret) == 0 { - panic("no return value specified for DeleteObject") - } - - var r0 error - if rf, ok := ret.Get(0).(func(string) error); ok { - r0 = rf(objectId) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// MockBlockService_DeleteObject_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DeleteObject' -type MockBlockService_DeleteObject_Call struct { - *mock.Call -} - -// DeleteObject is a helper method to define mock.On call -// - objectId string -func (_e *MockBlockService_Expecter) DeleteObject(objectId interface{}) *MockBlockService_DeleteObject_Call { - return &MockBlockService_DeleteObject_Call{Call: _e.mock.On("DeleteObject", objectId)} -} - -func (_c *MockBlockService_DeleteObject_Call) Run(run func(objectId string)) *MockBlockService_DeleteObject_Call { - _c.Call.Run(func(args mock.Arguments) { - run(args[0].(string)) - }) - return _c -} - -func (_c *MockBlockService_DeleteObject_Call) Return(err error) *MockBlockService_DeleteObject_Call { - _c.Call.Return(err) - return _c -} - -func (_c *MockBlockService_DeleteObject_Call) RunAndReturn(run func(string) error) *MockBlockService_DeleteObject_Call { - _c.Call.Return(run) - return _c -} - -// GetObject provides a mock function with given fields: ctx, objectID -func (_m *MockBlockService) GetObject(ctx context.Context, objectID string) (smartblock.SmartBlock, error) { - ret := _m.Called(ctx, objectID) - - if len(ret) == 0 { - panic("no return value specified for GetObject") - } - - var r0 smartblock.SmartBlock - var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string) (smartblock.SmartBlock, error)); ok { - return rf(ctx, objectID) - } - if rf, ok := ret.Get(0).(func(context.Context, string) smartblock.SmartBlock); ok { - r0 = rf(ctx, objectID) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(smartblock.SmartBlock) - } - } - - if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { - r1 = rf(ctx, objectID) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// MockBlockService_GetObject_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetObject' -type MockBlockService_GetObject_Call struct { - *mock.Call -} - -// GetObject is a helper method to define mock.On call -// - ctx context.Context -// - objectID string -func (_e *MockBlockService_Expecter) GetObject(ctx interface{}, objectID interface{}) *MockBlockService_GetObject_Call { - return &MockBlockService_GetObject_Call{Call: _e.mock.On("GetObject", ctx, objectID)} -} - -func (_c *MockBlockService_GetObject_Call) Run(run func(ctx context.Context, objectID string)) *MockBlockService_GetObject_Call { - _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(string)) - }) - return _c -} - -func (_c *MockBlockService_GetObject_Call) Return(sb smartblock.SmartBlock, err error) *MockBlockService_GetObject_Call { - _c.Call.Return(sb, err) - return _c -} - -func (_c *MockBlockService_GetObject_Call) RunAndReturn(run func(context.Context, string) (smartblock.SmartBlock, error)) *MockBlockService_GetObject_Call { - _c.Call.Return(run) - return _c -} - -// GetObjectByFullID provides a mock function with given fields: ctx, id -func (_m *MockBlockService) GetObjectByFullID(ctx context.Context, id domain.FullID) (smartblock.SmartBlock, error) { - ret := _m.Called(ctx, id) - - if len(ret) == 0 { - panic("no return value specified for GetObjectByFullID") - } - - var r0 smartblock.SmartBlock - var r1 error - if rf, ok := ret.Get(0).(func(context.Context, domain.FullID) (smartblock.SmartBlock, error)); ok { - return rf(ctx, id) - } - if rf, ok := ret.Get(0).(func(context.Context, domain.FullID) smartblock.SmartBlock); ok { - r0 = rf(ctx, id) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(smartblock.SmartBlock) - } - } - - if rf, ok := ret.Get(1).(func(context.Context, domain.FullID) error); ok { - r1 = rf(ctx, id) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// MockBlockService_GetObjectByFullID_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetObjectByFullID' -type MockBlockService_GetObjectByFullID_Call struct { - *mock.Call -} - -// GetObjectByFullID is a helper method to define mock.On call -// - ctx context.Context -// - id domain.FullID -func (_e *MockBlockService_Expecter) GetObjectByFullID(ctx interface{}, id interface{}) *MockBlockService_GetObjectByFullID_Call { - return &MockBlockService_GetObjectByFullID_Call{Call: _e.mock.On("GetObjectByFullID", ctx, id)} -} - -func (_c *MockBlockService_GetObjectByFullID_Call) Run(run func(ctx context.Context, id domain.FullID)) *MockBlockService_GetObjectByFullID_Call { - _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(domain.FullID)) - }) - return _c -} - -func (_c *MockBlockService_GetObjectByFullID_Call) Return(sb smartblock.SmartBlock, err error) *MockBlockService_GetObjectByFullID_Call { - _c.Call.Return(sb, err) - return _c -} - -func (_c *MockBlockService_GetObjectByFullID_Call) RunAndReturn(run func(context.Context, domain.FullID) (smartblock.SmartBlock, error)) *MockBlockService_GetObjectByFullID_Call { - _c.Call.Return(run) - return _c -} - -// SetPageIsArchived provides a mock function with given fields: req -func (_m *MockBlockService) SetPageIsArchived(req pb.RpcObjectSetIsArchivedRequest) error { - ret := _m.Called(req) - - if len(ret) == 0 { - panic("no return value specified for SetPageIsArchived") - } - - var r0 error - if rf, ok := ret.Get(0).(func(pb.RpcObjectSetIsArchivedRequest) error); ok { - r0 = rf(req) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// MockBlockService_SetPageIsArchived_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetPageIsArchived' -type MockBlockService_SetPageIsArchived_Call struct { - *mock.Call -} - -// SetPageIsArchived is a helper method to define mock.On call -// - req pb.RpcObjectSetIsArchivedRequest -func (_e *MockBlockService_Expecter) SetPageIsArchived(req interface{}) *MockBlockService_SetPageIsArchived_Call { - return &MockBlockService_SetPageIsArchived_Call{Call: _e.mock.On("SetPageIsArchived", req)} -} - -func (_c *MockBlockService_SetPageIsArchived_Call) Run(run func(req pb.RpcObjectSetIsArchivedRequest)) *MockBlockService_SetPageIsArchived_Call { - _c.Call.Run(func(args mock.Arguments) { - run(args[0].(pb.RpcObjectSetIsArchivedRequest)) - }) - return _c -} - -func (_c *MockBlockService_SetPageIsArchived_Call) Return(err error) *MockBlockService_SetPageIsArchived_Call { - _c.Call.Return(err) - return _c -} - -func (_c *MockBlockService_SetPageIsArchived_Call) RunAndReturn(run func(pb.RpcObjectSetIsArchivedRequest) error) *MockBlockService_SetPageIsArchived_Call { - _c.Call.Return(run) - return _c -} - -// SetPageIsFavorite provides a mock function with given fields: req -func (_m *MockBlockService) SetPageIsFavorite(req pb.RpcObjectSetIsFavoriteRequest) error { - ret := _m.Called(req) - - if len(ret) == 0 { - panic("no return value specified for SetPageIsFavorite") - } - - var r0 error - if rf, ok := ret.Get(0).(func(pb.RpcObjectSetIsFavoriteRequest) error); ok { - r0 = rf(req) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// MockBlockService_SetPageIsFavorite_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetPageIsFavorite' -type MockBlockService_SetPageIsFavorite_Call struct { - *mock.Call -} - -// SetPageIsFavorite is a helper method to define mock.On call -// - req pb.RpcObjectSetIsFavoriteRequest -func (_e *MockBlockService_Expecter) SetPageIsFavorite(req interface{}) *MockBlockService_SetPageIsFavorite_Call { - return &MockBlockService_SetPageIsFavorite_Call{Call: _e.mock.On("SetPageIsFavorite", req)} -} - -func (_c *MockBlockService_SetPageIsFavorite_Call) Run(run func(req pb.RpcObjectSetIsFavoriteRequest)) *MockBlockService_SetPageIsFavorite_Call { - _c.Call.Run(func(args mock.Arguments) { - run(args[0].(pb.RpcObjectSetIsFavoriteRequest)) - }) - return _c -} - -func (_c *MockBlockService_SetPageIsFavorite_Call) Return(err error) *MockBlockService_SetPageIsFavorite_Call { - _c.Call.Return(err) - return _c -} - -func (_c *MockBlockService_SetPageIsFavorite_Call) RunAndReturn(run func(pb.RpcObjectSetIsFavoriteRequest) error) *MockBlockService_SetPageIsFavorite_Call { - _c.Call.Return(run) - return _c -} - -// NewMockBlockService creates a new instance of MockBlockService. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -// The first argument is typically a *testing.T value. -func NewMockBlockService(t interface { - mock.TestingT - Cleanup(func()) -}) *MockBlockService { - mock := &MockBlockService{} - mock.Mock.Test(t) - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/core/block/import/common/objectcreator/objectcreator.go b/core/block/import/common/objectcreator/objectcreator.go index ac3c5f1f1..2b94e51ca 100644 --- a/core/block/import/common/objectcreator/objectcreator.go +++ b/core/block/import/common/objectcreator/objectcreator.go @@ -11,6 +11,7 @@ import ( "go.uber.org/zap" "github.com/anyproto/anytype-heart/core/block/cache" + "github.com/anyproto/anytype-heart/core/block/detailservice" "github.com/anyproto/anytype-heart/core/block/editor/basic" "github.com/anyproto/anytype-heart/core/block/editor/smartblock" "github.com/anyproto/anytype-heart/core/block/editor/state" @@ -24,7 +25,6 @@ import ( "github.com/anyproto/anytype-heart/core/block/simple" "github.com/anyproto/anytype-heart/core/domain" "github.com/anyproto/anytype-heart/core/domain/objectorigin" - "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pkg/lib/bundle" coresb "github.com/anyproto/anytype-heart/pkg/lib/core/smartblock" "github.com/anyproto/anytype-heart/pkg/lib/localstore/addr" @@ -44,37 +44,37 @@ type Service interface { Create(dataObject *DataObject, sn *common.Snapshot) (*types.Struct, string, error) } -type BlockService interface { - GetObject(ctx context.Context, objectID string) (sb smartblock.SmartBlock, err error) - GetObjectByFullID(ctx context.Context, id domain.FullID) (sb smartblock.SmartBlock, err error) - SetPageIsFavorite(req pb.RpcObjectSetIsFavoriteRequest) (err error) - SetPageIsArchived(req pb.RpcObjectSetIsArchivedRequest) (err error) +type ObjectDeleter interface { + cache.ObjectGetterComponent DeleteObject(objectId string) (err error) } type ObjectCreator struct { - service BlockService + detailsService detailservice.Service spaceService space.Service objectStore objectstore.ObjectStore relationSyncer *syncer.FileRelationSyncer syncFactory *syncer.Factory objectCreator objectcreator.Service + objectDeleter ObjectDeleter } -func New(service BlockService, +func New(detailsService detailservice.Service, syncFactory *syncer.Factory, objectStore objectstore.ObjectStore, relationSyncer *syncer.FileRelationSyncer, spaceService space.Service, objectCreator objectcreator.Service, + objectDeleter ObjectDeleter, ) Service { return &ObjectCreator{ - service: service, + detailsService: detailsService, syncFactory: syncFactory, objectStore: objectStore, relationSyncer: relationSyncer, spaceService: spaceService, objectCreator: objectCreator, + objectDeleter: objectDeleter, } } @@ -314,7 +314,7 @@ func (oc *ObjectCreator) deleteFile(hash string) { log.With("file", hash).Errorf("failed to get inbound links for file: %s", err) } if len(inboundLinks) == 0 { - err = oc.service.DeleteObject(hash) + err = oc.objectDeleter.DeleteObject(hash) if err != nil { log.With("file", hash).Errorf("failed to delete file: %s", anyerror.CleanupError(err)) } @@ -353,7 +353,7 @@ func (oc *ObjectCreator) setSpaceDashboardID(spaceID string, st *state.State) { log.Errorf("failed to get space: %v", err) return } - err = cache.Do(oc.service, spc.DerivedIDs().Workspace, func(ws basic.CommonOperations) error { + err = cache.Do(oc.detailsService, spc.DerivedIDs().Workspace, func(ws basic.CommonOperations) error { if err := ws.SetDetails(nil, details, false); err != nil { return err } @@ -367,7 +367,7 @@ func (oc *ObjectCreator) setSpaceDashboardID(spaceID string, st *state.State) { func (oc *ObjectCreator) resetState(newID string, st *state.State) *types.Struct { var respDetails *types.Struct - err := cache.Do(oc.service, newID, func(b smartblock.SmartBlock) error { + err := cache.Do(oc.detailsService, newID, func(b smartblock.SmartBlock) error { err := history.ResetToVersion(b, st) if err != nil { log.With(zap.String("object id", newID)).Errorf("failed to set state %s: %s", newID, err) @@ -392,7 +392,7 @@ func (oc *ObjectCreator) resetState(newID string, st *state.State) *types.Struct func (oc *ObjectCreator) setFavorite(snapshot *model.SmartBlockSnapshotBase, newID string) { isFavorite := pbtypes.GetBool(snapshot.Details, bundle.RelationKeyIsFavorite.String()) if isFavorite { - err := oc.service.SetPageIsFavorite(pb.RpcObjectSetIsFavoriteRequest{ContextId: newID, IsFavorite: true}) + err := oc.detailsService.SetIsFavorite(newID, true) if err != nil { log.With(zap.String("object id", newID)).Errorf("failed to set isFavorite when importing object: %s", err) } @@ -402,7 +402,7 @@ func (oc *ObjectCreator) setFavorite(snapshot *model.SmartBlockSnapshotBase, new func (oc *ObjectCreator) setArchived(snapshot *model.SmartBlockSnapshotBase, newID string) { isArchive := pbtypes.GetBool(snapshot.Details, bundle.RelationKeyIsArchived.String()) if isArchive { - err := oc.service.SetPageIsArchived(pb.RpcObjectSetIsArchivedRequest{ContextId: newID, IsArchived: true}) + err := oc.detailsService.SetIsArchived(newID, true) if err != nil { log.With(zap.String("object id", newID)). Errorf("failed to set isFavorite when importing object %s: %s", newID, err) @@ -413,7 +413,7 @@ func (oc *ObjectCreator) setArchived(snapshot *model.SmartBlockSnapshotBase, new func (oc *ObjectCreator) syncFilesAndLinks(newIdsSet map[string]struct{}, id domain.FullID, origin objectorigin.ObjectOrigin) error { tasks := make([]func() error, 0) // todo: rewrite it in order not to create state with URLs inside links - err := cache.Do(oc.service, id.ObjectID, func(b smartblock.SmartBlock) error { + err := cache.Do(oc.detailsService, id.ObjectID, func(b smartblock.SmartBlock) error { st := b.NewState() return st.Iterate(func(bl simple.Block) (isContinue bool) { s := oc.syncFactory.GetSyncer(bl) @@ -447,7 +447,7 @@ func (oc *ObjectCreator) syncFilesAndLinks(newIdsSet map[string]struct{}, id dom } func (oc *ObjectCreator) updateLinksInCollections(st *state.State, oldIDtoNew map[string]string, isNewCollection bool) { - err := cache.Do(oc.service, st.RootId(), func(b smartblock.SmartBlock) error { + err := cache.Do(oc.detailsService, st.RootId(), func(b smartblock.SmartBlock) error { originalState := b.NewState() var existedObjects []string if !isNewCollection { @@ -473,7 +473,7 @@ func (oc *ObjectCreator) mergeCollections(existedObjects []string, st *state.Sta } func (oc *ObjectCreator) updateWidgetObject(st *state.State) (*types.Struct, string, error) { - err := cache.DoState(oc.service, st.RootId(), func(oldState *state.State, sb smartblock.SmartBlock) error { + err := cache.DoState(oc.detailsService, st.RootId(), func(oldState *state.State, sb smartblock.SmartBlock) error { blocks := st.Blocks() blocksMap := make(map[string]*model.Block, len(blocks)) existingWidgetsTargetIDs, err := oc.getExistingWidgetsTargetIDs(oldState) diff --git a/core/block/import/common/objectcreator/objectcreator_test.go b/core/block/import/common/objectcreator/objectcreator_test.go index 482d7bd5a..486b66597 100644 --- a/core/block/import/common/objectcreator/objectcreator_test.go +++ b/core/block/import/common/objectcreator/objectcreator_test.go @@ -7,10 +7,10 @@ import ( "github.com/gogo/protobuf/types" "github.com/stretchr/testify/assert" + "github.com/anyproto/anytype-heart/core/block/detailservice/mock_detailservice" "github.com/anyproto/anytype-heart/core/block/editor/smartblock/smarttest" "github.com/anyproto/anytype-heart/core/block/editor/state" "github.com/anyproto/anytype-heart/core/block/import/common" - "github.com/anyproto/anytype-heart/core/block/import/common/objectcreator/mock_blockservice" "github.com/anyproto/anytype-heart/core/block/object/objectcreator" "github.com/anyproto/anytype-heart/core/domain" "github.com/anyproto/anytype-heart/core/domain/objectorigin" @@ -27,12 +27,12 @@ func TestObjectCreator_Create(t *testing.T) { t.Run("participant object - don't update it", func(t *testing.T) { // given spaceID := "spaceId" - blockService := mock_blockservice.NewMockBlockService(t) + detailsService := mock_detailservice.NewMockService(t) mockService := mock_space.NewMockService(t) mockSpace := mock_clientspace.NewMockSpace(t) mockSpace.EXPECT().IsReadOnly().Return(true) mockService.EXPECT().Get(context.Background(), spaceID).Return(mockSpace, nil) - service := New(blockService, nil, nil, nil, mockService, objectcreator.NewCreator()) + service := New(detailsService, nil, nil, nil, mockService, objectcreator.NewCreator(), nil) importedSpaceId := "importedSpaceID" identity := "identity" @@ -73,7 +73,7 @@ func TestObjectCreator_Create(t *testing.T) { err := testParticipant.Apply(st) assert.Nil(t, err) - blockService.EXPECT().GetObject(context.Background(), participantId).Return(testParticipant, nil) + detailsService.EXPECT().GetObject(context.Background(), participantId).Return(testParticipant, nil) // when create, id, err := service.Create(dataObject, sn) diff --git a/core/block/import/importer.go b/core/block/import/importer.go index 7fba17ee5..8a4e789bb 100644 --- a/core/block/import/importer.go +++ b/core/block/import/importer.go @@ -17,6 +17,7 @@ import ( "github.com/anyproto/anytype-heart/core/anytype/account" "github.com/anyproto/anytype-heart/core/block" "github.com/anyproto/anytype-heart/core/block/collection" + "github.com/anyproto/anytype-heart/core/block/detailservice" "github.com/anyproto/anytype-heart/core/block/import/common" creator "github.com/anyproto/anytype-heart/core/block/import/common/objectcreator" "github.com/anyproto/anytype-heart/core/block/import/common/objectid" @@ -104,7 +105,8 @@ func (i *Import) Init(a *app.App) (err error) { factory := syncer.New(syncer.NewFileSyncer(i.s, fileObjectService), syncer.NewBookmarkSyncer(i.s), syncer.NewIconSyncer(i.s, fileObjectService)) relationSyncer := syncer.NewFileRelationSyncer(i.s, fileObjectService) objectCreator := app.MustComponent[objectcreator.Service](a) - i.oc = creator.New(i.s, factory, store, relationSyncer, spaceService, objectCreator) + detailsService := app.MustComponent[detailservice.Service](a) + i.oc = creator.New(detailsService, factory, store, relationSyncer, spaceService, objectCreator, i.s) i.fileSync = app.MustComponent[filesync.FileSync](a) i.notificationService = app.MustComponent[notifications.Notifications](a) i.eventSender = app.MustComponent[event.Sender](a) diff --git a/core/block/import/notion/api/block/link.go b/core/block/import/notion/api/block/link.go index da399fca4..366223842 100644 --- a/core/block/import/notion/api/block/link.go +++ b/core/block/import/notion/api/block/link.go @@ -201,7 +201,7 @@ func (c *ChildDatabase) GetBlock(importContext *api.NotionImportContext, pageID, id := bson.NewObjectId().Hex() if err != nil || targetBlockID == "" { - block := template.MakeCollectionDataviewContent() + block := template.MakeDataviewContent(true, nil, nil) block.Dataview.TargetObjectId = targetBlockID return &model.Block{ Id: id, diff --git a/core/block/relation.go b/core/block/relation.go deleted file mode 100644 index c541e039b..000000000 --- a/core/block/relation.go +++ /dev/null @@ -1,58 +0,0 @@ -package block - -import ( - "context" - "fmt" - "strings" - - "golang.org/x/exp/slices" - - "github.com/anyproto/anytype-heart/core/block/cache" - "github.com/anyproto/anytype-heart/core/block/editor/smartblock" - "github.com/anyproto/anytype-heart/core/domain" - "github.com/anyproto/anytype-heart/pkg/lib/bundle" - "github.com/anyproto/anytype-heart/util/pbtypes" - "github.com/anyproto/anytype-heart/util/slice" -) - -var ErrBundledTypeIsReadonly = fmt.Errorf("can't modify bundled object type") - -func (s *Service) ObjectTypeRelationAdd(ctx context.Context, objectTypeId string, relationKeys []domain.RelationKey) error { - if strings.HasPrefix(objectTypeId, bundle.TypePrefix) { - return ErrBundledTypeIsReadonly - } - return cache.Do(s, objectTypeId, func(b smartblock.SmartBlock) error { - st := b.NewState() - list := pbtypes.GetStringList(st.Details(), bundle.RelationKeyRecommendedRelations.String()) - for _, relKey := range relationKeys { - relId, err := b.Space().GetRelationIdByKey(ctx, relKey) - if err != nil { - return err - } - if !slices.Contains(list, relId) { - list = append(list, relId) - } - } - st.SetDetailAndBundledRelation(bundle.RelationKeyRecommendedRelations, pbtypes.StringList(list)) - return b.Apply(st) - }) -} - -func (s *Service) ObjectTypeRemoveRelations(ctx context.Context, objectTypeId string, relationKeys []domain.RelationKey) error { - if strings.HasPrefix(objectTypeId, bundle.TypePrefix) { - return ErrBundledTypeIsReadonly - } - return cache.Do(s, objectTypeId, func(b smartblock.SmartBlock) error { - st := b.NewState() - list := pbtypes.GetStringList(st.Details(), bundle.RelationKeyRecommendedRelations.String()) - for _, relKey := range relationKeys { - relId, err := b.Space().GetRelationIdByKey(ctx, relKey) - if err != nil { - return fmt.Errorf("get relation id by key %s: %w", relKey, err) - } - list = slice.RemoveMut(list, relId) - } - st.SetDetailAndBundledRelation(bundle.RelationKeyRecommendedRelations, pbtypes.StringList(list)) - return b.Apply(st) - }) -} diff --git a/core/block/service.go b/core/block/service.go index 27dd97ff9..7d4bd522d 100644 --- a/core/block/service.go +++ b/core/block/service.go @@ -17,7 +17,7 @@ import ( bookmarksvc "github.com/anyproto/anytype-heart/core/block/bookmark" "github.com/anyproto/anytype-heart/core/block/cache" - "github.com/anyproto/anytype-heart/core/block/editor" + "github.com/anyproto/anytype-heart/core/block/detailservice" "github.com/anyproto/anytype-heart/core/block/editor/basic" "github.com/anyproto/anytype-heart/core/block/editor/collection" "github.com/anyproto/anytype-heart/core/block/editor/file" @@ -28,7 +28,6 @@ import ( "github.com/anyproto/anytype-heart/core/block/object/objectcreator" "github.com/anyproto/anytype-heart/core/block/process" "github.com/anyproto/anytype-heart/core/block/restriction" - "github.com/anyproto/anytype-heart/core/block/simple" "github.com/anyproto/anytype-heart/core/block/simple/bookmark" "github.com/anyproto/anytype-heart/core/domain" "github.com/anyproto/anytype-heart/core/domain/objectorigin" @@ -41,7 +40,6 @@ import ( "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pkg/lib/bundle" "github.com/anyproto/anytype-heart/pkg/lib/core" - coresb "github.com/anyproto/anytype-heart/pkg/lib/core/smartblock" "github.com/anyproto/anytype-heart/pkg/lib/database" "github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore" "github.com/anyproto/anytype-heart/pkg/lib/logging" @@ -58,14 +56,9 @@ import ( _ "github.com/anyproto/anytype-heart/core/block/simple/widget" ) -const ( - CName = "block-service" -) +const CName = "block-service" -var ( - ErrUnexpectedBlockType = errors.New("unexpected block type") - ErrUnknownObjectType = fmt.Errorf("unknown object type") -) +var ErrUnknownObjectType = fmt.Errorf("unknown object type") var log = logging.Logger("anytype-mw-service") @@ -97,7 +90,6 @@ func New() *Service { type Service struct { eventSender event.Sender process process.Service - app *app.App objectStore objectstore.ObjectStore restriction restriction.Service bookmark bookmarksvc.Service @@ -108,6 +100,7 @@ type Service struct { tempDirProvider core.TempDirProvider builtinObjectService builtinObjects fileObjectService fileobject.Service + detailsService detailservice.Service fileService files.Service fileUploaderService fileuploader.Service @@ -153,7 +146,7 @@ func (s *Service) Init(a *app.App) (err error) { s.tempDirProvider = app.MustComponent[core.TempDirProvider](a) s.builtinObjectService = app.MustComponent[builtinObjects](a) - s.app = a + s.detailsService = app.MustComponent[detailservice.Service](a) return } @@ -327,235 +320,10 @@ func (s *Service) GetAllWorkspaces(req *pb.RpcWorkspaceGetAllRequest) ([]string, panic("should be removed") } -func (s *Service) SetSpaceInfo(req *pb.RpcWorkspaceSetInfoRequest) error { - ctx := context.TODO() - spc, err := s.spaceService.Get(ctx, req.SpaceId) - if err != nil { - return err - } - workspaceId := spc.DerivedIDs().Workspace - - setDetails := make([]*model.Detail, 0, len(req.Details.GetFields())) - for k, v := range req.Details.GetFields() { - setDetails = append(setDetails, &model.Detail{ - Key: k, - Value: v, - }) - } - return s.SetDetails(nil, workspaceId, setDetails) -} - func (s *Service) ObjectShareByLink(req *pb.RpcObjectShareByLinkRequest) (link string, err error) { panic("should be removed") } -func (s *Service) SetPagesIsArchived(ctx session.Context, req pb.RpcObjectListSetIsArchivedRequest) error { - objectIDsPerSpace, err := s.partitionObjectIDsBySpaceID(req.ObjectIds) - if err != nil { - return fmt.Errorf("partition object ids by spaces: %w", err) - } - - var ( - multiErr multierror.Error - anySucceed bool - ) - for spaceID, objectIDs := range objectIDsPerSpace { - err = s.setIsArchivedForObjects(spaceID, objectIDs, req.IsArchived) - if err != nil { - log.With("spaceID", spaceID, "objectIDs", objectIDs).Errorf("failed to set isArchived=%t objects in space: %s", req.IsArchived, err) - multiErr.Errors = append(multiErr.Errors, err) - } else { - anySucceed = true - } - } - if anySucceed { - return nil - } - return multiErr.ErrorOrNil() -} - -func (s *Service) setIsArchivedForObjects(spaceID string, objectIDs []string, isArchived bool) error { - spc, err := s.spaceService.Get(context.Background(), spaceID) - if err != nil { - return fmt.Errorf("get space: %w", err) - } - return cache.Do(s, spc.DerivedIDs().Archive, func(b smartblock.SmartBlock) error { - archive, ok := b.(collection.Collection) - if !ok { - return fmt.Errorf("unexpected archive block type: %T", b) - } - - var multiErr multierror.Error - var anySucceed bool - ids, err := s.objectStore.HasIDs(objectIDs...) - if err != nil { - return err - } - for _, id := range ids { - var err error - if restrErr := s.checkArchivedRestriction(isArchived, spaceID, id); restrErr != nil { - err = restrErr - } else { - if isArchived { - err = archive.AddObject(id) - } else { - err = archive.RemoveObject(id) - } - } - if err != nil { - log.With("objectID", id).Errorf("failed to set isArchived=%t for object: %s", isArchived, err) - multiErr.Errors = append(multiErr.Errors, err) - continue - } - anySucceed = true - } - - if err := multiErr.ErrorOrNil(); err != nil { - log.Warnf("failed to archive: %s", err) - } - if anySucceed { - return nil - } - return multiErr.ErrorOrNil() - }) -} - -func (s *Service) partitionObjectIDsBySpaceID(objectIDs []string) (map[string][]string, error) { - res := map[string][]string{} - for _, objectID := range objectIDs { - spaceID, err := s.resolver.ResolveSpaceID(objectID) - if err != nil { - return nil, fmt.Errorf("resolve spaceID: %w", err) - } - res[spaceID] = append(res[spaceID], objectID) - } - return res, nil -} - -func (s *Service) SetPagesIsFavorite(req pb.RpcObjectListSetIsFavoriteRequest) error { - ids, err := s.objectStore.HasIDs(req.ObjectIds...) - if err != nil { - return err - } - var ( - anySucceed bool - resultError error - ) - for _, id := range ids { - err := s.SetPageIsFavorite(pb.RpcObjectSetIsFavoriteRequest{ - ContextId: id, - IsFavorite: req.IsFavorite, - }) - if err != nil { - log.Errorf("failed to favorite object %s: %s", id, err) - resultError = errors.Join(resultError, err) - } else { - anySucceed = true - } - } - if resultError != nil { - log.Warnf("failed to set objects as favorite: %s", resultError) - } - if anySucceed { - return nil - } - return resultError -} - -func (s *Service) objectLinksCollectionModify(collectionId string, objectId string, value bool) error { - return cache.Do(s, collectionId, func(b smartblock.SmartBlock) error { - coll, ok := b.(collection.Collection) - if !ok { - return fmt.Errorf("unsupported sb block type: %T", b) - } - if value { - return coll.AddObject(objectId) - } else { - return coll.RemoveObject(objectId) - } - }) -} - -func (s *Service) SetPageIsFavorite(req pb.RpcObjectSetIsFavoriteRequest) (err error) { - spaceID, err := s.resolver.ResolveSpaceID(req.ContextId) - if err != nil { - return fmt.Errorf("resolve spaceID: %w", err) - } - spc, err := s.spaceService.Get(context.Background(), spaceID) - if err != nil { - return fmt.Errorf("get space: %w", err) - } - return s.objectLinksCollectionModify(spc.DerivedIDs().Home, req.ContextId, req.IsFavorite) -} - -func (s *Service) SetPageIsArchived(req pb.RpcObjectSetIsArchivedRequest) (err error) { - spaceID, err := s.resolver.ResolveSpaceID(req.ContextId) - if err != nil { - return fmt.Errorf("resolve spaceID: %w", err) - } - spc, err := s.spaceService.Get(context.Background(), spaceID) - if err != nil { - return fmt.Errorf("get space: %w", err) - } - if err := s.checkArchivedRestriction(req.IsArchived, spaceID, req.ContextId); err != nil { - return err - } - return s.objectLinksCollectionModify(spc.DerivedIDs().Archive, req.ContextId, req.IsArchived) -} - -func (s *Service) SetSource(ctx session.Context, req pb.RpcObjectSetSourceRequest) (err error) { - return cache.Do(s, req.ContextId, func(sb smartblock.SmartBlock) error { - st := sb.NewStateCtx(ctx) - // nolint:errcheck - _ = st.Iterate(func(b simple.Block) (isContinue bool) { - if dv := b.Model().GetDataview(); dv != nil { - for _, view := range dv.Views { - view.DefaultTemplateId = "" - view.DefaultObjectTypeId = "" - } - st.Set(b) - return false - } - return true - }) - st.SetDetailAndBundledRelation(bundle.RelationKeySetOf, pbtypes.StringList(req.Source)) - - flags := internalflag.NewFromState(st) - // set with source is no longer empty - flags.Remove(model.InternalFlag_editorDeleteEmpty) - flags.AddToState(st) - - return sb.Apply(st, smartblock.NoRestrictions, smartblock.KeepInternalFlags) - }) -} - -func (s *Service) SetWorkspaceDashboardId(ctx session.Context, workspaceId string, id string) (setId string, err error) { - err = cache.Do(s, workspaceId, func(ws *editor.Workspaces) error { - if ws.Type() != coresb.SmartBlockTypeWorkspace { - return ErrUnexpectedBlockType - } - if err = ws.SetDetails(ctx, []*model.Detail{ - { - Key: bundle.RelationKeySpaceDashboardId.String(), - Value: pbtypes.String(id), - }, - }, false); err != nil { - return err - } - return nil - }) - return id, err -} - -func (s *Service) checkArchivedRestriction(isArchived bool, spaceID string, objectId string) error { - if !isArchived { - return nil - } - return cache.Do(s, objectId, func(sb smartblock.SmartBlock) error { - return s.restriction.CheckRestrictions(sb, model.Restrictions_Delete) - }) -} - func (s *Service) DeleteArchivedObjects(objectIDs []string) error { var ( resultError error @@ -740,8 +508,7 @@ func (s *Service) ObjectToBookmark(ctx context.Context, id string, url string) ( return } - oStore := s.app.MustComponent(objectstore.CName).(objectstore.ObjectStore) - res, err := oStore.GetWithLinksInfoByID(spaceID, id) + res, err := s.objectStore.GetWithLinksInfoByID(spaceID, id) if err != nil { return } diff --git a/core/block_dataview.go b/core/block_dataview.go index 49c533a96..05f4922eb 100644 --- a/core/block_dataview.go +++ b/core/block_dataview.go @@ -4,6 +4,7 @@ import ( "context" "github.com/anyproto/anytype-heart/core/block" + "github.com/anyproto/anytype-heart/core/block/editor/template" "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pkg/lib/pb/model" ) @@ -588,3 +589,23 @@ func (mw *Middleware) BlockDataviewViewRelationSort(cctx context.Context, req *p return resp(err) } + +func (mw *Middleware) ObjectSetSource(cctx context.Context, req *pb.RpcObjectSetSourceRequest) *pb.RpcObjectSetSourceResponse { + ctx := mw.newContext(cctx) + response := func(code pb.RpcObjectSetSourceResponseErrorCode, err error) *pb.RpcObjectSetSourceResponse { + m := &pb.RpcObjectSetSourceResponse{Error: &pb.RpcObjectSetSourceResponseError{Code: code}} + if err != nil { + m.Error.Description = getErrorDescription(err) + } else { + m.Event = mw.getResponseEvent(ctx) + } + return m + } + err := mw.doBlockService(func(bs *block.Service) (err error) { + return bs.SetDataviewSource(ctx, req.ContextId, template.DataviewBlockId, req.Source) + }) + if err != nil { + return response(pb.RpcObjectSetSourceResponseError_UNKNOWN_ERROR, err) + } + return response(pb.RpcObjectSetSourceResponseError_NULL, nil) +} diff --git a/core/details.go b/core/details.go new file mode 100644 index 000000000..f158149f8 --- /dev/null +++ b/core/details.go @@ -0,0 +1,168 @@ +package core + +import ( + "context" + + "github.com/gogo/protobuf/types" + + "github.com/anyproto/anytype-heart/core/block/detailservice" + "github.com/anyproto/anytype-heart/pb" + "github.com/anyproto/anytype-heart/util/internalflag" + "github.com/anyproto/anytype-heart/util/pbtypes" +) + +func (mw *Middleware) ObjectSetDetails(cctx context.Context, req *pb.RpcObjectSetDetailsRequest) *pb.RpcObjectSetDetailsResponse { + ctx := mw.newContext(cctx) + response := func(code pb.RpcObjectSetDetailsResponseErrorCode, err error) *pb.RpcObjectSetDetailsResponse { + m := &pb.RpcObjectSetDetailsResponse{Error: &pb.RpcObjectSetDetailsResponseError{Code: code}} + if err != nil { + m.Error.Description = getErrorDescription(err) + } else { + m.Event = mw.getResponseEvent(ctx) + } + return m + } + err := getService[detailservice.Service](mw).SetDetailsAndUpdateLastUsed(ctx, req.ContextId, req.GetDetails()) + if err != nil { + return response(pb.RpcObjectSetDetailsResponseError_UNKNOWN_ERROR, err) + } + return response(pb.RpcObjectSetDetailsResponseError_NULL, nil) +} + +func (mw *Middleware) ObjectListSetDetails(cctx context.Context, req *pb.RpcObjectListSetDetailsRequest) *pb.RpcObjectListSetDetailsResponse { + ctx := mw.newContext(cctx) + response := func(code pb.RpcObjectListSetDetailsResponseErrorCode, err error) *pb.RpcObjectListSetDetailsResponse { + m := &pb.RpcObjectListSetDetailsResponse{Error: &pb.RpcObjectListSetDetailsResponseError{Code: code}} + if err != nil { + m.Error.Description = getErrorDescription(err) + } else { + m.Event = mw.getResponseEvent(ctx) + } + return m + } + + err := getService[detailservice.Service](mw).SetDetailsList(ctx, req.ObjectIds, req.Details) + if err != nil { + return response(pb.RpcObjectListSetDetailsResponseError_UNKNOWN_ERROR, err) + } + + return response(pb.RpcObjectListSetDetailsResponseError_NULL, nil) +} + +func (mw *Middleware) ObjectSetInternalFlags(cctx context.Context, req *pb.RpcObjectSetInternalFlagsRequest) *pb.RpcObjectSetInternalFlagsResponse { + ctx := mw.newContext(cctx) + response := func(code pb.RpcObjectSetInternalFlagsResponseErrorCode, err error) *pb.RpcObjectSetInternalFlagsResponse { + m := &pb.RpcObjectSetInternalFlagsResponse{Error: &pb.RpcObjectSetInternalFlagsResponseError{Code: code}} + if err != nil { + m.Error.Description = getErrorDescription(err) + } else { + m.Event = mw.getResponseEvent(ctx) + } + return m + } + ds := getService[detailservice.Service](mw) + err := ds.ModifyDetails(req.ContextId, func(current *types.Struct) (*types.Struct, error) { + d := pbtypes.CopyStruct(current, false) + return internalflag.PutToDetails(d, req.InternalFlags), nil + }) + if err != nil { + return response(pb.RpcObjectSetInternalFlagsResponseError_UNKNOWN_ERROR, err) + } + return response(pb.RpcObjectSetInternalFlagsResponseError_NULL, nil) +} + +func (mw *Middleware) ObjectListModifyDetailValues(_ context.Context, req *pb.RpcObjectListModifyDetailValuesRequest) *pb.RpcObjectListModifyDetailValuesResponse { + response := func(code pb.RpcObjectListModifyDetailValuesResponseErrorCode, err error) *pb.RpcObjectListModifyDetailValuesResponse { + m := &pb.RpcObjectListModifyDetailValuesResponse{Error: &pb.RpcObjectListModifyDetailValuesResponseError{Code: code}} + if err != nil { + m.Error.Description = getErrorDescription(err) + } + return m + } + err := getService[detailservice.Service](mw).ModifyDetailsList(req) + if err != nil { + return response(pb.RpcObjectListModifyDetailValuesResponseError_UNKNOWN_ERROR, err) + } + return response(pb.RpcObjectListModifyDetailValuesResponseError_NULL, nil) +} + +func (mw *Middleware) ObjectWorkspaceSetDashboard(cctx context.Context, req *pb.RpcObjectWorkspaceSetDashboardRequest) *pb.RpcObjectWorkspaceSetDashboardResponse { + ctx := mw.newContext(cctx) + response := func(setId string, err error) *pb.RpcObjectWorkspaceSetDashboardResponse { + resp := &pb.RpcObjectWorkspaceSetDashboardResponse{ + ObjectId: setId, + Error: &pb.RpcObjectWorkspaceSetDashboardResponseError{ + Code: pb.RpcObjectWorkspaceSetDashboardResponseError_NULL, + }, + } + if err != nil { + resp.Error.Code = pb.RpcObjectWorkspaceSetDashboardResponseError_UNKNOWN_ERROR + resp.Error.Description = getErrorDescription(err) + } else { + resp.Event = mw.getResponseEvent(ctx) + } + return resp + } + setId, err := getService[detailservice.Service](mw).SetWorkspaceDashboardId(ctx, req.ContextId, req.ObjectId) + return response(setId, err) +} + +func (mw *Middleware) ObjectSetIsFavorite(_ context.Context, req *pb.RpcObjectSetIsFavoriteRequest) *pb.RpcObjectSetIsFavoriteResponse { + response := func(code pb.RpcObjectSetIsFavoriteResponseErrorCode, err error) *pb.RpcObjectSetIsFavoriteResponse { + m := &pb.RpcObjectSetIsFavoriteResponse{Error: &pb.RpcObjectSetIsFavoriteResponseError{Code: code}} + if err != nil { + m.Error.Description = getErrorDescription(err) + } + return m + } + err := getService[detailservice.Service](mw).SetIsFavorite(req.ContextId, req.IsFavorite) + if err != nil { + return response(pb.RpcObjectSetIsFavoriteResponseError_UNKNOWN_ERROR, err) + } + return response(pb.RpcObjectSetIsFavoriteResponseError_NULL, nil) +} + +func (mw *Middleware) ObjectSetIsArchived(_ context.Context, req *pb.RpcObjectSetIsArchivedRequest) *pb.RpcObjectSetIsArchivedResponse { + response := func(code pb.RpcObjectSetIsArchivedResponseErrorCode, err error) *pb.RpcObjectSetIsArchivedResponse { + m := &pb.RpcObjectSetIsArchivedResponse{Error: &pb.RpcObjectSetIsArchivedResponseError{Code: code}} + if err != nil { + m.Error.Description = getErrorDescription(err) + } + return m + } + err := getService[detailservice.Service](mw).SetIsArchived(req.ContextId, req.IsArchived) + if err != nil { + return response(pb.RpcObjectSetIsArchivedResponseError_UNKNOWN_ERROR, err) + } + return response(pb.RpcObjectSetIsArchivedResponseError_NULL, nil) +} + +func (mw *Middleware) ObjectListSetIsArchived(_ context.Context, req *pb.RpcObjectListSetIsArchivedRequest) *pb.RpcObjectListSetIsArchivedResponse { + response := func(code pb.RpcObjectListSetIsArchivedResponseErrorCode, err error) *pb.RpcObjectListSetIsArchivedResponse { + m := &pb.RpcObjectListSetIsArchivedResponse{Error: &pb.RpcObjectListSetIsArchivedResponseError{Code: code}} + if err != nil { + m.Error.Description = getErrorDescription(err) + } + return m + } + err := getService[detailservice.Service](mw).SetListIsArchived(req.ObjectIds, req.IsArchived) + if err != nil { + return response(pb.RpcObjectListSetIsArchivedResponseError_UNKNOWN_ERROR, err) + } + return response(pb.RpcObjectListSetIsArchivedResponseError_NULL, nil) +} + +func (mw *Middleware) ObjectListSetIsFavorite(_ context.Context, req *pb.RpcObjectListSetIsFavoriteRequest) *pb.RpcObjectListSetIsFavoriteResponse { + response := func(code pb.RpcObjectListSetIsFavoriteResponseErrorCode, err error) *pb.RpcObjectListSetIsFavoriteResponse { + m := &pb.RpcObjectListSetIsFavoriteResponse{Error: &pb.RpcObjectListSetIsFavoriteResponseError{Code: code}} + if err != nil { + m.Error.Description = getErrorDescription(err) + } + return m + } + err := getService[detailservice.Service](mw).SetListIsFavorite(req.ObjectIds, req.IsFavorite) + if err != nil { + return response(pb.RpcObjectListSetIsFavoriteResponseError_UNKNOWN_ERROR, err) + } + return response(pb.RpcObjectListSetIsFavoriteResponseError_NULL, nil) +} diff --git a/core/files/fileobject/service.go b/core/files/fileobject/service.go index 978986a22..9e82dc0b0 100644 --- a/core/files/fileobject/service.go +++ b/core/files/fileobject/service.go @@ -24,7 +24,6 @@ import ( "github.com/anyproto/anytype-heart/core/files" "github.com/anyproto/anytype-heart/core/files/fileoffloader" "github.com/anyproto/anytype-heart/core/filestorage/filesync" - "github.com/anyproto/anytype-heart/core/session" "github.com/anyproto/anytype-heart/core/syncstatus/filesyncstatus" "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pkg/lib/bundle" @@ -166,7 +165,7 @@ func (s *service) Run(_ context.Context) error { } type objectArchiver interface { - SetPagesIsArchived(ctx session.Context, req pb.RpcObjectListSetIsArchivedRequest) error + SetListIsArchived(objectIds []string, isArchived bool) error } func (s *service) deleteMigratedFilesInNonPersonalSpaces(ctx context.Context) error { @@ -196,11 +195,7 @@ func (s *service) deleteMigratedFilesInNonPersonalSpaces(ctx context.Context) er return err } if len(objectIds) > 0 { - err = s.objectArchiver.SetPagesIsArchived(nil, pb.RpcObjectListSetIsArchivedRequest{ - ObjectIds: objectIds, - IsArchived: true, - }) - if err != nil { + if err = s.objectArchiver.SetListIsArchived(objectIds, true); err != nil { return err } } diff --git a/core/files/fileobject/service_test.go b/core/files/fileobject/service_test.go index 8d22ca751..c8dc3350b 100644 --- a/core/files/fileobject/service_test.go +++ b/core/files/fileobject/service_test.go @@ -29,7 +29,6 @@ import ( "github.com/anyproto/anytype-heart/core/filestorage" "github.com/anyproto/anytype-heart/core/filestorage/filesync" "github.com/anyproto/anytype-heart/core/filestorage/rpcstore" - "github.com/anyproto/anytype-heart/core/session" wallet2 "github.com/anyproto/anytype-heart/core/wallet" "github.com/anyproto/anytype-heart/core/wallet/mock_wallet" "github.com/anyproto/anytype-heart/pb" @@ -71,7 +70,7 @@ func (c *dummyConfig) Name() string { type dummyObjectArchiver struct{} -func (a *dummyObjectArchiver) SetPagesIsArchived(ctx session.Context, req pb.RpcObjectListSetIsArchivedRequest) error { +func (a *dummyObjectArchiver) SetListIsArchived(_ []string, _ bool) error { return nil } diff --git a/core/object.go b/core/object.go index 3c85b5eb3..5f408e34c 100644 --- a/core/object.go +++ b/core/object.go @@ -28,30 +28,9 @@ import ( "github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore" "github.com/anyproto/anytype-heart/pkg/lib/pb/model" "github.com/anyproto/anytype-heart/space" - "github.com/anyproto/anytype-heart/util/internalflag" "github.com/anyproto/anytype-heart/util/pbtypes" ) -func (mw *Middleware) ObjectSetDetails(cctx context.Context, req *pb.RpcObjectSetDetailsRequest) *pb.RpcObjectSetDetailsResponse { - ctx := mw.newContext(cctx) - response := func(code pb.RpcObjectSetDetailsResponseErrorCode, err error) *pb.RpcObjectSetDetailsResponse { - m := &pb.RpcObjectSetDetailsResponse{Error: &pb.RpcObjectSetDetailsResponseError{Code: code}} - if err != nil { - m.Error.Description = getErrorDescription(err) - } else { - m.Event = mw.getResponseEvent(ctx) - } - return m - } - err := mw.doBlockService(func(bs *block.Service) (err error) { - return bs.SetDetailsAndUpdateLastUsed(ctx, req.ContextId, req.GetDetails()) - }) - if err != nil { - return response(pb.RpcObjectSetDetailsResponseError_UNKNOWN_ERROR, err) - } - return response(pb.RpcObjectSetDetailsResponseError_NULL, nil) -} - func (mw *Middleware) ObjectDuplicate(cctx context.Context, req *pb.RpcObjectDuplicateRequest) *pb.RpcObjectDuplicateResponse { response := func(templateId string, err error) *pb.RpcObjectDuplicateResponse { m := &pb.RpcObjectDuplicateResponse{ @@ -621,44 +600,6 @@ func (mw *Middleware) ObjectListSetObjectType(cctx context.Context, req *pb.RpcO return response(pb.RpcObjectListSetObjectTypeResponseError_NULL, nil) } -func (mw *Middleware) ObjectListSetDetails(cctx context.Context, req *pb.RpcObjectListSetDetailsRequest) *pb.RpcObjectListSetDetailsResponse { - ctx := mw.newContext(cctx) - response := func(code pb.RpcObjectListSetDetailsResponseErrorCode, err error) *pb.RpcObjectListSetDetailsResponse { - m := &pb.RpcObjectListSetDetailsResponse{Error: &pb.RpcObjectListSetDetailsResponseError{Code: code}} - if err != nil { - m.Error.Description = getErrorDescription(err) - } else { - m.Event = mw.getResponseEvent(ctx) - } - return m - } - - if err := mw.doBlockService(func(bs *block.Service) (err error) { - return bs.SetDetailsList(ctx, req.ObjectIds, req.Details) - }); err != nil { - return response(pb.RpcObjectListSetDetailsResponseError_UNKNOWN_ERROR, err) - } - - return response(pb.RpcObjectListSetDetailsResponseError_NULL, nil) -} - -func (mw *Middleware) ObjectListModifyDetailValues(_ context.Context, req *pb.RpcObjectListModifyDetailValuesRequest) *pb.RpcObjectListModifyDetailValuesResponse { - response := func(code pb.RpcObjectListModifyDetailValuesResponseErrorCode, err error) *pb.RpcObjectListModifyDetailValuesResponse { - m := &pb.RpcObjectListModifyDetailValuesResponse{Error: &pb.RpcObjectListModifyDetailValuesResponseError{Code: code}} - if err != nil { - m.Error.Description = getErrorDescription(err) - } - return m - } - err := mw.doBlockService(func(bs *block.Service) (err error) { - return bs.ModifyDetailsList(req) - }) - if err != nil { - return response(pb.RpcObjectListModifyDetailValuesResponseError_UNKNOWN_ERROR, err) - } - return response(pb.RpcObjectListModifyDetailValuesResponseError_NULL, nil) -} - func (mw *Middleware) ObjectSetLayout(cctx context.Context, req *pb.RpcObjectSetLayoutRequest) *pb.RpcObjectSetLayoutResponse { ctx := mw.newContext(cctx) response := func(code pb.RpcObjectSetLayoutResponseErrorCode, err error) *pb.RpcObjectSetLayoutResponse { @@ -679,94 +620,6 @@ func (mw *Middleware) ObjectSetLayout(cctx context.Context, req *pb.RpcObjectSet return response(pb.RpcObjectSetLayoutResponseError_NULL, nil) } -func (mw *Middleware) ObjectSetIsArchived(cctx context.Context, req *pb.RpcObjectSetIsArchivedRequest) *pb.RpcObjectSetIsArchivedResponse { - response := func(code pb.RpcObjectSetIsArchivedResponseErrorCode, err error) *pb.RpcObjectSetIsArchivedResponse { - m := &pb.RpcObjectSetIsArchivedResponse{Error: &pb.RpcObjectSetIsArchivedResponseError{Code: code}} - if err != nil { - m.Error.Description = getErrorDescription(err) - } - return m - } - err := mw.doBlockService(func(bs *block.Service) (err error) { - return bs.SetPageIsArchived(*req) - }) - if err != nil { - return response(pb.RpcObjectSetIsArchivedResponseError_UNKNOWN_ERROR, err) - } - return response(pb.RpcObjectSetIsArchivedResponseError_NULL, nil) -} - -func (mw *Middleware) ObjectSetSource(cctx context.Context, - req *pb.RpcObjectSetSourceRequest) *pb.RpcObjectSetSourceResponse { - ctx := mw.newContext(cctx) - response := func(code pb.RpcObjectSetSourceResponseErrorCode, err error) *pb.RpcObjectSetSourceResponse { - m := &pb.RpcObjectSetSourceResponse{Error: &pb.RpcObjectSetSourceResponseError{Code: code}} - if err != nil { - m.Error.Description = getErrorDescription(err) - } else { - m.Event = mw.getResponseEvent(ctx) - } - return m - } - err := mw.doBlockService(func(bs *block.Service) (err error) { - return bs.SetSource(ctx, *req) - }) - if err != nil { - return response(pb.RpcObjectSetSourceResponseError_UNKNOWN_ERROR, err) - } - return response(pb.RpcObjectSetSourceResponseError_NULL, nil) -} - -func (mw *Middleware) ObjectWorkspaceSetDashboard(cctx context.Context, req *pb.RpcObjectWorkspaceSetDashboardRequest) *pb.RpcObjectWorkspaceSetDashboardResponse { - ctx := mw.newContext(cctx) - response := func(setId string, err error) *pb.RpcObjectWorkspaceSetDashboardResponse { - resp := &pb.RpcObjectWorkspaceSetDashboardResponse{ - ObjectId: setId, - Error: &pb.RpcObjectWorkspaceSetDashboardResponseError{ - Code: pb.RpcObjectWorkspaceSetDashboardResponseError_NULL, - }, - } - if err != nil { - resp.Error.Code = pb.RpcObjectWorkspaceSetDashboardResponseError_UNKNOWN_ERROR - resp.Error.Description = getErrorDescription(err) - } else { - resp.Event = mw.getResponseEvent(ctx) - } - return resp - } - var ( - setId string - err error - ) - err = mw.doBlockService(func(bs *block.Service) error { - if setId, err = bs.SetWorkspaceDashboardId(ctx, req.ContextId, req.ObjectId); err != nil { - return err - } - return nil - }) - return response(setId, err) -} - -func (mw *Middleware) ObjectSetIsFavorite(cctx context.Context, req *pb.RpcObjectSetIsFavoriteRequest) *pb.RpcObjectSetIsFavoriteResponse { - ctx := mw.newContext(cctx) - response := func(code pb.RpcObjectSetIsFavoriteResponseErrorCode, err error) *pb.RpcObjectSetIsFavoriteResponse { - m := &pb.RpcObjectSetIsFavoriteResponse{Error: &pb.RpcObjectSetIsFavoriteResponseError{Code: code}} - if err != nil { - m.Error.Description = getErrorDescription(err) - } else { - m.Event = mw.getResponseEvent(ctx) - } - return m - } - err := mw.doBlockService(func(bs *block.Service) (err error) { - return bs.SetPageIsFavorite(*req) - }) - if err != nil { - return response(pb.RpcObjectSetIsFavoriteResponseError_UNKNOWN_ERROR, err) - } - return response(pb.RpcObjectSetIsFavoriteResponseError_NULL, nil) -} - func (mw *Middleware) ObjectRelationAddFeatured(cctx context.Context, req *pb.RpcObjectRelationAddFeaturedRequest) *pb.RpcObjectRelationAddFeaturedResponse { ctx := mw.newContext(cctx) response := func(code pb.RpcObjectRelationAddFeaturedResponseErrorCode, err error) *pb.RpcObjectRelationAddFeaturedResponse { @@ -867,29 +720,6 @@ func (mw *Middleware) ObjectToBookmark(cctx context.Context, req *pb.RpcObjectTo return response(pb.RpcObjectToBookmarkResponseError_NULL, id, nil) } -func (mw *Middleware) ObjectSetInternalFlags(cctx context.Context, req *pb.RpcObjectSetInternalFlagsRequest) *pb.RpcObjectSetInternalFlagsResponse { - ctx := mw.newContext(cctx) - response := func(code pb.RpcObjectSetInternalFlagsResponseErrorCode, err error) *pb.RpcObjectSetInternalFlagsResponse { - m := &pb.RpcObjectSetInternalFlagsResponse{Error: &pb.RpcObjectSetInternalFlagsResponseError{Code: code}} - if err != nil { - m.Error.Description = getErrorDescription(err) - } else { - m.Event = mw.getResponseEvent(ctx) - } - return m - } - err := mw.doBlockService(func(bs *block.Service) (err error) { - return bs.ModifyDetails(req.ContextId, func(current *types.Struct) (*types.Struct, error) { - d := pbtypes.CopyStruct(current, false) - return internalflag.PutToDetails(d, req.InternalFlags), nil - }) - }) - if err != nil { - return response(pb.RpcObjectSetInternalFlagsResponseError_UNKNOWN_ERROR, err) - } - return response(pb.RpcObjectSetInternalFlagsResponseError_NULL, nil) -} - func (mw *Middleware) ObjectImport(cctx context.Context, req *pb.RpcObjectImportRequest) *pb.RpcObjectImportResponse { response := func(code pb.RpcObjectImportResponseErrorCode, err error) *pb.RpcObjectImportResponse { m := &pb.RpcObjectImportResponse{ diff --git a/core/relations.go b/core/relations.go index 5acb31d6a..453eddab6 100644 --- a/core/relations.go +++ b/core/relations.go @@ -5,20 +5,21 @@ import ( "errors" "github.com/anyproto/anytype-heart/core/block" + "github.com/anyproto/anytype-heart/core/block/detailservice" "github.com/anyproto/anytype-heart/core/domain" "github.com/anyproto/anytype-heart/pb" ) func (mw *Middleware) ObjectTypeRelationAdd(cctx context.Context, req *pb.RpcObjectTypeRelationAddRequest) *pb.RpcObjectTypeRelationAddResponse { - blockService := getService[*block.Service](mw) + detailsService := getService[detailservice.Service](mw) keys := make([]domain.RelationKey, 0, len(req.RelationKeys)) for _, relKey := range req.RelationKeys { keys = append(keys, domain.RelationKey(relKey)) } - err := blockService.ObjectTypeRelationAdd(cctx, req.ObjectTypeUrl, keys) + err := detailsService.ObjectTypeAddRelations(cctx, req.ObjectTypeUrl, keys) code := mapErrorCode(err, - errToCode(block.ErrBundledTypeIsReadonly, pb.RpcObjectTypeRelationAddResponseError_READONLY_OBJECT_TYPE), + errToCode(detailservice.ErrBundledTypeIsReadonly, pb.RpcObjectTypeRelationAddResponseError_READONLY_OBJECT_TYPE), ) return &pb.RpcObjectTypeRelationAddResponse{ Error: &pb.RpcObjectTypeRelationAddResponseError{ @@ -29,15 +30,15 @@ func (mw *Middleware) ObjectTypeRelationAdd(cctx context.Context, req *pb.RpcObj } func (mw *Middleware) ObjectTypeRelationRemove(cctx context.Context, req *pb.RpcObjectTypeRelationRemoveRequest) *pb.RpcObjectTypeRelationRemoveResponse { - blockService := getService[*block.Service](mw) + detailsService := getService[detailservice.Service](mw) keys := make([]domain.RelationKey, 0, len(req.RelationKeys)) for _, relKey := range req.RelationKeys { keys = append(keys, domain.RelationKey(relKey)) } - err := blockService.ObjectTypeRemoveRelations(cctx, req.ObjectTypeUrl, keys) + err := detailsService.ObjectTypeRemoveRelations(cctx, req.ObjectTypeUrl, keys) code := mapErrorCode(err, - errToCode(block.ErrBundledTypeIsReadonly, pb.RpcObjectTypeRelationRemoveResponseError_READONLY_OBJECT_TYPE), + errToCode(detailservice.ErrBundledTypeIsReadonly, pb.RpcObjectTypeRelationRemoveResponseError_READONLY_OBJECT_TYPE), ) return &pb.RpcObjectTypeRelationRemoveResponse{ Error: &pb.RpcObjectTypeRelationRemoveResponseError{ @@ -80,7 +81,23 @@ func (mw *Middleware) RelationListRemoveOption(cctx context.Context, request *pb return response(pb.RpcRelationListRemoveOptionResponseError_NULL, nil) } -func (mw *Middleware) RelationOptions(cctx context.Context, request *pb.RpcRelationOptionsRequest) *pb.RpcRelationOptionsResponse { +func (mw *Middleware) RelationOptions(_ context.Context, _ *pb.RpcRelationOptionsRequest) *pb.RpcRelationOptionsResponse { // TODO implement me panic("implement me") } + +func (mw *Middleware) RelationListWithValue(_ context.Context, req *pb.RpcRelationListWithValueRequest) *pb.RpcRelationListWithValueResponse { + response := func(keys []string, counters []int64, err error) *pb.RpcRelationListWithValueResponse { + m := &pb.RpcRelationListWithValueResponse{Error: &pb.RpcRelationListWithValueResponseError{Code: pb.RpcRelationListWithValueResponseError_NULL}} + if err != nil { + m.Error.Description = getErrorDescription(err) + } else { + m.RelationKeys = keys + m.Counters = counters + } + return m + } + + keys, counters, err := getService[detailservice.Service](mw).ListRelationsWithValue(req.SpaceId, req.Value) + return response(keys, counters, err) +} diff --git a/core/workspace.go b/core/workspace.go index 80220191c..0775e8f67 100644 --- a/core/workspace.go +++ b/core/workspace.go @@ -8,6 +8,7 @@ import ( "github.com/anyproto/anytype-heart/core/anytype/account" "github.com/anyproto/anytype-heart/core/block" "github.com/anyproto/anytype-heart/core/block/cache" + "github.com/anyproto/anytype-heart/core/block/detailservice" "github.com/anyproto/anytype-heart/core/block/editor" "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pkg/lib/pb/model" @@ -74,10 +75,7 @@ func (mw *Middleware) WorkspaceSetInfo(cctx context.Context, req *pb.RpcWorkspac return m } - err := mw.doBlockService(func(bs *block.Service) (err error) { - err = bs.SetSpaceInfo(req) - return - }) + err := getService[detailservice.Service](mw).SetSpaceInfo(req.SpaceId, req.Details) if err != nil { return response(pb.RpcWorkspaceSetInfoResponseError_UNKNOWN_ERROR, err) } diff --git a/docs/proto.md b/docs/proto.md index e10e41eff..640dd3614 100644 --- a/docs/proto.md +++ b/docs/proto.md @@ -1052,6 +1052,10 @@ - [Rpc.Relation.ListRemoveOption.Request](#anytype-Rpc-Relation-ListRemoveOption-Request) - [Rpc.Relation.ListRemoveOption.Response](#anytype-Rpc-Relation-ListRemoveOption-Response) - [Rpc.Relation.ListRemoveOption.Response.Error](#anytype-Rpc-Relation-ListRemoveOption-Response-Error) + - [Rpc.Relation.ListWithValue](#anytype-Rpc-Relation-ListWithValue) + - [Rpc.Relation.ListWithValue.Request](#anytype-Rpc-Relation-ListWithValue-Request) + - [Rpc.Relation.ListWithValue.Response](#anytype-Rpc-Relation-ListWithValue-Response) + - [Rpc.Relation.ListWithValue.Response.Error](#anytype-Rpc-Relation-ListWithValue-Response-Error) - [Rpc.Relation.Options](#anytype-Rpc-Relation-Options) - [Rpc.Relation.Options.Request](#anytype-Rpc-Relation-Options-Request) - [Rpc.Relation.Options.Response](#anytype-Rpc-Relation-Options-Response) @@ -1448,6 +1452,7 @@ - [Rpc.ObjectType.Relation.Remove.Response.Error.Code](#anytype-Rpc-ObjectType-Relation-Remove-Response-Error-Code) - [Rpc.Process.Cancel.Response.Error.Code](#anytype-Rpc-Process-Cancel-Response-Error-Code) - [Rpc.Relation.ListRemoveOption.Response.Error.Code](#anytype-Rpc-Relation-ListRemoveOption-Response-Error-Code) + - [Rpc.Relation.ListWithValue.Response.Error.Code](#anytype-Rpc-Relation-ListWithValue-Response-Error-Code) - [Rpc.Relation.Options.Response.Error.Code](#anytype-Rpc-Relation-Options-Response-Error-Code) - [Rpc.Space.Delete.Response.Error.Code](#anytype-Rpc-Space-Delete-Response-Error-Code) - [Rpc.Space.InviteGenerate.Response.Error.Code](#anytype-Rpc-Space-InviteGenerate-Response-Error-Code) @@ -1993,6 +1998,7 @@ | ObjectCreateRelationOption | [Rpc.Object.CreateRelationOption.Request](#anytype-Rpc-Object-CreateRelationOption-Request) | [Rpc.Object.CreateRelationOption.Response](#anytype-Rpc-Object-CreateRelationOption-Response) | | | RelationListRemoveOption | [Rpc.Relation.ListRemoveOption.Request](#anytype-Rpc-Relation-ListRemoveOption-Request) | [Rpc.Relation.ListRemoveOption.Response](#anytype-Rpc-Relation-ListRemoveOption-Response) | | | RelationOptions | [Rpc.Relation.Options.Request](#anytype-Rpc-Relation-Options-Request) | [Rpc.Relation.Options.Response](#anytype-Rpc-Relation-Options-Response) | | +| RelationListWithValue | [Rpc.Relation.ListWithValue.Request](#anytype-Rpc-Relation-ListWithValue-Request) | [Rpc.Relation.ListWithValue.Response](#anytype-Rpc-Relation-ListWithValue-Response) | | | ObjectRelationAdd | [Rpc.ObjectRelation.Add.Request](#anytype-Rpc-ObjectRelation-Add-Request) | [Rpc.ObjectRelation.Add.Response](#anytype-Rpc-ObjectRelation-Add-Response) | Object Relations *** | | ObjectRelationDelete | [Rpc.ObjectRelation.Delete.Request](#anytype-Rpc-ObjectRelation-Delete-Request) | [Rpc.ObjectRelation.Delete.Response](#anytype-Rpc-ObjectRelation-Delete-Response) | | | ObjectRelationAddFeatured | [Rpc.ObjectRelation.AddFeatured.Request](#anytype-Rpc-ObjectRelation-AddFeatured-Request) | [Rpc.ObjectRelation.AddFeatured.Response](#anytype-Rpc-ObjectRelation-AddFeatured-Response) | | @@ -17411,6 +17417,65 @@ Available undo/redo operations + + +### Rpc.Relation.ListWithValue + + + + + + + + + +### Rpc.Relation.ListWithValue.Request + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| spaceId | [string](#string) | | | +| value | [google.protobuf.Value](#google-protobuf-Value) | | | + + + + + + + + +### Rpc.Relation.ListWithValue.Response + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [Rpc.Relation.ListWithValue.Response.Error](#anytype-Rpc-Relation-ListWithValue-Response-Error) | | | +| relationKeys | [string](#string) | repeated | | +| counters | [int64](#int64) | repeated | | + + + + + + + + +### Rpc.Relation.ListWithValue.Response.Error + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| code | [Rpc.Relation.ListWithValue.Response.Error.Code](#anytype-Rpc-Relation-ListWithValue-Response-Error-Code) | | | +| description | [string](#string) | | | + + + + + + ### Rpc.Relation.Options @@ -22911,6 +22976,19 @@ Middleware-to-front-end response, that can contain a NULL error or a non-NULL er + + +### Rpc.Relation.ListWithValue.Response.Error.Code + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NULL | 0 | | +| UNKNOWN_ERROR | 1 | | +| BAD_INPUT | 2 | | + + + ### Rpc.Relation.Options.Response.Error.Code diff --git a/go.mod b/go.mod index ff8d95865..3b89ec6f5 100644 --- a/go.mod +++ b/go.mod @@ -7,10 +7,10 @@ require ( github.com/PuerkitoBio/goquery v1.9.2 github.com/VividCortex/ewma v1.2.0 github.com/adrium/goheif v0.0.0-20230113233934-ca402e77a786 - github.com/anyproto/any-store v0.0.5 + github.com/anyproto/any-store v0.0.6 github.com/anyproto/any-sync v0.4.30 github.com/anyproto/go-naturaldate/v2 v2.0.2-0.20230524105841-9829cfd13438 - github.com/anyproto/tantivy-go v0.1.0 + github.com/anyproto/tantivy-go v0.1.1 github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de github.com/avast/retry-go/v4 v4.6.0 github.com/blevesearch/bleve/v2 v2.3.10 @@ -44,7 +44,7 @@ require ( github.com/h2non/filetype v1.1.3 github.com/hashicorp/go-multierror v1.1.1 github.com/hbagdi/go-unsplash v0.0.0-20230414214043-474fc02c9119 - github.com/huandu/skiplist v1.2.0 + github.com/huandu/skiplist v1.2.1 github.com/improbable-eng/grpc-web v0.15.0 github.com/ipfs/boxo v0.13.1 github.com/ipfs/go-block-format v0.2.0 @@ -57,7 +57,7 @@ require ( github.com/joho/godotenv v1.5.1 github.com/jsummers/gobmp v0.0.0-20151104160322-e2ba15ffa76e github.com/kelseyhightower/envconfig v1.4.0 - github.com/klauspost/compress v1.17.9 + github.com/klauspost/compress v1.17.10 github.com/libp2p/go-libp2p v0.35.1 github.com/libp2p/zeroconf/v2 v2.2.0 github.com/logrusorgru/aurora v2.0.3+incompatible @@ -99,7 +99,7 @@ require ( golang.org/x/net v0.29.0 golang.org/x/oauth2 v0.23.0 golang.org/x/text v0.18.0 - google.golang.org/grpc v1.66.2 + google.golang.org/grpc v1.67.0 gopkg.in/Graylog2/go-gelf.v2 v2.0.0-20180125164251-1832d8546a9f gopkg.in/yaml.v3 v3.0.1 storj.io/drpc v0.0.34 @@ -155,7 +155,7 @@ require ( github.com/dsoprea/go-photoshop-info-format v0.0.0-20200609050348-3db9b63b202c // indirect github.com/dsoprea/go-utility/v2 v2.0.0-20221003172846-a3e1774ef349 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/envoyproxy/protoc-gen-validate v1.0.4 // indirect + github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect github.com/fogleman/gg v1.3.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-errors/errors v1.4.2 // indirect @@ -170,7 +170,7 @@ require ( github.com/gogs/chardet v0.0.0-20211120154057-b7413eaefb8f // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect github.com/golang/geo v0.0.0-20210211234256-740aa86cb551 // indirect - github.com/golang/glog v1.2.1 // indirect + github.com/golang/glog v1.2.2 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/flatbuffers v1.12.1 // indirect github.com/google/go-querystring v1.1.0 // indirect @@ -267,8 +267,8 @@ require ( golang.org/x/term v0.24.0 // indirect golang.org/x/time v0.5.0 // indirect golang.org/x/tools v0.24.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect google.golang.org/protobuf v1.34.2 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index feb946452..feffc78a6 100644 --- a/go.sum +++ b/go.sum @@ -83,8 +83,8 @@ github.com/andybalholm/cascadia v1.2.0/go.mod h1:YCyR8vOZT9aZ1CHEd8ap0gMVm2aFgxB github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA= github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss= github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU= -github.com/anyproto/any-store v0.0.5 h1:ToUbPNkGJcuYOpS2IWlbuxZadvsOOKLeLfKe8DeO3Hc= -github.com/anyproto/any-store v0.0.5/go.mod h1:MA3sSqRXIp0h9bC2LnMuDGVEFGB3BkI/UuWNCleGHMs= +github.com/anyproto/any-store v0.0.6 h1:FOBtNL6osrlzBu4wmiFqKZOa8pkL5Ena2LfVser8nig= +github.com/anyproto/any-store v0.0.6/go.mod h1:MA3sSqRXIp0h9bC2LnMuDGVEFGB3BkI/UuWNCleGHMs= github.com/anyproto/any-sync v0.4.30 h1:2nnoVQF9WiBIw8pzwuOubwqf7a+xvZPDkXHmykTPi0k= github.com/anyproto/any-sync v0.4.30/go.mod h1:YjwTdTRL6b6GuutJNboJJ1M5D/kkdeSf9qF5xP6wG7Y= github.com/anyproto/badger/v4 v4.2.1-0.20240110160636-80743fa3d580 h1:Ba80IlCCxkZ9H1GF+7vFu/TSpPvbpDCxXJ5ogc4euYc= @@ -109,8 +109,8 @@ github.com/anyproto/protobuf v1.3.3-0.20240201225420-6e325cf0ac38 h1:80jke82/c+b github.com/anyproto/protobuf v1.3.3-0.20240201225420-6e325cf0ac38/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/anyproto/ristretto v0.1.2-0.20240221153107-2b23839cc50c h1:GicoaTUyB2mtCIl3YMrO0OzysqRT5GA4vuvDsqEkhSM= github.com/anyproto/ristretto v0.1.2-0.20240221153107-2b23839cc50c/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= -github.com/anyproto/tantivy-go v0.1.0 h1:5SuItuJnYAEK9U6cfxPnwFUXGboURIwF4JAp7s46rII= -github.com/anyproto/tantivy-go v0.1.0/go.mod h1:Pl0zaeEX7dkVDTDKROzlLlGCVjbZHjyPrZloFuVEASc= +github.com/anyproto/tantivy-go v0.1.1 h1:IdeZca63wV7/C+wMpkntImdh/mkkEddQJTShGEVxGe0= +github.com/anyproto/tantivy-go v0.1.1/go.mod h1:Pl0zaeEX7dkVDTDKROzlLlGCVjbZHjyPrZloFuVEASc= github.com/anyproto/zeroconf/v2 v2.2.1-0.20240228113933-f90a5cc4439d h1:5bj7nX/AS8sxGpTIrapE7PC4oPlhkHMwMqXlJbUHBlg= github.com/anyproto/zeroconf/v2 v2.2.1-0.20240228113933-f90a5cc4439d/go.mod h1:fuJqLnUwZTshS3U/bMRJ3+ow/v9oid1n0DmyYyNO1Xs= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= @@ -311,8 +311,8 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= -github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= +github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= +github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= github.com/ethereum/go-ethereum v1.13.15 h1:U7sSGYGo4SPjP6iNIifNoyIAiNjrmQkz6EwQG+/EZWo= github.com/ethereum/go-ethereum v1.13.15/go.mod h1:TN8ZiHrdJwSe8Cb6x+p0hs5CxhJZPbqB7hHkaUXcmIU= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= @@ -415,8 +415,8 @@ github.com/golang/geo v0.0.0-20200319012246-673a6f80352d/go.mod h1:QZ0nwyI2jOfgR github.com/golang/geo v0.0.0-20210211234256-740aa86cb551 h1:gtexQ/VGyN+VVFRXSFiguSNcXmS6rkKT+X7FdIrTtfo= github.com/golang/geo v0.0.0-20210211234256-740aa86cb551/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.2.1 h1:OptwRhECazUx5ix5TTWC3EZhsZEHWcYWY4FQHTIubm4= -github.com/golang/glog v1.2.1/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= +github.com/golang/glog v1.2.2 h1:1+mZ9upx1Dh6FmUTFR1naJ77miKiXgALjWOZ3NVFPmY= +github.com/golang/glog v1.2.2/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -574,8 +574,8 @@ github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXei github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= -github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= -github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= +github.com/huandu/skiplist v1.2.1 h1:dTi93MgjwErA/8idWTzIw4Y1kZsMWx35fmI2c8Rij7w= +github.com/huandu/skiplist v1.2.1/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU= github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= @@ -757,8 +757,8 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= -github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/compress v1.17.10 h1:oXAz+Vh0PMUvJczoi+flxpnBEPxoER1IaAnU/NMPtT0= +github.com/klauspost/compress v1.17.10/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= @@ -1925,10 +1925,10 @@ google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 h1:+rdxYoE3E5htTEWIe15GlN6IfvbURM//Jt0mmkmm6ZU= -google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117/go.mod h1:OimBR/bc1wPO9iV4NC2bpyjy3VnAwZh5EBPQdtaE5oo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 h1:1GBuWVLM/KMVUv1t1En5Gs+gFZCNd360GGb4sSxtrhU= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= +google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= +google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 h1:e7S5W7MGGLaSu8j3YjdezkZ+m1/Nm0uRVRMEMGk26Xs= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -1953,8 +1953,8 @@ google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.66.2 h1:3QdXkuq3Bkh7w+ywLdLvM56cmGvQHUMZpiCzt6Rqaoo= -google.golang.org/grpc v1.66.2/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= +google.golang.org/grpc v1.67.0 h1:IdH9y6PF5MPSdAntIcpjQ+tXO41pcQsfZV2RxtQgVcw= +google.golang.org/grpc v1.67.0/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/pb/commands.pb.go b/pb/commands.pb.go index 56c0fdbaa..d17227e4e 100644 --- a/pb/commands.pb.go +++ b/pb/commands.pb.go @@ -3804,6 +3804,34 @@ func (RpcRelationOptionsResponseErrorCode) EnumDescriptor() ([]byte, []int) { return fileDescriptor_8261c968b2e6f45c, []int{0, 9, 1, 1, 0, 0} } +type RpcRelationListWithValueResponseErrorCode int32 + +const ( + RpcRelationListWithValueResponseError_NULL RpcRelationListWithValueResponseErrorCode = 0 + RpcRelationListWithValueResponseError_UNKNOWN_ERROR RpcRelationListWithValueResponseErrorCode = 1 + RpcRelationListWithValueResponseError_BAD_INPUT RpcRelationListWithValueResponseErrorCode = 2 +) + +var RpcRelationListWithValueResponseErrorCode_name = map[int32]string{ + 0: "NULL", + 1: "UNKNOWN_ERROR", + 2: "BAD_INPUT", +} + +var RpcRelationListWithValueResponseErrorCode_value = map[string]int32{ + "NULL": 0, + "UNKNOWN_ERROR": 1, + "BAD_INPUT": 2, +} + +func (x RpcRelationListWithValueResponseErrorCode) String() string { + return proto.EnumName(RpcRelationListWithValueResponseErrorCode_name, int32(x)) +} + +func (RpcRelationListWithValueResponseErrorCode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 9, 2, 1, 0, 0} +} + type RpcHistoryGetVersionsResponseErrorCode int32 const ( @@ -31451,6 +31479,206 @@ func (m *RpcRelationOptionsResponseError) GetDescription() string { return "" } +type RpcRelationListWithValue struct { +} + +func (m *RpcRelationListWithValue) Reset() { *m = RpcRelationListWithValue{} } +func (m *RpcRelationListWithValue) String() string { return proto.CompactTextString(m) } +func (*RpcRelationListWithValue) ProtoMessage() {} +func (*RpcRelationListWithValue) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 9, 2} +} +func (m *RpcRelationListWithValue) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcRelationListWithValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcRelationListWithValue.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcRelationListWithValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcRelationListWithValue.Merge(m, src) +} +func (m *RpcRelationListWithValue) XXX_Size() int { + return m.Size() +} +func (m *RpcRelationListWithValue) XXX_DiscardUnknown() { + xxx_messageInfo_RpcRelationListWithValue.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcRelationListWithValue proto.InternalMessageInfo + +type RpcRelationListWithValueRequest struct { + SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"` + Value *types.Value `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (m *RpcRelationListWithValueRequest) Reset() { *m = RpcRelationListWithValueRequest{} } +func (m *RpcRelationListWithValueRequest) String() string { return proto.CompactTextString(m) } +func (*RpcRelationListWithValueRequest) ProtoMessage() {} +func (*RpcRelationListWithValueRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 9, 2, 0} +} +func (m *RpcRelationListWithValueRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcRelationListWithValueRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcRelationListWithValueRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcRelationListWithValueRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcRelationListWithValueRequest.Merge(m, src) +} +func (m *RpcRelationListWithValueRequest) XXX_Size() int { + return m.Size() +} +func (m *RpcRelationListWithValueRequest) XXX_DiscardUnknown() { + xxx_messageInfo_RpcRelationListWithValueRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcRelationListWithValueRequest proto.InternalMessageInfo + +func (m *RpcRelationListWithValueRequest) GetSpaceId() string { + if m != nil { + return m.SpaceId + } + return "" +} + +func (m *RpcRelationListWithValueRequest) GetValue() *types.Value { + if m != nil { + return m.Value + } + return nil +} + +type RpcRelationListWithValueResponse struct { + Error *RpcRelationListWithValueResponseError `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` + RelationKeys []string `protobuf:"bytes,2,rep,name=relationKeys,proto3" json:"relationKeys,omitempty"` + Counters []int64 `protobuf:"varint,3,rep,packed,name=counters,proto3" json:"counters,omitempty"` +} + +func (m *RpcRelationListWithValueResponse) Reset() { *m = RpcRelationListWithValueResponse{} } +func (m *RpcRelationListWithValueResponse) String() string { return proto.CompactTextString(m) } +func (*RpcRelationListWithValueResponse) ProtoMessage() {} +func (*RpcRelationListWithValueResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 9, 2, 1} +} +func (m *RpcRelationListWithValueResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcRelationListWithValueResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcRelationListWithValueResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcRelationListWithValueResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcRelationListWithValueResponse.Merge(m, src) +} +func (m *RpcRelationListWithValueResponse) XXX_Size() int { + return m.Size() +} +func (m *RpcRelationListWithValueResponse) XXX_DiscardUnknown() { + xxx_messageInfo_RpcRelationListWithValueResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcRelationListWithValueResponse proto.InternalMessageInfo + +func (m *RpcRelationListWithValueResponse) GetError() *RpcRelationListWithValueResponseError { + if m != nil { + return m.Error + } + return nil +} + +func (m *RpcRelationListWithValueResponse) GetRelationKeys() []string { + if m != nil { + return m.RelationKeys + } + return nil +} + +func (m *RpcRelationListWithValueResponse) GetCounters() []int64 { + if m != nil { + return m.Counters + } + return nil +} + +type RpcRelationListWithValueResponseError struct { + Code RpcRelationListWithValueResponseErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=anytype.RpcRelationListWithValueResponseErrorCode" json:"code,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` +} + +func (m *RpcRelationListWithValueResponseError) Reset() { *m = RpcRelationListWithValueResponseError{} } +func (m *RpcRelationListWithValueResponseError) String() string { return proto.CompactTextString(m) } +func (*RpcRelationListWithValueResponseError) ProtoMessage() {} +func (*RpcRelationListWithValueResponseError) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 9, 2, 1, 0} +} +func (m *RpcRelationListWithValueResponseError) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcRelationListWithValueResponseError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcRelationListWithValueResponseError.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcRelationListWithValueResponseError) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcRelationListWithValueResponseError.Merge(m, src) +} +func (m *RpcRelationListWithValueResponseError) XXX_Size() int { + return m.Size() +} +func (m *RpcRelationListWithValueResponseError) XXX_DiscardUnknown() { + xxx_messageInfo_RpcRelationListWithValueResponseError.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcRelationListWithValueResponseError proto.InternalMessageInfo + +func (m *RpcRelationListWithValueResponseError) GetCode() RpcRelationListWithValueResponseErrorCode { + if m != nil { + return m.Code + } + return RpcRelationListWithValueResponseError_NULL +} + +func (m *RpcRelationListWithValueResponseError) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + type RpcHistory struct { } @@ -66915,6 +67143,7 @@ func init() { proto.RegisterEnum("anytype.RpcObjectTypeRelationRemoveResponseErrorCode", RpcObjectTypeRelationRemoveResponseErrorCode_name, RpcObjectTypeRelationRemoveResponseErrorCode_value) proto.RegisterEnum("anytype.RpcRelationListRemoveOptionResponseErrorCode", RpcRelationListRemoveOptionResponseErrorCode_name, RpcRelationListRemoveOptionResponseErrorCode_value) proto.RegisterEnum("anytype.RpcRelationOptionsResponseErrorCode", RpcRelationOptionsResponseErrorCode_name, RpcRelationOptionsResponseErrorCode_value) + proto.RegisterEnum("anytype.RpcRelationListWithValueResponseErrorCode", RpcRelationListWithValueResponseErrorCode_name, RpcRelationListWithValueResponseErrorCode_value) proto.RegisterEnum("anytype.RpcHistoryGetVersionsResponseErrorCode", RpcHistoryGetVersionsResponseErrorCode_name, RpcHistoryGetVersionsResponseErrorCode_value) proto.RegisterEnum("anytype.RpcHistoryShowVersionResponseErrorCode", RpcHistoryShowVersionResponseErrorCode_name, RpcHistoryShowVersionResponseErrorCode_value) proto.RegisterEnum("anytype.RpcHistorySetVersionResponseErrorCode", RpcHistorySetVersionResponseErrorCode_name, RpcHistorySetVersionResponseErrorCode_value) @@ -67540,6 +67769,10 @@ func init() { proto.RegisterType((*RpcRelationOptionsRequest)(nil), "anytype.Rpc.Relation.Options.Request") proto.RegisterType((*RpcRelationOptionsResponse)(nil), "anytype.Rpc.Relation.Options.Response") proto.RegisterType((*RpcRelationOptionsResponseError)(nil), "anytype.Rpc.Relation.Options.Response.Error") + proto.RegisterType((*RpcRelationListWithValue)(nil), "anytype.Rpc.Relation.ListWithValue") + proto.RegisterType((*RpcRelationListWithValueRequest)(nil), "anytype.Rpc.Relation.ListWithValue.Request") + proto.RegisterType((*RpcRelationListWithValueResponse)(nil), "anytype.Rpc.Relation.ListWithValue.Response") + proto.RegisterType((*RpcRelationListWithValueResponseError)(nil), "anytype.Rpc.Relation.ListWithValue.Response.Error") proto.RegisterType((*RpcHistory)(nil), "anytype.Rpc.History") proto.RegisterType((*RpcHistoryVersion)(nil), "anytype.Rpc.History.Version") proto.RegisterType((*RpcHistoryGetVersions)(nil), "anytype.Rpc.History.GetVersions") @@ -68249,1165 +68482,1169 @@ func init() { func init() { proto.RegisterFile("pb/protos/commands.proto", fileDescriptor_8261c968b2e6f45c) } var fileDescriptor_8261c968b2e6f45c = []byte{ - // 18514 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x98, 0x24, 0x49, - 0x59, 0x2f, 0x3a, 0x55, 0x59, 0x55, 0xdd, 0xfd, 0xf6, 0xc7, 0xd4, 0xe4, 0xce, 0xcc, 0xf6, 0x06, - 0xcb, 0xec, 0x32, 0xbb, 0x2c, 0xeb, 0xb2, 0xf4, 0xc2, 0x2e, 0x5f, 0xbb, 0xec, 0xb2, 0x5b, 0x5d, - 0x9d, 0xdd, 0x5d, 0x6c, 0x77, 0x55, 0x9b, 0x55, 0x3d, 0xc3, 0xea, 0xf5, 0xd6, 0xc9, 0xa9, 0x8a, - 0xee, 0xce, 0x9d, 0xea, 0xca, 0x32, 0x2b, 0xbb, 0x67, 0x86, 0xfb, 0x9c, 0x7b, 0x44, 0x04, 0x16, - 0x95, 0x83, 0x88, 0x1c, 0x04, 0x04, 0xe4, 0x53, 0x41, 0x01, 0xf9, 0x16, 0x54, 0x54, 0x3e, 0x04, - 0x11, 0x91, 0x0f, 0x51, 0x40, 0x79, 0x04, 0x41, 0x0e, 0x9e, 0x7b, 0x38, 0x5c, 0x7d, 0x8e, 0x70, - 0x50, 0xb8, 0xde, 0x27, 0x23, 0x22, 0x33, 0x23, 0xaa, 0x2b, 0xb3, 0x22, 0xab, 0x2b, 0xab, 0x17, - 0x3d, 0xff, 0x65, 0x46, 0x46, 0x46, 0xbc, 0xf1, 0xfe, 0xde, 0x37, 0xe2, 0x8d, 0x88, 0x37, 0xde, - 0x80, 0xf9, 0xce, 0x85, 0xdb, 0x3a, 0xb6, 0xe5, 0x58, 0xdd, 0xdb, 0x1a, 0xd6, 0xee, 0xae, 0xd1, - 0x6e, 0x76, 0x17, 0xc8, 0xbb, 0x3a, 0x61, 0xb4, 0xaf, 0x38, 0x57, 0x3a, 0x18, 0xdd, 0xd8, 0xb9, - 0xb8, 0x7d, 0x5b, 0xcb, 0xbc, 0x70, 0x5b, 0xe7, 0xc2, 0x6d, 0xbb, 0x56, 0x13, 0xb7, 0xbc, 0x1f, - 0xc8, 0x0b, 0xcb, 0x8e, 0x6e, 0x0e, 0xcb, 0xd5, 0xb2, 0x1a, 0x46, 0xab, 0xeb, 0x58, 0x36, 0x66, - 0x39, 0x4f, 0x07, 0x55, 0xe2, 0x7d, 0xdc, 0x76, 0xbc, 0x12, 0xae, 0xdd, 0xb6, 0xac, 0xed, 0x16, - 0xa6, 0xdf, 0x2e, 0xec, 0x6d, 0xdd, 0xd6, 0x75, 0xec, 0xbd, 0x86, 0xc3, 0xbe, 0x5e, 0xdf, 0xfb, - 0xb5, 0x89, 0xbb, 0x0d, 0xdb, 0xec, 0x38, 0x96, 0x4d, 0x73, 0x9c, 0xfd, 0xab, 0xcf, 0x4f, 0x80, - 0xa2, 0x77, 0x1a, 0xe8, 0x3b, 0x13, 0xa0, 0x14, 0x3a, 0x1d, 0xf4, 0xd1, 0x34, 0xc0, 0x0a, 0x76, - 0xce, 0x61, 0xbb, 0x6b, 0x5a, 0x6d, 0x74, 0x1c, 0x26, 0x74, 0xfc, 0x93, 0x7b, 0xb8, 0xeb, 0xdc, - 0x95, 0x79, 0xe8, 0x1b, 0x4a, 0x0a, 0xbd, 0x31, 0x0d, 0x93, 0x3a, 0xee, 0x76, 0xac, 0x76, 0x17, - 0xab, 0xf7, 0x41, 0x16, 0xdb, 0xb6, 0x65, 0xcf, 0xa7, 0xae, 0x4f, 0xdd, 0x3c, 0x7d, 0xfb, 0x2d, - 0x0b, 0xac, 0xf9, 0x0b, 0x7a, 0xa7, 0xb1, 0x50, 0xe8, 0x74, 0x16, 0x82, 0x92, 0x16, 0xbc, 0x9f, - 0x16, 0x34, 0xf7, 0x0f, 0x9d, 0xfe, 0xa8, 0xce, 0xc3, 0xc4, 0x3e, 0xcd, 0x30, 0x9f, 0xbe, 0x3e, - 0x75, 0xf3, 0x94, 0xee, 0xbd, 0xba, 0x5f, 0x9a, 0xd8, 0x31, 0xcc, 0x56, 0x77, 0x5e, 0xa1, 0x5f, - 0xd8, 0x2b, 0x7a, 0x5d, 0x0a, 0xb2, 0xa4, 0x10, 0xb5, 0x08, 0x99, 0x86, 0xd5, 0xc4, 0xa4, 0xfa, - 0xb9, 0xdb, 0x6f, 0x93, 0xaf, 0x7e, 0xa1, 0x68, 0x35, 0xb1, 0x4e, 0x7e, 0x56, 0xaf, 0x87, 0x69, - 0x8f, 0x2d, 0x01, 0x19, 0x7c, 0xd2, 0xd9, 0xdb, 0x21, 0xe3, 0xe6, 0x57, 0x27, 0x21, 0x53, 0xde, - 0x5c, 0x5b, 0xcb, 0x1f, 0x53, 0x4f, 0xc0, 0xec, 0x66, 0xf9, 0xfe, 0x72, 0xe5, 0x7c, 0xb9, 0xae, - 0xe9, 0x7a, 0x45, 0xcf, 0xa7, 0xd4, 0x59, 0x98, 0x5a, 0x2c, 0x2c, 0xd5, 0x4b, 0xe5, 0x8d, 0xcd, - 0x5a, 0x3e, 0x8d, 0x5e, 0xad, 0xc0, 0x5c, 0x15, 0x3b, 0x4b, 0x78, 0xdf, 0x6c, 0xe0, 0xaa, 0x63, - 0x38, 0x18, 0xbd, 0x28, 0xe5, 0x33, 0x53, 0xdd, 0x74, 0x2b, 0xf5, 0x3f, 0xb1, 0x06, 0xdc, 0x71, - 0xa0, 0x01, 0x62, 0x09, 0x0b, 0xec, 0xef, 0x05, 0x2e, 0x4d, 0xe7, 0xcb, 0x39, 0xfb, 0x38, 0x98, - 0xe6, 0xbe, 0xa9, 0x73, 0x00, 0x8b, 0x85, 0xe2, 0xfd, 0x2b, 0x7a, 0x65, 0xb3, 0xbc, 0x94, 0x3f, - 0xe6, 0xbe, 0x2f, 0x57, 0x74, 0x8d, 0xbd, 0xa7, 0xd0, 0xf7, 0x52, 0x1c, 0x98, 0x4b, 0x22, 0x98, - 0x0b, 0x83, 0x89, 0xe9, 0x03, 0x28, 0x7a, 0x93, 0x0f, 0xce, 0x8a, 0x00, 0xce, 0x1d, 0xf1, 0x8a, - 0x4b, 0x1e, 0xa0, 0xe7, 0xa6, 0x61, 0xb2, 0xba, 0xb3, 0xe7, 0x34, 0xad, 0x4b, 0x6d, 0x34, 0xe5, - 0x23, 0x83, 0xbe, 0xc5, 0xf3, 0xe4, 0xe9, 0x22, 0x4f, 0x6e, 0x3e, 0xd8, 0x08, 0x56, 0x42, 0x08, - 0x37, 0x7e, 0xd5, 0xe7, 0x46, 0x41, 0xe0, 0xc6, 0xe3, 0x64, 0x0b, 0x4a, 0x9e, 0x0f, 0xbf, 0x70, - 0x07, 0x64, 0xab, 0x1d, 0xa3, 0x81, 0xd1, 0x27, 0x15, 0x98, 0x59, 0xc3, 0xc6, 0x3e, 0x2e, 0x74, - 0x3a, 0xb6, 0xb5, 0x8f, 0x51, 0x31, 0x90, 0xd7, 0x79, 0x98, 0xe8, 0xba, 0x99, 0x4a, 0x4d, 0xd2, - 0x82, 0x29, 0xdd, 0x7b, 0x55, 0xcf, 0x00, 0x98, 0x4d, 0xdc, 0x76, 0x4c, 0xc7, 0xc4, 0xdd, 0xf9, - 0xf4, 0xf5, 0xca, 0xcd, 0x53, 0x3a, 0x97, 0x82, 0xbe, 0x93, 0x96, 0x95, 0x31, 0x42, 0xc5, 0x02, - 0x4f, 0x41, 0x08, 0x57, 0x5f, 0x9f, 0x96, 0x91, 0xb1, 0x81, 0xc5, 0xc5, 0xe3, 0xed, 0xdb, 0x52, - 0xf1, 0x99, 0xeb, 0xe6, 0x28, 0x57, 0xea, 0xd5, 0xcd, 0xe2, 0x6a, 0xbd, 0xba, 0x51, 0x28, 0x6a, - 0x79, 0xac, 0x9e, 0x84, 0x3c, 0x79, 0xac, 0x97, 0xaa, 0xf5, 0x25, 0x6d, 0x4d, 0xab, 0x69, 0x4b, - 0xf9, 0x2d, 0x55, 0x85, 0x39, 0x5d, 0xfb, 0xd1, 0x4d, 0xad, 0x5a, 0xab, 0x2f, 0x17, 0x4a, 0x6b, - 0xda, 0x52, 0x7e, 0xdb, 0xfd, 0x79, 0xad, 0xb4, 0x5e, 0xaa, 0xd5, 0x75, 0xad, 0x50, 0x5c, 0xd5, - 0x96, 0xf2, 0x3b, 0xea, 0xd5, 0x70, 0x55, 0xb9, 0x52, 0x2f, 0x6c, 0x6c, 0xe8, 0x95, 0x73, 0x5a, - 0x9d, 0xfd, 0x51, 0xcd, 0x9b, 0xb4, 0xa2, 0x5a, 0xbd, 0xba, 0x5a, 0xd0, 0xb5, 0xc2, 0xe2, 0x9a, - 0x96, 0x7f, 0x10, 0x3d, 0x47, 0x81, 0xd9, 0x75, 0xe3, 0x22, 0xae, 0xee, 0x18, 0x36, 0x36, 0x2e, - 0xb4, 0x30, 0xba, 0x41, 0x02, 0x4f, 0xf4, 0x49, 0x1e, 0x2f, 0x4d, 0xc4, 0xeb, 0xb6, 0x3e, 0x0c, - 0x16, 0xaa, 0x08, 0x01, 0xec, 0x7f, 0xf9, 0x6a, 0xb0, 0x2a, 0x00, 0xf6, 0xc4, 0x98, 0xe5, 0xc5, - 0x43, 0xec, 0xa7, 0x1f, 0x06, 0x88, 0xa1, 0x2f, 0x2b, 0x30, 0x57, 0x6a, 0xef, 0x9b, 0x0e, 0x5e, - 0xc1, 0x6d, 0x6c, 0xbb, 0xe3, 0x80, 0x14, 0x0c, 0x6f, 0x54, 0x38, 0x18, 0x96, 0x45, 0x18, 0x1e, - 0xdf, 0x87, 0x6d, 0x62, 0x1d, 0x21, 0xa3, 0xed, 0xb5, 0x30, 0x65, 0x92, 0x7c, 0x45, 0xb3, 0xc9, - 0x38, 0x16, 0x24, 0xa8, 0x37, 0xc2, 0x2c, 0x7d, 0x59, 0x36, 0x5b, 0xf8, 0x7e, 0x7c, 0x85, 0x8d, - 0xbb, 0x62, 0x22, 0xfa, 0x79, 0x5f, 0xf9, 0x4a, 0x02, 0x96, 0x4f, 0x8a, 0x4b, 0x54, 0x3c, 0x30, - 0x5f, 0xfa, 0x70, 0x50, 0xbf, 0x03, 0x5a, 0x66, 0xa2, 0x1f, 0xa4, 0x61, 0xba, 0xea, 0x58, 0x1d, - 0x57, 0x64, 0xcd, 0xf6, 0xb6, 0x1c, 0xb8, 0x1f, 0xe7, 0x75, 0xac, 0x28, 0x82, 0xfb, 0xb8, 0x3e, - 0x7c, 0xe4, 0x2a, 0x08, 0xd1, 0xb0, 0xef, 0xf8, 0x1a, 0xb6, 0x2c, 0xa0, 0x72, 0x7b, 0xac, 0xd2, - 0x7e, 0x08, 0xf5, 0xeb, 0xa5, 0x0a, 0xe4, 0x3d, 0x31, 0x73, 0x8a, 0x7b, 0xb6, 0x8d, 0xdb, 0x8e, - 0x1c, 0x08, 0x7f, 0xc5, 0x83, 0xb0, 0x2a, 0x82, 0x70, 0x7b, 0x84, 0x30, 0x7b, 0xb5, 0x24, 0xa8, - 0x63, 0x7f, 0xe0, 0xa3, 0x79, 0xbf, 0x80, 0xe6, 0x53, 0xe2, 0x93, 0x15, 0x0f, 0xd2, 0xd5, 0x21, - 0x10, 0x3d, 0x09, 0x79, 0x77, 0x4c, 0x2a, 0xd6, 0x4a, 0xe7, 0xb4, 0x7a, 0xa9, 0x7c, 0xae, 0x54, - 0xd3, 0xf2, 0x18, 0xbd, 0x44, 0x81, 0x19, 0x4a, 0x9a, 0x8e, 0xf7, 0xad, 0x8b, 0x92, 0xbd, 0xde, - 0x97, 0x63, 0x1a, 0x0b, 0x7c, 0x0d, 0x21, 0x9a, 0xf1, 0xb3, 0x31, 0x8c, 0x85, 0x88, 0xe2, 0x1e, - 0x4e, 0xbd, 0xd5, 0x01, 0x35, 0xd8, 0xee, 0xa3, 0x2d, 0x7d, 0x7b, 0xab, 0x97, 0x66, 0x00, 0x68, - 0x23, 0xcf, 0x99, 0xf8, 0x12, 0x5a, 0x0f, 0x30, 0x11, 0xc4, 0x36, 0x35, 0x50, 0x6c, 0xd3, 0xfd, - 0xc4, 0xf6, 0x7d, 0xfc, 0x98, 0xb5, 0x28, 0xa2, 0x77, 0x6b, 0x28, 0xbb, 0x5d, 0x4a, 0xc2, 0x67, - 0x87, 0x9e, 0xa0, 0xa4, 0x45, 0xab, 0xf3, 0x5a, 0x98, 0x22, 0x8f, 0x65, 0x63, 0x17, 0x33, 0x1d, - 0x0a, 0x12, 0xd4, 0xb3, 0x30, 0x43, 0x33, 0x36, 0xac, 0xb6, 0xdb, 0x9e, 0x0c, 0xc9, 0x20, 0xa4, - 0xb9, 0x20, 0x36, 0x6c, 0x6c, 0x38, 0x96, 0x4d, 0xca, 0xc8, 0x52, 0x10, 0xb9, 0x24, 0xf4, 0x4d, - 0x5f, 0x0b, 0x35, 0x41, 0x72, 0x9e, 0x10, 0xa7, 0x29, 0xf1, 0xe4, 0x66, 0x7f, 0x38, 0xfd, 0xa3, - 0x5a, 0x57, 0x77, 0xd1, 0x5e, 0x26, 0x53, 0x3b, 0xac, 0x9e, 0x06, 0x95, 0xa5, 0xba, 0x79, 0x8b, - 0x95, 0x72, 0x4d, 0x2b, 0xd7, 0xf2, 0x5b, 0x7d, 0x25, 0x6a, 0x1b, 0xbd, 0x3e, 0x03, 0x99, 0x67, - 0x58, 0x66, 0x1b, 0x3d, 0x37, 0x25, 0x88, 0x44, 0x1b, 0x3b, 0x97, 0x2c, 0xfb, 0xa2, 0xaf, 0xa8, - 0x41, 0x42, 0x34, 0x36, 0x81, 0x28, 0x29, 0x03, 0x45, 0x29, 0xd3, 0x4f, 0x94, 0x7e, 0x91, 0x17, - 0xa5, 0xbb, 0x45, 0x51, 0xba, 0xa9, 0x0f, 0xff, 0x5d, 0xe2, 0x43, 0x3a, 0x80, 0x8f, 0xf9, 0x1d, - 0xc0, 0xbd, 0x02, 0x8c, 0x8f, 0x95, 0x2b, 0x26, 0x1e, 0x80, 0x5f, 0x4a, 0x54, 0xf1, 0xfb, 0x41, - 0xbd, 0x1d, 0x02, 0xf5, 0x4e, 0x9f, 0x3e, 0xc1, 0x3c, 0xd8, 0x75, 0x3c, 0x78, 0xb0, 0x9b, 0xb8, - 0xa8, 0x9e, 0x82, 0x13, 0x4b, 0xa5, 0xe5, 0x65, 0x4d, 0xd7, 0xca, 0xb5, 0x7a, 0x59, 0xab, 0x9d, - 0xaf, 0xe8, 0xf7, 0xe7, 0x5b, 0xe8, 0x75, 0x0a, 0x80, 0xcb, 0xa1, 0xa2, 0xd1, 0x6e, 0xe0, 0x96, - 0x5c, 0x8f, 0xfe, 0x3f, 0xd2, 0xf1, 0xfa, 0x84, 0xa0, 0xfc, 0x10, 0x38, 0x5f, 0x95, 0x96, 0xd7, - 0xca, 0xd0, 0xc2, 0xe2, 0x81, 0xfa, 0x96, 0x87, 0x83, 0xed, 0x79, 0x15, 0x1c, 0xf7, 0xca, 0x63, - 0xd9, 0xfb, 0x4f, 0xfb, 0xde, 0x9e, 0x81, 0x39, 0x06, 0x8b, 0x37, 0x8f, 0x7f, 0x28, 0x25, 0x33, - 0x91, 0x47, 0x30, 0xc9, 0xa6, 0xed, 0x5e, 0xf7, 0xee, 0xbf, 0xab, 0x2b, 0x30, 0xdd, 0xc1, 0xf6, - 0xae, 0xd9, 0xed, 0x9a, 0x56, 0x9b, 0x2e, 0xc8, 0xcd, 0xdd, 0xfe, 0x68, 0x9f, 0xe3, 0x64, 0xed, - 0x72, 0x61, 0xc3, 0xb0, 0x1d, 0xb3, 0x61, 0x76, 0x8c, 0xb6, 0xb3, 0x11, 0x64, 0xd6, 0xf9, 0x3f, - 0xd1, 0x8b, 0x63, 0x4e, 0x6b, 0xc4, 0x96, 0x84, 0x88, 0xc4, 0xef, 0xc6, 0x98, 0x92, 0x44, 0x16, - 0x18, 0x4f, 0x2c, 0x3e, 0x9a, 0xa8, 0x58, 0xf4, 0xc1, 0x7b, 0x5b, 0xbd, 0x06, 0x4e, 0x95, 0xca, - 0xc5, 0x8a, 0xae, 0x6b, 0xc5, 0x5a, 0x7d, 0x43, 0xd3, 0xd7, 0x4b, 0xd5, 0x6a, 0xa9, 0x52, 0xae, - 0x1e, 0x46, 0xdb, 0xd1, 0x27, 0x14, 0x5f, 0x62, 0x96, 0x70, 0xa3, 0x65, 0xb6, 0x31, 0xba, 0xf7, - 0x90, 0x02, 0x23, 0xae, 0xfa, 0xc8, 0xe3, 0xcc, 0xea, 0x0f, 0xc1, 0xf9, 0xb5, 0xf1, 0x71, 0xee, - 0x5f, 0xe0, 0xbf, 0x61, 0xf5, 0xff, 0xb2, 0x02, 0x27, 0x38, 0x45, 0xd4, 0xf1, 0xee, 0xc8, 0x56, - 0xf2, 0x7e, 0x9a, 0xd7, 0xdd, 0x92, 0x88, 0x69, 0x3f, 0x6b, 0xfa, 0x00, 0x19, 0x21, 0xb0, 0xbe, - 0xc5, 0x87, 0x75, 0x4d, 0x80, 0xf5, 0xa9, 0x43, 0x94, 0x19, 0x0f, 0xd9, 0xdf, 0x4a, 0x14, 0xd9, - 0x6b, 0xe0, 0xd4, 0x46, 0x41, 0xaf, 0x95, 0x8a, 0xa5, 0x8d, 0x82, 0x3b, 0x8e, 0x72, 0x43, 0x76, - 0x88, 0xb9, 0x2e, 0x82, 0xde, 0x17, 0xdf, 0xdf, 0xcf, 0xc0, 0xb5, 0xfd, 0x3b, 0xda, 0xe2, 0x8e, - 0xd1, 0xde, 0xc6, 0xc8, 0x94, 0x81, 0x7a, 0x09, 0x26, 0x1a, 0x24, 0x3b, 0xc5, 0x99, 0xdf, 0xba, - 0x89, 0xe8, 0xcb, 0x69, 0x0d, 0xba, 0xf7, 0x2b, 0x7a, 0x17, 0x2f, 0x10, 0x35, 0x51, 0x20, 0x9e, - 0x1e, 0x0d, 0xde, 0x01, 0xba, 0x43, 0x64, 0xe3, 0xd3, 0xbe, 0x6c, 0x9c, 0x17, 0x64, 0xa3, 0x78, - 0xb8, 0xe2, 0xe3, 0x89, 0xc9, 0x9f, 0x3c, 0x1c, 0x3a, 0x80, 0x50, 0x69, 0x32, 0xc3, 0x47, 0x85, - 0xbe, 0xdd, 0xfd, 0x6b, 0x14, 0xc8, 0x2d, 0xe1, 0x16, 0x96, 0x5d, 0x89, 0xfc, 0x76, 0x5a, 0x76, - 0x43, 0x84, 0xc2, 0x40, 0xcb, 0x0e, 0x5f, 0x1d, 0x71, 0xcc, 0x5d, 0xdc, 0x75, 0x8c, 0xdd, 0x0e, - 0x61, 0xb5, 0xa2, 0x07, 0x09, 0xe8, 0x67, 0xd2, 0x32, 0xdb, 0x25, 0x11, 0xd5, 0xfc, 0xdb, 0x58, - 0x53, 0xfc, 0xda, 0x1c, 0xe4, 0xce, 0x1b, 0xad, 0x16, 0x76, 0xd0, 0xd7, 0xd3, 0x90, 0x2b, 0xba, - 0x73, 0x52, 0x8c, 0x1e, 0x1b, 0x80, 0x85, 0x60, 0xd2, 0xb6, 0x2c, 0x67, 0xc3, 0x70, 0x76, 0x18, - 0x5a, 0xfe, 0x3b, 0xdb, 0xa6, 0xfd, 0x4d, 0x1e, 0xb4, 0x7b, 0x45, 0xd0, 0x7e, 0x44, 0xe0, 0x26, - 0xad, 0x68, 0x81, 0x56, 0x12, 0x82, 0x1a, 0x82, 0xc9, 0xdd, 0x36, 0xde, 0xb5, 0xda, 0x66, 0xc3, - 0x1b, 0xe9, 0xbd, 0x77, 0xf4, 0x21, 0x7f, 0x96, 0xbc, 0x28, 0x60, 0xb6, 0x20, 0x5d, 0x4b, 0x3c, - 0xd0, 0xaa, 0x43, 0x60, 0x76, 0x1d, 0x3c, 0x82, 0x42, 0x50, 0xaf, 0x55, 0xea, 0x45, 0x5d, 0x2b, - 0xd4, 0xb4, 0xfa, 0x5a, 0xa5, 0x58, 0x58, 0xab, 0xeb, 0xda, 0x46, 0x25, 0x8f, 0xd1, 0x7f, 0x4d, - 0xbb, 0xcc, 0x6d, 0x58, 0xfb, 0xd8, 0x46, 0x2b, 0x52, 0x7c, 0x8e, 0xe2, 0x09, 0xc3, 0xe0, 0x17, - 0xa5, 0xb7, 0xca, 0x19, 0x77, 0x18, 0x05, 0x21, 0x5d, 0xe1, 0x87, 0xa5, 0xb6, 0xbd, 0x23, 0x8b, - 0x7a, 0x18, 0x70, 0xfa, 0x7f, 0xa6, 0x61, 0xa2, 0x68, 0xb5, 0xf7, 0xb1, 0xed, 0xf0, 0x56, 0x26, - 0xcf, 0xcd, 0x94, 0xc8, 0x4d, 0xb7, 0x6b, 0xc2, 0x6d, 0xc7, 0xb6, 0x3a, 0x9e, 0x99, 0xe9, 0xbd, - 0xa2, 0x5f, 0x8b, 0xcb, 0x61, 0x56, 0x73, 0xf8, 0x72, 0x53, 0xff, 0x8a, 0x04, 0xf2, 0x94, 0x1e, - 0x05, 0x78, 0x5d, 0x1c, 0x5c, 0xfa, 0x13, 0x90, 0xfc, 0x2e, 0xef, 0x57, 0x14, 0x98, 0xa5, 0xca, - 0x57, 0xc5, 0x64, 0x5c, 0x44, 0x15, 0x7e, 0xa1, 0xa7, 0x87, 0xf9, 0xab, 0xc7, 0x04, 0xf6, 0xe7, - 0x8c, 0x4e, 0xc7, 0x5f, 0xf4, 0x5b, 0x3d, 0xa6, 0xb3, 0x77, 0x2a, 0xe6, 0x8b, 0x39, 0xc8, 0x18, - 0x7b, 0xce, 0x0e, 0xfa, 0x81, 0xb4, 0xc9, 0x2f, 0x74, 0x06, 0x8c, 0x9e, 0x10, 0x48, 0x4e, 0x42, - 0xd6, 0xb1, 0x2e, 0x62, 0x8f, 0x0f, 0xf4, 0xc5, 0x85, 0xc3, 0xe8, 0x74, 0x6a, 0xe4, 0x03, 0x83, - 0xc3, 0x7b, 0x77, 0x47, 0x18, 0xa3, 0xd1, 0xb0, 0xf6, 0xda, 0x4e, 0xc9, 0x5b, 0xf8, 0x0b, 0x12, - 0xd0, 0x17, 0x52, 0x32, 0x53, 0x08, 0x09, 0x02, 0xe3, 0x41, 0x76, 0x61, 0x08, 0x55, 0x5a, 0x80, - 0x5b, 0x0a, 0x1b, 0x1b, 0xf5, 0x5a, 0xe5, 0x7e, 0xad, 0x1c, 0x0c, 0xf7, 0xf5, 0x52, 0xb9, 0x5e, - 0x5b, 0xd5, 0xea, 0xc5, 0x4d, 0x9d, 0xac, 0xce, 0x14, 0x8a, 0xc5, 0xca, 0x66, 0xb9, 0x96, 0xc7, - 0xe8, 0xad, 0x69, 0x98, 0x29, 0xb6, 0xac, 0xae, 0x8f, 0xf0, 0x75, 0x01, 0xc2, 0x3e, 0x1b, 0x53, - 0x1c, 0x1b, 0xd1, 0xbf, 0xa4, 0x64, 0xb7, 0x7a, 0x3d, 0x86, 0x70, 0xc5, 0x87, 0xf4, 0x52, 0xbf, - 0x26, 0xb5, 0xd5, 0x3b, 0xb8, 0xbc, 0xe4, 0x55, 0xe2, 0x73, 0x77, 0xc1, 0x44, 0x81, 0x0a, 0x06, - 0xfa, 0x9b, 0x14, 0xe4, 0x8a, 0x56, 0x7b, 0xcb, 0xdc, 0x56, 0x6f, 0x82, 0x39, 0xdc, 0x36, 0x2e, - 0xb4, 0xf0, 0x92, 0xe1, 0x18, 0xfb, 0x26, 0xbe, 0x44, 0x1a, 0x30, 0xa9, 0xf7, 0xa4, 0xba, 0x44, - 0xb1, 0x14, 0x7c, 0x61, 0x6f, 0x9b, 0x10, 0x35, 0xa9, 0xf3, 0x49, 0xea, 0x53, 0xe1, 0x6a, 0xfa, - 0xba, 0x61, 0x63, 0x1b, 0xb7, 0xb0, 0xd1, 0xc5, 0xae, 0x31, 0xda, 0xc6, 0x2d, 0x22, 0xb4, 0x93, - 0x7a, 0xd8, 0x67, 0xf5, 0x2c, 0xcc, 0xd0, 0x4f, 0xc4, 0xd4, 0xe9, 0x12, 0x31, 0x9e, 0xd4, 0x85, - 0x34, 0xf5, 0x71, 0x90, 0xc5, 0x97, 0x1d, 0xdb, 0x98, 0x6f, 0x12, 0xbc, 0xae, 0x5e, 0xa0, 0xbe, - 0x5e, 0x0b, 0x9e, 0xaf, 0xd7, 0x42, 0x95, 0x78, 0x82, 0xe9, 0x34, 0x17, 0xfa, 0x95, 0x49, 0xdf, - 0x90, 0xf8, 0xd7, 0x74, 0x20, 0x18, 0x2a, 0x64, 0xda, 0xc6, 0x2e, 0x66, 0x72, 0x41, 0x9e, 0xd5, - 0x5b, 0xe0, 0xb8, 0xb1, 0x6f, 0x38, 0x86, 0xbd, 0x66, 0x35, 0x8c, 0x16, 0x19, 0xfc, 0x3c, 0xcd, - 0xef, 0xfd, 0x40, 0xd6, 0xe1, 0x1d, 0xcb, 0xc6, 0x24, 0x97, 0xb7, 0x0e, 0xef, 0x25, 0xb8, 0xa5, - 0x9b, 0x0d, 0xab, 0x4d, 0xe8, 0x57, 0x74, 0xf2, 0xec, 0x72, 0xa5, 0x69, 0x76, 0xdd, 0x86, 0x90, - 0x52, 0xca, 0x74, 0x41, 0xb9, 0x7a, 0xa5, 0xdd, 0x20, 0x6b, 0xf0, 0x93, 0x7a, 0xd8, 0x67, 0x75, - 0x11, 0xa6, 0xd9, 0xf2, 0xf3, 0xba, 0x2b, 0x57, 0x39, 0x22, 0x57, 0xd7, 0x8b, 0x9e, 0x34, 0x14, - 0xcf, 0x85, 0x72, 0x90, 0x4f, 0xe7, 0x7f, 0x52, 0xef, 0x83, 0x47, 0xb0, 0xd7, 0xe2, 0x5e, 0xd7, - 0xb1, 0x76, 0x29, 0xe8, 0xcb, 0x66, 0x8b, 0xb6, 0x60, 0x82, 0xb4, 0x20, 0x2a, 0x8b, 0x7a, 0x3b, - 0x9c, 0xec, 0xd8, 0x78, 0x0b, 0xdb, 0x0f, 0x18, 0xbb, 0x7b, 0x97, 0x6b, 0xb6, 0xd1, 0xee, 0x76, - 0x2c, 0xdb, 0x99, 0x9f, 0x24, 0xc4, 0xf7, 0xfd, 0xc6, 0x3a, 0xca, 0x49, 0xc8, 0x51, 0xf6, 0xa1, - 0x17, 0x65, 0xa5, 0x9d, 0xe8, 0x58, 0x83, 0x22, 0xcd, 0xb3, 0xc7, 0xc3, 0x04, 0xeb, 0xe1, 0x08, - 0x50, 0xd3, 0xb7, 0x9f, 0xee, 0x99, 0xcd, 0xb1, 0x52, 0x74, 0x2f, 0x9b, 0x7a, 0x07, 0xe4, 0x1a, - 0xa4, 0x59, 0x04, 0xb3, 0xe9, 0xdb, 0x1f, 0xd1, 0xbf, 0x52, 0x92, 0x45, 0x67, 0x59, 0xd1, 0x17, - 0x15, 0x29, 0xbf, 0xbb, 0x28, 0x8a, 0xe3, 0x69, 0xf5, 0x37, 0xd3, 0x43, 0x74, 0x9b, 0xb7, 0xc2, - 0xcd, 0xac, 0x4f, 0x64, 0xf6, 0xc7, 0x52, 0x7d, 0x71, 0xd3, 0x33, 0xc1, 0x5d, 0xab, 0xa4, 0x5a, - 0x2b, 0xe8, 0xee, 0xfc, 0x69, 0xc9, 0x35, 0xdd, 0x6f, 0x81, 0x9b, 0x06, 0xe4, 0xd6, 0x6a, 0xf5, - 0x72, 0x61, 0x5d, 0xcb, 0x6f, 0x89, 0xb6, 0x4d, 0xb5, 0x56, 0xd9, 0xa8, 0xeb, 0x9b, 0xe5, 0x72, - 0xa9, 0xbc, 0x42, 0x0b, 0x73, 0x4d, 0xc2, 0xd3, 0x41, 0x86, 0xf3, 0x7a, 0xa9, 0xa6, 0xd5, 0x8b, - 0x95, 0xf2, 0x72, 0x69, 0x25, 0x6f, 0x0e, 0x32, 0x8c, 0x1e, 0x54, 0xaf, 0x87, 0x6b, 0x05, 0x4a, - 0x4a, 0x95, 0xb2, 0x3b, 0x9f, 0x28, 0x16, 0xca, 0x45, 0xcd, 0x9d, 0x3c, 0x5c, 0x54, 0x11, 0x9c, - 0xa2, 0xc5, 0xd5, 0x97, 0x4b, 0x6b, 0xfc, 0x16, 0xc0, 0xc7, 0x53, 0xea, 0x3c, 0x5c, 0xc5, 0x7f, - 0x2b, 0x95, 0xcf, 0x15, 0xd6, 0x4a, 0x4b, 0xf9, 0x3f, 0x4e, 0xa9, 0x37, 0xc2, 0x75, 0xc2, 0x5f, - 0x74, 0x35, 0xbf, 0x5e, 0x5a, 0xaa, 0xaf, 0x97, 0xaa, 0xeb, 0x85, 0x5a, 0x71, 0x35, 0xff, 0x09, - 0x32, 0x5f, 0xf0, 0x0d, 0x60, 0xce, 0x19, 0xee, 0xa5, 0xfc, 0x98, 0x5e, 0x10, 0x05, 0xf5, 0xb1, - 0x7d, 0x61, 0x8f, 0xb6, 0x61, 0x3f, 0xea, 0x8f, 0x0e, 0x4b, 0x82, 0x08, 0x3d, 0x3e, 0x46, 0x59, - 0xf1, 0x64, 0xa8, 0x36, 0x84, 0x08, 0x5d, 0x0f, 0xd7, 0x96, 0x35, 0x8a, 0x94, 0xae, 0x15, 0x2b, - 0xe7, 0x34, 0xbd, 0x7e, 0xbe, 0xb0, 0xb6, 0xa6, 0xd5, 0xea, 0xcb, 0x25, 0xbd, 0x5a, 0xcb, 0x6f, - 0xa1, 0x7f, 0x4a, 0xfb, 0x73, 0x68, 0x8e, 0x5b, 0x7f, 0x93, 0x8e, 0xab, 0xd6, 0x91, 0x73, 0xe5, - 0x27, 0x41, 0xae, 0xeb, 0x18, 0xce, 0x5e, 0x97, 0x69, 0xf5, 0x23, 0xfb, 0x6b, 0xf5, 0x42, 0x95, - 0x64, 0xd2, 0x59, 0x66, 0xf4, 0xc5, 0x54, 0x1c, 0x35, 0x1d, 0xc1, 0x34, 0xda, 0x1c, 0x82, 0xc5, - 0x67, 0x00, 0x79, 0xd2, 0x5e, 0xaa, 0xd6, 0x0b, 0x6b, 0xba, 0x56, 0x58, 0x7a, 0xc0, 0x9f, 0x3c, - 0x63, 0xf5, 0x14, 0x9c, 0xd8, 0x2c, 0xbb, 0xd3, 0x61, 0xa2, 0x2e, 0x95, 0x72, 0x59, 0x2b, 0xba, - 0x7c, 0xff, 0x19, 0xb2, 0x54, 0xed, 0x5a, 0xd0, 0x84, 0x6e, 0xd7, 0xca, 0xe1, 0xf8, 0xff, 0x0d, - 0x69, 0x8f, 0x8e, 0x40, 0xc2, 0xf8, 0xb2, 0x46, 0x8b, 0xc3, 0x17, 0xa4, 0x9c, 0x38, 0xa4, 0x28, - 0x89, 0x87, 0xc7, 0x7f, 0x18, 0x02, 0x8f, 0x53, 0x70, 0x82, 0xc7, 0x83, 0x38, 0x73, 0x84, 0xc3, - 0xf0, 0xd5, 0x49, 0xc8, 0x55, 0x71, 0x0b, 0x37, 0x1c, 0xf4, 0x76, 0xce, 0x98, 0x98, 0x83, 0xb4, - 0xef, 0x3c, 0x90, 0x36, 0x9b, 0xc2, 0xf4, 0x39, 0xdd, 0x33, 0x7d, 0x8e, 0x30, 0x03, 0x94, 0x58, - 0x66, 0x40, 0x26, 0x01, 0x33, 0x20, 0x3b, 0xbc, 0x19, 0x90, 0x1b, 0x64, 0x06, 0xa0, 0x37, 0xe4, - 0xe2, 0xf6, 0x12, 0x94, 0xd5, 0x47, 0x3b, 0xf8, 0xff, 0x8f, 0x4c, 0x9c, 0x5e, 0xa5, 0x2f, 0xc5, - 0xf1, 0xa4, 0xf8, 0x07, 0x4a, 0x02, 0xcb, 0x0f, 0xea, 0x0d, 0x70, 0x5d, 0xf0, 0x5e, 0xd7, 0x9e, - 0x59, 0xaa, 0xd6, 0xaa, 0x64, 0xc4, 0x2f, 0x56, 0x74, 0x7d, 0x73, 0x83, 0xae, 0xdc, 0x9d, 0x06, - 0x35, 0x28, 0x45, 0xdf, 0x2c, 0xd3, 0xf1, 0x7d, 0x5b, 0x2c, 0x7d, 0xb9, 0x54, 0x5e, 0xaa, 0xfb, - 0x3a, 0x53, 0x5e, 0xae, 0xe4, 0x77, 0xdc, 0x29, 0x1b, 0x57, 0xba, 0x3b, 0x40, 0xb3, 0x1a, 0x0a, - 0xe5, 0xa5, 0xfa, 0x7a, 0x59, 0x5b, 0xaf, 0x94, 0x4b, 0x45, 0x92, 0x5e, 0xd5, 0x6a, 0x79, 0xd3, - 0x1d, 0x68, 0x7a, 0x2c, 0x8a, 0xaa, 0x56, 0xd0, 0x8b, 0xab, 0x9a, 0x4e, 0xab, 0x7c, 0x50, 0xbd, - 0x09, 0xce, 0x16, 0xca, 0x95, 0x9a, 0x9b, 0x52, 0x28, 0x3f, 0x50, 0x7b, 0x60, 0x43, 0xab, 0x6f, - 0xe8, 0x95, 0xa2, 0x56, 0xad, 0xba, 0x7a, 0xca, 0xec, 0x8f, 0x7c, 0x4b, 0x7d, 0x3a, 0xdc, 0xc5, - 0x91, 0xa6, 0xd5, 0xc8, 0x36, 0xd1, 0x7a, 0x85, 0x78, 0x0a, 0x2c, 0x69, 0xf5, 0xd5, 0x42, 0xb5, - 0x5e, 0x2a, 0x17, 0x2b, 0xeb, 0x1b, 0x85, 0x5a, 0xc9, 0x55, 0xe7, 0x0d, 0xbd, 0x52, 0xab, 0xd4, - 0xcf, 0x69, 0x7a, 0xb5, 0x54, 0x29, 0xe7, 0xdb, 0x6e, 0x93, 0x39, 0xfd, 0xf7, 0xfa, 0x61, 0x4b, - 0xbd, 0x16, 0xe6, 0xbd, 0xf4, 0xb5, 0x8a, 0xcb, 0x68, 0xce, 0x22, 0xe9, 0x24, 0x6a, 0x91, 0xfc, - 0x73, 0x1a, 0x32, 0x55, 0xc7, 0xea, 0xa0, 0x1f, 0x09, 0x3a, 0x98, 0x33, 0x00, 0x36, 0xd9, 0xf5, - 0x71, 0x67, 0x61, 0x6c, 0x5e, 0xc6, 0xa5, 0xa0, 0x3f, 0x92, 0x5e, 0xaa, 0x0e, 0xfa, 0x6c, 0xab, - 0x13, 0x62, 0xab, 0x7c, 0x4f, 0xce, 0x77, 0x3f, 0xbc, 0xa0, 0x78, 0xf2, 0xfe, 0xb3, 0xc3, 0x2c, - 0x46, 0x23, 0x38, 0xcd, 0xc1, 0xe6, 0xf2, 0xdf, 0x13, 0x09, 0xac, 0x5e, 0x0d, 0x57, 0xf5, 0x08, - 0x17, 0x91, 0xa9, 0x2d, 0xf5, 0x51, 0xf0, 0x48, 0x4e, 0xbc, 0xb5, 0xf5, 0xca, 0x39, 0xcd, 0x17, - 0xe4, 0xa5, 0x42, 0xad, 0x90, 0xdf, 0x46, 0x9f, 0x53, 0x20, 0xb3, 0x6e, 0xed, 0xf7, 0xee, 0x10, - 0xb4, 0xf1, 0x25, 0x6e, 0x2d, 0xd4, 0x7b, 0x15, 0x7d, 0x95, 0xa5, 0xd8, 0xbe, 0x1e, 0xbe, 0x1b, - 0xf8, 0x85, 0x74, 0x1c, 0xb6, 0xaf, 0x1f, 0x76, 0x0b, 0xf0, 0xef, 0x87, 0x61, 0x7b, 0x08, 0x6b, - 0xb1, 0x7a, 0x16, 0xce, 0x04, 0x1f, 0x4a, 0x4b, 0x5a, 0xb9, 0x56, 0x5a, 0x7e, 0x20, 0x60, 0x6e, - 0x49, 0x97, 0x62, 0xff, 0xa0, 0x6e, 0x2c, 0x7a, 0xa6, 0x31, 0x0f, 0x27, 0x83, 0x6f, 0x2b, 0x5a, - 0xcd, 0xfb, 0xf2, 0x20, 0x7a, 0x6e, 0x16, 0x66, 0x68, 0xb7, 0xbe, 0xd9, 0x69, 0x1a, 0x0e, 0x46, - 0x77, 0x04, 0xe8, 0xde, 0x0c, 0xc7, 0x4b, 0x1b, 0xcb, 0xd5, 0xaa, 0x63, 0xd9, 0xc6, 0x36, 0x2e, - 0x34, 0x9b, 0x36, 0xe3, 0x56, 0x6f, 0x32, 0x7a, 0x8f, 0xf4, 0x3a, 0x9f, 0x38, 0x94, 0xd0, 0x3a, - 0x43, 0x50, 0xff, 0x8a, 0xd4, 0xba, 0x9c, 0x44, 0x81, 0xf1, 0xd0, 0x7f, 0x70, 0xc4, 0x3a, 0x17, - 0x8e, 0xcb, 0xd6, 0xd9, 0xe7, 0xa7, 0x61, 0xaa, 0x66, 0xee, 0xe2, 0x67, 0x59, 0x6d, 0xdc, 0x55, - 0x27, 0x40, 0x59, 0x59, 0xaf, 0xe5, 0x8f, 0xb9, 0x0f, 0xae, 0x51, 0x95, 0x22, 0x0f, 0x9a, 0x5b, - 0x81, 0xfb, 0x50, 0xa8, 0xe5, 0x15, 0xf7, 0x61, 0x5d, 0xab, 0xe5, 0x33, 0xee, 0x43, 0x59, 0xab, - 0xe5, 0xb3, 0xee, 0xc3, 0xc6, 0x5a, 0x2d, 0x9f, 0x73, 0x1f, 0x4a, 0xd5, 0x5a, 0x7e, 0xc2, 0x7d, - 0x58, 0xac, 0xd6, 0xf2, 0x93, 0xee, 0xc3, 0xb9, 0x6a, 0x2d, 0x3f, 0xe5, 0x3e, 0x14, 0x6b, 0xb5, - 0x3c, 0xb8, 0x0f, 0xcf, 0xa8, 0xd6, 0xf2, 0xd3, 0xee, 0x43, 0xa1, 0x58, 0xcb, 0xcf, 0x90, 0x07, - 0xad, 0x96, 0x9f, 0x75, 0x1f, 0xaa, 0xd5, 0x5a, 0x7e, 0x8e, 0x94, 0x5c, 0xad, 0xe5, 0x8f, 0x93, - 0xba, 0x4a, 0xb5, 0x7c, 0xde, 0x7d, 0x58, 0xad, 0xd6, 0xf2, 0x27, 0x48, 0xe6, 0x6a, 0x2d, 0xaf, - 0x92, 0x4a, 0xab, 0xb5, 0xfc, 0x55, 0x24, 0x4f, 0xb5, 0x96, 0x3f, 0x49, 0xaa, 0xa8, 0xd6, 0xf2, - 0xa7, 0x08, 0x19, 0x5a, 0x2d, 0x7f, 0x9a, 0xe4, 0xd1, 0x6b, 0xf9, 0xab, 0xc9, 0xa7, 0x72, 0x2d, - 0x3f, 0x4f, 0x08, 0xd3, 0x6a, 0xf9, 0x6b, 0xc8, 0x83, 0x5e, 0xcb, 0x23, 0xf2, 0xa9, 0x50, 0xcb, - 0x3f, 0x02, 0x3d, 0x12, 0xa6, 0x56, 0xb0, 0x43, 0x41, 0x44, 0x79, 0x50, 0x56, 0xb0, 0xc3, 0x9b, - 0xf1, 0x5f, 0x53, 0xe0, 0x6a, 0x36, 0xf5, 0x5b, 0xb6, 0xad, 0xdd, 0x35, 0xbc, 0x6d, 0x34, 0xae, - 0x68, 0x97, 0x5d, 0x13, 0x0a, 0x55, 0x85, 0xa5, 0xab, 0x4e, 0xd0, 0x19, 0x91, 0xe7, 0x48, 0x8b, - 0xd3, 0x5b, 0x8c, 0x52, 0x82, 0xc5, 0x28, 0x66, 0x91, 0xfd, 0x23, 0x2f, 0xd1, 0xc2, 0xfa, 0x71, - 0xaa, 0x67, 0xfd, 0xd8, 0x55, 0x93, 0x0e, 0xb6, 0xbb, 0x56, 0xdb, 0x68, 0x55, 0xd9, 0x76, 0x29, - 0x5d, 0xf5, 0xea, 0x4d, 0x56, 0x7f, 0xd4, 0xd3, 0x0c, 0x6a, 0x95, 0x3d, 0x2d, 0x6a, 0x86, 0xdb, - 0xdb, 0xcc, 0x10, 0x25, 0xf9, 0x84, 0xaf, 0x24, 0x35, 0x41, 0x49, 0xee, 0x3b, 0x44, 0xd9, 0xf1, - 0xf4, 0xa5, 0x34, 0xdc, 0xd4, 0x22, 0x70, 0x26, 0xf4, 0x96, 0xab, 0x15, 0xf4, 0xb9, 0x34, 0x9c, - 0xd6, 0xda, 0xfd, 0x2c, 0x7c, 0x5e, 0x16, 0xde, 0xca, 0x43, 0xb3, 0x21, 0xb2, 0xf4, 0xae, 0xbe, - 0xcd, 0xee, 0x5f, 0x66, 0x08, 0x47, 0x3f, 0xe5, 0x73, 0xb4, 0x2a, 0x70, 0xf4, 0xde, 0xe1, 0x8b, - 0x8e, 0xc7, 0xd0, 0xf2, 0x48, 0x3b, 0xa0, 0x0c, 0xfa, 0x66, 0x06, 0x1e, 0x49, 0x3d, 0x1e, 0x18, - 0x85, 0x54, 0xcb, 0x0a, 0xed, 0xa6, 0x8e, 0xbb, 0x8e, 0x61, 0x3b, 0xc2, 0x29, 0xd4, 0x9e, 0xa9, - 0x54, 0x2a, 0x81, 0xa9, 0x54, 0x7a, 0xe0, 0x54, 0x0a, 0xbd, 0x9b, 0x37, 0x1f, 0xce, 0x8b, 0x18, - 0x17, 0xfa, 0xf7, 0xff, 0x51, 0x2d, 0x0c, 0x83, 0xda, 0xb7, 0x2b, 0x7e, 0x4c, 0x80, 0x7a, 0xf9, - 0xd0, 0x35, 0xc4, 0x43, 0xfc, 0x8f, 0x46, 0x6b, 0xe7, 0x65, 0xf8, 0x6f, 0xa2, 0x51, 0x92, 0x6f, - 0x26, 0x6a, 0xa0, 0x7f, 0x7a, 0x02, 0xa6, 0x88, 0x2e, 0xac, 0x99, 0xed, 0x8b, 0xe8, 0x75, 0x0a, - 0xcc, 0x94, 0xf1, 0xa5, 0xe2, 0x8e, 0xd1, 0x6a, 0xe1, 0xf6, 0x36, 0xe6, 0xcd, 0xf6, 0x79, 0x98, - 0x30, 0x3a, 0x9d, 0x72, 0xb0, 0xcf, 0xe0, 0xbd, 0xb2, 0xfe, 0xf7, 0x1b, 0x7d, 0x95, 0x3c, 0x15, - 0xa1, 0xe4, 0x7e, 0xbd, 0x0b, 0x7c, 0x9d, 0x21, 0x33, 0xe4, 0xeb, 0x61, 0xba, 0xe1, 0x65, 0xf1, - 0xbd, 0xd5, 0xf9, 0x24, 0xf4, 0x77, 0xb1, 0xba, 0x01, 0xa9, 0xca, 0xe3, 0x09, 0x05, 0x1e, 0xb1, - 0x1d, 0x72, 0x0a, 0x4e, 0xd4, 0x2a, 0x95, 0xfa, 0x7a, 0xa1, 0xfc, 0x40, 0x70, 0x4a, 0x74, 0x0b, - 0xbd, 0x2a, 0x03, 0x73, 0x55, 0xab, 0xb5, 0x8f, 0x03, 0x98, 0x4a, 0x01, 0x4c, 0x3d, 0x7c, 0x4a, - 0x1d, 0xe0, 0x93, 0x7a, 0x1a, 0x72, 0x46, 0xbb, 0x7b, 0x09, 0x7b, 0xb6, 0x21, 0x7b, 0x63, 0x30, - 0xfe, 0x3e, 0xaf, 0xc7, 0xba, 0x08, 0xe3, 0xdd, 0x03, 0x38, 0x29, 0x52, 0x15, 0x02, 0xe4, 0x59, - 0x98, 0xe9, 0xd2, 0xcd, 0xc2, 0x1a, 0xb7, 0x27, 0x2c, 0xa4, 0x11, 0x12, 0xe9, 0x6e, 0xb5, 0xc2, - 0x48, 0x24, 0x6f, 0xe8, 0x75, 0xbe, 0xfa, 0x6f, 0x0a, 0x10, 0x17, 0x0e, 0x43, 0x58, 0x3c, 0x90, - 0x5f, 0x33, 0xea, 0x19, 0xde, 0x3c, 0x9c, 0x64, 0x5a, 0x5b, 0x2f, 0xae, 0x16, 0xd6, 0xd6, 0xb4, - 0xf2, 0x8a, 0x56, 0x2f, 0x2d, 0xd1, 0xad, 0x8a, 0x20, 0xa5, 0x50, 0xab, 0x69, 0xeb, 0x1b, 0xb5, - 0x6a, 0x5d, 0x7b, 0x66, 0x51, 0xd3, 0x96, 0x88, 0x23, 0x12, 0x39, 0x49, 0xe0, 0xb9, 0x8c, 0x15, - 0xca, 0xd5, 0xf3, 0x9a, 0x9e, 0xdf, 0x39, 0x5b, 0x80, 0x69, 0xae, 0x9f, 0x77, 0xa9, 0x5b, 0xc2, - 0x5b, 0xc6, 0x5e, 0x8b, 0xd9, 0x6a, 0xf9, 0x63, 0x2e, 0x75, 0x84, 0x37, 0x95, 0x76, 0xeb, 0x4a, - 0x3e, 0xa5, 0xe6, 0x61, 0x86, 0xef, 0xd2, 0xf3, 0x69, 0xf4, 0xb2, 0x6b, 0x61, 0xea, 0xbc, 0x65, - 0x5f, 0x24, 0xde, 0x63, 0xe8, 0xfd, 0x34, 0x9a, 0x84, 0x77, 0x2e, 0x8f, 0x1b, 0xd8, 0x5f, 0x23, - 0xef, 0x2d, 0xe0, 0x95, 0xb6, 0x30, 0xf0, 0xec, 0xdd, 0xf5, 0x30, 0x7d, 0xc9, 0xcb, 0x1d, 0x68, - 0x3a, 0x97, 0x84, 0x7e, 0x5d, 0x6e, 0xff, 0x7f, 0x70, 0x95, 0xc9, 0xef, 0x4f, 0xbf, 0x3d, 0x0d, - 0xb9, 0x15, 0xec, 0x14, 0x5a, 0x2d, 0x9e, 0x6f, 0x2f, 0x97, 0x3e, 0x4f, 0x21, 0x34, 0xa2, 0xd0, - 0x6a, 0x85, 0x2b, 0x15, 0xc7, 0x20, 0xcf, 0xef, 0x57, 0x48, 0x43, 0x6f, 0x90, 0x3a, 0x09, 0x35, - 0xa0, 0xc2, 0xe4, 0x39, 0xf6, 0x11, 0xc5, 0xdf, 0xe3, 0xfe, 0x35, 0xce, 0xca, 0x79, 0x42, 0x10, - 0x49, 0x24, 0x15, 0xbd, 0x57, 0xee, 0xe5, 0x53, 0xef, 0x87, 0x89, 0xbd, 0x2e, 0x2e, 0x1a, 0x5d, - 0x4c, 0x68, 0xeb, 0x6d, 0x69, 0xe5, 0xc2, 0x83, 0xb8, 0xe1, 0x2c, 0x94, 0x76, 0x5d, 0x83, 0x7a, - 0x93, 0x66, 0xf4, 0x83, 0x73, 0xb0, 0x77, 0xdd, 0x2b, 0xc1, 0x9d, 0x51, 0x34, 0x8c, 0xc6, 0x8e, - 0xb0, 0x47, 0xee, 0x27, 0xa0, 0x17, 0x0d, 0x01, 0x68, 0xe4, 0x6e, 0x70, 0xe8, 0xc1, 0xac, 0xd8, - 0x30, 0x8e, 0x60, 0x0b, 0x77, 0x18, 0x18, 0x3f, 0x9d, 0x86, 0x4c, 0xa5, 0x83, 0xdb, 0x72, 0xee, - 0xa9, 0xaf, 0x93, 0xf7, 0x01, 0xf3, 0x1b, 0xe6, 0x96, 0x1e, 0xc2, 0xbd, 0xdb, 0x20, 0x63, 0xb6, - 0xb7, 0x2c, 0x66, 0x7e, 0x3e, 0x22, 0x64, 0xab, 0xa7, 0xd4, 0xde, 0xb2, 0x74, 0x92, 0x51, 0xd6, - 0xfd, 0x2b, 0xaa, 0xee, 0xe4, 0x59, 0xfa, 0xad, 0x49, 0xc8, 0x51, 0xa1, 0x45, 0x2f, 0x55, 0x40, - 0x29, 0x34, 0x9b, 0x21, 0x47, 0x3c, 0xd2, 0x07, 0x8e, 0x78, 0x58, 0xe4, 0x37, 0x9f, 0xef, 0xfe, - 0xbb, 0x18, 0x28, 0x42, 0xb2, 0x07, 0x67, 0x8a, 0x53, 0x68, 0x36, 0xc3, 0x3d, 0x4d, 0xfd, 0x0a, - 0xd3, 0x62, 0x85, 0xbc, 0x1e, 0x2b, 0x72, 0x7a, 0x1c, 0xbb, 0xbb, 0x0f, 0xa5, 0x2f, 0x79, 0x88, - 0xfe, 0x31, 0x0d, 0x13, 0x6b, 0x66, 0xd7, 0x71, 0xb1, 0x29, 0xc8, 0x60, 0x73, 0x2d, 0x4c, 0x79, - 0xac, 0x71, 0x3b, 0x36, 0xb7, 0xd7, 0x0e, 0x12, 0xd0, 0xeb, 0x79, 0x74, 0x9e, 0x21, 0xa2, 0xf3, - 0xc4, 0xe8, 0xd6, 0x33, 0x2a, 0xc2, 0x3d, 0xb8, 0x83, 0x6a, 0xd3, 0xbd, 0xd5, 0xfe, 0xa6, 0xcf, - 0xf0, 0x75, 0x81, 0xe1, 0x77, 0x0e, 0x53, 0x65, 0xf2, 0x4c, 0xff, 0x7c, 0x1a, 0xc0, 0xad, 0x9b, - 0x1d, 0x93, 0x79, 0x8c, 0x70, 0xf8, 0x35, 0x82, 0xbb, 0xaf, 0xe2, 0xb9, 0xbb, 0x2e, 0x72, 0xf7, - 0x29, 0x83, 0x9b, 0x1a, 0x75, 0x1c, 0x46, 0xcd, 0x83, 0x62, 0xfa, 0xac, 0x75, 0x1f, 0xd1, 0xdb, - 0x7d, 0xa6, 0x6e, 0x08, 0x4c, 0xbd, 0x7b, 0xc8, 0x9a, 0x92, 0xe7, 0xeb, 0x5f, 0xa5, 0x61, 0xa2, - 0x8a, 0x1d, 0xb7, 0x9b, 0x44, 0xe7, 0x64, 0x0e, 0xa4, 0x70, 0xba, 0x9d, 0x96, 0xd4, 0xed, 0xef, - 0xa6, 0x64, 0x83, 0x68, 0x04, 0x9c, 0x61, 0x34, 0x85, 0x2c, 0x11, 0xbc, 0x51, 0x2a, 0x88, 0xc6, - 0xa0, 0xd2, 0x92, 0xe7, 0xee, 0x5b, 0xd3, 0xfe, 0xf6, 0xfb, 0x63, 0x85, 0xe9, 0x1b, 0x6f, 0xfc, - 0xa6, 0x0e, 0x1a, 0xbf, 0xff, 0x94, 0x8a, 0x6f, 0x6a, 0x44, 0xed, 0x3d, 0xc7, 0x36, 0x28, 0x46, - 0xb0, 0x2d, 0x3c, 0x0c, 0xbf, 0x9e, 0xa3, 0x40, 0x8e, 0xad, 0x1f, 0xdf, 0x1b, 0xbd, 0x7e, 0x3c, - 0x78, 0x02, 0xf1, 0xbe, 0x21, 0xcc, 0xb5, 0xa8, 0x45, 0x5d, 0x9f, 0x8c, 0x34, 0x47, 0xc6, 0xad, - 0x90, 0x25, 0x51, 0xfe, 0xd8, 0x38, 0x17, 0xec, 0xe8, 0x7b, 0x45, 0x68, 0xee, 0x57, 0x9d, 0x66, - 0x8a, 0x8d, 0xc2, 0x08, 0xd6, 0x81, 0x87, 0x41, 0xe1, 0x45, 0x1f, 0x4b, 0xf9, 0x46, 0xc8, 0xfb, - 0x32, 0xcc, 0xc4, 0xfb, 0x98, 0x18, 0x6f, 0xa0, 0x61, 0xb5, 0x1d, 0x7c, 0x99, 0x5b, 0x79, 0xf7, - 0x13, 0x22, 0x2d, 0x83, 0x79, 0x98, 0x70, 0x6c, 0x7e, 0x35, 0xde, 0x7b, 0xe5, 0x7b, 0x9c, 0xac, - 0xd8, 0xe3, 0x94, 0xe1, 0xac, 0xd9, 0x6e, 0xb4, 0xf6, 0x9a, 0x58, 0xc7, 0x2d, 0xc3, 0x6d, 0x55, - 0xb7, 0xd0, 0x5d, 0xc2, 0x1d, 0xdc, 0x6e, 0xe2, 0xb6, 0x43, 0xe9, 0xf4, 0x3c, 0x6f, 0x25, 0x72, - 0xa2, 0xaf, 0xf3, 0x82, 0x71, 0x8f, 0x28, 0x18, 0x8f, 0xe9, 0x37, 0x7b, 0x88, 0x30, 0x42, 0xef, - 0x04, 0xa0, 0x6d, 0x3b, 0x67, 0xe2, 0x4b, 0xac, 0x43, 0xbc, 0xa6, 0xc7, 0x14, 0xad, 0xf8, 0x19, - 0x74, 0x2e, 0x33, 0xfa, 0xb2, 0x2f, 0x0c, 0xf7, 0x09, 0xc2, 0x70, 0xab, 0x24, 0x09, 0xf1, 0xe4, - 0xa0, 0x33, 0xc4, 0x8a, 0xc6, 0x2c, 0x4c, 0x05, 0xeb, 0x90, 0x8a, 0x7a, 0x0d, 0x9c, 0xf2, 0x3c, - 0x1b, 0xca, 0x9a, 0xb6, 0x54, 0xad, 0x6f, 0x6e, 0xac, 0xe8, 0x85, 0x25, 0x2d, 0x0f, 0xaa, 0x0a, - 0x73, 0x95, 0xc5, 0x67, 0x68, 0xc5, 0x9a, 0xef, 0x90, 0x90, 0x41, 0x7f, 0x91, 0x86, 0x2c, 0x71, - 0x1b, 0x47, 0x3f, 0x31, 0x22, 0xc9, 0xe9, 0x0a, 0xfb, 0x38, 0xfe, 0xbc, 0x42, 0x3e, 0x0e, 0x20, - 0x63, 0x26, 0xa1, 0xea, 0x50, 0x71, 0x00, 0x23, 0x0a, 0x4a, 0x5e, 0x3d, 0x5d, 0x95, 0xac, 0xee, - 0x58, 0x97, 0xfe, 0x3d, 0xab, 0xa4, 0xdb, 0xfe, 0x23, 0x56, 0xc9, 0x3e, 0x24, 0x8c, 0x5d, 0x25, - 0xfb, 0xe8, 0x5d, 0x84, 0x9a, 0xa2, 0xbf, 0xcb, 0xf8, 0xcb, 0x2e, 0xff, 0xcf, 0xe1, 0x96, 0x5d, - 0x0a, 0x30, 0x6b, 0xb6, 0x1d, 0x6c, 0xb7, 0x8d, 0xd6, 0x72, 0xcb, 0xd8, 0xf6, 0x0e, 0x27, 0xf7, - 0xce, 0xc2, 0x4b, 0x5c, 0x1e, 0x5d, 0xfc, 0x43, 0x3d, 0x03, 0xe0, 0xe0, 0xdd, 0x4e, 0xcb, 0x70, - 0x02, 0xd1, 0xe3, 0x52, 0x78, 0xe9, 0xcb, 0x88, 0xd2, 0xf7, 0x78, 0xb8, 0x8a, 0x82, 0x56, 0xbb, - 0xd2, 0xc1, 0x9b, 0x6d, 0xf3, 0x27, 0xf7, 0x48, 0x78, 0x1a, 0x2a, 0xa3, 0xfd, 0x3e, 0xa1, 0xff, - 0x2e, 0x7d, 0xc8, 0xd2, 0xd3, 0xec, 0x01, 0x87, 0x2c, 0x7d, 0x6d, 0x52, 0x7a, 0xb4, 0xc9, 0x37, - 0x08, 0x32, 0x12, 0x06, 0x01, 0xcf, 0xf9, 0xac, 0xa4, 0x31, 0xfd, 0x5a, 0xa9, 0x53, 0x9c, 0x51, - 0xcd, 0x48, 0xbe, 0x87, 0x7a, 0xbf, 0x02, 0x73, 0xb4, 0xea, 0x45, 0xcb, 0xba, 0xb8, 0x6b, 0xd8, - 0x17, 0xf9, 0xb9, 0xc5, 0x10, 0xe2, 0x16, 0xbe, 0x52, 0xf6, 0x29, 0x1e, 0xd9, 0x15, 0x11, 0xd9, - 0x27, 0x84, 0xb3, 0xc4, 0xa3, 0x6b, 0x3c, 0x8b, 0x1b, 0x6f, 0xf6, 0x31, 0x7b, 0x86, 0x80, 0xd9, - 0x93, 0x63, 0x13, 0x98, 0x3c, 0x76, 0x7f, 0xe2, 0x63, 0xe7, 0x75, 0xd8, 0x89, 0x61, 0xf7, 0x95, - 0xe1, 0xb0, 0xf3, 0xe8, 0x1a, 0x02, 0xbb, 0x3c, 0x28, 0x17, 0xfd, 0x0d, 0x27, 0xf7, 0x91, 0x6f, - 0x50, 0x26, 0x39, 0x34, 0x43, 0x48, 0x1e, 0x0b, 0x9a, 0x27, 0x45, 0x12, 0x2a, 0x9d, 0x44, 0x31, - 0xfd, 0x92, 0xf4, 0x7a, 0x4b, 0x5f, 0x06, 0x51, 0xea, 0xc6, 0xa3, 0x95, 0x72, 0x8b, 0x35, 0xf2, - 0x64, 0x26, 0x8f, 0xe6, 0x3f, 0x64, 0x60, 0xca, 0x3b, 0xea, 0xea, 0xa0, 0xcf, 0x70, 0x43, 0xf8, - 0x69, 0xc8, 0x75, 0xad, 0x3d, 0xbb, 0x81, 0xd9, 0x0a, 0x18, 0x7b, 0x1b, 0x62, 0xb5, 0x66, 0xe0, - 0xb8, 0x7c, 0x60, 0xe8, 0xcf, 0xc4, 0x1e, 0xfa, 0x43, 0x0d, 0x4b, 0xf4, 0x22, 0xe9, 0xc0, 0x84, - 0x02, 0x2e, 0x55, 0xec, 0x3c, 0x1c, 0xc7, 0xea, 0x3f, 0x94, 0x9a, 0xef, 0x0f, 0x68, 0x49, 0x3c, - 0xb1, 0xaa, 0x0c, 0x61, 0x54, 0x3e, 0x02, 0xae, 0xf6, 0x72, 0x30, 0x6b, 0x92, 0x58, 0x8f, 0x9b, - 0xfa, 0x5a, 0x5e, 0x41, 0xcf, 0xc9, 0x40, 0x9e, 0x92, 0x56, 0xf1, 0x0d, 0x2b, 0xf4, 0xf2, 0x23, - 0xb7, 0x1e, 0xc3, 0xa7, 0x83, 0x9f, 0x4d, 0xcb, 0x06, 0x3f, 0x12, 0x18, 0x1f, 0xb4, 0x2e, 0x44, - 0x92, 0x86, 0x50, 0xa5, 0x08, 0xe1, 0x43, 0xbf, 0x91, 0x92, 0x89, 0xa5, 0x24, 0x47, 0x62, 0xf2, - 0x3d, 0xcf, 0xeb, 0x33, 0x5e, 0x54, 0x82, 0x65, 0xdb, 0xda, 0xdd, 0xb4, 0x5b, 0xe8, 0x43, 0x52, - 0xa1, 0xea, 0x42, 0x4c, 0xf5, 0x74, 0xa8, 0xa9, 0xee, 0x0e, 0xd1, 0x7b, 0x76, 0xcb, 0x1b, 0xa2, - 0xf7, 0xec, 0xd6, 0x10, 0x43, 0xb4, 0x7a, 0x13, 0xcc, 0x19, 0xcd, 0xe6, 0x86, 0xb1, 0x8d, 0x8b, - 0xee, 0x1c, 0xb8, 0xed, 0xb0, 0x13, 0xcb, 0x3d, 0xa9, 0x31, 0x76, 0xc6, 0x04, 0x20, 0x18, 0x0f, - 0x1e, 0x4e, 0x3b, 0x63, 0x12, 0xf4, 0x25, 0x2f, 0x25, 0xbf, 0x9b, 0x86, 0x89, 0xe2, 0x8e, 0x41, - 0x76, 0xc6, 0x1e, 0x2d, 0x84, 0x0c, 0x09, 0xdd, 0x9b, 0x7c, 0x81, 0xf4, 0xa6, 0xb0, 0xd7, 0x42, - 0x5a, 0x7e, 0x08, 0xef, 0x4f, 0x43, 0xae, 0xb1, 0x63, 0x04, 0x9c, 0x67, 0x6f, 0x92, 0x7b, 0xbf, - 0x91, 0x55, 0x24, 0xcf, 0xbe, 0x4f, 0xa4, 0x61, 0xd6, 0xb3, 0xfb, 0x97, 0xb1, 0xd3, 0xd8, 0x41, - 0x77, 0xca, 0x2e, 0xf0, 0x30, 0xad, 0x49, 0xfb, 0x5a, 0x83, 0x7e, 0x90, 0x8a, 0x29, 0xda, 0x42, - 0xcd, 0x21, 0xab, 0x63, 0xb1, 0x64, 0x31, 0xaa, 0xc0, 0xe4, 0x99, 0xf9, 0xe5, 0x34, 0x40, 0xcd, - 0xf2, 0xe7, 0x9f, 0x87, 0xe0, 0xe4, 0x4b, 0xa4, 0x63, 0xc0, 0xb3, 0x86, 0x07, 0xd5, 0xc6, 0xef, - 0x21, 0x24, 0xb7, 0xb6, 0x06, 0xd5, 0x34, 0x16, 0x5d, 0x9f, 0x5a, 0xda, 0xeb, 0xb4, 0xcc, 0x86, - 0xe1, 0xf4, 0xee, 0xc7, 0x86, 0xb3, 0x97, 0x5c, 0xe6, 0x12, 0xcb, 0xc0, 0xf3, 0xeb, 0x08, 0xe1, - 0x25, 0x3d, 0xca, 0x9a, 0xf6, 0x8e, 0xb2, 0x4a, 0xee, 0xb1, 0x0c, 0x28, 0x7c, 0x0c, 0xe2, 0xa9, - 0xc0, 0xf1, 0x4a, 0x07, 0xb7, 0x17, 0x6d, 0x6c, 0x34, 0x1b, 0xf6, 0xde, 0xee, 0x85, 0x2e, 0xef, - 0x4c, 0x10, 0x2d, 0xa3, 0xdc, 0x92, 0x6d, 0x5a, 0x58, 0xb2, 0x45, 0xcf, 0x53, 0x64, 0x0f, 0x56, - 0x73, 0x1b, 0x0b, 0x1c, 0x0d, 0x43, 0x0c, 0x69, 0xb1, 0xb6, 0xc0, 0x7a, 0x56, 0x67, 0x33, 0x71, - 0x56, 0x67, 0xdf, 0x22, 0x75, 0x4c, 0x5b, 0xaa, 0x5d, 0x63, 0xd9, 0xc9, 0x9c, 0xab, 0x62, 0x27, - 0x04, 0xde, 0x1b, 0x61, 0xf6, 0x42, 0xf0, 0xc5, 0x87, 0x58, 0x4c, 0xec, 0xe3, 0x5f, 0xf0, 0xd6, - 0xb8, 0x2b, 0x26, 0x22, 0x09, 0x21, 0xe8, 0xfa, 0x08, 0xa6, 0x65, 0x36, 0x31, 0x63, 0x2d, 0x7f, - 0x44, 0xd6, 0x3f, 0x06, 0x3f, 0xc3, 0x34, 0x4c, 0x93, 0x2b, 0x6a, 0x16, 0xaf, 0x10, 0xdf, 0x77, - 0x49, 0xa3, 0xe4, 0x85, 0x3c, 0x9b, 0x55, 0xc8, 0xb4, 0xcc, 0xf6, 0x45, 0x6f, 0xf7, 0xd9, 0x7d, - 0x0e, 0x2e, 0x3c, 0x48, 0xf7, 0xb9, 0xf0, 0xc0, 0xdf, 0x1f, 0xf0, 0xeb, 0x3d, 0xd4, 0x0d, 0x5c, - 0x03, 0x8b, 0x4b, 0x9e, 0x8d, 0x7f, 0x9a, 0x81, 0x5c, 0x15, 0x1b, 0x76, 0x63, 0x07, 0xbd, 0x8a, - 0x8b, 0x22, 0xb0, 0x0c, 0x13, 0x5b, 0x66, 0xcb, 0xc1, 0x36, 0xf5, 0xbb, 0xe1, 0x3b, 0x70, 0xaa, - 0xc8, 0x8b, 0x2d, 0xab, 0x71, 0x71, 0x81, 0x19, 0xdb, 0x0b, 0x5e, 0x40, 0xa6, 0x85, 0x65, 0xf2, - 0x93, 0xee, 0xfd, 0xec, 0x9a, 0x7d, 0x5d, 0xcb, 0x76, 0xc2, 0x22, 0x9c, 0x86, 0x94, 0x52, 0xb5, - 0x6c, 0x47, 0xa7, 0x3f, 0xba, 0x60, 0x6e, 0xed, 0xb5, 0x5a, 0x35, 0x7c, 0xd9, 0xf1, 0x26, 0x5a, - 0xde, 0xbb, 0x6b, 0x12, 0x5a, 0x5b, 0x5b, 0x5d, 0x4c, 0xa7, 0xf9, 0x59, 0x9d, 0xbd, 0xa9, 0x27, - 0x21, 0xdb, 0x32, 0x77, 0x4d, 0x3a, 0x35, 0xc8, 0xea, 0xf4, 0x45, 0xbd, 0x05, 0xf2, 0xc1, 0xac, - 0x84, 0x12, 0x3a, 0x9f, 0x23, 0x0a, 0x78, 0x20, 0xdd, 0x95, 0x8c, 0x8b, 0xf8, 0x4a, 0x77, 0x7e, - 0x82, 0x7c, 0x27, 0xcf, 0xa2, 0x93, 0xa3, 0xcc, 0x4e, 0x03, 0xe5, 0x6b, 0xf8, 0x9c, 0xd3, 0xc6, - 0x0d, 0xcb, 0x6e, 0x7a, 0xbc, 0x09, 0x9f, 0x2e, 0xb0, 0x7c, 0xf1, 0xf6, 0x07, 0xfa, 0x56, 0x9e, - 0xbc, 0x3c, 0xbd, 0x22, 0xe7, 0x76, 0x8e, 0x6e, 0xd5, 0xe7, 0x4d, 0x67, 0x67, 0x1d, 0x3b, 0x06, - 0xfa, 0x53, 0xe5, 0x7f, 0xcb, 0x55, 0x84, 0x5c, 0xd1, 0x03, 0xf5, 0xce, 0x9e, 0xdd, 0x76, 0xb9, - 0xc5, 0x42, 0x58, 0x71, 0x29, 0xea, 0xdd, 0x70, 0x4d, 0xf0, 0xe6, 0x2d, 0x53, 0x2e, 0xb1, 0xa9, - 0xe6, 0x14, 0xc9, 0x1e, 0x9e, 0x41, 0xdd, 0x80, 0x1b, 0xe8, 0xc7, 0xd5, 0xda, 0xfa, 0xda, 0xaa, - 0xb9, 0xbd, 0xd3, 0x32, 0xb7, 0x77, 0x9c, 0x6e, 0xa9, 0xdd, 0x75, 0xb0, 0xd1, 0xac, 0x6c, 0xe9, - 0x34, 0x02, 0x31, 0x90, 0x72, 0x64, 0xb2, 0x8a, 0xde, 0x37, 0x72, 0x23, 0x15, 0x2f, 0x0f, 0x21, - 0xfa, 0xf0, 0x64, 0x57, 0x1f, 0xba, 0x7b, 0x2d, 0x1f, 0xd3, 0x6b, 0x7b, 0x30, 0x0d, 0x04, 0x7a, - 0xaf, 0x45, 0x94, 0x82, 0x64, 0x8e, 0x3b, 0x66, 0x45, 0x50, 0x92, 0xbc, 0x72, 0xfc, 0x7f, 0x39, - 0xc8, 0xae, 0xd8, 0x46, 0x67, 0x07, 0x3d, 0x27, 0x81, 0xbe, 0xd6, 0x97, 0xce, 0xf4, 0x20, 0xe9, - 0x54, 0x06, 0x48, 0x67, 0x86, 0x93, 0xce, 0x70, 0x4f, 0x81, 0xb3, 0x30, 0xd3, 0xb0, 0x5a, 0x2d, - 0xdc, 0x70, 0xf9, 0x51, 0x6a, 0x92, 0xa8, 0x2b, 0x53, 0xba, 0x90, 0x46, 0x42, 0xd3, 0x61, 0xa7, - 0x4a, 0xd7, 0xaf, 0xa9, 0xd0, 0x07, 0x09, 0xe8, 0xe5, 0x69, 0xc8, 0x68, 0xcd, 0x6d, 0x2c, 0xac, - 0x71, 0xa7, 0xb8, 0x35, 0xee, 0xd3, 0x90, 0x73, 0x0c, 0x7b, 0x1b, 0x3b, 0xde, 0x9c, 0x9f, 0xbe, - 0xf9, 0x11, 0xf3, 0x14, 0x2e, 0x62, 0xde, 0x53, 0x20, 0xe3, 0xf2, 0x8c, 0xc5, 0xa2, 0xb9, 0xa1, - 0x1f, 0xfc, 0x84, 0xf7, 0x0b, 0x6e, 0x8d, 0x0b, 0x6e, 0xab, 0x75, 0xf2, 0x43, 0x2f, 0xd6, 0xd9, - 0x03, 0x58, 0x93, 0xcb, 0x54, 0x1a, 0x56, 0xbb, 0xb4, 0x6b, 0x6c, 0x63, 0xd6, 0xcc, 0x20, 0xc1, - 0xfb, 0xaa, 0xed, 0x5a, 0x0f, 0x9a, 0x2c, 0x78, 0x5d, 0x90, 0xe0, 0x36, 0x61, 0xc7, 0x6c, 0x36, - 0x71, 0x9b, 0x69, 0x36, 0x7b, 0x3b, 0x7b, 0x06, 0x32, 0x2e, 0x0d, 0xae, 0xfc, 0xb8, 0x03, 0x7f, - 0xfe, 0x98, 0x3a, 0xe3, 0xaa, 0x15, 0x55, 0xde, 0x7c, 0x4a, 0x5c, 0xeb, 0x94, 0x71, 0x7d, 0xa1, - 0x8d, 0xeb, 0xaf, 0x5c, 0x8f, 0x83, 0x6c, 0xdb, 0x6a, 0xe2, 0x81, 0x43, 0x0d, 0xcd, 0xa5, 0x3e, - 0x11, 0xb2, 0xb8, 0xe9, 0xf6, 0x0a, 0x0a, 0xc9, 0x7e, 0x26, 0x9a, 0x97, 0x3a, 0xcd, 0x1c, 0xcf, - 0xbf, 0xa6, 0x1f, 0xb5, 0xc9, 0x2b, 0xe0, 0xaf, 0x4c, 0xc0, 0x71, 0xda, 0x07, 0x54, 0xf7, 0x2e, - 0xb8, 0x45, 0x5d, 0xc0, 0xe8, 0x3d, 0x8a, 0x10, 0xa2, 0xb3, 0xbb, 0x77, 0xc1, 0x37, 0x1b, 0xe9, - 0x0b, 0xaf, 0xa0, 0xe9, 0x91, 0x0c, 0x5a, 0xca, 0xb0, 0x83, 0x96, 0x30, 0x00, 0x29, 0x9e, 0x8a, - 0x07, 0xc3, 0x55, 0x8e, 0x24, 0x7b, 0xc3, 0x55, 0xbf, 0xc1, 0x66, 0x1e, 0x26, 0x8c, 0x2d, 0x07, - 0xdb, 0xa5, 0x26, 0x91, 0xc7, 0x29, 0xdd, 0x7b, 0x75, 0x07, 0xc4, 0x0b, 0x78, 0xcb, 0xb2, 0x5d, - 0x4d, 0x9f, 0xa2, 0x03, 0xa2, 0xf7, 0xce, 0xe9, 0x27, 0x08, 0x7b, 0x50, 0x37, 0xc3, 0x71, 0x73, - 0xbb, 0x6d, 0xd9, 0xd8, 0x77, 0x6c, 0x9c, 0x9f, 0xa1, 0x27, 0xf1, 0x7b, 0x92, 0xd5, 0x5b, 0xe1, - 0x44, 0xdb, 0x5a, 0xc2, 0x1d, 0xc6, 0x77, 0x8a, 0xea, 0x2c, 0xd1, 0x88, 0x83, 0x1f, 0x0e, 0x74, - 0x2d, 0x73, 0x07, 0xbb, 0x16, 0xf4, 0xe9, 0xb8, 0xf3, 0xe1, 0x1e, 0xe0, 0x47, 0x66, 0x97, 0xa9, - 0x4f, 0x83, 0x99, 0x26, 0x73, 0x7b, 0x6a, 0x98, 0xbe, 0xd6, 0x84, 0xfe, 0x27, 0x64, 0x0e, 0x44, - 0x2e, 0xc3, 0x8b, 0xdc, 0x0a, 0x4c, 0x92, 0x43, 0x2e, 0xae, 0xcc, 0x65, 0x7b, 0x22, 0xfd, 0x91, - 0x29, 0x9b, 0xdf, 0x28, 0x8e, 0x6d, 0x0b, 0x45, 0xf6, 0x8b, 0xee, 0xff, 0x1c, 0x6f, 0x66, 0x1d, - 0xcd, 0xa1, 0xe4, 0xd5, 0xf3, 0xb3, 0x19, 0x38, 0xbe, 0x62, 0x5b, 0x7b, 0x9d, 0x6e, 0xa0, 0x9e, - 0x7f, 0xd3, 0x7f, 0x33, 0x22, 0x27, 0x8e, 0x45, 0xfd, 0x15, 0xf7, 0x7a, 0x98, 0xb6, 0x59, 0x8f, - 0x1a, 0x6c, 0x4d, 0xf0, 0x49, 0xbc, 0x6a, 0x2b, 0x87, 0x51, 0xed, 0x40, 0x41, 0x32, 0x82, 0x82, - 0xf4, 0x0a, 0x72, 0xb6, 0x8f, 0x20, 0xff, 0x75, 0x3a, 0xa6, 0x20, 0xf7, 0xb0, 0x28, 0x44, 0x90, - 0x8b, 0x90, 0xdb, 0x26, 0x19, 0x99, 0x1c, 0x3f, 0x56, 0xae, 0x65, 0xa4, 0x70, 0x9d, 0xfd, 0x1a, - 0xf0, 0x55, 0xe1, 0xf8, 0x1a, 0x4f, 0xa8, 0xa2, 0xa9, 0x4d, 0x5e, 0xa8, 0xde, 0x99, 0x81, 0x19, - 0xbf, 0x76, 0x72, 0x6e, 0x24, 0x35, 0xa8, 0xc3, 0x3f, 0xb0, 0x3a, 0xe3, 0x77, 0xa5, 0x0a, 0xd7, - 0x95, 0xf6, 0xe9, 0xfc, 0xa6, 0x63, 0x74, 0x7e, 0x33, 0x21, 0x9d, 0x1f, 0x7a, 0xb6, 0x22, 0x1b, - 0x11, 0x5a, 0xec, 0x03, 0x48, 0xeb, 0x1e, 0xce, 0xbd, 0x9a, 0x64, 0x5c, 0xea, 0xc1, 0xad, 0x4a, - 0x5e, 0x68, 0x3e, 0x98, 0x86, 0x13, 0xb4, 0x37, 0xdc, 0x6c, 0x77, 0xfd, 0xbe, 0xe8, 0x51, 0xa2, - 0x57, 0x86, 0xdb, 0xa6, 0xae, 0xef, 0x95, 0x41, 0xde, 0xc4, 0x45, 0xf0, 0xc8, 0x23, 0x5f, 0x42, - 0x9f, 0xcb, 0xd5, 0x12, 0xb2, 0xa2, 0x24, 0x77, 0xa8, 0x4b, 0xb2, 0xd0, 0xe4, 0x19, 0xf8, 0x4b, - 0x0a, 0x4c, 0x55, 0xb1, 0xb3, 0x66, 0x5c, 0xb1, 0xf6, 0x1c, 0x64, 0xc8, 0x2e, 0x7f, 0x3f, 0x15, - 0x72, 0x2d, 0xf2, 0x0b, 0xbb, 0xde, 0xec, 0xfa, 0xbe, 0xeb, 0xc7, 0x64, 0x9f, 0x9c, 0x16, 0xad, - 0xb3, 0xfc, 0xe2, 0x59, 0x3b, 0x99, 0xdd, 0x07, 0x9f, 0xba, 0x91, 0x2c, 0x9d, 0xc6, 0xda, 0x9b, - 0x08, 0xab, 0x3a, 0x79, 0x58, 0x9e, 0xa7, 0xc0, 0x6c, 0x15, 0x3b, 0xa5, 0xee, 0xb2, 0xb1, 0x6f, - 0xd9, 0xa6, 0x83, 0xf9, 0x9b, 0x36, 0xa2, 0xa1, 0x39, 0x03, 0x60, 0xfa, 0xbf, 0xb1, 0x50, 0xeb, - 0x5c, 0x0a, 0xfa, 0x8d, 0xb8, 0x1b, 0xee, 0x02, 0x1d, 0x23, 0x01, 0x21, 0xd6, 0x1e, 0x66, 0x54, - 0xf5, 0xc9, 0x03, 0xf1, 0x85, 0x34, 0x03, 0xa2, 0x60, 0x37, 0x76, 0xcc, 0x7d, 0xdc, 0x8c, 0x09, - 0x84, 0xf7, 0x5b, 0x00, 0x84, 0x5f, 0x50, 0xec, 0xed, 0x61, 0x81, 0x8e, 0x51, 0x6c, 0x0f, 0x47, - 0x15, 0x38, 0x96, 0x43, 0xbc, 0x6e, 0xd7, 0xc3, 0xd6, 0x18, 0xee, 0x95, 0x65, 0x6b, 0x60, 0xc2, - 0xa5, 0x79, 0x13, 0x6e, 0xa8, 0x8e, 0x85, 0xd6, 0x3d, 0x48, 0xa6, 0x33, 0x49, 0x74, 0x2c, 0x7d, - 0xab, 0x4e, 0x9e, 0xe9, 0xef, 0x55, 0xe0, 0x94, 0x6f, 0xf0, 0x54, 0xb1, 0xb3, 0x64, 0x74, 0x77, - 0x2e, 0x58, 0x86, 0xdd, 0xe4, 0xaf, 0xbd, 0x1b, 0xfa, 0x24, 0x0b, 0xfa, 0x4b, 0x1e, 0x84, 0xb2, - 0x08, 0x42, 0x5f, 0xb7, 0xaa, 0xbe, 0xb4, 0x8c, 0xa2, 0x93, 0x89, 0xf4, 0xfc, 0xfa, 0x2d, 0x1f, - 0xac, 0x1f, 0x15, 0xc0, 0xba, 0x67, 0x58, 0x12, 0x93, 0x07, 0xee, 0x97, 0xe9, 0x88, 0xc0, 0x79, - 0x00, 0x3e, 0x20, 0x0b, 0x58, 0x88, 0x07, 0x98, 0x12, 0x7e, 0x58, 0x63, 0x98, 0x31, 0x62, 0xa0, - 0xf7, 0x5e, 0xb2, 0x63, 0xc4, 0x11, 0x7a, 0xe6, 0xbd, 0x53, 0x81, 0x3c, 0x39, 0xde, 0xcc, 0x79, - 0x47, 0xa2, 0x07, 0x65, 0xd1, 0x39, 0xe0, 0x89, 0x39, 0x11, 0xd7, 0x13, 0x13, 0xbd, 0x23, 0xae, - 0xbf, 0x65, 0x2f, 0xb5, 0x23, 0x41, 0x2c, 0x96, 0x3b, 0xe5, 0x00, 0x0a, 0x92, 0x07, 0xed, 0x3f, - 0x2b, 0x00, 0xae, 0x42, 0x33, 0x17, 0xbf, 0x67, 0xca, 0xc2, 0x75, 0x1b, 0xef, 0x83, 0xea, 0x02, - 0x75, 0xaa, 0x07, 0x28, 0x5a, 0x62, 0xe0, 0x3c, 0xf8, 0xc6, 0xb8, 0xbe, 0x4b, 0x01, 0x55, 0x23, - 0x81, 0x25, 0x96, 0x37, 0x53, 0x68, 0xdd, 0xc9, 0x03, 0xf2, 0xdb, 0x69, 0xc8, 0xd6, 0xac, 0x2a, - 0x76, 0x0e, 0x6f, 0x0a, 0xc4, 0x3e, 0x8e, 0x4a, 0xea, 0x1d, 0xc5, 0x71, 0xd4, 0x7e, 0x05, 0x25, - 0xcf, 0xba, 0xf7, 0xa4, 0x61, 0xa6, 0x66, 0x15, 0xfd, 0xc5, 0x2a, 0x79, 0x5f, 0x30, 0xf9, 0x5b, - 0xad, 0xfc, 0x06, 0x06, 0xd5, 0x1c, 0xea, 0x56, 0xab, 0xc1, 0xe5, 0x25, 0xcf, 0xb7, 0x3b, 0xe1, - 0xf8, 0x66, 0xbb, 0x69, 0xe9, 0xb8, 0x69, 0xb1, 0x25, 0x59, 0x55, 0x85, 0xcc, 0x5e, 0xbb, 0x69, - 0x11, 0x92, 0xb3, 0x3a, 0x79, 0x76, 0xd3, 0x6c, 0xdc, 0xb4, 0xd8, 0x7e, 0x1d, 0x79, 0x46, 0x5f, - 0x57, 0x20, 0xe3, 0xfe, 0x2b, 0xcf, 0xea, 0x77, 0x2a, 0x31, 0x0f, 0xd8, 0xba, 0xc5, 0x8f, 0xc4, - 0x12, 0xba, 0x97, 0x5b, 0xa4, 0xa6, 0x1e, 0x62, 0x37, 0x84, 0xd5, 0xc7, 0xb1, 0x22, 0x58, 0x9c, - 0x56, 0xe7, 0x61, 0xe2, 0x42, 0xcb, 0x6a, 0x5c, 0x0c, 0xce, 0x81, 0xb2, 0x57, 0xf5, 0x16, 0xc8, - 0xda, 0x46, 0x7b, 0x1b, 0xb3, 0xc5, 0xef, 0x93, 0x3d, 0x7d, 0x21, 0xd9, 0x89, 0xd6, 0x69, 0x16, - 0xf4, 0x8e, 0x38, 0x47, 0x7b, 0xfb, 0x34, 0x3e, 0x9e, 0x3c, 0x2c, 0x0d, 0x71, 0x0a, 0x23, 0x0f, - 0x33, 0xc5, 0x02, 0xbd, 0x3f, 0x6e, 0xbd, 0x72, 0x4e, 0xcb, 0x2b, 0x04, 0x66, 0x97, 0x27, 0x09, - 0xc2, 0xec, 0x16, 0xff, 0xef, 0x16, 0xe6, 0x3e, 0x8d, 0x3f, 0x0a, 0x98, 0x3f, 0x91, 0x86, 0xd9, - 0x35, 0xb3, 0xeb, 0x84, 0x79, 0xd3, 0x46, 0x44, 0x37, 0x7a, 0x51, 0x5c, 0x53, 0x59, 0xa8, 0x47, - 0x3a, 0xac, 0x51, 0x2c, 0x73, 0x38, 0xaa, 0x8a, 0xf1, 0xb8, 0x7d, 0x13, 0x0a, 0xe8, 0x9d, 0x4f, - 0xd2, 0x9c, 0x8c, 0x6d, 0x28, 0x05, 0x95, 0x8c, 0xdf, 0x50, 0x0a, 0xad, 0x3b, 0x79, 0xfe, 0x7e, - 0x3d, 0x0d, 0x27, 0xdc, 0xea, 0xa3, 0x96, 0xa5, 0xc2, 0xd9, 0x3c, 0x70, 0x59, 0x2a, 0xf6, 0xca, - 0xf8, 0x01, 0x5a, 0x46, 0xb1, 0x32, 0x3e, 0xa8, 0xd0, 0x31, 0xb3, 0x39, 0x64, 0x19, 0x76, 0x10, - 0x9b, 0x23, 0x96, 0x61, 0x87, 0x67, 0x73, 0xf4, 0x52, 0xec, 0x90, 0x6c, 0x3e, 0xb2, 0x05, 0xd6, - 0x37, 0x28, 0x3e, 0x9b, 0x43, 0xd7, 0x36, 0x22, 0xd8, 0x1c, 0xfb, 0x74, 0x1b, 0x7a, 0xd7, 0x90, - 0x8c, 0x1f, 0xf1, 0xfa, 0xc6, 0x30, 0x30, 0x1d, 0xe1, 0x1a, 0xc7, 0x2b, 0x14, 0x98, 0x63, 0x54, - 0xf4, 0x9f, 0x32, 0x47, 0x60, 0x14, 0x7b, 0xca, 0x1c, 0xdb, 0xc7, 0x5e, 0xa4, 0x6c, 0xfc, 0x3e, - 0xf6, 0x91, 0xf5, 0x27, 0x0f, 0xce, 0x37, 0x32, 0x70, 0xda, 0x25, 0x61, 0xdd, 0x6a, 0x9a, 0x5b, - 0x57, 0x28, 0x15, 0xe7, 0x8c, 0xd6, 0x1e, 0xee, 0xa2, 0xf7, 0xa7, 0x65, 0x51, 0xfa, 0x3f, 0x00, - 0xac, 0x0e, 0xb6, 0x69, 0x80, 0x20, 0x06, 0xd4, 0xdd, 0x61, 0x8d, 0x3d, 0x58, 0x93, 0x1f, 0xd2, - 0xb7, 0xe2, 0x15, 0xa2, 0x73, 0xe5, 0xb9, 0x56, 0xe1, 0x94, 0xff, 0xa5, 0xd7, 0xe1, 0x23, 0x75, - 0xd0, 0xe1, 0xe3, 0x66, 0x50, 0x8c, 0x66, 0xd3, 0x87, 0xaa, 0x77, 0x33, 0x9b, 0xd4, 0xa9, 0xbb, - 0x59, 0xdc, 0x9c, 0x5d, 0x1c, 0x1c, 0x7d, 0x09, 0xc9, 0xd9, 0xc5, 0x8e, 0xba, 0x00, 0x39, 0x7a, - 0xff, 0x95, 0xbf, 0xa2, 0xdf, 0x3f, 0x33, 0xcb, 0x25, 0x9a, 0x76, 0x15, 0x51, 0x0c, 0xef, 0x8c, - 0xc5, 0x99, 0x7e, 0xfd, 0x74, 0x60, 0x27, 0xeb, 0x82, 0x80, 0x3d, 0x7d, 0xe8, 0x92, 0xc7, 0xb3, - 0x1b, 0x56, 0xe8, 0x74, 0x5a, 0x57, 0x6a, 0x2c, 0x18, 0x41, 0xac, 0xdd, 0x30, 0x2e, 0xa6, 0x41, - 0xba, 0x37, 0xa6, 0x41, 0xfc, 0xdd, 0x30, 0x81, 0x8e, 0x51, 0xec, 0x86, 0x45, 0x15, 0x38, 0x86, - 0xf5, 0xc8, 0x2c, 0xb5, 0x9a, 0x59, 0xec, 0xc5, 0x37, 0xa7, 0xfb, 0xba, 0x53, 0x81, 0xe8, 0x4e, - 0xd5, 0x2f, 0x2c, 0x63, 0x64, 0xcc, 0x59, 0xf5, 0x89, 0x90, 0xdb, 0xb2, 0xec, 0x5d, 0xc3, 0xdb, - 0xb8, 0xef, 0xf5, 0xde, 0x66, 0xf1, 0x0e, 0x97, 0x49, 0x1e, 0x9d, 0xe5, 0x75, 0xe7, 0x23, 0xcf, - 0x32, 0x3b, 0x2c, 0x9a, 0x98, 0xfb, 0xa8, 0xde, 0x08, 0xb3, 0x2c, 0xa8, 0x58, 0x19, 0x77, 0x1d, - 0xdc, 0x64, 0xa7, 0xbb, 0xc5, 0x44, 0xf5, 0x2c, 0xcc, 0xb0, 0x84, 0x65, 0xb3, 0x85, 0xbb, 0xec, - 0xc2, 0x47, 0x21, 0x4d, 0x3d, 0x0d, 0x39, 0xb3, 0xfb, 0x8c, 0xae, 0xd5, 0x26, 0x3e, 0xb9, 0x93, - 0x3a, 0x7b, 0x23, 0x6e, 0x3b, 0x34, 0x9f, 0x6f, 0xac, 0x52, 0x27, 0xfa, 0xde, 0x64, 0xf4, 0xb9, - 0x61, 0x26, 0x0e, 0xb1, 0xe3, 0x4c, 0xba, 0x28, 0xec, 0x35, 0x1a, 0x18, 0x37, 0xd9, 0x69, 0x03, - 0xef, 0x35, 0x66, 0x04, 0xca, 0xd8, 0xd3, 0x8c, 0x23, 0x0a, 0x41, 0xf9, 0xa1, 0x53, 0x90, 0xa3, - 0x41, 0xdb, 0xd1, 0x4b, 0xe7, 0xfa, 0x0a, 0xe3, 0x9c, 0x28, 0x8c, 0x9b, 0x30, 0xd3, 0xb6, 0xdc, - 0xea, 0x36, 0x0c, 0xdb, 0xd8, 0xed, 0x46, 0xad, 0x22, 0xd2, 0x72, 0xfd, 0x21, 0xa3, 0xcc, 0xfd, - 0xb6, 0x7a, 0x4c, 0x17, 0x8a, 0x51, 0xff, 0x4f, 0x38, 0x7e, 0x81, 0x9d, 0xb0, 0xed, 0xb2, 0x92, - 0xd3, 0xe1, 0x3e, 0x77, 0x3d, 0x25, 0x2f, 0x8a, 0x7f, 0xae, 0x1e, 0xd3, 0x7b, 0x0b, 0x53, 0x7f, - 0x1c, 0xe6, 0xdc, 0xd7, 0xa6, 0x75, 0xc9, 0x23, 0x5c, 0x09, 0x37, 0x34, 0x7a, 0x8a, 0x5f, 0x17, - 0x7e, 0x5c, 0x3d, 0xa6, 0xf7, 0x14, 0xa5, 0x56, 0x00, 0x76, 0x9c, 0xdd, 0x16, 0x2b, 0x38, 0x13, - 0x2e, 0x92, 0x3d, 0x05, 0xaf, 0xfa, 0x3f, 0xad, 0x1e, 0xd3, 0xb9, 0x22, 0xd4, 0x35, 0x98, 0x72, - 0x2e, 0x3b, 0xac, 0xbc, 0x6c, 0xf8, 0xe6, 0x76, 0x4f, 0x79, 0x35, 0xef, 0x9f, 0xd5, 0x63, 0x7a, - 0x50, 0x80, 0x5a, 0x82, 0xc9, 0xce, 0x05, 0x56, 0x58, 0xae, 0xcf, 0x45, 0xd5, 0xfd, 0x0b, 0xdb, - 0xb8, 0xe0, 0x97, 0xe5, 0xff, 0xee, 0x12, 0xd6, 0xe8, 0xee, 0xb3, 0xb2, 0x26, 0xa4, 0x09, 0x2b, - 0x7a, 0xff, 0xb8, 0x84, 0xf9, 0x05, 0xa8, 0x25, 0x98, 0xea, 0xb6, 0x8d, 0x4e, 0x77, 0xc7, 0x72, - 0xba, 0xf3, 0x93, 0x3d, 0x7e, 0x91, 0xe1, 0xa5, 0x55, 0xd9, 0x3f, 0x7a, 0xf0, 0xb7, 0xfa, 0x44, - 0x38, 0xb5, 0x47, 0x2e, 0xbf, 0xd3, 0x2e, 0x9b, 0x5d, 0xc7, 0x6c, 0x6f, 0x7b, 0xb1, 0x11, 0x69, - 0x6f, 0xd2, 0xff, 0xa3, 0xba, 0xc0, 0x4e, 0x29, 0x00, 0xd1, 0x4d, 0xd4, 0xbb, 0x19, 0x47, 0xab, - 0xe5, 0x0e, 0x27, 0x3c, 0x0d, 0x32, 0xee, 0x27, 0xe2, 0x59, 0x38, 0xd7, 0x7f, 0xa1, 0xaf, 0x57, - 0x76, 0x88, 0x02, 0xbb, 0x3f, 0xb9, 0x63, 0x63, 0xdb, 0xda, 0xb0, 0xad, 0x6d, 0x1b, 0x77, 0xbb, - 0xcc, 0xe1, 0x90, 0x4b, 0x71, 0x15, 0xdc, 0xec, 0xae, 0x9b, 0xdb, 0xd4, 0x7a, 0x62, 0xee, 0xd8, - 0x7c, 0x12, 0x9d, 0x6d, 0x96, 0xf1, 0x25, 0x72, 0xa1, 0xda, 0xfc, 0x71, 0x6f, 0xb6, 0xe9, 0xa5, - 0xa0, 0x9b, 0x60, 0x86, 0x57, 0x32, 0x7a, 0xf3, 0x8b, 0x19, 0xd8, 0x5e, 0xec, 0x0d, 0xdd, 0x08, - 0x73, 0xa2, 0x4c, 0x73, 0x43, 0x8c, 0xe2, 0x75, 0x85, 0xe8, 0x06, 0x38, 0xde, 0xa3, 0x58, 0xde, - 0x99, 0xfd, 0x54, 0x70, 0x66, 0xff, 0x7a, 0x80, 0x40, 0x8a, 0xfb, 0x16, 0x73, 0x1d, 0x4c, 0xf9, - 0x72, 0xd9, 0x37, 0xc3, 0x57, 0x53, 0x30, 0xe9, 0x09, 0x5b, 0xbf, 0x0c, 0xee, 0xf8, 0xd2, 0xe6, - 0x36, 0x10, 0xd8, 0x34, 0x5b, 0x48, 0x73, 0xc7, 0x91, 0xc0, 0x8d, 0xb7, 0x66, 0x3a, 0x2d, 0xef, - 0x38, 0x4a, 0x6f, 0xb2, 0xba, 0x01, 0x60, 0x12, 0x8c, 0x6a, 0xc1, 0xf9, 0x94, 0xc7, 0xc7, 0xd0, - 0x07, 0x2a, 0x0f, 0x5c, 0x19, 0x67, 0x1f, 0xc5, 0x0e, 0x8f, 0x4c, 0x41, 0xb6, 0xba, 0x51, 0x28, - 0x6a, 0xf9, 0x63, 0xea, 0x1c, 0x80, 0xf6, 0xcc, 0x0d, 0x4d, 0x2f, 0x69, 0xe5, 0xa2, 0x96, 0x4f, - 0xa1, 0x57, 0xa6, 0x61, 0xca, 0x57, 0x82, 0xbe, 0x8d, 0xd4, 0x98, 0x68, 0x0d, 0xbc, 0x5c, 0xe3, - 0xa0, 0x52, 0xf1, 0x42, 0xf6, 0x54, 0xb8, 0x7a, 0xaf, 0x8b, 0x97, 0x4d, 0xbb, 0xeb, 0xe8, 0xd6, - 0xa5, 0x65, 0xcb, 0xf6, 0xa3, 0x81, 0x7a, 0x97, 0x48, 0x87, 0x7c, 0x76, 0x2d, 0x8a, 0x26, 0x26, - 0x47, 0x18, 0xb0, 0xcd, 0x56, 0x86, 0x83, 0x04, 0xb7, 0x5c, 0x87, 0xde, 0xda, 0xdc, 0xc5, 0xba, - 0x75, 0xa9, 0x5b, 0x68, 0x37, 0x8b, 0x56, 0x6b, 0x6f, 0xb7, 0xdd, 0x65, 0x36, 0x41, 0xd8, 0x67, - 0x97, 0x3b, 0xe4, 0xea, 0x9c, 0x39, 0x80, 0x62, 0x65, 0x6d, 0x4d, 0x2b, 0xd6, 0x4a, 0x95, 0x72, - 0xfe, 0x98, 0xcb, 0xad, 0x5a, 0x61, 0x71, 0xcd, 0xe5, 0xce, 0x4f, 0xc0, 0xa4, 0xa7, 0xd3, 0x07, - 0x6e, 0xcc, 0x2e, 0xc0, 0xa4, 0xa7, 0xe5, 0x6c, 0x44, 0x78, 0x74, 0xef, 0x51, 0xb4, 0x5d, 0xc3, - 0x76, 0x88, 0xff, 0xb4, 0x57, 0xc8, 0xa2, 0xd1, 0xc5, 0xba, 0xff, 0xdb, 0xd9, 0xc7, 0x31, 0x0a, - 0x54, 0x98, 0x2b, 0xac, 0xad, 0xd5, 0x2b, 0x7a, 0xbd, 0x5c, 0xa9, 0xad, 0x96, 0xca, 0x2b, 0x74, - 0x84, 0x2c, 0xad, 0x94, 0x2b, 0xba, 0x46, 0x07, 0xc8, 0x6a, 0x3e, 0x45, 0xaf, 0x6e, 0x5a, 0x9c, - 0x84, 0x5c, 0x87, 0x70, 0x17, 0x7d, 0x49, 0x89, 0x79, 0xd2, 0xd4, 0xc7, 0x29, 0xe4, 0x72, 0x19, - 0xc1, 0x07, 0x3d, 0xdd, 0xe7, 0x9c, 0xd6, 0x59, 0x98, 0xa1, 0xb6, 0x5c, 0x97, 0x2c, 0xdf, 0xb3, - 0xfb, 0x19, 0x85, 0x34, 0xf4, 0x91, 0x74, 0x8c, 0xe3, 0xa7, 0x7d, 0x29, 0x8a, 0x67, 0x5c, 0xfc, - 0xf9, 0x30, 0x57, 0x35, 0xa9, 0x30, 0x57, 0x2a, 0xd7, 0x34, 0xbd, 0x5c, 0x58, 0x63, 0x59, 0x14, - 0x75, 0x1e, 0x4e, 0x96, 0x2b, 0x2c, 0xfe, 0x55, 0x95, 0x5c, 0x0a, 0xbb, 0xbe, 0x51, 0xd1, 0x6b, - 0xf9, 0xac, 0x7a, 0x1a, 0x54, 0xfa, 0x2c, 0xdc, 0xa9, 0x9c, 0x53, 0x1f, 0x03, 0x37, 0xac, 0x95, - 0xd6, 0x4b, 0xb5, 0x7a, 0x65, 0xb9, 0xae, 0x57, 0xce, 0x57, 0x5d, 0x04, 0x75, 0x6d, 0xad, 0xe0, - 0x0a, 0x12, 0x77, 0x85, 0xd3, 0x84, 0x7a, 0x15, 0x1c, 0x27, 0xd7, 0xb3, 0x91, 0x7b, 0x99, 0x69, - 0x7d, 0x93, 0xea, 0xb5, 0x30, 0x5f, 0x2a, 0x57, 0x37, 0x97, 0x97, 0x4b, 0xc5, 0x92, 0x56, 0xae, - 0xd5, 0x37, 0x34, 0x7d, 0xbd, 0x54, 0xad, 0xba, 0xff, 0xe6, 0xa7, 0xd0, 0x87, 0x14, 0xc8, 0xd1, - 0x3e, 0x13, 0xbd, 0x4f, 0x81, 0xd9, 0x73, 0x46, 0xcb, 0x74, 0x07, 0x0a, 0x72, 0x73, 0x16, 0xba, - 0x4e, 0x70, 0x4d, 0x77, 0xc8, 0x0d, 0x5b, 0xcc, 0x35, 0x9d, 0xbc, 0xa0, 0x9f, 0xe1, 0x45, 0xa3, - 0x26, 0x8a, 0xc6, 0xd3, 0x23, 0x80, 0xa0, 0x35, 0x2e, 0x08, 0xb5, 0x85, 0x4c, 0x6e, 0x5e, 0xeb, - 0xe3, 0x7c, 0x5e, 0xc0, 0xb9, 0x78, 0xb8, 0xe2, 0xe3, 0x81, 0xff, 0x2b, 0xa3, 0x02, 0x3f, 0x0f, - 0x33, 0x9b, 0xe5, 0xc2, 0x66, 0x6d, 0xb5, 0xa2, 0x97, 0x7e, 0x8c, 0x44, 0xd1, 0x9d, 0x85, 0xa9, - 0xe5, 0x8a, 0xbe, 0x58, 0x5a, 0x5a, 0xd2, 0xca, 0xf9, 0xac, 0x7a, 0x35, 0x5c, 0x55, 0xd5, 0xf4, - 0x73, 0xa5, 0xa2, 0x56, 0xdf, 0x2c, 0x17, 0xce, 0x15, 0x4a, 0x6b, 0xa4, 0x8f, 0xc8, 0x45, 0xdc, - 0xfa, 0x35, 0x81, 0x7e, 0x2a, 0x03, 0x40, 0x9b, 0xee, 0x5a, 0xd2, 0xfc, 0xdd, 0x50, 0x7f, 0x11, - 0x77, 0xd2, 0x10, 0x14, 0x13, 0xa2, 0xbf, 0x25, 0x98, 0xb4, 0xd9, 0x07, 0xb6, 0x7c, 0x32, 0xa8, - 0x1c, 0xfa, 0xe8, 0x95, 0xa6, 0xfb, 0xbf, 0xa3, 0xf7, 0xc7, 0x99, 0x23, 0x84, 0x12, 0x16, 0x0f, - 0xc9, 0xe5, 0xd1, 0x00, 0x89, 0x5e, 0x98, 0x82, 0x39, 0xb1, 0x61, 0x6e, 0x23, 0x88, 0x31, 0x25, - 0xd7, 0x08, 0xf1, 0x67, 0xce, 0xc8, 0x3a, 0x7b, 0x07, 0x1b, 0x4e, 0xc1, 0xd3, 0x4c, 0x7a, 0x1a, - 0xd3, 0xb3, 0x58, 0xf2, 0x29, 0x97, 0x78, 0xd7, 0xe8, 0xa0, 0x17, 0x03, 0xd7, 0x2e, 0x3b, 0x79, - 0x05, 0x7d, 0x2e, 0x03, 0xb3, 0xc2, 0xe5, 0x53, 0xe8, 0x25, 0x69, 0x99, 0x2b, 0x63, 0xb8, 0x6b, - 0xad, 0x52, 0xc9, 0x5e, 0x6b, 0x75, 0xf6, 0xa7, 0x53, 0x30, 0xc1, 0x7e, 0x21, 0xec, 0xaf, 0x94, - 0x5d, 0x4b, 0xe1, 0x38, 0x4c, 0xaf, 0x68, 0xb5, 0x7a, 0xb5, 0x56, 0xd0, 0x6b, 0xda, 0x52, 0x3e, - 0xa5, 0x9e, 0x82, 0x13, 0x1b, 0x9a, 0x5e, 0xad, 0xb8, 0xdc, 0xde, 0xd0, 0x2b, 0xa4, 0x9b, 0xa4, - 0x20, 0xb8, 0x20, 0xad, 0x69, 0x4b, 0x2b, 0x5a, 0x7d, 0xb1, 0x50, 0xd5, 0xf2, 0x8a, 0xfb, 0x6f, - 0xb9, 0x52, 0xd3, 0xaa, 0xf5, 0xa5, 0x52, 0x41, 0x7f, 0x20, 0x9f, 0x71, 0xff, 0xad, 0xd6, 0xf4, - 0x42, 0x4d, 0x5b, 0x29, 0x15, 0xc9, 0x65, 0xcb, 0xae, 0x7e, 0x64, 0xdd, 0xa1, 0x56, 0x5b, 0xdf, - 0xa8, 0x3d, 0x90, 0xcf, 0xc5, 0xf7, 0xf9, 0xeb, 0x6d, 0xfa, 0x98, 0x7d, 0xfe, 0xa2, 0xaa, 0x4f, - 0x7e, 0x76, 0xfc, 0x6d, 0x05, 0xf2, 0x94, 0x02, 0xed, 0x72, 0x07, 0xdb, 0x26, 0x6e, 0x37, 0x30, - 0x7a, 0x81, 0x54, 0x40, 0xbe, 0x03, 0xe1, 0xad, 0xc8, 0x10, 0xc2, 0x19, 0xa6, 0xf4, 0xa5, 0xc7, - 0xa6, 0xcf, 0xf4, 0xda, 0xf4, 0xa2, 0x4c, 0x65, 0x7b, 0xaf, 0x4a, 0xfb, 0x54, 0x5c, 0x9f, 0xc0, - 0xde, 0xd6, 0x8c, 0x04, 0xd1, 0x8f, 0xc7, 0xf1, 0x09, 0x1c, 0x40, 0xc1, 0x58, 0xa2, 0x70, 0x86, - 0x18, 0x04, 0x79, 0x05, 0xbd, 0x7d, 0x0a, 0xf2, 0x94, 0x50, 0xce, 0xd1, 0xea, 0x97, 0xd8, 0x05, - 0x61, 0xf5, 0x18, 0x71, 0xa3, 0xbc, 0x73, 0xbd, 0x69, 0xf1, 0x5c, 0xaf, 0xb0, 0x6e, 0xa7, 0xf4, - 0x6e, 0x8e, 0xc7, 0xd5, 0x4e, 0xce, 0xab, 0x2a, 0x3c, 0x54, 0x5f, 0x72, 0xda, 0x19, 0x59, 0xfd, - 0x78, 0x2e, 0xb1, 0x61, 0xd7, 0x54, 0x69, 0xb2, 0xc8, 0x44, 0xdf, 0xd5, 0x15, 0xd7, 0xc5, 0x56, - 0xf0, 0x6a, 0x8b, 0xb8, 0xc0, 0x2a, 0x39, 0x17, 0xdb, 0x41, 0x14, 0x24, 0x8f, 0xc2, 0x0f, 0xd2, - 0x90, 0xa9, 0x5a, 0xb6, 0x33, 0x2a, 0x0c, 0xe2, 0x6e, 0x0b, 0x72, 0x1c, 0xa8, 0x86, 0x4f, 0xbb, - 0x92, 0xdb, 0x16, 0x8c, 0xae, 0x7f, 0x0c, 0xa1, 0xb7, 0x8e, 0xc3, 0x1c, 0xa5, 0xc4, 0x8f, 0x23, - 0xff, 0xfd, 0x34, 0xed, 0xaf, 0xee, 0x97, 0x45, 0xe4, 0x2c, 0xcc, 0x70, 0xdb, 0x72, 0xfe, 0x8d, - 0xa7, 0x7c, 0x1a, 0xfa, 0x35, 0x1e, 0x97, 0x25, 0x11, 0x97, 0x7e, 0x93, 0x4e, 0x3f, 0x14, 0xfb, - 0xa8, 0x7a, 0xa6, 0x38, 0x51, 0xbc, 0x22, 0x2a, 0x4f, 0x1e, 0x91, 0xe7, 0x2a, 0x90, 0x63, 0x6e, - 0x51, 0x23, 0x45, 0x20, 0xae, 0x66, 0xf8, 0x4c, 0x90, 0x73, 0x9f, 0x52, 0x46, 0xad, 0x19, 0xd1, - 0xf5, 0x27, 0x8f, 0xc3, 0xbf, 0x32, 0x7f, 0xbf, 0xc2, 0xbe, 0x61, 0xb6, 0x8c, 0x0b, 0xad, 0x18, - 0xd1, 0x33, 0x3f, 0x12, 0xf3, 0x84, 0x93, 0xdf, 0x54, 0xa1, 0xbe, 0x10, 0x8e, 0x3f, 0x09, 0xa6, - 0x6c, 0x7f, 0x55, 0xce, 0x3b, 0x00, 0xde, 0xe3, 0x6b, 0xc9, 0xbe, 0xeb, 0x41, 0xce, 0x58, 0xc7, - 0x99, 0xa4, 0xe8, 0x19, 0xcb, 0xf1, 0x8b, 0xe9, 0x42, 0xb3, 0xb9, 0x8c, 0x0d, 0x67, 0xcf, 0xc6, - 0xcd, 0x58, 0x43, 0x84, 0xc8, 0xa2, 0x29, 0x9e, 0x13, 0x42, 0xcc, 0xab, 0x35, 0x11, 0x9d, 0x27, - 0x0f, 0xe8, 0x0d, 0x3c, 0x5a, 0x46, 0xd2, 0x25, 0xbd, 0xcd, 0x87, 0xa4, 0x22, 0x40, 0xf2, 0xb4, - 0xe1, 0x88, 0x48, 0x1e, 0x90, 0x97, 0x29, 0x30, 0x47, 0xed, 0x84, 0x51, 0x63, 0xf2, 0x7b, 0x31, - 0xdd, 0x28, 0xb8, 0x9b, 0x3a, 0x78, 0x72, 0x46, 0x02, 0x4b, 0x1c, 0xa7, 0x0b, 0x39, 0x3a, 0x92, - 0x47, 0xe6, 0x73, 0x39, 0x00, 0xce, 0x35, 0xee, 0x23, 0xb9, 0x20, 0xfe, 0x14, 0x7a, 0x07, 0x9b, - 0x7f, 0x54, 0x85, 0xc0, 0xa6, 0x9c, 0xdb, 0x9b, 0xbf, 0x27, 0x23, 0x26, 0x4a, 0x8d, 0x2a, 0x7f, - 0x1e, 0xd3, 0xe6, 0x65, 0x8e, 0x69, 0x03, 0x07, 0xf7, 0x21, 0x7b, 0xb9, 0x8f, 0xc6, 0x30, 0x7e, - 0x07, 0x91, 0x12, 0x0f, 0xb5, 0xb5, 0x21, 0xe6, 0x92, 0xf3, 0x70, 0x52, 0xd7, 0x0a, 0x4b, 0x95, - 0xf2, 0xda, 0x03, 0xfc, 0x95, 0x0e, 0x79, 0x85, 0x9f, 0x9c, 0x24, 0x02, 0xdb, 0xeb, 0x63, 0xf6, - 0x81, 0x22, 0xaf, 0xa2, 0x66, 0x2b, 0xdc, 0x74, 0x7e, 0x70, 0xaf, 0x26, 0x51, 0xec, 0x51, 0xa2, - 0xf0, 0x6c, 0x5e, 0x8d, 0x5e, 0xa0, 0x40, 0x3e, 0xb8, 0x01, 0x98, 0xdd, 0xcf, 0x53, 0x11, 0x3d, - 0xe7, 0x3a, 0x74, 0x0b, 0x26, 0xf0, 0x9c, 0xf3, 0x12, 0xd4, 0x9b, 0x60, 0xae, 0xb1, 0x83, 0x1b, - 0x17, 0x4b, 0x6d, 0x6f, 0x6b, 0x99, 0xee, 0x43, 0xf6, 0xa4, 0x8a, 0xc0, 0xdc, 0x2f, 0x02, 0x23, - 0x4e, 0xa2, 0x85, 0x41, 0x9a, 0x27, 0x2a, 0x04, 0x97, 0x3f, 0xf6, 0x71, 0x29, 0x0b, 0xb8, 0xdc, - 0x35, 0x54, 0xa9, 0xf1, 0x60, 0x29, 0x0f, 0x01, 0x0b, 0x82, 0xd3, 0x95, 0x8d, 0x5a, 0xa9, 0x52, - 0xae, 0x6f, 0x56, 0xb5, 0xa5, 0xfa, 0xa2, 0x07, 0x4e, 0x35, 0xaf, 0xa0, 0x6f, 0xa6, 0x61, 0x82, - 0x92, 0xd5, 0xed, 0xb9, 0xb1, 0x37, 0xda, 0x65, 0x10, 0xbd, 0x5d, 0x3a, 0x00, 0x80, 0xcf, 0x08, - 0x56, 0x4f, 0x48, 0x3f, 0xf5, 0x54, 0x98, 0xa0, 0x20, 0x7b, 0x1e, 0x27, 0x67, 0x42, 0x7a, 0x29, - 0x56, 0x8c, 0xee, 0x65, 0x97, 0x0c, 0x06, 0x30, 0x80, 0x8c, 0xb1, 0x4c, 0x10, 0x27, 0x56, 0xcd, - 0xae, 0x63, 0xd9, 0x57, 0xd0, 0x1b, 0x53, 0x30, 0x71, 0x0e, 0xdb, 0x5d, 0xd3, 0x6a, 0x1f, 0xd8, - 0x69, 0xbd, 0x1e, 0xa6, 0x3b, 0x36, 0xde, 0x37, 0xad, 0xbd, 0x6e, 0x30, 0x31, 0xe7, 0x93, 0x54, - 0x04, 0x93, 0xc6, 0x9e, 0xb3, 0x63, 0xd9, 0xc1, 0x61, 0x7b, 0xef, 0x5d, 0x3d, 0x03, 0x40, 0x9f, - 0xcb, 0xc6, 0x2e, 0x66, 0xfb, 0xc7, 0x5c, 0x8a, 0xaa, 0x42, 0xc6, 0x31, 0x77, 0x31, 0x8b, 0x95, - 0x47, 0x9e, 0xd5, 0x79, 0x98, 0x20, 0x91, 0xad, 0x58, 0x04, 0x31, 0x45, 0xf7, 0x5e, 0xd1, 0xaf, - 0x2b, 0x30, 0xbd, 0x82, 0x1d, 0x46, 0x6a, 0x97, 0x0f, 0x59, 0x13, 0x11, 0x4f, 0xda, 0xed, 0x5e, - 0x5b, 0x46, 0xd7, 0xfb, 0xcd, 0x5f, 0x7d, 0x13, 0x13, 0x83, 0xb8, 0x7d, 0x0a, 0x17, 0x9a, 0x13, - 0xbd, 0x27, 0x2d, 0x7b, 0x48, 0x92, 0x31, 0x73, 0x81, 0x23, 0x30, 0x54, 0xb6, 0x26, 0xf7, 0x59, - 0x8e, 0x03, 0x71, 0x54, 0xf9, 0x92, 0x58, 0x31, 0xba, 0x9f, 0x5b, 0xf2, 0x78, 0xe5, 0x60, 0x4a, - 0x92, 0x17, 0xaf, 0xef, 0x2a, 0x30, 0x5d, 0xdd, 0xb1, 0x2e, 0x31, 0x02, 0xf8, 0x4b, 0x68, 0xa3, - 0xa0, 0xba, 0x16, 0xa6, 0xf6, 0x7b, 0x60, 0x0a, 0x12, 0xc2, 0xef, 0x4a, 0x45, 0x0f, 0x29, 0x71, - 0x61, 0xe2, 0x88, 0x1b, 0xf9, 0x4d, 0xa6, 0xea, 0x93, 0x61, 0x82, 0x51, 0xcd, 0xe6, 0xcf, 0xd1, - 0x00, 0x7b, 0x99, 0xf9, 0x06, 0x66, 0xc4, 0x06, 0xc6, 0x43, 0x3e, 0xbc, 0x71, 0x63, 0x88, 0x56, - 0x9e, 0x26, 0x87, 0xeb, 0x3d, 0xe0, 0x8b, 0x23, 0x00, 0x1e, 0x7d, 0x2f, 0x25, 0xbb, 0xca, 0xe4, - 0x73, 0xc0, 0xa7, 0xe0, 0x50, 0xd1, 0xdf, 0x07, 0x16, 0x97, 0x3c, 0x3f, 0x5f, 0x99, 0x81, 0x99, - 0x25, 0x73, 0x6b, 0xcb, 0xef, 0xf5, 0x5e, 0x9c, 0x92, 0x63, 0x69, 0xf8, 0xf6, 0xa6, 0x6b, 0xb4, - 0xec, 0xd9, 0x36, 0x6e, 0x7b, 0x8d, 0x62, 0xea, 0xd4, 0x93, 0xaa, 0xde, 0x0c, 0xc7, 0xbd, 0x8e, - 0xde, 0xcb, 0x48, 0xc5, 0xb2, 0x37, 0x19, 0x7d, 0x47, 0x7a, 0x8b, 0xc2, 0xe3, 0x28, 0xdf, 0xa4, - 0x10, 0x05, 0xbc, 0x1b, 0x66, 0x77, 0x68, 0x6e, 0x32, 0x8f, 0xf3, 0x3a, 0xcb, 0xd3, 0x3d, 0x51, - 0x36, 0xd7, 0x71, 0xb7, 0x6b, 0x6c, 0x63, 0x5d, 0xcc, 0xdc, 0xa3, 0xbe, 0x4a, 0x9c, 0xab, 0x2e, - 0xe4, 0x76, 0x3b, 0x24, 0x5a, 0x92, 0xbc, 0x74, 0x7c, 0xed, 0x51, 0x90, 0x59, 0x36, 0x5b, 0x18, - 0xfd, 0x6c, 0x1a, 0xa6, 0x74, 0xdc, 0xb0, 0xda, 0x0d, 0xf7, 0x8d, 0x73, 0x76, 0xf8, 0x87, 0x94, - 0xec, 0x15, 0x4f, 0x6e, 0x39, 0x0b, 0x7e, 0x19, 0x21, 0x7a, 0x23, 0x77, 0x95, 0x53, 0x64, 0x51, - 0x63, 0x08, 0xe2, 0xed, 0xda, 0x91, 0x5b, 0x5b, 0x2d, 0xcb, 0x10, 0x56, 0x32, 0x7a, 0x6d, 0x9b, - 0x5b, 0x20, 0xef, 0xf9, 0xac, 0x5b, 0xce, 0x86, 0xd9, 0x6e, 0xfb, 0x87, 0x22, 0x0f, 0xa4, 0x8b, - 0x9b, 0x70, 0x91, 0x71, 0x25, 0x48, 0xdb, 0x59, 0xed, 0x21, 0x92, 0x7d, 0x13, 0xcc, 0x5d, 0xb8, - 0xe2, 0xe0, 0x2e, 0xcb, 0xc5, 0xaa, 0xcd, 0xe8, 0x3d, 0xa9, 0xe8, 0xbd, 0x52, 0xf1, 0x27, 0x22, - 0x2a, 0x8c, 0xc7, 0xea, 0xd5, 0x21, 0xcc, 0xf9, 0x93, 0x90, 0x2f, 0x57, 0x96, 0x34, 0xe2, 0x7b, - 0xe3, 0xb9, 0x2b, 0x6c, 0xa3, 0x97, 0x28, 0x30, 0x43, 0x76, 0xaa, 0x3d, 0x14, 0x6e, 0x90, 0xd8, - 0x1d, 0x47, 0x5f, 0x96, 0xf6, 0xcb, 0x21, 0x4d, 0xe6, 0x2b, 0x08, 0x67, 0xf4, 0x96, 0xd9, 0xea, - 0x65, 0x74, 0x56, 0xef, 0x49, 0xed, 0x03, 0x88, 0xd2, 0x17, 0x90, 0xdf, 0x91, 0x72, 0xce, 0x19, - 0x44, 0xdd, 0x51, 0xa1, 0xf2, 0xbb, 0x0a, 0x4c, 0xbb, 0xf3, 0x3f, 0x0f, 0x94, 0x8a, 0x00, 0x8a, - 0xd5, 0x6e, 0x5d, 0x09, 0xe6, 0xb8, 0xde, 0x6b, 0x2c, 0x25, 0xf9, 0x2b, 0xe9, 0x69, 0x18, 0x61, - 0x11, 0x47, 0xcb, 0x98, 0xf0, 0xfb, 0x80, 0xd4, 0xe4, 0x6c, 0x00, 0x71, 0x47, 0x05, 0xdf, 0x6f, - 0x66, 0x21, 0xb7, 0xd9, 0x21, 0xc8, 0x7d, 0x3d, 0x2d, 0x13, 0x71, 0xf9, 0x80, 0x63, 0xb6, 0x6b, - 0x66, 0xb5, 0xac, 0x86, 0xd1, 0xda, 0x08, 0x4e, 0xb8, 0x04, 0x09, 0xea, 0x5d, 0xcc, 0x57, 0x8b, - 0x1e, 0x0f, 0xba, 0x29, 0x32, 0x18, 0x31, 0xe1, 0x11, 0xe7, 0x04, 0x7f, 0x2b, 0x9c, 0x68, 0x9a, - 0x5d, 0xe3, 0x42, 0x0b, 0x6b, 0xed, 0x86, 0x7d, 0x85, 0xb2, 0x83, 0x3a, 0xae, 0x1c, 0xfc, 0xa0, - 0xde, 0x03, 0xd9, 0xae, 0x73, 0xa5, 0x45, 0x27, 0x7e, 0xbc, 0xcf, 0x7c, 0x68, 0x55, 0x55, 0x37, - 0xbb, 0x4e, 0xff, 0xe2, 0xef, 0x71, 0x9c, 0x90, 0xbc, 0x93, 0xf2, 0x0e, 0xc8, 0x59, 0xb6, 0xb9, - 0x6d, 0xd2, 0x18, 0xff, 0x73, 0x07, 0x62, 0x6c, 0x51, 0x53, 0xa0, 0x42, 0xb2, 0xe8, 0x2c, 0x2b, - 0xfa, 0x40, 0x5a, 0x36, 0xa0, 0x07, 0xa1, 0x91, 0x82, 0x33, 0x9e, 0x7b, 0x29, 0x5f, 0x23, 0x15, - 0x6a, 0x23, 0x9c, 0xac, 0xe4, 0x07, 0xe1, 0xcf, 0xa7, 0x61, 0x72, 0xc9, 0xba, 0xd4, 0x26, 0x02, - 0x7b, 0xa7, 0x9c, 0xcd, 0xda, 0xe7, 0xf0, 0x95, 0x78, 0x1d, 0x54, 0xa4, 0xa7, 0x35, 0x69, 0xad, - 0x57, 0x65, 0x08, 0x0c, 0x91, 0x1a, 0x20, 0x79, 0x7d, 0x4f, 0x54, 0x3d, 0xc9, 0xf3, 0xf5, 0xcf, - 0x14, 0xc8, 0x2c, 0xd9, 0x56, 0x07, 0xbd, 0x2d, 0x15, 0x63, 0x1f, 0xb9, 0x69, 0x5b, 0x9d, 0x1a, - 0xb9, 0x99, 0x23, 0x70, 0x2f, 0xe7, 0xd3, 0xd4, 0x3b, 0x61, 0xb2, 0x63, 0x75, 0x4d, 0xc7, 0x9b, - 0x0e, 0xcc, 0xdd, 0xfe, 0xc8, 0xbe, 0x5a, 0xb9, 0xc1, 0x32, 0xe9, 0x7e, 0x76, 0xb7, 0xf7, 0x25, - 0x2c, 0x74, 0xf9, 0xe2, 0xb2, 0xd1, 0xbb, 0x9d, 0xa4, 0x27, 0x15, 0xbd, 0x94, 0x47, 0xf2, 0x69, - 0x22, 0x92, 0x8f, 0xee, 0xc3, 0x61, 0xdb, 0xea, 0x8c, 0x64, 0xe7, 0xe7, 0x55, 0x3e, 0xaa, 0x4f, - 0x17, 0x50, 0xbd, 0x45, 0xaa, 0xce, 0xe4, 0x11, 0xfd, 0x40, 0x06, 0x80, 0x98, 0x0b, 0x9b, 0xee, - 0x44, 0x46, 0xce, 0x56, 0x7a, 0x5e, 0x86, 0xe3, 0x65, 0x41, 0xe4, 0xe5, 0x63, 0x43, 0xac, 0x11, - 0x52, 0x7c, 0x08, 0x47, 0x0b, 0x90, 0xdd, 0x73, 0x3f, 0x33, 0x8e, 0x4a, 0x16, 0x41, 0x5e, 0x75, - 0xfa, 0x27, 0xfa, 0xd3, 0x14, 0x64, 0x49, 0x82, 0x7a, 0x06, 0x80, 0x0c, 0xd0, 0xf4, 0xa0, 0x42, - 0x8a, 0x0c, 0xc5, 0x5c, 0x0a, 0x91, 0x56, 0xb3, 0xc9, 0x3e, 0x53, 0xd3, 0x37, 0x48, 0x70, 0xff, - 0x26, 0xc3, 0x36, 0x29, 0x8b, 0x0d, 0xe4, 0x5c, 0x8a, 0xfb, 0x37, 0x79, 0x5b, 0xc3, 0x5b, 0x34, - 0x40, 0x6b, 0x46, 0x0f, 0x12, 0xfc, 0xbf, 0xd7, 0xfc, 0x4b, 0x38, 0xbc, 0xbf, 0x49, 0x8a, 0x3b, - 0xa9, 0x25, 0x62, 0xb9, 0x18, 0x54, 0x91, 0x23, 0x99, 0x7a, 0x93, 0xd1, 0xeb, 0x7d, 0xb1, 0x59, - 0x12, 0xc4, 0xe6, 0xf1, 0x31, 0xd8, 0x9b, 0xbc, 0xf0, 0x7c, 0x35, 0x0b, 0x53, 0x65, 0xab, 0xc9, - 0x64, 0x87, 0x9b, 0xf8, 0x7d, 0x3c, 0x1b, 0x6b, 0xe2, 0xe7, 0x97, 0x11, 0x22, 0x20, 0xf7, 0x89, - 0x02, 0x22, 0x57, 0x02, 0x2f, 0x1f, 0xea, 0x22, 0xe4, 0x88, 0xf4, 0x1e, 0xbc, 0x5c, 0x25, 0xaa, - 0x08, 0xc2, 0x5a, 0x9d, 0xfd, 0xf9, 0x6f, 0x4e, 0xc6, 0xfe, 0x13, 0x64, 0xa9, 0x47, 0x6f, 0xb8, - 0xcf, 0xb0, 0xd8, 0xd0, 0x74, 0x74, 0x43, 0x95, 0xe8, 0x86, 0x66, 0x7a, 0x1b, 0x1a, 0x67, 0x3e, - 0x1f, 0x26, 0x21, 0xc9, 0xcb, 0xf8, 0x7f, 0x9f, 0x00, 0x28, 0x1b, 0xfb, 0xe6, 0x36, 0xdd, 0xb2, - 0xfb, 0x4b, 0x6f, 0x1e, 0xc3, 0x36, 0xd7, 0xfe, 0x33, 0x37, 0x10, 0xde, 0x09, 0x13, 0x6c, 0xdc, - 0x63, 0x0d, 0xb9, 0x4e, 0x68, 0x48, 0x50, 0x0a, 0x35, 0x2f, 0x2f, 0x3b, 0xba, 0x97, 0x5f, 0xb8, - 0x6e, 0x2e, 0xdd, 0x73, 0xdd, 0x5c, 0xdf, 0xdd, 0x81, 0xb0, 0x4b, 0xe8, 0xd0, 0x7b, 0xa5, 0xaf, - 0x0b, 0xe1, 0xe8, 0xe1, 0x5a, 0x14, 0xa2, 0x82, 0x77, 0xc0, 0x84, 0xe5, 0xef, 0x32, 0x2a, 0xa1, - 0xeb, 0x59, 0xa5, 0xf6, 0x96, 0xa5, 0x7b, 0x39, 0x25, 0x2f, 0x02, 0x91, 0xa2, 0x23, 0x79, 0xa0, - 0x3f, 0xad, 0xc0, 0xe9, 0x15, 0x2f, 0xd8, 0x8d, 0xdb, 0x8e, 0xf3, 0xa6, 0xb3, 0xb3, 0x66, 0xb6, - 0x2f, 0x76, 0xd1, 0x7f, 0x90, 0xb3, 0x20, 0x39, 0xfc, 0xd3, 0xf1, 0xf0, 0x17, 0x63, 0x09, 0x54, - 0x45, 0xd4, 0xee, 0x09, 0x2b, 0xa5, 0x3f, 0xb5, 0x21, 0x00, 0xde, 0x05, 0x39, 0x4a, 0x28, 0xeb, - 0x44, 0xcf, 0x86, 0xe2, 0xe7, 0x97, 0xa4, 0xb3, 0x3f, 0xd0, 0x7b, 0x7c, 0x1c, 0xcf, 0x09, 0x38, - 0x2e, 0x1e, 0x8a, 0xb2, 0xc4, 0x21, 0x3d, 0xfb, 0x04, 0x98, 0x60, 0x9c, 0x56, 0xe7, 0x78, 0x2d, - 0xce, 0x1f, 0x53, 0x01, 0x72, 0xeb, 0xd6, 0x3e, 0xae, 0x59, 0xf9, 0x94, 0xfb, 0xec, 0xd2, 0x57, - 0xb3, 0xf2, 0x69, 0xf4, 0xea, 0x49, 0x98, 0xf4, 0xa3, 0x8c, 0x7c, 0x3e, 0x0d, 0xf9, 0xe0, 0x5e, - 0x7d, 0xda, 0x22, 0x79, 0x97, 0xbd, 0x97, 0x49, 0xef, 0xbb, 0xfb, 0xd1, 0x3f, 0x7a, 0x2b, 0x93, - 0xbc, 0xf9, 0xfa, 0xad, 0x52, 0xfb, 0xf0, 0xb2, 0xb5, 0x24, 0xaf, 0x6a, 0x9f, 0x4a, 0x43, 0xb6, - 0xd8, 0xb2, 0xda, 0x38, 0xd6, 0xc5, 0xd7, 0xfd, 0x77, 0x14, 0xd0, 0xb3, 0xd3, 0xb2, 0xb6, 0x46, - 0xc0, 0x00, 0xb7, 0x6e, 0x49, 0xde, 0xca, 0x0d, 0x52, 0x91, 0x45, 0x27, 0xcf, 0xd0, 0x6f, 0xa6, - 0x61, 0x8a, 0xc6, 0xeb, 0x28, 0xb4, 0x5a, 0xe8, 0x91, 0x01, 0x53, 0xfb, 0x44, 0x6a, 0x41, 0xbf, - 0x23, 0xed, 0x37, 0xed, 0xb7, 0xca, 0x2f, 0x3b, 0x46, 0xe0, 0x92, 0x78, 0x6e, 0xbc, 0x72, 0x7b, - 0x62, 0x03, 0x09, 0x4a, 0x9e, 0xd5, 0x7f, 0x91, 0x76, 0x0d, 0x80, 0xf6, 0xc5, 0x0d, 0x1b, 0xef, - 0x9b, 0xf8, 0x12, 0x7a, 0x44, 0xc0, 0xec, 0x83, 0xc1, 0x08, 0xde, 0x2c, 0xbd, 0x88, 0xc3, 0x15, - 0x19, 0xba, 0x25, 0x35, 0xdd, 0x0a, 0x32, 0xb1, 0x5e, 0xbc, 0x37, 0x42, 0x04, 0x57, 0x8c, 0xce, - 0x67, 0x97, 0x5c, 0xb3, 0x09, 0xa7, 0x22, 0x79, 0xc6, 0x3e, 0x34, 0x01, 0x93, 0x9b, 0xed, 0x6e, - 0xa7, 0x65, 0x74, 0x77, 0xd0, 0xf7, 0x15, 0xff, 0xde, 0xe9, 0x27, 0x09, 0x67, 0x9e, 0x7f, 0x72, - 0x0f, 0xdb, 0x9e, 0x1b, 0x0e, 0x7d, 0xe9, 0x7f, 0xb1, 0x29, 0xfa, 0x80, 0x22, 0x3b, 0x49, 0xf5, - 0x2a, 0x8d, 0xbe, 0x90, 0xb9, 0x04, 0x93, 0x1d, 0xb3, 0xe1, 0xec, 0xd9, 0xfe, 0x35, 0x99, 0x8f, - 0x93, 0x2b, 0x65, 0x83, 0xfe, 0xa5, 0xfb, 0xbf, 0x23, 0x03, 0x26, 0x58, 0xe2, 0x81, 0x6d, 0xa1, - 0x83, 0x87, 0xf4, 0x4e, 0x43, 0xce, 0xb0, 0x1d, 0xb3, 0xeb, 0x5d, 0x43, 0xcc, 0xde, 0xdc, 0xee, - 0x92, 0x3e, 0x6d, 0xda, 0x2d, 0x2f, 0x3a, 0x82, 0x9f, 0x80, 0x7e, 0x57, 0x6a, 0xfe, 0x18, 0xdd, - 0xf2, 0x78, 0x90, 0xdf, 0x3f, 0xc4, 0x5a, 0xf3, 0xd5, 0x70, 0x95, 0x5e, 0xa8, 0x69, 0x75, 0x7a, - 0x98, 0xde, 0x3f, 0x37, 0xdf, 0x44, 0xdf, 0xe7, 0xd7, 0xef, 0xc4, 0x31, 0x82, 0x71, 0x31, 0x18, - 0x23, 0xfc, 0x84, 0x88, 0x31, 0xe2, 0x37, 0xa5, 0x77, 0x77, 0x7c, 0x96, 0x0c, 0x58, 0xcb, 0x8b, - 0xba, 0x8d, 0xe4, 0x83, 0x52, 0x3b, 0x35, 0x83, 0x6a, 0x3a, 0x42, 0xf6, 0x7f, 0x66, 0x02, 0x26, - 0x56, 0x8c, 0x56, 0x0b, 0xdb, 0x57, 0xdc, 0xa1, 0x25, 0xef, 0x51, 0xb8, 0x6e, 0xb4, 0xcd, 0x2d, - 0x77, 0x7e, 0x1f, 0xd9, 0xe9, 0xbd, 0x57, 0x3a, 0xd2, 0x25, 0xab, 0x63, 0xa1, 0xb7, 0xfc, 0x10, - 0x9e, 0xdf, 0x06, 0x19, 0xb3, 0xbd, 0x65, 0xb1, 0xae, 0xaf, 0x77, 0x15, 0xdd, 0xfb, 0x99, 0x4c, - 0x41, 0x48, 0x46, 0xc9, 0x60, 0x97, 0x92, 0x54, 0x24, 0xdf, 0x03, 0x7e, 0x29, 0x03, 0xb3, 0x1e, - 0x11, 0xa5, 0x76, 0x13, 0x5f, 0x46, 0x77, 0x04, 0x7c, 0xbe, 0x19, 0x8e, 0x37, 0x5a, 0x26, 0x6e, - 0x3b, 0x45, 0xff, 0xf0, 0x6d, 0x8a, 0xc5, 0x93, 0x11, 0x93, 0xd1, 0x4b, 0x32, 0xb2, 0xa7, 0x72, - 0x7a, 0x5b, 0x4e, 0x2a, 0x0d, 0x61, 0x7e, 0x0d, 0xa0, 0x61, 0x38, 0x78, 0xdb, 0xb2, 0x4d, 0xbf, - 0x07, 0x7c, 0x62, 0x9c, 0xd2, 0x8a, 0xf4, 0xef, 0x2b, 0x3a, 0x57, 0x8e, 0x7a, 0x0f, 0x4c, 0x63, - 0xff, 0xe0, 0xad, 0xb7, 0x38, 0x13, 0x89, 0x2c, 0x9f, 0x1f, 0xfd, 0x85, 0xd4, 0xe1, 0x1f, 0x99, - 0x66, 0xc6, 0x43, 0xb7, 0x3e, 0x9c, 0xb6, 0x6d, 0x96, 0xd7, 0x0b, 0x7a, 0x75, 0xb5, 0xb0, 0xb6, - 0x56, 0x2a, 0xaf, 0xf8, 0x21, 0x28, 0x54, 0x98, 0x5b, 0xaa, 0x9c, 0x2f, 0x73, 0x31, 0x42, 0x32, - 0x68, 0x03, 0x26, 0x3d, 0x7e, 0xf5, 0x73, 0x8b, 0xe4, 0x79, 0xc6, 0xdc, 0x22, 0xb9, 0x24, 0xd7, - 0x1c, 0x33, 0x1b, 0xbe, 0x6b, 0x0d, 0x79, 0x46, 0x7f, 0x62, 0x40, 0x96, 0xac, 0xa2, 0xa3, 0x77, - 0x92, 0x1b, 0x8d, 0x3b, 0x2d, 0xa3, 0x81, 0xd1, 0x6e, 0x0c, 0xfb, 0xdb, 0x0b, 0xd2, 0x9e, 0x3e, - 0x10, 0xa4, 0x9d, 0x3c, 0x32, 0x3b, 0xef, 0x64, 0xbf, 0x95, 0x7b, 0x9d, 0x66, 0x11, 0xcf, 0xc9, - 0x44, 0xee, 0xa7, 0xd0, 0x05, 0x7f, 0x46, 0x66, 0x88, 0x48, 0x86, 0xd3, 0x14, 0xcf, 0xf6, 0x94, - 0xdb, 0x79, 0x89, 0xa2, 0x68, 0x2c, 0x7d, 0x43, 0xb6, 0xda, 0x69, 0x99, 0x0e, 0x7a, 0x45, 0x7a, - 0x24, 0x98, 0xd1, 0xc0, 0xfa, 0xca, 0xc0, 0xc0, 0xfa, 0xc1, 0x7e, 0x69, 0x46, 0x62, 0xbf, 0xb4, - 0x86, 0x2f, 0x3b, 0xe2, 0x7e, 0xe9, 0x9d, 0x2c, 0x8c, 0x14, 0xdd, 0x6d, 0x7d, 0x74, 0x1f, 0x96, - 0x92, 0x66, 0xf5, 0x89, 0x4f, 0x76, 0xf6, 0x09, 0x2c, 0x4c, 0x12, 0x40, 0x6e, 0xb1, 0x52, 0xab, - 0x55, 0xd6, 0xf3, 0xc7, 0x48, 0x7c, 0x8d, 0xca, 0x46, 0x3e, 0xa5, 0x4e, 0x41, 0xb6, 0x54, 0x2e, - 0x6b, 0x7a, 0x3e, 0x4d, 0x02, 0x37, 0x95, 0x6a, 0x6b, 0x5a, 0x5e, 0x11, 0xa3, 0x2c, 0x47, 0x1a, - 0xdc, 0x62, 0xdd, 0x49, 0x8a, 0x97, 0x9c, 0xe9, 0x1d, 0x4e, 0x4f, 0xf2, 0xc2, 0xf5, 0x5f, 0x14, - 0xc8, 0xae, 0x63, 0x7b, 0x1b, 0xa3, 0x9f, 0x8c, 0xb1, 0xad, 0xb7, 0x65, 0xda, 0x5d, 0x1a, 0xe6, - 0x2a, 0xd8, 0xd6, 0xe3, 0xd3, 0xd4, 0x1b, 0x61, 0xb6, 0x8b, 0x1b, 0x56, 0xbb, 0xe9, 0x65, 0xa2, - 0xfd, 0x91, 0x98, 0x88, 0x5e, 0x1e, 0x13, 0x32, 0x42, 0xe8, 0x48, 0xf6, 0xe6, 0xe2, 0x00, 0xd3, - 0xaf, 0xd6, 0xe4, 0x81, 0xf9, 0x8e, 0xe2, 0xfe, 0xd4, 0xb9, 0x82, 0x5e, 0x2e, 0xbd, 0xdf, 0x7a, - 0x2b, 0xe4, 0x88, 0x98, 0x7a, 0x63, 0x74, 0xff, 0xfe, 0x98, 0xe5, 0x51, 0x17, 0xe1, 0x44, 0x17, - 0xb7, 0x70, 0xc3, 0xc1, 0x4d, 0x57, 0x75, 0xf5, 0x81, 0x9d, 0xc2, 0xc1, 0xec, 0xe8, 0x33, 0x3c, - 0x80, 0x77, 0x8b, 0x00, 0xde, 0xd4, 0x87, 0x95, 0x6e, 0x83, 0xc2, 0xad, 0x6a, 0xb7, 0x19, 0xd5, - 0x96, 0xe5, 0x2f, 0x83, 0x7b, 0xef, 0xee, 0xb7, 0x1d, 0x67, 0xb7, 0x45, 0xbe, 0x31, 0x5f, 0x7f, - 0xef, 0x5d, 0x5d, 0x80, 0x09, 0xa3, 0x7d, 0x85, 0x7c, 0xca, 0x44, 0xb4, 0xda, 0xcb, 0x84, 0x5e, - 0xed, 0x23, 0x7f, 0xaf, 0x80, 0xfc, 0x63, 0xe5, 0xc8, 0x4d, 0x1e, 0xf8, 0x9f, 0x99, 0x80, 0xec, - 0x86, 0xd1, 0x75, 0x30, 0xfa, 0x7f, 0x15, 0x59, 0xe4, 0x6f, 0x82, 0xb9, 0x2d, 0xab, 0xb1, 0xd7, - 0xc5, 0x4d, 0x51, 0x29, 0x7b, 0x52, 0x47, 0x81, 0xb9, 0x7a, 0x0b, 0xe4, 0xbd, 0x44, 0x56, 0xac, - 0xb7, 0xf1, 0x7e, 0x20, 0x9d, 0xc4, 0xec, 0xed, 0x6e, 0x18, 0xb6, 0x53, 0xd9, 0x22, 0x69, 0x7e, - 0xcc, 0x5e, 0x3e, 0x51, 0x80, 0x3e, 0x17, 0x01, 0xfd, 0x44, 0x38, 0xf4, 0x93, 0x12, 0xd0, 0xab, - 0x05, 0x98, 0xdc, 0x32, 0x5b, 0x98, 0xfc, 0x30, 0x45, 0x7e, 0xe8, 0x37, 0x26, 0x11, 0xde, 0xfb, - 0x63, 0xd2, 0xb2, 0xd9, 0xc2, 0xba, 0xff, 0x9b, 0x37, 0xe5, 0x81, 0x60, 0xca, 0xb3, 0x46, 0x3d, - 0x61, 0x5d, 0xc3, 0xab, 0x6d, 0xec, 0x62, 0x6f, 0xb9, 0xad, 0xcd, 0xce, 0x99, 0x34, 0x0d, 0xc7, - 0x20, 0x60, 0xcc, 0xe8, 0xe4, 0x59, 0xf4, 0x04, 0x51, 0x7a, 0x3d, 0x41, 0x9e, 0xaf, 0xc4, 0xeb, - 0x11, 0x3d, 0x62, 0x43, 0x34, 0xea, 0x82, 0x07, 0x10, 0xb5, 0x14, 0xfd, 0x77, 0x17, 0x98, 0x86, - 0x61, 0x63, 0x67, 0x83, 0xf7, 0xbd, 0xc8, 0xea, 0x62, 0x22, 0x71, 0xc2, 0xeb, 0x56, 0x8d, 0x5d, - 0x4c, 0x2a, 0x2b, 0xba, 0xdf, 0x98, 0x73, 0xd5, 0x81, 0xf4, 0xa0, 0xff, 0xcd, 0x8e, 0xba, 0xff, - 0xed, 0xd7, 0xc6, 0xe4, 0xd5, 0xf0, 0xb5, 0x19, 0x50, 0x8a, 0x7b, 0xce, 0xc3, 0xba, 0xfb, 0xfd, - 0x81, 0xb4, 0x67, 0x0b, 0xeb, 0xcf, 0x42, 0xaf, 0xb4, 0x1e, 0x53, 0xef, 0x1b, 0x53, 0x4a, 0xe4, - 0x3c, 0x68, 0xc2, 0xda, 0x96, 0xbc, 0x8c, 0xbc, 0x4d, 0xf1, 0x5d, 0x23, 0x9f, 0x9b, 0x3a, 0xbc, - 0x69, 0x8e, 0x68, 0xff, 0xc4, 0xf5, 0x0c, 0xfe, 0xbb, 0xd7, 0xf1, 0x64, 0x84, 0x10, 0x5e, 0x64, - 0x43, 0x9d, 0xb0, 0x72, 0x46, 0xa7, 0x2f, 0xe8, 0x95, 0xd2, 0x0e, 0xe3, 0x94, 0x6d, 0x91, 0xce, - 0x83, 0xf1, 0x6c, 0x2a, 0xb9, 0x6b, 0x0b, 0x23, 0xaa, 0x1d, 0x43, 0x0c, 0xb5, 0xf0, 0xc5, 0xc5, - 0x61, 0x10, 0x43, 0xaf, 0x91, 0xde, 0x80, 0xa2, 0xcd, 0x1e, 0xb0, 0xb2, 0x18, 0x8f, 0xdf, 0x72, - 0xdb, 0x53, 0x91, 0x15, 0x27, 0xcf, 0xf1, 0x6f, 0x29, 0x90, 0xa3, 0x9b, 0x8e, 0xe8, 0x2d, 0xa9, - 0x18, 0xf7, 0x3d, 0x3b, 0xa2, 0xd3, 0xa0, 0xff, 0x1e, 0x67, 0xcd, 0x41, 0x70, 0x2e, 0xcc, 0xc4, - 0x72, 0x2e, 0x14, 0x4f, 0x60, 0x4a, 0xe8, 0x11, 0x6d, 0x63, 0xc2, 0xd3, 0xc9, 0x38, 0x1a, 0xd6, - 0x97, 0xa0, 0xe4, 0xf1, 0x7e, 0x41, 0x16, 0x66, 0x68, 0xd5, 0xe7, 0xcd, 0xe6, 0x36, 0x76, 0xd0, - 0xbb, 0xd3, 0x3f, 0x3c, 0xa8, 0xab, 0x65, 0x98, 0xb9, 0x44, 0xc8, 0x5e, 0x33, 0xae, 0x58, 0x7b, - 0x0e, 0x5b, 0xb9, 0xb8, 0x25, 0x72, 0xdd, 0x83, 0xb6, 0x73, 0x81, 0xfe, 0xa1, 0x0b, 0xff, 0xbb, - 0x3c, 0xa6, 0x5b, 0x03, 0xd4, 0x65, 0x2b, 0x47, 0x8c, 0x2c, 0x3e, 0x49, 0x3d, 0x0d, 0xb9, 0x7d, - 0x13, 0x5f, 0x2a, 0x35, 0x99, 0x75, 0xcb, 0xde, 0xd0, 0x1f, 0x4a, 0xef, 0xd4, 0xf2, 0x70, 0x33, - 0x5a, 0x92, 0x95, 0x42, 0xb9, 0xfd, 0xda, 0x81, 0x64, 0x8d, 0xe1, 0x34, 0xb0, 0x78, 0x2d, 0x60, - 0x9c, 0xeb, 0xe6, 0xc3, 0x0c, 0xe7, 0x18, 0x77, 0xfe, 0x53, 0x06, 0x8c, 0xf8, 0xc6, 0x40, 0xb9, - 0x63, 0xfe, 0x03, 0xaa, 0x4e, 0x9e, 0xf3, 0xaf, 0x57, 0x60, 0xaa, 0x8a, 0x9d, 0x65, 0x13, 0xb7, - 0x9a, 0x5d, 0x64, 0x1f, 0xde, 0x34, 0xba, 0x0d, 0x72, 0x5b, 0xa4, 0xb0, 0x41, 0x27, 0x15, 0x58, - 0x36, 0xf4, 0xda, 0xb4, 0xec, 0x1e, 0x30, 0x5b, 0x7d, 0xf3, 0xa8, 0x1d, 0x09, 0x4c, 0x72, 0x3e, - 0xbc, 0xd1, 0x35, 0x27, 0x8f, 0xd2, 0xdb, 0x15, 0x98, 0x61, 0xf7, 0x88, 0x15, 0x5a, 0xe6, 0x76, - 0x1b, 0xed, 0x8d, 0x40, 0x43, 0xd4, 0xc7, 0x43, 0xd6, 0x70, 0x4b, 0x63, 0xee, 0xfc, 0xa8, 0x6f, - 0xe7, 0x49, 0xea, 0xd3, 0x69, 0xc6, 0x18, 0xd1, 0xfc, 0x02, 0xc1, 0xf6, 0x68, 0x1e, 0x63, 0x34, - 0xbf, 0x81, 0x95, 0x27, 0x8f, 0xd8, 0x57, 0x14, 0x38, 0xc9, 0x08, 0x38, 0x87, 0x6d, 0xc7, 0x6c, - 0x18, 0x2d, 0x8a, 0xdc, 0x0b, 0x53, 0xa3, 0x80, 0x6e, 0x15, 0x66, 0xf7, 0xf9, 0x62, 0x19, 0x84, - 0x67, 0xfb, 0x42, 0x28, 0x10, 0xa0, 0x8b, 0x3f, 0xc6, 0x88, 0x8a, 0x26, 0x70, 0x55, 0x28, 0x73, - 0x8c, 0x51, 0xd1, 0xa4, 0x89, 0x48, 0x1e, 0xe2, 0x97, 0x66, 0x68, 0xa0, 0xc0, 0xa0, 0xfb, 0xfc, - 0x4b, 0x69, 0x6c, 0x37, 0x61, 0x9a, 0x60, 0x49, 0x7f, 0x64, 0xcb, 0x10, 0x11, 0x42, 0xec, 0xf7, - 0x3b, 0xec, 0xea, 0x22, 0xff, 0x5f, 0x9d, 0x2f, 0x07, 0x9d, 0x07, 0x08, 0x3e, 0xf1, 0x9d, 0x74, - 0x2a, 0xac, 0x93, 0x4e, 0xcb, 0x75, 0xd2, 0x6f, 0x96, 0x0e, 0x73, 0xd2, 0x9f, 0xec, 0xc3, 0x8b, - 0x87, 0x5c, 0x80, 0x8b, 0xc1, 0xb5, 0x27, 0x2f, 0x17, 0xaf, 0xce, 0xf4, 0x5e, 0x18, 0xfd, 0x91, - 0x91, 0xcc, 0xa7, 0xf8, 0xfe, 0x40, 0xe9, 0xe9, 0x0f, 0x0e, 0x61, 0x49, 0xdf, 0x0c, 0xc7, 0x69, - 0x15, 0x45, 0x9f, 0x2c, 0x1a, 0x30, 0xbc, 0x37, 0x19, 0x7d, 0x74, 0x08, 0x21, 0x18, 0x74, 0x9b, - 0x75, 0x54, 0x27, 0x17, 0xcf, 0xd8, 0x8d, 0x2b, 0x20, 0x47, 0x77, 0x09, 0xf6, 0x37, 0x33, 0xd4, - 0xda, 0xdd, 0x24, 0xb7, 0x4b, 0xa1, 0x2f, 0x66, 0x46, 0x31, 0x22, 0xdc, 0x07, 0x19, 0xe2, 0xd4, - 0xae, 0x84, 0x2e, 0x69, 0x04, 0x55, 0x06, 0x57, 0x7f, 0xe1, 0xcb, 0xce, 0xea, 0x31, 0x9d, 0xfc, - 0xa9, 0xde, 0x02, 0xc7, 0x2f, 0x18, 0x8d, 0x8b, 0xdb, 0xb6, 0xb5, 0x47, 0xee, 0xe1, 0xb1, 0xd8, - 0x85, 0x3e, 0xe4, 0x62, 0x34, 0xf1, 0x83, 0x7a, 0xbb, 0x67, 0x3a, 0x64, 0x07, 0x99, 0x0e, 0xab, - 0xc7, 0x98, 0xf1, 0xa0, 0x3e, 0xc1, 0xef, 0x74, 0x72, 0x91, 0x9d, 0xce, 0xea, 0x31, 0xaf, 0xdb, - 0x51, 0x97, 0x60, 0xb2, 0x69, 0xee, 0x93, 0xad, 0x6a, 0x32, 0xeb, 0x1a, 0x74, 0xe8, 0x78, 0xc9, - 0xdc, 0xa7, 0x1b, 0xdb, 0xab, 0xc7, 0x74, 0xff, 0x4f, 0x75, 0x05, 0xa6, 0xc8, 0xb6, 0x00, 0x29, - 0x66, 0x32, 0xd6, 0x81, 0xe2, 0xd5, 0x63, 0x7a, 0xf0, 0xaf, 0x6b, 0x7d, 0x64, 0xc8, 0x69, 0x8f, - 0x7b, 0xbd, 0xed, 0xf6, 0x54, 0xac, 0xed, 0x76, 0x97, 0x17, 0x74, 0xc3, 0xfd, 0x34, 0x64, 0x1b, - 0x84, 0xc3, 0x69, 0xc6, 0x61, 0xfa, 0xaa, 0xde, 0x0d, 0x99, 0x5d, 0xc3, 0xf6, 0x26, 0xcf, 0x37, - 0x0d, 0x2e, 0x77, 0xdd, 0xb0, 0x2f, 0xba, 0x08, 0xba, 0x7f, 0x2d, 0x4e, 0x40, 0x96, 0x30, 0xce, - 0x7f, 0x40, 0x6f, 0xcb, 0x50, 0x33, 0xa4, 0x68, 0xb5, 0xdd, 0x61, 0xbf, 0x66, 0x79, 0x47, 0x62, - 0xfe, 0x30, 0x35, 0x1a, 0x0b, 0xb2, 0xef, 0x0d, 0xcb, 0x4a, 0xe8, 0x0d, 0xcb, 0x3d, 0x57, 0x7d, - 0x66, 0x7a, 0xaf, 0xfa, 0x0c, 0x96, 0x0f, 0xb2, 0x83, 0x1d, 0x55, 0x3e, 0x33, 0x84, 0xe9, 0xd2, - 0xcb, 0x88, 0xf0, 0x19, 0x78, 0xcb, 0x6c, 0x73, 0x6d, 0xf6, 0x5e, 0x63, 0x76, 0x4a, 0x71, 0x8d, - 0x9a, 0x01, 0xe4, 0x25, 0xdf, 0x37, 0xfd, 0x46, 0x06, 0xe6, 0xe9, 0x85, 0xb2, 0xfb, 0xb8, 0x66, - 0x89, 0x37, 0xdf, 0xa1, 0x4f, 0x8e, 0x44, 0x68, 0xfa, 0x0c, 0x38, 0x4a, 0xdf, 0x01, 0xe7, 0xc0, - 0xb1, 0xe4, 0xcc, 0x80, 0x63, 0xc9, 0xd9, 0x78, 0x2b, 0x87, 0xbf, 0xcf, 0xcb, 0xcf, 0x86, 0x28, - 0x3f, 0x77, 0x85, 0x00, 0xd4, 0x8f, 0x2f, 0x23, 0xb1, 0x6f, 0xde, 0xe9, 0x4b, 0x4a, 0x55, 0x90, - 0x94, 0x7b, 0x87, 0x27, 0x24, 0x79, 0x69, 0xf9, 0xbd, 0x0c, 0x5c, 0x15, 0x10, 0x53, 0xc6, 0x97, - 0x98, 0xa0, 0x7c, 0x7e, 0x24, 0x82, 0x12, 0x3f, 0xea, 0x41, 0xd2, 0x12, 0xf3, 0xa7, 0xd2, 0xa7, - 0x85, 0x7a, 0x81, 0xf2, 0x79, 0x13, 0x22, 0x2c, 0xa7, 0x21, 0x47, 0x7b, 0x18, 0x06, 0x0d, 0x7b, - 0x8b, 0xd9, 0xdd, 0xc8, 0x9d, 0x31, 0x92, 0xa5, 0x6d, 0x0c, 0xf2, 0xc3, 0xd6, 0x35, 0x6a, 0x7b, - 0x76, 0xbb, 0xd4, 0x76, 0x2c, 0xf4, 0xd3, 0x23, 0x11, 0x1c, 0xdf, 0x1b, 0x4e, 0x19, 0xc6, 0x1b, - 0x6e, 0xa8, 0x55, 0x0e, 0xaf, 0x05, 0x47, 0xb2, 0xca, 0x11, 0x52, 0x79, 0xf2, 0xf8, 0xbd, 0x43, - 0xa1, 0x97, 0xcb, 0x57, 0xb1, 0xb3, 0x28, 0x5a, 0x88, 0xe8, 0x81, 0x51, 0x00, 0x79, 0xd2, 0x33, - 0x93, 0xd8, 0xe5, 0x47, 0xe4, 0x45, 0x3c, 0x1b, 0x15, 0x19, 0x66, 0x5f, 0x98, 0x0e, 0xf6, 0x50, - 0x38, 0x12, 0xa4, 0xe4, 0xa2, 0xeb, 0xc7, 0x20, 0x23, 0x79, 0xcc, 0x5e, 0xac, 0x40, 0x8e, 0x5d, - 0x24, 0xbe, 0x99, 0x88, 0xc3, 0x84, 0x18, 0x6c, 0x57, 0x62, 0x47, 0x2e, 0xf6, 0x75, 0xdb, 0xc9, - 0xed, 0xc5, 0x1d, 0xd1, 0x7d, 0xda, 0xdf, 0x49, 0xc3, 0x74, 0x15, 0x3b, 0x45, 0xc3, 0xb6, 0x4d, - 0x63, 0x7b, 0x54, 0x1e, 0xdf, 0xb2, 0xde, 0xc3, 0xe8, 0xbb, 0x29, 0xd9, 0x93, 0x37, 0xfe, 0x42, - 0xb8, 0x47, 0x6a, 0x48, 0x14, 0x40, 0xb9, 0x8b, 0xcc, 0x07, 0x95, 0x36, 0x06, 0x8f, 0xed, 0x34, - 0x4c, 0x78, 0xa7, 0xef, 0x6e, 0x13, 0x4e, 0x64, 0xee, 0x38, 0xbb, 0xde, 0x81, 0x19, 0xf2, 0x7c, - 0xf0, 0xd4, 0x17, 0x7a, 0x55, 0x4c, 0x47, 0xf9, 0xe8, 0xa3, 0x83, 0xf1, 0x74, 0x2c, 0x8e, 0x3b, - 0xfc, 0x51, 0x1d, 0x16, 0xfc, 0x9d, 0x09, 0xb6, 0x1c, 0xb9, 0x66, 0x38, 0xf8, 0x32, 0xfa, 0x4b, - 0x05, 0x26, 0xaa, 0xd8, 0x71, 0xc7, 0x5b, 0x97, 0xfc, 0x43, 0x4b, 0xb8, 0xca, 0xad, 0x78, 0x4c, - 0xb1, 0x35, 0x8c, 0x67, 0xc0, 0x54, 0xc7, 0xb6, 0x1a, 0xb8, 0xdb, 0x65, 0xab, 0x17, 0xbc, 0xa3, - 0x5a, 0xbf, 0xd1, 0x9f, 0x90, 0xb6, 0xb0, 0xe1, 0xfd, 0xa3, 0x07, 0xbf, 0xc7, 0x35, 0x03, 0x68, - 0x49, 0xac, 0x81, 0xe3, 0x36, 0x03, 0xa2, 0x2a, 0x4f, 0x1e, 0xe8, 0xcf, 0x2a, 0x30, 0x53, 0xc5, - 0x8e, 0xcf, 0xc5, 0x18, 0x9b, 0x1c, 0xe1, 0xf0, 0x0a, 0x50, 0x2a, 0x87, 0x83, 0x52, 0xfe, 0x86, - 0x36, 0x91, 0x9b, 0x7e, 0x61, 0x63, 0xbc, 0xa1, 0x4d, 0x8e, 0x82, 0xe4, 0x41, 0xfd, 0xad, 0x47, - 0xc3, 0x14, 0xa1, 0x85, 0x28, 0xec, 0xcf, 0x67, 0x02, 0xe5, 0xfd, 0x42, 0x42, 0xca, 0x7b, 0x0f, - 0x64, 0xc9, 0xb5, 0xf1, 0x44, 0x71, 0xa7, 0x65, 0xcc, 0xf6, 0x75, 0x37, 0xbb, 0x4e, 0xff, 0xea, - 0xef, 0xa7, 0x99, 0x8d, 0xe7, 0xa7, 0xf9, 0xc6, 0x74, 0xac, 0x91, 0x90, 0xce, 0x1d, 0x46, 0xa8, - 0xf2, 0x31, 0xc6, 0xcd, 0x88, 0xba, 0x93, 0x17, 0x8e, 0x17, 0x2a, 0x30, 0xe9, 0x8e, 0xdb, 0xc4, - 0x1e, 0x3f, 0x7f, 0x78, 0x71, 0xe8, 0x6f, 0xe8, 0xc7, 0xec, 0x81, 0x3d, 0x8e, 0x8c, 0xce, 0xbc, - 0x8f, 0xd1, 0x03, 0x47, 0x55, 0x9e, 0x3c, 0x1e, 0xef, 0xa2, 0x78, 0x10, 0x7d, 0x40, 0x6f, 0x52, - 0x40, 0x59, 0xc1, 0xce, 0xb8, 0xad, 0xc8, 0xb7, 0x4b, 0x07, 0x35, 0x12, 0x18, 0x46, 0x68, 0x5e, - 0x58, 0xc1, 0xa3, 0x51, 0x20, 0xb9, 0x68, 0x46, 0x52, 0x04, 0x24, 0x8f, 0xda, 0xfb, 0x28, 0x6a, - 0x74, 0x73, 0xe1, 0xa7, 0x46, 0xd0, 0xab, 0x8e, 0x77, 0xe1, 0xc3, 0x63, 0x20, 0x29, 0xe3, 0xa8, - 0xf4, 0xad, 0x5f, 0xe5, 0x63, 0xb9, 0x11, 0x0d, 0x5c, 0x65, 0xdf, 0xc1, 0x8d, 0x8b, 0xb8, 0x89, - 0x7e, 0xfc, 0xf0, 0xd0, 0xcd, 0xc3, 0x44, 0x83, 0x96, 0x46, 0xc0, 0x9b, 0xd4, 0xbd, 0xd7, 0x18, - 0xd7, 0xfb, 0x8a, 0x1d, 0x11, 0xfd, 0x7d, 0x8c, 0xd7, 0xfb, 0x4a, 0x54, 0x3f, 0x06, 0xb3, 0x85, - 0xce, 0x32, 0x4a, 0x0d, 0xab, 0x8d, 0xfe, 0xe3, 0xe1, 0x61, 0xb9, 0x16, 0xa6, 0xcc, 0x86, 0xd5, - 0x2e, 0xed, 0x7a, 0x61, 0x00, 0xa7, 0xf4, 0x20, 0xc1, 0xfb, 0xaa, 0xed, 0x5a, 0x0f, 0x9a, 0xde, - 0x35, 0xdb, 0x7e, 0xc2, 0xb0, 0xc6, 0x84, 0x4b, 0xfa, 0x51, 0x19, 0x13, 0x7d, 0xea, 0x4e, 0x1e, - 0xb2, 0x8f, 0x06, 0xde, 0x6d, 0xb4, 0x2b, 0x7c, 0x58, 0xac, 0x02, 0x0f, 0x33, 0x9c, 0xf1, 0xad, - 0x38, 0x92, 0xe1, 0x2c, 0x82, 0x80, 0x31, 0xdc, 0x44, 0x12, 0xe0, 0x98, 0xf8, 0x1a, 0xf0, 0x21, - 0xd0, 0x19, 0x9d, 0x79, 0x38, 0x24, 0x3a, 0x47, 0x63, 0x22, 0x7e, 0x90, 0x05, 0xc5, 0x64, 0x16, - 0x0f, 0xfa, 0x4f, 0xa3, 0x00, 0xe7, 0xae, 0x61, 0xfc, 0x15, 0xa8, 0xb7, 0x42, 0x8c, 0x8b, 0x89, - 0x0f, 0x70, 0xd0, 0x2d, 0x65, 0x8c, 0x57, 0x76, 0xcb, 0xd4, 0x9f, 0x3c, 0x80, 0x3f, 0xa7, 0xc0, - 0x1c, 0xf1, 0x11, 0x68, 0x61, 0xc3, 0xa6, 0x1d, 0xe5, 0x48, 0x1c, 0xe5, 0xdf, 0x25, 0x1d, 0x0a, - 0x48, 0xe4, 0x43, 0x40, 0xc7, 0x48, 0xa0, 0x90, 0x8b, 0x03, 0x24, 0x49, 0xc2, 0x58, 0xb6, 0x51, - 0xf2, 0x3e, 0x09, 0x4c, 0xc4, 0x47, 0x83, 0x47, 0x4c, 0x8f, 0x5c, 0x91, 0x19, 0x9e, 0xb2, 0x8d, - 0xd9, 0x23, 0x57, 0x86, 0x88, 0xe4, 0x31, 0x79, 0xd3, 0xe3, 0xd9, 0x82, 0x73, 0x8d, 0xdc, 0xdb, - 0xfd, 0x9a, 0x8c, 0x7f, 0xa2, 0xed, 0xb3, 0x23, 0xf1, 0xc0, 0x3c, 0x44, 0x08, 0x7c, 0x15, 0x32, - 0xb6, 0x75, 0x89, 0x2e, 0x6d, 0xcd, 0xea, 0xe4, 0x99, 0x98, 0xfc, 0x56, 0x6b, 0x6f, 0xb7, 0x4d, - 0x4f, 0x86, 0xce, 0xea, 0xde, 0xab, 0x7a, 0x23, 0xcc, 0x5e, 0x32, 0x9d, 0x9d, 0x55, 0x6c, 0x34, - 0xb1, 0xad, 0x5b, 0x97, 0x88, 0xc7, 0xdc, 0xa4, 0x2e, 0x26, 0x8a, 0xfe, 0x2b, 0x12, 0xf6, 0x25, - 0xb9, 0xcc, 0x7b, 0x2c, 0xc7, 0xdf, 0xe2, 0x58, 0x9e, 0xe1, 0x54, 0x25, 0x2f, 0x30, 0xef, 0x57, - 0x60, 0x4a, 0xb7, 0x2e, 0x31, 0x21, 0xf9, 0xbf, 0x8f, 0x56, 0x46, 0x62, 0x4f, 0xf4, 0xe8, 0xe5, - 0xec, 0x1e, 0xf9, 0x63, 0x9f, 0xe8, 0x45, 0x56, 0x3f, 0x96, 0x93, 0x4b, 0x33, 0xba, 0x75, 0xa9, - 0x8a, 0x1d, 0xaa, 0x11, 0xa8, 0x3e, 0x22, 0x27, 0x6b, 0xb3, 0x4b, 0x0b, 0x64, 0xf3, 0x70, 0xff, - 0x3d, 0xee, 0x2e, 0x82, 0xcf, 0x20, 0x9f, 0xc4, 0x71, 0xef, 0x22, 0x0c, 0xa4, 0x60, 0x0c, 0x31, - 0x52, 0x14, 0x98, 0xd6, 0xad, 0x4b, 0xee, 0xd0, 0xb0, 0x6c, 0xb6, 0x5a, 0xa3, 0x19, 0x21, 0xe3, - 0x1a, 0xff, 0x1e, 0x1b, 0x3c, 0x2a, 0xc6, 0x6e, 0xfc, 0x0f, 0x20, 0x20, 0x79, 0x18, 0x9e, 0x4f, - 0x95, 0xc5, 0x1b, 0xa1, 0xdb, 0xa3, 0xc1, 0x61, 0x58, 0x85, 0xf0, 0xc9, 0x38, 0x32, 0x85, 0x08, - 0xa3, 0x60, 0x2c, 0x3b, 0x27, 0x73, 0x45, 0x32, 0xcc, 0x8f, 0x56, 0x27, 0xde, 0x13, 0xcf, 0x35, - 0x91, 0x0d, 0xbb, 0x02, 0x21, 0x23, 0x41, 0x23, 0x86, 0x0b, 0xa2, 0x04, 0x0d, 0xc9, 0xe3, 0xf1, - 0x21, 0x05, 0x66, 0x28, 0x09, 0x0f, 0x13, 0x2b, 0x60, 0x28, 0xa5, 0xe2, 0x5b, 0x70, 0x34, 0x4a, - 0x15, 0x41, 0xc1, 0x58, 0xee, 0xf3, 0x74, 0xed, 0xb8, 0x21, 0x8e, 0x8f, 0x87, 0x21, 0x38, 0xb4, - 0x31, 0x36, 0xc2, 0x23, 0xe4, 0xc3, 0x18, 0x63, 0x47, 0x74, 0x8c, 0xfc, 0xf9, 0xbe, 0x16, 0x8d, - 0x12, 0x83, 0x43, 0xa8, 0xc2, 0x08, 0x61, 0x18, 0x52, 0x15, 0x8e, 0x08, 0x89, 0xaf, 0x2a, 0x00, - 0x94, 0x80, 0x75, 0x6b, 0x9f, 0x5c, 0xdf, 0x33, 0x82, 0xee, 0xac, 0xd7, 0xad, 0x5e, 0x19, 0xe0, - 0x56, 0x1f, 0x33, 0x84, 0x4b, 0xdc, 0x95, 0x40, 0x8e, 0xcb, 0x6e, 0x23, 0xc7, 0xbe, 0x12, 0x18, - 0x5d, 0x7f, 0xf2, 0x18, 0x7f, 0x99, 0x5a, 0x73, 0xc1, 0x01, 0xd3, 0x5f, 0x1e, 0x09, 0xca, 0xdc, - 0xec, 0x5f, 0x11, 0x67, 0xff, 0x87, 0xc0, 0x76, 0x58, 0x1b, 0x71, 0xd0, 0xc1, 0xd1, 0xe4, 0x6d, - 0xc4, 0xa3, 0x3b, 0x20, 0xfa, 0x53, 0x19, 0x38, 0xce, 0x3a, 0x91, 0x1f, 0x06, 0x88, 0x63, 0x9e, - 0xc3, 0x13, 0x3a, 0xc9, 0x01, 0x28, 0x8f, 0x6a, 0x41, 0x2a, 0xce, 0x52, 0xa6, 0x04, 0x79, 0x63, - 0x59, 0xdd, 0xc8, 0x69, 0x97, 0x3b, 0x46, 0xbb, 0x29, 0x1f, 0xee, 0x77, 0x00, 0xf0, 0xde, 0x5a, - 0xa3, 0x22, 0xae, 0x35, 0xf6, 0x59, 0x99, 0x8c, 0xbd, 0x73, 0x4d, 0x58, 0x46, 0xc9, 0x1d, 0xfb, - 0xce, 0x75, 0x78, 0xdd, 0xc9, 0xa3, 0xf4, 0x1e, 0x05, 0x32, 0x55, 0xcb, 0x76, 0xd0, 0x43, 0x71, - 0xb4, 0x93, 0x72, 0x3e, 0x00, 0xc9, 0x7b, 0x57, 0x8b, 0xc2, 0xfd, 0xca, 0xb7, 0x45, 0x1f, 0x75, - 0x36, 0x1c, 0x83, 0x78, 0x75, 0xbb, 0xf5, 0x73, 0x17, 0x2d, 0xc7, 0x8d, 0xa7, 0x43, 0xf9, 0x57, - 0x0d, 0x3f, 0x80, 0x91, 0x58, 0x3c, 0x9d, 0xd0, 0x9a, 0x93, 0xc7, 0xed, 0xbf, 0xcd, 0x31, 0xdf, - 0xd6, 0x65, 0xb3, 0x85, 0xd1, 0x43, 0xd4, 0x65, 0xa4, 0x6c, 0xec, 0x62, 0xf9, 0x23, 0x31, 0x91, - 0xae, 0xad, 0x24, 0xbe, 0xac, 0x12, 0xc4, 0x97, 0x8d, 0xab, 0x50, 0xf4, 0x00, 0x3a, 0x25, 0x69, - 0xdc, 0x0a, 0x15, 0x51, 0xf7, 0x58, 0xe2, 0x74, 0x9e, 0xa8, 0x62, 0x87, 0x1a, 0x95, 0x15, 0xef, - 0xae, 0x96, 0x9f, 0x18, 0x49, 0xc4, 0x4e, 0xff, 0x2a, 0x18, 0xa5, 0xe7, 0x2a, 0x98, 0xf7, 0xf3, - 0xe0, 0xac, 0x8b, 0xe0, 0x3c, 0x25, 0x9c, 0x41, 0x22, 0x91, 0x23, 0x81, 0xe9, 0xed, 0x3e, 0x4c, - 0x1b, 0x02, 0x4c, 0x77, 0x0f, 0x49, 0x45, 0xf2, 0x80, 0x7d, 0xc1, 0x35, 0x55, 0xc8, 0xa4, 0xbf, - 0xd0, 0x6e, 0xb2, 0x08, 0xab, 0xff, 0x78, 0xd4, 0x9b, 0x6d, 0x07, 0x43, 0xb0, 0x0a, 0xb1, 0x9c, - 0xb3, 0xbd, 0xf7, 0xda, 0x2f, 0xd2, 0x70, 0xae, 0x6e, 0x27, 0x4a, 0x76, 0xda, 0xe4, 0xef, 0xb6, - 0xf7, 0xff, 0x43, 0x7f, 0x16, 0x6f, 0xfd, 0x8d, 0x14, 0xd1, 0xc3, 0xb8, 0x84, 0x6d, 0xa0, 0x18, - 0x2b, 0x73, 0x12, 0xd4, 0xfd, 0xfb, 0x70, 0x0b, 0x0b, 0x22, 0x81, 0x0c, 0xe9, 0x16, 0x46, 0x0a, - 0x38, 0x4a, 0xb7, 0xb0, 0x41, 0x04, 0x8c, 0xe1, 0x3e, 0xfa, 0x2c, 0xdb, 0x95, 0x27, 0x3e, 0x93, - 0xe8, 0xaf, 0xd3, 0x89, 0x8f, 0xb6, 0xdf, 0x4b, 0xc5, 0xf2, 0x63, 0x26, 0x74, 0x45, 0x0f, 0xb7, - 0x71, 0x3c, 0x93, 0xa3, 0x8a, 0x1b, 0xc3, 0xfa, 0x4f, 0x9a, 0xf8, 0x94, 0x9f, 0x37, 0x9b, 0xce, - 0xce, 0x88, 0x4e, 0x66, 0x5c, 0x72, 0xcb, 0xf2, 0x2e, 0x36, 0x26, 0x2f, 0xe8, 0x5f, 0x52, 0xb1, - 0x42, 0x41, 0xf9, 0x2c, 0x21, 0x64, 0x85, 0xb0, 0x38, 0x46, 0x00, 0xa7, 0xc8, 0xf2, 0xc6, 0x28, - 0xd1, 0xe7, 0xcc, 0x26, 0xb6, 0x1e, 0x86, 0x12, 0x4d, 0xe8, 0x1a, 0x9d, 0x44, 0x47, 0x15, 0xf7, - 0xef, 0x54, 0xa2, 0x7d, 0x96, 0x8c, 0x48, 0xa2, 0x23, 0xcb, 0x4b, 0x9e, 0xc7, 0xaf, 0x9a, 0x61, - 0x13, 0xa2, 0x35, 0xb3, 0x7d, 0x11, 0xfd, 0x53, 0xce, 0xbb, 0x52, 0xf9, 0xbc, 0xe9, 0xec, 0xb0, - 0x98, 0x2e, 0xbf, 0x27, 0x7d, 0xc7, 0xc9, 0x10, 0x71, 0x5b, 0xc4, 0xb0, 0x50, 0xd9, 0x03, 0x61, - 0xa1, 0x0a, 0x30, 0x6b, 0xb6, 0x1d, 0x6c, 0xb7, 0x8d, 0xd6, 0x72, 0xcb, 0xd8, 0xee, 0xce, 0x4f, - 0xf4, 0xbd, 0x84, 0xae, 0xc4, 0xe5, 0xd1, 0xc5, 0x3f, 0xf8, 0x8b, 0x27, 0x27, 0xc5, 0x0b, 0xf4, - 0x43, 0xa2, 0x58, 0x4d, 0x85, 0x47, 0xb1, 0xf2, 0xa3, 0x54, 0xc1, 0xe0, 0x20, 0xd7, 0xb2, 0x36, - 0x6e, 0xcc, 0xb0, 0x7d, 0xb7, 0x49, 0x46, 0x53, 0xf3, 0x43, 0x38, 0xfe, 0xaa, 0x12, 0x6b, 0x95, - 0xce, 0x15, 0x84, 0x85, 0x5e, 0x21, 0x88, 0x6d, 0xa1, 0xf2, 0x8d, 0x57, 0x7a, 0x1a, 0xef, 0x9b, - 0x3c, 0x19, 0x09, 0x93, 0x87, 0x17, 0xaa, 0xac, 0x9c, 0x50, 0xc5, 0x59, 0xf4, 0x93, 0x69, 0xed, - 0x18, 0x4e, 0x15, 0x65, 0xe1, 0x84, 0x17, 0xb5, 0xb6, 0xd3, 0xc1, 0x86, 0x6d, 0xb4, 0x1b, 0x18, - 0x7d, 0x34, 0x3d, 0x0a, 0xb3, 0x77, 0x19, 0x26, 0xcd, 0x86, 0xd5, 0xae, 0x9a, 0xcf, 0xf2, 0x2e, - 0x89, 0x8b, 0x0e, 0x96, 0x4e, 0x38, 0x52, 0x62, 0x7f, 0xe8, 0xfe, 0xbf, 0x6a, 0x09, 0xa6, 0x1a, - 0x86, 0xdd, 0xa4, 0xc1, 0xf4, 0xb2, 0x3d, 0x17, 0x32, 0x85, 0x16, 0x54, 0xf4, 0x7e, 0xd1, 0x83, - 0xbf, 0xd5, 0x8a, 0xc8, 0xc4, 0x5c, 0x4f, 0x54, 0x8e, 0xd0, 0xc2, 0x96, 0x82, 0x9f, 0x04, 0x9e, - 0xbb, 0xdc, 0xb1, 0x71, 0x8b, 0xdc, 0x1e, 0x4f, 0x7b, 0x88, 0x29, 0x3d, 0x48, 0x88, 0x3b, 0xcd, - 0x27, 0x55, 0x1d, 0x40, 0x63, 0xdc, 0xd3, 0x7c, 0x29, 0x2a, 0x92, 0x97, 0xcc, 0x77, 0xe6, 0x60, - 0x96, 0xf6, 0x6a, 0x8c, 0x9d, 0xe8, 0xe7, 0xc8, 0xe5, 0xcf, 0xce, 0xfd, 0xf8, 0x0a, 0xaa, 0x1e, - 0x7e, 0x4c, 0xce, 0x83, 0x72, 0xd1, 0x0f, 0x1c, 0xe8, 0x3e, 0xc6, 0xdd, 0x7f, 0xf7, 0xe8, 0x5a, - 0xa0, 0x34, 0x8d, 0x7b, 0xff, 0x3d, 0xba, 0xfa, 0xe4, 0xf1, 0xf9, 0x45, 0x05, 0x94, 0x42, 0xb3, - 0x89, 0x1a, 0x87, 0x87, 0xe2, 0x7a, 0x98, 0xf6, 0x74, 0x26, 0x88, 0xe5, 0xc8, 0x27, 0xc5, 0x5d, - 0xcc, 0xf4, 0x79, 0x53, 0x68, 0x8e, 0x7d, 0x77, 0x20, 0xa2, 0xee, 0xe4, 0x41, 0xf9, 0xe5, 0x09, - 0xa6, 0x34, 0x8b, 0x96, 0x75, 0x91, 0x1c, 0x79, 0x79, 0x48, 0x81, 0xec, 0x32, 0x76, 0x1a, 0x3b, - 0x23, 0xd2, 0x99, 0x3d, 0xbb, 0xe5, 0xe9, 0xcc, 0x81, 0x9b, 0xec, 0x07, 0xdb, 0xb0, 0x1e, 0x59, - 0x0b, 0x84, 0xa4, 0x71, 0x47, 0x69, 0x8e, 0xac, 0x3d, 0x79, 0x70, 0xfe, 0x45, 0x81, 0x39, 0x7f, - 0x85, 0x8b, 0x62, 0xf2, 0x0b, 0x0f, 0xbb, 0x75, 0x4b, 0xf4, 0xf9, 0x78, 0xa1, 0xce, 0x7c, 0x9e, - 0x8a, 0x2d, 0x4b, 0x78, 0x61, 0x31, 0x46, 0x10, 0x34, 0x39, 0x02, 0xc7, 0x30, 0x83, 0x57, 0x60, - 0x92, 0x10, 0xb4, 0x64, 0xee, 0x13, 0x17, 0x40, 0x61, 0xa1, 0xf1, 0xd9, 0x23, 0x59, 0x68, 0xbc, - 0x5b, 0x5c, 0x68, 0x94, 0x8c, 0x5c, 0xec, 0xad, 0x33, 0xc6, 0xf4, 0x89, 0x71, 0xff, 0x1f, 0xf9, - 0x32, 0x63, 0x0c, 0x9f, 0x98, 0x01, 0xf5, 0x27, 0x8f, 0xe8, 0x27, 0xeb, 0xac, 0xb3, 0xf5, 0x36, - 0x46, 0xd1, 0x7f, 0x3b, 0x01, 0x99, 0x73, 0xee, 0xc3, 0xff, 0x0c, 0x6e, 0xb6, 0x7a, 0xf9, 0x08, - 0x82, 0x2c, 0x3c, 0x1d, 0x32, 0x6e, 0xf9, 0x6c, 0xda, 0x72, 0x8b, 0xdc, 0x2e, 0xad, 0x4b, 0x88, - 0x4e, 0xfe, 0x53, 0x4f, 0x43, 0xae, 0x6b, 0xed, 0xd9, 0x0d, 0xd7, 0x7c, 0x76, 0x25, 0x86, 0xbd, - 0xc5, 0x0d, 0x2e, 0x2a, 0x14, 0xbd, 0x30, 0x3a, 0xd7, 0x4f, 0xee, 0xa2, 0x23, 0x45, 0xb8, 0xe8, - 0x28, 0xc6, 0xfe, 0x81, 0x04, 0x6d, 0xc9, 0x4b, 0xc4, 0x5f, 0x93, 0x3b, 0xff, 0x9a, 0xa3, 0x82, - 0x3d, 0x84, 0x2d, 0x87, 0x15, 0x87, 0xb8, 0x8e, 0xdb, 0x22, 0x6b, 0xfd, 0x78, 0xee, 0x63, 0x75, - 0xdc, 0x96, 0xa0, 0x61, 0x2c, 0xa7, 0xcd, 0x73, 0xcc, 0xd9, 0xf4, 0x81, 0x51, 0xa2, 0x9b, 0x11, - 0x84, 0xfe, 0x50, 0xe8, 0x8c, 0xd0, 0x09, 0x75, 0x68, 0x74, 0x8e, 0xc8, 0x0d, 0xf5, 0x8f, 0x14, - 0x12, 0xd1, 0xd2, 0x33, 0x72, 0xe4, 0x2f, 0x2c, 0x8a, 0x0d, 0x91, 0x3b, 0x06, 0x0b, 0xf1, 0x9c, - 0x67, 0x87, 0x0f, 0xf1, 0x2d, 0xb2, 0x8e, 0xa3, 0x7f, 0xdc, 0x21, 0xbe, 0x65, 0x09, 0x49, 0x1e, - 0xc8, 0x37, 0xd0, 0x0b, 0xc2, 0x0a, 0x0d, 0xc7, 0xdc, 0x1f, 0xb1, 0xa6, 0x89, 0xc3, 0x4b, 0xcc, - 0xa8, 0xbe, 0x07, 0x38, 0x44, 0x29, 0x1c, 0x77, 0x54, 0x5f, 0x39, 0x32, 0xc6, 0x70, 0x1c, 0x1d, - 0x5c, 0xee, 0xb1, 0xb5, 0x99, 0x37, 0xb1, 0xd5, 0x00, 0x7c, 0x78, 0xb4, 0xce, 0xc2, 0x0c, 0x37, - 0xf5, 0xf7, 0x2e, 0x9e, 0x11, 0xd2, 0xe2, 0x1e, 0x58, 0xf7, 0x59, 0x36, 0xf2, 0x85, 0x81, 0x18, - 0x0b, 0xbe, 0x32, 0x44, 0x8c, 0xe5, 0x5e, 0x37, 0x6f, 0x0c, 0x1b, 0x13, 0x56, 0xbf, 0xc7, 0x63, - 0x55, 0x11, 0xb1, 0xba, 0x53, 0x86, 0x4d, 0x72, 0x63, 0x9a, 0xd4, 0xbc, 0xf1, 0x1d, 0x3e, 0x5c, - 0xba, 0x00, 0xd7, 0xd3, 0x87, 0xa6, 0x23, 0x79, 0xc4, 0xde, 0xac, 0xd0, 0xcb, 0x9d, 0x0a, 0xfb, - 0x86, 0xd9, 0x22, 0x51, 0x06, 0x46, 0x70, 0x39, 0xf1, 0x9f, 0xf3, 0xa0, 0x9c, 0x13, 0x41, 0xb9, - 0x4f, 0x86, 0x19, 0x02, 0x45, 0x21, 0xd8, 0x3c, 0x89, 0x5f, 0x1c, 0xa7, 0x21, 0x86, 0xaf, 0xee, - 0x0d, 0xe7, 0xc7, 0xbe, 0xf3, 0xab, 0xe6, 0xbf, 0xed, 0x83, 0xf4, 0x80, 0x00, 0x92, 0x76, 0x58, - 0xba, 0x92, 0xc7, 0xea, 0x15, 0x74, 0xe8, 0xaa, 0xd2, 0xe9, 0xd5, 0x68, 0x86, 0x2e, 0x36, 0x73, - 0x53, 0x84, 0x99, 0x5b, 0xcc, 0x33, 0x0e, 0x81, 0xeb, 0xae, 0x47, 0xdc, 0x20, 0x75, 0xca, 0x8c, - 0xf8, 0x8c, 0xc3, 0x40, 0x0a, 0x92, 0x07, 0xe7, 0x1f, 0x14, 0x80, 0x15, 0xdb, 0xda, 0xeb, 0x54, - 0xec, 0x26, 0xb6, 0xd1, 0xdf, 0x06, 0x93, 0xb5, 0x97, 0x8c, 0x60, 0xb2, 0xb6, 0x01, 0xb0, 0xed, - 0x17, 0xce, 0x7a, 0xa3, 0xc7, 0xcb, 0x4d, 0xcd, 0x02, 0xa2, 0x74, 0xae, 0x0c, 0xf1, 0x9a, 0xdf, - 0x1f, 0x15, 0x31, 0x8e, 0x1a, 0x5f, 0x82, 0xe2, 0x46, 0x39, 0x59, 0x7b, 0x97, 0x8f, 0x75, 0x4d, - 0xc0, 0xfa, 0xbe, 0x43, 0x50, 0x92, 0x3c, 0xe6, 0xff, 0x38, 0x01, 0xd3, 0x74, 0x6b, 0x95, 0xf2, - 0xf4, 0xef, 0x03, 0xd0, 0x7f, 0x79, 0x04, 0xa0, 0x6f, 0xc2, 0x8c, 0x15, 0x94, 0x4e, 0xc7, 0x3f, - 0x7e, 0xb1, 0x2c, 0x12, 0x76, 0x8e, 0x2e, 0x5d, 0x28, 0x06, 0x7d, 0x98, 0x47, 0x5e, 0x17, 0x91, - 0xbf, 0x3b, 0x82, 0xdf, 0x5c, 0x89, 0xa3, 0x84, 0xfe, 0xdd, 0x3e, 0xf4, 0x9b, 0x02, 0xf4, 0x85, - 0xc3, 0x90, 0x32, 0x86, 0x2b, 0x0e, 0x14, 0xc8, 0x90, 0x13, 0x89, 0xbf, 0x91, 0xe0, 0x5a, 0xcc, - 0x3c, 0x4c, 0x10, 0x95, 0xf5, 0xe7, 0x88, 0xde, 0xab, 0xfb, 0xc5, 0xd8, 0x72, 0xb0, 0xed, 0x7b, - 0x97, 0x78, 0xaf, 0x2e, 0x0d, 0x9e, 0x27, 0x78, 0x77, 0x3e, 0x47, 0x37, 0x8d, 0xfd, 0x84, 0xa1, - 0x27, 0x90, 0x3c, 0xc7, 0x47, 0x76, 0x46, 0x71, 0x98, 0x09, 0xe4, 0x00, 0x42, 0x92, 0x07, 0xfe, - 0x8b, 0x19, 0x98, 0xa7, 0x2b, 0x80, 0xcb, 0xb6, 0xb5, 0xdb, 0x73, 0xa3, 0x98, 0x79, 0x78, 0x59, - 0xb8, 0x09, 0xe6, 0x1c, 0xc1, 0x07, 0x9e, 0xc9, 0x44, 0x4f, 0x2a, 0xfa, 0x0c, 0xef, 0xff, 0xf2, - 0x4c, 0x11, 0xc9, 0xc5, 0x08, 0x06, 0x86, 0xd1, 0x1e, 0x7b, 0x53, 0x45, 0x92, 0x50, 0x6e, 0x41, - 0x51, 0x19, 0x6a, 0x7d, 0xd9, 0x97, 0xa9, 0xac, 0x8c, 0x4c, 0x7d, 0xc0, 0x97, 0xa9, 0x1f, 0x17, - 0x64, 0x6a, 0xe5, 0xf0, 0x2c, 0x49, 0x5e, 0xb6, 0x5e, 0xe3, 0x6f, 0xe2, 0xf9, 0x5b, 0xac, 0xbb, - 0x09, 0x6c, 0xac, 0xf2, 0xbe, 0x63, 0x19, 0xc1, 0x77, 0x4c, 0xbc, 0x03, 0x24, 0xc6, 0xaa, 0x85, - 0x48, 0x75, 0x88, 0x2c, 0xcd, 0x41, 0xda, 0xf4, 0xa8, 0x4b, 0x9b, 0xcd, 0xa1, 0xd6, 0x25, 0x22, - 0x2b, 0x1a, 0xc3, 0x3a, 0xe0, 0x1c, 0xe4, 0x96, 0xcd, 0x96, 0x83, 0x6d, 0xf4, 0x65, 0xb6, 0x2a, - 0xf1, 0x9a, 0x04, 0x07, 0x80, 0x25, 0xc8, 0x6d, 0x91, 0xda, 0x98, 0xc9, 0x7c, 0xab, 0x9c, 0xf6, - 0x50, 0x0a, 0x75, 0xf6, 0x6f, 0xdc, 0x88, 0x88, 0x3d, 0xc5, 0x8c, 0x6c, 0x39, 0x23, 0x46, 0x44, - 0xc4, 0xc1, 0x24, 0x8c, 0xe5, 0x32, 0xb0, 0x9c, 0x8e, 0x77, 0xdd, 0x31, 0xfe, 0x62, 0x72, 0x08, - 0xe7, 0x41, 0x31, 0x9b, 0x5d, 0xd2, 0x39, 0x4e, 0xe9, 0xee, 0x63, 0x5c, 0xbf, 0xae, 0x5e, 0x56, - 0x51, 0x92, 0xc7, 0xed, 0xd7, 0x25, 0x45, 0x45, 0xf2, 0x98, 0x7d, 0x8f, 0x38, 0xf5, 0x76, 0x5a, - 0x46, 0x03, 0xbb, 0xd4, 0x27, 0x86, 0x1a, 0xed, 0xc9, 0x32, 0x5e, 0x4f, 0xc6, 0xe9, 0x69, 0xf6, - 0x10, 0x7a, 0x3a, 0xec, 0x92, 0xb1, 0xcf, 0x73, 0xd2, 0xf0, 0x23, 0x5b, 0x32, 0x8e, 0x24, 0x63, - 0x0c, 0x57, 0xbd, 0x7a, 0x87, 0x97, 0xc7, 0xaa, 0xad, 0xc3, 0x6e, 0xa8, 0x31, 0x66, 0x8d, 0xec, - 0xa0, 0xf2, 0x30, 0x1b, 0x6a, 0xe1, 0x34, 0x8c, 0x01, 0xad, 0x39, 0x86, 0xd6, 0xe7, 0xd8, 0x30, - 0x9a, 0xf0, 0x9e, 0x76, 0xd7, 0xb2, 0x9d, 0x78, 0x7b, 0xda, 0x2e, 0x75, 0x3a, 0xf9, 0x2f, 0xee, - 0x21, 0x39, 0xf1, 0x2c, 0xfb, 0xa8, 0x86, 0xcf, 0x18, 0x87, 0xe4, 0x06, 0x11, 0x90, 0x3c, 0xbc, - 0x6f, 0x3d, 0xa2, 0xc1, 0x73, 0x58, 0x75, 0x64, 0x3a, 0x30, 0xb2, 0xa1, 0x73, 0x18, 0x75, 0x0c, - 0xa7, 0x21, 0x79, 0xbc, 0xbe, 0xcd, 0x0d, 0x9c, 0x6f, 0x1e, 0xe3, 0xc0, 0xe9, 0x69, 0x66, 0x76, - 0x48, 0xcd, 0x1c, 0x76, 0xaf, 0x8e, 0xf1, 0x7a, 0x74, 0x03, 0xe6, 0x30, 0x7b, 0x75, 0x11, 0x44, - 0x24, 0x8f, 0xf8, 0x5b, 0x14, 0xc8, 0x56, 0xc7, 0x3f, 0x5e, 0x0e, 0x3b, 0x17, 0x21, 0xbc, 0xaa, - 0x8e, 0x6c, 0xb8, 0x1c, 0x66, 0x2e, 0x12, 0x4a, 0xc2, 0x18, 0x2e, 0x3b, 0x38, 0x0e, 0x33, 0x64, - 0x49, 0xc4, 0xdb, 0x12, 0xff, 0x36, 0x1b, 0x35, 0xdf, 0x98, 0xa0, 0xae, 0x3e, 0x03, 0x26, 0xbd, - 0x7d, 0x33, 0x36, 0x72, 0x2e, 0xc8, 0xe9, 0xa7, 0xbf, 0xef, 0xe6, 0xff, 0x7f, 0x28, 0xc7, 0x95, - 0x91, 0xef, 0xab, 0x0f, 0xeb, 0xb8, 0x72, 0xa4, 0x7b, 0xeb, 0x7f, 0x16, 0x8c, 0xa8, 0xff, 0x31, - 0x39, 0xcc, 0x7b, 0xf7, 0xdc, 0x33, 0x7d, 0xf6, 0xdc, 0x3f, 0xca, 0x63, 0x59, 0x15, 0xb1, 0xbc, - 0x47, 0x96, 0x85, 0x23, 0x1c, 0x6b, 0xdf, 0xe3, 0xc3, 0x79, 0x4e, 0x80, 0x73, 0xf1, 0x50, 0xb4, - 0x8c, 0xe1, 0x90, 0x6a, 0x26, 0x18, 0x73, 0x3f, 0x96, 0xa0, 0x1e, 0xf7, 0x9c, 0x80, 0xc9, 0x1c, - 0x38, 0x01, 0x23, 0x68, 0x7a, 0xf6, 0x90, 0x9a, 0xfe, 0x31, 0x5e, 0x3a, 0x6a, 0xa2, 0x74, 0x3c, - 0x5d, 0x1e, 0x91, 0xd1, 0x8d, 0xcc, 0xef, 0xf5, 0xc5, 0xe3, 0xbc, 0x20, 0x1e, 0xc5, 0xc3, 0x11, - 0x93, 0xbc, 0x7c, 0xfc, 0xb1, 0x37, 0xa1, 0x3d, 0x62, 0x7d, 0x1f, 0x76, 0xab, 0x58, 0x60, 0xe2, - 0xc8, 0x46, 0xee, 0x61, 0xb6, 0x8a, 0x07, 0x51, 0x32, 0x86, 0xf8, 0x77, 0xb3, 0x30, 0x4d, 0x68, - 0x3a, 0x6f, 0x36, 0xb7, 0xb1, 0x83, 0x7e, 0x95, 0xfa, 0x93, 0x7a, 0xd1, 0x46, 0x47, 0x14, 0x12, - 0x2a, 0xec, 0x6c, 0x72, 0x5c, 0x8f, 0x0e, 0x4a, 0xe4, 0x02, 0x47, 0xe0, 0xb8, 0xa3, 0x56, 0x0e, - 0xa4, 0x20, 0x79, 0xc8, 0x3e, 0x4c, 0xdd, 0x6d, 0xd6, 0x8c, 0x2b, 0xd6, 0x9e, 0x83, 0x9e, 0x3b, - 0x82, 0x0e, 0x7a, 0x11, 0x72, 0x2d, 0x52, 0x1a, 0x3b, 0x42, 0x13, 0x3d, 0xdd, 0x61, 0x2c, 0xa0, - 0xf5, 0xeb, 0xec, 0xcf, 0xb8, 0xe7, 0x68, 0x02, 0x3e, 0xd2, 0x72, 0xc6, 0x7d, 0x8e, 0x66, 0x40, - 0xfd, 0x63, 0xb9, 0xd7, 0x68, 0xd2, 0xad, 0xdd, 0xdc, 0x35, 0x9d, 0x11, 0x45, 0xdb, 0x68, 0xb9, - 0x65, 0x79, 0xd1, 0x36, 0xc8, 0x4b, 0xdc, 0xd3, 0xbd, 0x1c, 0x57, 0xdc, 0xdf, 0xc7, 0x7d, 0xba, - 0x37, 0xba, 0xfa, 0xe4, 0x31, 0xf9, 0x2f, 0x54, 0xb3, 0xce, 0x51, 0x47, 0xe9, 0x04, 0x7d, 0xb0, - 0x87, 0x56, 0x16, 0x4a, 0xda, 0xd1, 0x29, 0x4b, 0xdf, 0xfa, 0x93, 0x07, 0xe6, 0x53, 0x67, 0x20, - 0xbb, 0x84, 0x2f, 0xec, 0x6d, 0xa3, 0xbb, 0x61, 0xb2, 0x66, 0x63, 0x5c, 0x6a, 0x6f, 0x59, 0x2e, - 0x77, 0x1d, 0xf7, 0xd9, 0x83, 0x84, 0xbd, 0xb9, 0x78, 0xec, 0x60, 0xa3, 0x19, 0x9c, 0x15, 0xf4, - 0x5e, 0xd1, 0xcb, 0xd3, 0x90, 0xa9, 0x3a, 0x86, 0x83, 0xa6, 0x7c, 0x6c, 0xd1, 0x73, 0x79, 0x2c, - 0xee, 0x16, 0xb1, 0xb8, 0x49, 0xe0, 0x05, 0xa1, 0x60, 0xc1, 0xfd, 0x3f, 0x04, 0x00, 0x04, 0x93, - 0x0f, 0x76, 0xad, 0xb6, 0x9b, 0xc3, 0x3b, 0xae, 0xea, 0xbd, 0xa3, 0x57, 0xfb, 0xec, 0xbe, 0x57, - 0x60, 0xf7, 0x63, 0xe5, 0xaa, 0x18, 0xc3, 0x4a, 0x5b, 0x1a, 0xa6, 0x5c, 0xd6, 0xae, 0x62, 0xa3, - 0xd9, 0x45, 0x8f, 0x0a, 0x84, 0x3f, 0x84, 0xcd, 0xe8, 0x83, 0xd2, 0x01, 0x50, 0x69, 0xab, 0xfc, - 0xc2, 0xc3, 0x3d, 0x3a, 0xbc, 0xcd, 0xff, 0xb4, 0x18, 0x38, 0xe6, 0x36, 0xc8, 0x98, 0xed, 0x2d, - 0x8b, 0xf9, 0x17, 0x3e, 0x22, 0xa4, 0x6c, 0x57, 0x26, 0x74, 0x92, 0x51, 0x32, 0x3a, 0x6a, 0x34, - 0x59, 0x63, 0xb9, 0x68, 0x30, 0xe3, 0xd6, 0x8e, 0xfe, 0xaf, 0x81, 0xcc, 0x56, 0x55, 0xc8, 0x74, - 0x0c, 0x67, 0x87, 0x55, 0x4d, 0x9e, 0x5d, 0x1b, 0x79, 0xaf, 0x6d, 0xb4, 0xad, 0xf6, 0x95, 0x5d, - 0xf3, 0x59, 0xfe, 0x7d, 0xc6, 0x42, 0x9a, 0x4b, 0xf9, 0x36, 0x6e, 0x63, 0xdb, 0x70, 0x70, 0x75, - 0x7f, 0x9b, 0xcc, 0xb1, 0x26, 0x75, 0x3e, 0x29, 0xb6, 0xfc, 0xbb, 0x14, 0x87, 0xcb, 0xff, 0x96, - 0xd9, 0xc2, 0x24, 0xaa, 0x16, 0x93, 0x7f, 0xef, 0x3d, 0x96, 0xfc, 0xf7, 0xa9, 0x22, 0x79, 0x34, - 0xbe, 0x9f, 0x86, 0x99, 0xaa, 0x2b, 0x70, 0xd5, 0xbd, 0xdd, 0x5d, 0xc3, 0xbe, 0x82, 0x6e, 0x08, - 0x50, 0xe1, 0x44, 0x33, 0x25, 0xfa, 0xa5, 0xfc, 0x91, 0xf4, 0x55, 0xde, 0x4c, 0xb5, 0xb9, 0x1a, - 0x62, 0xeb, 0xc1, 0x13, 0x20, 0xeb, 0x8a, 0xb7, 0xe7, 0x71, 0x19, 0xa9, 0x08, 0x34, 0xa7, 0x64, - 0xf4, 0xb1, 0x81, 0xb4, 0x8d, 0x21, 0xf2, 0x49, 0x1a, 0x8e, 0x57, 0x1d, 0xa3, 0x71, 0x71, 0xc5, - 0xb2, 0xad, 0x3d, 0xc7, 0x6c, 0xe3, 0x2e, 0x7a, 0x64, 0x80, 0x80, 0x27, 0xff, 0xa9, 0x40, 0xfe, - 0xd1, 0xbf, 0xa6, 0x64, 0x47, 0x51, 0xbf, 0x5b, 0xe5, 0x8b, 0x0f, 0x09, 0x26, 0x26, 0x37, 0x2e, - 0xca, 0x94, 0x38, 0x96, 0x53, 0x12, 0x79, 0xed, 0x72, 0xc7, 0xb2, 0x9d, 0x35, 0xab, 0x61, 0xb4, - 0xba, 0x8e, 0x65, 0x63, 0x54, 0x89, 0xe4, 0x9a, 0xdb, 0xc3, 0x34, 0xad, 0x46, 0x30, 0x38, 0xb2, - 0x37, 0x5e, 0xec, 0x14, 0x51, 0xc6, 0x3f, 0x2c, 0xbd, 0xcb, 0x48, 0xb9, 0xd2, 0x4b, 0x51, 0x88, - 0x9c, 0xf7, 0xeb, 0xd2, 0xe2, 0x1d, 0x6c, 0x91, 0xdb, 0x79, 0x94, 0x22, 0x6a, 0x0c, 0x4b, 0xe5, - 0x69, 0x98, 0xad, 0xee, 0x5d, 0xf0, 0x0b, 0xe9, 0xf2, 0x46, 0xc8, 0x6b, 0xa5, 0x23, 0x8a, 0x30, - 0xc1, 0xe3, 0x0b, 0x0a, 0xe1, 0xef, 0x8d, 0x30, 0xdb, 0xe5, 0xb3, 0x31, 0xbc, 0xc5, 0x44, 0xc9, - 0x48, 0x22, 0x83, 0x6b, 0x4d, 0x9e, 0x81, 0xef, 0x4d, 0xc3, 0x6c, 0xa5, 0x83, 0xdb, 0xb8, 0x49, - 0xbd, 0x20, 0x05, 0x06, 0xbe, 0x3c, 0x26, 0x03, 0x85, 0x82, 0x42, 0x18, 0x18, 0x78, 0x2c, 0x2f, - 0x79, 0xcc, 0x0b, 0x12, 0x62, 0x31, 0x2e, 0xaa, 0xb6, 0xe4, 0x19, 0xf7, 0xa5, 0x34, 0x4c, 0xeb, - 0x7b, 0xed, 0x0d, 0xdb, 0x72, 0x47, 0x63, 0x1b, 0xdd, 0x13, 0x74, 0x10, 0xb7, 0xc2, 0x89, 0xe6, - 0x9e, 0x4d, 0xd6, 0x9f, 0x4a, 0xed, 0x2a, 0x6e, 0x58, 0xed, 0x66, 0x97, 0xb4, 0x23, 0xab, 0x1f, - 0xfc, 0x70, 0x57, 0xe6, 0xa1, 0x6f, 0x28, 0x29, 0xf4, 0x73, 0xd2, 0x61, 0x89, 0x68, 0xe3, 0xb9, - 0xaa, 0xe5, 0x7b, 0x02, 0xc9, 0xe0, 0x43, 0x83, 0x6a, 0x48, 0x9e, 0xb9, 0x9f, 0x4b, 0x83, 0x5a, - 0x68, 0x34, 0xac, 0xbd, 0xb6, 0x53, 0xc5, 0x2d, 0xdc, 0x70, 0x6a, 0xb6, 0xd1, 0xc0, 0xbc, 0xfd, - 0x9c, 0x07, 0xa5, 0x69, 0xda, 0xac, 0x0f, 0x76, 0x1f, 0x19, 0x1f, 0x5f, 0x2e, 0xbd, 0xe3, 0x48, - 0x5b, 0x79, 0xb0, 0x96, 0x18, 0xec, 0x94, 0xdb, 0x57, 0x94, 0xac, 0x68, 0x0c, 0x37, 0xef, 0xa4, - 0x21, 0xb3, 0x61, 0xb6, 0xb7, 0xf9, 0xf8, 0x4d, 0x27, 0x5d, 0xeb, 0xa7, 0x89, 0x2f, 0x33, 0xf9, - 0xa4, 0x2f, 0xea, 0xed, 0x70, 0xb2, 0xbd, 0xb7, 0x7b, 0x01, 0xdb, 0x95, 0x2d, 0x32, 0x36, 0x74, - 0x6b, 0x56, 0x15, 0xb7, 0xa9, 0xe9, 0x94, 0xd5, 0xfb, 0x7e, 0x13, 0x0d, 0x07, 0x09, 0x93, 0xd7, - 0xa5, 0x24, 0x84, 0xd7, 0x3e, 0x51, 0x69, 0x8e, 0xa8, 0x58, 0xc6, 0x6e, 0x9f, 0xc2, 0x93, 0xe7, - 0xef, 0xd7, 0xd3, 0x30, 0xb1, 0x8e, 0x1d, 0xdb, 0x6c, 0x74, 0xd1, 0x17, 0xdc, 0x81, 0x09, 0x3b, - 0x1b, 0x86, 0x6d, 0xec, 0x62, 0x07, 0xdb, 0x5d, 0xa4, 0x05, 0x4c, 0x47, 0x30, 0xd9, 0x69, 0x19, - 0xce, 0x96, 0x65, 0xef, 0x32, 0x09, 0xf6, 0xdf, 0x5d, 0x8b, 0x61, 0x1f, 0xdb, 0xdd, 0x80, 0x2c, - 0xef, 0x95, 0x09, 0xb8, 0xbc, 0x7d, 0xc6, 0x48, 0x59, 0x10, 0xc8, 0x38, 0x94, 0x7d, 0x26, 0x53, - 0xe2, 0x58, 0x6e, 0x97, 0x51, 0xd6, 0xac, 0x6d, 0xf4, 0x4a, 0x05, 0x32, 0x44, 0xf2, 0xde, 0x92, - 0x12, 0x26, 0x15, 0xbb, 0xb8, 0xdb, 0x35, 0xb6, 0xb1, 0x37, 0xa9, 0x60, 0xaf, 0xea, 0x9d, 0x90, - 0x6d, 0xe1, 0x7d, 0xdc, 0x22, 0x64, 0xcc, 0xdd, 0x7e, 0x83, 0xd0, 0xb2, 0x35, 0x6b, 0x7b, 0xc1, - 0x2d, 0x6b, 0x81, 0x95, 0xb3, 0xb0, 0xe6, 0x66, 0xd5, 0xe9, 0x1f, 0x67, 0x9f, 0x01, 0x59, 0xf2, - 0xae, 0x4e, 0x41, 0x76, 0x49, 0x5b, 0xdc, 0x5c, 0xc9, 0x1f, 0x73, 0x1f, 0x3d, 0xfa, 0xa6, 0x20, - 0xbb, 0x5c, 0xa8, 0x15, 0xd6, 0xf2, 0x69, 0xb7, 0x1d, 0xa5, 0xf2, 0x72, 0x25, 0xaf, 0xb8, 0x89, - 0x1b, 0x85, 0x72, 0xa9, 0x98, 0xcf, 0xa8, 0xd3, 0x30, 0x71, 0xbe, 0xa0, 0x97, 0x4b, 0xe5, 0x95, - 0x7c, 0x16, 0xfd, 0x1d, 0x8f, 0xdf, 0x5d, 0x22, 0x7e, 0x37, 0x86, 0xd1, 0xd4, 0x0f, 0xb2, 0x5f, - 0xf1, 0x21, 0xbb, 0x47, 0x80, 0xec, 0x47, 0x64, 0x0a, 0x19, 0x03, 0x4a, 0x69, 0x98, 0xd8, 0xb0, - 0xad, 0x06, 0xee, 0x76, 0xd1, 0xcb, 0xd2, 0x90, 0x2b, 0x1a, 0xed, 0x06, 0x6e, 0xa1, 0x6b, 0x02, - 0xa8, 0xa8, 0x77, 0x50, 0xca, 0x3f, 0x20, 0xf0, 0x0f, 0x3c, 0x67, 0xee, 0x13, 0x39, 0x73, 0x8b, - 0xd0, 0x28, 0x56, 0xee, 0x02, 0x2d, 0x33, 0x84, 0x3f, 0xaf, 0xf3, 0xf9, 0x53, 0x14, 0xf8, 0x73, - 0x9b, 0x7c, 0x51, 0xc9, 0x73, 0xe9, 0xbb, 0x29, 0x38, 0xb9, 0x82, 0xdb, 0xd8, 0x36, 0x1b, 0x94, - 0x78, 0xaf, 0xfd, 0xf7, 0x88, 0xed, 0x7f, 0x8c, 0x40, 0x74, 0xbf, 0x3f, 0xc4, 0xc6, 0xbf, 0xc6, - 0x6f, 0xfc, 0x7d, 0x42, 0xe3, 0x6f, 0x95, 0x2c, 0x67, 0x0c, 0x57, 0xc9, 0x4e, 0xc1, 0x4c, 0xd9, - 0x72, 0xcc, 0x2d, 0xb3, 0x41, 0xb7, 0x92, 0x5f, 0xa1, 0x40, 0x66, 0xcd, 0xec, 0x3a, 0xfc, 0x99, - 0xf4, 0xeb, 0x61, 0xda, 0x6c, 0x37, 0x5a, 0x7b, 0x4d, 0xac, 0x63, 0x83, 0xca, 0xca, 0xa4, 0xce, - 0x27, 0x05, 0x2b, 0xf4, 0x2e, 0x59, 0x8a, 0xb7, 0x42, 0xff, 0x29, 0x69, 0x6b, 0x8a, 0x27, 0x81, - 0x9c, 0xf8, 0x0e, 0x19, 0x92, 0x0a, 0x30, 0xdb, 0xe6, 0xb2, 0x7a, 0x87, 0xd0, 0x7b, 0x63, 0x38, - 0xf3, 0xc5, 0xe9, 0xe2, 0x1f, 0xe8, 0xfd, 0x52, 0xc6, 0xd7, 0x20, 0x82, 0xe2, 0x21, 0xb3, 0x1c, - 0x1f, 0x19, 0x55, 0x85, 0xb9, 0x52, 0xb9, 0xa6, 0xe9, 0xe5, 0xc2, 0x1a, 0xcb, 0xa2, 0xa0, 0xef, - 0xa7, 0x21, 0xab, 0xe3, 0x4e, 0xeb, 0x0a, 0x1f, 0xa4, 0x93, 0xf9, 0x7b, 0xa5, 0x7c, 0x7f, 0x2f, - 0x75, 0x19, 0xc0, 0x68, 0xb8, 0x15, 0x93, 0xdb, 0x48, 0xd2, 0x7d, 0x43, 0xc7, 0x09, 0x0d, 0x2c, - 0xf8, 0xb9, 0x75, 0xee, 0x4f, 0xf4, 0x42, 0xe9, 0x05, 0x20, 0xa1, 0x34, 0x42, 0x61, 0x48, 0x77, - 0xf0, 0x01, 0xa9, 0x35, 0x9b, 0x81, 0xc5, 0x1d, 0x0d, 0xfb, 0xbf, 0x92, 0x86, 0x4c, 0xcd, 0x9d, - 0x91, 0x71, 0x93, 0xb3, 0x4f, 0x0e, 0x27, 0xe3, 0x6e, 0x31, 0x21, 0x32, 0x7e, 0x2f, 0xcc, 0xf0, - 0x12, 0xcb, 0x76, 0x3c, 0x22, 0x45, 0x5c, 0xf8, 0x61, 0x18, 0x09, 0xef, 0x43, 0xce, 0xd1, 0xb0, - 0xf8, 0xab, 0xb7, 0x00, 0xac, 0x63, 0xd7, 0xae, 0xed, 0xee, 0x98, 0x1d, 0xf4, 0x5f, 0x15, 0x98, - 0x5a, 0xc1, 0x4e, 0xd5, 0x31, 0x9c, 0xbd, 0x6e, 0xcf, 0xaa, 0x65, 0xdb, 0x2a, 0x1a, 0x8d, 0x1d, - 0xcc, 0xba, 0x23, 0xef, 0x15, 0xbd, 0x5b, 0x91, 0xdd, 0x16, 0x0c, 0xea, 0x59, 0xf0, 0xeb, 0x08, - 0xc1, 0xe4, 0x71, 0x90, 0x69, 0x1a, 0x8e, 0xc1, 0xb0, 0xb8, 0xa6, 0x07, 0x8b, 0xa0, 0x20, 0x9d, - 0x64, 0x43, 0xbf, 0x95, 0x96, 0xd9, 0x17, 0x94, 0xa8, 0x3f, 0x1e, 0x08, 0xef, 0x4f, 0x0d, 0x81, - 0xc2, 0x09, 0x98, 0x2d, 0x57, 0x6a, 0xf5, 0xb5, 0xca, 0xca, 0x8a, 0xe6, 0xa6, 0xe6, 0x15, 0xf5, - 0x34, 0xa8, 0x1b, 0x85, 0x07, 0xd6, 0xb5, 0x72, 0xad, 0x5e, 0xae, 0x2c, 0x69, 0xec, 0xcf, 0x8c, - 0x7a, 0x1c, 0xa6, 0x8b, 0x85, 0xe2, 0xaa, 0x97, 0x90, 0x55, 0xe7, 0xe1, 0xe4, 0xba, 0xb6, 0xbe, - 0xa8, 0xe9, 0xd5, 0xd5, 0xd2, 0x46, 0xdd, 0x2d, 0x66, 0xb9, 0xb2, 0x59, 0x5e, 0xca, 0xe7, 0x54, - 0x04, 0xa7, 0xb9, 0x2f, 0xe7, 0xf5, 0x4a, 0x79, 0xa5, 0x5e, 0xad, 0x15, 0x6a, 0x5a, 0x7e, 0x42, - 0xbd, 0x0a, 0x8e, 0x17, 0x0b, 0x65, 0x92, 0xbd, 0x58, 0x29, 0x97, 0xb5, 0x62, 0x2d, 0x3f, 0x89, - 0xfe, 0x35, 0x03, 0xd3, 0xa5, 0x6e, 0xd9, 0xd8, 0xc5, 0xe7, 0x8c, 0x96, 0xd9, 0x44, 0x3f, 0xc7, - 0x59, 0x93, 0x37, 0xc2, 0xac, 0x4d, 0x1f, 0x71, 0xb3, 0x66, 0x62, 0x8a, 0xe6, 0xac, 0x2e, 0x26, - 0xaa, 0xa7, 0x21, 0xd7, 0x26, 0x05, 0x30, 0xd6, 0xb0, 0x37, 0x75, 0x11, 0x80, 0x3e, 0xd5, 0x82, - 0x7b, 0xf1, 0xce, 0xf6, 0x6a, 0x93, 0xb1, 0x8b, 0xbb, 0xd8, 0xde, 0x37, 0x1b, 0xd8, 0xcb, 0xa9, - 0x73, 0x7f, 0xa1, 0xaf, 0x2a, 0xb2, 0xcb, 0x84, 0x1c, 0xa8, 0x5c, 0x73, 0x42, 0x7a, 0xc3, 0x9f, - 0x55, 0x64, 0x16, 0xf9, 0xa4, 0x8a, 0x8c, 0x27, 0x29, 0x2f, 0x4e, 0x0f, 0x21, 0x29, 0xb3, 0x30, - 0x55, 0xab, 0x54, 0xea, 0xd5, 0xd5, 0x8a, 0x5e, 0xcb, 0x2b, 0xea, 0x0c, 0x4c, 0xba, 0xaf, 0x6b, - 0x95, 0xf2, 0x4a, 0x3e, 0xa3, 0x9e, 0x82, 0x13, 0xab, 0x85, 0x6a, 0xbd, 0x54, 0x3e, 0x57, 0x58, - 0x2b, 0x2d, 0xd5, 0x8b, 0xab, 0x05, 0xbd, 0x9a, 0xcf, 0xaa, 0xd7, 0xc0, 0xa9, 0x5a, 0x49, 0xd3, - 0xeb, 0xcb, 0x5a, 0xa1, 0xb6, 0xa9, 0x6b, 0xd5, 0x7a, 0xb9, 0x52, 0x2f, 0x17, 0xd6, 0xb5, 0x7c, - 0xce, 0x55, 0x7f, 0xf2, 0x29, 0x10, 0x9b, 0x89, 0x83, 0xc2, 0x38, 0x19, 0x22, 0x8c, 0x53, 0xbd, - 0xc2, 0x08, 0xbc, 0x58, 0xe9, 0x5a, 0x55, 0xd3, 0xcf, 0x69, 0xf9, 0xe9, 0x7e, 0xb2, 0x36, 0xa3, - 0x9e, 0x84, 0xbc, 0x4b, 0x43, 0xbd, 0x54, 0xf5, 0x72, 0x2e, 0xe5, 0x67, 0xd1, 0xc7, 0x72, 0x70, - 0x5a, 0xc7, 0xdb, 0x66, 0xd7, 0xc1, 0xf6, 0x86, 0x71, 0x65, 0x17, 0xb7, 0x1d, 0xaf, 0x93, 0xff, - 0x5f, 0xb1, 0x85, 0x71, 0x1d, 0x66, 0x3b, 0xb4, 0x8c, 0x75, 0xec, 0xec, 0x58, 0x4d, 0x36, 0x0a, - 0x3f, 0x26, 0xb4, 0xe7, 0x58, 0xd8, 0xe0, 0xb3, 0xeb, 0xe2, 0xdf, 0x9c, 0x6c, 0x2b, 0x11, 0xb2, - 0x9d, 0x19, 0x46, 0xb6, 0xd5, 0x6b, 0x61, 0x6a, 0xaf, 0x8b, 0x6d, 0x6d, 0xd7, 0x30, 0x5b, 0xde, - 0xbd, 0x66, 0x7e, 0x02, 0x7a, 0x47, 0x46, 0xd6, 0xf1, 0x94, 0x6b, 0x4b, 0x7f, 0x36, 0x86, 0xf4, - 0xad, 0x67, 0x00, 0x58, 0x63, 0x37, 0xed, 0x16, 0x13, 0x56, 0x2e, 0xc5, 0xa5, 0xef, 0x82, 0xd9, - 0x6a, 0x99, 0xed, 0x6d, 0x7f, 0xf9, 0x3e, 0x48, 0x40, 0x2f, 0x56, 0x64, 0x1c, 0x51, 0xe3, 0xd2, - 0x16, 0x4f, 0x9b, 0x5e, 0x98, 0x1e, 0x73, 0xbf, 0x7b, 0x50, 0x75, 0x72, 0x6a, 0x1e, 0x66, 0x48, - 0x1a, 0xd3, 0xc0, 0xfc, 0x84, 0xdb, 0x07, 0x7b, 0xc5, 0xad, 0x6b, 0xb5, 0xd5, 0xca, 0x92, 0xff, - 0x6d, 0xd2, 0x2d, 0xd2, 0x25, 0xa6, 0x50, 0x7e, 0x80, 0x68, 0xe3, 0x94, 0xfa, 0x48, 0xb8, 0x86, - 0xeb, 0xb0, 0x0b, 0x6b, 0xba, 0x56, 0x58, 0x7a, 0xa0, 0xae, 0x3d, 0xb3, 0x54, 0xad, 0x55, 0x45, - 0xe5, 0xf2, 0xf4, 0x68, 0xda, 0xa5, 0x57, 0x5b, 0x2f, 0x94, 0xd6, 0x58, 0xff, 0xbe, 0x5c, 0xd1, - 0xd7, 0x0b, 0xb5, 0xfc, 0x0c, 0x7a, 0xa5, 0x02, 0xf9, 0x15, 0xec, 0x6c, 0x58, 0xb6, 0x63, 0xb4, - 0xd6, 0xcc, 0xf6, 0xc5, 0x4d, 0xbb, 0xc5, 0xdb, 0x4c, 0xff, 0x22, 0x7d, 0xda, 0x56, 0x1c, 0x22, - 0x85, 0x02, 0xc3, 0x17, 0xb6, 0x3b, 0x24, 0x5b, 0x20, 0x4c, 0x41, 0x02, 0x7a, 0x76, 0x5a, 0xe6, - 0x74, 0xad, 0x7c, 0xad, 0xf1, 0xe4, 0xe4, 0x39, 0xe3, 0x1e, 0x9f, 0xfb, 0xa0, 0x96, 0x43, 0x0f, - 0x65, 0x60, 0x72, 0xd9, 0x6c, 0x1b, 0x2d, 0xf3, 0x59, 0x42, 0xc8, 0xb8, 0xa0, 0x8f, 0x49, 0x45, - 0xf4, 0x31, 0xe9, 0xa1, 0xc6, 0xcf, 0x5f, 0x52, 0x64, 0xb7, 0x30, 0x38, 0xde, 0x7b, 0x44, 0x86, - 0x0c, 0x9e, 0x7f, 0x90, 0x96, 0xd9, 0xa4, 0x18, 0x5c, 0x5e, 0x3c, 0x0c, 0x3f, 0xf1, 0xc3, 0x61, - 0x63, 0xf5, 0xe8, 0xf7, 0x64, 0x3f, 0x51, 0x98, 0x42, 0x7f, 0xae, 0x00, 0x5a, 0xc1, 0xce, 0x39, - 0x6c, 0xfb, 0x53, 0x01, 0xd2, 0xeb, 0x33, 0x7b, 0x9b, 0x53, 0xd9, 0xb7, 0xf0, 0x00, 0x9e, 0x17, - 0x01, 0x2c, 0x44, 0x28, 0x4f, 0x48, 0xd1, 0x21, 0xca, 0x5b, 0x82, 0x5c, 0x97, 0x7c, 0x67, 0x62, - 0xf6, 0x84, 0xf0, 0xe1, 0x92, 0x14, 0xc6, 0x97, 0x4e, 0x0b, 0xd6, 0x59, 0x01, 0xe8, 0x7b, 0xfe, - 0x24, 0xe8, 0xc7, 0x04, 0xe9, 0x58, 0x3e, 0x34, 0xb1, 0xf1, 0xe4, 0xc5, 0x4e, 0x56, 0x5c, 0xfa, - 0xd9, 0x37, 0xe8, 0x8b, 0x19, 0x38, 0xd9, 0xaf, 0x39, 0xfc, 0xcd, 0x72, 0x27, 0x21, 0x8b, 0xc9, - 0x88, 0x4f, 0x95, 0x9d, 0xbe, 0xa8, 0x4f, 0x84, 0x53, 0x6c, 0x0b, 0xf5, 0x02, 0xae, 0x59, 0x65, - 0x7c, 0xa9, 0xdb, 0xc2, 0x8e, 0x83, 0x6d, 0xd2, 0xb2, 0x49, 0xbd, 0xff, 0x47, 0xf4, 0xf7, 0x8a, - 0xac, 0xb3, 0xfa, 0x00, 0x7e, 0x87, 0x68, 0xfa, 0x0b, 0x14, 0x19, 0xf7, 0xf3, 0x78, 0x65, 0xc7, - 0x43, 0xf1, 0xf9, 0xe3, 0x1e, 0xe1, 0xfb, 0x0f, 0xad, 0x44, 0xe7, 0x69, 0xba, 0x37, 0x42, 0x9f, - 0xd3, 0xf4, 0xd2, 0x72, 0x49, 0x73, 0xc7, 0xfb, 0x53, 0x70, 0x22, 0xf8, 0xb6, 0xf4, 0x40, 0xbd, - 0xaa, 0x95, 0x6b, 0xf9, 0x49, 0xb7, 0x03, 0xa1, 0xc9, 0xcb, 0x85, 0xd2, 0x9a, 0xb6, 0x54, 0xaf, - 0x55, 0xdc, 0x2f, 0x4b, 0xc3, 0x8d, 0xf9, 0xe8, 0xb9, 0x19, 0x38, 0x4e, 0x78, 0x7b, 0x85, 0x70, - 0xd5, 0x65, 0x4a, 0x8f, 0x2f, 0x8b, 0x0f, 0xd0, 0x14, 0x65, 0x2f, 0xfa, 0xac, 0xf4, 0xad, 0x61, - 0x1c, 0x84, 0x3d, 0x75, 0x84, 0x48, 0xc6, 0x77, 0xd3, 0x32, 0x27, 0x40, 0xa5, 0x8b, 0x8d, 0x27, - 0x14, 0xff, 0x3c, 0xee, 0xa1, 0x20, 0x1c, 0x7c, 0x62, 0xfe, 0x15, 0xc9, 0xcf, 0xcf, 0xdc, 0x28, - 0xe9, 0x44, 0x1c, 0xe6, 0x00, 0x48, 0x0a, 0x91, 0x20, 0x2a, 0x07, 0x7d, 0x07, 0x92, 0x30, 0x39, - 0x28, 0x14, 0x6b, 0xa5, 0x73, 0x5a, 0x98, 0x1c, 0x7c, 0x5a, 0x81, 0xc9, 0x15, 0xec, 0xb8, 0x93, - 0x9d, 0x2e, 0x7a, 0x9a, 0xc4, 0xc2, 0x8c, 0x6b, 0x5f, 0x90, 0xeb, 0x92, 0xfd, 0xf9, 0x39, 0x7d, - 0x43, 0xcf, 0x1b, 0xc6, 0x36, 0xf0, 0xaa, 0x0e, 0x19, 0x48, 0x9e, 0x02, 0x59, 0xc7, 0xfd, 0xcc, - 0xd6, 0x87, 0x1f, 0x15, 0x3a, 0x8e, 0xb8, 0x85, 0x2c, 0x19, 0x8e, 0xa1, 0xd3, 0xfc, 0xdc, 0xb0, - 0x21, 0x69, 0x54, 0x84, 0x10, 0xf2, 0xc3, 0x68, 0x18, 0xfe, 0x9d, 0x02, 0xa7, 0xa8, 0x7e, 0x14, - 0x3a, 0x9d, 0xaa, 0x63, 0xd9, 0x58, 0xc7, 0x0d, 0x6c, 0x76, 0x9c, 0x9e, 0x85, 0x37, 0x9b, 0xa6, - 0x7a, 0x3b, 0x7b, 0xec, 0x15, 0xbd, 0x49, 0x91, 0x8d, 0x71, 0x78, 0x40, 0x1f, 0x7b, 0xea, 0x0b, - 0x51, 0xf6, 0x8f, 0xa6, 0x65, 0xa2, 0x16, 0xc6, 0x2c, 0x3c, 0x1e, 0x50, 0x1f, 0x3a, 0x02, 0xa0, - 0xbc, 0x25, 0x15, 0x5d, 0x2b, 0x6a, 0xa5, 0x0d, 0x77, 0x10, 0xb8, 0x0e, 0x1e, 0xb1, 0xb1, 0xa9, - 0x17, 0x57, 0x0b, 0x55, 0xad, 0xae, 0x6b, 0x2b, 0xa5, 0x6a, 0x4d, 0x2f, 0xd4, 0x4a, 0x15, 0x8f, - 0x80, 0x09, 0xf5, 0x5a, 0x98, 0xaf, 0x6e, 0x2e, 0x56, 0x8b, 0x7a, 0x69, 0x83, 0xa4, 0xeb, 0x5a, - 0x59, 0x3b, 0xcf, 0xbe, 0x4e, 0xa2, 0x0f, 0xe6, 0x61, 0xda, 0xb5, 0xcc, 0xab, 0xd4, 0x60, 0x47, - 0xdf, 0xca, 0xc0, 0xb4, 0x8e, 0xbb, 0x56, 0x6b, 0x9f, 0x18, 0xef, 0xe3, 0x9a, 0x13, 0x7c, 0x47, - 0x91, 0x3d, 0x1f, 0xc5, 0x11, 0xbb, 0xc0, 0x11, 0x1a, 0x3e, 0x03, 0x34, 0xbc, 0x78, 0xc1, 0xcc, - 0x6e, 0x09, 0x12, 0xd4, 0x05, 0x50, 0xad, 0x4b, 0x6d, 0x6c, 0x57, 0x1b, 0x97, 0x34, 0x67, 0xa7, - 0xd0, 0x6c, 0xda, 0xb8, 0xdb, 0x65, 0xcb, 0x0a, 0x7d, 0xbe, 0xa8, 0x37, 0xc3, 0x71, 0x92, 0xca, - 0x65, 0xa6, 0x87, 0x39, 0x7b, 0x93, 0xfd, 0x9c, 0x85, 0xf6, 0x15, 0x2f, 0x67, 0x96, 0xcb, 0x19, - 0x24, 0xf3, 0xee, 0x88, 0x39, 0xd1, 0x0b, 0xf6, 0x7a, 0x98, 0x6e, 0x1b, 0xbb, 0x58, 0xbb, 0xdc, - 0x31, 0x6d, 0xdc, 0x9d, 0x9f, 0x20, 0xbb, 0x69, 0x7c, 0x12, 0xfa, 0x03, 0xa9, 0xf3, 0x5c, 0x72, - 0x1c, 0x8b, 0x27, 0xfb, 0x2b, 0x43, 0x88, 0x7e, 0x9f, 0x7e, 0x46, 0x41, 0x1f, 0x54, 0x60, 0x86, - 0x11, 0x55, 0x68, 0x5f, 0x29, 0x35, 0xd1, 0x75, 0x82, 0x59, 0x6a, 0xb8, 0x69, 0x9e, 0x59, 0x4a, - 0x5e, 0xd0, 0xcf, 0x2b, 0xb2, 0xee, 0x44, 0x7d, 0x1a, 0x4e, 0xea, 0x08, 0x77, 0x71, 0xd9, 0xb2, - 0xf6, 0x98, 0x4b, 0xcd, 0xa4, 0x4e, 0x5f, 0x92, 0x5c, 0x6d, 0x43, 0x7f, 0x28, 0xe5, 0xac, 0x24, - 0xd9, 0x8c, 0x23, 0x02, 0xf0, 0xe3, 0x0a, 0xcc, 0x31, 0xaa, 0xaa, 0xcc, 0x8f, 0x56, 0xca, 0xa1, - 0xfc, 0x17, 0xa4, 0x0d, 0xc1, 0x3e, 0xed, 0x67, 0x35, 0x3d, 0x6c, 0x80, 0xfc, 0xb0, 0x54, 0xf0, - 0x11, 0xe9, 0x86, 0x1c, 0x11, 0x94, 0xef, 0xcc, 0xc0, 0xf4, 0x66, 0x17, 0xdb, 0xcc, 0x2f, 0x0e, - 0xbd, 0x2e, 0x03, 0xca, 0x0a, 0x16, 0x76, 0x38, 0x5f, 0x94, 0x91, 0x5d, 0xad, 0xe3, 0x1b, 0xcb, - 0x15, 0xea, 0xda, 0x48, 0x21, 0xb0, 0xdd, 0x04, 0x73, 0x94, 0xa5, 0x05, 0xc7, 0x71, 0x8d, 0x44, - 0xef, 0x58, 0x40, 0x4f, 0xea, 0x28, 0xf6, 0x70, 0x48, 0x5d, 0x6e, 0x96, 0xa2, 0x4b, 0xd3, 0x1a, - 0xde, 0xa2, 0xa1, 0xa9, 0x32, 0x7a, 0x4f, 0x2a, 0xb9, 0xca, 0xb9, 0x83, 0xa9, 0x7f, 0x28, 0x97, - 0x39, 0x4b, 0x32, 0xf7, 0xfb, 0x84, 0xbe, 0x25, 0x15, 0xb3, 0x4f, 0x9e, 0x3b, 0xf1, 0x64, 0xa1, - 0x33, 0x1a, 0x93, 0xe4, 0x24, 0xe4, 0xdd, 0x1c, 0x64, 0x63, 0x44, 0xd7, 0xaa, 0x95, 0xb5, 0x73, - 0x5a, 0xff, 0xf5, 0x85, 0x2c, 0x7a, 0xbe, 0x02, 0x53, 0x8b, 0xb6, 0x65, 0x34, 0x1b, 0x46, 0xd7, - 0x41, 0xdf, 0x4b, 0xc3, 0xcc, 0x86, 0x71, 0xa5, 0x65, 0x19, 0x4d, 0xe2, 0x89, 0xd8, 0xd3, 0x17, - 0x74, 0xe8, 0x27, 0xaf, 0x2f, 0x60, 0xaf, 0xa2, 0xe3, 0xbd, 0xef, 0x1a, 0x9f, 0x92, 0xb9, 0x5c, - 0xcc, 0xdf, 0x7f, 0x4b, 0xf7, 0x0b, 0x06, 0xe6, 0xd1, 0xb5, 0xc0, 0xd3, 0x14, 0x62, 0x51, 0x7e, - 0x50, 0x2e, 0xbc, 0x97, 0x4c, 0x91, 0x47, 0xb3, 0x5d, 0xfe, 0xd0, 0x24, 0xe4, 0x96, 0x30, 0xb1, - 0xe2, 0x7e, 0x3b, 0x0d, 0x13, 0xec, 0x7a, 0x7d, 0x74, 0xa7, 0xe0, 0xe4, 0xd8, 0x24, 0x19, 0xfc, - 0xee, 0xd8, 0x7f, 0x77, 0x27, 0xeb, 0xdc, 0x79, 0x26, 0xf2, 0x1c, 0xc3, 0xfd, 0x8b, 0xd6, 0x1b, - 0x72, 0xa5, 0x7f, 0x3c, 0xf7, 0xaf, 0xc8, 0xa2, 0x92, 0x77, 0x82, 0x7a, 0x77, 0x9a, 0xf9, 0x3c, - 0x71, 0xbd, 0xde, 0xaf, 0xf2, 0xf2, 0x19, 0xe9, 0x06, 0xc6, 0x88, 0x8f, 0xf0, 0x5a, 0xba, 0x03, - 0x26, 0x28, 0xcf, 0xbd, 0xf9, 0x68, 0xaf, 0x03, 0x01, 0x2d, 0x82, 0x9c, 0x6d, 0xf2, 0x72, 0x4a, - 0xfa, 0x8e, 0x85, 0x57, 0x3e, 0x96, 0x33, 0x7e, 0x33, 0x65, 0xec, 0x5c, 0xb2, 0xec, 0x8b, 0x55, - 0xc7, 0x70, 0x30, 0xfa, 0xe7, 0x34, 0x28, 0x55, 0xec, 0xf0, 0xa7, 0x8b, 0xcb, 0x70, 0x82, 0x36, - 0x88, 0x65, 0x24, 0xfd, 0x37, 0x6d, 0xc8, 0xf5, 0x7d, 0x99, 0xc0, 0xe5, 0xd3, 0x0f, 0xfe, 0x8a, - 0x5e, 0xd6, 0x37, 0xa8, 0x42, 0xba, 0xcf, 0xa4, 0x81, 0x71, 0x86, 0x27, 0xd0, 0x15, 0xb0, 0x10, - 0x39, 0xfd, 0x7d, 0x29, 0xb3, 0x5a, 0xae, 0xcc, 0xa3, 0xe9, 0x0a, 0x5e, 0x7d, 0x0d, 0x64, 0x8a, - 0x3b, 0x86, 0x83, 0xde, 0xa5, 0x00, 0x14, 0x9a, 0xcd, 0x75, 0xea, 0x70, 0xcb, 0x7b, 0x8a, 0x9d, - 0x85, 0x99, 0xc6, 0x8e, 0x11, 0xc4, 0x0e, 0xa7, 0xfd, 0x81, 0x90, 0xa6, 0x3e, 0x31, 0xf0, 0xdc, - 0xa5, 0x5c, 0x45, 0x3d, 0x30, 0xb9, 0x75, 0xb0, 0xb2, 0x7d, 0xaf, 0x5e, 0x31, 0xd4, 0x54, 0xe4, - 0x79, 0x59, 0xf7, 0xf7, 0x85, 0x80, 0xbc, 0xf0, 0x39, 0x1c, 0x2b, 0xda, 0x3f, 0x29, 0x18, 0x24, - 0xc4, 0x3c, 0x49, 0x25, 0x77, 0x60, 0x36, 0x9a, 0xae, 0xb1, 0x84, 0x86, 0x53, 0xb5, 0xa6, 0xe9, - 0xb1, 0x96, 0x05, 0xa4, 0x40, 0x2f, 0x4c, 0xc5, 0x83, 0x2f, 0x9a, 0x71, 0xf7, 0xc1, 0x2c, 0x6e, - 0x9a, 0x0e, 0xf6, 0x5a, 0xc9, 0x18, 0x18, 0x05, 0xb1, 0xf8, 0x03, 0x7a, 0x8e, 0x74, 0x50, 0x13, - 0xc2, 0xd0, 0x83, 0x2d, 0x0a, 0xd1, 0x3f, 0xb9, 0x30, 0x25, 0x72, 0x65, 0x26, 0x0f, 0xd6, 0xf3, - 0x14, 0x38, 0x55, 0xb3, 0xb6, 0xb7, 0x5b, 0xd8, 0x63, 0x13, 0xa6, 0x6e, 0x93, 0xc8, 0x18, 0x25, - 0x5c, 0x64, 0x8f, 0xc6, 0x7a, 0xd0, 0x64, 0xb3, 0x17, 0xfa, 0x82, 0x5e, 0x20, 0x1d, 0x7e, 0x91, - 0xb0, 0xab, 0x2f, 0x9d, 0x21, 0x28, 0xc8, 0x05, 0x54, 0x94, 0x2e, 0x36, 0x79, 0x20, 0xbe, 0x90, - 0x86, 0x59, 0x7a, 0x8b, 0x97, 0x27, 0xa0, 0xf7, 0x8f, 0x10, 0x00, 0xf4, 0xbd, 0x94, 0xac, 0x03, - 0x2c, 0xe1, 0x89, 0x40, 0x49, 0x08, 0x8b, 0xe5, 0x0e, 0x2d, 0x0f, 0x2c, 0x2e, 0x79, 0xd6, 0xfe, - 0xba, 0x02, 0xd3, 0x2b, 0xd8, 0xd3, 0xb4, 0x2e, 0x7f, 0xcd, 0x86, 0x0c, 0x63, 0x6f, 0x84, 0xd9, - 0x0b, 0x78, 0xcb, 0xb2, 0x31, 0xb9, 0x36, 0xc4, 0x67, 0xae, 0x98, 0x18, 0x12, 0xd9, 0x45, 0x08, - 0x21, 0xb2, 0x28, 0xb2, 0xfd, 0xd6, 0x83, 0x7c, 0xe2, 0xa8, 0x0c, 0x19, 0x4e, 0x9e, 0x0c, 0x93, - 0x0c, 0x54, 0xcf, 0x02, 0x8b, 0xea, 0xf2, 0xfc, 0xbc, 0xe8, 0x0d, 0x3e, 0x58, 0x9a, 0x00, 0xd6, - 0x13, 0xe2, 0x10, 0x31, 0x96, 0x6b, 0x6c, 0xf3, 0x5c, 0xfd, 0x8b, 0x57, 0x4a, 0xcd, 0x2e, 0x5a, - 0x8f, 0x87, 0xd7, 0x19, 0x00, 0x5f, 0xee, 0xbd, 0x13, 0xa1, 0x5c, 0x8a, 0x18, 0xf4, 0x35, 0xf2, - 0xc0, 0x53, 0x2f, 0x3b, 0x08, 0x39, 0x23, 0x06, 0x46, 0xee, 0xa0, 0x94, 0x0c, 0x25, 0x63, 0x08, - 0xf0, 0xa2, 0xc0, 0xa9, 0xaa, 0xb7, 0x6f, 0xbe, 0x66, 0x74, 0x03, 0x95, 0x2a, 0xc6, 0x83, 0x48, - 0x38, 0x64, 0xe1, 0x2b, 0xcb, 0xb7, 0xe3, 0x0d, 0x07, 0x7d, 0x29, 0x19, 0x2d, 0x3a, 0xea, 0xad, - 0x70, 0xa2, 0xbd, 0xb7, 0xeb, 0x73, 0x9d, 0x68, 0x3c, 0xd3, 0xf0, 0x83, 0x1f, 0xe2, 0x0c, 0x3a, - 0x32, 0xc4, 0x8f, 0x65, 0xba, 0x38, 0xbd, 0xd9, 0xf6, 0x5d, 0x21, 0xd0, 0xe3, 0x62, 0xc1, 0x88, - 0xfe, 0x29, 0x15, 0xab, 0x77, 0xe3, 0x6a, 0x0a, 0x19, 0x52, 0x62, 0xf4, 0x52, 0xe1, 0x85, 0x25, - 0xce, 0xb6, 0xb3, 0x13, 0x90, 0xd5, 0x76, 0x3b, 0xce, 0x95, 0xb3, 0x8f, 0x86, 0xd9, 0xaa, 0x63, - 0x63, 0x63, 0x97, 0x5b, 0xf4, 0x77, 0xac, 0x8b, 0xb8, 0xed, 0x2d, 0xfa, 0x93, 0x97, 0xbb, 0xee, - 0x84, 0x89, 0xb6, 0x55, 0x37, 0xf6, 0x9c, 0x1d, 0xf5, 0xba, 0x85, 0x6d, 0xcb, 0xda, 0x6e, 0xe1, - 0x85, 0x8e, 0x6d, 0x39, 0xd6, 0x85, 0xbd, 0xad, 0x05, 0x06, 0x7e, 0x85, 0x1d, 0xff, 0xff, 0xea, - 0xdd, 0x64, 0xd9, 0x37, 0xd7, 0xb6, 0x0a, 0x7b, 0xce, 0xce, 0xe2, 0xb5, 0x1f, 0xff, 0xdb, 0x33, - 0xa9, 0x4f, 0xff, 0xed, 0x99, 0xd4, 0x57, 0xfe, 0xf6, 0x4c, 0xea, 0x17, 0xbe, 0x76, 0xe6, 0xd8, - 0xa7, 0xbf, 0x76, 0xe6, 0xd8, 0x17, 0xbe, 0x76, 0xe6, 0xd8, 0x8f, 0xa5, 0x3b, 0x17, 0x2e, 0xe4, - 0x48, 0x29, 0x77, 0xfc, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x19, 0x2a, 0xf9, 0x4e, 0x3b, 0xec, - 0x01, 0x00, + // 18577 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7b, 0x98, 0x24, 0x47, + 0x75, 0x27, 0x3a, 0x55, 0x59, 0x55, 0xdd, 0x1d, 0xfd, 0x98, 0x9a, 0xd4, 0xcc, 0x68, 0x14, 0x88, + 0xd1, 0x30, 0x12, 0xb2, 0x2c, 0x44, 0x0b, 0x24, 0x5e, 0x12, 0x12, 0x52, 0x75, 0x75, 0x76, 0x77, + 0xa1, 0xee, 0xaa, 0x26, 0x2b, 0x7b, 0x06, 0xd9, 0xd7, 0xb7, 0x36, 0xa7, 0x2a, 0xba, 0x3b, 0x35, + 0xd5, 0x99, 0xe5, 0xac, 0xec, 0x9e, 0x19, 0xee, 0xb7, 0x77, 0x6d, 0xf3, 0x12, 0xb6, 0x59, 0x8c, + 0x31, 0x8b, 0x01, 0x03, 0xe6, 0x69, 0x83, 0x0d, 0x98, 0xb7, 0xc1, 0x36, 0xb6, 0x01, 0x19, 0x8c, + 0x31, 0xe6, 0x61, 0x6c, 0x81, 0xcd, 0x67, 0x30, 0x98, 0xc5, 0x7b, 0x97, 0xe5, 0xda, 0xdf, 0x1a, + 0x16, 0x1b, 0xae, 0xef, 0x17, 0x8f, 0xcc, 0x8c, 0xa8, 0xae, 0xcc, 0x8a, 0xac, 0xae, 0xac, 0x16, + 0xf6, 0xfe, 0x97, 0x19, 0x19, 0x19, 0x71, 0xe2, 0xfc, 0xce, 0x89, 0x38, 0x11, 0x71, 0xe2, 0x04, + 0x38, 0xd5, 0xb9, 0x70, 0x6b, 0xc7, 0x75, 0x3c, 0xa7, 0x7b, 0x6b, 0xd3, 0xd9, 0xd9, 0x31, 0xed, + 0x56, 0x77, 0x9e, 0xbc, 0xab, 0x13, 0xa6, 0x7d, 0xc5, 0xbb, 0xd2, 0x41, 0xf0, 0x86, 0xce, 0xc5, + 0xad, 0x5b, 0xdb, 0xd6, 0x85, 0x5b, 0x3b, 0x17, 0x6e, 0xdd, 0x71, 0x5a, 0xa8, 0xed, 0xff, 0x40, + 0x5e, 0x58, 0x76, 0x78, 0x53, 0x54, 0xae, 0xb6, 0xd3, 0x34, 0xdb, 0x5d, 0xcf, 0x71, 0x11, 0xcb, + 0x79, 0x32, 0xac, 0x12, 0xed, 0x21, 0xdb, 0xf3, 0x4b, 0xb8, 0x76, 0xcb, 0x71, 0xb6, 0xda, 0x88, + 0x7e, 0xbb, 0xb0, 0xbb, 0x79, 0x6b, 0xd7, 0x73, 0x77, 0x9b, 0x1e, 0xfb, 0x7a, 0xa6, 0xf7, 0x6b, + 0x0b, 0x75, 0x9b, 0xae, 0xd5, 0xf1, 0x1c, 0x97, 0xe6, 0x38, 0xfb, 0xbc, 0x2f, 0x4e, 0x00, 0x45, + 0xef, 0x34, 0xe1, 0x77, 0x26, 0x80, 0x52, 0xea, 0x74, 0xe0, 0x43, 0x59, 0x00, 0x96, 0x91, 0x77, + 0x0e, 0xb9, 0x5d, 0xcb, 0xb1, 0xe1, 0x51, 0x30, 0xa1, 0xa3, 0x9f, 0xdc, 0x45, 0x5d, 0xef, 0xce, + 0xdc, 0x83, 0xdf, 0x50, 0x32, 0xf0, 0xcd, 0x59, 0x30, 0xa9, 0xa3, 0x6e, 0xc7, 0xb1, 0xbb, 0x48, + 0xbd, 0x17, 0xe4, 0x91, 0xeb, 0x3a, 0xee, 0xa9, 0xcc, 0x99, 0xcc, 0x4d, 0xd3, 0xb7, 0xdd, 0x3c, + 0xcf, 0x9a, 0x3f, 0xaf, 0x77, 0x9a, 0xf3, 0xa5, 0x4e, 0x67, 0x3e, 0x2c, 0x69, 0xde, 0xff, 0x69, + 0x5e, 0xc3, 0x7f, 0xe8, 0xf4, 0x47, 0xf5, 0x14, 0x98, 0xd8, 0xa3, 0x19, 0x4e, 0x65, 0xcf, 0x64, + 0x6e, 0x9a, 0xd2, 0xfd, 0x57, 0xfc, 0xa5, 0x85, 0x3c, 0xd3, 0x6a, 0x77, 0x4f, 0x29, 0xf4, 0x0b, + 0x7b, 0x85, 0x6f, 0xc8, 0x80, 0x3c, 0x29, 0x44, 0x2d, 0x83, 0x5c, 0xd3, 0x69, 0x21, 0x52, 0xfd, + 0xdc, 0x6d, 0xb7, 0xca, 0x57, 0x3f, 0x5f, 0x76, 0x5a, 0x48, 0x27, 0x3f, 0xab, 0x67, 0xc0, 0xb4, + 0xcf, 0x96, 0x90, 0x0c, 0x3e, 0xe9, 0xec, 0x6d, 0x20, 0x87, 0xf3, 0xab, 0x93, 0x20, 0x57, 0xdd, + 0x58, 0x5d, 0x2d, 0x1e, 0x51, 0x8f, 0x81, 0xd9, 0x8d, 0xea, 0x7d, 0xd5, 0xda, 0xf9, 0x6a, 0x43, + 0xd3, 0xf5, 0x9a, 0x5e, 0xcc, 0xa8, 0xb3, 0x60, 0x6a, 0xa1, 0xb4, 0xd8, 0xa8, 0x54, 0xd7, 0x37, + 0x8c, 0x62, 0x16, 0xbe, 0x56, 0x01, 0x73, 0x75, 0xe4, 0x2d, 0xa2, 0x3d, 0xab, 0x89, 0xea, 0x9e, + 0xe9, 0x21, 0xf8, 0x92, 0x4c, 0xc0, 0x4c, 0x75, 0x03, 0x57, 0x1a, 0x7c, 0x62, 0x0d, 0xb8, 0x7d, + 0x5f, 0x03, 0xc4, 0x12, 0xe6, 0xd9, 0xdf, 0xf3, 0x5c, 0x9a, 0xce, 0x97, 0x73, 0xf6, 0xf1, 0x60, + 0x9a, 0xfb, 0xa6, 0xce, 0x01, 0xb0, 0x50, 0x2a, 0xdf, 0xb7, 0xac, 0xd7, 0x36, 0xaa, 0x8b, 0xc5, + 0x23, 0xf8, 0x7d, 0xa9, 0xa6, 0x6b, 0xec, 0x3d, 0x03, 0xbf, 0x97, 0xe1, 0xc0, 0x5c, 0x14, 0xc1, + 0x9c, 0x1f, 0x4c, 0x4c, 0x1f, 0x40, 0xe1, 0x5b, 0x02, 0x70, 0x96, 0x05, 0x70, 0x6e, 0x4f, 0x56, + 0x5c, 0xfa, 0x00, 0x3d, 0x3f, 0x0b, 0x26, 0xeb, 0xdb, 0xbb, 0x5e, 0xcb, 0xb9, 0x64, 0xc3, 0xa9, + 0x00, 0x19, 0xf8, 0x2d, 0x9e, 0x27, 0xcf, 0x10, 0x79, 0x72, 0xd3, 0xfe, 0x46, 0xb0, 0x12, 0x22, + 0xb8, 0xf1, 0xab, 0x01, 0x37, 0x4a, 0x02, 0x37, 0x1e, 0x2f, 0x5b, 0x50, 0xfa, 0x7c, 0xf8, 0x85, + 0xdb, 0x41, 0xbe, 0xde, 0x31, 0x9b, 0x08, 0x7e, 0x4a, 0x01, 0x33, 0xab, 0xc8, 0xdc, 0x43, 0xa5, + 0x4e, 0xc7, 0x75, 0xf6, 0x10, 0x2c, 0x87, 0xf2, 0x7a, 0x0a, 0x4c, 0x74, 0x71, 0xa6, 0x4a, 0x8b, + 0xb4, 0x60, 0x4a, 0xf7, 0x5f, 0xd5, 0xd3, 0x00, 0x58, 0x2d, 0x64, 0x7b, 0x96, 0x67, 0xa1, 0xee, + 0xa9, 0xec, 0x19, 0xe5, 0xa6, 0x29, 0x9d, 0x4b, 0x81, 0xdf, 0xc9, 0xca, 0xca, 0x18, 0xa1, 0x62, + 0x9e, 0xa7, 0x20, 0x82, 0xab, 0x6f, 0xcc, 0xca, 0xc8, 0xd8, 0xc0, 0xe2, 0x92, 0xf1, 0xf6, 0x1d, + 0x99, 0xe4, 0xcc, 0xc5, 0x39, 0xaa, 0xb5, 0x46, 0x7d, 0xa3, 0xbc, 0xd2, 0xa8, 0xaf, 0x97, 0xca, + 0x5a, 0x11, 0xa9, 0xc7, 0x41, 0x91, 0x3c, 0x36, 0x2a, 0xf5, 0xc6, 0xa2, 0xb6, 0xaa, 0x19, 0xda, + 0x62, 0x71, 0x53, 0x55, 0xc1, 0x9c, 0xae, 0x3d, 0x6b, 0x43, 0xab, 0x1b, 0x8d, 0xa5, 0x52, 0x65, + 0x55, 0x5b, 0x2c, 0x6e, 0xe1, 0x9f, 0x57, 0x2b, 0x6b, 0x15, 0xa3, 0xa1, 0x6b, 0xa5, 0xf2, 0x8a, + 0xb6, 0x58, 0xdc, 0x56, 0xaf, 0x06, 0x57, 0x55, 0x6b, 0x8d, 0xd2, 0xfa, 0xba, 0x5e, 0x3b, 0xa7, + 0x35, 0xd8, 0x1f, 0xf5, 0xa2, 0x45, 0x2b, 0x32, 0x1a, 0xf5, 0x95, 0x92, 0xae, 0x95, 0x16, 0x56, + 0xb5, 0xe2, 0x03, 0xf0, 0xb9, 0x0a, 0x98, 0x5d, 0x33, 0x2f, 0xa2, 0xfa, 0xb6, 0xe9, 0x22, 0xf3, + 0x42, 0x1b, 0xc1, 0xeb, 0x25, 0xf0, 0x84, 0x9f, 0xe2, 0xf1, 0xd2, 0x44, 0xbc, 0x6e, 0xed, 0xc3, + 0x60, 0xa1, 0x8a, 0x08, 0xc0, 0xfe, 0x57, 0xa0, 0x06, 0x2b, 0x02, 0x60, 0x4f, 0x4a, 0x58, 0x5e, + 0x32, 0xc4, 0x7e, 0xe6, 0x11, 0x80, 0x18, 0xfc, 0xb2, 0x02, 0xe6, 0x2a, 0xf6, 0x9e, 0xe5, 0xa1, + 0x65, 0x64, 0x23, 0x17, 0x8f, 0x03, 0x52, 0x30, 0xbc, 0x59, 0xe1, 0x60, 0x58, 0x12, 0x61, 0x78, + 0x42, 0x1f, 0xb6, 0x89, 0x75, 0x44, 0x8c, 0xb6, 0xd7, 0x82, 0x29, 0x8b, 0xe4, 0x2b, 0x5b, 0x2d, + 0xc6, 0xb1, 0x30, 0x41, 0xbd, 0x01, 0xcc, 0xd2, 0x97, 0x25, 0xab, 0x8d, 0xee, 0x43, 0x57, 0xd8, + 0xb8, 0x2b, 0x26, 0xc2, 0x9f, 0x0f, 0x94, 0xaf, 0x22, 0x60, 0xf9, 0xe4, 0xa4, 0x44, 0x25, 0x03, + 0xf3, 0xe5, 0x8f, 0x04, 0xf5, 0xdb, 0xa7, 0x65, 0x16, 0xfc, 0x41, 0x16, 0x4c, 0xd7, 0x3d, 0xa7, + 0x83, 0x45, 0xd6, 0xb2, 0xb7, 0xe4, 0xc0, 0xfd, 0x04, 0xaf, 0x63, 0x65, 0x11, 0xdc, 0xc7, 0xf7, + 0xe1, 0x23, 0x57, 0x41, 0x84, 0x86, 0x7d, 0x27, 0xd0, 0xb0, 0x25, 0x01, 0x95, 0xdb, 0x12, 0x95, + 0xf6, 0x43, 0xa8, 0x5f, 0x2f, 0x57, 0x40, 0xd1, 0x17, 0x33, 0xaf, 0xbc, 0xeb, 0xba, 0xc8, 0xf6, + 0xe4, 0x40, 0xf8, 0x2b, 0x1e, 0x84, 0x15, 0x11, 0x84, 0xdb, 0x62, 0x84, 0xd9, 0xaf, 0x25, 0x45, + 0x1d, 0xfb, 0x83, 0x00, 0xcd, 0xfb, 0x04, 0x34, 0x9f, 0x9a, 0x9c, 0xac, 0x64, 0x90, 0xae, 0x0c, + 0x81, 0xe8, 0x71, 0x50, 0xc4, 0x63, 0x52, 0xd9, 0xa8, 0x9c, 0xd3, 0x1a, 0x95, 0xea, 0xb9, 0x8a, + 0xa1, 0x15, 0x11, 0x7c, 0x99, 0x02, 0x66, 0x28, 0x69, 0x3a, 0xda, 0x73, 0x2e, 0x4a, 0xf6, 0x7a, + 0x5f, 0x4e, 0x68, 0x2c, 0xf0, 0x35, 0x44, 0x68, 0xc6, 0xcf, 0x26, 0x30, 0x16, 0x62, 0x8a, 0x7b, + 0x24, 0xf5, 0x56, 0xfb, 0xd4, 0x60, 0xab, 0x8f, 0xb6, 0xf4, 0xed, 0xad, 0x5e, 0x9e, 0x03, 0x80, + 0x36, 0xf2, 0x9c, 0x85, 0x2e, 0xc1, 0xb5, 0x10, 0x13, 0x41, 0x6c, 0x33, 0x03, 0xc5, 0x36, 0xdb, + 0x4f, 0x6c, 0x3f, 0xc0, 0x8f, 0x59, 0x0b, 0x22, 0x7a, 0xb7, 0x44, 0xb2, 0x1b, 0x53, 0x12, 0x3d, + 0x3b, 0xf4, 0x05, 0x25, 0x2b, 0x5a, 0x9d, 0xd7, 0x82, 0x29, 0xf2, 0x58, 0x35, 0x77, 0x10, 0xd3, + 0xa1, 0x30, 0x41, 0x3d, 0x0b, 0x66, 0x68, 0xc6, 0xa6, 0x63, 0xe3, 0xf6, 0xe4, 0x48, 0x06, 0x21, + 0x0d, 0x83, 0xd8, 0x74, 0x91, 0xe9, 0x39, 0x2e, 0x29, 0x23, 0x4f, 0x41, 0xe4, 0x92, 0xe0, 0x37, + 0x03, 0x2d, 0xd4, 0x04, 0xc9, 0x79, 0x62, 0x92, 0xa6, 0x24, 0x93, 0x9b, 0xbd, 0xe1, 0xf4, 0x8f, + 0x6a, 0x5d, 0x03, 0xa3, 0xbd, 0x44, 0xa6, 0x76, 0x48, 0x3d, 0x09, 0x54, 0x96, 0x8a, 0xf3, 0x96, + 0x6b, 0x55, 0x43, 0xab, 0x1a, 0xc5, 0xcd, 0xbe, 0x12, 0xb5, 0x05, 0xdf, 0x98, 0x03, 0xb9, 0x67, + 0x3a, 0x96, 0x0d, 0x9f, 0x9f, 0x11, 0x44, 0xc2, 0x46, 0xde, 0x25, 0xc7, 0xbd, 0x18, 0x28, 0x6a, + 0x98, 0x10, 0x8f, 0x4d, 0x28, 0x4a, 0xca, 0x40, 0x51, 0xca, 0xf5, 0x13, 0xa5, 0x5f, 0xe4, 0x45, + 0xe9, 0x2e, 0x51, 0x94, 0x6e, 0xec, 0xc3, 0x7f, 0x4c, 0x7c, 0x44, 0x07, 0xf0, 0xf1, 0xa0, 0x03, + 0xb8, 0x47, 0x80, 0xf1, 0x71, 0x72, 0xc5, 0x24, 0x03, 0xf0, 0x4b, 0xa9, 0x2a, 0x7e, 0x3f, 0xa8, + 0xb7, 0x22, 0xa0, 0xde, 0xee, 0xd3, 0x27, 0x58, 0xfb, 0xbb, 0x8e, 0x07, 0xf6, 0x77, 0x13, 0x17, + 0xd5, 0x13, 0xe0, 0xd8, 0x62, 0x65, 0x69, 0x49, 0xd3, 0xb5, 0xaa, 0xd1, 0xa8, 0x6a, 0xc6, 0xf9, + 0x9a, 0x7e, 0x5f, 0xb1, 0x0d, 0xdf, 0xa0, 0x00, 0x80, 0x39, 0x54, 0x36, 0xed, 0x26, 0x6a, 0xcb, + 0xf5, 0xe8, 0xff, 0x23, 0x9b, 0xac, 0x4f, 0x08, 0xcb, 0x8f, 0x80, 0xf3, 0x35, 0x59, 0x79, 0xad, + 0x8c, 0x2c, 0x2c, 0x19, 0xa8, 0x6f, 0x7b, 0x24, 0xd8, 0x9e, 0x57, 0x81, 0xa3, 0x7e, 0x79, 0x2c, + 0x7b, 0xff, 0x69, 0xdf, 0x3b, 0x73, 0x60, 0x8e, 0xc1, 0xe2, 0xcf, 0xe3, 0x1f, 0xcc, 0xc8, 0x4c, + 0xe4, 0x21, 0x98, 0x64, 0xd3, 0x76, 0xbf, 0x7b, 0x0f, 0xde, 0xd5, 0x65, 0x30, 0xdd, 0x41, 0xee, + 0x8e, 0xd5, 0xed, 0x5a, 0x8e, 0x4d, 0x17, 0xe4, 0xe6, 0x6e, 0x7b, 0x6c, 0xc0, 0x71, 0xb2, 0x76, + 0x39, 0xbf, 0x6e, 0xba, 0x9e, 0xd5, 0xb4, 0x3a, 0xa6, 0xed, 0xad, 0x87, 0x99, 0x75, 0xfe, 0x4f, + 0xf8, 0xd2, 0x84, 0xd3, 0x1a, 0xb1, 0x25, 0x11, 0x22, 0xf1, 0xbb, 0x09, 0xa6, 0x24, 0xb1, 0x05, + 0x26, 0x13, 0x8b, 0x87, 0x52, 0x15, 0x8b, 0x3e, 0x78, 0x6f, 0xa9, 0xd7, 0x80, 0x13, 0x95, 0x6a, + 0xb9, 0xa6, 0xeb, 0x5a, 0xd9, 0x68, 0xac, 0x6b, 0xfa, 0x5a, 0xa5, 0x5e, 0xaf, 0xd4, 0xaa, 0xf5, + 0x83, 0x68, 0x3b, 0xfc, 0xa4, 0x12, 0x48, 0xcc, 0x22, 0x6a, 0xb6, 0x2d, 0x1b, 0xc1, 0x7b, 0x0e, + 0x28, 0x30, 0xe2, 0xaa, 0x8f, 0x3c, 0xce, 0xac, 0xfe, 0x08, 0x9c, 0x5f, 0x9f, 0x1c, 0xe7, 0xfe, + 0x05, 0xfe, 0x1b, 0x56, 0xff, 0x2f, 0x2b, 0xe0, 0x18, 0xa7, 0x88, 0x3a, 0xda, 0x19, 0xd9, 0x4a, + 0xde, 0xcf, 0xf0, 0xba, 0x5b, 0x11, 0x31, 0xed, 0x67, 0x4d, 0xef, 0x23, 0x23, 0x02, 0xd6, 0xb7, + 0x05, 0xb0, 0xae, 0x0a, 0xb0, 0x3e, 0x6d, 0x88, 0x32, 0x93, 0x21, 0xfb, 0x5b, 0xa9, 0x22, 0x7b, + 0x0d, 0x38, 0xb1, 0x5e, 0xd2, 0x8d, 0x4a, 0xb9, 0xb2, 0x5e, 0xc2, 0xe3, 0x28, 0x37, 0x64, 0x47, + 0x98, 0xeb, 0x22, 0xe8, 0x7d, 0xf1, 0xfd, 0xfd, 0x1c, 0xb8, 0xb6, 0x7f, 0x47, 0x5b, 0xde, 0x36, + 0xed, 0x2d, 0x04, 0x2d, 0x19, 0xa8, 0x17, 0xc1, 0x44, 0x93, 0x64, 0xa7, 0x38, 0xf3, 0x5b, 0x37, + 0x31, 0x7d, 0x39, 0xad, 0x41, 0xf7, 0x7f, 0x85, 0xef, 0xe1, 0x05, 0xc2, 0x10, 0x05, 0xe2, 0x19, + 0xf1, 0xe0, 0xed, 0xa3, 0x3b, 0x42, 0x36, 0x3e, 0x13, 0xc8, 0xc6, 0x79, 0x41, 0x36, 0xca, 0x07, + 0x2b, 0x3e, 0x99, 0x98, 0xfc, 0xc9, 0x23, 0xa1, 0x03, 0x88, 0x94, 0x26, 0x2b, 0x7a, 0x54, 0xe8, + 0xdb, 0xdd, 0xbf, 0x4e, 0x01, 0x85, 0x45, 0xd4, 0x46, 0xb2, 0x2b, 0x91, 0xdf, 0xce, 0xca, 0x6e, + 0x88, 0x50, 0x18, 0x68, 0xd9, 0xd1, 0xab, 0x23, 0x9e, 0xb5, 0x83, 0xba, 0x9e, 0xb9, 0xd3, 0x21, + 0xac, 0x56, 0xf4, 0x30, 0x01, 0x3e, 0x2f, 0x2b, 0xb3, 0x5d, 0x12, 0x53, 0xcd, 0xbf, 0x8d, 0x35, + 0xc5, 0xaf, 0xcd, 0x81, 0xc2, 0x79, 0xb3, 0xdd, 0x46, 0x1e, 0xfc, 0x7a, 0x16, 0x14, 0xca, 0x78, + 0x4e, 0x8a, 0xe0, 0xe3, 0x42, 0xb0, 0x20, 0x98, 0x74, 0x1d, 0xc7, 0x5b, 0x37, 0xbd, 0x6d, 0x86, + 0x56, 0xf0, 0xce, 0xb6, 0x69, 0x7f, 0x93, 0x07, 0xed, 0x1e, 0x11, 0xb4, 0x1f, 0x15, 0xb8, 0x49, + 0x2b, 0x9a, 0xa7, 0x95, 0x44, 0xa0, 0x06, 0xc1, 0xe4, 0x8e, 0x8d, 0x76, 0x1c, 0xdb, 0x6a, 0xfa, + 0x23, 0xbd, 0xff, 0x0e, 0x3f, 0x12, 0xcc, 0x92, 0x17, 0x04, 0xcc, 0xe6, 0xa5, 0x6b, 0x49, 0x06, + 0x5a, 0x7d, 0x08, 0xcc, 0xae, 0x03, 0x8f, 0xa2, 0x10, 0x34, 0x8c, 0x5a, 0xa3, 0xac, 0x6b, 0x25, + 0x43, 0x6b, 0xac, 0xd6, 0xca, 0xa5, 0xd5, 0x86, 0xae, 0xad, 0xd7, 0x8a, 0x08, 0xfe, 0xd7, 0x2c, + 0x66, 0x6e, 0xd3, 0xd9, 0x43, 0x2e, 0x5c, 0x96, 0xe2, 0x73, 0x1c, 0x4f, 0x18, 0x06, 0xbf, 0x28, + 0xbd, 0x55, 0xce, 0xb8, 0xc3, 0x28, 0x88, 0xe8, 0x0a, 0x3f, 0x2a, 0xb5, 0xed, 0x1d, 0x5b, 0xd4, + 0x23, 0x80, 0xd3, 0xff, 0x33, 0x0b, 0x26, 0xca, 0x8e, 0xbd, 0x87, 0x5c, 0x8f, 0xb7, 0x32, 0x79, + 0x6e, 0x66, 0x44, 0x6e, 0xe2, 0xae, 0x09, 0xd9, 0x9e, 0xeb, 0x74, 0x7c, 0x33, 0xd3, 0x7f, 0x85, + 0xbf, 0x96, 0x94, 0xc3, 0xac, 0xe6, 0xe8, 0xe5, 0xa6, 0xfe, 0x15, 0x09, 0xe4, 0x29, 0x3d, 0x0a, + 0xf0, 0x86, 0x24, 0xb8, 0xf4, 0x27, 0x20, 0xfd, 0x5d, 0xde, 0xaf, 0x28, 0x60, 0x96, 0x2a, 0x5f, + 0x1d, 0x91, 0x71, 0x11, 0xd6, 0xf8, 0x85, 0x9e, 0x1e, 0xe6, 0xaf, 0x1c, 0x11, 0xd8, 0x5f, 0x30, + 0x3b, 0x9d, 0x60, 0xd1, 0x6f, 0xe5, 0x88, 0xce, 0xde, 0xa9, 0x98, 0x2f, 0x14, 0x40, 0xce, 0xdc, + 0xf5, 0xb6, 0xe1, 0x0f, 0xa4, 0x4d, 0x7e, 0xa1, 0x33, 0x60, 0xf4, 0x44, 0x40, 0x72, 0x1c, 0xe4, + 0x3d, 0xe7, 0x22, 0xf2, 0xf9, 0x40, 0x5f, 0x30, 0x1c, 0x66, 0xa7, 0x63, 0x90, 0x0f, 0x0c, 0x0e, + 0xff, 0x1d, 0x8f, 0x30, 0x66, 0xb3, 0xe9, 0xec, 0xda, 0x5e, 0xc5, 0x5f, 0xf8, 0x0b, 0x13, 0xe0, + 0xc3, 0x19, 0x99, 0x29, 0x84, 0x04, 0x81, 0xc9, 0x20, 0xbb, 0x30, 0x84, 0x2a, 0xcd, 0x83, 0x9b, + 0x4b, 0xeb, 0xeb, 0x0d, 0xa3, 0x76, 0x9f, 0x56, 0x0d, 0x87, 0xfb, 0x46, 0xa5, 0xda, 0x30, 0x56, + 0xb4, 0x46, 0x79, 0x43, 0x27, 0xab, 0x33, 0xa5, 0x72, 0xb9, 0xb6, 0x51, 0x35, 0x8a, 0x08, 0xbe, + 0x3d, 0x0b, 0x66, 0xca, 0x6d, 0xa7, 0x1b, 0x20, 0x7c, 0x5d, 0x88, 0x70, 0xc0, 0xc6, 0x0c, 0xc7, + 0x46, 0xf8, 0x2f, 0x19, 0xd9, 0xad, 0x5e, 0x9f, 0x21, 0x5c, 0xf1, 0x11, 0xbd, 0xd4, 0xaf, 0x49, + 0x6d, 0xf5, 0x0e, 0x2e, 0x2f, 0x7d, 0x95, 0xf8, 0xfc, 0x9d, 0x60, 0xa2, 0x44, 0x05, 0x03, 0xfe, + 0x4d, 0x06, 0x14, 0xca, 0x8e, 0xbd, 0x69, 0x6d, 0xa9, 0x37, 0x82, 0x39, 0x64, 0x9b, 0x17, 0xda, + 0x68, 0xd1, 0xf4, 0xcc, 0x3d, 0x0b, 0x5d, 0x22, 0x0d, 0x98, 0xd4, 0x7b, 0x52, 0x31, 0x51, 0x2c, + 0x05, 0x5d, 0xd8, 0xdd, 0x22, 0x44, 0x4d, 0xea, 0x7c, 0x92, 0xfa, 0x34, 0x70, 0x35, 0x7d, 0x5d, + 0x77, 0x91, 0x8b, 0xda, 0xc8, 0xec, 0x22, 0x6c, 0x8c, 0xda, 0xa8, 0x4d, 0x84, 0x76, 0x52, 0x8f, + 0xfa, 0xac, 0x9e, 0x05, 0x33, 0xf4, 0x13, 0x31, 0x75, 0xba, 0x44, 0x8c, 0x27, 0x75, 0x21, 0x4d, + 0x7d, 0x3c, 0xc8, 0xa3, 0xcb, 0x9e, 0x6b, 0x9e, 0x6a, 0x11, 0xbc, 0xae, 0x9e, 0xa7, 0xbe, 0x5e, + 0xf3, 0xbe, 0xaf, 0xd7, 0x7c, 0x9d, 0x78, 0x82, 0xe9, 0x34, 0x17, 0xfc, 0x95, 0xc9, 0xc0, 0x90, + 0xf8, 0xd7, 0x6c, 0x28, 0x18, 0x2a, 0xc8, 0xd9, 0xe6, 0x0e, 0x62, 0x72, 0x41, 0x9e, 0xd5, 0x9b, + 0xc1, 0x51, 0x73, 0xcf, 0xf4, 0x4c, 0x77, 0xd5, 0x69, 0x9a, 0x6d, 0x32, 0xf8, 0xf9, 0x9a, 0xdf, + 0xfb, 0x81, 0xac, 0xc3, 0x7b, 0x8e, 0x8b, 0x48, 0x2e, 0x7f, 0x1d, 0xde, 0x4f, 0xc0, 0xa5, 0x5b, + 0x4d, 0xc7, 0x26, 0xf4, 0x2b, 0x3a, 0x79, 0xc6, 0x5c, 0x69, 0x59, 0x5d, 0xdc, 0x10, 0x52, 0x4a, + 0x95, 0x2e, 0x28, 0xd7, 0xaf, 0xd8, 0x4d, 0xb2, 0x06, 0x3f, 0xa9, 0x47, 0x7d, 0x56, 0x17, 0xc0, + 0x34, 0x5b, 0x7e, 0x5e, 0xc3, 0x72, 0x55, 0x20, 0x72, 0x75, 0x46, 0xf4, 0xa4, 0xa1, 0x78, 0xce, + 0x57, 0xc3, 0x7c, 0x3a, 0xff, 0x93, 0x7a, 0x2f, 0x78, 0x14, 0x7b, 0x2d, 0xef, 0x76, 0x3d, 0x67, + 0x87, 0x82, 0xbe, 0x64, 0xb5, 0x69, 0x0b, 0x26, 0x48, 0x0b, 0xe2, 0xb2, 0xa8, 0xb7, 0x81, 0xe3, + 0x1d, 0x17, 0x6d, 0x22, 0xf7, 0x7e, 0x73, 0x67, 0xf7, 0xb2, 0xe1, 0x9a, 0x76, 0xb7, 0xe3, 0xb8, + 0xde, 0xa9, 0x49, 0x42, 0x7c, 0xdf, 0x6f, 0xac, 0xa3, 0x9c, 0x04, 0x05, 0xca, 0x3e, 0xf8, 0x92, + 0xbc, 0xb4, 0x13, 0x1d, 0x6b, 0x50, 0xac, 0x79, 0xf6, 0x04, 0x30, 0xc1, 0x7a, 0x38, 0x02, 0xd4, + 0xf4, 0x6d, 0x27, 0x7b, 0x66, 0x73, 0xac, 0x14, 0xdd, 0xcf, 0xa6, 0xde, 0x0e, 0x0a, 0x4d, 0xd2, + 0x2c, 0x82, 0xd9, 0xf4, 0x6d, 0x8f, 0xea, 0x5f, 0x29, 0xc9, 0xa2, 0xb3, 0xac, 0xf0, 0x8b, 0x8a, + 0x94, 0xdf, 0x5d, 0x1c, 0xc5, 0xc9, 0xb4, 0xfa, 0x9b, 0xd9, 0x21, 0xba, 0xcd, 0x5b, 0xc0, 0x4d, + 0xac, 0x4f, 0x64, 0xf6, 0xc7, 0x62, 0x63, 0x61, 0xc3, 0x37, 0xc1, 0xb1, 0x55, 0x52, 0x37, 0x4a, + 0x3a, 0x9e, 0x3f, 0x2d, 0x62, 0xd3, 0xfd, 0x66, 0x70, 0xe3, 0x80, 0xdc, 0x9a, 0xd1, 0xa8, 0x96, + 0xd6, 0xb4, 0xe2, 0xa6, 0x68, 0xdb, 0xd4, 0x8d, 0xda, 0x7a, 0x43, 0xdf, 0xa8, 0x56, 0x2b, 0xd5, + 0x65, 0x5a, 0x18, 0x36, 0x09, 0x4f, 0x86, 0x19, 0xce, 0xeb, 0x15, 0x43, 0x6b, 0x94, 0x6b, 0xd5, + 0xa5, 0xca, 0x72, 0xd1, 0x1a, 0x64, 0x18, 0x3d, 0xa0, 0x9e, 0x01, 0xd7, 0x0a, 0x94, 0x54, 0x6a, + 0x55, 0x3c, 0x9f, 0x28, 0x97, 0xaa, 0x65, 0x0d, 0x4f, 0x1e, 0x2e, 0xaa, 0x10, 0x9c, 0xa0, 0xc5, + 0x35, 0x96, 0x2a, 0xab, 0xfc, 0x16, 0xc0, 0x27, 0x32, 0xea, 0x29, 0x70, 0x15, 0xff, 0xad, 0x52, + 0x3d, 0x57, 0x5a, 0xad, 0x2c, 0x16, 0xff, 0x38, 0xa3, 0xde, 0x00, 0xae, 0x13, 0xfe, 0xa2, 0xab, + 0xf9, 0x8d, 0xca, 0x62, 0x63, 0xad, 0x52, 0x5f, 0x2b, 0x19, 0xe5, 0x95, 0xe2, 0x27, 0xc9, 0x7c, + 0x21, 0x30, 0x80, 0x39, 0x67, 0xb8, 0x97, 0xf3, 0x63, 0x7a, 0x49, 0x14, 0xd4, 0xc7, 0xf5, 0x85, + 0x3d, 0xde, 0x86, 0x7d, 0x28, 0x18, 0x1d, 0x16, 0x05, 0x11, 0x7a, 0x42, 0x82, 0xb2, 0x92, 0xc9, + 0x90, 0x31, 0x84, 0x08, 0x9d, 0x01, 0xd7, 0x56, 0x35, 0x8a, 0x94, 0xae, 0x95, 0x6b, 0xe7, 0x34, + 0xbd, 0x71, 0xbe, 0xb4, 0xba, 0xaa, 0x19, 0x8d, 0xa5, 0x8a, 0x5e, 0x37, 0x8a, 0x9b, 0xf0, 0x9f, + 0xb2, 0xc1, 0x1c, 0x9a, 0xe3, 0xd6, 0xdf, 0x64, 0x93, 0xaa, 0x75, 0xec, 0x5c, 0xf9, 0xc9, 0xa0, + 0xd0, 0xf5, 0x4c, 0x6f, 0xb7, 0xcb, 0xb4, 0xfa, 0xd1, 0xfd, 0xb5, 0x7a, 0xbe, 0x4e, 0x32, 0xe9, + 0x2c, 0x33, 0xfc, 0x62, 0x26, 0x89, 0x9a, 0x8e, 0x60, 0x1a, 0x6d, 0x0d, 0xc1, 0xe2, 0xd3, 0x00, + 0xfa, 0xd2, 0x5e, 0xa9, 0x37, 0x4a, 0xab, 0xba, 0x56, 0x5a, 0xbc, 0x3f, 0x98, 0x3c, 0x23, 0xf5, + 0x04, 0x38, 0xb6, 0x51, 0xc5, 0xd3, 0x61, 0xa2, 0x2e, 0xb5, 0x6a, 0x55, 0x2b, 0x63, 0xbe, 0x3f, + 0x8f, 0x2c, 0x55, 0x63, 0x0b, 0x9a, 0xd0, 0x8d, 0xad, 0x1c, 0x8e, 0xff, 0xdf, 0x90, 0xf6, 0xe8, + 0x08, 0x25, 0x8c, 0x2f, 0x6b, 0xb4, 0x38, 0x3c, 0x2c, 0xe5, 0xc4, 0x21, 0x45, 0x49, 0x32, 0x3c, + 0xfe, 0xc3, 0x10, 0x78, 0x9c, 0x00, 0xc7, 0x78, 0x3c, 0x88, 0x33, 0x47, 0x34, 0x0c, 0x5f, 0x9d, + 0x04, 0x85, 0x3a, 0x6a, 0xa3, 0xa6, 0x07, 0xdf, 0xc9, 0x19, 0x13, 0x73, 0x20, 0x1b, 0x38, 0x0f, + 0x64, 0xad, 0x96, 0x30, 0x7d, 0xce, 0xf6, 0x4c, 0x9f, 0x63, 0xcc, 0x00, 0x25, 0x91, 0x19, 0x90, + 0x4b, 0xc1, 0x0c, 0xc8, 0x0f, 0x6f, 0x06, 0x14, 0x06, 0x99, 0x01, 0xf0, 0x4d, 0x85, 0xa4, 0xbd, + 0x04, 0x65, 0xf5, 0xe1, 0x0e, 0xfe, 0xff, 0x23, 0x97, 0xa4, 0x57, 0xe9, 0x4b, 0x71, 0x32, 0x29, + 0xfe, 0x81, 0x92, 0xc2, 0xf2, 0x83, 0x7a, 0x3d, 0xb8, 0x2e, 0x7c, 0x6f, 0x68, 0xcf, 0xae, 0xd4, + 0x8d, 0x3a, 0x19, 0xf1, 0xcb, 0x35, 0x5d, 0xdf, 0x58, 0xa7, 0x2b, 0x77, 0x27, 0x81, 0x1a, 0x96, + 0xa2, 0x6f, 0x54, 0xe9, 0xf8, 0xbe, 0x25, 0x96, 0xbe, 0x54, 0xa9, 0x2e, 0x36, 0x02, 0x9d, 0xa9, + 0x2e, 0xd5, 0x8a, 0xdb, 0x78, 0xca, 0xc6, 0x95, 0x8e, 0x07, 0x68, 0x56, 0x43, 0xa9, 0xba, 0xd8, + 0x58, 0xab, 0x6a, 0x6b, 0xb5, 0x6a, 0xa5, 0x4c, 0xd2, 0xeb, 0x9a, 0x51, 0xb4, 0xf0, 0x40, 0xd3, + 0x63, 0x51, 0xd4, 0xb5, 0x92, 0x5e, 0x5e, 0xd1, 0x74, 0x5a, 0xe5, 0x03, 0xea, 0x8d, 0xe0, 0x6c, + 0xa9, 0x5a, 0x33, 0x70, 0x4a, 0xa9, 0x7a, 0xbf, 0x71, 0xff, 0xba, 0xd6, 0x58, 0xd7, 0x6b, 0x65, + 0xad, 0x5e, 0xc7, 0x7a, 0xca, 0xec, 0x8f, 0x62, 0x5b, 0x7d, 0x06, 0xb8, 0x93, 0x23, 0x4d, 0x33, + 0xc8, 0x36, 0xd1, 0x5a, 0x8d, 0x78, 0x0a, 0x2c, 0x6a, 0x8d, 0x95, 0x52, 0xbd, 0x51, 0xa9, 0x96, + 0x6b, 0x6b, 0xeb, 0x25, 0xa3, 0x82, 0xd5, 0x79, 0x5d, 0xaf, 0x19, 0xb5, 0xc6, 0x39, 0x4d, 0xaf, + 0x57, 0x6a, 0xd5, 0xa2, 0x8d, 0x9b, 0xcc, 0xe9, 0xbf, 0xdf, 0x0f, 0x3b, 0xea, 0xb5, 0xe0, 0x94, + 0x9f, 0xbe, 0x5a, 0xc3, 0x8c, 0xe6, 0x2c, 0x92, 0x4e, 0xaa, 0x16, 0xc9, 0x3f, 0x67, 0x41, 0xae, + 0xee, 0x39, 0x1d, 0xf8, 0xa3, 0x61, 0x07, 0x73, 0x1a, 0x00, 0x97, 0xec, 0xfa, 0xe0, 0x59, 0x18, + 0x9b, 0x97, 0x71, 0x29, 0xf0, 0x8f, 0xa4, 0x97, 0xaa, 0xc3, 0x3e, 0xdb, 0xe9, 0x44, 0xd8, 0x2a, + 0xdf, 0x93, 0xf3, 0xdd, 0x8f, 0x2e, 0x28, 0x99, 0xbc, 0xff, 0xec, 0x30, 0x8b, 0xd1, 0x10, 0x9c, + 0xe4, 0x60, 0xc3, 0xfc, 0xf7, 0x45, 0x02, 0xa9, 0x57, 0x83, 0xab, 0x7a, 0x84, 0x8b, 0xc8, 0xd4, + 0xa6, 0xfa, 0x18, 0xf0, 0x68, 0x4e, 0xbc, 0xb5, 0xb5, 0xda, 0x39, 0x2d, 0x10, 0xe4, 0xc5, 0x92, + 0x51, 0x2a, 0x6e, 0xc1, 0xcf, 0x2b, 0x20, 0xb7, 0xe6, 0xec, 0xf5, 0xee, 0x10, 0xd8, 0xe8, 0x12, + 0xb7, 0x16, 0xea, 0xbf, 0x8a, 0xbe, 0xca, 0x52, 0x6c, 0x5f, 0x8b, 0xde, 0x0d, 0x7c, 0x38, 0x9b, + 0x84, 0xed, 0x6b, 0x07, 0xdd, 0x02, 0xfc, 0xfb, 0x61, 0xd8, 0x1e, 0xc1, 0x5a, 0xa4, 0x9e, 0x05, + 0xa7, 0xc3, 0x0f, 0x95, 0x45, 0xad, 0x6a, 0x54, 0x96, 0xee, 0x0f, 0x99, 0x5b, 0xd1, 0xa5, 0xd8, + 0x3f, 0xa8, 0x1b, 0x8b, 0x9f, 0x69, 0x9c, 0x02, 0xc7, 0xc3, 0x6f, 0xcb, 0x9a, 0xe1, 0x7f, 0x79, + 0x00, 0x3e, 0x3f, 0x0f, 0x66, 0x68, 0xb7, 0xbe, 0xd1, 0x69, 0x99, 0x1e, 0x82, 0xb7, 0x87, 0xe8, + 0xde, 0x04, 0x8e, 0x56, 0xd6, 0x97, 0xea, 0x75, 0xcf, 0x71, 0xcd, 0x2d, 0x54, 0x6a, 0xb5, 0x5c, + 0xc6, 0xad, 0xde, 0x64, 0xf8, 0x3e, 0xe9, 0x75, 0x3e, 0x71, 0x28, 0xa1, 0x75, 0x46, 0xa0, 0xfe, + 0x15, 0xa9, 0x75, 0x39, 0x89, 0x02, 0x93, 0xa1, 0xff, 0xc0, 0x88, 0x75, 0x2e, 0x1a, 0x97, 0xcd, + 0xb3, 0x2f, 0xcc, 0x82, 0x29, 0xc3, 0xda, 0x41, 0xcf, 0x71, 0x6c, 0xd4, 0x55, 0x27, 0x80, 0xb2, + 0xbc, 0x66, 0x14, 0x8f, 0xe0, 0x07, 0x6c, 0x54, 0x65, 0xc8, 0x83, 0x86, 0x2b, 0xc0, 0x0f, 0x25, + 0xa3, 0xa8, 0xe0, 0x87, 0x35, 0xcd, 0x28, 0xe6, 0xf0, 0x43, 0x55, 0x33, 0x8a, 0x79, 0xfc, 0xb0, + 0xbe, 0x6a, 0x14, 0x0b, 0xf8, 0xa1, 0x52, 0x37, 0x8a, 0x13, 0xf8, 0x61, 0xa1, 0x6e, 0x14, 0x27, + 0xf1, 0xc3, 0xb9, 0xba, 0x51, 0x9c, 0xc2, 0x0f, 0x65, 0xc3, 0x28, 0x02, 0xfc, 0xf0, 0xcc, 0xba, + 0x51, 0x9c, 0xc6, 0x0f, 0xa5, 0xb2, 0x51, 0x9c, 0x21, 0x0f, 0x9a, 0x51, 0x9c, 0xc5, 0x0f, 0xf5, + 0xba, 0x51, 0x9c, 0x23, 0x25, 0xd7, 0x8d, 0xe2, 0x51, 0x52, 0x57, 0xc5, 0x28, 0x16, 0xf1, 0xc3, + 0x4a, 0xdd, 0x28, 0x1e, 0x23, 0x99, 0xeb, 0x46, 0x51, 0x25, 0x95, 0xd6, 0x8d, 0xe2, 0x55, 0x24, + 0x4f, 0xdd, 0x28, 0x1e, 0x27, 0x55, 0xd4, 0x8d, 0xe2, 0x09, 0x42, 0x86, 0x66, 0x14, 0x4f, 0x92, + 0x3c, 0xba, 0x51, 0xbc, 0x9a, 0x7c, 0xaa, 0x1a, 0xc5, 0x53, 0x84, 0x30, 0xcd, 0x28, 0x5e, 0x43, + 0x1e, 0x74, 0xa3, 0x08, 0xc9, 0xa7, 0x92, 0x51, 0x7c, 0x14, 0x7c, 0x34, 0x98, 0x5a, 0x46, 0x1e, + 0x05, 0x11, 0x16, 0x81, 0xb2, 0x8c, 0x3c, 0xde, 0x8c, 0xff, 0x9a, 0x02, 0xae, 0x66, 0x53, 0xbf, + 0x25, 0xd7, 0xd9, 0x59, 0x45, 0x5b, 0x66, 0xf3, 0x8a, 0x76, 0x19, 0x9b, 0x50, 0xb0, 0x2e, 0x2c, + 0x5d, 0x75, 0xc2, 0xce, 0x88, 0x3c, 0xc7, 0x5a, 0x9c, 0xfe, 0x62, 0x94, 0x12, 0x2e, 0x46, 0x31, + 0x8b, 0xec, 0x1f, 0x79, 0x89, 0x16, 0xd6, 0x8f, 0x33, 0x3d, 0xeb, 0xc7, 0x58, 0x4d, 0x3a, 0xc8, + 0xed, 0x3a, 0xb6, 0xd9, 0xae, 0xb3, 0xed, 0x52, 0xba, 0xea, 0xd5, 0x9b, 0xac, 0x3e, 0xcb, 0xd7, + 0x0c, 0x6a, 0x95, 0x3d, 0x3d, 0x6e, 0x86, 0xdb, 0xdb, 0xcc, 0x08, 0x25, 0xf9, 0x64, 0xa0, 0x24, + 0x86, 0xa0, 0x24, 0xf7, 0x1e, 0xa0, 0xec, 0x64, 0xfa, 0x52, 0x19, 0x6e, 0x6a, 0x11, 0x3a, 0x13, + 0xfa, 0xcb, 0xd5, 0x0a, 0xfc, 0x7c, 0x16, 0x9c, 0xd4, 0xec, 0x7e, 0x16, 0x3e, 0x2f, 0x0b, 0x6f, + 0xe7, 0xa1, 0x59, 0x17, 0x59, 0x7a, 0x67, 0xdf, 0x66, 0xf7, 0x2f, 0x33, 0x82, 0xa3, 0x9f, 0x0e, + 0x38, 0x5a, 0x17, 0x38, 0x7a, 0xcf, 0xf0, 0x45, 0x27, 0x63, 0x68, 0x75, 0xa4, 0x1d, 0x50, 0x0e, + 0x7e, 0x33, 0x07, 0x1e, 0x4d, 0x3d, 0x1e, 0x18, 0x85, 0x54, 0xcb, 0x4a, 0x76, 0x4b, 0x47, 0x5d, + 0xcf, 0x74, 0x3d, 0xe1, 0x14, 0x6a, 0xcf, 0x54, 0x2a, 0x93, 0xc2, 0x54, 0x2a, 0x3b, 0x70, 0x2a, + 0x05, 0xdf, 0xcb, 0x9b, 0x0f, 0xe7, 0x45, 0x8c, 0x4b, 0xfd, 0xfb, 0xff, 0xb8, 0x16, 0x46, 0x41, + 0x1d, 0xd8, 0x15, 0x3f, 0x26, 0x40, 0xbd, 0x74, 0xe0, 0x1a, 0x92, 0x21, 0xfe, 0x47, 0xa3, 0xb5, + 0xf3, 0x72, 0xfc, 0x37, 0xd1, 0x28, 0x29, 0xb6, 0x52, 0x35, 0xd0, 0x3f, 0x33, 0x01, 0xa6, 0x88, + 0x2e, 0xac, 0x5a, 0xf6, 0x45, 0xf8, 0x06, 0x05, 0xcc, 0x54, 0xd1, 0xa5, 0xf2, 0xb6, 0xd9, 0x6e, + 0x23, 0x7b, 0x0b, 0xf1, 0x66, 0xfb, 0x29, 0x30, 0x61, 0x76, 0x3a, 0xd5, 0x70, 0x9f, 0xc1, 0x7f, + 0x65, 0xfd, 0xef, 0x37, 0xfa, 0x2a, 0x79, 0x26, 0x46, 0xc9, 0x83, 0x7a, 0xe7, 0xf9, 0x3a, 0x23, + 0x66, 0xc8, 0x67, 0xc0, 0x74, 0xd3, 0xcf, 0x12, 0x78, 0xab, 0xf3, 0x49, 0xf0, 0xef, 0x12, 0x75, + 0x03, 0x52, 0x95, 0x27, 0x13, 0x0a, 0x34, 0x62, 0x3b, 0xe4, 0x04, 0x38, 0x66, 0xd4, 0x6a, 0x8d, + 0xb5, 0x52, 0xf5, 0xfe, 0xf0, 0x94, 0xe8, 0x26, 0x7c, 0x4d, 0x0e, 0xcc, 0xd5, 0x9d, 0xf6, 0x1e, + 0x0a, 0x61, 0xaa, 0x84, 0x30, 0xf5, 0xf0, 0x29, 0xb3, 0x8f, 0x4f, 0xea, 0x49, 0x50, 0x30, 0xed, + 0xee, 0x25, 0xe4, 0xdb, 0x86, 0xec, 0x8d, 0xc1, 0xf8, 0xfb, 0xbc, 0x1e, 0xeb, 0x22, 0x8c, 0x77, + 0x0d, 0xe0, 0xa4, 0x48, 0x55, 0x04, 0x90, 0x67, 0xc1, 0x4c, 0x97, 0x6e, 0x16, 0x1a, 0xdc, 0x9e, + 0xb0, 0x90, 0x46, 0x48, 0xa4, 0xbb, 0xd5, 0x0a, 0x23, 0x91, 0xbc, 0xc1, 0x37, 0x04, 0xea, 0xbf, + 0x21, 0x40, 0x5c, 0x3a, 0x08, 0x61, 0xc9, 0x40, 0x7e, 0xdd, 0xa8, 0x67, 0x78, 0xa7, 0xc0, 0x71, + 0xa6, 0xb5, 0x8d, 0xf2, 0x4a, 0x69, 0x75, 0x55, 0xab, 0x2e, 0x6b, 0x8d, 0xca, 0x22, 0xdd, 0xaa, + 0x08, 0x53, 0x4a, 0x86, 0xa1, 0xad, 0xad, 0x1b, 0xf5, 0x86, 0xf6, 0xec, 0xb2, 0xa6, 0x2d, 0x12, + 0x47, 0x24, 0x72, 0x92, 0xc0, 0x77, 0x19, 0x2b, 0x55, 0xeb, 0xe7, 0x35, 0xbd, 0xb8, 0x7d, 0xb6, + 0x04, 0xa6, 0xb9, 0x7e, 0x1e, 0x53, 0xb7, 0x88, 0x36, 0xcd, 0xdd, 0x36, 0xb3, 0xd5, 0x8a, 0x47, + 0x30, 0x75, 0x84, 0x37, 0x35, 0xbb, 0x7d, 0xa5, 0x98, 0x51, 0x8b, 0x60, 0x86, 0xef, 0xd2, 0x8b, + 0x59, 0xf8, 0x8a, 0x6b, 0xc1, 0xd4, 0x79, 0xc7, 0xbd, 0x48, 0xbc, 0xc7, 0xe0, 0x07, 0x69, 0x34, + 0x09, 0xff, 0x5c, 0x1e, 0x37, 0xb0, 0xbf, 0x4e, 0xde, 0x5b, 0xc0, 0x2f, 0x6d, 0x7e, 0xe0, 0xd9, + 0xbb, 0x33, 0x60, 0xfa, 0x92, 0x9f, 0x3b, 0xd4, 0x74, 0x2e, 0x09, 0xfe, 0xba, 0xdc, 0xfe, 0xff, + 0xe0, 0x2a, 0xd3, 0xdf, 0x9f, 0x7e, 0x67, 0x16, 0x14, 0x96, 0x91, 0x57, 0x6a, 0xb7, 0x79, 0xbe, + 0xbd, 0x52, 0xfa, 0x3c, 0x85, 0xd0, 0x88, 0x52, 0xbb, 0x1d, 0xad, 0x54, 0x1c, 0x83, 0x7c, 0xbf, + 0x5f, 0x21, 0x0d, 0xbe, 0x49, 0xea, 0x24, 0xd4, 0x80, 0x0a, 0xd3, 0xe7, 0xd8, 0xc7, 0x94, 0x60, + 0x8f, 0xfb, 0xd7, 0x38, 0x2b, 0xe7, 0x89, 0x61, 0x24, 0x91, 0x4c, 0xfc, 0x5e, 0xb9, 0x9f, 0x4f, + 0xbd, 0x0f, 0x4c, 0xec, 0x76, 0x51, 0xd9, 0xec, 0x22, 0x42, 0x5b, 0x6f, 0x4b, 0x6b, 0x17, 0x1e, + 0x40, 0x4d, 0x6f, 0xbe, 0xb2, 0x83, 0x0d, 0xea, 0x0d, 0x9a, 0x31, 0x08, 0xce, 0xc1, 0xde, 0x75, + 0xbf, 0x04, 0x3c, 0xa3, 0x68, 0x9a, 0xcd, 0x6d, 0x61, 0x8f, 0x3c, 0x48, 0x80, 0x2f, 0x19, 0x02, + 0xd0, 0xd8, 0xdd, 0xe0, 0xc8, 0x83, 0x59, 0x89, 0x61, 0x1c, 0xc1, 0x16, 0xee, 0x30, 0x30, 0x7e, + 0x26, 0x0b, 0x72, 0xb5, 0x0e, 0xb2, 0xe5, 0xdc, 0x53, 0xdf, 0x20, 0xef, 0x03, 0x16, 0x34, 0x0c, + 0x97, 0x1e, 0xc1, 0xbd, 0x5b, 0x41, 0xce, 0xb2, 0x37, 0x1d, 0x66, 0x7e, 0x3e, 0x2a, 0x62, 0xab, + 0xa7, 0x62, 0x6f, 0x3a, 0x3a, 0xc9, 0x28, 0xeb, 0xfe, 0x15, 0x57, 0x77, 0xfa, 0x2c, 0xfd, 0xd6, + 0x24, 0x28, 0x50, 0xa1, 0x85, 0x2f, 0x57, 0x80, 0x52, 0x6a, 0xb5, 0x22, 0x8e, 0x78, 0x64, 0xf7, + 0x1d, 0xf1, 0x70, 0xc8, 0x6f, 0x01, 0xdf, 0x83, 0x77, 0x31, 0x50, 0x84, 0x64, 0x0f, 0xce, 0x14, + 0xa7, 0xd4, 0x6a, 0x45, 0x7b, 0x9a, 0x06, 0x15, 0x66, 0xc5, 0x0a, 0x79, 0x3d, 0x56, 0xe4, 0xf4, + 0x38, 0x71, 0x77, 0x1f, 0x49, 0x5f, 0xfa, 0x10, 0xfd, 0x63, 0x16, 0x4c, 0xac, 0x5a, 0x5d, 0x0f, + 0x63, 0x53, 0x92, 0xc1, 0xe6, 0x5a, 0x30, 0xe5, 0xb3, 0x06, 0x77, 0x6c, 0xb8, 0xd7, 0x0e, 0x13, + 0xe0, 0x1b, 0x79, 0x74, 0x9e, 0x29, 0xa2, 0xf3, 0xa4, 0xf8, 0xd6, 0x33, 0x2a, 0xa2, 0x3d, 0xb8, + 0xc3, 0x6a, 0xb3, 0xbd, 0xd5, 0xfe, 0x66, 0xc0, 0xf0, 0x35, 0x81, 0xe1, 0x77, 0x0c, 0x53, 0x65, + 0xfa, 0x4c, 0xff, 0x42, 0x16, 0x00, 0x5c, 0x37, 0x3b, 0x26, 0xf3, 0x23, 0xc2, 0xe1, 0xd7, 0x18, + 0xee, 0xbe, 0x86, 0xe7, 0xee, 0x9a, 0xc8, 0xdd, 0xa7, 0x0e, 0x6e, 0x6a, 0xdc, 0x71, 0x18, 0xb5, + 0x08, 0x14, 0x2b, 0x60, 0x2d, 0x7e, 0x84, 0xef, 0x0c, 0x98, 0xba, 0x2e, 0x30, 0xf5, 0xae, 0x21, + 0x6b, 0x4a, 0x9f, 0xaf, 0x7f, 0x95, 0x05, 0x13, 0x75, 0xe4, 0xe1, 0x6e, 0x12, 0x9e, 0x93, 0x39, + 0x90, 0xc2, 0xe9, 0x76, 0x56, 0x52, 0xb7, 0xbf, 0x9b, 0x91, 0x0d, 0xa2, 0x11, 0x72, 0x86, 0xd1, + 0x14, 0xb1, 0x44, 0xf0, 0x66, 0xa9, 0x20, 0x1a, 0x83, 0x4a, 0x4b, 0x9f, 0xbb, 0x6f, 0xcf, 0x06, + 0xdb, 0xef, 0x8f, 0x13, 0xa6, 0x6f, 0xbc, 0xf1, 0x9b, 0xd9, 0x6f, 0xfc, 0xfe, 0x53, 0x26, 0xb9, + 0xa9, 0x11, 0xb7, 0xf7, 0x9c, 0xd8, 0xa0, 0x18, 0xc1, 0xb6, 0xf0, 0x30, 0xfc, 0x7a, 0xae, 0x02, + 0x0a, 0x6c, 0xfd, 0xf8, 0x9e, 0xf8, 0xf5, 0xe3, 0xc1, 0x13, 0x88, 0x0f, 0x0c, 0x61, 0xae, 0xc5, + 0x2d, 0xea, 0x06, 0x64, 0x64, 0x39, 0x32, 0x6e, 0x01, 0x79, 0x12, 0xe5, 0x8f, 0x8d, 0x73, 0xe1, + 0x8e, 0xbe, 0x5f, 0x84, 0x86, 0xbf, 0xea, 0x34, 0x53, 0x62, 0x14, 0x46, 0xb0, 0x0e, 0x3c, 0x0c, + 0x0a, 0x2f, 0xf9, 0x78, 0x26, 0x30, 0x42, 0x3e, 0x90, 0x63, 0x26, 0xde, 0xc7, 0xc5, 0x78, 0x03, + 0x4d, 0xc7, 0xf6, 0xd0, 0x65, 0x6e, 0xe5, 0x3d, 0x48, 0x88, 0xb5, 0x0c, 0x4e, 0x81, 0x09, 0xcf, + 0xe5, 0x57, 0xe3, 0xfd, 0x57, 0xbe, 0xc7, 0xc9, 0x8b, 0x3d, 0x4e, 0x15, 0x9c, 0xb5, 0xec, 0x66, + 0x7b, 0xb7, 0x85, 0x74, 0xd4, 0x36, 0x71, 0xab, 0xba, 0xa5, 0xee, 0x22, 0xea, 0x20, 0xbb, 0x85, + 0x6c, 0x8f, 0xd2, 0xe9, 0x7b, 0xde, 0x4a, 0xe4, 0x84, 0x5f, 0xe7, 0x05, 0xe3, 0x6e, 0x51, 0x30, + 0x7e, 0xa4, 0xdf, 0xec, 0x21, 0xc6, 0x08, 0xbd, 0x03, 0x00, 0xda, 0xb6, 0x73, 0x16, 0xba, 0xc4, + 0x3a, 0xc4, 0x6b, 0x7a, 0x4c, 0xd1, 0x5a, 0x90, 0x41, 0xe7, 0x32, 0xc3, 0x2f, 0x07, 0xc2, 0x70, + 0xaf, 0x20, 0x0c, 0xb7, 0x48, 0x92, 0x90, 0x4c, 0x0e, 0x3a, 0x43, 0xac, 0x68, 0xcc, 0x82, 0xa9, + 0x70, 0x1d, 0x52, 0x51, 0xaf, 0x01, 0x27, 0x7c, 0xcf, 0x86, 0xaa, 0xa6, 0x2d, 0xd6, 0x1b, 0x1b, + 0xeb, 0xcb, 0x7a, 0x69, 0x51, 0x2b, 0x02, 0x55, 0x05, 0x73, 0xb5, 0x85, 0x67, 0x6a, 0x65, 0x23, + 0x70, 0x48, 0xc8, 0xc1, 0xbf, 0xc8, 0x82, 0x3c, 0x71, 0x1b, 0x87, 0x3f, 0x31, 0x22, 0xc9, 0xe9, + 0x0a, 0xfb, 0x38, 0xc1, 0xbc, 0x42, 0x3e, 0x0e, 0x20, 0x63, 0x26, 0xa1, 0xea, 0x40, 0x71, 0x00, + 0x63, 0x0a, 0x4a, 0x5f, 0x3d, 0xb1, 0x4a, 0xd6, 0xb7, 0x9d, 0x4b, 0xff, 0x9e, 0x55, 0x12, 0xb7, + 0xff, 0x90, 0x55, 0xb2, 0x0f, 0x09, 0x63, 0x57, 0xc9, 0x3e, 0x7a, 0x17, 0xa3, 0xa6, 0xf0, 0xef, + 0x72, 0xc1, 0xb2, 0xcb, 0xff, 0x73, 0xb0, 0x65, 0x97, 0x12, 0x98, 0xb5, 0x6c, 0x0f, 0xb9, 0xb6, + 0xd9, 0x5e, 0x6a, 0x9b, 0x5b, 0xfe, 0xe1, 0xe4, 0xde, 0x59, 0x78, 0x85, 0xcb, 0xa3, 0x8b, 0x7f, + 0xa8, 0xa7, 0x01, 0xf0, 0xd0, 0x4e, 0xa7, 0x6d, 0x7a, 0xa1, 0xe8, 0x71, 0x29, 0xbc, 0xf4, 0xe5, + 0x44, 0xe9, 0x7b, 0x02, 0xb8, 0x8a, 0x82, 0x66, 0x5c, 0xe9, 0xa0, 0x0d, 0xdb, 0xfa, 0xc9, 0x5d, + 0x12, 0x9e, 0x86, 0xca, 0x68, 0xbf, 0x4f, 0xf0, 0xbf, 0x4b, 0x1f, 0xb2, 0xf4, 0x35, 0x7b, 0xc0, + 0x21, 0xcb, 0x40, 0x9b, 0x94, 0x1e, 0x6d, 0x0a, 0x0c, 0x82, 0x9c, 0x84, 0x41, 0xc0, 0x73, 0x3e, + 0x2f, 0x69, 0x4c, 0xbf, 0x5e, 0xea, 0x14, 0x67, 0x5c, 0x33, 0xd2, 0xef, 0xa1, 0x3e, 0xa8, 0x80, + 0x39, 0x5a, 0xf5, 0x82, 0xe3, 0x5c, 0xdc, 0x31, 0xdd, 0x8b, 0xfc, 0xdc, 0x62, 0x08, 0x71, 0x8b, + 0x5e, 0x29, 0xfb, 0x34, 0x8f, 0xec, 0xb2, 0x88, 0xec, 0x13, 0xa3, 0x59, 0xe2, 0xd3, 0x35, 0x9e, + 0xc5, 0x8d, 0xb7, 0x06, 0x98, 0x3d, 0x53, 0xc0, 0xec, 0x29, 0x89, 0x09, 0x4c, 0x1f, 0xbb, 0x3f, + 0x09, 0xb0, 0xf3, 0x3b, 0xec, 0xd4, 0xb0, 0xfb, 0xca, 0x70, 0xd8, 0xf9, 0x74, 0x0d, 0x81, 0x5d, + 0x11, 0x28, 0x17, 0x83, 0x0d, 0x27, 0xfc, 0xc8, 0x37, 0x28, 0x97, 0x1e, 0x9a, 0x11, 0x24, 0x8f, + 0x05, 0xcd, 0xe3, 0x22, 0x09, 0xb5, 0x4e, 0xaa, 0x98, 0x7e, 0x49, 0x7a, 0xbd, 0xa5, 0x2f, 0x83, + 0x28, 0x75, 0xe3, 0xd1, 0x4a, 0xb9, 0xc5, 0x1a, 0x79, 0x32, 0xd3, 0x47, 0xf3, 0x1f, 0x72, 0x60, + 0xca, 0x3f, 0xea, 0xea, 0xc1, 0xcf, 0x72, 0x43, 0xf8, 0x49, 0x50, 0xe8, 0x3a, 0xbb, 0x6e, 0x13, + 0xb1, 0x15, 0x30, 0xf6, 0x36, 0xc4, 0x6a, 0xcd, 0xc0, 0x71, 0x79, 0xdf, 0xd0, 0x9f, 0x4b, 0x3c, + 0xf4, 0x47, 0x1a, 0x96, 0xf0, 0x25, 0xd2, 0x81, 0x09, 0x05, 0x5c, 0xea, 0xc8, 0x7b, 0x24, 0x8e, + 0xd5, 0x7f, 0x28, 0x35, 0xdf, 0x1f, 0xd0, 0x92, 0x64, 0x62, 0x55, 0x1b, 0xc2, 0xa8, 0x7c, 0x14, + 0xb8, 0xda, 0xcf, 0xc1, 0xac, 0x49, 0x62, 0x3d, 0x6e, 0xe8, 0xab, 0x45, 0x05, 0x3e, 0x37, 0x07, + 0x8a, 0x94, 0xb4, 0x5a, 0x60, 0x58, 0xc1, 0x57, 0x1e, 0xba, 0xf5, 0x18, 0x3d, 0x1d, 0xfc, 0x5c, + 0x56, 0x36, 0xf8, 0x91, 0xc0, 0xf8, 0xb0, 0x75, 0x11, 0x92, 0x34, 0x84, 0x2a, 0xc5, 0x08, 0x1f, + 0xfc, 0x8d, 0x8c, 0x4c, 0x2c, 0x25, 0x39, 0x12, 0xd3, 0xef, 0x79, 0xde, 0x98, 0xf3, 0xa3, 0x12, + 0x2c, 0xb9, 0xce, 0xce, 0x86, 0xdb, 0x86, 0x1f, 0x91, 0x0a, 0x55, 0x17, 0x61, 0xaa, 0x67, 0x23, + 0x4d, 0x75, 0x3c, 0x44, 0xef, 0xba, 0x6d, 0x7f, 0x88, 0xde, 0x75, 0xdb, 0x43, 0x0c, 0xd1, 0xea, + 0x8d, 0x60, 0xce, 0x6c, 0xb5, 0xd6, 0xcd, 0x2d, 0x54, 0xc6, 0x73, 0x60, 0xdb, 0x63, 0x27, 0x96, + 0x7b, 0x52, 0x13, 0xec, 0x8c, 0x09, 0x40, 0x30, 0x1e, 0x3c, 0x92, 0x76, 0xc6, 0x24, 0xe8, 0x4b, + 0x5f, 0x4a, 0x7e, 0x37, 0x0b, 0x26, 0xca, 0xdb, 0x26, 0xd9, 0x19, 0x7b, 0xac, 0x10, 0x32, 0x24, + 0x72, 0x6f, 0xf2, 0x45, 0xd2, 0x9b, 0xc2, 0x7e, 0x0b, 0x69, 0xf9, 0x11, 0xbc, 0x3f, 0x09, 0x0a, + 0xcd, 0x6d, 0x33, 0xe4, 0x3c, 0x7b, 0x93, 0xdc, 0xfb, 0x8d, 0xad, 0x22, 0x7d, 0xf6, 0x7d, 0x32, + 0x0b, 0x66, 0x7d, 0xbb, 0x7f, 0x09, 0x79, 0xcd, 0x6d, 0x78, 0x87, 0xec, 0x02, 0x0f, 0xd3, 0x9a, + 0x6c, 0xa0, 0x35, 0xf0, 0x07, 0x99, 0x84, 0xa2, 0x2d, 0xd4, 0x1c, 0xb1, 0x3a, 0x96, 0x48, 0x16, + 0xe3, 0x0a, 0x4c, 0x9f, 0x99, 0x5f, 0xce, 0x02, 0x60, 0x38, 0xc1, 0xfc, 0xf3, 0x00, 0x9c, 0x7c, + 0x99, 0x74, 0x0c, 0x78, 0xd6, 0xf0, 0xb0, 0xda, 0xe4, 0x3d, 0x84, 0xe4, 0xd6, 0xd6, 0xa0, 0x9a, + 0xc6, 0xa2, 0xeb, 0x53, 0x8b, 0xbb, 0x9d, 0xb6, 0xd5, 0x34, 0xbd, 0xde, 0xfd, 0xd8, 0x68, 0xf6, + 0x92, 0xcb, 0x5c, 0x12, 0x19, 0x78, 0x41, 0x1d, 0x11, 0xbc, 0xa4, 0x47, 0x59, 0xb3, 0xfe, 0x51, + 0x56, 0xc9, 0x3d, 0x96, 0x01, 0x85, 0x8f, 0x41, 0x3c, 0x15, 0x70, 0xb4, 0xd6, 0x41, 0xf6, 0x82, + 0x8b, 0xcc, 0x56, 0xd3, 0xdd, 0xdd, 0xb9, 0xd0, 0xe5, 0x9d, 0x09, 0xe2, 0x65, 0x94, 0x5b, 0xb2, + 0xcd, 0x0a, 0x4b, 0xb6, 0xf0, 0x05, 0x8a, 0xec, 0xc1, 0x6a, 0x6e, 0x63, 0x81, 0xa3, 0x61, 0x88, + 0x21, 0x2d, 0xd1, 0x16, 0x58, 0xcf, 0xea, 0x6c, 0x2e, 0xc9, 0xea, 0xec, 0xdb, 0xa4, 0x8e, 0x69, + 0x4b, 0xb5, 0x6b, 0x2c, 0x3b, 0x99, 0x73, 0x75, 0xe4, 0x45, 0xc0, 0x7b, 0x03, 0x98, 0xbd, 0x10, + 0x7e, 0x09, 0x20, 0x16, 0x13, 0xfb, 0xf8, 0x17, 0xbc, 0x3d, 0xe9, 0x8a, 0x89, 0x48, 0x42, 0x04, + 0xba, 0x01, 0x82, 0x59, 0x99, 0x4d, 0xcc, 0x44, 0xcb, 0x1f, 0xb1, 0xf5, 0x8f, 0xc1, 0xcf, 0x30, + 0x0b, 0xa6, 0xc9, 0x15, 0x35, 0x0b, 0x57, 0x88, 0xef, 0xbb, 0xa4, 0x51, 0xf2, 0x62, 0x9e, 0xcd, + 0x2a, 0xc8, 0xb5, 0x2d, 0xfb, 0xa2, 0xbf, 0xfb, 0x8c, 0x9f, 0xc3, 0x0b, 0x0f, 0xb2, 0x7d, 0x2e, + 0x3c, 0x08, 0xf6, 0x07, 0x82, 0x7a, 0x0f, 0x74, 0x03, 0xd7, 0xc0, 0xe2, 0xd2, 0x67, 0xe3, 0x9f, + 0xe6, 0x40, 0xa1, 0x8e, 0x4c, 0xb7, 0xb9, 0x0d, 0x5f, 0xc3, 0x45, 0x11, 0x58, 0x02, 0x13, 0x9b, + 0x56, 0xdb, 0x43, 0x2e, 0xf5, 0xbb, 0xe1, 0x3b, 0x70, 0xaa, 0xc8, 0x0b, 0x6d, 0xa7, 0x79, 0x71, + 0x9e, 0x19, 0xdb, 0xf3, 0x7e, 0x40, 0xa6, 0xf9, 0x25, 0xf2, 0x93, 0xee, 0xff, 0x8c, 0xcd, 0xbe, + 0xae, 0xe3, 0x7a, 0x51, 0x11, 0x4e, 0x23, 0x4a, 0xa9, 0x3b, 0xae, 0xa7, 0xd3, 0x1f, 0x31, 0x98, + 0x9b, 0xbb, 0xed, 0xb6, 0x81, 0x2e, 0x7b, 0xfe, 0x44, 0xcb, 0x7f, 0xc7, 0x26, 0xa1, 0xb3, 0xb9, + 0xd9, 0x45, 0x74, 0x9a, 0x9f, 0xd7, 0xd9, 0x9b, 0x7a, 0x1c, 0xe4, 0xdb, 0xd6, 0x8e, 0x45, 0xa7, + 0x06, 0x79, 0x9d, 0xbe, 0xa8, 0x37, 0x83, 0x62, 0x38, 0x2b, 0xa1, 0x84, 0x9e, 0x2a, 0x10, 0x05, + 0xdc, 0x97, 0x8e, 0x25, 0xe3, 0x22, 0xba, 0xd2, 0x3d, 0x35, 0x41, 0xbe, 0x93, 0x67, 0xd1, 0xc9, + 0x51, 0x66, 0xa7, 0x81, 0xf2, 0x35, 0x7a, 0xce, 0xe9, 0xa2, 0xa6, 0xe3, 0xb6, 0x7c, 0xde, 0x44, + 0x4f, 0x17, 0x58, 0xbe, 0x64, 0xfb, 0x03, 0x7d, 0x2b, 0x4f, 0x5f, 0x9e, 0x5e, 0x55, 0xc0, 0x9d, + 0x23, 0xae, 0xfa, 0xbc, 0xe5, 0x6d, 0xaf, 0x21, 0xcf, 0x84, 0x7f, 0xaa, 0xfc, 0x6f, 0xb9, 0x8a, + 0x91, 0x2b, 0x7a, 0xa0, 0xde, 0xdb, 0x75, 0x6d, 0xcc, 0x2d, 0x16, 0xc2, 0x8a, 0x4b, 0x51, 0xef, + 0x02, 0xd7, 0x84, 0x6f, 0xfe, 0x32, 0xe5, 0x22, 0x9b, 0x6a, 0x4e, 0x91, 0xec, 0xd1, 0x19, 0xd4, + 0x75, 0x70, 0x3d, 0xfd, 0xb8, 0x62, 0xac, 0xad, 0xae, 0x58, 0x5b, 0xdb, 0x6d, 0x6b, 0x6b, 0xdb, + 0xeb, 0x56, 0xec, 0xae, 0x87, 0xcc, 0x56, 0x6d, 0x53, 0xa7, 0x11, 0x88, 0x01, 0x29, 0x47, 0x26, + 0xab, 0xe8, 0x7d, 0x23, 0x37, 0x52, 0xf1, 0xf2, 0x10, 0xa1, 0x0f, 0x4f, 0xc1, 0xfa, 0xd0, 0xdd, + 0x6d, 0x07, 0x98, 0x5e, 0xdb, 0x83, 0x69, 0x28, 0xd0, 0xbb, 0x6d, 0xa2, 0x14, 0x24, 0x73, 0xd2, + 0x31, 0x2b, 0x86, 0x92, 0xf4, 0x95, 0xe3, 0xff, 0x2b, 0x80, 0xfc, 0xb2, 0x6b, 0x76, 0xb6, 0xe1, + 0x73, 0x53, 0xe8, 0x6b, 0x03, 0xe9, 0xcc, 0x0e, 0x92, 0x4e, 0x65, 0x80, 0x74, 0xe6, 0x38, 0xe9, + 0x8c, 0xf6, 0x14, 0x38, 0x0b, 0x66, 0x9a, 0x4e, 0xbb, 0x8d, 0x9a, 0x98, 0x1f, 0x95, 0x16, 0x89, + 0xba, 0x32, 0xa5, 0x0b, 0x69, 0x24, 0x34, 0x1d, 0xf2, 0xea, 0x74, 0xfd, 0x9a, 0x0a, 0x7d, 0x98, + 0x00, 0x5f, 0x99, 0x05, 0x39, 0xad, 0xb5, 0x85, 0x84, 0x35, 0xee, 0x0c, 0xb7, 0xc6, 0x7d, 0x12, + 0x14, 0x3c, 0xd3, 0xdd, 0x42, 0x9e, 0x3f, 0xe7, 0xa7, 0x6f, 0x41, 0xc4, 0x3c, 0x85, 0x8b, 0x98, + 0xf7, 0x54, 0x90, 0xc3, 0x3c, 0x63, 0xb1, 0x68, 0xae, 0xef, 0x07, 0x3f, 0xe1, 0xfd, 0x3c, 0xae, + 0x71, 0x1e, 0xb7, 0x5a, 0x27, 0x3f, 0xf4, 0x62, 0x9d, 0xdf, 0x87, 0x35, 0xb9, 0x4c, 0xa5, 0xe9, + 0xd8, 0x95, 0x1d, 0x73, 0x0b, 0xb1, 0x66, 0x86, 0x09, 0xfe, 0x57, 0x6d, 0xc7, 0x79, 0xc0, 0x62, + 0xc1, 0xeb, 0xc2, 0x04, 0xdc, 0x84, 0x6d, 0xab, 0xd5, 0x42, 0x36, 0xd3, 0x6c, 0xf6, 0x76, 0xf6, + 0x34, 0xc8, 0x61, 0x1a, 0xb0, 0xfc, 0xe0, 0x81, 0xbf, 0x78, 0x44, 0x9d, 0xc1, 0x6a, 0x45, 0x95, + 0xb7, 0x98, 0x11, 0xd7, 0x3a, 0x65, 0x5c, 0x5f, 0x68, 0xe3, 0xfa, 0x2b, 0xd7, 0xe3, 0x41, 0xde, + 0x76, 0x5a, 0x68, 0xe0, 0x50, 0x43, 0x73, 0xa9, 0x4f, 0x02, 0x79, 0xd4, 0xc2, 0xbd, 0x82, 0x42, + 0xb2, 0x9f, 0x8e, 0xe7, 0xa5, 0x4e, 0x33, 0x27, 0xf3, 0xaf, 0xe9, 0x47, 0x6d, 0xfa, 0x0a, 0xf8, + 0x2b, 0x13, 0xe0, 0x28, 0xed, 0x03, 0xea, 0xbb, 0x17, 0x70, 0x51, 0x17, 0x10, 0x7c, 0x9f, 0x22, + 0x84, 0xe8, 0xec, 0xee, 0x5e, 0x08, 0xcc, 0x46, 0xfa, 0xc2, 0x2b, 0x68, 0x76, 0x24, 0x83, 0x96, + 0x32, 0xec, 0xa0, 0x25, 0x0c, 0x40, 0x8a, 0xaf, 0xe2, 0xe1, 0x70, 0x55, 0x20, 0xc9, 0xfe, 0x70, + 0xd5, 0x6f, 0xb0, 0x39, 0x05, 0x26, 0xcc, 0x4d, 0x0f, 0xb9, 0x95, 0x16, 0x91, 0xc7, 0x29, 0xdd, + 0x7f, 0xc5, 0x03, 0xe2, 0x05, 0xb4, 0xe9, 0xb8, 0x58, 0xd3, 0xa7, 0xe8, 0x80, 0xe8, 0xbf, 0x73, + 0xfa, 0x09, 0x84, 0x3d, 0xa8, 0x9b, 0xc0, 0x51, 0x6b, 0xcb, 0x76, 0x5c, 0x14, 0x38, 0x36, 0x9e, + 0x9a, 0xa1, 0x27, 0xf1, 0x7b, 0x92, 0xd5, 0x5b, 0xc0, 0x31, 0xdb, 0x59, 0x44, 0x1d, 0xc6, 0x77, + 0x8a, 0xea, 0x2c, 0xd1, 0x88, 0xfd, 0x1f, 0xf6, 0x75, 0x2d, 0x73, 0xfb, 0xbb, 0x16, 0xf8, 0x99, + 0xa4, 0xf3, 0xe1, 0x1e, 0xe0, 0x47, 0x66, 0x97, 0xa9, 0x4f, 0x07, 0x33, 0x2d, 0xe6, 0xf6, 0xd4, + 0xb4, 0x02, 0xad, 0x89, 0xfc, 0x4f, 0xc8, 0x1c, 0x8a, 0x5c, 0x8e, 0x17, 0xb9, 0x65, 0x30, 0x49, + 0x0e, 0xb9, 0x60, 0x99, 0xcb, 0xf7, 0x44, 0xfa, 0x23, 0x53, 0xb6, 0xa0, 0x51, 0x1c, 0xdb, 0xe6, + 0xcb, 0xec, 0x17, 0x3d, 0xf8, 0x39, 0xd9, 0xcc, 0x3a, 0x9e, 0x43, 0xe9, 0xab, 0xe7, 0xe7, 0x72, + 0xe0, 0xe8, 0xb2, 0xeb, 0xec, 0x76, 0xba, 0xa1, 0x7a, 0xfe, 0x4d, 0xff, 0xcd, 0x88, 0x82, 0x38, + 0x16, 0xf5, 0x57, 0xdc, 0x33, 0x60, 0xda, 0x65, 0x3d, 0x6a, 0xb8, 0x35, 0xc1, 0x27, 0xf1, 0xaa, + 0xad, 0x1c, 0x44, 0xb5, 0x43, 0x05, 0xc9, 0x09, 0x0a, 0xd2, 0x2b, 0xc8, 0xf9, 0x3e, 0x82, 0xfc, + 0xd7, 0xd9, 0x84, 0x82, 0xdc, 0xc3, 0xa2, 0x08, 0x41, 0x2e, 0x83, 0xc2, 0x16, 0xc9, 0xc8, 0xe4, + 0xf8, 0x71, 0x72, 0x2d, 0x23, 0x85, 0xeb, 0xec, 0xd7, 0x90, 0xaf, 0x0a, 0xc7, 0xd7, 0x64, 0x42, + 0x15, 0x4f, 0x6d, 0xfa, 0x42, 0xf5, 0xee, 0x1c, 0x98, 0x09, 0x6a, 0x27, 0xe7, 0x46, 0x32, 0x83, + 0x3a, 0xfc, 0x7d, 0xab, 0x33, 0x41, 0x57, 0xaa, 0x70, 0x5d, 0x69, 0x9f, 0xce, 0x6f, 0x3a, 0x41, + 0xe7, 0x37, 0x13, 0xd1, 0xf9, 0xc1, 0x9f, 0x56, 0x64, 0x23, 0x42, 0x8b, 0x7d, 0x00, 0x69, 0xdd, + 0x23, 0xb9, 0x57, 0x93, 0x8c, 0x4b, 0x3d, 0xb8, 0x55, 0xe9, 0x0b, 0xcd, 0x87, 0xb3, 0xe0, 0x18, + 0xed, 0x0d, 0x37, 0xec, 0x6e, 0xd0, 0x17, 0x3d, 0x46, 0xf4, 0xca, 0xc0, 0x6d, 0xea, 0x06, 0x5e, + 0x19, 0xe4, 0x4d, 0x5c, 0x04, 0x8f, 0x3d, 0xf2, 0x25, 0xf4, 0xb9, 0x5c, 0x2d, 0x11, 0x2b, 0x4a, + 0x72, 0x87, 0xba, 0x24, 0x0b, 0x4d, 0x9f, 0x81, 0xbf, 0xa4, 0x80, 0xa9, 0x3a, 0xf2, 0x56, 0xcd, + 0x2b, 0xce, 0xae, 0x07, 0x4d, 0xd9, 0xe5, 0xef, 0xa7, 0x81, 0x42, 0x9b, 0xfc, 0xc2, 0xae, 0x37, + 0x3b, 0xd3, 0x77, 0xfd, 0x98, 0xec, 0x93, 0xd3, 0xa2, 0x75, 0x96, 0x5f, 0x3c, 0x6b, 0x27, 0xb3, + 0xfb, 0x10, 0x50, 0x37, 0x92, 0xa5, 0xd3, 0x44, 0x7b, 0x13, 0x51, 0x55, 0xa7, 0x0f, 0xcb, 0x0b, + 0x14, 0x30, 0x5b, 0x47, 0x5e, 0xa5, 0xbb, 0x64, 0xee, 0x39, 0xae, 0xe5, 0x21, 0xfe, 0xa6, 0x8d, + 0x78, 0x68, 0x4e, 0x03, 0x60, 0x05, 0xbf, 0xb1, 0x50, 0xeb, 0x5c, 0x0a, 0xfc, 0x8d, 0xa4, 0x1b, + 0xee, 0x02, 0x1d, 0x23, 0x01, 0x21, 0xd1, 0x1e, 0x66, 0x5c, 0xf5, 0xe9, 0x03, 0xf1, 0x70, 0x96, + 0x01, 0x51, 0x72, 0x9b, 0xdb, 0xd6, 0x1e, 0x6a, 0x25, 0x04, 0xc2, 0xff, 0x2d, 0x04, 0x22, 0x28, + 0x28, 0xf1, 0xf6, 0xb0, 0x40, 0xc7, 0x28, 0xb6, 0x87, 0xe3, 0x0a, 0x1c, 0xcb, 0x21, 0x5e, 0xdc, + 0xf5, 0xb0, 0x35, 0x86, 0x7b, 0x64, 0xd9, 0x1a, 0x9a, 0x70, 0x59, 0xde, 0x84, 0x1b, 0xaa, 0x63, + 0xa1, 0x75, 0x0f, 0x92, 0xe9, 0x5c, 0x1a, 0x1d, 0x4b, 0xdf, 0xaa, 0xd3, 0x67, 0xfa, 0xfb, 0x15, + 0x70, 0x22, 0x30, 0x78, 0xea, 0xc8, 0x5b, 0x34, 0xbb, 0xdb, 0x17, 0x1c, 0xd3, 0x6d, 0xf1, 0xd7, + 0xde, 0x0d, 0x7d, 0x92, 0x05, 0xfe, 0x25, 0x0f, 0x42, 0x55, 0x04, 0xa1, 0xaf, 0x5b, 0x55, 0x5f, + 0x5a, 0x46, 0xd1, 0xc9, 0xc4, 0x7a, 0x7e, 0xfd, 0x56, 0x00, 0xd6, 0xb3, 0x04, 0xb0, 0xee, 0x1e, + 0x96, 0xc4, 0xf4, 0x81, 0xfb, 0x65, 0x3a, 0x22, 0x70, 0x1e, 0x80, 0xf7, 0xcb, 0x02, 0x16, 0xe1, + 0x01, 0xa6, 0x44, 0x1f, 0xd6, 0x18, 0x66, 0x8c, 0x18, 0xe8, 0xbd, 0x97, 0xee, 0x18, 0x71, 0x88, + 0x9e, 0x79, 0xef, 0x56, 0x40, 0x91, 0x1c, 0x6f, 0xe6, 0xbc, 0x23, 0xe1, 0x03, 0xb2, 0xe8, 0xec, + 0xf3, 0xc4, 0x9c, 0x48, 0xea, 0x89, 0x09, 0xdf, 0x95, 0xd4, 0xdf, 0xb2, 0x97, 0xda, 0x91, 0x20, + 0x96, 0xc8, 0x9d, 0x72, 0x00, 0x05, 0xe9, 0x83, 0xf6, 0x9f, 0x15, 0x00, 0xb0, 0x42, 0x33, 0x17, + 0xbf, 0x67, 0xcb, 0xc2, 0x75, 0x2b, 0xef, 0x83, 0x8a, 0x81, 0x3a, 0xd1, 0x03, 0x14, 0x2d, 0x31, + 0x74, 0x1e, 0x7c, 0x73, 0x52, 0xdf, 0xa5, 0x90, 0xaa, 0x91, 0xc0, 0x92, 0xc8, 0x9b, 0x29, 0xb2, + 0xee, 0xf4, 0x01, 0xf9, 0xed, 0x2c, 0xc8, 0x1b, 0x4e, 0x1d, 0x79, 0x07, 0x37, 0x05, 0x12, 0x1f, + 0x47, 0x25, 0xf5, 0x8e, 0xe2, 0x38, 0x6a, 0xbf, 0x82, 0xd2, 0x67, 0xdd, 0xfb, 0xb2, 0x60, 0xc6, + 0x70, 0xca, 0xc1, 0x62, 0x95, 0xbc, 0x2f, 0x98, 0xfc, 0xad, 0x56, 0x41, 0x03, 0xc3, 0x6a, 0x0e, + 0x74, 0xab, 0xd5, 0xe0, 0xf2, 0xd2, 0xe7, 0xdb, 0x1d, 0xe0, 0xe8, 0x86, 0xdd, 0x72, 0x74, 0xd4, + 0x72, 0xd8, 0x92, 0xac, 0xaa, 0x82, 0xdc, 0xae, 0xdd, 0x72, 0x08, 0xc9, 0x79, 0x9d, 0x3c, 0xe3, + 0x34, 0x17, 0xb5, 0x1c, 0xb6, 0x5f, 0x47, 0x9e, 0xe1, 0xd7, 0x15, 0x90, 0xc3, 0xff, 0xca, 0xb3, + 0xfa, 0xdd, 0x4a, 0xc2, 0x03, 0xb6, 0xb8, 0xf8, 0x91, 0x58, 0x42, 0xf7, 0x70, 0x8b, 0xd4, 0xd4, + 0x43, 0xec, 0xfa, 0xa8, 0xfa, 0x38, 0x56, 0x84, 0x8b, 0xd3, 0xea, 0x29, 0x30, 0x71, 0xa1, 0xed, + 0x34, 0x2f, 0x86, 0xe7, 0x40, 0xd9, 0xab, 0x7a, 0x33, 0xc8, 0xbb, 0xa6, 0xbd, 0x85, 0xd8, 0xe2, + 0xf7, 0xf1, 0x9e, 0xbe, 0x90, 0xec, 0x44, 0xeb, 0x34, 0x0b, 0x7c, 0x57, 0x92, 0xa3, 0xbd, 0x7d, + 0x1a, 0x9f, 0x4c, 0x1e, 0x16, 0x87, 0x38, 0x85, 0x51, 0x04, 0x33, 0xe5, 0x12, 0xbd, 0x3f, 0x6e, + 0xad, 0x76, 0x4e, 0x2b, 0x2a, 0x04, 0x66, 0xcc, 0x93, 0x14, 0x61, 0xc6, 0xc5, 0xff, 0xbb, 0x85, + 0xb9, 0x4f, 0xe3, 0x0f, 0x03, 0xe6, 0x4f, 0x66, 0xc1, 0xec, 0xaa, 0xd5, 0xf5, 0xa2, 0xbc, 0x69, + 0x63, 0xa2, 0x1b, 0xbd, 0x24, 0xa9, 0xa9, 0x2c, 0xd4, 0x23, 0x1d, 0xd6, 0x28, 0x91, 0x39, 0x1c, + 0x57, 0xc5, 0x78, 0xdc, 0xbe, 0x09, 0x05, 0xf4, 0xce, 0x27, 0x69, 0x4e, 0x26, 0x36, 0x94, 0xc2, + 0x4a, 0xc6, 0x6f, 0x28, 0x45, 0xd6, 0x9d, 0x3e, 0x7f, 0xbf, 0x9e, 0x05, 0xc7, 0x70, 0xf5, 0x71, + 0xcb, 0x52, 0xd1, 0x6c, 0x1e, 0xb8, 0x2c, 0x95, 0x78, 0x65, 0x7c, 0x1f, 0x2d, 0xa3, 0x58, 0x19, + 0x1f, 0x54, 0xe8, 0x98, 0xd9, 0x1c, 0xb1, 0x0c, 0x3b, 0x88, 0xcd, 0x31, 0xcb, 0xb0, 0xc3, 0xb3, + 0x39, 0x7e, 0x29, 0x76, 0x48, 0x36, 0x1f, 0xda, 0x02, 0xeb, 0x9b, 0x94, 0x80, 0xcd, 0x91, 0x6b, + 0x1b, 0x31, 0x6c, 0x4e, 0x7c, 0xba, 0x0d, 0xbe, 0x67, 0x48, 0xc6, 0x8f, 0x78, 0x7d, 0x63, 0x18, + 0x98, 0x0e, 0x71, 0x8d, 0xe3, 0x55, 0x0a, 0x98, 0x63, 0x54, 0xf4, 0x9f, 0x32, 0xc7, 0x60, 0x94, + 0x78, 0xca, 0x9c, 0xd8, 0xc7, 0x5e, 0xa4, 0x6c, 0xfc, 0x3e, 0xf6, 0xb1, 0xf5, 0xa7, 0x0f, 0xce, + 0x37, 0x72, 0xe0, 0x24, 0x26, 0x61, 0xcd, 0x69, 0x59, 0x9b, 0x57, 0x28, 0x15, 0xe7, 0xcc, 0xf6, + 0x2e, 0xea, 0xc2, 0x0f, 0x66, 0x65, 0x51, 0xfa, 0x3f, 0x00, 0x70, 0x3a, 0xc8, 0xa5, 0x01, 0x82, + 0x18, 0x50, 0x77, 0x45, 0x35, 0x76, 0x7f, 0x4d, 0x41, 0x48, 0xdf, 0x9a, 0x5f, 0x88, 0xce, 0x95, + 0x87, 0xad, 0xc2, 0xa9, 0xe0, 0x4b, 0xaf, 0xc3, 0x47, 0x66, 0xbf, 0xc3, 0xc7, 0x4d, 0x40, 0x31, + 0x5b, 0xad, 0x00, 0xaa, 0xde, 0xcd, 0x6c, 0x52, 0xa7, 0x8e, 0xb3, 0xe0, 0x9c, 0x5d, 0x14, 0x1e, + 0x7d, 0x89, 0xc8, 0xd9, 0x45, 0x9e, 0x3a, 0x0f, 0x0a, 0xf4, 0xfe, 0xab, 0x60, 0x45, 0xbf, 0x7f, + 0x66, 0x96, 0x4b, 0x34, 0xed, 0x6a, 0xa2, 0x18, 0xde, 0x91, 0x88, 0x33, 0xfd, 0xfa, 0xe9, 0xd0, + 0x4e, 0xd6, 0x05, 0x01, 0x7b, 0xc6, 0xd0, 0x25, 0x8f, 0x67, 0x37, 0xac, 0xd4, 0xe9, 0xb4, 0xaf, + 0x18, 0x2c, 0x18, 0x41, 0xa2, 0xdd, 0x30, 0x2e, 0xa6, 0x41, 0xb6, 0x37, 0xa6, 0x41, 0xf2, 0xdd, + 0x30, 0x81, 0x8e, 0x51, 0xec, 0x86, 0xc5, 0x15, 0x38, 0x86, 0xf5, 0xc8, 0x3c, 0xb5, 0x9a, 0x59, + 0xec, 0xc5, 0xb7, 0x66, 0xfb, 0xba, 0x53, 0x01, 0xd1, 0x9d, 0xaa, 0x5f, 0x58, 0xc6, 0xd8, 0x98, + 0xb3, 0xea, 0x93, 0x40, 0x61, 0xd3, 0x71, 0x77, 0x4c, 0x7f, 0xe3, 0xbe, 0xd7, 0x7b, 0x9b, 0xc5, + 0x3b, 0x5c, 0x22, 0x79, 0x74, 0x96, 0x17, 0xcf, 0x47, 0x9e, 0x63, 0x75, 0x58, 0x34, 0x31, 0xfc, + 0xa8, 0xde, 0x00, 0x66, 0x59, 0x50, 0xb1, 0x2a, 0xea, 0x7a, 0xa8, 0xc5, 0x4e, 0x77, 0x8b, 0x89, + 0xea, 0x59, 0x30, 0xc3, 0x12, 0x96, 0xac, 0x36, 0xea, 0xb2, 0x0b, 0x1f, 0x85, 0x34, 0xf5, 0x24, + 0x28, 0x58, 0xdd, 0x67, 0x76, 0x1d, 0x9b, 0xf8, 0xe4, 0x4e, 0xea, 0xec, 0x8d, 0xb8, 0xed, 0xd0, + 0x7c, 0x81, 0xb1, 0x4a, 0x9d, 0xe8, 0x7b, 0x93, 0xe1, 0xe7, 0x87, 0x99, 0x38, 0x24, 0x8e, 0x33, + 0x89, 0x51, 0xd8, 0x6d, 0x36, 0x11, 0x6a, 0xb1, 0xd3, 0x06, 0xfe, 0x6b, 0xc2, 0x08, 0x94, 0x89, + 0xa7, 0x19, 0x87, 0x14, 0x82, 0xf2, 0x23, 0x27, 0x40, 0x81, 0x06, 0x6d, 0x87, 0x2f, 0x9f, 0xeb, + 0x2b, 0x8c, 0x73, 0xa2, 0x30, 0x6e, 0x80, 0x19, 0xdb, 0xc1, 0xd5, 0xad, 0x9b, 0xae, 0xb9, 0xd3, + 0x8d, 0x5b, 0x45, 0xa4, 0xe5, 0x06, 0x43, 0x46, 0x95, 0xfb, 0x6d, 0xe5, 0x88, 0x2e, 0x14, 0xa3, + 0xfe, 0x9f, 0xe0, 0xe8, 0x05, 0x76, 0xc2, 0xb6, 0xcb, 0x4a, 0xce, 0x46, 0xfb, 0xdc, 0xf5, 0x94, + 0xbc, 0x20, 0xfe, 0xb9, 0x72, 0x44, 0xef, 0x2d, 0x4c, 0xfd, 0x71, 0x30, 0x87, 0x5f, 0x5b, 0xce, + 0x25, 0x9f, 0x70, 0x25, 0xda, 0xd0, 0xe8, 0x29, 0x7e, 0x4d, 0xf8, 0x71, 0xe5, 0x88, 0xde, 0x53, + 0x94, 0x5a, 0x03, 0x60, 0xdb, 0xdb, 0x69, 0xb3, 0x82, 0x73, 0xd1, 0x22, 0xd9, 0x53, 0xf0, 0x4a, + 0xf0, 0xd3, 0xca, 0x11, 0x9d, 0x2b, 0x42, 0x5d, 0x05, 0x53, 0xde, 0x65, 0x8f, 0x95, 0x97, 0x8f, + 0xde, 0xdc, 0xee, 0x29, 0xcf, 0xf0, 0xff, 0x59, 0x39, 0xa2, 0x87, 0x05, 0xa8, 0x15, 0x30, 0xd9, + 0xb9, 0xc0, 0x0a, 0x2b, 0xf4, 0xb9, 0xa8, 0xba, 0x7f, 0x61, 0xeb, 0x17, 0x82, 0xb2, 0x82, 0xdf, + 0x31, 0x61, 0xcd, 0xee, 0x1e, 0x2b, 0x6b, 0x42, 0x9a, 0xb0, 0xb2, 0xff, 0x0f, 0x26, 0x2c, 0x28, + 0x40, 0xad, 0x80, 0xa9, 0xae, 0x6d, 0x76, 0xba, 0xdb, 0x8e, 0xd7, 0x3d, 0x35, 0xd9, 0xe3, 0x17, + 0x19, 0x5d, 0x5a, 0x9d, 0xfd, 0xa3, 0x87, 0x7f, 0xab, 0x4f, 0x02, 0x27, 0x76, 0xc9, 0xe5, 0x77, + 0xda, 0x65, 0xab, 0xeb, 0x59, 0xf6, 0x96, 0x1f, 0x1b, 0x91, 0xf6, 0x26, 0xfd, 0x3f, 0xaa, 0xf3, + 0xec, 0x94, 0x02, 0x20, 0xba, 0x09, 0x7b, 0x37, 0xe3, 0x68, 0xb5, 0xdc, 0xe1, 0x84, 0xa7, 0x83, + 0x1c, 0xfe, 0x44, 0x3c, 0x0b, 0xe7, 0xfa, 0x2f, 0xf4, 0xf5, 0xca, 0x0e, 0x51, 0x60, 0xfc, 0x13, + 0x1e, 0x1b, 0x6d, 0x67, 0xdd, 0x75, 0xb6, 0x5c, 0xd4, 0xed, 0x32, 0x87, 0x43, 0x2e, 0x05, 0x2b, + 0xb8, 0xd5, 0x5d, 0xb3, 0xb6, 0xa8, 0xf5, 0xc4, 0xdc, 0xb1, 0xf9, 0x24, 0x3a, 0xdb, 0xac, 0xa2, + 0x4b, 0xe4, 0x42, 0xb5, 0x53, 0x47, 0xfd, 0xd9, 0xa6, 0x9f, 0x02, 0x6f, 0x04, 0x33, 0xbc, 0x92, + 0xd1, 0x9b, 0x5f, 0xac, 0xd0, 0xf6, 0x62, 0x6f, 0xf0, 0x06, 0x30, 0x27, 0xca, 0x34, 0x37, 0xc4, + 0x28, 0x7e, 0x57, 0x08, 0xaf, 0x07, 0x47, 0x7b, 0x14, 0xcb, 0x3f, 0xb3, 0x9f, 0x09, 0xcf, 0xec, + 0x9f, 0x01, 0x20, 0x94, 0xe2, 0xbe, 0xc5, 0x5c, 0x07, 0xa6, 0x02, 0xb9, 0xec, 0x9b, 0xe1, 0xab, + 0x19, 0x30, 0xe9, 0x0b, 0x5b, 0xbf, 0x0c, 0x78, 0x7c, 0xb1, 0xb9, 0x0d, 0x04, 0x36, 0xcd, 0x16, + 0xd2, 0xf0, 0x38, 0x12, 0xba, 0xf1, 0x1a, 0x96, 0xd7, 0xf6, 0x8f, 0xa3, 0xf4, 0x26, 0xab, 0xeb, + 0x00, 0x58, 0x04, 0x23, 0x23, 0x3c, 0x9f, 0xf2, 0x84, 0x04, 0xfa, 0x40, 0xe5, 0x81, 0x2b, 0xe3, + 0xec, 0x63, 0xd8, 0xe1, 0x91, 0x29, 0x90, 0xaf, 0xaf, 0x97, 0xca, 0x5a, 0xf1, 0x88, 0x3a, 0x07, + 0x80, 0xf6, 0xec, 0x75, 0x4d, 0xaf, 0x68, 0xd5, 0xb2, 0x56, 0xcc, 0xc0, 0x57, 0x67, 0xc1, 0x54, + 0xa0, 0x04, 0x7d, 0x1b, 0xa9, 0x31, 0xd1, 0x1a, 0x78, 0xb9, 0xc6, 0x7e, 0xa5, 0xe2, 0x85, 0xec, + 0x69, 0xe0, 0xea, 0xdd, 0x2e, 0x5a, 0xb2, 0xdc, 0xae, 0xa7, 0x3b, 0x97, 0x96, 0x1c, 0x37, 0x88, + 0x06, 0xea, 0x5f, 0x22, 0x1d, 0xf1, 0x19, 0x5b, 0x14, 0x2d, 0x44, 0x8e, 0x30, 0x20, 0x97, 0xad, + 0x0c, 0x87, 0x09, 0xb8, 0x5c, 0x8f, 0xde, 0xda, 0xdc, 0x45, 0xba, 0x73, 0xa9, 0x5b, 0xb2, 0x5b, + 0x65, 0xa7, 0xbd, 0xbb, 0x63, 0x77, 0x99, 0x4d, 0x10, 0xf5, 0x19, 0x73, 0x87, 0x5c, 0x9d, 0x33, + 0x07, 0x40, 0xb9, 0xb6, 0xba, 0xaa, 0x95, 0x8d, 0x4a, 0xad, 0x5a, 0x3c, 0x82, 0xb9, 0x65, 0x94, + 0x16, 0x56, 0x31, 0x77, 0x7e, 0x02, 0x4c, 0xfa, 0x3a, 0xbd, 0xef, 0xc6, 0xec, 0x12, 0x98, 0xf4, + 0xb5, 0x9c, 0x8d, 0x08, 0x8f, 0xed, 0x3d, 0x8a, 0xb6, 0x63, 0xba, 0x1e, 0xf1, 0x9f, 0xf6, 0x0b, + 0x59, 0x30, 0xbb, 0x48, 0x0f, 0x7e, 0x3b, 0xfb, 0x78, 0x46, 0x81, 0x0a, 0xe6, 0x4a, 0xab, 0xab, + 0x8d, 0x9a, 0xde, 0xa8, 0xd6, 0x8c, 0x95, 0x4a, 0x75, 0x99, 0x8e, 0x90, 0x95, 0xe5, 0x6a, 0x4d, + 0xd7, 0xe8, 0x00, 0x59, 0x2f, 0x66, 0xe8, 0xd5, 0x4d, 0x0b, 0x93, 0xa0, 0xd0, 0x21, 0xdc, 0x85, + 0x5f, 0x52, 0x12, 0x9e, 0x34, 0x0d, 0x70, 0x8a, 0xb8, 0x5c, 0x46, 0xf0, 0x41, 0xcf, 0xf6, 0x39, + 0xa7, 0x75, 0x16, 0xcc, 0x50, 0x5b, 0xae, 0x4b, 0x96, 0xef, 0xd9, 0xfd, 0x8c, 0x42, 0x1a, 0xfc, + 0x58, 0x36, 0xc1, 0xf1, 0xd3, 0xbe, 0x14, 0x25, 0x33, 0x2e, 0xfe, 0x7c, 0x98, 0xab, 0x9a, 0x54, + 0x30, 0x57, 0xa9, 0x1a, 0x9a, 0x5e, 0x2d, 0xad, 0xb2, 0x2c, 0x8a, 0x7a, 0x0a, 0x1c, 0xaf, 0xd6, + 0x58, 0xfc, 0xab, 0x3a, 0xb9, 0x14, 0x76, 0x6d, 0xbd, 0xa6, 0x1b, 0xc5, 0xbc, 0x7a, 0x12, 0xa8, + 0xf4, 0x59, 0xb8, 0x53, 0xb9, 0xa0, 0xfe, 0x08, 0xb8, 0x7e, 0xb5, 0xb2, 0x56, 0x31, 0x1a, 0xb5, + 0xa5, 0x86, 0x5e, 0x3b, 0x5f, 0xc7, 0x08, 0xea, 0xda, 0x6a, 0x09, 0x0b, 0x12, 0x77, 0x85, 0xd3, + 0x84, 0x7a, 0x15, 0x38, 0x4a, 0xae, 0x67, 0x23, 0xf7, 0x32, 0xd3, 0xfa, 0x26, 0xd5, 0x6b, 0xc1, + 0xa9, 0x4a, 0xb5, 0xbe, 0xb1, 0xb4, 0x54, 0x29, 0x57, 0xb4, 0xaa, 0xd1, 0x58, 0xd7, 0xf4, 0xb5, + 0x4a, 0xbd, 0x8e, 0xff, 0x2d, 0x4e, 0xc1, 0x8f, 0x28, 0xa0, 0x40, 0xfb, 0x4c, 0xf8, 0x01, 0x05, + 0xcc, 0x9e, 0x33, 0xdb, 0x16, 0x1e, 0x28, 0xc8, 0xcd, 0x59, 0xf0, 0x3a, 0xc1, 0x35, 0xdd, 0x23, + 0x37, 0x6c, 0x31, 0xd7, 0x74, 0xf2, 0x02, 0x9f, 0xc7, 0x8b, 0x86, 0x21, 0x8a, 0xc6, 0x33, 0x62, + 0x80, 0xa0, 0x35, 0xce, 0x0b, 0xb5, 0x45, 0x4c, 0x6e, 0x5e, 0x1f, 0xe0, 0x7c, 0x5e, 0xc0, 0xb9, + 0x7c, 0xb0, 0xe2, 0x93, 0x81, 0xff, 0x2b, 0xa3, 0x02, 0xbf, 0x08, 0x66, 0x36, 0xaa, 0xa5, 0x0d, + 0x63, 0xa5, 0xa6, 0x57, 0x7e, 0x8c, 0x44, 0xd1, 0x9d, 0x05, 0x53, 0x4b, 0x35, 0x7d, 0xa1, 0xb2, + 0xb8, 0xa8, 0x55, 0x8b, 0x79, 0xf5, 0x6a, 0x70, 0x55, 0x5d, 0xd3, 0xcf, 0x55, 0xca, 0x5a, 0x63, + 0xa3, 0x5a, 0x3a, 0x57, 0xaa, 0xac, 0x92, 0x3e, 0xa2, 0x10, 0x73, 0xeb, 0xd7, 0x04, 0xfc, 0xa9, + 0x1c, 0x00, 0xb4, 0xe9, 0xd8, 0x92, 0xe6, 0xef, 0x86, 0xfa, 0x8b, 0xa4, 0x93, 0x86, 0xb0, 0x98, + 0x08, 0xfd, 0xad, 0x80, 0x49, 0x97, 0x7d, 0x60, 0xcb, 0x27, 0x83, 0xca, 0xa1, 0x8f, 0x7e, 0x69, + 0x7a, 0xf0, 0x3b, 0xfc, 0x60, 0x92, 0x39, 0x42, 0x24, 0x61, 0xc9, 0x90, 0x5c, 0x1a, 0x0d, 0x90, + 0xf0, 0xc5, 0x19, 0x30, 0x27, 0x36, 0x0c, 0x37, 0x82, 0x18, 0x53, 0x72, 0x8d, 0x10, 0x7f, 0xe6, + 0x8c, 0xac, 0xb3, 0xb7, 0xb3, 0xe1, 0x14, 0xf8, 0x9a, 0x49, 0x4f, 0x63, 0xfa, 0x16, 0x4b, 0x31, + 0x83, 0x89, 0xc7, 0x46, 0x07, 0xbd, 0x18, 0xd8, 0xb8, 0xec, 0x15, 0x15, 0xf8, 0xf9, 0x1c, 0x98, + 0x15, 0x2e, 0x9f, 0x82, 0x2f, 0xcb, 0xca, 0x5c, 0x19, 0xc3, 0x5d, 0x6b, 0x95, 0x49, 0xf7, 0x5a, + 0xab, 0xb3, 0x3f, 0x93, 0x01, 0x13, 0xec, 0x17, 0xc2, 0xfe, 0x5a, 0x15, 0x5b, 0x0a, 0x47, 0xc1, + 0xf4, 0xb2, 0x66, 0x34, 0xea, 0x46, 0x49, 0x37, 0xb4, 0xc5, 0x62, 0x46, 0x3d, 0x01, 0x8e, 0xad, + 0x6b, 0x7a, 0xbd, 0x86, 0xb9, 0xbd, 0xae, 0xd7, 0x48, 0x37, 0x49, 0x41, 0xc0, 0x20, 0xad, 0x6a, + 0x8b, 0xcb, 0x5a, 0x63, 0xa1, 0x54, 0xd7, 0x8a, 0x0a, 0xfe, 0xb7, 0x5a, 0x33, 0xb4, 0x7a, 0x63, + 0xb1, 0x52, 0xd2, 0xef, 0x2f, 0xe6, 0xf0, 0xbf, 0x75, 0x43, 0x2f, 0x19, 0xda, 0x72, 0xa5, 0x4c, + 0x2e, 0x5b, 0xc6, 0xfa, 0x91, 0xc7, 0x43, 0xad, 0xb6, 0xb6, 0x6e, 0xdc, 0x5f, 0x2c, 0x24, 0xf7, + 0xf9, 0xeb, 0x6d, 0xfa, 0x98, 0x7d, 0xfe, 0xe2, 0xaa, 0x4f, 0x7f, 0x76, 0xfc, 0x6d, 0x05, 0x14, + 0x29, 0x05, 0xda, 0xe5, 0x0e, 0x72, 0x2d, 0x64, 0x37, 0x11, 0x7c, 0x91, 0x54, 0x40, 0xbe, 0x7d, + 0xe1, 0xad, 0xc8, 0x10, 0xc2, 0x19, 0xa6, 0xf4, 0xa5, 0xc7, 0xa6, 0xcf, 0xf5, 0xda, 0xf4, 0xa2, + 0x4c, 0xe5, 0x7b, 0xaf, 0x4a, 0xfb, 0x74, 0x52, 0x9f, 0xc0, 0xde, 0xd6, 0x8c, 0x04, 0xd1, 0x4f, + 0x24, 0xf1, 0x09, 0x1c, 0x40, 0xc1, 0x58, 0xa2, 0x70, 0x46, 0x18, 0x04, 0x45, 0x05, 0xbe, 0x73, + 0x0a, 0x14, 0x29, 0xa1, 0x9c, 0xa3, 0xd5, 0x2f, 0xb1, 0x0b, 0xc2, 0x1a, 0x09, 0xe2, 0x46, 0xf9, + 0xe7, 0x7a, 0xb3, 0xe2, 0xb9, 0x5e, 0x61, 0xdd, 0x4e, 0xe9, 0xdd, 0x1c, 0x4f, 0xaa, 0x9d, 0x9c, + 0x57, 0x55, 0x74, 0xa8, 0xbe, 0xf4, 0xb4, 0x33, 0xb6, 0xfa, 0xf1, 0x5c, 0x62, 0xc3, 0xae, 0xa9, + 0xd2, 0x64, 0x91, 0x89, 0xbf, 0xab, 0x2b, 0xa9, 0x8b, 0xad, 0xe0, 0xd5, 0x16, 0x73, 0x81, 0x55, + 0x7a, 0x2e, 0xb6, 0x83, 0x28, 0x48, 0x1f, 0x85, 0x1f, 0x64, 0x41, 0xae, 0xee, 0xb8, 0xde, 0xa8, + 0x30, 0x48, 0xba, 0x2d, 0xc8, 0x71, 0xa0, 0x1e, 0x3d, 0xed, 0x4a, 0x6f, 0x5b, 0x30, 0xbe, 0xfe, + 0x31, 0x84, 0xde, 0x3a, 0x0a, 0xe6, 0x28, 0x25, 0x41, 0x1c, 0xf9, 0xef, 0x67, 0x69, 0x7f, 0x75, + 0x9f, 0x2c, 0x22, 0x67, 0xc1, 0x0c, 0xb7, 0x2d, 0x17, 0xdc, 0x78, 0xca, 0xa7, 0xc1, 0x5f, 0xe3, + 0x71, 0x59, 0x14, 0x71, 0xe9, 0x37, 0xe9, 0x0c, 0x42, 0xb1, 0x8f, 0xaa, 0x67, 0x4a, 0x12, 0xc5, + 0x2b, 0xa6, 0xf2, 0xf4, 0x11, 0x79, 0xbe, 0x02, 0x0a, 0xcc, 0x2d, 0x6a, 0xa4, 0x08, 0x24, 0xd5, + 0x8c, 0x80, 0x09, 0x72, 0xee, 0x53, 0xca, 0xa8, 0x35, 0x23, 0xbe, 0xfe, 0xf4, 0x71, 0xf8, 0x57, + 0xe6, 0xef, 0x57, 0xda, 0x33, 0xad, 0xb6, 0x79, 0xa1, 0x9d, 0x20, 0x7a, 0xe6, 0xc7, 0x12, 0x9e, + 0x70, 0x0a, 0x9a, 0x2a, 0xd4, 0x17, 0xc1, 0xf1, 0x27, 0x83, 0x29, 0x37, 0x58, 0x95, 0xf3, 0x0f, + 0x80, 0xf7, 0xf8, 0x5a, 0xb2, 0xef, 0x7a, 0x98, 0x33, 0xd1, 0x71, 0x26, 0x29, 0x7a, 0xc6, 0x72, + 0xfc, 0x62, 0xba, 0xd4, 0x6a, 0x2d, 0x21, 0xd3, 0xdb, 0x75, 0x51, 0x2b, 0xd1, 0x10, 0x21, 0xb2, + 0x68, 0x8a, 0xe7, 0x84, 0x10, 0xf3, 0x6a, 0x55, 0x44, 0xe7, 0x29, 0x03, 0x7a, 0x03, 0x9f, 0x96, + 0x91, 0x74, 0x49, 0xef, 0x08, 0x20, 0xa9, 0x09, 0x90, 0x3c, 0x7d, 0x38, 0x22, 0xd2, 0x07, 0xe4, + 0x15, 0x0a, 0x98, 0xa3, 0x76, 0xc2, 0xa8, 0x31, 0xf9, 0xbd, 0x84, 0x6e, 0x14, 0xdc, 0x4d, 0x1d, + 0x3c, 0x39, 0x23, 0x81, 0x25, 0x89, 0xd3, 0x85, 0x1c, 0x1d, 0xe9, 0x23, 0xf3, 0xf9, 0x02, 0x00, + 0x9c, 0x6b, 0xdc, 0xc7, 0x0a, 0x61, 0xfc, 0x29, 0xf8, 0x2e, 0x36, 0xff, 0xa8, 0x0b, 0x81, 0x4d, + 0x39, 0xb7, 0xb7, 0x60, 0x4f, 0x46, 0x4c, 0x94, 0x1a, 0x55, 0xfe, 0x3c, 0xa1, 0xcd, 0xcb, 0x1c, + 0xd3, 0x06, 0x0e, 0xee, 0x43, 0xf6, 0x72, 0x0f, 0x25, 0x30, 0x7e, 0x07, 0x91, 0x92, 0x0c, 0xb5, + 0xd5, 0x21, 0xe6, 0x92, 0xa7, 0xc0, 0x71, 0x5d, 0x2b, 0x2d, 0xd6, 0xaa, 0xab, 0xf7, 0xf3, 0x57, + 0x3a, 0x14, 0x15, 0x7e, 0x72, 0x92, 0x0a, 0x6c, 0x6f, 0x4c, 0xd8, 0x07, 0x8a, 0xbc, 0x8a, 0x9b, + 0xad, 0x70, 0xd3, 0xf9, 0xc1, 0xbd, 0x9a, 0x44, 0xb1, 0x87, 0x89, 0xc2, 0xdb, 0xa6, 0x38, 0x35, + 0x7a, 0x91, 0x02, 0x8a, 0xe1, 0x0d, 0xc0, 0xec, 0x7e, 0x9e, 0x9a, 0xe8, 0x39, 0xd7, 0xa1, 0x5b, + 0x30, 0xa1, 0xe7, 0x9c, 0x9f, 0xa0, 0xde, 0x08, 0xe6, 0x9a, 0xdb, 0xa8, 0x79, 0xb1, 0x62, 0xfb, + 0x5b, 0xcb, 0x74, 0x1f, 0xb2, 0x27, 0x55, 0x04, 0xe6, 0x3e, 0x11, 0x18, 0x71, 0x12, 0x2d, 0x0c, + 0xd2, 0x3c, 0x51, 0x11, 0xb8, 0xfc, 0x71, 0x80, 0x4b, 0x55, 0xc0, 0xe5, 0xce, 0xa1, 0x4a, 0x4d, + 0x06, 0x4b, 0x75, 0x08, 0x58, 0x20, 0x38, 0x59, 0x5b, 0x37, 0x2a, 0xb5, 0x6a, 0x63, 0xa3, 0xae, + 0x2d, 0x36, 0x16, 0x7c, 0x70, 0xea, 0x45, 0x05, 0x7e, 0x33, 0x0b, 0x26, 0x28, 0x59, 0xdd, 0x9e, + 0x1b, 0x7b, 0xe3, 0x5d, 0x06, 0xe1, 0x3b, 0xa5, 0x03, 0x00, 0x04, 0x8c, 0x60, 0xf5, 0x44, 0xf4, + 0x53, 0x4f, 0x03, 0x13, 0x14, 0x64, 0xdf, 0xe3, 0xe4, 0x74, 0x44, 0x2f, 0xc5, 0x8a, 0xd1, 0xfd, + 0xec, 0x92, 0xc1, 0x00, 0x06, 0x90, 0x91, 0xfe, 0xc8, 0xf2, 0x16, 0x85, 0x9a, 0xc1, 0xe7, 0x2d, + 0x6f, 0x9b, 0x78, 0x14, 0xc2, 0x67, 0xc9, 0x2c, 0x60, 0xde, 0x02, 0xf2, 0x7b, 0x38, 0xf7, 0x00, + 0xef, 0x4c, 0x9a, 0x09, 0xfe, 0xa1, 0x74, 0xd8, 0x2c, 0x41, 0x3e, 0x03, 0x9a, 0xa2, 0x77, 0x4b, + 0x07, 0xf5, 0x84, 0x2a, 0x14, 0x4e, 0x44, 0x29, 0x37, 0x29, 0x89, 0x03, 0xae, 0x49, 0x91, 0x34, + 0x96, 0x99, 0xfc, 0xc4, 0x8a, 0xd5, 0xf5, 0x1c, 0xf7, 0x0a, 0x7c, 0x73, 0x06, 0x4c, 0x9c, 0x43, + 0x6e, 0xd7, 0x72, 0xec, 0x7d, 0x5b, 0xe2, 0x67, 0xc0, 0x74, 0xc7, 0x45, 0x7b, 0x96, 0xb3, 0xdb, + 0x0d, 0x57, 0x50, 0xf8, 0x24, 0xcc, 0x12, 0x73, 0xd7, 0xdb, 0x76, 0xdc, 0x30, 0x2a, 0x82, 0xff, + 0xae, 0x9e, 0x06, 0x80, 0x3e, 0x57, 0xcd, 0x1d, 0xc4, 0x36, 0xfa, 0xb9, 0x14, 0x55, 0x05, 0x39, + 0xcf, 0xda, 0x41, 0x2c, 0xa8, 0x21, 0x79, 0xc6, 0x52, 0x42, 0x42, 0x90, 0xb1, 0x50, 0x6f, 0x8a, + 0xee, 0xbf, 0xc2, 0x5f, 0x57, 0xc0, 0xf4, 0x32, 0xf2, 0x18, 0xa9, 0x5d, 0x3e, 0xb6, 0x50, 0x4c, + 0xe0, 0x6f, 0x3c, 0x0e, 0xb6, 0xcd, 0xae, 0xff, 0x5b, 0xb0, 0x4c, 0x2a, 0x26, 0x86, 0x01, 0x16, + 0x15, 0x2e, 0x86, 0x2a, 0x7c, 0x5f, 0x56, 0xf6, 0x34, 0x2b, 0x63, 0xe6, 0x3c, 0x47, 0x60, 0x64, + 0x27, 0x30, 0xb9, 0xc7, 0x72, 0xec, 0x0b, 0x78, 0xcb, 0x97, 0xc4, 0x8a, 0xd1, 0x83, 0xdc, 0x92, + 0xe7, 0x60, 0x07, 0x53, 0x92, 0xbe, 0x78, 0x7d, 0x57, 0x01, 0xd3, 0xf5, 0x6d, 0xe7, 0x12, 0x23, + 0x80, 0xbf, 0x2d, 0x38, 0x0e, 0xaa, 0x6b, 0xc1, 0xd4, 0x5e, 0x0f, 0x4c, 0x61, 0x42, 0xf4, 0xa5, + 0xb6, 0xf0, 0x41, 0x25, 0x29, 0x4c, 0x1c, 0x71, 0x23, 0xbf, 0x72, 0x56, 0x7d, 0x0a, 0x98, 0x60, + 0x54, 0xb3, 0x85, 0x8e, 0x78, 0x80, 0xfd, 0xcc, 0x7c, 0x03, 0x73, 0x62, 0x03, 0x93, 0x21, 0x1f, + 0xdd, 0xb8, 0x31, 0x84, 0x95, 0xcf, 0x92, 0x28, 0x08, 0x3e, 0xf0, 0xe5, 0x11, 0x00, 0x0f, 0xbf, + 0x97, 0x91, 0x5d, 0x0e, 0x0c, 0x38, 0x10, 0x50, 0x70, 0xa0, 0x30, 0xfd, 0x03, 0x8b, 0x4b, 0x9f, + 0x9f, 0xaf, 0xce, 0x81, 0x99, 0x45, 0x6b, 0x73, 0x33, 0xe8, 0xf5, 0x5e, 0x9a, 0x91, 0x63, 0x69, + 0xf4, 0x3e, 0x34, 0xb6, 0x2e, 0x77, 0x5d, 0x17, 0xd9, 0x7e, 0xa3, 0x98, 0x3a, 0xf5, 0xa4, 0xaa, + 0x37, 0x81, 0xa3, 0x7e, 0x47, 0xef, 0x67, 0xa4, 0x62, 0xd9, 0x9b, 0x0c, 0xbf, 0x23, 0xbd, 0x97, + 0xe4, 0x73, 0x94, 0x6f, 0x52, 0x84, 0x02, 0xde, 0x05, 0x66, 0xb7, 0x69, 0x6e, 0x32, 0xe1, 0xf6, + 0x3b, 0xcb, 0x93, 0x3d, 0xe1, 0x50, 0xd7, 0x50, 0xb7, 0x6b, 0x6e, 0x21, 0x5d, 0xcc, 0xdc, 0xa3, + 0xbe, 0x4a, 0x92, 0x3b, 0x49, 0xe4, 0xb6, 0xa5, 0x24, 0x5a, 0x92, 0xbe, 0x74, 0x7c, 0xed, 0x31, + 0x20, 0xb7, 0x64, 0xb5, 0x11, 0xfc, 0xd9, 0x2c, 0x98, 0xd2, 0x51, 0xd3, 0xb1, 0x9b, 0xf8, 0x8d, + 0xf3, 0x4a, 0xf9, 0x87, 0x8c, 0xec, 0x5d, 0x5c, 0xb8, 0x9c, 0xf9, 0xa0, 0x8c, 0x08, 0xbd, 0x91, + 0xbb, 0x73, 0x2b, 0xb6, 0xa8, 0x31, 0x44, 0x5b, 0xc7, 0x06, 0xff, 0xe6, 0x66, 0xdb, 0x31, 0x85, + 0x25, 0xa7, 0x5e, 0xdb, 0xe6, 0x66, 0x50, 0xf4, 0x0f, 0x17, 0x38, 0xde, 0xba, 0x65, 0xdb, 0xc1, + 0xe9, 0xd5, 0x7d, 0xe9, 0xe2, 0x6e, 0x69, 0x6c, 0x00, 0x10, 0xd2, 0x76, 0x56, 0x7b, 0x84, 0x64, + 0xdf, 0x08, 0xe6, 0x2e, 0x5c, 0xf1, 0x50, 0x97, 0xe5, 0x62, 0xd5, 0xe6, 0xf4, 0x9e, 0x54, 0xf8, + 0x7e, 0xa9, 0x40, 0x21, 0x31, 0x15, 0x26, 0x63, 0xf5, 0xca, 0x10, 0xf3, 0xae, 0xe3, 0xa0, 0x58, + 0xad, 0x2d, 0x6a, 0xc4, 0x49, 0xca, 0xf7, 0x2b, 0xd9, 0x82, 0x2f, 0x53, 0xc0, 0x0c, 0x71, 0x29, + 0xf0, 0x51, 0xb8, 0x5e, 0x62, 0x16, 0x00, 0xbf, 0x2c, 0xed, 0x40, 0x45, 0x9a, 0xcc, 0x57, 0x10, + 0xcd, 0xe8, 0x4d, 0xab, 0xdd, 0xcb, 0xe8, 0xbc, 0xde, 0x93, 0xda, 0x07, 0x10, 0xa5, 0x2f, 0x20, + 0xbf, 0x23, 0xe5, 0x45, 0x35, 0x88, 0xba, 0xc3, 0x42, 0xe5, 0x77, 0x15, 0x30, 0x8d, 0x67, 0x1d, + 0x3e, 0x28, 0x35, 0x01, 0x14, 0xc7, 0x6e, 0x5f, 0x09, 0x17, 0x23, 0xfc, 0xd7, 0x44, 0x4a, 0xf2, + 0x57, 0xd2, 0xf3, 0x65, 0xc2, 0x22, 0x8e, 0x96, 0x31, 0xe1, 0xf7, 0x21, 0xa9, 0x59, 0xf4, 0x00, + 0xe2, 0x0e, 0x0b, 0xbe, 0xdf, 0xcc, 0x83, 0xc2, 0x46, 0x87, 0x20, 0xf7, 0xf5, 0xac, 0x4c, 0x68, + 0xec, 0x7d, 0x1e, 0xf4, 0xd8, 0xcc, 0x6a, 0x3b, 0x4d, 0xb3, 0xbd, 0x1e, 0x1e, 0x45, 0x0a, 0x13, + 0xd4, 0x3b, 0x99, 0x53, 0x1d, 0x3d, 0xc7, 0x75, 0x63, 0x6c, 0xd4, 0x68, 0xc2, 0x23, 0xee, 0xb4, + 0xc2, 0x2d, 0xe0, 0x58, 0xcb, 0xea, 0x9a, 0x17, 0xda, 0x48, 0xb3, 0x9b, 0xee, 0x15, 0xca, 0x0e, + 0xea, 0x61, 0xb4, 0xff, 0x83, 0x7a, 0x37, 0xc8, 0x77, 0xbd, 0x2b, 0x6d, 0x3a, 0xf1, 0xe3, 0x0f, + 0x37, 0x44, 0x56, 0x55, 0xc7, 0xd9, 0x75, 0xfa, 0x17, 0x7f, 0xe1, 0xe6, 0x84, 0xe4, 0xe5, 0xa1, + 0xb7, 0x83, 0x82, 0xe3, 0x5a, 0x5b, 0x16, 0xbd, 0x8c, 0x61, 0x6e, 0x5f, 0x30, 0x34, 0x6a, 0x0a, + 0xd4, 0x48, 0x16, 0x9d, 0x65, 0x85, 0x1f, 0xca, 0xca, 0x46, 0x5e, 0x21, 0x34, 0x52, 0x70, 0xc6, + 0x73, 0x81, 0xe8, 0xeb, 0xa4, 0x62, 0xa2, 0x44, 0x93, 0x95, 0xfe, 0x20, 0xfc, 0x85, 0x2c, 0x98, + 0x5c, 0x74, 0x2e, 0xd9, 0x44, 0x60, 0xef, 0x90, 0xb3, 0x59, 0xfb, 0x9c, 0x92, 0x13, 0xef, 0xed, + 0x8a, 0x75, 0x89, 0x27, 0xad, 0xf5, 0xab, 0x8c, 0x80, 0x21, 0x56, 0x03, 0x24, 0xef, 0x59, 0x8a, + 0xab, 0x27, 0x7d, 0xbe, 0xfe, 0x99, 0x02, 0x72, 0x8b, 0xae, 0xd3, 0x81, 0xef, 0xc8, 0x24, 0xd8, + 0xf0, 0x6f, 0xb9, 0x4e, 0xc7, 0x20, 0x57, 0xa8, 0x84, 0xe7, 0x00, 0xf8, 0x34, 0xf5, 0x0e, 0x30, + 0xd9, 0x71, 0xba, 0x96, 0xe7, 0x4f, 0x07, 0xe6, 0x6e, 0x7b, 0x74, 0x5f, 0xad, 0x5c, 0x67, 0x99, + 0xf4, 0x20, 0x3b, 0xee, 0x7d, 0x09, 0x0b, 0x31, 0x5f, 0x30, 0x1b, 0xfd, 0x6b, 0x64, 0x7a, 0x52, + 0xe1, 0xcb, 0x79, 0x24, 0x9f, 0x2e, 0x22, 0xf9, 0xd8, 0x3e, 0x1c, 0x76, 0x9d, 0xce, 0x48, 0xb6, + 0xe8, 0x5e, 0x13, 0xa0, 0xfa, 0x0c, 0x01, 0xd5, 0x9b, 0xa5, 0xea, 0x4c, 0x1f, 0xd1, 0x0f, 0xe5, + 0x00, 0x20, 0xe6, 0xc2, 0x06, 0x9e, 0xc8, 0xc8, 0xd9, 0x4a, 0x2f, 0xc8, 0x71, 0xbc, 0x2c, 0x89, + 0xbc, 0x7c, 0x5c, 0x84, 0x35, 0x42, 0x8a, 0x8f, 0xe0, 0x68, 0x09, 0xe4, 0x77, 0xf1, 0x67, 0xc6, + 0x51, 0xc9, 0x22, 0xc8, 0xab, 0x4e, 0xff, 0x84, 0x7f, 0x9a, 0x01, 0x79, 0x92, 0xa0, 0x9e, 0x06, + 0x80, 0x0c, 0xd0, 0xf4, 0x44, 0x49, 0x86, 0x0c, 0xc5, 0x5c, 0x0a, 0x91, 0x56, 0xab, 0xc5, 0x3e, + 0x53, 0xd3, 0x37, 0x4c, 0xc0, 0x7f, 0x93, 0x61, 0x9b, 0x94, 0xc5, 0x06, 0x72, 0x2e, 0x05, 0xff, + 0x4d, 0xde, 0x56, 0xd1, 0x26, 0x8d, 0xa4, 0x9b, 0xd3, 0xc3, 0x84, 0xe0, 0xef, 0xd5, 0xe0, 0xb6, + 0x14, 0xff, 0x6f, 0x92, 0x82, 0x27, 0xb5, 0x44, 0x2c, 0x17, 0xc2, 0x2a, 0x0a, 0x24, 0x53, 0x6f, + 0x32, 0x7c, 0x63, 0x20, 0x36, 0x8b, 0x82, 0xd8, 0x3c, 0x21, 0x01, 0x7b, 0xd3, 0x17, 0x9e, 0xaf, + 0xe6, 0xc1, 0x54, 0xd5, 0x69, 0x31, 0xd9, 0xe1, 0x26, 0x7e, 0x9f, 0xc8, 0x27, 0x9a, 0xf8, 0x05, + 0x65, 0x44, 0x08, 0xc8, 0xbd, 0xa2, 0x80, 0xc8, 0x95, 0xc0, 0xcb, 0x87, 0xba, 0x00, 0x0a, 0x44, + 0x7a, 0xf7, 0xdf, 0x82, 0x13, 0x57, 0x04, 0x61, 0xad, 0xce, 0xfe, 0xfc, 0x37, 0x27, 0x63, 0xff, + 0x09, 0xe4, 0xa9, 0xeb, 0x75, 0xf4, 0xde, 0x88, 0xd8, 0xd0, 0x6c, 0x7c, 0x43, 0x95, 0xf8, 0x86, + 0xe6, 0x7a, 0x1b, 0x9a, 0x64, 0x3e, 0x1f, 0x25, 0x21, 0xe9, 0xcb, 0xf8, 0x7f, 0x9f, 0x00, 0xa0, + 0x6a, 0xee, 0x59, 0x5b, 0x74, 0x6f, 0xf5, 0x2f, 0xfd, 0x79, 0x0c, 0xdb, 0x05, 0xfd, 0xcf, 0xdc, + 0x40, 0x78, 0x07, 0x98, 0x60, 0xe3, 0x1e, 0x6b, 0xc8, 0x75, 0x42, 0x43, 0xc2, 0x52, 0xa8, 0x79, + 0x79, 0xd9, 0xd3, 0xfd, 0xfc, 0xc2, 0xbd, 0x80, 0xd9, 0x9e, 0x7b, 0x01, 0xfb, 0xee, 0x0e, 0x44, + 0xdd, 0x16, 0x08, 0xdf, 0x2f, 0xbd, 0x41, 0xc5, 0xd1, 0xc3, 0xb5, 0x28, 0x42, 0x05, 0x6f, 0x07, + 0x13, 0x4e, 0xb0, 0x1d, 0xac, 0x44, 0xae, 0x67, 0x55, 0xec, 0x4d, 0x47, 0xf7, 0x73, 0x4a, 0xee, + 0x4a, 0x49, 0xd1, 0x91, 0x3e, 0xd0, 0x9f, 0x51, 0xc0, 0xc9, 0x65, 0x3f, 0x2a, 0x11, 0x6e, 0xc7, + 0x79, 0xcb, 0xdb, 0x5e, 0xb5, 0xec, 0x8b, 0x5d, 0xf8, 0x1f, 0xe4, 0x2c, 0x48, 0x0e, 0xff, 0x6c, + 0x32, 0xfc, 0xc5, 0xa0, 0x0f, 0x75, 0x11, 0xb5, 0xbb, 0xa3, 0x4a, 0xe9, 0x4f, 0x6d, 0x04, 0x80, + 0x77, 0x82, 0x02, 0x25, 0x94, 0x75, 0xa2, 0x67, 0x23, 0xf1, 0x0b, 0x4a, 0xd2, 0xd9, 0x1f, 0xf0, + 0x7d, 0x01, 0x8e, 0xe7, 0x04, 0x1c, 0x17, 0x0e, 0x44, 0x59, 0xea, 0x90, 0x9e, 0x7d, 0x22, 0x98, + 0x60, 0x9c, 0x56, 0xe7, 0x78, 0x2d, 0x2e, 0x1e, 0x51, 0x01, 0x28, 0xac, 0x39, 0x7b, 0xc8, 0x70, + 0x8a, 0x19, 0xfc, 0x8c, 0xe9, 0x33, 0x9c, 0x62, 0x16, 0xbe, 0x76, 0x12, 0x4c, 0x06, 0xe1, 0x60, + 0xbe, 0x90, 0x05, 0xc5, 0xb2, 0x8b, 0x4c, 0x0f, 0x2d, 0xb9, 0xce, 0x0e, 0x6d, 0x91, 0xbc, 0x6f, + 0xe5, 0x2b, 0xa4, 0x1d, 0x24, 0x82, 0x30, 0x2d, 0xbd, 0x95, 0x49, 0x5e, 0x51, 0xfe, 0x76, 0x29, + 0x87, 0x09, 0xd9, 0x5a, 0xd2, 0x57, 0xb5, 0x4f, 0x67, 0x41, 0xbe, 0xdc, 0x76, 0x6c, 0x94, 0xe8, + 0x86, 0xf2, 0xfe, 0x3b, 0x0a, 0xf0, 0xa7, 0xb3, 0xb2, 0xb6, 0x46, 0xc8, 0x00, 0x5c, 0xb7, 0x24, + 0x6f, 0xe5, 0x06, 0xa9, 0xd8, 0xa2, 0xd3, 0x67, 0xe8, 0x37, 0xb3, 0x60, 0x8a, 0x06, 0x56, 0x29, + 0xb5, 0xdb, 0xf0, 0xd1, 0x21, 0x53, 0xfb, 0x84, 0xd4, 0x81, 0xbf, 0x23, 0xed, 0xe0, 0x1e, 0xb4, + 0x2a, 0x28, 0x3b, 0x41, 0x84, 0x99, 0x64, 0xfe, 0xd6, 0x72, 0x7b, 0x62, 0x03, 0x09, 0x4a, 0x9f, + 0xd5, 0x7f, 0x91, 0xc5, 0x06, 0x80, 0x7d, 0x71, 0xdd, 0x45, 0x7b, 0x16, 0xba, 0x04, 0x1f, 0x15, + 0x32, 0x7b, 0x7f, 0xd4, 0x88, 0xb7, 0x4a, 0x2f, 0xe2, 0x70, 0x45, 0x46, 0x6e, 0x49, 0x4d, 0xb7, + 0xc3, 0x4c, 0xac, 0x17, 0xef, 0x0d, 0xe5, 0xc1, 0x15, 0xa3, 0xf3, 0xd9, 0x25, 0xd7, 0x6c, 0xa2, + 0xa9, 0x48, 0x9f, 0xb1, 0x0f, 0x4e, 0x80, 0xc9, 0x0d, 0xbb, 0xdb, 0x69, 0x9b, 0xdd, 0x6d, 0xf8, + 0x7d, 0x25, 0xb8, 0x20, 0xfc, 0xc9, 0xc2, 0xe1, 0xf4, 0x9f, 0xdc, 0x45, 0xae, 0xef, 0x2f, 0x45, + 0x5f, 0xfa, 0xdf, 0x40, 0x0b, 0x3f, 0xa4, 0xc8, 0x4e, 0x52, 0xfd, 0x4a, 0xe3, 0x6f, 0xce, 0xae, + 0x80, 0xc9, 0x8e, 0xd5, 0xf4, 0x76, 0xdd, 0xe0, 0x3e, 0xd3, 0xc7, 0xcb, 0x95, 0xb2, 0x4e, 0xff, + 0xd2, 0x83, 0xdf, 0xa1, 0x09, 0x26, 0x58, 0xe2, 0xbe, 0x6d, 0xa1, 0xfd, 0xa7, 0x29, 0x4f, 0x82, + 0x82, 0xe9, 0x7a, 0x56, 0xd7, 0xbf, 0x2f, 0x9a, 0xbd, 0xe1, 0xee, 0x92, 0x3e, 0x6d, 0xb8, 0x6d, + 0x3f, 0x8c, 0x45, 0x90, 0x00, 0x7f, 0x57, 0x6a, 0xfe, 0x18, 0xdf, 0xf2, 0x64, 0x90, 0xdf, 0x37, + 0xc4, 0x5a, 0xf3, 0xd5, 0xe0, 0x2a, 0xbd, 0x64, 0x68, 0x0d, 0x1a, 0xf5, 0x20, 0x08, 0x70, 0xd0, + 0x82, 0xdf, 0xe7, 0xd7, 0xef, 0xc4, 0x31, 0x82, 0x71, 0x31, 0x1c, 0x23, 0x82, 0x84, 0x98, 0x31, + 0xe2, 0x37, 0xa5, 0x77, 0x77, 0x02, 0x96, 0x0c, 0x58, 0xcb, 0x8b, 0xbb, 0x36, 0xe6, 0xc3, 0x52, + 0x3b, 0x35, 0x83, 0x6a, 0x3a, 0x44, 0xf6, 0x7f, 0x76, 0x02, 0x4c, 0x2c, 0x9b, 0xed, 0x36, 0x72, + 0xaf, 0xe0, 0xa1, 0xa5, 0xe8, 0x53, 0xb8, 0x66, 0xda, 0xd6, 0x26, 0x9e, 0xdf, 0xc7, 0x76, 0x7a, + 0xef, 0x97, 0x0e, 0x49, 0xca, 0xea, 0x98, 0xef, 0x2d, 0x3f, 0x82, 0xe7, 0xb7, 0x82, 0x9c, 0x65, + 0x6f, 0x3a, 0xac, 0xeb, 0xeb, 0x5d, 0x45, 0xf7, 0x7f, 0x26, 0x53, 0x10, 0x92, 0x51, 0x32, 0x2a, + 0xa9, 0x24, 0x15, 0xe9, 0xf7, 0x80, 0x5f, 0xca, 0x81, 0x59, 0x9f, 0x88, 0x8a, 0xdd, 0x42, 0x97, + 0xe1, 0xed, 0x21, 0x9f, 0x6f, 0x02, 0x47, 0x9b, 0x6d, 0x0b, 0xd9, 0x5e, 0x39, 0x38, 0x25, 0x9d, + 0x61, 0x81, 0x7f, 0xc4, 0x64, 0xf8, 0xb2, 0x9c, 0xec, 0xf1, 0xa9, 0xde, 0x96, 0x93, 0x4a, 0x23, + 0x98, 0x6f, 0x00, 0xd0, 0x34, 0x3d, 0xb4, 0xe5, 0xb8, 0x56, 0xd0, 0x03, 0x3e, 0x29, 0x49, 0x69, + 0x65, 0xfa, 0xf7, 0x15, 0x9d, 0x2b, 0x47, 0xbd, 0x1b, 0x4c, 0xa3, 0xe0, 0x84, 0xb4, 0xbf, 0x38, + 0x13, 0x8b, 0x2c, 0x9f, 0x1f, 0xfe, 0x85, 0xd4, 0x29, 0x2d, 0x99, 0x66, 0x26, 0x43, 0xb7, 0x31, + 0x9c, 0xb6, 0x6d, 0x54, 0xd7, 0x4a, 0x7a, 0x7d, 0xa5, 0xb4, 0xba, 0x5a, 0xa9, 0x2e, 0x07, 0xb1, + 0x42, 0x54, 0x30, 0xb7, 0x58, 0x3b, 0x5f, 0xe5, 0x82, 0xb9, 0xe4, 0xe0, 0x3a, 0x98, 0xf4, 0xf9, + 0xd5, 0xcf, 0x2d, 0x92, 0xe7, 0x19, 0x73, 0x8b, 0xe4, 0x92, 0xb0, 0x39, 0x66, 0x35, 0x03, 0xd7, + 0x1a, 0xf2, 0x0c, 0xff, 0xc4, 0x04, 0x79, 0xb2, 0x8a, 0x0e, 0xdf, 0x4d, 0xae, 0x9e, 0xee, 0xb4, + 0xcd, 0x26, 0x82, 0x3b, 0x09, 0xec, 0x6f, 0x3f, 0x9a, 0x7e, 0x76, 0x5f, 0x34, 0x7d, 0xf2, 0xc8, + 0xec, 0xbc, 0xe3, 0xfd, 0x56, 0xee, 0x75, 0x9a, 0x45, 0x3c, 0xd0, 0x14, 0xbb, 0x9f, 0x42, 0x17, + 0xfc, 0x19, 0x99, 0x11, 0x22, 0x19, 0x4d, 0x53, 0x32, 0xdb, 0x53, 0x6e, 0xe7, 0x25, 0x8e, 0xa2, + 0xb1, 0xf4, 0x0d, 0xf9, 0x7a, 0xa7, 0x6d, 0x79, 0xf0, 0x55, 0xd9, 0x91, 0x60, 0x46, 0x6f, 0x40, + 0x50, 0x06, 0xde, 0x80, 0x10, 0xee, 0x97, 0xe6, 0x24, 0xf6, 0x4b, 0x0d, 0x74, 0xd9, 0x13, 0xf7, + 0x4b, 0xef, 0x60, 0xf1, 0xbe, 0xe8, 0x6e, 0xeb, 0x63, 0xfb, 0xb0, 0x94, 0x34, 0xab, 0x4f, 0x20, + 0xb9, 0xb3, 0x4f, 0x64, 0xf1, 0xac, 0x00, 0x28, 0x2c, 0xd4, 0x0c, 0xa3, 0xb6, 0x56, 0x3c, 0x42, + 0x02, 0xa1, 0xd4, 0xd6, 0x8b, 0x19, 0x75, 0x0a, 0xe4, 0x2b, 0xd5, 0xaa, 0xa6, 0x17, 0xb3, 0x24, + 0xc2, 0x56, 0xc5, 0x58, 0xd5, 0x8a, 0x8a, 0x18, 0x0e, 0x3b, 0xd6, 0xe0, 0x16, 0xeb, 0x4e, 0x53, + 0xbc, 0xe4, 0x4c, 0xef, 0x68, 0x7a, 0xd2, 0x17, 0xae, 0xff, 0xa2, 0x80, 0xfc, 0x1a, 0x72, 0xb7, + 0x10, 0xfc, 0xc9, 0x04, 0xdb, 0x7a, 0x9b, 0x96, 0xdb, 0xa5, 0xf1, 0xc8, 0xc2, 0x6d, 0x3d, 0x3e, + 0x4d, 0xbd, 0x01, 0xcc, 0x76, 0x51, 0xd3, 0xb1, 0x5b, 0x7e, 0x26, 0xda, 0x1f, 0x89, 0x89, 0xf0, + 0x95, 0x09, 0x21, 0x23, 0x84, 0x8e, 0x64, 0x6f, 0x2e, 0x09, 0x30, 0xfd, 0x6a, 0x4d, 0x1f, 0x98, + 0xef, 0x28, 0xf8, 0xa7, 0xce, 0x15, 0xf8, 0x4a, 0xe9, 0xfd, 0xd6, 0x5b, 0x40, 0x81, 0x88, 0xa9, + 0x3f, 0x46, 0xf7, 0xef, 0x8f, 0x59, 0x1e, 0x75, 0x01, 0x1c, 0xeb, 0xa2, 0x36, 0x6a, 0x7a, 0xa8, + 0x85, 0x55, 0x57, 0x1f, 0xd8, 0x29, 0xec, 0xcf, 0x0e, 0x3f, 0xcb, 0x03, 0x78, 0x97, 0x08, 0xe0, + 0x8d, 0x7d, 0x58, 0x89, 0x1b, 0x14, 0x6d, 0x55, 0xe3, 0x66, 0xd4, 0xdb, 0x4e, 0xb0, 0x0c, 0xee, + 0xbf, 0xe3, 0x6f, 0xdb, 0xde, 0x4e, 0x9b, 0x7c, 0x63, 0xbe, 0xfe, 0xfe, 0xbb, 0x3a, 0x0f, 0x26, + 0x4c, 0xfb, 0x0a, 0xf9, 0x94, 0x8b, 0x69, 0xb5, 0x9f, 0x09, 0xbe, 0x36, 0x40, 0xfe, 0x1e, 0x01, + 0xf9, 0xc7, 0xc9, 0x91, 0x9b, 0x3e, 0xf0, 0xcf, 0x9b, 0x00, 0xf9, 0x75, 0xb3, 0xeb, 0x21, 0xf8, + 0xff, 0x2a, 0xb2, 0xc8, 0xdf, 0x08, 0xe6, 0x36, 0x9d, 0xe6, 0x6e, 0x17, 0xb5, 0x44, 0xa5, 0xec, + 0x49, 0x1d, 0x05, 0xe6, 0xea, 0xcd, 0xa0, 0xe8, 0x27, 0xb2, 0x62, 0xfd, 0x8d, 0xf7, 0x7d, 0xe9, + 0x24, 0xb8, 0x72, 0x77, 0xdd, 0x74, 0xbd, 0xda, 0x26, 0x49, 0x0b, 0x82, 0x2b, 0xf3, 0x89, 0x02, + 0xf4, 0x85, 0x18, 0xe8, 0x27, 0xa2, 0xa1, 0x9f, 0x94, 0x80, 0x5e, 0x2d, 0x81, 0xc9, 0x4d, 0xab, + 0x8d, 0xc8, 0x0f, 0x53, 0xe4, 0x87, 0x7e, 0x63, 0x12, 0xe1, 0x7d, 0x30, 0x26, 0x2d, 0x59, 0x6d, + 0xa4, 0x07, 0xbf, 0xf9, 0x53, 0x1e, 0x10, 0x4e, 0x79, 0x56, 0xa9, 0x27, 0x2c, 0x36, 0xbc, 0x6c, + 0x73, 0x07, 0xf9, 0xcb, 0x6d, 0x36, 0x3b, 0x67, 0xd2, 0x32, 0x3d, 0x93, 0x80, 0x31, 0xa3, 0x93, + 0x67, 0xd1, 0x13, 0x44, 0xe9, 0xf5, 0x04, 0x79, 0xa1, 0x92, 0xac, 0x47, 0xf4, 0x89, 0x8d, 0xd0, + 0xa8, 0x0b, 0x3e, 0x40, 0xd4, 0x52, 0x0c, 0xde, 0x31, 0x30, 0x4d, 0xd3, 0x45, 0xde, 0x3a, 0xef, + 0x7b, 0x91, 0xd7, 0xc5, 0x44, 0xe2, 0x84, 0xd7, 0xad, 0x9b, 0x3b, 0x88, 0x54, 0x56, 0xc6, 0xdf, + 0x98, 0x73, 0xd5, 0xbe, 0xf4, 0xb0, 0xff, 0xcd, 0x8f, 0xba, 0xff, 0xed, 0xd7, 0xc6, 0xf4, 0xd5, + 0xf0, 0xf5, 0x39, 0xa0, 0x94, 0x77, 0xbd, 0x47, 0x74, 0xf7, 0xfb, 0x03, 0x69, 0xcf, 0x16, 0xd6, + 0x9f, 0x45, 0xde, 0x3d, 0x3e, 0xa6, 0xde, 0x37, 0xa1, 0x94, 0xc8, 0x79, 0xd0, 0x44, 0xb5, 0x2d, + 0x7d, 0x19, 0x79, 0x87, 0x12, 0xb8, 0x46, 0x3e, 0x3f, 0x73, 0x70, 0xd3, 0x1c, 0xd2, 0xfe, 0x89, + 0xeb, 0x19, 0x82, 0x77, 0xbf, 0xe3, 0xc9, 0x09, 0xb1, 0xd6, 0xc8, 0x86, 0x3a, 0x61, 0xe5, 0x8c, + 0x4e, 0x5f, 0xe0, 0xab, 0xa5, 0x1d, 0xc6, 0x29, 0xdb, 0x62, 0x9d, 0x07, 0x93, 0xd9, 0x54, 0x72, + 0xf7, 0x4b, 0xc6, 0x54, 0x3b, 0x86, 0x60, 0x77, 0xd1, 0x8b, 0x8b, 0xc3, 0x20, 0x06, 0x5f, 0x27, + 0xbd, 0x01, 0x45, 0x9b, 0x3d, 0x60, 0x65, 0x31, 0x19, 0xbf, 0xe5, 0xb6, 0xa7, 0x62, 0x2b, 0x4e, + 0x9f, 0xe3, 0xdf, 0x52, 0x40, 0x81, 0x6e, 0x3a, 0xc2, 0xb7, 0x65, 0x12, 0x5c, 0xcc, 0xed, 0x89, + 0x4e, 0x83, 0xc1, 0x7b, 0x92, 0x35, 0x07, 0xc1, 0xb9, 0x30, 0x97, 0xc8, 0xb9, 0x50, 0x3c, 0x81, + 0x29, 0xa1, 0x47, 0xb4, 0x8d, 0x29, 0x4f, 0x27, 0x93, 0x68, 0x58, 0x5f, 0x82, 0xd2, 0xc7, 0xfb, + 0x45, 0x79, 0x30, 0x43, 0xab, 0x3e, 0x6f, 0xb5, 0xb6, 0x90, 0x07, 0xdf, 0x9b, 0xfd, 0xe1, 0x41, + 0x5d, 0xad, 0x82, 0x99, 0x4b, 0x84, 0xec, 0x55, 0xf3, 0x8a, 0xb3, 0xeb, 0xb1, 0x95, 0x8b, 0x9b, + 0x63, 0xd7, 0x3d, 0x68, 0x3b, 0xe7, 0xe9, 0x1f, 0xba, 0xf0, 0x3f, 0xe6, 0x31, 0xdd, 0x1a, 0xa0, + 0x2e, 0x5b, 0x05, 0x62, 0x64, 0xf1, 0x49, 0xea, 0x49, 0x50, 0xd8, 0xb3, 0xd0, 0xa5, 0x4a, 0x8b, + 0x59, 0xb7, 0xec, 0x4d, 0x3c, 0x6c, 0x1e, 0xbb, 0x53, 0xcb, 0xc3, 0xcd, 0x68, 0x49, 0x57, 0x0a, + 0xe5, 0xf6, 0x6b, 0x07, 0x92, 0x35, 0x86, 0xd3, 0xc0, 0xe2, 0xfd, 0x8d, 0xe5, 0x04, 0x82, 0x18, + 0x65, 0x38, 0x8b, 0xa1, 0x2f, 0x62, 0xcf, 0x9a, 0x50, 0x06, 0x8c, 0xf8, 0x6a, 0x47, 0xb9, 0x78, + 0x0c, 0x03, 0xaa, 0x4e, 0x9f, 0xf3, 0x6f, 0x54, 0xc0, 0x54, 0x1d, 0x79, 0x4b, 0x16, 0x6a, 0xb7, + 0xba, 0xd0, 0x3d, 0xb8, 0x69, 0x74, 0x2b, 0x28, 0x6c, 0x92, 0xc2, 0x06, 0x9d, 0x54, 0x60, 0xd9, + 0xe0, 0xeb, 0xb3, 0xb2, 0x7b, 0xc0, 0x6c, 0xf5, 0xcd, 0xa7, 0x76, 0x24, 0x30, 0xc9, 0xf9, 0xf0, + 0xc6, 0xd7, 0x9c, 0x3e, 0x4a, 0xef, 0x54, 0xc0, 0x0c, 0xbb, 0xf0, 0xad, 0xd4, 0xb6, 0xb6, 0x6c, + 0xb8, 0x3b, 0x02, 0x0d, 0x51, 0x9f, 0x00, 0xf2, 0x26, 0x2e, 0x8d, 0xb9, 0xf3, 0xc3, 0xbe, 0x9d, + 0x27, 0xa9, 0x4f, 0xa7, 0x19, 0x13, 0x84, 0x5d, 0x0c, 0x05, 0xdb, 0xa7, 0x79, 0x8c, 0x61, 0x17, + 0x07, 0x56, 0x9e, 0x3e, 0x62, 0x5f, 0x51, 0xc0, 0x71, 0x46, 0xc0, 0x39, 0xe4, 0x7a, 0x56, 0xd3, + 0x6c, 0x53, 0xe4, 0x5e, 0x9c, 0x19, 0x05, 0x74, 0x2b, 0x60, 0x76, 0x8f, 0x2f, 0x96, 0x41, 0x78, + 0xb6, 0x2f, 0x84, 0x02, 0x01, 0xba, 0xf8, 0x63, 0x82, 0xf0, 0x75, 0x02, 0x57, 0x85, 0x32, 0xc7, + 0x18, 0xbe, 0x4e, 0x9a, 0x88, 0xf4, 0x21, 0x7e, 0x79, 0x8e, 0x86, 0xb2, 0x09, 0xbb, 0xcf, 0xbf, + 0x94, 0xc6, 0x76, 0x03, 0x4c, 0x13, 0x2c, 0xe9, 0x8f, 0x6c, 0x19, 0x22, 0x46, 0x88, 0x83, 0x7e, + 0x87, 0xdd, 0x31, 0x15, 0xfc, 0xab, 0xf3, 0xe5, 0xc0, 0xf3, 0x00, 0x84, 0x9f, 0xf8, 0x4e, 0x3a, + 0x13, 0xd5, 0x49, 0x67, 0xe5, 0x3a, 0xe9, 0xb7, 0x4a, 0x87, 0x39, 0xe9, 0x4f, 0xf6, 0xc1, 0xc5, + 0x43, 0x2e, 0xc0, 0xc5, 0xe0, 0xda, 0xd3, 0x97, 0x8b, 0xd7, 0xe6, 0x7a, 0x6f, 0xf6, 0xfe, 0xd8, + 0x48, 0xe6, 0x53, 0x7c, 0x7f, 0xa0, 0xf4, 0xf4, 0x07, 0x07, 0xb0, 0xa4, 0x6f, 0x02, 0x47, 0x69, + 0x15, 0xe5, 0x80, 0x2c, 0x1a, 0xd9, 0xbd, 0x37, 0x19, 0x3e, 0x34, 0x84, 0x10, 0x0c, 0xba, 0x76, + 0x3c, 0xae, 0x93, 0x4b, 0x66, 0xec, 0x26, 0x15, 0x90, 0xc3, 0xbb, 0xad, 0xfc, 0x9b, 0x39, 0x6a, + 0xed, 0x6e, 0x90, 0x6b, 0xc0, 0xe0, 0x17, 0x73, 0xa3, 0x18, 0x11, 0xee, 0x05, 0x39, 0xe2, 0xd4, + 0xae, 0x44, 0x2e, 0x69, 0x84, 0x55, 0x86, 0x77, 0xb4, 0xa1, 0xcb, 0xde, 0xca, 0x11, 0x9d, 0xfc, + 0xa9, 0xde, 0x0c, 0x8e, 0x5e, 0x30, 0x9b, 0x17, 0xb7, 0x5c, 0x67, 0x97, 0x5c, 0x98, 0xe4, 0xb0, + 0x9b, 0x97, 0xc8, 0x0d, 0x76, 0xe2, 0x07, 0xf5, 0x36, 0xdf, 0x74, 0xc8, 0x0f, 0x32, 0x1d, 0x56, + 0x8e, 0x30, 0xe3, 0x41, 0x7d, 0x62, 0xd0, 0xe9, 0x14, 0x62, 0x3b, 0x9d, 0x95, 0x23, 0x7e, 0xb7, + 0xa3, 0x2e, 0x82, 0xc9, 0x96, 0xb5, 0x47, 0xb6, 0xaa, 0xc9, 0xac, 0x6b, 0xd0, 0xa1, 0xe3, 0x45, + 0x6b, 0x8f, 0x6e, 0x6c, 0xaf, 0x1c, 0xd1, 0x83, 0x3f, 0xd5, 0x65, 0x30, 0x45, 0xb6, 0x05, 0x48, + 0x31, 0x93, 0x89, 0x0e, 0x14, 0xaf, 0x1c, 0xd1, 0xc3, 0x7f, 0xb1, 0xf5, 0x91, 0x23, 0xa7, 0x3d, + 0xee, 0xf1, 0xb7, 0xdb, 0x33, 0x89, 0xb6, 0xdb, 0x31, 0x2f, 0xe8, 0x86, 0xfb, 0x49, 0x90, 0x6f, + 0x12, 0x0e, 0x67, 0x19, 0x87, 0xe9, 0xab, 0x7a, 0x17, 0xc8, 0xed, 0x98, 0xae, 0x3f, 0x79, 0xbe, + 0x71, 0x70, 0xb9, 0x6b, 0xa6, 0x7b, 0x11, 0x23, 0x88, 0xff, 0x5a, 0x98, 0x00, 0x79, 0xc2, 0xb8, + 0xe0, 0x01, 0xbe, 0x23, 0x47, 0xcd, 0x90, 0xb2, 0x63, 0xe3, 0x61, 0xdf, 0x70, 0xfc, 0x23, 0x31, + 0x7f, 0x98, 0x19, 0x8d, 0x05, 0xd9, 0xf7, 0x2a, 0x6c, 0x25, 0xf2, 0x2a, 0xec, 0x9e, 0x3b, 0x59, + 0x73, 0xbd, 0x77, 0xb2, 0x86, 0xcb, 0x07, 0xf9, 0xc1, 0x8e, 0x2a, 0x9f, 0x1d, 0xc2, 0x74, 0xe9, + 0x65, 0x44, 0xf4, 0x0c, 0xbc, 0x6d, 0xd9, 0x5c, 0x9b, 0xfd, 0xd7, 0x84, 0x9d, 0x52, 0x52, 0xa3, + 0x66, 0x00, 0x79, 0xe9, 0xf7, 0x4d, 0xbf, 0x91, 0x03, 0xa7, 0xe8, 0xcd, 0xbf, 0x7b, 0xc8, 0x70, + 0xc4, 0x2b, 0x0a, 0xe1, 0xa7, 0x46, 0x22, 0x34, 0x7d, 0x06, 0x1c, 0xa5, 0xef, 0x80, 0xb3, 0xef, + 0x58, 0x72, 0x6e, 0xc0, 0xb1, 0xe4, 0x7c, 0xb2, 0x95, 0xc3, 0xdf, 0xe7, 0xe5, 0x67, 0x5d, 0x94, + 0x9f, 0x3b, 0x23, 0x00, 0xea, 0xc7, 0x97, 0x91, 0xd8, 0x37, 0xef, 0x0e, 0x24, 0xa5, 0x2e, 0x48, + 0xca, 0x3d, 0xc3, 0x13, 0x92, 0xbe, 0xb4, 0xfc, 0x5e, 0x0e, 0x5c, 0x15, 0x12, 0x53, 0x45, 0x97, + 0x98, 0xa0, 0x7c, 0x61, 0x24, 0x82, 0x92, 0x3c, 0xea, 0x41, 0xda, 0x12, 0xf3, 0xa7, 0xd2, 0xa7, + 0x85, 0x7a, 0x81, 0x0a, 0x78, 0x13, 0x21, 0x2c, 0x27, 0x41, 0x81, 0xf6, 0x30, 0x0c, 0x1a, 0xf6, + 0x96, 0xb0, 0xbb, 0x91, 0x3b, 0x63, 0x24, 0x4b, 0xdb, 0x18, 0xe4, 0x87, 0xad, 0x6b, 0x18, 0xbb, + 0xae, 0x5d, 0xb1, 0x3d, 0x07, 0xfe, 0xcc, 0x48, 0x04, 0x27, 0xf0, 0x86, 0x53, 0x86, 0xf1, 0x86, + 0x1b, 0x6a, 0x95, 0xc3, 0x6f, 0xc1, 0xa1, 0xac, 0x72, 0x44, 0x54, 0x9e, 0x3e, 0x7e, 0xef, 0x52, + 0xc0, 0x49, 0x36, 0xd9, 0x5a, 0x10, 0x2d, 0x44, 0x78, 0xff, 0x28, 0x80, 0x3c, 0xee, 0x9b, 0x49, + 0xec, 0x96, 0x2a, 0xf2, 0x22, 0x9e, 0x8d, 0x8a, 0xbd, 0x0f, 0x41, 0x98, 0x0e, 0xf6, 0x50, 0x38, + 0x12, 0xa4, 0xe4, 0xae, 0x41, 0x48, 0x40, 0x46, 0xfa, 0x98, 0xbd, 0x54, 0x01, 0x05, 0x76, 0xe3, + 0xfb, 0x46, 0x2a, 0x0e, 0x13, 0x62, 0x54, 0x64, 0x89, 0x1d, 0xb9, 0xc4, 0xf7, 0xa2, 0xa7, 0xb7, + 0x17, 0x77, 0x48, 0x17, 0x9f, 0x7f, 0x27, 0x0b, 0xa6, 0xeb, 0xc8, 0x2b, 0x9b, 0xae, 0x6b, 0x99, + 0x5b, 0xa3, 0xf2, 0xf8, 0x96, 0xf5, 0x1e, 0x86, 0xdf, 0xcd, 0xc8, 0x9e, 0xbc, 0x09, 0x16, 0xc2, + 0x7d, 0x52, 0x23, 0xa2, 0x00, 0xca, 0xdd, 0x38, 0x3f, 0xa8, 0xb4, 0x31, 0x78, 0x6c, 0x67, 0xc1, + 0x84, 0x7f, 0xfa, 0xee, 0x56, 0xe1, 0x44, 0xe6, 0xb6, 0xb7, 0xe3, 0x1f, 0x98, 0x21, 0xcf, 0xfb, + 0x4f, 0x7d, 0xc1, 0xd7, 0x24, 0x74, 0x94, 0x8f, 0x3f, 0x3a, 0x98, 0x4c, 0xc7, 0x92, 0xb8, 0xc3, + 0x1f, 0xd6, 0x61, 0xc1, 0xdf, 0x99, 0x60, 0xcb, 0x91, 0xab, 0xa6, 0x87, 0x2e, 0xc3, 0xbf, 0x54, + 0xc0, 0x44, 0x1d, 0x79, 0x78, 0xbc, 0xc5, 0xe4, 0x1f, 0x58, 0xc2, 0x55, 0x6e, 0xc5, 0x63, 0x8a, + 0xad, 0x61, 0x3c, 0x13, 0x4c, 0x75, 0x5c, 0xa7, 0x89, 0xba, 0x5d, 0xb6, 0x7a, 0xc1, 0x3b, 0xaa, + 0xf5, 0x1b, 0xfd, 0x09, 0x69, 0xf3, 0xeb, 0xfe, 0x3f, 0x7a, 0xf8, 0x7b, 0x52, 0x33, 0x80, 0x96, + 0xc4, 0x1a, 0x38, 0x6e, 0x33, 0x20, 0xae, 0xf2, 0xf4, 0x81, 0xfe, 0x9c, 0x02, 0x66, 0xea, 0xc8, + 0x0b, 0xb8, 0x98, 0x60, 0x93, 0x23, 0x1a, 0x5e, 0x01, 0x4a, 0xe5, 0x60, 0x50, 0xca, 0x5f, 0xa5, + 0x27, 0x72, 0x33, 0x28, 0x6c, 0x8c, 0x57, 0xe9, 0xc9, 0x51, 0x90, 0x3e, 0xa8, 0xbf, 0xf5, 0x58, + 0x30, 0x45, 0x68, 0x21, 0x0a, 0xfb, 0xf3, 0xb9, 0x50, 0x79, 0x1f, 0x4e, 0x49, 0x79, 0xef, 0x06, + 0x79, 0x72, 0xbf, 0x3f, 0x51, 0xdc, 0x69, 0x19, 0xb3, 0x7d, 0x0d, 0x67, 0xd7, 0xe9, 0x5f, 0xfd, + 0xfd, 0x34, 0xf3, 0xc9, 0xfc, 0x34, 0xdf, 0x9c, 0x4d, 0x34, 0x12, 0xd2, 0xb9, 0xc3, 0x08, 0x55, + 0x3e, 0xc1, 0xb8, 0x19, 0x53, 0x77, 0xfa, 0xc2, 0xf1, 0x62, 0x05, 0x4c, 0xe2, 0x71, 0x9b, 0xd8, + 0xe3, 0xe7, 0x0f, 0x2e, 0x0e, 0xfd, 0x0d, 0xfd, 0x84, 0x3d, 0xb0, 0xcf, 0x91, 0xd1, 0x99, 0xf7, + 0x09, 0x7a, 0xe0, 0xb8, 0xca, 0xd3, 0xc7, 0xe3, 0x3d, 0x14, 0x0f, 0xa2, 0x0f, 0xf0, 0x2d, 0x0a, + 0x50, 0x96, 0x91, 0x37, 0x6e, 0x2b, 0xf2, 0x9d, 0xd2, 0x41, 0x8d, 0x04, 0x86, 0x11, 0x9a, 0xe7, + 0x97, 0xd1, 0x68, 0x14, 0x48, 0x2e, 0x9a, 0x91, 0x14, 0x01, 0xe9, 0xa3, 0xf6, 0x01, 0x8a, 0x1a, + 0xdd, 0x5c, 0xf8, 0xa9, 0x11, 0xf4, 0xaa, 0xe3, 0x5d, 0xf8, 0xf0, 0x19, 0x48, 0xca, 0x38, 0x2c, + 0x7d, 0xeb, 0x57, 0xf9, 0x58, 0xae, 0xae, 0x03, 0x58, 0xd9, 0xb7, 0x51, 0xf3, 0x22, 0x6a, 0xc1, + 0x1f, 0x3f, 0x38, 0x74, 0xa7, 0xc0, 0x44, 0x93, 0x96, 0x46, 0xc0, 0x9b, 0xd4, 0xfd, 0xd7, 0x04, + 0xf7, 0x30, 0x8b, 0x1d, 0x11, 0xfd, 0x7d, 0x8c, 0xf7, 0x30, 0x4b, 0x54, 0x3f, 0x06, 0xb3, 0x85, + 0xce, 0x32, 0x2a, 0x4d, 0xc7, 0x86, 0xff, 0xf1, 0xe0, 0xb0, 0x5c, 0x0b, 0xa6, 0xac, 0xa6, 0x63, + 0x57, 0x76, 0xfc, 0x30, 0x80, 0x53, 0x7a, 0x98, 0xe0, 0x7f, 0xd5, 0x76, 0x9c, 0x07, 0x2c, 0xff, + 0x3e, 0xf4, 0x20, 0x61, 0x58, 0x63, 0x02, 0x93, 0x7e, 0x58, 0xc6, 0x44, 0x9f, 0xba, 0xd3, 0x87, + 0xec, 0xa1, 0xd0, 0xbb, 0x8d, 0x76, 0x85, 0x8f, 0x88, 0x55, 0xe0, 0x61, 0x86, 0x33, 0xbe, 0x15, + 0x87, 0x32, 0x9c, 0xc5, 0x10, 0x30, 0x86, 0x9b, 0x48, 0x42, 0x1c, 0x53, 0x5f, 0x03, 0x3e, 0x00, + 0x3a, 0xa3, 0x33, 0x0f, 0x87, 0x44, 0xe7, 0x70, 0x4c, 0xc4, 0x0f, 0xb3, 0xa0, 0x98, 0xcc, 0xe2, + 0x81, 0xff, 0x69, 0x14, 0xe0, 0xdc, 0x39, 0x8c, 0xbf, 0x02, 0xf5, 0x56, 0x48, 0x70, 0x83, 0xf4, + 0x3e, 0x0e, 0xe2, 0x52, 0xc6, 0x78, 0xb7, 0xba, 0x4c, 0xfd, 0xe9, 0x03, 0xf8, 0x73, 0x0a, 0x98, + 0x23, 0x3e, 0x02, 0x6d, 0x64, 0xba, 0xb4, 0xa3, 0x1c, 0x89, 0xa3, 0xfc, 0x7b, 0xa4, 0x43, 0x01, + 0x89, 0x7c, 0x08, 0xe9, 0x18, 0x09, 0x14, 0x72, 0x71, 0x80, 0x24, 0x49, 0x18, 0xcb, 0x36, 0x4a, + 0x31, 0x20, 0x81, 0x89, 0xf8, 0x68, 0xf0, 0x48, 0xe8, 0x91, 0x2b, 0x32, 0xc3, 0x57, 0xb6, 0x31, + 0x7b, 0xe4, 0xca, 0x10, 0x31, 0x86, 0xcb, 0x25, 0x9f, 0xc0, 0x16, 0x9c, 0x0d, 0x72, 0xc1, 0xfa, + 0xeb, 0x72, 0xc1, 0x89, 0xb6, 0xcf, 0x8d, 0xc4, 0x03, 0xf3, 0x00, 0x21, 0xf0, 0x55, 0x90, 0x73, + 0x9d, 0x4b, 0x74, 0x69, 0x6b, 0x56, 0x27, 0xcf, 0xc4, 0xe4, 0x77, 0xda, 0xbb, 0x3b, 0x36, 0x3d, + 0x19, 0x3a, 0xab, 0xfb, 0xaf, 0xea, 0x0d, 0x60, 0xf6, 0x92, 0xe5, 0x6d, 0xaf, 0x20, 0xb3, 0x85, + 0x5c, 0xdd, 0xb9, 0x44, 0x3c, 0xe6, 0x26, 0x75, 0x31, 0x51, 0xf4, 0x5f, 0x91, 0xb0, 0x2f, 0xc9, + 0xad, 0xeb, 0x63, 0x39, 0xfe, 0x96, 0xc4, 0xf2, 0x8c, 0xa6, 0x2a, 0x7d, 0x81, 0xf9, 0xa0, 0x02, + 0xa6, 0x74, 0xe7, 0x12, 0x13, 0x92, 0xff, 0xfb, 0x70, 0x65, 0x24, 0xf1, 0x44, 0x8f, 0xde, 0xa2, + 0xef, 0x93, 0x3f, 0xf6, 0x89, 0x5e, 0x6c, 0xf5, 0x63, 0x39, 0xb9, 0x34, 0xa3, 0x3b, 0x97, 0xea, + 0xc8, 0xa3, 0x1a, 0x01, 0x1b, 0x23, 0x72, 0xb2, 0xb6, 0xba, 0xb4, 0x40, 0x36, 0x0f, 0x0f, 0xde, + 0x93, 0xee, 0x22, 0x04, 0x0c, 0x0a, 0x48, 0x1c, 0xf7, 0x2e, 0xc2, 0x40, 0x0a, 0xc6, 0x10, 0x23, + 0x45, 0x01, 0xd3, 0xba, 0x73, 0x09, 0x0f, 0x0d, 0x4b, 0x56, 0xbb, 0x3d, 0x9a, 0x11, 0x32, 0xa9, + 0xf1, 0xef, 0xb3, 0xc1, 0xa7, 0x62, 0xec, 0xc6, 0xff, 0x00, 0x02, 0xd2, 0x87, 0xe1, 0x85, 0x54, + 0x59, 0xfc, 0x11, 0xda, 0x1e, 0x0d, 0x0e, 0xc3, 0x2a, 0x44, 0x40, 0xc6, 0xa1, 0x29, 0x44, 0x14, + 0x05, 0x63, 0xd9, 0x39, 0x99, 0x2b, 0x93, 0x61, 0x7e, 0xb4, 0x3a, 0xf1, 0xbe, 0x64, 0xae, 0x89, + 0x6c, 0xd8, 0x15, 0x08, 0x19, 0x09, 0x1a, 0x09, 0x5c, 0x10, 0x25, 0x68, 0x48, 0x1f, 0x8f, 0x8f, + 0x28, 0x60, 0x86, 0x92, 0xf0, 0x08, 0xb1, 0x02, 0x86, 0x52, 0x2a, 0xbe, 0x05, 0x87, 0xa3, 0x54, + 0x31, 0x14, 0x8c, 0xe5, 0x3e, 0x4f, 0x6c, 0xc7, 0x0d, 0x71, 0x7c, 0x3c, 0x0a, 0xc1, 0xa1, 0x8d, + 0xb1, 0x11, 0x1e, 0x21, 0x1f, 0xc6, 0x18, 0x3b, 0xa4, 0x63, 0xe4, 0x2f, 0x0c, 0xb4, 0x68, 0x94, + 0x18, 0x1c, 0x40, 0x15, 0x46, 0x08, 0xc3, 0x90, 0xaa, 0x70, 0x48, 0x48, 0x7c, 0x55, 0x01, 0x80, + 0x12, 0xb0, 0xe6, 0xec, 0x91, 0xeb, 0x7b, 0x46, 0xd0, 0x9d, 0xf5, 0xba, 0xd5, 0x2b, 0x03, 0xdc, + 0xea, 0x13, 0x86, 0x70, 0x49, 0xba, 0x12, 0xc8, 0x71, 0x19, 0x37, 0x72, 0xec, 0x2b, 0x81, 0xf1, + 0xf5, 0xa7, 0x8f, 0xf1, 0x97, 0xa9, 0x35, 0x17, 0x1e, 0x30, 0xfd, 0xe5, 0x91, 0xa0, 0xcc, 0xcd, + 0xfe, 0x15, 0x71, 0xf6, 0x7f, 0x00, 0x6c, 0x87, 0xb5, 0x11, 0x07, 0x1d, 0x1c, 0x4d, 0xdf, 0x46, + 0x3c, 0xbc, 0x03, 0xa2, 0x3f, 0x95, 0x03, 0x47, 0x59, 0x27, 0xf2, 0xc3, 0x00, 0x71, 0xc2, 0x73, + 0x78, 0x42, 0x27, 0x39, 0x00, 0xe5, 0x51, 0x2d, 0x48, 0x25, 0x59, 0xca, 0x94, 0x20, 0x6f, 0x2c, + 0xab, 0x1b, 0x05, 0xed, 0x72, 0xc7, 0xb4, 0x5b, 0xf2, 0xe1, 0x7e, 0x07, 0x00, 0xef, 0xaf, 0x35, + 0x2a, 0xe2, 0x5a, 0x63, 0x9f, 0x95, 0xc9, 0xc4, 0x3b, 0xd7, 0x84, 0x65, 0x94, 0xdc, 0xb1, 0xef, + 0x5c, 0x47, 0xd7, 0x9d, 0x3e, 0x4a, 0xef, 0x53, 0x40, 0xae, 0xee, 0xb8, 0x1e, 0x7c, 0x30, 0x89, + 0x76, 0x52, 0xce, 0x87, 0x20, 0xf9, 0xef, 0x6a, 0x59, 0xb8, 0x5f, 0xf9, 0xd6, 0xf8, 0xa3, 0xce, + 0xa6, 0x67, 0x12, 0xaf, 0x6e, 0x5c, 0x3f, 0x77, 0xd1, 0x72, 0xd2, 0x78, 0x3a, 0x94, 0x7f, 0xf5, + 0xe8, 0x03, 0x18, 0xa9, 0xc5, 0xd3, 0x89, 0xac, 0x39, 0x7d, 0xdc, 0xfe, 0xdb, 0x1c, 0xf3, 0x6d, + 0x5d, 0xb2, 0xda, 0x08, 0x3e, 0x48, 0x5d, 0x46, 0xaa, 0xe6, 0x0e, 0x92, 0x3f, 0x12, 0x13, 0xeb, + 0xda, 0x4a, 0xe2, 0xcb, 0x2a, 0x61, 0x7c, 0xd9, 0xa4, 0x0a, 0x45, 0x0f, 0xa0, 0x53, 0x92, 0xc6, + 0xad, 0x50, 0x31, 0x75, 0x8f, 0x25, 0x4e, 0xe7, 0xb1, 0x3a, 0xf2, 0xa8, 0x51, 0x59, 0xf3, 0xef, + 0x6a, 0xf9, 0x89, 0x91, 0x44, 0xec, 0x0c, 0xae, 0x82, 0x51, 0x7a, 0xae, 0x82, 0xf9, 0x20, 0x0f, + 0xce, 0x9a, 0x08, 0xce, 0x53, 0xa3, 0x19, 0x24, 0x12, 0x39, 0x12, 0x98, 0xde, 0x19, 0xc0, 0xb4, + 0x2e, 0xc0, 0x74, 0xd7, 0x90, 0x54, 0xa4, 0x0f, 0xd8, 0xc3, 0xd8, 0x54, 0x21, 0x93, 0xfe, 0x92, + 0xdd, 0x62, 0x11, 0x56, 0xff, 0xf1, 0xb0, 0x37, 0xdb, 0xf6, 0x87, 0x60, 0x15, 0x62, 0x39, 0xe7, + 0x7b, 0xef, 0xb5, 0x5f, 0xa0, 0xe1, 0x5c, 0x71, 0x27, 0x4a, 0x76, 0xda, 0xe4, 0xef, 0xb6, 0x0f, + 0xfe, 0x83, 0x7f, 0x96, 0x6c, 0xfd, 0x8d, 0x14, 0xd1, 0xc3, 0xb8, 0x94, 0x6d, 0xa0, 0x04, 0x2b, + 0x73, 0x12, 0xd4, 0xfd, 0xfb, 0x70, 0x0b, 0x0b, 0x23, 0x81, 0x0c, 0xe9, 0x16, 0x46, 0x0a, 0x38, + 0x4c, 0xb7, 0xb0, 0x41, 0x04, 0x8c, 0xe1, 0x3e, 0xfa, 0x3c, 0xdb, 0x95, 0x27, 0x3e, 0x93, 0xf0, + 0xaf, 0xb3, 0xa9, 0x8f, 0xb6, 0xdf, 0xcb, 0x24, 0xf2, 0x63, 0x26, 0x74, 0xc5, 0x0f, 0xb7, 0x49, + 0x3c, 0x93, 0xe3, 0x8a, 0x1b, 0xc3, 0xfa, 0x4f, 0x96, 0xf8, 0x94, 0x9f, 0xb7, 0x5a, 0xde, 0xf6, + 0x88, 0x4e, 0x66, 0x5c, 0xc2, 0x65, 0xf9, 0x17, 0x1b, 0x93, 0x17, 0xf8, 0x2f, 0x99, 0x44, 0xa1, + 0xa0, 0x02, 0x96, 0x10, 0xb2, 0x22, 0x58, 0x9c, 0x20, 0x80, 0x53, 0x6c, 0x79, 0x63, 0x94, 0xe8, + 0x73, 0x56, 0x0b, 0x39, 0x8f, 0x40, 0x89, 0x26, 0x74, 0x8d, 0x4e, 0xa2, 0xe3, 0x8a, 0xfb, 0x77, + 0x2a, 0xd1, 0x01, 0x4b, 0x46, 0x24, 0xd1, 0xb1, 0xe5, 0xa5, 0xcf, 0xe3, 0xd7, 0xcc, 0xb0, 0x09, + 0xd1, 0xaa, 0x65, 0x5f, 0x84, 0xff, 0x54, 0xf0, 0xaf, 0x54, 0x3e, 0x6f, 0x79, 0xdb, 0x2c, 0xa6, + 0xcb, 0xef, 0x49, 0xdf, 0x71, 0x32, 0x44, 0xdc, 0x16, 0x31, 0x2c, 0x54, 0x7e, 0x5f, 0x58, 0xa8, + 0x12, 0x98, 0xb5, 0x6c, 0x0f, 0xb9, 0xb6, 0xd9, 0x5e, 0x6a, 0x9b, 0x5b, 0xdd, 0x53, 0x13, 0x7d, + 0x2f, 0xa1, 0xab, 0x70, 0x79, 0x74, 0xf1, 0x0f, 0xfe, 0xe2, 0xc9, 0x49, 0xf1, 0x02, 0xfd, 0x88, + 0x28, 0x56, 0x53, 0xd1, 0x51, 0xac, 0x82, 0x28, 0x55, 0x60, 0x70, 0x90, 0x6b, 0x59, 0x1b, 0x37, + 0x61, 0xd8, 0xbe, 0x5b, 0x25, 0xa3, 0xa9, 0x05, 0x21, 0x1c, 0x7f, 0x55, 0x49, 0xb4, 0x4a, 0x87, + 0x05, 0x61, 0xbe, 0x57, 0x08, 0x12, 0x5b, 0xa8, 0x7c, 0xe3, 0x95, 0x9e, 0xc6, 0x07, 0x26, 0x4f, + 0x4e, 0xc2, 0xe4, 0xe1, 0x85, 0x2a, 0x2f, 0x27, 0x54, 0x49, 0x16, 0xfd, 0x64, 0x5a, 0x3b, 0x86, + 0x53, 0x45, 0x79, 0x70, 0xcc, 0x8f, 0x5a, 0xdb, 0xe9, 0x20, 0xd3, 0x35, 0xed, 0x26, 0x82, 0x0f, + 0x65, 0x47, 0x61, 0xf6, 0x2e, 0x81, 0x49, 0xab, 0xe9, 0xd8, 0x75, 0xeb, 0x39, 0xfe, 0x25, 0x71, + 0xf1, 0xc1, 0xd2, 0x09, 0x47, 0x2a, 0xec, 0x0f, 0x3d, 0xf8, 0x57, 0xad, 0x80, 0xa9, 0xa6, 0xe9, + 0xb6, 0x68, 0x30, 0xbd, 0x7c, 0xcf, 0x85, 0x4c, 0x91, 0x05, 0x95, 0xfd, 0x5f, 0xf4, 0xf0, 0x6f, + 0xb5, 0x26, 0x32, 0xb1, 0xd0, 0x13, 0x95, 0x23, 0xb2, 0xb0, 0xc5, 0xf0, 0x27, 0x81, 0xe7, 0x98, + 0x3b, 0x2e, 0x6a, 0x93, 0xdb, 0xe3, 0x69, 0x0f, 0x31, 0xa5, 0x87, 0x09, 0x49, 0xa7, 0xf9, 0xa4, + 0xaa, 0x7d, 0x68, 0x8c, 0x7b, 0x9a, 0x2f, 0x45, 0x45, 0xfa, 0x92, 0xf9, 0xee, 0x02, 0x98, 0xa5, + 0xbd, 0x1a, 0x63, 0x27, 0xfc, 0x39, 0x72, 0xf9, 0xb3, 0x77, 0x1f, 0xba, 0x02, 0xeb, 0x07, 0x1f, + 0x93, 0x8b, 0x40, 0xb9, 0x18, 0x04, 0x0e, 0xc4, 0x8f, 0x49, 0xf7, 0xdf, 0x7d, 0xba, 0xe6, 0x29, + 0x4d, 0xe3, 0xde, 0x7f, 0x8f, 0xaf, 0x3e, 0x7d, 0x7c, 0x7e, 0x51, 0x01, 0x4a, 0xa9, 0xd5, 0x82, + 0xcd, 0x83, 0x43, 0x71, 0x06, 0x4c, 0xfb, 0x3a, 0x13, 0xc6, 0x72, 0xe4, 0x93, 0x92, 0x2e, 0x66, + 0x06, 0xbc, 0x29, 0xb5, 0xc6, 0xbe, 0x3b, 0x10, 0x53, 0x77, 0xfa, 0xa0, 0xfc, 0xf2, 0x04, 0x53, + 0x9a, 0x05, 0xc7, 0xb9, 0x48, 0x8e, 0xbc, 0x3c, 0xa8, 0x80, 0xfc, 0x12, 0xf2, 0x9a, 0xdb, 0x23, + 0xd2, 0x99, 0x5d, 0xb7, 0xed, 0xeb, 0xcc, 0xbe, 0x9b, 0xec, 0x07, 0xdb, 0xb0, 0x3e, 0x59, 0xf3, + 0x84, 0xa4, 0x71, 0x47, 0x69, 0x8e, 0xad, 0x3d, 0x7d, 0x70, 0xfe, 0x45, 0x01, 0x73, 0xc1, 0x0a, + 0x17, 0xc5, 0xe4, 0x17, 0x1e, 0x71, 0xeb, 0x96, 0xf0, 0x0b, 0xc9, 0x42, 0x9d, 0x05, 0x3c, 0x15, + 0x5b, 0x96, 0xf2, 0xc2, 0x62, 0x82, 0x20, 0x68, 0x72, 0x04, 0x8e, 0x61, 0x06, 0xaf, 0x80, 0x49, + 0x42, 0xd0, 0xa2, 0xb5, 0x47, 0x5c, 0x00, 0x85, 0x85, 0xc6, 0x9f, 0x1e, 0xc9, 0x42, 0xe3, 0x5d, + 0xe2, 0x42, 0xa3, 0x64, 0xe4, 0x62, 0x7f, 0x9d, 0x31, 0xa1, 0x4f, 0x0c, 0xfe, 0x7f, 0xe4, 0xcb, + 0x8c, 0x09, 0x7c, 0x62, 0x06, 0xd4, 0x9f, 0x3e, 0xa2, 0x9f, 0x6a, 0xb0, 0xce, 0xd6, 0xdf, 0x18, + 0x85, 0xff, 0xed, 0x18, 0xc8, 0x9d, 0xc3, 0x0f, 0xff, 0x33, 0xbc, 0xd9, 0xea, 0x95, 0x23, 0x08, + 0xb2, 0xf0, 0x0c, 0x90, 0xc3, 0xe5, 0xb3, 0x69, 0xcb, 0xcd, 0x72, 0xbb, 0xb4, 0x98, 0x10, 0x9d, + 0xfc, 0xa7, 0x9e, 0x04, 0x85, 0xae, 0xb3, 0xeb, 0x36, 0xb1, 0xf9, 0x8c, 0x25, 0x86, 0xbd, 0x25, + 0x0d, 0x2e, 0x2a, 0x14, 0x3d, 0x3f, 0x3a, 0xd7, 0x4f, 0xee, 0xa2, 0x23, 0x45, 0xb8, 0xe8, 0x28, + 0xc1, 0xfe, 0x81, 0x04, 0x6d, 0xe9, 0x4b, 0xc4, 0x5f, 0x93, 0x3b, 0xff, 0x5a, 0xa3, 0x82, 0x3d, + 0x82, 0x2d, 0x07, 0x15, 0x87, 0xa4, 0x8e, 0xdb, 0x22, 0x6b, 0x83, 0x78, 0xee, 0x63, 0x75, 0xdc, + 0x96, 0xa0, 0x61, 0x2c, 0xa7, 0xcd, 0x0b, 0xcc, 0xd9, 0xf4, 0xfe, 0x51, 0xa2, 0x9b, 0x13, 0x84, + 0xfe, 0x40, 0xe8, 0x8c, 0xd0, 0x09, 0x75, 0x68, 0x74, 0x0e, 0xc9, 0x0d, 0xf5, 0x8f, 0x14, 0x12, + 0xd1, 0xd2, 0x37, 0x72, 0xe4, 0x2f, 0x2c, 0x4a, 0x0c, 0x11, 0x1e, 0x83, 0x85, 0x78, 0xce, 0xb3, + 0xc3, 0x87, 0xf8, 0x16, 0x59, 0xc7, 0xd1, 0x3f, 0xee, 0x10, 0xdf, 0xb2, 0x84, 0xa4, 0x0f, 0xe4, + 0x9b, 0xe8, 0x05, 0x61, 0xa5, 0xa6, 0x67, 0xed, 0x8d, 0x58, 0xd3, 0xc4, 0xe1, 0x25, 0x61, 0x54, + 0xdf, 0x7d, 0x1c, 0xa2, 0x14, 0x8e, 0x3b, 0xaa, 0xaf, 0x1c, 0x19, 0x63, 0x38, 0x8e, 0x0e, 0x30, + 0xf7, 0xd8, 0xda, 0xcc, 0x5b, 0xd8, 0x6a, 0x00, 0x3a, 0x38, 0x5a, 0x67, 0xc1, 0x0c, 0x37, 0xf5, + 0xf7, 0x2f, 0x9e, 0x11, 0xd2, 0x92, 0x1e, 0x58, 0x0f, 0x58, 0x36, 0xf2, 0x85, 0x81, 0x04, 0x0b, + 0xbe, 0x32, 0x44, 0x8c, 0xe5, 0x5e, 0x37, 0x7f, 0x0c, 0x1b, 0x13, 0x56, 0xbf, 0xc7, 0x63, 0x55, + 0x13, 0xb1, 0xba, 0x43, 0x86, 0x4d, 0x72, 0x63, 0x9a, 0xd4, 0xbc, 0xf1, 0x5d, 0x01, 0x5c, 0xba, + 0x00, 0xd7, 0x33, 0x86, 0xa6, 0x23, 0x7d, 0xc4, 0xde, 0xaa, 0xd0, 0xcb, 0x9d, 0x4a, 0x7b, 0xa6, + 0xd5, 0x26, 0x51, 0x06, 0x46, 0x70, 0x39, 0xf1, 0x9f, 0xf3, 0xa0, 0x9c, 0x13, 0x41, 0xb9, 0x57, + 0x86, 0x19, 0x02, 0x45, 0x11, 0xd8, 0x3c, 0x99, 0x5f, 0x1c, 0xa7, 0x21, 0x86, 0xaf, 0xee, 0x0d, + 0xe7, 0xc7, 0xbe, 0xf3, 0xab, 0xe6, 0xbf, 0x1d, 0x80, 0x74, 0xbf, 0x00, 0x92, 0x76, 0x50, 0xba, + 0xd2, 0xc7, 0xea, 0x55, 0x74, 0xe8, 0xaa, 0xd3, 0xe9, 0xd5, 0x68, 0x86, 0x2e, 0x36, 0x73, 0x53, + 0x84, 0x99, 0x5b, 0xc2, 0x33, 0x0e, 0xa1, 0xeb, 0xae, 0x4f, 0xdc, 0x20, 0x75, 0xca, 0x8d, 0xf8, + 0x8c, 0xc3, 0x40, 0x0a, 0xd2, 0x07, 0xe7, 0x1f, 0x14, 0x00, 0x96, 0x5d, 0x67, 0xb7, 0x53, 0x73, + 0x5b, 0xc8, 0x85, 0x7f, 0x1b, 0x4e, 0xd6, 0x5e, 0x36, 0x82, 0xc9, 0xda, 0x3a, 0x00, 0x5b, 0x41, + 0xe1, 0xac, 0x37, 0x7a, 0x82, 0xdc, 0xd4, 0x2c, 0x24, 0x4a, 0xe7, 0xca, 0x10, 0xaf, 0xf9, 0x7d, + 0x96, 0x88, 0x71, 0xdc, 0xf8, 0x12, 0x16, 0x37, 0xca, 0xc9, 0xda, 0x7b, 0x02, 0xac, 0x0d, 0x01, + 0xeb, 0x7b, 0x0f, 0x40, 0x49, 0xfa, 0x98, 0xff, 0xe3, 0x04, 0x98, 0xa6, 0x5b, 0xab, 0x94, 0xa7, + 0x7f, 0x1f, 0x82, 0xfe, 0xcb, 0x23, 0x00, 0x7d, 0x03, 0xcc, 0x38, 0x61, 0xe9, 0x74, 0xfc, 0xe3, + 0x17, 0xcb, 0x62, 0x61, 0xe7, 0xe8, 0xd2, 0x85, 0x62, 0xe0, 0x47, 0x79, 0xe4, 0x75, 0x11, 0xf9, + 0xbb, 0x62, 0xf8, 0xcd, 0x95, 0x38, 0x4a, 0xe8, 0xdf, 0x1b, 0x40, 0xbf, 0x21, 0x40, 0x5f, 0x3a, + 0x08, 0x29, 0x63, 0xb8, 0xe2, 0x40, 0x01, 0x39, 0x72, 0x22, 0xf1, 0x37, 0x52, 0x5c, 0x8b, 0x39, + 0x05, 0x26, 0x88, 0xca, 0x06, 0x73, 0x44, 0xff, 0x15, 0x7f, 0x31, 0x37, 0x3d, 0xe4, 0x06, 0xde, + 0x25, 0xfe, 0x2b, 0xa6, 0xc1, 0xf7, 0x04, 0xef, 0x9e, 0x2a, 0xd0, 0x4d, 0xe3, 0x20, 0x61, 0xe8, + 0x09, 0x24, 0xcf, 0xf1, 0x91, 0x9d, 0x51, 0x1c, 0x66, 0x02, 0x39, 0x80, 0x90, 0xf4, 0x81, 0xff, + 0x62, 0x0e, 0x9c, 0xa2, 0x2b, 0x80, 0x4b, 0xae, 0xb3, 0xd3, 0x73, 0xa3, 0x98, 0x75, 0x70, 0x59, + 0xb8, 0x11, 0xcc, 0x79, 0x82, 0x0f, 0x3c, 0x93, 0x89, 0x9e, 0x54, 0xf8, 0x59, 0xde, 0xff, 0xe5, + 0xd9, 0x22, 0x92, 0x0b, 0x31, 0x0c, 0x8c, 0xa2, 0x3d, 0xf1, 0xa6, 0x8a, 0x24, 0xa1, 0xdc, 0x82, + 0xa2, 0x32, 0xd4, 0xfa, 0x72, 0x20, 0x53, 0x79, 0x19, 0x99, 0xfa, 0x50, 0x20, 0x53, 0x3f, 0x2e, + 0xc8, 0xd4, 0xf2, 0xc1, 0x59, 0x92, 0xbe, 0x6c, 0xbd, 0x2e, 0xd8, 0xc4, 0x0b, 0xb6, 0x58, 0x77, + 0x52, 0xd8, 0x58, 0xe5, 0x7d, 0xc7, 0x72, 0x82, 0xef, 0x98, 0x78, 0x07, 0x48, 0x82, 0x55, 0x0b, + 0x91, 0xea, 0x08, 0x59, 0x9a, 0x03, 0x59, 0xcb, 0xa7, 0x2e, 0x6b, 0xb5, 0x86, 0x5a, 0x97, 0x88, + 0xad, 0x68, 0x0c, 0xeb, 0x80, 0x73, 0xa0, 0xb0, 0x64, 0xb5, 0x3d, 0xe4, 0xc2, 0x2f, 0xb3, 0x55, + 0x89, 0xd7, 0xa5, 0x38, 0x00, 0x2c, 0x82, 0xc2, 0x26, 0xa9, 0x8d, 0x99, 0xcc, 0xb7, 0xc8, 0x69, + 0x0f, 0xa5, 0x50, 0x67, 0xff, 0x26, 0x8d, 0x88, 0xd8, 0x53, 0xcc, 0xc8, 0x96, 0x33, 0x12, 0x44, + 0x44, 0x1c, 0x4c, 0xc2, 0x58, 0x2e, 0x03, 0x2b, 0xe8, 0x68, 0x07, 0x8f, 0xf1, 0x17, 0xd3, 0x43, + 0xb8, 0x08, 0x14, 0xab, 0xd5, 0x25, 0x9d, 0xe3, 0x94, 0x8e, 0x1f, 0x93, 0xfa, 0x75, 0xf5, 0xb2, + 0x8a, 0x92, 0x3c, 0x6e, 0xbf, 0x2e, 0x29, 0x2a, 0xd2, 0xc7, 0xec, 0x7b, 0xc4, 0xa9, 0xb7, 0xd3, + 0x36, 0x9b, 0x08, 0x53, 0x9f, 0x1a, 0x6a, 0xb4, 0x27, 0xcb, 0xf9, 0x3d, 0x19, 0xa7, 0xa7, 0xf9, + 0x03, 0xe8, 0xe9, 0xb0, 0x4b, 0xc6, 0x01, 0xcf, 0x49, 0xc3, 0x0f, 0x6d, 0xc9, 0x38, 0x96, 0x8c, + 0x31, 0x5c, 0xf5, 0xea, 0x1f, 0x5e, 0x1e, 0xab, 0xb6, 0x0e, 0xbb, 0xa1, 0xc6, 0x98, 0x35, 0xb2, + 0x83, 0xca, 0xc3, 0x6c, 0xa8, 0x45, 0xd3, 0x30, 0x06, 0xb4, 0xe6, 0x18, 0x5a, 0x9f, 0x67, 0xc3, + 0x68, 0xca, 0x7b, 0xda, 0x5d, 0xc7, 0xf5, 0x92, 0xed, 0x69, 0x63, 0xea, 0x74, 0xf2, 0x5f, 0xd2, + 0x43, 0x72, 0xe2, 0x59, 0xf6, 0x51, 0x0d, 0x9f, 0x09, 0x0e, 0xc9, 0x0d, 0x22, 0x20, 0x7d, 0x78, + 0xdf, 0x7e, 0x48, 0x83, 0xe7, 0xb0, 0xea, 0xc8, 0x74, 0x60, 0x64, 0x43, 0xe7, 0x30, 0xea, 0x18, + 0x4d, 0x43, 0xfa, 0x78, 0x7d, 0x9b, 0x1b, 0x38, 0xdf, 0x3a, 0xc6, 0x81, 0xd3, 0xd7, 0xcc, 0xfc, + 0x90, 0x9a, 0x39, 0xec, 0x5e, 0x1d, 0xe3, 0xf5, 0xe8, 0x06, 0xcc, 0x61, 0xf6, 0xea, 0x62, 0x88, + 0x48, 0x1f, 0xf1, 0xb7, 0x29, 0x20, 0x5f, 0x1f, 0xff, 0x78, 0x39, 0xec, 0x5c, 0x84, 0xf0, 0xaa, + 0x3e, 0xb2, 0xe1, 0x72, 0x98, 0xb9, 0x48, 0x24, 0x09, 0x63, 0xb8, 0xec, 0xe0, 0x28, 0x98, 0x21, + 0x4b, 0x22, 0xfe, 0x96, 0xf8, 0xb7, 0xd9, 0xa8, 0xf9, 0xe6, 0x14, 0x75, 0xf5, 0x99, 0x60, 0xd2, + 0xdf, 0x37, 0x63, 0x23, 0xe7, 0xbc, 0x9c, 0x7e, 0x06, 0xfb, 0x6e, 0xc1, 0xff, 0x07, 0x72, 0x5c, + 0x19, 0xf9, 0xbe, 0xfa, 0xb0, 0x8e, 0x2b, 0x87, 0xba, 0xb7, 0xfe, 0x67, 0xe1, 0x88, 0xfa, 0x1f, + 0xd3, 0xc3, 0xbc, 0x77, 0xcf, 0x3d, 0xd7, 0x67, 0xcf, 0xfd, 0x21, 0x1e, 0xcb, 0xba, 0x88, 0xe5, + 0xdd, 0xb2, 0x2c, 0x1c, 0xe1, 0x58, 0xfb, 0xbe, 0x00, 0xce, 0x73, 0x02, 0x9c, 0x0b, 0x07, 0xa2, + 0x65, 0x0c, 0x87, 0x54, 0x73, 0xe1, 0x98, 0xfb, 0xf1, 0x14, 0xf5, 0xb8, 0xe7, 0x04, 0x4c, 0x6e, + 0xdf, 0x09, 0x18, 0x41, 0xd3, 0xf3, 0x07, 0xd4, 0xf4, 0x8f, 0xf3, 0xd2, 0x61, 0x88, 0xd2, 0xf1, + 0x0c, 0x79, 0x44, 0x46, 0x37, 0x32, 0xbf, 0x3f, 0x10, 0x8f, 0xf3, 0x82, 0x78, 0x94, 0x0f, 0x46, + 0x4c, 0xfa, 0xf2, 0xf1, 0xc7, 0xfe, 0x84, 0xf6, 0x90, 0xf5, 0x7d, 0xd8, 0xad, 0x62, 0x81, 0x89, + 0x23, 0x1b, 0xb9, 0x87, 0xd9, 0x2a, 0x1e, 0x44, 0xc9, 0x18, 0xe2, 0xdf, 0xcd, 0x82, 0x69, 0x42, + 0xd3, 0x79, 0xab, 0xb5, 0x85, 0x3c, 0xf8, 0xab, 0xd4, 0x9f, 0xd4, 0x8f, 0x36, 0x3a, 0xa2, 0x90, + 0x50, 0x51, 0x67, 0x93, 0x93, 0x7a, 0x74, 0x50, 0x22, 0xe7, 0x39, 0x02, 0xc7, 0x1d, 0xb5, 0x72, + 0x20, 0x05, 0xe9, 0x43, 0xf6, 0x51, 0xea, 0x6e, 0xb3, 0x6a, 0x5e, 0x71, 0x76, 0x3d, 0xf8, 0xfc, + 0x11, 0x74, 0xd0, 0x0b, 0xa0, 0xd0, 0x26, 0xa5, 0xb1, 0x23, 0x34, 0xf1, 0xd3, 0x1d, 0xc6, 0x02, + 0x5a, 0xbf, 0xce, 0xfe, 0x4c, 0x7a, 0x8e, 0x26, 0xe4, 0x23, 0x2d, 0x67, 0xdc, 0xe7, 0x68, 0x06, + 0xd4, 0x3f, 0x96, 0x7b, 0x8d, 0x26, 0x71, 0xed, 0xd6, 0x8e, 0xe5, 0x8d, 0x28, 0xda, 0x46, 0x1b, + 0x97, 0xe5, 0x47, 0xdb, 0x20, 0x2f, 0x49, 0x4f, 0xf7, 0x72, 0x5c, 0xc1, 0xbf, 0x8f, 0xfb, 0x74, + 0x6f, 0x7c, 0xf5, 0xe9, 0x63, 0xf2, 0x5f, 0xa8, 0x66, 0x9d, 0xa3, 0x8e, 0xd2, 0x29, 0xfa, 0x60, + 0x0f, 0xad, 0x2c, 0x94, 0xb4, 0xc3, 0x53, 0x96, 0xbe, 0xf5, 0xa7, 0x0f, 0xcc, 0xa7, 0x4f, 0x83, + 0xfc, 0x22, 0xba, 0xb0, 0xbb, 0x05, 0xef, 0x02, 0x93, 0x86, 0x8b, 0x50, 0xc5, 0xde, 0x74, 0x30, + 0x77, 0x3d, 0xfc, 0xec, 0x43, 0xc2, 0xde, 0x30, 0x1e, 0xdb, 0xc8, 0x6c, 0x85, 0x67, 0x05, 0xfd, + 0x57, 0xf8, 0xca, 0x2c, 0xc8, 0xd5, 0x3d, 0xd3, 0x83, 0x53, 0x01, 0xb6, 0xf0, 0xf9, 0x3c, 0x16, + 0x77, 0x89, 0x58, 0xdc, 0x28, 0xf0, 0x82, 0x50, 0x30, 0x8f, 0xff, 0x8f, 0x00, 0x00, 0x82, 0xc9, + 0x07, 0xba, 0x8e, 0x8d, 0x73, 0xf8, 0xc7, 0x55, 0xfd, 0x77, 0xf8, 0xda, 0x80, 0xdd, 0xf7, 0x08, + 0xec, 0x7e, 0x9c, 0x5c, 0x15, 0x63, 0x58, 0x69, 0xcb, 0x82, 0x29, 0xcc, 0xda, 0x15, 0x64, 0xb6, + 0xba, 0xf0, 0x31, 0xa1, 0xf0, 0x47, 0xb0, 0x19, 0x7e, 0x58, 0x3a, 0x00, 0x2a, 0x6d, 0x55, 0x50, + 0x78, 0xb4, 0x47, 0x87, 0xbf, 0xf9, 0x9f, 0x15, 0x03, 0xc7, 0xdc, 0x0a, 0x72, 0x96, 0xbd, 0xe9, + 0x30, 0xff, 0xc2, 0x47, 0x45, 0x94, 0x8d, 0x65, 0x42, 0x27, 0x19, 0x25, 0xa3, 0xa3, 0xc6, 0x93, + 0x35, 0x96, 0x8b, 0x06, 0x73, 0xb8, 0x76, 0xf8, 0x7f, 0x0d, 0x64, 0xb6, 0xaa, 0x82, 0x5c, 0xc7, + 0xf4, 0xb6, 0x59, 0xd5, 0xe4, 0x19, 0xdb, 0xc8, 0xbb, 0xb6, 0x69, 0x3b, 0xf6, 0x95, 0x1d, 0xeb, + 0x39, 0xc1, 0x7d, 0xc6, 0x42, 0x1a, 0xa6, 0x7c, 0x0b, 0xd9, 0xc8, 0x35, 0x3d, 0x54, 0xdf, 0xdb, + 0x22, 0x73, 0xac, 0x49, 0x9d, 0x4f, 0x4a, 0x2c, 0xff, 0x98, 0xe2, 0x68, 0xf9, 0xdf, 0xb4, 0xda, + 0x88, 0x44, 0xd5, 0x62, 0xf2, 0xef, 0xbf, 0x27, 0x92, 0xff, 0x3e, 0x55, 0xa4, 0x8f, 0xc6, 0xf7, + 0xb3, 0x60, 0xa6, 0x8e, 0x05, 0xae, 0xbe, 0xbb, 0xb3, 0x63, 0xba, 0x57, 0xe0, 0xf5, 0x21, 0x2a, + 0x9c, 0x68, 0x66, 0x44, 0xbf, 0x94, 0x3f, 0x92, 0xbe, 0xca, 0x9b, 0xa9, 0x36, 0x57, 0x43, 0x62, + 0x3d, 0x78, 0x22, 0xc8, 0x63, 0xf1, 0xf6, 0x3d, 0x2e, 0x63, 0x15, 0x81, 0xe6, 0x94, 0x8c, 0x3e, + 0x36, 0x90, 0xb6, 0x31, 0x44, 0x3e, 0xc9, 0x82, 0xa3, 0x75, 0xcf, 0x6c, 0x5e, 0x5c, 0x76, 0x5c, + 0x67, 0xd7, 0xb3, 0x6c, 0xd4, 0x85, 0x8f, 0x0e, 0x11, 0xf0, 0xe5, 0x3f, 0x13, 0xca, 0x3f, 0xfc, + 0xd7, 0x8c, 0xec, 0x28, 0x1a, 0x74, 0xab, 0x7c, 0xf1, 0x11, 0xc1, 0xc4, 0xe4, 0xc6, 0x45, 0x99, + 0x12, 0xc7, 0x72, 0x4a, 0xa2, 0xa8, 0x5d, 0xee, 0x38, 0xae, 0xb7, 0xea, 0x34, 0xcd, 0x76, 0xd7, + 0x73, 0x5c, 0x04, 0x6b, 0xb1, 0x5c, 0xc3, 0x3d, 0x4c, 0xcb, 0x69, 0x86, 0x83, 0x23, 0x7b, 0xe3, + 0xc5, 0x4e, 0x11, 0x65, 0xfc, 0xa3, 0xd2, 0xbb, 0x8c, 0x94, 0x2b, 0xbd, 0x14, 0x45, 0xc8, 0x79, + 0xbf, 0x2e, 0x2d, 0xd9, 0xc1, 0x16, 0xb9, 0x9d, 0x47, 0x29, 0xa2, 0xc6, 0xb0, 0x54, 0x9e, 0x05, + 0xb3, 0xf5, 0xdd, 0x0b, 0x41, 0x21, 0x5d, 0xde, 0x08, 0x79, 0xbd, 0x74, 0x44, 0x11, 0x26, 0x78, + 0x7c, 0x41, 0x11, 0xfc, 0xbd, 0x01, 0xcc, 0x76, 0xf9, 0x6c, 0x0c, 0x6f, 0x31, 0x51, 0x32, 0x92, + 0xc8, 0xe0, 0x5a, 0xd3, 0x67, 0xe0, 0xfb, 0xb3, 0x60, 0xb6, 0xd6, 0x41, 0x36, 0x6a, 0x51, 0x2f, + 0x48, 0x81, 0x81, 0xaf, 0x4c, 0xc8, 0x40, 0xa1, 0xa0, 0x08, 0x06, 0x86, 0x1e, 0xcb, 0x8b, 0x3e, + 0xf3, 0xc2, 0x84, 0x44, 0x8c, 0x8b, 0xab, 0x2d, 0x7d, 0xc6, 0x7d, 0x29, 0x0b, 0xa6, 0xf5, 0x5d, + 0x7b, 0xdd, 0x75, 0xf0, 0x68, 0xec, 0xc2, 0xbb, 0xc3, 0x0e, 0xe2, 0x16, 0x70, 0xac, 0xb5, 0xeb, + 0x92, 0xf5, 0xa7, 0x8a, 0x5d, 0x47, 0x4d, 0xc7, 0x6e, 0x75, 0x49, 0x3b, 0xf2, 0xfa, 0xfe, 0x0f, + 0x77, 0xe6, 0x1e, 0xfc, 0x86, 0x92, 0x81, 0x3f, 0x27, 0x1d, 0x96, 0x88, 0x36, 0x9e, 0xab, 0x5a, + 0xbe, 0x27, 0x90, 0x0c, 0x3e, 0x34, 0xa8, 0x86, 0xf4, 0x99, 0xfb, 0xf9, 0x2c, 0x50, 0x4b, 0xcd, + 0xa6, 0xb3, 0x6b, 0x7b, 0x75, 0xd4, 0x46, 0x4d, 0xcf, 0x70, 0xcd, 0x26, 0xe2, 0xed, 0xe7, 0x22, + 0x50, 0x5a, 0x96, 0xcb, 0xfa, 0x60, 0xfc, 0xc8, 0xf8, 0xf8, 0x4a, 0xe9, 0x1d, 0x47, 0xda, 0xca, + 0xfd, 0xb5, 0x24, 0x60, 0xa7, 0xdc, 0xbe, 0xa2, 0x64, 0x45, 0x63, 0xb8, 0x79, 0x27, 0x0b, 0x72, + 0xeb, 0x96, 0xbd, 0xc5, 0xc7, 0x6f, 0x3a, 0x8e, 0xad, 0x9f, 0x16, 0xba, 0xcc, 0xe4, 0x93, 0xbe, + 0xa8, 0xb7, 0x81, 0xe3, 0xf6, 0xee, 0xce, 0x05, 0xe4, 0xd6, 0x36, 0xc9, 0xd8, 0xd0, 0x35, 0x9c, + 0x3a, 0xb2, 0xa9, 0xe9, 0x94, 0xd7, 0xfb, 0x7e, 0x13, 0x0d, 0x07, 0x09, 0x93, 0x17, 0x53, 0x12, + 0xc1, 0xeb, 0x80, 0xa8, 0x2c, 0x47, 0x54, 0x22, 0x63, 0xb7, 0x4f, 0xe1, 0xe9, 0xf3, 0xf7, 0xeb, + 0x59, 0x30, 0xb1, 0x86, 0x3c, 0xd7, 0x6a, 0x76, 0xe1, 0xc3, 0x78, 0x60, 0x42, 0xde, 0xba, 0xe9, + 0x9a, 0x3b, 0xc8, 0x43, 0x6e, 0x17, 0x6a, 0x21, 0xd3, 0x21, 0x98, 0xec, 0xb4, 0x4d, 0x6f, 0xd3, + 0x71, 0x77, 0x98, 0x04, 0x07, 0xef, 0xd8, 0x62, 0xd8, 0x43, 0x6e, 0x37, 0x24, 0xcb, 0x7f, 0x65, + 0x02, 0x2e, 0x6f, 0x9f, 0x31, 0x52, 0xe6, 0x05, 0x32, 0x0e, 0x64, 0x9f, 0xc9, 0x94, 0x38, 0x96, + 0xdb, 0x65, 0x94, 0x55, 0x67, 0x0b, 0xbe, 0x5a, 0x01, 0x39, 0x22, 0x79, 0x6f, 0xcb, 0x08, 0x93, + 0x8a, 0x1d, 0xd4, 0xed, 0x9a, 0x5b, 0xc8, 0x9f, 0x54, 0xb0, 0x57, 0xf5, 0x0e, 0x90, 0x6f, 0xa3, + 0x3d, 0xd4, 0x26, 0x64, 0xcc, 0xdd, 0x76, 0xbd, 0xd0, 0xb2, 0x55, 0x67, 0x6b, 0x1e, 0x97, 0x35, + 0xcf, 0xca, 0x99, 0x5f, 0xc5, 0x59, 0x75, 0xfa, 0xc7, 0xd9, 0x67, 0x82, 0x3c, 0x79, 0x57, 0xa7, + 0x40, 0x7e, 0x51, 0x5b, 0xd8, 0x58, 0x2e, 0x1e, 0xc1, 0x8f, 0x3e, 0x7d, 0x53, 0x20, 0xbf, 0x54, + 0x32, 0x4a, 0xab, 0xc5, 0x2c, 0x6e, 0x47, 0xa5, 0xba, 0x54, 0x2b, 0x2a, 0x38, 0x71, 0xbd, 0x54, + 0xad, 0x94, 0x8b, 0x39, 0x75, 0x1a, 0x4c, 0x9c, 0x2f, 0xe9, 0xd5, 0x4a, 0x75, 0xb9, 0x98, 0x87, + 0x7f, 0xc7, 0xe3, 0x77, 0xa7, 0x88, 0xdf, 0x0d, 0x51, 0x34, 0xf5, 0x83, 0xec, 0x57, 0x02, 0xc8, + 0xee, 0x16, 0x20, 0xfb, 0x51, 0x99, 0x42, 0xc6, 0x80, 0x52, 0x16, 0x4c, 0xac, 0xbb, 0x4e, 0x13, + 0x75, 0xbb, 0xf0, 0x15, 0x59, 0x50, 0x28, 0x9b, 0x76, 0x13, 0xb5, 0xe1, 0x35, 0x21, 0x54, 0xd4, + 0x3b, 0x28, 0x13, 0x1c, 0x10, 0xf8, 0x07, 0x9e, 0x33, 0xf7, 0x8a, 0x9c, 0xb9, 0x59, 0x68, 0x14, + 0x2b, 0x77, 0x9e, 0x96, 0x19, 0xc1, 0x9f, 0x37, 0x04, 0xfc, 0x29, 0x0b, 0xfc, 0xb9, 0x55, 0xbe, + 0xa8, 0xf4, 0xb9, 0xf4, 0xdd, 0x0c, 0x38, 0xbe, 0x8c, 0x6c, 0xe4, 0x5a, 0x4d, 0x4a, 0xbc, 0xdf, + 0xfe, 0xbb, 0xc5, 0xf6, 0xff, 0x88, 0x40, 0x74, 0xbf, 0x3f, 0xc4, 0xc6, 0xbf, 0x2e, 0x68, 0xfc, + 0xbd, 0x42, 0xe3, 0x6f, 0x91, 0x2c, 0x67, 0x0c, 0x57, 0xc9, 0x4e, 0x81, 0x99, 0xaa, 0xe3, 0x59, + 0x9b, 0x56, 0x93, 0x6e, 0x25, 0xbf, 0x4a, 0x01, 0xb9, 0x55, 0xab, 0xeb, 0xf1, 0x67, 0xd2, 0xcf, + 0x80, 0x69, 0xcb, 0x6e, 0xb6, 0x77, 0x5b, 0x48, 0x47, 0x26, 0x95, 0x95, 0x49, 0x9d, 0x4f, 0x0a, + 0x57, 0xe8, 0x31, 0x59, 0x8a, 0xbf, 0x42, 0xff, 0x69, 0x69, 0x6b, 0x8a, 0x27, 0x81, 0x9c, 0xf8, + 0x8e, 0x18, 0x92, 0x4a, 0x60, 0xd6, 0xe6, 0xb2, 0xfa, 0x87, 0xd0, 0x7b, 0x63, 0x38, 0xf3, 0xc5, + 0xe9, 0xe2, 0x1f, 0xf0, 0x83, 0x52, 0xc6, 0xd7, 0x20, 0x82, 0x92, 0x21, 0xb3, 0x94, 0x1c, 0x19, + 0x55, 0x05, 0x73, 0x95, 0xaa, 0xa1, 0xe9, 0xd5, 0xd2, 0x2a, 0xcb, 0xa2, 0xc0, 0xef, 0x67, 0x41, + 0x5e, 0x47, 0x9d, 0xf6, 0x15, 0x3e, 0x48, 0x27, 0xf3, 0xf7, 0xca, 0x04, 0xfe, 0x5e, 0xea, 0x12, + 0x00, 0x66, 0x13, 0x57, 0x4c, 0x6e, 0x23, 0xc9, 0xf6, 0x0d, 0x1d, 0x27, 0x34, 0xb0, 0x14, 0xe4, + 0xd6, 0xb9, 0x3f, 0xe1, 0x8b, 0xa5, 0x17, 0x80, 0x84, 0xd2, 0x08, 0x85, 0x11, 0xdd, 0xc1, 0x87, + 0xa4, 0xd6, 0x6c, 0x06, 0x16, 0x77, 0x38, 0xec, 0xff, 0x4a, 0x16, 0xe4, 0x0c, 0x3c, 0x23, 0xe3, + 0x26, 0x67, 0x9f, 0x1a, 0x4e, 0xc6, 0x71, 0x31, 0x11, 0x32, 0x7e, 0x0f, 0x98, 0xe1, 0x25, 0x96, + 0xed, 0x78, 0xc4, 0x8a, 0xb8, 0xf0, 0xc3, 0x30, 0x12, 0xde, 0x87, 0x9c, 0xc3, 0x61, 0xf1, 0x57, + 0x6f, 0x06, 0x60, 0x0d, 0x61, 0xbb, 0xb6, 0xbb, 0x6d, 0x75, 0xe0, 0x7f, 0x55, 0xc0, 0xd4, 0x32, + 0xf2, 0xea, 0x9e, 0xe9, 0xed, 0x76, 0x7b, 0x56, 0x2d, 0x6d, 0xa7, 0x6c, 0x36, 0xb7, 0x11, 0xeb, + 0x8e, 0xfc, 0x57, 0xf8, 0x5e, 0x45, 0x76, 0x5b, 0x30, 0xac, 0x67, 0x3e, 0xa8, 0x23, 0x02, 0x93, + 0xc7, 0x83, 0x5c, 0xcb, 0xf4, 0x4c, 0x86, 0xc5, 0x35, 0x3d, 0x58, 0x84, 0x05, 0xe9, 0x24, 0x1b, + 0xfc, 0xad, 0xac, 0xcc, 0xbe, 0xa0, 0x44, 0xfd, 0xc9, 0x40, 0xf8, 0x60, 0x66, 0x08, 0x14, 0x8e, + 0x81, 0xd9, 0x6a, 0xcd, 0x68, 0xac, 0xd6, 0x96, 0x97, 0x35, 0x9c, 0x5a, 0x54, 0xd4, 0x93, 0x40, + 0x5d, 0x2f, 0xdd, 0xbf, 0xa6, 0x55, 0x8d, 0x46, 0xb5, 0xb6, 0xa8, 0xb1, 0x3f, 0x73, 0xea, 0x51, + 0x30, 0x5d, 0x2e, 0x95, 0x57, 0xfc, 0x84, 0xbc, 0x7a, 0x0a, 0x1c, 0x5f, 0xd3, 0xd6, 0x16, 0x34, + 0xbd, 0xbe, 0x52, 0x59, 0x6f, 0xe0, 0x62, 0x96, 0x6a, 0x1b, 0xd5, 0xc5, 0x62, 0x41, 0x85, 0xe0, + 0x24, 0xf7, 0xe5, 0xbc, 0x5e, 0xab, 0x2e, 0x37, 0xea, 0x46, 0xc9, 0xd0, 0x8a, 0x13, 0xea, 0x55, + 0xe0, 0x68, 0xb9, 0x54, 0x25, 0xd9, 0xcb, 0xb5, 0x6a, 0x55, 0x2b, 0x1b, 0xc5, 0x49, 0xf8, 0xaf, + 0x39, 0x30, 0x5d, 0xe9, 0x56, 0xcd, 0x1d, 0x74, 0xce, 0x6c, 0x5b, 0x2d, 0xf8, 0x73, 0x9c, 0x35, + 0x79, 0x03, 0x98, 0x75, 0xe9, 0x23, 0x6a, 0x19, 0x16, 0xa2, 0x68, 0xce, 0xea, 0x62, 0xa2, 0x7a, + 0x12, 0x14, 0x6c, 0x52, 0x00, 0x63, 0x0d, 0x7b, 0x53, 0x17, 0x00, 0xa0, 0x4f, 0x46, 0x78, 0x2f, + 0xde, 0xd9, 0x5e, 0x6d, 0x32, 0x77, 0x50, 0x17, 0xb9, 0x7b, 0x56, 0x13, 0xf9, 0x39, 0x75, 0xee, + 0x2f, 0xf8, 0x55, 0x45, 0x76, 0x99, 0x90, 0x03, 0x95, 0x6b, 0x4e, 0x44, 0x6f, 0xf8, 0xb3, 0x8a, + 0xcc, 0x22, 0x9f, 0x54, 0x91, 0xc9, 0x24, 0xe5, 0xa5, 0xd9, 0x21, 0x24, 0x65, 0x16, 0x4c, 0x19, + 0xb5, 0x5a, 0xa3, 0xbe, 0x52, 0xd3, 0x8d, 0xa2, 0xa2, 0xce, 0x80, 0x49, 0xfc, 0xba, 0x5a, 0xab, + 0x2e, 0x17, 0x73, 0xea, 0x09, 0x70, 0x6c, 0xa5, 0x54, 0x6f, 0x54, 0xaa, 0xe7, 0x4a, 0xab, 0x95, + 0xc5, 0x46, 0x79, 0xa5, 0xa4, 0xd7, 0x8b, 0x79, 0xf5, 0x1a, 0x70, 0xc2, 0xa8, 0x68, 0x7a, 0x63, + 0x49, 0x2b, 0x19, 0x1b, 0xba, 0x56, 0x6f, 0x54, 0x6b, 0x8d, 0x6a, 0x69, 0x4d, 0x2b, 0x16, 0xb0, + 0xfa, 0x93, 0x4f, 0xa1, 0xd8, 0x4c, 0xec, 0x17, 0xc6, 0xc9, 0x08, 0x61, 0x9c, 0xea, 0x15, 0x46, + 0xc0, 0x8b, 0x95, 0xae, 0xd5, 0x35, 0xfd, 0x9c, 0x56, 0x9c, 0xee, 0x27, 0x6b, 0x33, 0xea, 0x71, + 0x50, 0xc4, 0x34, 0x34, 0x2a, 0x75, 0x3f, 0xe7, 0x62, 0x71, 0x16, 0x7e, 0xbc, 0x00, 0x4e, 0xea, + 0x68, 0xcb, 0xea, 0x7a, 0xc8, 0x5d, 0x37, 0xaf, 0xec, 0x20, 0xdb, 0xf3, 0x3b, 0xf9, 0xff, 0x95, + 0x58, 0x18, 0xd7, 0xc0, 0x6c, 0x87, 0x96, 0xb1, 0x86, 0xbc, 0x6d, 0xa7, 0xc5, 0x46, 0xe1, 0x1f, + 0x89, 0xec, 0x39, 0xe6, 0xd7, 0xf9, 0xec, 0xba, 0xf8, 0x37, 0x27, 0xdb, 0x4a, 0x8c, 0x6c, 0xe7, + 0x86, 0x91, 0x6d, 0xf5, 0x5a, 0x30, 0xb5, 0xdb, 0x45, 0xae, 0xb6, 0x63, 0x5a, 0x6d, 0xff, 0x5e, + 0xb3, 0x20, 0x01, 0xbe, 0x2b, 0x27, 0xeb, 0x78, 0xca, 0xb5, 0xa5, 0x3f, 0x1b, 0x23, 0xfa, 0xd6, + 0xd3, 0x00, 0xb0, 0xc6, 0x6e, 0xb8, 0x6d, 0x26, 0xac, 0x5c, 0x0a, 0xa6, 0xef, 0x82, 0xd5, 0x6e, + 0x5b, 0xf6, 0x56, 0xb0, 0x7c, 0x1f, 0x26, 0xc0, 0x97, 0x2a, 0x32, 0x8e, 0xa8, 0x49, 0x69, 0x4b, + 0xa6, 0x4d, 0x2f, 0xce, 0x8e, 0xb9, 0xdf, 0xdd, 0xaf, 0x3a, 0x05, 0xb5, 0x08, 0x66, 0x48, 0x1a, + 0xd3, 0xc0, 0xe2, 0x04, 0xee, 0x83, 0xfd, 0xe2, 0xd6, 0x34, 0x63, 0xa5, 0xb6, 0x18, 0x7c, 0x9b, + 0xc4, 0x45, 0x62, 0x62, 0x4a, 0xd5, 0xfb, 0x89, 0x36, 0x4e, 0xa9, 0x8f, 0x06, 0xd7, 0x70, 0x1d, + 0x76, 0x69, 0x55, 0xd7, 0x4a, 0x8b, 0xf7, 0x37, 0xb4, 0x67, 0x57, 0xea, 0x46, 0x5d, 0x54, 0x2e, + 0x5f, 0x8f, 0xa6, 0x31, 0xbd, 0xda, 0x5a, 0xa9, 0xb2, 0xca, 0xfa, 0xf7, 0xa5, 0x9a, 0xbe, 0x56, + 0x32, 0x8a, 0x33, 0xf0, 0xd5, 0x0a, 0x28, 0x2e, 0x23, 0x6f, 0xdd, 0x71, 0x3d, 0xb3, 0xbd, 0x6a, + 0xd9, 0x17, 0x37, 0xdc, 0x36, 0x6f, 0x33, 0xfd, 0x8b, 0xf4, 0x69, 0x5b, 0x71, 0x88, 0x14, 0x0a, + 0x8c, 0x5e, 0xd8, 0xee, 0x90, 0x6c, 0xa1, 0x30, 0x85, 0x09, 0xf0, 0xa7, 0xb3, 0x32, 0xa7, 0x6b, + 0xe5, 0x6b, 0x4d, 0x26, 0x27, 0xcf, 0x1d, 0xf7, 0xf8, 0xdc, 0x07, 0xb5, 0x02, 0x7c, 0x30, 0x07, + 0x26, 0x97, 0x2c, 0xdb, 0x6c, 0x5b, 0xcf, 0x11, 0x42, 0xc6, 0x85, 0x7d, 0x4c, 0x26, 0xa6, 0x8f, + 0xc9, 0x0e, 0x35, 0x7e, 0xfe, 0x92, 0x22, 0xbb, 0x85, 0xc1, 0xf1, 0xde, 0x27, 0x32, 0x62, 0xf0, + 0xfc, 0x83, 0xac, 0xcc, 0x26, 0xc5, 0xe0, 0xf2, 0x92, 0x61, 0xf8, 0xc9, 0x1f, 0x0e, 0x1b, 0xab, + 0x47, 0xbf, 0x27, 0xfb, 0x89, 0xc2, 0x14, 0xfc, 0x73, 0x05, 0xc0, 0x65, 0xe4, 0x9d, 0x43, 0x6e, + 0x30, 0x15, 0x20, 0xbd, 0x3e, 0xb3, 0xb7, 0x39, 0x95, 0x7d, 0x1b, 0x0f, 0xe0, 0x79, 0x11, 0xc0, + 0x52, 0x8c, 0xf2, 0x44, 0x14, 0x1d, 0xa1, 0xbc, 0x15, 0x50, 0xe8, 0x92, 0xef, 0x4c, 0xcc, 0x9e, + 0x18, 0x3d, 0x5c, 0x92, 0xc2, 0xf8, 0xd2, 0x69, 0xc1, 0x3a, 0x2b, 0x00, 0x7e, 0x2f, 0x98, 0x04, + 0xfd, 0x98, 0x20, 0x1d, 0x4b, 0x07, 0x26, 0x36, 0x99, 0xbc, 0xb8, 0xe9, 0x8a, 0x4b, 0x3f, 0xfb, + 0x06, 0x7e, 0x31, 0x07, 0x8e, 0xf7, 0x6b, 0x0e, 0x7f, 0xb3, 0xdc, 0x71, 0x90, 0x47, 0x64, 0xc4, + 0xa7, 0xca, 0x4e, 0x5f, 0xd4, 0x27, 0x81, 0x13, 0x6c, 0x0b, 0xf5, 0x02, 0x32, 0x9c, 0x2a, 0xba, + 0xd4, 0x6d, 0x23, 0xcf, 0x43, 0x2e, 0x69, 0xd9, 0xa4, 0xde, 0xff, 0x23, 0xfc, 0x7b, 0x45, 0xd6, + 0x59, 0x7d, 0x00, 0xbf, 0x23, 0x34, 0xfd, 0x45, 0x8a, 0x8c, 0xfb, 0x79, 0xb2, 0xb2, 0x93, 0xa1, + 0xf8, 0xc2, 0x71, 0x8f, 0xf0, 0xfd, 0x87, 0x56, 0xa2, 0xf3, 0x34, 0xdd, 0x1f, 0xa1, 0xcf, 0x69, + 0x7a, 0x65, 0xa9, 0xa2, 0xe1, 0xf1, 0xfe, 0x04, 0x38, 0x16, 0x7e, 0x5b, 0xbc, 0xbf, 0x51, 0xd7, + 0xaa, 0x46, 0x71, 0x12, 0x77, 0x20, 0x34, 0x79, 0xa9, 0x54, 0x59, 0xd5, 0x16, 0x1b, 0x46, 0x0d, + 0x7f, 0x59, 0x1c, 0x6e, 0xcc, 0x87, 0xcf, 0xcf, 0x81, 0xa3, 0x84, 0xb7, 0x57, 0x08, 0x57, 0x31, + 0x53, 0x7a, 0x7c, 0x59, 0x02, 0x80, 0xa6, 0x28, 0x7b, 0xe1, 0xe7, 0xa4, 0x6f, 0x0d, 0xe3, 0x20, + 0xec, 0xa9, 0x23, 0x42, 0x32, 0xbe, 0x9b, 0x95, 0x39, 0x01, 0x2a, 0x5d, 0x6c, 0x32, 0xa1, 0xf8, + 0xe7, 0x71, 0x0f, 0x05, 0xd1, 0xe0, 0x13, 0xf3, 0xaf, 0x4c, 0x7e, 0x7e, 0xf6, 0x7a, 0x45, 0x27, + 0xe2, 0x30, 0x07, 0x00, 0x49, 0x21, 0x12, 0x44, 0xe5, 0xa0, 0xef, 0x40, 0x12, 0x25, 0x07, 0xa5, + 0xb2, 0x51, 0x39, 0xa7, 0x45, 0xc9, 0xc1, 0x67, 0x14, 0x30, 0xb9, 0x8c, 0x3c, 0x3c, 0xd9, 0xe9, + 0xc2, 0xa7, 0x4b, 0x2c, 0xcc, 0x60, 0xfb, 0x82, 0x5c, 0x97, 0x1c, 0xcc, 0xcf, 0xe9, 0x1b, 0x7c, + 0xc1, 0x30, 0xb6, 0x81, 0x5f, 0x75, 0xc4, 0x40, 0xf2, 0x54, 0x90, 0xf7, 0xf0, 0x67, 0xb6, 0x3e, + 0xfc, 0x98, 0xc8, 0x71, 0x04, 0x17, 0xb2, 0x68, 0x7a, 0xa6, 0x4e, 0xf3, 0x73, 0xc3, 0x86, 0xa4, + 0x51, 0x11, 0x41, 0xc8, 0x0f, 0xa3, 0x61, 0xf8, 0x77, 0x0a, 0x38, 0x41, 0xf5, 0xa3, 0xd4, 0xe9, + 0xd4, 0x3d, 0xc7, 0x45, 0x3a, 0x6a, 0x22, 0xab, 0xe3, 0xf5, 0x2c, 0xbc, 0xb9, 0x34, 0xd5, 0xdf, + 0xd9, 0x63, 0xaf, 0xf0, 0x2d, 0x8a, 0x6c, 0x8c, 0xc3, 0x7d, 0xfa, 0xd8, 0x53, 0x5f, 0x84, 0xb2, + 0x3f, 0x94, 0x95, 0x89, 0x5a, 0x98, 0xb0, 0xf0, 0x64, 0x40, 0x7d, 0xe4, 0x10, 0x80, 0xf2, 0x97, + 0x54, 0x74, 0xad, 0xac, 0x55, 0xd6, 0xf1, 0x20, 0x70, 0x1d, 0x78, 0xd4, 0xfa, 0x86, 0x5e, 0x5e, + 0x29, 0xd5, 0xb5, 0x86, 0xae, 0x2d, 0x57, 0xea, 0x86, 0x5e, 0x32, 0x2a, 0x35, 0x9f, 0x80, 0x09, + 0xf5, 0x5a, 0x70, 0xaa, 0xbe, 0xb1, 0x50, 0x2f, 0xeb, 0x95, 0x75, 0x92, 0xae, 0x6b, 0x55, 0xed, + 0x3c, 0xfb, 0x3a, 0x09, 0x3f, 0x5c, 0x04, 0xd3, 0xd8, 0x32, 0xaf, 0x53, 0x83, 0x1d, 0x7e, 0x2b, + 0x07, 0xa6, 0x75, 0xd4, 0x75, 0xda, 0x7b, 0xc4, 0x78, 0x1f, 0xd7, 0x9c, 0xe0, 0x3b, 0x8a, 0xec, + 0xf9, 0x28, 0x8e, 0xd8, 0x79, 0x8e, 0xd0, 0xe8, 0x19, 0xa0, 0xe9, 0xc7, 0x0b, 0x66, 0x76, 0x4b, + 0x98, 0xa0, 0xce, 0x03, 0xd5, 0xb9, 0x64, 0x23, 0xb7, 0xde, 0xbc, 0xa4, 0x79, 0xdb, 0xa5, 0x56, + 0xcb, 0x45, 0xdd, 0x2e, 0x5b, 0x56, 0xe8, 0xf3, 0x45, 0xbd, 0x09, 0x1c, 0x25, 0xa9, 0x5c, 0x66, + 0x7a, 0x98, 0xb3, 0x37, 0x39, 0xc8, 0x59, 0xb2, 0xaf, 0xf8, 0x39, 0xf3, 0x5c, 0xce, 0x30, 0x99, + 0x77, 0x47, 0x2c, 0x88, 0x5e, 0xb0, 0x67, 0xc0, 0xb4, 0x6d, 0xee, 0x20, 0xed, 0x72, 0xc7, 0x72, + 0x51, 0xf7, 0xd4, 0x04, 0xd9, 0x4d, 0xe3, 0x93, 0xe0, 0x1f, 0x48, 0x9d, 0xe7, 0x92, 0xe3, 0x58, + 0x32, 0xd9, 0x5f, 0x1e, 0x42, 0xf4, 0xfb, 0xf4, 0x33, 0x0a, 0xfc, 0xb0, 0x02, 0x66, 0x18, 0x51, + 0x25, 0xfb, 0x4a, 0xa5, 0x05, 0xaf, 0x13, 0xcc, 0x52, 0x13, 0xa7, 0xf9, 0x66, 0x29, 0x79, 0x81, + 0x3f, 0xaf, 0xc8, 0xba, 0x13, 0xf5, 0x69, 0x38, 0xa9, 0x23, 0xda, 0xc5, 0x65, 0xd3, 0xd9, 0x65, + 0x2e, 0x35, 0x93, 0x3a, 0x7d, 0x49, 0x73, 0xb5, 0x0d, 0xfe, 0xa1, 0x94, 0xb3, 0x92, 0x64, 0x33, + 0x0e, 0x09, 0xc0, 0x4f, 0x28, 0x60, 0x8e, 0x51, 0x55, 0x67, 0x7e, 0xb4, 0x52, 0x0e, 0xe5, 0xbf, + 0x20, 0x6d, 0x08, 0xf6, 0x69, 0x3f, 0xab, 0xe9, 0x11, 0x03, 0xe4, 0x47, 0xa5, 0x82, 0x8f, 0x48, + 0x37, 0xe4, 0x90, 0xa0, 0x7c, 0x77, 0x0e, 0x4c, 0x6f, 0x74, 0x91, 0xcb, 0xfc, 0xe2, 0xe0, 0x1b, + 0x72, 0x40, 0x59, 0x46, 0xc2, 0x0e, 0xe7, 0x4b, 0x72, 0xb2, 0xab, 0x75, 0x7c, 0x63, 0xb9, 0x42, + 0xb1, 0x8d, 0x14, 0x01, 0xdb, 0x8d, 0x60, 0x8e, 0xb2, 0xb4, 0xe4, 0x79, 0xd8, 0x48, 0xf4, 0x8f, + 0x05, 0xf4, 0xa4, 0x8e, 0x62, 0x0f, 0x87, 0xd4, 0x85, 0xb3, 0x94, 0x31, 0x4d, 0xab, 0x68, 0x93, + 0x86, 0xa6, 0xca, 0xe9, 0x3d, 0xa9, 0xe4, 0x2a, 0xe7, 0x0e, 0xa2, 0xfe, 0xa1, 0x5c, 0xe6, 0x3c, + 0xc9, 0xdc, 0xef, 0x13, 0xfc, 0x96, 0x54, 0xcc, 0x3e, 0x79, 0xee, 0x24, 0x93, 0x85, 0xce, 0x68, + 0x4c, 0x92, 0xe3, 0xa0, 0x88, 0x73, 0x90, 0x8d, 0x11, 0x5d, 0xab, 0xd7, 0x56, 0xcf, 0x69, 0xfd, + 0xd7, 0x17, 0xf2, 0xf0, 0x85, 0x0a, 0x98, 0x5a, 0x70, 0x1d, 0xb3, 0xd5, 0x34, 0xbb, 0x1e, 0xfc, + 0x5e, 0x16, 0xcc, 0xac, 0x9b, 0x57, 0xda, 0x8e, 0xd9, 0x22, 0x9e, 0x88, 0x3d, 0x7d, 0x41, 0x87, + 0x7e, 0xf2, 0xfb, 0x02, 0xf6, 0x2a, 0x3a, 0xde, 0x07, 0xae, 0xf1, 0x19, 0x99, 0xcb, 0xc5, 0x82, + 0xfd, 0xb7, 0x6c, 0xbf, 0x60, 0x60, 0x3e, 0x5d, 0xf3, 0x3c, 0x4d, 0x11, 0x16, 0xe5, 0x87, 0xe5, + 0xc2, 0x7b, 0xc9, 0x14, 0x79, 0x38, 0xdb, 0xe5, 0x0f, 0x4e, 0x82, 0xc2, 0x22, 0x22, 0x56, 0xdc, + 0x6f, 0x67, 0xc1, 0x04, 0xbb, 0x5e, 0x1f, 0xde, 0x21, 0x38, 0x39, 0xb6, 0x48, 0x86, 0xa0, 0x3b, + 0x0e, 0xde, 0xf1, 0x64, 0x9d, 0x3b, 0xcf, 0x44, 0x9e, 0x13, 0xb8, 0x7f, 0xd1, 0x7a, 0x23, 0xae, + 0xf4, 0x4f, 0xe6, 0xfe, 0x15, 0x5b, 0x54, 0xfa, 0x4e, 0x50, 0xef, 0xcd, 0x32, 0x9f, 0x27, 0xae, + 0xd7, 0xfb, 0x55, 0x5e, 0x3e, 0x63, 0xdd, 0xc0, 0x18, 0xf1, 0x31, 0x5e, 0x4b, 0xb7, 0x83, 0x09, + 0xca, 0x73, 0x7f, 0x3e, 0xda, 0xeb, 0x40, 0x40, 0x8b, 0x20, 0x67, 0x9b, 0xfc, 0x9c, 0x92, 0xbe, + 0x63, 0xd1, 0x95, 0x8f, 0xe5, 0x8c, 0xdf, 0x4c, 0x15, 0x79, 0x97, 0x1c, 0xf7, 0x62, 0xdd, 0x33, + 0x3d, 0x04, 0xff, 0x39, 0x0b, 0x94, 0x3a, 0xf2, 0xf8, 0xd3, 0xc5, 0x55, 0x70, 0x8c, 0x36, 0x88, + 0x65, 0x24, 0xfd, 0x37, 0x6d, 0xc8, 0x99, 0xbe, 0x4c, 0xe0, 0xf2, 0xe9, 0xfb, 0x7f, 0x85, 0xaf, + 0xe8, 0x1b, 0x54, 0x21, 0xdb, 0x67, 0xd2, 0xc0, 0x38, 0xc3, 0x13, 0x88, 0x05, 0x2c, 0x42, 0x4e, + 0x7f, 0x5f, 0xca, 0xac, 0x96, 0x2b, 0xf3, 0x70, 0xba, 0x82, 0xd7, 0x5e, 0x03, 0x72, 0xe5, 0x6d, + 0xd3, 0x83, 0xef, 0x51, 0x00, 0x28, 0xb5, 0x5a, 0x6b, 0xd4, 0xe1, 0x96, 0xf7, 0x14, 0x3b, 0x0b, + 0x66, 0x9a, 0xdb, 0x66, 0x18, 0x3b, 0x9c, 0xf6, 0x07, 0x42, 0x9a, 0xfa, 0xa4, 0xd0, 0x73, 0x97, + 0x72, 0x15, 0xf6, 0xc0, 0x84, 0xeb, 0x60, 0x65, 0x07, 0x5e, 0xbd, 0x62, 0xa8, 0xa9, 0xd8, 0xf3, + 0xb2, 0xf8, 0xf7, 0xf9, 0x90, 0xbc, 0xe8, 0x39, 0x1c, 0x2b, 0x3a, 0x38, 0x29, 0x18, 0x26, 0x24, + 0x3c, 0x49, 0x25, 0x77, 0x60, 0x36, 0x9e, 0xae, 0xb1, 0x84, 0x86, 0x53, 0xb5, 0x96, 0xe5, 0xb3, + 0x96, 0x05, 0xa4, 0x80, 0x2f, 0xce, 0x24, 0x83, 0x2f, 0x9e, 0x71, 0xf7, 0x82, 0x59, 0xd4, 0xb2, + 0x3c, 0xe4, 0xb7, 0x92, 0x31, 0x30, 0x0e, 0x62, 0xf1, 0x07, 0xf8, 0x5c, 0xe9, 0xa0, 0x26, 0x84, + 0xa1, 0xfb, 0x5b, 0x14, 0xa1, 0x7f, 0x72, 0x61, 0x4a, 0xe4, 0xca, 0x4c, 0x1f, 0xac, 0x17, 0x28, + 0xe0, 0x84, 0xe1, 0x6c, 0x6d, 0xb5, 0x91, 0xcf, 0x26, 0x44, 0xdd, 0x26, 0xa1, 0x39, 0x4a, 0xb8, + 0xc8, 0x1e, 0x8d, 0xf3, 0x80, 0xc5, 0x66, 0x2f, 0xf4, 0x05, 0xbe, 0x48, 0x3a, 0xfc, 0x22, 0x61, + 0x57, 0x5f, 0x3a, 0x23, 0x50, 0x90, 0x0b, 0xa8, 0x28, 0x5d, 0x6c, 0xfa, 0x40, 0x3c, 0x9c, 0x05, + 0xb3, 0xf4, 0x16, 0x2f, 0x5f, 0x40, 0xef, 0x1b, 0x21, 0x00, 0xf0, 0x7b, 0x19, 0x59, 0x07, 0x58, + 0xc2, 0x13, 0x81, 0x92, 0x08, 0x16, 0xcb, 0x1d, 0x5a, 0x1e, 0x58, 0x5c, 0xfa, 0xac, 0xfd, 0x75, + 0x05, 0x4c, 0x2f, 0x23, 0x5f, 0xd3, 0xba, 0xfc, 0x35, 0x1b, 0x32, 0x8c, 0xbd, 0x01, 0xcc, 0x5e, + 0x40, 0x9b, 0x8e, 0x8b, 0xc8, 0xb5, 0x21, 0x01, 0x73, 0xc5, 0xc4, 0x88, 0xc8, 0x2e, 0x42, 0x08, + 0x91, 0x05, 0x91, 0xed, 0xb7, 0xec, 0xe7, 0x13, 0x47, 0x65, 0xc4, 0x70, 0xf2, 0x14, 0x30, 0xc9, + 0x40, 0xf5, 0x2d, 0xb0, 0xb8, 0x2e, 0x2f, 0xc8, 0x0b, 0xdf, 0x14, 0x80, 0xa5, 0x09, 0x60, 0x3d, + 0x31, 0x09, 0x11, 0x63, 0xb9, 0xc6, 0xb6, 0xc8, 0xd5, 0xbf, 0x70, 0xa5, 0xd2, 0xea, 0xc2, 0xb5, + 0x64, 0x78, 0x9d, 0x06, 0x20, 0x90, 0x7b, 0xff, 0x44, 0x28, 0x97, 0x22, 0x06, 0x7d, 0x8d, 0x3d, + 0xf0, 0xd4, 0xcb, 0x0e, 0x42, 0xce, 0x88, 0x81, 0x91, 0x3b, 0x28, 0x25, 0x43, 0xc9, 0x18, 0x02, + 0xbc, 0x28, 0xe0, 0x44, 0xdd, 0xdf, 0x37, 0x5f, 0x35, 0xbb, 0xa1, 0x4a, 0x95, 0x93, 0x41, 0x24, + 0x1c, 0xb2, 0x08, 0x94, 0xe5, 0xdb, 0xc9, 0x86, 0x83, 0xbe, 0x94, 0x8c, 0x16, 0x1d, 0xf5, 0x16, + 0x70, 0xcc, 0xde, 0xdd, 0x09, 0xb8, 0x4e, 0x34, 0x9e, 0x69, 0xf8, 0xfe, 0x0f, 0x49, 0x06, 0x1d, + 0x19, 0xe2, 0xc7, 0x32, 0x5d, 0x9c, 0xde, 0xb0, 0x03, 0x57, 0x08, 0xf8, 0xf8, 0x44, 0x30, 0xc2, + 0x7f, 0xca, 0x24, 0xea, 0xdd, 0xb8, 0x9a, 0x22, 0x86, 0x94, 0x04, 0xbd, 0x54, 0x74, 0x61, 0xa9, + 0xb3, 0xed, 0xec, 0x04, 0xc8, 0x6b, 0x3b, 0x1d, 0xef, 0xca, 0xd9, 0xc7, 0x82, 0xd9, 0xba, 0xe7, + 0x22, 0x73, 0x87, 0x5b, 0xf4, 0xf7, 0x9c, 0x8b, 0xc8, 0xf6, 0x17, 0xfd, 0xc9, 0xcb, 0x9d, 0x77, + 0x80, 0x09, 0xdb, 0x69, 0x98, 0xbb, 0xde, 0xb6, 0x7a, 0xdd, 0xfc, 0x96, 0xe3, 0x6c, 0xb5, 0xd1, + 0x7c, 0xc7, 0x75, 0x3c, 0xe7, 0xc2, 0xee, 0xe6, 0x3c, 0x03, 0xbf, 0xc6, 0x8e, 0xff, 0x7f, 0xf5, + 0x2e, 0xb2, 0xec, 0x5b, 0xb0, 0x9d, 0xd2, 0xae, 0xb7, 0xbd, 0x70, 0xed, 0x27, 0xfe, 0xf6, 0x74, + 0xe6, 0x33, 0x7f, 0x7b, 0x3a, 0xf3, 0x95, 0xbf, 0x3d, 0x9d, 0xf9, 0x85, 0xaf, 0x9d, 0x3e, 0xf2, + 0x99, 0xaf, 0x9d, 0x3e, 0xf2, 0xf0, 0xd7, 0x4e, 0x1f, 0xf9, 0xb1, 0x6c, 0xe7, 0xc2, 0x85, 0x02, + 0x29, 0xe5, 0xf6, 0xff, 0x3f, 0x00, 0x00, 0xff, 0xff, 0xea, 0x57, 0xf2, 0x64, 0xe4, 0xed, 0x01, + 0x00, } func (m *Rpc) Marshal() (dAtA []byte, err error) { @@ -86234,6 +86471,169 @@ func (m *RpcRelationOptionsResponseError) MarshalToSizedBuffer(dAtA []byte) (int return len(dAtA) - i, nil } +func (m *RpcRelationListWithValue) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcRelationListWithValue) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcRelationListWithValue) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *RpcRelationListWithValueRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcRelationListWithValueRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcRelationListWithValueRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Value != nil { + { + size, err := m.Value.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCommands(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.SpaceId) > 0 { + i -= len(m.SpaceId) + copy(dAtA[i:], m.SpaceId) + i = encodeVarintCommands(dAtA, i, uint64(len(m.SpaceId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *RpcRelationListWithValueResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcRelationListWithValueResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcRelationListWithValueResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Counters) > 0 { + dAtA182 := make([]byte, len(m.Counters)*10) + var j181 int + for _, num1 := range m.Counters { + num := uint64(num1) + for num >= 1<<7 { + dAtA182[j181] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j181++ + } + dAtA182[j181] = uint8(num) + j181++ + } + i -= j181 + copy(dAtA[i:], dAtA182[:j181]) + i = encodeVarintCommands(dAtA, i, uint64(j181)) + i-- + dAtA[i] = 0x1a + } + if len(m.RelationKeys) > 0 { + for iNdEx := len(m.RelationKeys) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.RelationKeys[iNdEx]) + copy(dAtA[i:], m.RelationKeys[iNdEx]) + i = encodeVarintCommands(dAtA, i, uint64(len(m.RelationKeys[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if m.Error != nil { + { + size, err := m.Error.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCommands(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *RpcRelationListWithValueResponseError) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcRelationListWithValueResponseError) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcRelationListWithValueResponseError) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Description) > 0 { + i -= len(m.Description) + copy(dAtA[i:], m.Description) + i = encodeVarintCommands(dAtA, i, uint64(len(m.Description))) + i-- + dAtA[i] = 0x12 + } + if m.Code != 0 { + i = encodeVarintCommands(dAtA, i, uint64(m.Code)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *RpcHistory) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -119274,6 +119674,74 @@ func (m *RpcRelationOptionsResponseError) Size() (n int) { return n } +func (m *RpcRelationListWithValue) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *RpcRelationListWithValueRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SpaceId) + if l > 0 { + n += 1 + l + sovCommands(uint64(l)) + } + if m.Value != nil { + l = m.Value.Size() + n += 1 + l + sovCommands(uint64(l)) + } + return n +} + +func (m *RpcRelationListWithValueResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Error != nil { + l = m.Error.Size() + n += 1 + l + sovCommands(uint64(l)) + } + if len(m.RelationKeys) > 0 { + for _, s := range m.RelationKeys { + l = len(s) + n += 1 + l + sovCommands(uint64(l)) + } + } + if len(m.Counters) > 0 { + l = 0 + for _, e := range m.Counters { + l += sovCommands(uint64(e)) + } + n += 1 + sovCommands(uint64(l)) + l + } + return n +} + +func (m *RpcRelationListWithValueResponseError) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Code != 0 { + n += 1 + sovCommands(uint64(m.Code)) + } + l = len(m.Description) + if l > 0 { + n += 1 + l + sovCommands(uint64(l)) + } + return n +} + func (m *RpcHistory) Size() (n int) { if m == nil { return 0 @@ -174622,15 +175090,222 @@ func (m *RpcRelationListRemoveOptionRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Request: wiretype end group for non-group") + return fmt.Errorf("proto: Request: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OptionIds", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCommands + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OptionIds = append(m.OptionIds, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CheckInObjects", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.CheckInObjects = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcRelationListRemoveOptionResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Response: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Response: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCommands + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Error == nil { + m.Error = &RpcRelationListRemoveOptionResponseError{} + } + if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcRelationListRemoveOptionResponseError) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Error: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: Error: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Code", wireType) + } + m.Code = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Code |= RpcRelationListRemoveOptionResponseErrorCode(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field OptionIds", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -174658,13 +175333,113 @@ func (m *RpcRelationListRemoveOptionRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.OptionIds = append(m.OptionIds, string(dAtA[iNdEx:postIndex])) + m.Description = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CheckInObjects", wireType) + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err } - var v int + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcRelationOptions) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Options: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Options: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcRelationOptionsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Request: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RelationKey", wireType) + } + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowCommands @@ -174674,12 +175449,24 @@ func (m *RpcRelationListRemoveOptionRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - m.CheckInObjects = bool(v != 0) + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCommands + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RelationKey = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipCommands(dAtA[iNdEx:]) @@ -174701,7 +175488,7 @@ func (m *RpcRelationListRemoveOptionRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *RpcRelationListRemoveOptionResponse) Unmarshal(dAtA []byte) error { +func (m *RpcRelationOptionsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -174760,12 +175547,48 @@ func (m *RpcRelationListRemoveOptionResponse) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.Error == nil { - m.Error = &RpcRelationListRemoveOptionResponseError{} + m.Error = &RpcRelationOptionsResponseError{} } if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCommands + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Options == nil { + m.Options = &model.RelationOptions{} + } + if err := m.Options.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipCommands(dAtA[iNdEx:]) @@ -174787,7 +175610,7 @@ func (m *RpcRelationListRemoveOptionResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *RpcRelationListRemoveOptionResponseError) Unmarshal(dAtA []byte) error { +func (m *RpcRelationOptionsResponseError) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -174830,7 +175653,7 @@ func (m *RpcRelationListRemoveOptionResponseError) Unmarshal(dAtA []byte) error } b := dAtA[iNdEx] iNdEx++ - m.Code |= RpcRelationListRemoveOptionResponseErrorCode(b&0x7F) << shift + m.Code |= RpcRelationOptionsResponseErrorCode(b&0x7F) << shift if b < 0x80 { break } @@ -174888,7 +175711,7 @@ func (m *RpcRelationListRemoveOptionResponseError) Unmarshal(dAtA []byte) error } return nil } -func (m *RpcRelationOptions) Unmarshal(dAtA []byte) error { +func (m *RpcRelationListWithValue) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -174911,10 +175734,10 @@ func (m *RpcRelationOptions) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Options: wiretype end group for non-group") + return fmt.Errorf("proto: ListWithValue: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Options: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ListWithValue: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: @@ -174938,7 +175761,7 @@ func (m *RpcRelationOptions) Unmarshal(dAtA []byte) error { } return nil } -func (m *RpcRelationOptionsRequest) Unmarshal(dAtA []byte) error { +func (m *RpcRelationListWithValueRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -174969,7 +175792,7 @@ func (m *RpcRelationOptionsRequest) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RelationKey", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SpaceId", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -174997,7 +175820,43 @@ func (m *RpcRelationOptionsRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.RelationKey = string(dAtA[iNdEx:postIndex]) + m.SpaceId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCommands + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Value == nil { + m.Value = &types.Value{} + } + if err := m.Value.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -175020,7 +175879,7 @@ func (m *RpcRelationOptionsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *RpcRelationOptionsResponse) Unmarshal(dAtA []byte) error { +func (m *RpcRelationListWithValueResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -175079,7 +175938,7 @@ func (m *RpcRelationOptionsResponse) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.Error == nil { - m.Error = &RpcRelationOptionsResponseError{} + m.Error = &RpcRelationListWithValueResponseError{} } if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -175087,9 +175946,9 @@ func (m *RpcRelationOptionsResponse) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RelationKeys", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowCommands @@ -175099,28 +175958,100 @@ func (m *RpcRelationOptionsResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthCommands } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthCommands } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Options == nil { - m.Options = &model.RelationOptions{} - } - if err := m.Options.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.RelationKeys = append(m.RelationKeys, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex + case 3: + if wireType == 0 { + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Counters = append(m.Counters, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthCommands + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Counters) == 0 { + m.Counters = make([]int64, 0, elementCount) + } + for iNdEx < postIndex { + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Counters = append(m.Counters, v) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field Counters", wireType) + } default: iNdEx = preIndex skippy, err := skipCommands(dAtA[iNdEx:]) @@ -175142,7 +176073,7 @@ func (m *RpcRelationOptionsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *RpcRelationOptionsResponseError) Unmarshal(dAtA []byte) error { +func (m *RpcRelationListWithValueResponseError) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -175185,7 +176116,7 @@ func (m *RpcRelationOptionsResponseError) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.Code |= RpcRelationOptionsResponseErrorCode(b&0x7F) << shift + m.Code |= RpcRelationListWithValueResponseErrorCode(b&0x7F) << shift if b < 0x80 { break } diff --git a/pb/protos/commands.proto b/pb/protos/commands.proto index 50f17496d..ab2e6ceea 100644 --- a/pb/protos/commands.proto +++ b/pb/protos/commands.proto @@ -3037,6 +3037,30 @@ message Rpc { } } } + + message ListWithValue { + message Request { + string spaceId = 1; + google.protobuf.Value value = 2; + } + + message Response { + Error error = 1; + repeated string relationKeys = 2; + repeated int64 counters = 3; + + message Error { + Code code = 1; + string description = 2; + + enum Code { + NULL = 0; + UNKNOWN_ERROR = 1; + BAD_INPUT = 2; + } + } + } + } } message History { diff --git a/pb/protos/service/service.proto b/pb/protos/service/service.proto index 750f5fe0f..9055a9287 100644 --- a/pb/protos/service/service.proto +++ b/pb/protos/service/service.proto @@ -129,6 +129,7 @@ service ClientCommands { rpc ObjectCreateRelationOption (anytype.Rpc.Object.CreateRelationOption.Request) returns (anytype.Rpc.Object.CreateRelationOption.Response); rpc RelationListRemoveOption (anytype.Rpc.Relation.ListRemoveOption.Request) returns (anytype.Rpc.Relation.ListRemoveOption.Response); rpc RelationOptions (anytype.Rpc.Relation.Options.Request) returns (anytype.Rpc.Relation.Options.Response); + rpc RelationListWithValue (anytype.Rpc.Relation.ListWithValue.Request) returns (anytype.Rpc.Relation.ListWithValue.Response); // Object Relations // *** diff --git a/pb/service/service.pb.go b/pb/service/service.pb.go index 3e55a9433..69e398f3c 100644 --- a/pb/service/service.pb.go +++ b/pb/service/service.pb.go @@ -26,326 +26,327 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package func init() { proto.RegisterFile("pb/protos/service/service.proto", fileDescriptor_93a29dc403579097) } var fileDescriptor_93a29dc403579097 = []byte{ - // 5098 bytes of a gzipped FileDescriptorProto + // 5118 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x9d, 0xdd, 0x6f, 0x24, 0x49, 0x52, 0xc0, 0xb7, 0x5f, 0x58, 0xa8, 0xe3, 0x16, 0xe8, 0x85, 0x65, 0x6f, 0xb9, 0x9b, 0xef, 0x19, 0xcf, 0x8c, 0xed, 0xf6, 0xec, 0xcc, 0x7e, 0x1c, 0x7b, 0x48, 0xc8, 0x63, 0x8f, 0xbd, 0xe6, 0x6c, 0x8f, 0x71, 0xb7, 0x67, 0xa4, 0x95, 0x90, 0xa8, 0xa9, 0x0e, 0xb7, 0x0b, 0x57, 0x57, 0xd6, 0x55, - 0x65, 0xb7, 0xa7, 0x0f, 0x81, 0x40, 0x20, 0x10, 0x08, 0xc4, 0x89, 0xaf, 0x17, 0x1e, 0x90, 0xee, - 0xaf, 0xe1, 0xf1, 0x1e, 0x79, 0x84, 0xdd, 0x7f, 0xe4, 0x54, 0x99, 0x59, 0xf9, 0x11, 0x95, 0x91, - 0x55, 0xde, 0xa7, 0x19, 0x75, 0xfc, 0x22, 0x22, 0xb3, 0x32, 0x32, 0x33, 0xf2, 0xa3, 0xca, 0xd1, - 0xcd, 0xe2, 0xcd, 0x56, 0x51, 0x32, 0xce, 0xaa, 0xad, 0x0a, 0xca, 0x65, 0x9a, 0x40, 0xf3, 0xef, - 0x48, 0xfc, 0x3c, 0x7c, 0x37, 0xce, 0x57, 0x7c, 0x55, 0xc0, 0x47, 0x1f, 0x1a, 0x32, 0x61, 0xf3, - 0x79, 0x9c, 0x4f, 0x2b, 0x89, 0x7c, 0xf4, 0x81, 0x91, 0xc0, 0x12, 0x72, 0xae, 0x7e, 0x7f, 0xfa, - 0xf3, 0xff, 0x1f, 0x44, 0xef, 0xed, 0x64, 0x29, 0xe4, 0x7c, 0x47, 0x69, 0x0c, 0xbf, 0x8a, 0xbe, - 0xbb, 0x5d, 0x14, 0xfb, 0xc0, 0x5f, 0x41, 0x59, 0xa5, 0x2c, 0x1f, 0xde, 0x1d, 0x29, 0x07, 0xa3, - 0xd3, 0x22, 0x19, 0x6d, 0x17, 0xc5, 0xc8, 0x08, 0x47, 0xa7, 0xf0, 0x93, 0x05, 0x54, 0xfc, 0xa3, - 0x7b, 0x61, 0xa8, 0x2a, 0x58, 0x5e, 0xc1, 0xf0, 0x3c, 0xfa, 0xad, 0xed, 0xa2, 0x18, 0x03, 0xdf, - 0x85, 0xba, 0x02, 0x63, 0x1e, 0x73, 0x18, 0xae, 0xb5, 0x54, 0x5d, 0x40, 0xfb, 0x78, 0xd8, 0x0d, - 0x2a, 0x3f, 0x93, 0xe8, 0x3b, 0xb5, 0x9f, 0x8b, 0x05, 0x9f, 0xb2, 0xab, 0x7c, 0x78, 0xbb, 0xad, - 0xa8, 0x44, 0xda, 0xf6, 0x9d, 0x10, 0xa2, 0xac, 0xbe, 0x8e, 0x7e, 0xfd, 0x75, 0x9c, 0x65, 0xc0, - 0x77, 0x4a, 0xa8, 0x0b, 0xee, 0xea, 0x48, 0xd1, 0x48, 0xca, 0xb4, 0xdd, 0xbb, 0x41, 0x46, 0x19, - 0xfe, 0x2a, 0xfa, 0xae, 0x94, 0x9c, 0x42, 0xc2, 0x96, 0x50, 0x0e, 0xbd, 0x5a, 0x4a, 0x48, 0x3c, - 0xf2, 0x16, 0x84, 0x6d, 0xef, 0xb0, 0x7c, 0x09, 0x25, 0xf7, 0xdb, 0x56, 0xc2, 0xb0, 0x6d, 0x03, - 0x29, 0xdb, 0xff, 0x30, 0x88, 0xbe, 0xbf, 0x9d, 0x24, 0x6c, 0x91, 0xf3, 0x43, 0x96, 0xc4, 0xd9, - 0x61, 0x9a, 0x5f, 0x1e, 0xc3, 0xd5, 0xce, 0x45, 0xcd, 0xe7, 0x33, 0x18, 0x3e, 0x73, 0x9f, 0xaa, - 0x44, 0x47, 0x9a, 0x1d, 0xd9, 0xb0, 0xf6, 0xfd, 0xc9, 0xf5, 0x94, 0x54, 0x59, 0xfe, 0x65, 0x10, - 0xdd, 0xc0, 0x65, 0x19, 0xb3, 0x6c, 0x09, 0xa6, 0x34, 0x9f, 0x76, 0x18, 0x76, 0x71, 0x5d, 0x9e, - 0xcf, 0xae, 0xab, 0xa6, 0x4a, 0x94, 0x45, 0xef, 0xdb, 0xe1, 0x32, 0x86, 0x4a, 0x74, 0xa7, 0x47, - 0x74, 0x44, 0x28, 0x44, 0x7b, 0x7e, 0xdc, 0x07, 0x55, 0xde, 0xd2, 0x68, 0xa8, 0xbc, 0x65, 0xac, - 0xd2, 0xce, 0x1e, 0x7a, 0x2d, 0x58, 0x84, 0xf6, 0xf5, 0xa8, 0x07, 0xa9, 0x5c, 0xfd, 0x69, 0xf4, - 0x1b, 0xaf, 0x59, 0x79, 0x59, 0x15, 0x71, 0x02, 0xaa, 0x2b, 0xdc, 0x77, 0xb5, 0x1b, 0x29, 0xee, - 0x0d, 0x0f, 0xba, 0x30, 0x2b, 0x68, 0x1b, 0xe1, 0xcb, 0x02, 0xf0, 0x18, 0x64, 0x14, 0x6b, 0x21, - 0x15, 0xb4, 0x18, 0x52, 0xb6, 0x2f, 0xa3, 0xa1, 0xb1, 0xfd, 0xe6, 0xcf, 0x20, 0xe1, 0xdb, 0xd3, - 0x29, 0x6e, 0x15, 0xa3, 0x2b, 0x88, 0xd1, 0xf6, 0x74, 0x4a, 0xb5, 0x8a, 0x1f, 0x55, 0xce, 0xae, - 0xa2, 0x0f, 0x90, 0xb3, 0xc3, 0xb4, 0x12, 0x0e, 0x37, 0xc3, 0x56, 0x14, 0xa6, 0x9d, 0x8e, 0xfa, - 0xe2, 0xca, 0xf1, 0x5f, 0x0d, 0xa2, 0xef, 0x79, 0x3c, 0x9f, 0xc2, 0x9c, 0x2d, 0x61, 0xf8, 0xa4, - 0xdb, 0x9a, 0x24, 0xb5, 0xff, 0x8f, 0xaf, 0xa1, 0xe1, 0x09, 0x93, 0x31, 0x64, 0x90, 0x70, 0x32, - 0x4c, 0xa4, 0xb8, 0x33, 0x4c, 0x34, 0x66, 0xf5, 0xb0, 0x46, 0xb8, 0x0f, 0x7c, 0x67, 0x51, 0x96, - 0x90, 0x73, 0xb2, 0x2d, 0x0d, 0xd2, 0xd9, 0x96, 0x0e, 0xea, 0xa9, 0xcf, 0x3e, 0xf0, 0xed, 0x2c, - 0x23, 0xeb, 0x23, 0xc5, 0x9d, 0xf5, 0xd1, 0x98, 0xf2, 0x90, 0x44, 0xbf, 0x69, 0x3d, 0x31, 0x7e, - 0x90, 0x9f, 0xb3, 0x21, 0xfd, 0x2c, 0x84, 0x5c, 0xfb, 0x58, 0xeb, 0xe4, 0x3c, 0xd5, 0x78, 0xf1, - 0xb6, 0x60, 0x25, 0xdd, 0x2c, 0x52, 0xdc, 0x59, 0x0d, 0x8d, 0x29, 0x0f, 0x7f, 0x12, 0xbd, 0xa7, - 0x46, 0xc9, 0x66, 0x3e, 0xbb, 0xe7, 0x1d, 0x42, 0xf1, 0x84, 0x76, 0xbf, 0x83, 0x32, 0x83, 0x83, - 0x92, 0xa9, 0xc1, 0xe7, 0xae, 0x57, 0x0f, 0x0d, 0x3d, 0xf7, 0xc2, 0x50, 0xcb, 0xf6, 0x2e, 0x64, - 0x40, 0xda, 0x96, 0xc2, 0x0e, 0xdb, 0x1a, 0x52, 0xb6, 0xcb, 0xe8, 0x77, 0xf4, 0x63, 0xa9, 0xe7, - 0x51, 0x21, 0xaf, 0x07, 0xe9, 0x75, 0xa2, 0xde, 0x36, 0xa4, 0x7d, 0x6d, 0xf4, 0x83, 0x5b, 0xf5, - 0x51, 0x3d, 0xd0, 0x5f, 0x1f, 0xd4, 0xff, 0xee, 0x85, 0x21, 0x65, 0xfb, 0x1f, 0x07, 0xd1, 0x0f, - 0x94, 0xec, 0x45, 0x1e, 0xbf, 0xc9, 0x40, 0x4c, 0x89, 0xc7, 0xc0, 0xaf, 0x58, 0x79, 0x39, 0x5e, - 0xe5, 0x09, 0x31, 0xfd, 0xfb, 0xe1, 0x8e, 0xe9, 0x9f, 0x54, 0xb2, 0x32, 0x3e, 0x55, 0x51, 0xce, - 0x0a, 0x9c, 0xf1, 0x35, 0x35, 0xe0, 0xac, 0xa0, 0x32, 0x3e, 0x17, 0x69, 0x59, 0x3d, 0xaa, 0x87, - 0x4d, 0xbf, 0xd5, 0x23, 0x7b, 0x9c, 0xbc, 0x13, 0x42, 0xcc, 0xb0, 0xd5, 0x04, 0x30, 0xcb, 0xcf, - 0xd3, 0xd9, 0x59, 0x31, 0xad, 0xc3, 0xf8, 0x91, 0x3f, 0x42, 0x2d, 0x84, 0x18, 0xb6, 0x08, 0x54, - 0x79, 0xfb, 0x67, 0x93, 0x18, 0xa9, 0xae, 0xb4, 0x57, 0xb2, 0xf9, 0x21, 0xcc, 0xe2, 0x64, 0xa5, - 0xfa, 0xff, 0x27, 0xa1, 0x8e, 0x87, 0x69, 0x5d, 0x88, 0x4f, 0xaf, 0xa9, 0xa5, 0xca, 0xf3, 0xdf, - 0x83, 0xe8, 0x5e, 0x53, 0xfd, 0x8b, 0x38, 0x9f, 0x81, 0x6a, 0x4f, 0x59, 0xfa, 0xed, 0x7c, 0x7a, - 0x0a, 0x15, 0x8f, 0x4b, 0x3e, 0xfc, 0xc2, 0x5f, 0xc9, 0x90, 0x8e, 0x2e, 0xdb, 0x8f, 0xbe, 0x95, - 0xae, 0x69, 0xf5, 0x71, 0x3d, 0xb0, 0xa9, 0x21, 0xc0, 0x6d, 0x75, 0x21, 0xc1, 0x03, 0xc0, 0x9d, - 0x10, 0x62, 0x5a, 0x5d, 0x08, 0x0e, 0xf2, 0x65, 0xca, 0x61, 0x1f, 0x72, 0x28, 0xdb, 0xad, 0x2e, - 0x55, 0x5d, 0x84, 0x68, 0x75, 0x02, 0x35, 0x83, 0x8d, 0xe3, 0x4d, 0x4f, 0x8e, 0xeb, 0x01, 0x23, - 0xad, 0xe9, 0x71, 0xa3, 0x1f, 0x6c, 0x56, 0x77, 0x96, 0xcf, 0x53, 0x58, 0xb2, 0x4b, 0xbc, 0xba, - 0xb3, 0x4d, 0x48, 0x80, 0x58, 0xdd, 0x79, 0x41, 0x33, 0x83, 0x59, 0x7e, 0x5e, 0xa5, 0x70, 0x85, - 0x66, 0x30, 0x5b, 0xb9, 0x16, 0x13, 0x33, 0x98, 0x07, 0x53, 0x1e, 0x8e, 0xa3, 0x5f, 0x13, 0xc2, - 0x3f, 0x62, 0x69, 0x3e, 0xbc, 0xe9, 0x51, 0xaa, 0x05, 0xda, 0xea, 0x2d, 0x1a, 0x40, 0x25, 0xae, - 0x7f, 0xdd, 0x89, 0xf3, 0x04, 0x32, 0x6f, 0x89, 0x8d, 0x38, 0x58, 0x62, 0x07, 0x33, 0xa9, 0x83, - 0x10, 0xd6, 0xe3, 0xd7, 0xf8, 0x22, 0x2e, 0xd3, 0x7c, 0x36, 0xf4, 0xe9, 0x5a, 0x72, 0x22, 0x75, - 0xf0, 0x71, 0x28, 0x84, 0x95, 0xe2, 0x76, 0x51, 0x94, 0xf5, 0xb0, 0xe8, 0x0b, 0x61, 0x17, 0x09, - 0x86, 0x70, 0x0b, 0xf5, 0x7b, 0xdb, 0x85, 0x24, 0x4b, 0xf3, 0xa0, 0x37, 0x85, 0xf4, 0xf1, 0x66, - 0x50, 0x14, 0xbc, 0x87, 0x10, 0x2f, 0xa1, 0xa9, 0x99, 0xef, 0xc9, 0xd8, 0x40, 0x30, 0x78, 0x11, - 0x68, 0xd6, 0x69, 0x42, 0x7c, 0x14, 0x5f, 0x42, 0xfd, 0x80, 0xa1, 0x9e, 0xd7, 0x86, 0x3e, 0x7d, - 0x87, 0x20, 0xd6, 0x69, 0x7e, 0x52, 0xb9, 0x5a, 0x44, 0x1f, 0x08, 0xf9, 0x49, 0x5c, 0xf2, 0x34, - 0x49, 0x8b, 0x38, 0x6f, 0xf2, 0x7f, 0x5f, 0xbf, 0x6e, 0x51, 0xda, 0xe5, 0x66, 0x4f, 0x5a, 0xb9, - 0xfd, 0xcf, 0x41, 0x74, 0x1b, 0xfb, 0x3d, 0x81, 0x72, 0x9e, 0x8a, 0x65, 0x64, 0x25, 0x07, 0xe1, - 0xe1, 0xe7, 0x61, 0xa3, 0x2d, 0x05, 0x5d, 0x9a, 0x1f, 0x5e, 0x5f, 0x51, 0x15, 0xec, 0x8f, 0xa3, - 0x48, 0x2e, 0x57, 0xc4, 0x92, 0xd2, 0xed, 0xb5, 0x6a, 0x1d, 0xe3, 0xac, 0x27, 0x6f, 0x07, 0x08, - 0x33, 0x55, 0xc8, 0xdf, 0xc5, 0x4a, 0x79, 0xe8, 0xd5, 0x10, 0x22, 0x62, 0xaa, 0x40, 0x08, 0x2e, - 0xe8, 0xf8, 0x82, 0x5d, 0xf9, 0x0b, 0x5a, 0x4b, 0xc2, 0x05, 0x55, 0x84, 0xd9, 0xbb, 0x52, 0x05, - 0xf5, 0xed, 0x5d, 0x35, 0xc5, 0x08, 0xed, 0x5d, 0x61, 0x46, 0x19, 0x66, 0xd1, 0x6f, 0xdb, 0x86, - 0x9f, 0x33, 0x76, 0x39, 0x8f, 0xcb, 0xcb, 0xe1, 0x63, 0x5a, 0xb9, 0x61, 0xb4, 0xa3, 0xf5, 0x5e, - 0xac, 0x19, 0x16, 0x6c, 0x87, 0x75, 0xa2, 0x71, 0x56, 0x66, 0x68, 0x58, 0x70, 0x6c, 0x28, 0x84, - 0x18, 0x16, 0x08, 0xd4, 0x24, 0xd0, 0xca, 0xdb, 0x45, 0x2c, 0xd6, 0xed, 0xfe, 0x87, 0x22, 0x85, - 0x44, 0x02, 0xdd, 0x82, 0xcc, 0xac, 0x60, 0xd7, 0x64, 0x0c, 0x78, 0x25, 0xe6, 0x14, 0x6d, 0x0c, - 0xd4, 0x4a, 0xcc, 0x83, 0xe1, 0xf0, 0xdc, 0x2f, 0xe3, 0xe2, 0xc2, 0x1f, 0x9e, 0x42, 0x14, 0x0e, - 0xcf, 0x06, 0xc1, 0xb1, 0x34, 0x86, 0xb8, 0x4c, 0x2e, 0xfc, 0xb1, 0x24, 0x65, 0xe1, 0x58, 0xd2, - 0x0c, 0x8e, 0x25, 0x29, 0x78, 0x9d, 0xf2, 0x8b, 0x23, 0xe0, 0xb1, 0x3f, 0x96, 0x5c, 0x26, 0x1c, - 0x4b, 0x2d, 0xd6, 0x64, 0x49, 0xb6, 0xc3, 0xf1, 0xe2, 0x4d, 0x95, 0x94, 0xe9, 0x1b, 0x18, 0x06, - 0xac, 0x68, 0x88, 0xc8, 0x92, 0x48, 0xd8, 0x4c, 0x00, 0xca, 0x67, 0x23, 0x3b, 0x98, 0x56, 0x68, - 0x02, 0x68, 0x6c, 0x58, 0x04, 0x31, 0x01, 0xf8, 0x49, 0x5c, 0xbd, 0xfd, 0x92, 0x2d, 0x8a, 0xaa, - 0xa3, 0x7a, 0x08, 0x0a, 0x57, 0xaf, 0x0d, 0x2b, 0x9f, 0x6f, 0xa3, 0xdf, 0xb5, 0x1f, 0xe9, 0x59, - 0x5e, 0x69, 0xaf, 0x9b, 0xf4, 0x73, 0xb2, 0x30, 0x62, 0xcb, 0x2b, 0x80, 0x9b, 0x14, 0xa8, 0xf1, - 0xcc, 0x77, 0x81, 0xc7, 0x69, 0x56, 0x0d, 0x1f, 0xf8, 0x6d, 0x34, 0x72, 0x22, 0x05, 0xf2, 0x71, - 0xb8, 0xcf, 0xee, 0x2e, 0x8a, 0x2c, 0x4d, 0xda, 0x7b, 0x9f, 0x4a, 0x57, 0x8b, 0xc3, 0x7d, 0xd6, - 0xc6, 0xf0, 0xf8, 0x36, 0x06, 0x2e, 0xff, 0x33, 0x59, 0x15, 0xe0, 0x1f, 0xdf, 0x1c, 0x24, 0x3c, - 0xbe, 0x61, 0x14, 0xd7, 0x67, 0x0c, 0xfc, 0x30, 0x5e, 0xb1, 0x05, 0x31, 0x06, 0x69, 0x71, 0xb8, - 0x3e, 0x36, 0x66, 0xb2, 0x10, 0xed, 0xe1, 0x20, 0xe7, 0x50, 0xe6, 0x71, 0xb6, 0x97, 0xc5, 0xb3, - 0x6a, 0x48, 0xf4, 0x1b, 0x97, 0x22, 0xb2, 0x10, 0x9a, 0xf6, 0x3c, 0xc6, 0x83, 0x6a, 0x2f, 0x5e, - 0xb2, 0x32, 0xe5, 0xf4, 0x63, 0x34, 0x48, 0xe7, 0x63, 0x74, 0x50, 0xaf, 0xb7, 0xed, 0x32, 0xb9, - 0x48, 0x97, 0x30, 0x0d, 0x78, 0x6b, 0x90, 0x1e, 0xde, 0x2c, 0xd4, 0xd3, 0x68, 0x63, 0xb6, 0x28, - 0x13, 0x20, 0x1b, 0x4d, 0x8a, 0x3b, 0x1b, 0x4d, 0x63, 0xca, 0xc3, 0xdf, 0x0e, 0xa2, 0xdf, 0x93, - 0x52, 0x7b, 0x43, 0x72, 0x37, 0xae, 0x2e, 0xde, 0xb0, 0xb8, 0x9c, 0x0e, 0x3f, 0xf6, 0xd9, 0xf1, - 0xa2, 0xda, 0xf5, 0xd3, 0xeb, 0xa8, 0xe0, 0xc7, 0x7a, 0x98, 0x56, 0x56, 0x8f, 0xf3, 0x3e, 0x56, - 0x07, 0x09, 0x3f, 0x56, 0x8c, 0xe2, 0x01, 0x44, 0xc8, 0xe5, 0xe2, 0xff, 0x01, 0xa9, 0xef, 0xee, - 0x00, 0xac, 0x75, 0x72, 0x78, 0x7c, 0xac, 0x85, 0x6e, 0xb4, 0x6c, 0x52, 0x36, 0xfc, 0x11, 0x33, - 0xea, 0x8b, 0x93, 0x9e, 0x75, 0xaf, 0x08, 0x7b, 0x6e, 0xf5, 0x8c, 0x51, 0x5f, 0x9c, 0xf0, 0x6c, - 0x0d, 0x6b, 0x21, 0xcf, 0x9e, 0xa1, 0x6d, 0xd4, 0x17, 0xc7, 0x19, 0x85, 0x62, 0x9a, 0x79, 0xe1, - 0x71, 0xc0, 0x0e, 0x9e, 0x1b, 0xd6, 0x7b, 0xb1, 0xca, 0xe1, 0xdf, 0x0f, 0xa2, 0xef, 0x1b, 0x8f, - 0x47, 0x6c, 0x9a, 0x9e, 0xaf, 0x24, 0xf4, 0x2a, 0xce, 0x16, 0x50, 0x0d, 0x9f, 0x52, 0xd6, 0xda, - 0xac, 0x2e, 0xc1, 0xb3, 0x6b, 0xe9, 0xe0, 0xbe, 0xb3, 0x5d, 0x14, 0xd9, 0x6a, 0x02, 0xf3, 0x22, - 0x23, 0xfb, 0x8e, 0x83, 0x84, 0xfb, 0x0e, 0x46, 0x71, 0xa6, 0x39, 0x61, 0x75, 0x1e, 0xeb, 0xcd, - 0x34, 0x85, 0x28, 0x9c, 0x69, 0x36, 0x08, 0xce, 0x95, 0x26, 0x6c, 0x87, 0x65, 0x19, 0x24, 0xbc, - 0x7d, 0xa8, 0xa9, 0x35, 0x0d, 0x11, 0xce, 0x95, 0x10, 0x69, 0xd6, 0xff, 0xcd, 0x9a, 0x2b, 0x2e, - 0xe1, 0xf9, 0xea, 0x30, 0xcd, 0x2f, 0x87, 0xfe, 0xb4, 0xc0, 0x00, 0xc4, 0xfa, 0xdf, 0x0b, 0xe2, - 0xb5, 0xdd, 0x59, 0x3e, 0x65, 0xfe, 0xb5, 0x5d, 0x2d, 0x09, 0xaf, 0xed, 0x14, 0x81, 0x4d, 0x9e, - 0x02, 0x65, 0xb2, 0x96, 0x84, 0x4d, 0x2a, 0xc2, 0x37, 0x14, 0xaa, 0x5d, 0x62, 0x72, 0x28, 0x44, - 0xfb, 0xc2, 0x6b, 0x9d, 0x1c, 0x8e, 0xd0, 0x66, 0x91, 0xb7, 0x07, 0x3c, 0xb9, 0xf0, 0x47, 0xa8, - 0x83, 0x84, 0x23, 0x14, 0xa3, 0xb8, 0x4a, 0x13, 0xa6, 0x17, 0xa9, 0x0f, 0xfc, 0xf1, 0xd1, 0x5a, - 0xa0, 0xae, 0x75, 0x72, 0x78, 0x69, 0x74, 0x30, 0x17, 0xcf, 0xcc, 0x1b, 0xe4, 0x52, 0x16, 0x5e, - 0x1a, 0x69, 0x06, 0x97, 0x5e, 0x0a, 0xea, 0xc7, 0xe9, 0x2f, 0xbd, 0x91, 0x87, 0x4b, 0xef, 0x70, - 0xca, 0xc9, 0xbf, 0x0f, 0xa2, 0x9b, 0xb6, 0x97, 0x63, 0x56, 0xf7, 0x91, 0x57, 0x71, 0x96, 0x4e, - 0x63, 0x0e, 0x13, 0x76, 0x09, 0x39, 0xda, 0xb7, 0x71, 0x4b, 0x2b, 0xf9, 0x91, 0xa3, 0x40, 0xec, - 0xdb, 0xf4, 0x52, 0xc4, 0x71, 0x22, 0xe9, 0xb3, 0x0a, 0x76, 0xe2, 0x8a, 0x18, 0xc9, 0x1c, 0x24, - 0x1c, 0x27, 0x18, 0xc5, 0xf9, 0xaa, 0x94, 0xbf, 0x78, 0x5b, 0x40, 0x99, 0x42, 0x9e, 0x80, 0x3f, - 0x5f, 0xc5, 0x54, 0x38, 0x5f, 0xf5, 0xd0, 0xad, 0x6d, 0x0d, 0x3d, 0x38, 0xb5, 0xef, 0x25, 0x60, - 0x22, 0x70, 0x2f, 0x81, 0x40, 0x71, 0x25, 0x0d, 0xe0, 0xdd, 0x1a, 0x6c, 0x59, 0x09, 0x6e, 0x0d, - 0xd2, 0x74, 0x6b, 0xb3, 0x48, 0x33, 0xe3, 0xba, 0x9b, 0x74, 0x14, 0x7d, 0x6c, 0x77, 0x97, 0xf5, - 0x5e, 0xac, 0x7f, 0x77, 0xea, 0x14, 0xb2, 0x58, 0x4c, 0x21, 0x81, 0x2d, 0xa0, 0x86, 0xe9, 0xb3, - 0x3b, 0x65, 0xb1, 0xca, 0xe1, 0x5f, 0x0f, 0xa2, 0x8f, 0x7c, 0x1e, 0x5f, 0x16, 0xc2, 0xef, 0x93, - 0x6e, 0x5b, 0x92, 0x24, 0x2e, 0x5e, 0x84, 0x35, 0x54, 0x19, 0xfe, 0x3c, 0xfa, 0xb0, 0x11, 0x99, - 0x7b, 0x19, 0xaa, 0x00, 0x6e, 0x02, 0xa5, 0xcb, 0x8f, 0x39, 0xed, 0x7e, 0xab, 0x37, 0x6f, 0xd6, - 0x26, 0x6e, 0xb9, 0x2a, 0xb4, 0x36, 0xd1, 0x36, 0x94, 0x98, 0x58, 0x9b, 0x78, 0x30, 0x3c, 0x53, - 0x37, 0x48, 0xdd, 0x4f, 0x7c, 0x63, 0x9c, 0x36, 0x61, 0xf7, 0x92, 0x87, 0xdd, 0x20, 0x8e, 0x9d, - 0x46, 0xac, 0x96, 0x04, 0x8f, 0x43, 0x16, 0xd0, 0xb2, 0x60, 0xbd, 0x17, 0xab, 0x1c, 0xfe, 0x65, - 0xf4, 0xbd, 0x56, 0xc5, 0xf6, 0x20, 0xe6, 0x8b, 0x12, 0xa6, 0xc3, 0xad, 0x8e, 0x72, 0x37, 0xa0, - 0x76, 0xfd, 0xa4, 0xbf, 0x42, 0x2b, 0x77, 0x6d, 0x38, 0xd9, 0xc4, 0xba, 0x0c, 0x4f, 0x43, 0x26, - 0x5d, 0x36, 0x98, 0xbb, 0xd2, 0x3a, 0xad, 0xe5, 0xa7, 0x1d, 0xc8, 0xdb, 0xcb, 0x38, 0xcd, 0xc4, - 0x71, 0xc9, 0xc7, 0x21, 0xa3, 0x0e, 0x1a, 0x5c, 0x7e, 0x92, 0x2a, 0xad, 0x51, 0x52, 0xf4, 0x37, - 0x6b, 0xd9, 0xb2, 0x41, 0xf7, 0x4a, 0xcf, 0xaa, 0x65, 0xb3, 0x27, 0xad, 0xdc, 0xf2, 0x66, 0xdb, - 0xae, 0xfe, 0xd9, 0x0e, 0x72, 0x9f, 0x57, 0xa5, 0xea, 0x89, 0xf4, 0xcd, 0x9e, 0xb4, 0xf2, 0xfa, - 0x17, 0xd1, 0x87, 0x6d, 0xaf, 0x6a, 0x52, 0xd8, 0xea, 0x34, 0x85, 0xe6, 0x85, 0x27, 0xfd, 0x15, - 0x4c, 0xaa, 0xff, 0x65, 0x5a, 0x71, 0x56, 0xae, 0xc6, 0x17, 0xec, 0xaa, 0xb9, 0x7b, 0xec, 0xf6, - 0x56, 0x05, 0x8c, 0x2c, 0x82, 0x48, 0xf5, 0xfd, 0x64, 0xcb, 0x95, 0xb9, 0xa3, 0x5c, 0x11, 0xae, - 0x2c, 0xa2, 0xc3, 0x95, 0x4b, 0x9a, 0xb1, 0xaa, 0xa9, 0x95, 0xb9, 0x50, 0xbd, 0xe6, 0x2f, 0x6a, - 0xfb, 0x52, 0xf5, 0xc3, 0x6e, 0xd0, 0x64, 0x0f, 0x4a, 0xbc, 0x9b, 0x9e, 0x9f, 0xeb, 0x3a, 0xf9, - 0x4b, 0x6a, 0x23, 0x44, 0xf6, 0x40, 0xa0, 0x26, 0x19, 0xdd, 0x4b, 0x33, 0x10, 0x67, 0x6f, 0x2f, - 0xcf, 0xcf, 0x33, 0x16, 0x4f, 0x51, 0x32, 0x5a, 0x8b, 0x47, 0xb6, 0x9c, 0x48, 0x46, 0x7d, 0x9c, - 0x39, 0x79, 0xa9, 0xa5, 0xa7, 0x90, 0xb0, 0x3c, 0x49, 0x33, 0x7c, 0x15, 0x4b, 0x68, 0x6a, 0x21, - 0x71, 0xf2, 0xd2, 0x82, 0xcc, 0x24, 0x55, 0x8b, 0xea, 0x6e, 0xdf, 0x94, 0xff, 0x7e, 0x5b, 0xd1, - 0x12, 0x13, 0x93, 0x94, 0x07, 0x33, 0x6b, 0xb2, 0x5a, 0x78, 0x56, 0x08, 0xe3, 0xb7, 0xda, 0x5a, - 0x52, 0x42, 0xac, 0xc9, 0x5c, 0xc2, 0xac, 0x2d, 0xea, 0xdf, 0x77, 0xd9, 0x55, 0x2e, 0x8c, 0xde, - 0x69, 0xab, 0x34, 0x32, 0x62, 0x6d, 0x81, 0x19, 0x65, 0xf8, 0xc7, 0xd1, 0xaf, 0x0a, 0xc3, 0x25, - 0x2b, 0x86, 0x37, 0x3c, 0x0a, 0xa5, 0x75, 0x6b, 0xea, 0x26, 0x29, 0x37, 0x97, 0xff, 0x74, 0x6c, - 0x9c, 0x55, 0xf1, 0x0c, 0x86, 0xf7, 0x88, 0x16, 0x17, 0x52, 0xe2, 0xf2, 0x5f, 0x9b, 0x72, 0xa3, - 0xe2, 0x98, 0x4d, 0x95, 0x75, 0x4f, 0x0d, 0xb5, 0x30, 0x14, 0x15, 0x36, 0x64, 0x8e, 0x4b, 0x8e, - 0xe3, 0x65, 0x3a, 0xd3, 0x13, 0x8e, 0x1c, 0xb7, 0x2a, 0x74, 0x5c, 0x62, 0x98, 0x91, 0x05, 0x11, - 0xc7, 0x25, 0x24, 0xac, 0x7c, 0xfe, 0xdb, 0x20, 0xba, 0x65, 0x98, 0xfd, 0x66, 0x17, 0xeb, 0x20, - 0x3f, 0x67, 0xaf, 0x53, 0x7e, 0x71, 0x98, 0xe6, 0x97, 0xd5, 0xf0, 0x33, 0xca, 0xa4, 0x9f, 0xd7, - 0x45, 0xf9, 0xfc, 0xda, 0x7a, 0x26, 0x83, 0x6c, 0xb6, 0x78, 0xcc, 0xb9, 0xa8, 0xd4, 0x40, 0x19, - 0xa4, 0xde, 0x09, 0xc2, 0x1c, 0x91, 0x41, 0x86, 0x78, 0xd3, 0xc4, 0xda, 0x79, 0xc6, 0x72, 0xdc, - 0xc4, 0xc6, 0x42, 0x2d, 0x24, 0x9a, 0xb8, 0x05, 0x99, 0xf1, 0xb8, 0x11, 0xc9, 0xdd, 0x88, 0xed, - 0x2c, 0x43, 0xe3, 0xb1, 0x56, 0xd5, 0x00, 0x31, 0x1e, 0x7b, 0x41, 0xe5, 0xe7, 0x34, 0xfa, 0x4e, - 0xfd, 0x48, 0x4f, 0x4a, 0x58, 0xa6, 0x80, 0x8f, 0xf0, 0x2d, 0x09, 0xd1, 0xff, 0x5d, 0xc2, 0xf4, - 0xac, 0xb3, 0xbc, 0x2a, 0xb2, 0xb8, 0xba, 0x50, 0x07, 0xaf, 0x6e, 0x9d, 0x1b, 0x21, 0x3e, 0x7a, - 0xbd, 0xdf, 0x41, 0x99, 0x41, 0xbd, 0x91, 0xe9, 0x21, 0xe6, 0x81, 0x5f, 0xb5, 0x35, 0xcc, 0xac, - 0x75, 0x72, 0x66, 0x27, 0x78, 0x3f, 0xce, 0x32, 0x28, 0x57, 0x8d, 0xec, 0x28, 0xce, 0xd3, 0x73, - 0xa8, 0x38, 0xda, 0x09, 0x56, 0xd4, 0x08, 0x63, 0xc4, 0x4e, 0x70, 0x00, 0x37, 0xd9, 0x3c, 0xf2, - 0x7c, 0x90, 0x4f, 0xe1, 0x2d, 0xca, 0xe6, 0xb1, 0x1d, 0xc1, 0x10, 0xd9, 0x3c, 0xc5, 0x9a, 0x1d, - 0xd1, 0xe7, 0x19, 0x4b, 0x2e, 0xd5, 0x14, 0xe0, 0x36, 0xb0, 0x90, 0xe0, 0x39, 0xe0, 0x4e, 0x08, - 0x31, 0x93, 0x80, 0x10, 0x9c, 0x42, 0x91, 0xc5, 0x09, 0xbe, 0xc7, 0x21, 0x75, 0x94, 0x8c, 0x98, - 0x04, 0x30, 0x83, 0x8a, 0xab, 0xee, 0x87, 0xf8, 0x8a, 0x8b, 0xae, 0x87, 0xdc, 0x09, 0x21, 0x66, - 0x1a, 0x14, 0x82, 0x71, 0x91, 0xa5, 0x1c, 0x75, 0x03, 0xa9, 0x21, 0x24, 0x44, 0x37, 0x70, 0x09, - 0x64, 0xf2, 0x08, 0xca, 0x19, 0x78, 0x4d, 0x0a, 0x49, 0xd0, 0x64, 0x43, 0x98, 0xeb, 0x7e, 0xb2, - 0xee, 0xac, 0x58, 0xa1, 0xeb, 0x7e, 0xaa, 0x5a, 0xac, 0x58, 0x11, 0xd7, 0xfd, 0x1c, 0x00, 0x15, - 0xf1, 0x24, 0xae, 0xb8, 0xbf, 0x88, 0x42, 0x12, 0x2c, 0x62, 0x43, 0x98, 0x39, 0x5a, 0x16, 0x71, - 0xc1, 0xd1, 0x1c, 0xad, 0x0a, 0x60, 0x9d, 0xcc, 0xde, 0x24, 0xe5, 0x66, 0x24, 0x91, 0xad, 0x02, - 0x7c, 0x2f, 0x85, 0x6c, 0x5a, 0xa1, 0x91, 0x44, 0x3d, 0xf7, 0x46, 0x4a, 0x8c, 0x24, 0x6d, 0x0a, - 0x85, 0x92, 0xda, 0x37, 0xf6, 0xd5, 0x0e, 0x6d, 0x19, 0xdf, 0x09, 0x21, 0x66, 0x7c, 0x6a, 0x0a, - 0xbd, 0x13, 0x97, 0x65, 0x5a, 0x4f, 0xfe, 0x0f, 0xfc, 0x05, 0x6a, 0xe4, 0xc4, 0xf8, 0xe4, 0xe3, - 0x50, 0xf7, 0x6a, 0x06, 0x6e, 0x5f, 0xc1, 0xf0, 0xd0, 0x7d, 0x37, 0xc8, 0x98, 0x8c, 0x53, 0x48, - 0xac, 0xa3, 0x45, 0xdf, 0xd3, 0xf4, 0x9c, 0x2c, 0x3e, 0xe8, 0xc2, 0xac, 0xeb, 0xf8, 0xda, 0xc5, - 0x11, 0x5b, 0xc2, 0x84, 0xbd, 0x78, 0x9b, 0x56, 0x3c, 0xcd, 0x67, 0x6a, 0xe6, 0x7e, 0x46, 0x58, - 0xf2, 0xc1, 0xc4, 0x75, 0xfc, 0x4e, 0x25, 0x93, 0x40, 0xa0, 0xb2, 0x1c, 0xc3, 0x95, 0x37, 0x81, - 0xc0, 0x16, 0x35, 0x47, 0x24, 0x10, 0x21, 0xde, 0xec, 0xa3, 0x68, 0xe7, 0xea, 0x9d, 0xc5, 0x09, - 0x6b, 0x72, 0x39, 0xca, 0x1a, 0x06, 0x89, 0xa5, 0x6c, 0x50, 0xc1, 0xac, 0x2f, 0xb5, 0x7f, 0xd3, - 0xc5, 0x1e, 0x12, 0x76, 0xda, 0xdd, 0xec, 0x51, 0x0f, 0xd2, 0xe3, 0xca, 0x9c, 0x8f, 0x53, 0xae, - 0xda, 0xc7, 0xe3, 0x8f, 0x7a, 0x90, 0xd6, 0x9e, 0x8c, 0x5d, 0xad, 0xe7, 0x71, 0x72, 0x39, 0x2b, - 0xd9, 0x22, 0x9f, 0xee, 0xb0, 0x8c, 0x95, 0x68, 0x4f, 0xc6, 0x29, 0x35, 0x42, 0x89, 0x3d, 0x99, - 0x0e, 0x15, 0x93, 0xc1, 0xd9, 0xa5, 0xd8, 0xce, 0xd2, 0x19, 0x5e, 0x51, 0x3b, 0x86, 0x04, 0x40, - 0x64, 0x70, 0x5e, 0xd0, 0x13, 0x44, 0x72, 0xc5, 0xcd, 0xd3, 0x24, 0xce, 0xa4, 0xbf, 0x2d, 0xda, - 0x8c, 0x03, 0x76, 0x06, 0x91, 0x47, 0xc1, 0x53, 0xcf, 0xc9, 0xa2, 0xcc, 0x0f, 0x72, 0xce, 0xc8, - 0x7a, 0x36, 0x40, 0x67, 0x3d, 0x2d, 0x10, 0x0d, 0xab, 0x13, 0x78, 0x5b, 0x97, 0xa6, 0xfe, 0xc7, - 0x37, 0xac, 0xd6, 0xbf, 0x8f, 0x94, 0x3c, 0x34, 0xac, 0x22, 0x0e, 0x55, 0x46, 0x39, 0x91, 0x01, - 0x13, 0xd0, 0x76, 0xc3, 0xe4, 0x61, 0x37, 0xe8, 0xf7, 0x33, 0xe6, 0xab, 0x0c, 0x42, 0x7e, 0x04, - 0xd0, 0xc7, 0x4f, 0x03, 0x9a, 0xed, 0x16, 0xa7, 0x3e, 0x17, 0x90, 0x5c, 0xb6, 0xae, 0xfb, 0xb8, - 0x05, 0x95, 0x08, 0xb1, 0xdd, 0x42, 0xa0, 0xfe, 0x26, 0x3a, 0x48, 0x58, 0x1e, 0x6a, 0xa2, 0x5a, - 0xde, 0xa7, 0x89, 0x14, 0x67, 0x16, 0xbf, 0x5a, 0xaa, 0x22, 0x53, 0x36, 0xd3, 0x3a, 0x61, 0xc1, - 0x86, 0x88, 0xc5, 0x2f, 0x09, 0x9b, 0x9c, 0x1c, 0xfb, 0x3c, 0x6a, 0xdf, 0x1d, 0x6e, 0x59, 0x39, - 0xa2, 0xef, 0x0e, 0x53, 0x2c, 0x5d, 0x49, 0x19, 0x23, 0x1d, 0x56, 0xdc, 0x38, 0xd9, 0xe8, 0x07, - 0x9b, 0x25, 0x8f, 0xe3, 0x73, 0x27, 0x83, 0xb8, 0x94, 0x5e, 0x37, 0x03, 0x86, 0x0c, 0x46, 0x2c, - 0x79, 0x02, 0x38, 0x1a, 0xc2, 0x1c, 0xcf, 0x3b, 0x2c, 0xe7, 0x90, 0x73, 0xdf, 0x10, 0xe6, 0x1a, - 0x53, 0x60, 0x68, 0x08, 0xa3, 0x14, 0x50, 0xdc, 0x8a, 0xfd, 0x20, 0xe0, 0xc7, 0xf1, 0xdc, 0x9b, - 0xb1, 0xc9, 0xbd, 0x1e, 0x29, 0x0f, 0xc5, 0x2d, 0xe2, 0xac, 0x03, 0x37, 0xdb, 0xcb, 0x24, 0x2e, - 0x67, 0x7a, 0x77, 0x63, 0x3a, 0x7c, 0x42, 0xdb, 0x71, 0x49, 0xe2, 0xc0, 0x2d, 0xac, 0x81, 0x86, - 0x9d, 0x83, 0x79, 0x3c, 0xd3, 0x35, 0xf5, 0xd4, 0x40, 0xc8, 0x5b, 0x55, 0x7d, 0xd8, 0x0d, 0x22, - 0x3f, 0xaf, 0xd2, 0x29, 0xb0, 0x80, 0x1f, 0x21, 0xef, 0xe3, 0x07, 0x83, 0x28, 0x7b, 0xab, 0xeb, - 0x2d, 0x57, 0x74, 0xdb, 0xf9, 0x54, 0xad, 0x63, 0x47, 0xc4, 0xe3, 0x41, 0x5c, 0x28, 0x7b, 0x23, - 0x78, 0xd4, 0x47, 0x9b, 0x0d, 0xda, 0x50, 0x1f, 0xd5, 0xfb, 0xaf, 0x7d, 0xfa, 0xa8, 0x0f, 0x56, - 0x3e, 0x7f, 0xaa, 0xfa, 0xe8, 0x6e, 0xcc, 0xe3, 0x3a, 0x6f, 0x7f, 0x95, 0xc2, 0x95, 0x5a, 0x08, - 0x7b, 0xea, 0xdb, 0x50, 0x23, 0xf1, 0xd2, 0x18, 0x5a, 0x15, 0x6f, 0xf5, 0xe6, 0x03, 0xbe, 0xd5, - 0x0a, 0xa1, 0xd3, 0x37, 0x5a, 0x2a, 0x6c, 0xf5, 0xe6, 0x03, 0xbe, 0xd5, 0xdb, 0xa8, 0x9d, 0xbe, - 0xd1, 0x2b, 0xa9, 0x5b, 0xbd, 0x79, 0xe5, 0xfb, 0x6f, 0x9a, 0x8e, 0x6b, 0x3b, 0xaf, 0xf3, 0xb0, - 0x84, 0xa7, 0x4b, 0xf0, 0xa5, 0x93, 0xae, 0x3d, 0x8d, 0x86, 0xd2, 0x49, 0x5a, 0xc5, 0xfa, 0x84, - 0x89, 0xaf, 0x14, 0x27, 0xac, 0x4a, 0xc5, 0x81, 0xf9, 0xb3, 0x1e, 0x46, 0x1b, 0x38, 0xb4, 0x68, - 0x0a, 0x29, 0x99, 0xe3, 0x46, 0x07, 0x35, 0xb7, 0x7b, 0x37, 0x02, 0xf6, 0xda, 0x97, 0x7c, 0x37, - 0x7b, 0xd2, 0xe6, 0xe0, 0xcf, 0x61, 0xec, 0x13, 0xc7, 0x50, 0xab, 0x7a, 0x0f, 0x1d, 0x9f, 0xf4, - 0x57, 0x50, 0xee, 0xff, 0xae, 0x59, 0x57, 0x60, 0xff, 0xaa, 0x13, 0x3c, 0xed, 0x63, 0x11, 0x75, - 0x84, 0x67, 0xd7, 0xd2, 0x51, 0x05, 0xf9, 0xaf, 0x41, 0x74, 0xc7, 0x5b, 0x10, 0xf7, 0xec, 0xf9, - 0xf7, 0xfb, 0xd8, 0xf6, 0x9f, 0x41, 0x7f, 0xf1, 0x6d, 0x54, 0x55, 0xe9, 0xfe, 0xa9, 0x59, 0xde, - 0x37, 0x1a, 0xe2, 0x0d, 0x8c, 0x97, 0xe5, 0x14, 0x4a, 0xd5, 0x63, 0x43, 0x41, 0x67, 0x60, 0xdc, - 0x6f, 0x3f, 0xbd, 0xa6, 0x96, 0xf5, 0xb9, 0x1d, 0x07, 0x56, 0x6f, 0xd6, 0x59, 0xe5, 0x09, 0x59, - 0xb6, 0x68, 0x5c, 0xa0, 0xcf, 0xae, 0xab, 0x46, 0xf5, 0x64, 0x0b, 0x16, 0x6f, 0xef, 0x3f, 0xeb, - 0x69, 0xd8, 0x79, 0x9f, 0xff, 0x93, 0xeb, 0x29, 0xa9, 0xb2, 0xfc, 0x7c, 0x10, 0xdd, 0x77, 0x58, - 0x73, 0xda, 0x81, 0xf6, 0x64, 0x7e, 0x14, 0xb0, 0x4f, 0x29, 0xe9, 0xc2, 0xfd, 0xc1, 0xb7, 0x53, - 0x36, 0xdf, 0xa6, 0x71, 0x54, 0xf6, 0xd2, 0x8c, 0x43, 0xd9, 0xfe, 0x36, 0x8d, 0x6b, 0x57, 0x52, - 0x23, 0xfa, 0xdb, 0x34, 0x01, 0xdc, 0xfa, 0x36, 0x8d, 0xc7, 0xb3, 0xf7, 0xdb, 0x34, 0x5e, 0x6b, - 0xc1, 0x6f, 0xd3, 0x84, 0x35, 0xa8, 0xc9, 0xa7, 0x29, 0x82, 0xdc, 0x55, 0xef, 0x65, 0xd1, 0xdd, - 0x64, 0x7f, 0x7a, 0x1d, 0x15, 0x62, 0xfa, 0x95, 0x9c, 0xb8, 0x11, 0xd7, 0xe3, 0x99, 0x3a, 0xb7, - 0xe2, 0xb6, 0x7a, 0xf3, 0xca, 0xf7, 0x4f, 0xd4, 0xda, 0x4b, 0x4f, 0x36, 0xac, 0x14, 0xef, 0x37, - 0xae, 0x87, 0x26, 0x8f, 0xda, 0x82, 0xdd, 0xf2, 0x1b, 0xfd, 0x60, 0xa2, 0xba, 0x35, 0xa1, 0x1a, - 0x7d, 0xd4, 0x65, 0x08, 0x35, 0xf9, 0x56, 0x6f, 0x9e, 0x98, 0xe4, 0xa4, 0x6f, 0xd9, 0xda, 0x3d, - 0x8c, 0xb9, 0x6d, 0xfd, 0xa4, 0xbf, 0x82, 0x72, 0xbf, 0x54, 0x49, 0xad, 0xed, 0x5e, 0xb4, 0xf3, - 0x66, 0x97, 0xa9, 0xb1, 0xd3, 0xcc, 0xa3, 0xbe, 0x78, 0x28, 0xbd, 0xb1, 0x27, 0xf8, 0xae, 0xf4, - 0xc6, 0x3b, 0xc9, 0x7f, 0x72, 0x3d, 0x25, 0x55, 0x96, 0x7f, 0x1d, 0x44, 0x37, 0xc9, 0xb2, 0xa8, - 0x38, 0xf8, 0xac, 0xaf, 0x65, 0x14, 0x0f, 0x9f, 0x5f, 0x5b, 0x4f, 0x15, 0xea, 0x3f, 0x06, 0xd1, - 0xad, 0x40, 0xa1, 0x64, 0x80, 0x5c, 0xc3, 0xba, 0x1b, 0x28, 0x3f, 0xbc, 0xbe, 0x22, 0x35, 0xdd, - 0xdb, 0xf8, 0xb8, 0xfd, 0xd1, 0x96, 0x80, 0xed, 0x31, 0xfd, 0xd1, 0x96, 0x6e, 0x2d, 0xbc, 0x05, - 0x55, 0x27, 0x25, 0x6a, 0x65, 0xe4, 0xdb, 0x82, 0x12, 0x39, 0x0b, 0x5a, 0x11, 0xad, 0x75, 0x72, - 0x3e, 0x27, 0x2f, 0xde, 0x16, 0x71, 0x3e, 0xa5, 0x9d, 0x48, 0x79, 0xb7, 0x13, 0xcd, 0xe1, 0xad, - 0xbb, 0x5a, 0x7a, 0xca, 0x9a, 0x65, 0xde, 0x23, 0x4a, 0x5f, 0x23, 0xc1, 0xad, 0xbb, 0x16, 0x4a, - 0x78, 0x53, 0x39, 0x6d, 0xc8, 0x1b, 0x4a, 0x65, 0x1f, 0xf7, 0x41, 0xd1, 0x02, 0x42, 0x7b, 0xd3, - 0x27, 0x02, 0x1b, 0x21, 0x2b, 0xad, 0x53, 0x81, 0xcd, 0x9e, 0x34, 0xe1, 0x76, 0x0c, 0xfc, 0x4b, - 0x88, 0xa7, 0x50, 0x06, 0xdd, 0x6a, 0xaa, 0x97, 0x5b, 0x9b, 0xf6, 0xb9, 0xdd, 0x61, 0xd9, 0x62, - 0x9e, 0xab, 0xc6, 0x24, 0xdd, 0xda, 0x54, 0xb7, 0x5b, 0x44, 0xe3, 0x4d, 0x4b, 0xe3, 0x56, 0xa4, - 0x97, 0x8f, 0xc3, 0x66, 0x9c, 0xac, 0x72, 0xbd, 0x17, 0x4b, 0xd7, 0x53, 0x85, 0x51, 0x47, 0x3d, - 0x51, 0x24, 0x6d, 0xf6, 0xa4, 0xf1, 0xee, 0xa1, 0xe5, 0x56, 0xc7, 0xd3, 0x56, 0x87, 0xad, 0x56, - 0x48, 0x3d, 0xe9, 0xaf, 0x80, 0xf7, 0x6a, 0x55, 0x54, 0xd5, 0xeb, 0xa2, 0xbd, 0x34, 0xcb, 0x86, - 0xeb, 0x81, 0x30, 0x69, 0xa0, 0xe0, 0x5e, 0xad, 0x07, 0x26, 0x22, 0xb9, 0xd9, 0xdb, 0xcc, 0x87, - 0x5d, 0x76, 0x04, 0xd5, 0x2b, 0x92, 0x6d, 0x1a, 0xed, 0xb7, 0x59, 0x8f, 0x5a, 0xd7, 0x76, 0x14, - 0x7e, 0x70, 0xad, 0x0a, 0x6f, 0xf5, 0xe6, 0xd1, 0x65, 0x00, 0x41, 0x89, 0x99, 0xe5, 0x1e, 0x65, - 0xc2, 0x99, 0x49, 0xee, 0x77, 0x50, 0x68, 0xcf, 0x52, 0x76, 0xa3, 0xd7, 0xe9, 0x74, 0x06, 0xdc, - 0x7b, 0x8e, 0x65, 0x03, 0xc1, 0x73, 0x2c, 0x04, 0xa2, 0xa6, 0x93, 0xbf, 0xeb, 0xcd, 0xda, 0x83, - 0xa9, 0xaf, 0xe9, 0x94, 0xb2, 0x45, 0x85, 0x9a, 0xce, 0x4b, 0xa3, 0xd1, 0x40, 0xbb, 0x55, 0x2f, - 0xd1, 0x3f, 0x0e, 0x99, 0x41, 0x6f, 0xd2, 0xaf, 0xf7, 0x62, 0xd1, 0x8c, 0x62, 0x1c, 0xa6, 0xf3, - 0x94, 0xfb, 0x66, 0x14, 0xcb, 0x46, 0x8d, 0x84, 0x66, 0x94, 0x36, 0x4a, 0x55, 0xaf, 0xce, 0x11, - 0x0e, 0xa6, 0xe1, 0xea, 0x49, 0xa6, 0x5f, 0xf5, 0x34, 0xdb, 0x3a, 0x76, 0xcd, 0x75, 0xc8, 0xf0, - 0x0b, 0xb5, 0x58, 0xf6, 0xc4, 0xb6, 0x78, 0xb9, 0x12, 0x83, 0xa1, 0x51, 0x87, 0x52, 0xc0, 0xc7, - 0x09, 0x35, 0xd7, 0x9c, 0x0c, 0x17, 0x05, 0xc4, 0x65, 0x9c, 0x27, 0xde, 0xc5, 0xa9, 0x30, 0xd8, - 0x22, 0x43, 0x8b, 0x53, 0x52, 0x03, 0x1d, 0xea, 0xbb, 0xaf, 0x45, 0x7a, 0xba, 0x82, 0x7e, 0xff, - 0xd0, 0x7d, 0x2b, 0xf2, 0x51, 0x0f, 0x12, 0x1f, 0xea, 0x37, 0x80, 0xde, 0x96, 0x97, 0x4e, 0x3f, - 0x0e, 0x98, 0x72, 0xd1, 0xd0, 0x42, 0x98, 0x56, 0x41, 0x41, 0xad, 0x13, 0x5c, 0xe0, 0x3f, 0x86, - 0x95, 0x2f, 0xa8, 0x4d, 0x7e, 0x2a, 0x90, 0x50, 0x50, 0xb7, 0x51, 0x94, 0x67, 0xda, 0xeb, 0xa0, - 0x07, 0x01, 0x7d, 0x7b, 0xe9, 0xb3, 0xd6, 0xc9, 0xa1, 0x9e, 0xb3, 0x9b, 0x2e, 0x9d, 0x53, 0x0c, - 0x4f, 0x41, 0x77, 0xd3, 0xa5, 0xff, 0x10, 0x63, 0xbd, 0x17, 0x8b, 0x2f, 0x0c, 0xc4, 0x1c, 0xde, - 0x36, 0x27, 0xf9, 0x9e, 0xe2, 0x0a, 0x79, 0xeb, 0x28, 0xff, 0x61, 0x37, 0x68, 0xae, 0xe7, 0x9e, - 0x94, 0x2c, 0x81, 0xaa, 0x52, 0x5f, 0xb2, 0x73, 0xef, 0x3f, 0x29, 0xd9, 0x08, 0x7d, 0xc7, 0xee, - 0x5e, 0x18, 0x52, 0xb6, 0xbf, 0x8c, 0xde, 0x3d, 0x64, 0xb3, 0x31, 0xe4, 0xd3, 0xe1, 0x0f, 0xdc, - 0x0b, 0xb1, 0x6c, 0x36, 0xaa, 0x7f, 0xd6, 0xf6, 0x6e, 0x50, 0x62, 0x73, 0xa5, 0x6f, 0x17, 0xde, - 0x2c, 0x66, 0x63, 0x1e, 0x73, 0x74, 0xa5, 0x4f, 0xfc, 0x3e, 0xaa, 0x05, 0xc4, 0x95, 0x3e, 0x07, - 0x40, 0xf6, 0x26, 0x25, 0x80, 0xd7, 0x5e, 0x2d, 0x08, 0xda, 0x53, 0x80, 0x99, 0x75, 0xb5, 0xbd, - 0x3a, 0xb1, 0xc5, 0x57, 0xf0, 0x8c, 0x8e, 0x90, 0x12, 0xb3, 0x6e, 0x9b, 0x32, 0xc1, 0x20, 0xab, - 0x2f, 0xbe, 0xad, 0xb1, 0x98, 0xcf, 0xe3, 0x72, 0x85, 0x82, 0x41, 0xd5, 0xd2, 0x02, 0x88, 0x60, - 0xf0, 0x82, 0x26, 0xca, 0x9b, 0xc7, 0x9c, 0x5c, 0xee, 0xb3, 0x92, 0x2d, 0x78, 0x9a, 0x03, 0xfe, - 0xbe, 0x82, 0x7e, 0xa0, 0x36, 0x43, 0x44, 0x39, 0xc5, 0x9a, 0xac, 0x50, 0x10, 0xf2, 0x76, 0xa0, - 0xf8, 0x1e, 0x6c, 0xc5, 0x59, 0x89, 0x4f, 0x07, 0xa5, 0x15, 0x0c, 0x11, 0x59, 0x21, 0x09, 0xa3, - 0xb6, 0x3f, 0x49, 0xf3, 0x99, 0xb7, 0xed, 0x4f, 0xec, 0xaf, 0x29, 0xde, 0xa2, 0x01, 0x33, 0xbe, - 0xcb, 0x87, 0x26, 0xbf, 0x61, 0xa4, 0xde, 0x92, 0xf4, 0x3e, 0x74, 0x9b, 0x20, 0xc6, 0x77, 0x3f, - 0x89, 0x5c, 0xbd, 0x2c, 0x20, 0x87, 0x69, 0x73, 0x07, 0xce, 0xe7, 0xca, 0x21, 0x82, 0xae, 0x30, - 0x69, 0x46, 0x55, 0x21, 0x3f, 0x5d, 0xe4, 0x27, 0x25, 0x3b, 0x4f, 0x33, 0x28, 0xd1, 0xa8, 0x2a, - 0xd5, 0x2d, 0x39, 0x31, 0xaa, 0xfa, 0x38, 0x73, 0x99, 0x42, 0x48, 0x9d, 0x8f, 0x1a, 0x4f, 0xca, - 0x38, 0xc1, 0x97, 0x29, 0xa4, 0x8d, 0x36, 0x46, 0xec, 0xa4, 0x05, 0x70, 0x13, 0xe9, 0x47, 0xc0, - 0xcb, 0x34, 0xa9, 0xc6, 0xc0, 0x4f, 0xe2, 0x32, 0x9e, 0x03, 0x87, 0x12, 0x47, 0xba, 0x42, 0x46, - 0x0e, 0x43, 0x44, 0x3a, 0xc5, 0x2a, 0x87, 0x7f, 0x18, 0xbd, 0x5f, 0x0f, 0xf4, 0x90, 0xab, 0xef, - 0xef, 0xbf, 0x10, 0x7f, 0xb8, 0x63, 0xf8, 0x81, 0xb6, 0x31, 0xe6, 0x25, 0xc4, 0xf3, 0xc6, 0xf6, - 0x7b, 0xfa, 0x77, 0x01, 0x3e, 0x19, 0xd4, 0x0d, 0x72, 0xcc, 0x78, 0x7a, 0x5e, 0xaf, 0xab, 0xd4, - 0x29, 0x16, 0x6a, 0x10, 0x5b, 0x3c, 0x0a, 0x7c, 0x32, 0xc0, 0xc7, 0x99, 0x81, 0xc6, 0x96, 0x9e, - 0x42, 0x91, 0xe1, 0x81, 0xc6, 0xd1, 0x16, 0x00, 0x31, 0xd0, 0x78, 0x41, 0x13, 0x5d, 0xb6, 0x78, - 0x02, 0xe1, 0xca, 0x4c, 0xa0, 0x5f, 0x65, 0x26, 0xce, 0x3b, 0x02, 0x59, 0xf4, 0xfe, 0x11, 0xcc, - 0xdf, 0x40, 0x59, 0x5d, 0xa4, 0xc5, 0x7e, 0x3d, 0xc3, 0xc6, 0x7c, 0x81, 0xdf, 0xa2, 0x33, 0xc4, - 0x48, 0x23, 0x44, 0x1a, 0x42, 0xa0, 0x66, 0x28, 0x33, 0xc0, 0x41, 0x75, 0x1c, 0xcf, 0x41, 0x7c, - 0x00, 0x61, 0xb8, 0x4e, 0x19, 0xb1, 0x20, 0x62, 0x28, 0x23, 0x61, 0xeb, 0x75, 0x23, 0xc3, 0x9c, - 0xc2, 0xac, 0x8e, 0xb0, 0xf2, 0x24, 0x5e, 0xcd, 0x21, 0xe7, 0xca, 0x24, 0xda, 0x84, 0xb5, 0x4c, - 0xfa, 0x79, 0x62, 0x13, 0xb6, 0x8f, 0x9e, 0x95, 0x74, 0x3b, 0x0f, 0xfe, 0x84, 0x95, 0x5c, 0xfe, - 0x75, 0x8d, 0xb3, 0x32, 0x43, 0x49, 0xb7, 0xfb, 0x50, 0x1d, 0x92, 0x48, 0xba, 0xc3, 0x1a, 0xd6, - 0x67, 0xa9, 0x9d, 0x32, 0xbc, 0x82, 0x52, 0xc7, 0xc9, 0x8b, 0x79, 0x9c, 0x66, 0x2a, 0x1a, 0xbe, - 0x08, 0xd8, 0x26, 0x74, 0x88, 0xcf, 0x52, 0xf7, 0xd5, 0xb5, 0x3e, 0xe4, 0x1d, 0x2e, 0x21, 0xda, - 0x13, 0xee, 0xb0, 0x4f, 0xec, 0x09, 0x77, 0x6b, 0x99, 0xa5, 0x9a, 0x61, 0x05, 0xb7, 0x12, 0xc4, - 0x0e, 0x9b, 0xe2, 0x0d, 0x22, 0xcb, 0x26, 0x02, 0x89, 0xa5, 0x5a, 0x50, 0xc1, 0xcc, 0x6d, 0x06, - 0xdb, 0x4b, 0xf3, 0x38, 0x4b, 0x7f, 0x8a, 0xef, 0x3e, 0x5b, 0x76, 0x1a, 0x82, 0x98, 0xdb, 0xfc, - 0xa4, 0xcf, 0xd5, 0x3e, 0xf0, 0x49, 0x5a, 0x0f, 0xfd, 0x0f, 0x03, 0xcf, 0x4d, 0x10, 0xdd, 0xae, - 0x2c, 0x52, 0xb9, 0xfa, 0xd9, 0x20, 0xba, 0x89, 0x1f, 0xeb, 0x76, 0x51, 0x8c, 0xeb, 0x94, 0xe4, - 0x14, 0x12, 0x48, 0x0b, 0x3e, 0xfc, 0x34, 0xfc, 0xac, 0x10, 0x4e, 0x9c, 0xac, 0xf7, 0x50, 0xb3, - 0xce, 0x6b, 0xeb, 0xb1, 0x64, 0x2c, 0xff, 0xec, 0xd4, 0x59, 0x05, 0xa5, 0x9a, 0x29, 0xf7, 0x81, - 0xa3, 0xde, 0x69, 0x71, 0x23, 0x0b, 0xac, 0x2b, 0x4a, 0xf4, 0xce, 0xb0, 0x86, 0xd9, 0xdd, 0xb1, - 0xb8, 0x53, 0xa8, 0x58, 0xb6, 0x04, 0x71, 0xfd, 0x6d, 0x83, 0x34, 0x66, 0x51, 0xc4, 0xee, 0x0e, - 0x4d, 0x9b, 0x74, 0xa3, 0xed, 0x76, 0x3b, 0x5f, 0x1d, 0xe0, 0x33, 0x72, 0x8f, 0x25, 0x81, 0x11, - 0xe9, 0x46, 0x00, 0xb7, 0x76, 0x3f, 0x4b, 0x16, 0x4f, 0x93, 0xb8, 0xe2, 0x27, 0xf1, 0x2a, 0x63, - 0xf1, 0x54, 0xcc, 0xeb, 0x78, 0xf7, 0xb3, 0x61, 0x46, 0x36, 0x44, 0xed, 0x7e, 0x52, 0xb0, 0x59, - 0xd9, 0xa9, 0xbf, 0xa6, 0xa5, 0xae, 0x16, 0xde, 0x45, 0x39, 0x92, 0x28, 0x2f, 0xbe, 0x56, 0x78, - 0x2f, 0x0c, 0x99, 0x57, 0xa2, 0xa4, 0x48, 0xa4, 0x21, 0xb7, 0x7c, 0x3a, 0x4e, 0x02, 0x72, 0x3b, - 0x40, 0x98, 0xcf, 0x24, 0xc8, 0xdf, 0x9b, 0x3f, 0x08, 0xc1, 0xd5, 0x47, 0x74, 0x37, 0x7c, 0xba, - 0x36, 0x34, 0xb2, 0xbf, 0x43, 0xb6, 0xd9, 0x93, 0x36, 0x0b, 0x37, 0xf5, 0x21, 0xdf, 0x23, 0xa8, - 0x3c, 0xef, 0x37, 0xd7, 0xc2, 0x91, 0x91, 0x12, 0x0b, 0xb7, 0x36, 0x65, 0x02, 0xbd, 0x96, 0xbd, - 0x98, 0xa6, 0x5c, 0xc9, 0x9a, 0x0b, 0xbb, 0x1b, 0x6d, 0x03, 0x6d, 0x8a, 0xa8, 0x15, 0x4d, 0x9b, - 0xb1, 0xbc, 0x66, 0x26, 0x6c, 0x36, 0xcb, 0x40, 0x41, 0xa7, 0x10, 0xcb, 0xef, 0xad, 0x6d, 0xb5, - 0x6d, 0x79, 0x41, 0x62, 0x2c, 0x0f, 0x2a, 0x98, 0x34, 0xb2, 0xc6, 0xe4, 0x19, 0x44, 0xf3, 0x60, - 0xd7, 0xda, 0x66, 0x1c, 0x80, 0x48, 0x23, 0xbd, 0xa0, 0x79, 0x0d, 0xab, 0x16, 0xef, 0x43, 0xf3, - 0x24, 0xf0, 0xd7, 0x69, 0x84, 0xb2, 0x25, 0x26, 0x5e, 0xc3, 0xf2, 0x60, 0x66, 0x9d, 0x80, 0x3c, - 0x3c, 0x5f, 0x1d, 0x4c, 0xf1, 0x3a, 0x01, 0xeb, 0x0b, 0x86, 0x58, 0x27, 0x50, 0xac, 0xdb, 0x74, - 0xfa, 0x53, 0xbc, 0x87, 0x71, 0x65, 0x2a, 0xe7, 0x69, 0x3a, 0x2f, 0x18, 0x6a, 0x3a, 0x4a, 0xc1, - 0x7d, 0xa4, 0xf6, 0x87, 0x7e, 0x3d, 0x8f, 0xd4, 0xf7, 0x81, 0xdf, 0x07, 0x5d, 0x98, 0xf4, 0xf0, - 0xfc, 0xf6, 0xff, 0x7c, 0x7d, 0x63, 0xf0, 0x8b, 0xaf, 0x6f, 0x0c, 0xfe, 0xef, 0xeb, 0x1b, 0x83, - 0x9f, 0x7d, 0x73, 0xe3, 0x9d, 0x5f, 0x7c, 0x73, 0xe3, 0x9d, 0xff, 0xfd, 0xe6, 0xc6, 0x3b, 0x5f, - 0xbd, 0xab, 0xfe, 0x12, 0xe2, 0x9b, 0x5f, 0x11, 0x7f, 0xcf, 0xf0, 0xd9, 0x2f, 0x03, 0x00, 0x00, - 0xff, 0xff, 0x51, 0x6f, 0x77, 0xac, 0x2d, 0x71, 0x00, 0x00, + 0x65, 0xb7, 0xa7, 0x0f, 0x81, 0x40, 0x20, 0x10, 0x08, 0xc4, 0x89, 0x8f, 0x7b, 0xe1, 0x01, 0x89, + 0xbf, 0x86, 0xc7, 0x7d, 0xe4, 0x11, 0xed, 0xfe, 0x23, 0xa8, 0x32, 0xb3, 0xf2, 0x23, 0x2a, 0x23, + 0xab, 0xbc, 0x4f, 0x33, 0xea, 0xf8, 0x45, 0x44, 0x66, 0x65, 0x64, 0x66, 0xe4, 0x47, 0x95, 0xa3, + 0x9b, 0xc5, 0x9b, 0xad, 0xa2, 0x64, 0x9c, 0x55, 0x5b, 0x15, 0x94, 0xcb, 0x34, 0x81, 0xe6, 0xdf, + 0x91, 0xf8, 0x79, 0xf8, 0x6e, 0x9c, 0xaf, 0xf8, 0xaa, 0x80, 0x8f, 0x3e, 0x34, 0x64, 0xc2, 0xe6, + 0xf3, 0x38, 0x9f, 0x56, 0x12, 0xf9, 0xe8, 0x03, 0x23, 0x81, 0x25, 0xe4, 0x5c, 0xfd, 0xfe, 0xf4, + 0x97, 0xdf, 0x0c, 0xa2, 0xf7, 0x76, 0xb2, 0x14, 0x72, 0xbe, 0xa3, 0x34, 0x86, 0x5f, 0x45, 0xdf, + 0xdf, 0x2e, 0x8a, 0x7d, 0xe0, 0xaf, 0xa0, 0xac, 0x52, 0x96, 0x0f, 0xef, 0x8e, 0x94, 0x83, 0xd1, + 0x69, 0x91, 0x8c, 0xb6, 0x8b, 0x62, 0x64, 0x84, 0xa3, 0x53, 0xf8, 0xd9, 0x02, 0x2a, 0xfe, 0xd1, + 0xbd, 0x30, 0x54, 0x15, 0x2c, 0xaf, 0x60, 0x78, 0x1e, 0xfd, 0xd6, 0x76, 0x51, 0x8c, 0x81, 0xef, + 0x42, 0x5d, 0x81, 0x31, 0x8f, 0x39, 0x0c, 0xd7, 0x5a, 0xaa, 0x2e, 0xa0, 0x7d, 0x3c, 0xec, 0x06, + 0x95, 0x9f, 0x49, 0xf4, 0xbd, 0xda, 0xcf, 0xc5, 0x82, 0x4f, 0xd9, 0x55, 0x3e, 0xbc, 0xdd, 0x56, + 0x54, 0x22, 0x6d, 0xfb, 0x4e, 0x08, 0x51, 0x56, 0x5f, 0x47, 0xbf, 0xfe, 0x3a, 0xce, 0x32, 0xe0, + 0x3b, 0x25, 0xd4, 0x05, 0x77, 0x75, 0xa4, 0x68, 0x24, 0x65, 0xda, 0xee, 0xdd, 0x20, 0xa3, 0x0c, + 0x7f, 0x15, 0x7d, 0x5f, 0x4a, 0x4e, 0x21, 0x61, 0x4b, 0x28, 0x87, 0x5e, 0x2d, 0x25, 0x24, 0x1e, + 0x79, 0x0b, 0xc2, 0xb6, 0x77, 0x58, 0xbe, 0x84, 0x92, 0xfb, 0x6d, 0x2b, 0x61, 0xd8, 0xb6, 0x81, + 0x94, 0xed, 0x7f, 0x18, 0x44, 0x3f, 0xdc, 0x4e, 0x12, 0xb6, 0xc8, 0xf9, 0x21, 0x4b, 0xe2, 0xec, + 0x30, 0xcd, 0x2f, 0x8f, 0xe1, 0x6a, 0xe7, 0xa2, 0xe6, 0xf3, 0x19, 0x0c, 0x9f, 0xb9, 0x4f, 0x55, + 0xa2, 0x23, 0xcd, 0x8e, 0x6c, 0x58, 0xfb, 0xfe, 0xe4, 0x7a, 0x4a, 0xaa, 0x2c, 0xff, 0x32, 0x88, + 0x6e, 0xe0, 0xb2, 0x8c, 0x59, 0xb6, 0x04, 0x53, 0x9a, 0x4f, 0x3b, 0x0c, 0xbb, 0xb8, 0x2e, 0xcf, + 0x67, 0xd7, 0x55, 0x53, 0x25, 0xca, 0xa2, 0xf7, 0xed, 0x70, 0x19, 0x43, 0x25, 0xba, 0xd3, 0x23, + 0x3a, 0x22, 0x14, 0xa2, 0x3d, 0x3f, 0xee, 0x83, 0x2a, 0x6f, 0x69, 0x34, 0x54, 0xde, 0x32, 0x56, + 0x69, 0x67, 0x0f, 0xbd, 0x16, 0x2c, 0x42, 0xfb, 0x7a, 0xd4, 0x83, 0x54, 0xae, 0xfe, 0x34, 0xfa, + 0x8d, 0xd7, 0xac, 0xbc, 0xac, 0x8a, 0x38, 0x01, 0xd5, 0x15, 0xee, 0xbb, 0xda, 0x8d, 0x14, 0xf7, + 0x86, 0x07, 0x5d, 0x98, 0x15, 0xb4, 0x8d, 0xf0, 0x65, 0x01, 0x78, 0x0c, 0x32, 0x8a, 0xb5, 0x90, + 0x0a, 0x5a, 0x0c, 0x29, 0xdb, 0x97, 0xd1, 0xd0, 0xd8, 0x7e, 0xf3, 0x67, 0x90, 0xf0, 0xed, 0xe9, + 0x14, 0xb7, 0x8a, 0xd1, 0x15, 0xc4, 0x68, 0x7b, 0x3a, 0xa5, 0x5a, 0xc5, 0x8f, 0x2a, 0x67, 0x57, + 0xd1, 0x07, 0xc8, 0xd9, 0x61, 0x5a, 0x09, 0x87, 0x9b, 0x61, 0x2b, 0x0a, 0xd3, 0x4e, 0x47, 0x7d, + 0x71, 0xe5, 0xf8, 0xaf, 0x06, 0xd1, 0x0f, 0x3c, 0x9e, 0x4f, 0x61, 0xce, 0x96, 0x30, 0x7c, 0xd2, + 0x6d, 0x4d, 0x92, 0xda, 0xff, 0xc7, 0xd7, 0xd0, 0xf0, 0x84, 0xc9, 0x18, 0x32, 0x48, 0x38, 0x19, + 0x26, 0x52, 0xdc, 0x19, 0x26, 0x1a, 0xb3, 0x7a, 0x58, 0x23, 0xdc, 0x07, 0xbe, 0xb3, 0x28, 0x4b, + 0xc8, 0x39, 0xd9, 0x96, 0x06, 0xe9, 0x6c, 0x4b, 0x07, 0xf5, 0xd4, 0x67, 0x1f, 0xf8, 0x76, 0x96, + 0x91, 0xf5, 0x91, 0xe2, 0xce, 0xfa, 0x68, 0x4c, 0x79, 0x48, 0xa2, 0xdf, 0xb4, 0x9e, 0x18, 0x3f, + 0xc8, 0xcf, 0xd9, 0x90, 0x7e, 0x16, 0x42, 0xae, 0x7d, 0xac, 0x75, 0x72, 0x9e, 0x6a, 0xbc, 0x78, + 0x5b, 0xb0, 0x92, 0x6e, 0x16, 0x29, 0xee, 0xac, 0x86, 0xc6, 0x94, 0x87, 0x3f, 0x89, 0xde, 0x53, + 0xa3, 0x64, 0x33, 0x9f, 0xdd, 0xf3, 0x0e, 0xa1, 0x78, 0x42, 0xbb, 0xdf, 0x41, 0x99, 0xc1, 0x41, + 0xc9, 0xd4, 0xe0, 0x73, 0xd7, 0xab, 0x87, 0x86, 0x9e, 0x7b, 0x61, 0xa8, 0x65, 0x7b, 0x17, 0x32, + 0x20, 0x6d, 0x4b, 0x61, 0x87, 0x6d, 0x0d, 0x29, 0xdb, 0x65, 0xf4, 0x3b, 0xfa, 0xb1, 0xd4, 0xf3, + 0xa8, 0x90, 0xd7, 0x83, 0xf4, 0x3a, 0x51, 0x6f, 0x1b, 0xd2, 0xbe, 0x36, 0xfa, 0xc1, 0xad, 0xfa, + 0xa8, 0x1e, 0xe8, 0xaf, 0x0f, 0xea, 0x7f, 0xf7, 0xc2, 0x90, 0xb2, 0xfd, 0x8f, 0x83, 0xe8, 0x47, + 0x4a, 0xf6, 0x22, 0x8f, 0xdf, 0x64, 0x20, 0xa6, 0xc4, 0x63, 0xe0, 0x57, 0xac, 0xbc, 0x1c, 0xaf, + 0xf2, 0x84, 0x98, 0xfe, 0xfd, 0x70, 0xc7, 0xf4, 0x4f, 0x2a, 0x59, 0x19, 0x9f, 0xaa, 0x28, 0x67, + 0x05, 0xce, 0xf8, 0x9a, 0x1a, 0x70, 0x56, 0x50, 0x19, 0x9f, 0x8b, 0xb4, 0xac, 0x1e, 0xd5, 0xc3, + 0xa6, 0xdf, 0xea, 0x91, 0x3d, 0x4e, 0xde, 0x09, 0x21, 0x66, 0xd8, 0x6a, 0x02, 0x98, 0xe5, 0xe7, + 0xe9, 0xec, 0xac, 0x98, 0xd6, 0x61, 0xfc, 0xc8, 0x1f, 0xa1, 0x16, 0x42, 0x0c, 0x5b, 0x04, 0xaa, + 0xbc, 0xfd, 0xb3, 0x49, 0x8c, 0x54, 0x57, 0xda, 0x2b, 0xd9, 0xfc, 0x10, 0x66, 0x71, 0xb2, 0x52, + 0xfd, 0xff, 0x93, 0x50, 0xc7, 0xc3, 0xb4, 0x2e, 0xc4, 0xa7, 0xd7, 0xd4, 0x52, 0xe5, 0xf9, 0xaf, + 0x41, 0x74, 0xaf, 0xa9, 0xfe, 0x45, 0x9c, 0xcf, 0x40, 0xb5, 0xa7, 0x2c, 0xfd, 0x76, 0x3e, 0x3d, + 0x85, 0x8a, 0xc7, 0x25, 0x1f, 0x7e, 0xe1, 0xaf, 0x64, 0x48, 0x47, 0x97, 0xed, 0x27, 0xdf, 0x49, + 0xd7, 0xb4, 0xfa, 0xb8, 0x1e, 0xd8, 0xd4, 0x10, 0xe0, 0xb6, 0xba, 0x90, 0xe0, 0x01, 0xe0, 0x4e, + 0x08, 0x31, 0xad, 0x2e, 0x04, 0x07, 0xf9, 0x32, 0xe5, 0xb0, 0x0f, 0x39, 0x94, 0xed, 0x56, 0x97, + 0xaa, 0x2e, 0x42, 0xb4, 0x3a, 0x81, 0x9a, 0xc1, 0xc6, 0xf1, 0xa6, 0x27, 0xc7, 0xf5, 0x80, 0x91, + 0xd6, 0xf4, 0xb8, 0xd1, 0x0f, 0x36, 0xab, 0x3b, 0xcb, 0xe7, 0x29, 0x2c, 0xd9, 0x25, 0x5e, 0xdd, + 0xd9, 0x26, 0x24, 0x40, 0xac, 0xee, 0xbc, 0xa0, 0x99, 0xc1, 0x2c, 0x3f, 0xaf, 0x52, 0xb8, 0x42, + 0x33, 0x98, 0xad, 0x5c, 0x8b, 0x89, 0x19, 0xcc, 0x83, 0x29, 0x0f, 0xc7, 0xd1, 0xaf, 0x09, 0xe1, + 0x1f, 0xb1, 0x34, 0x1f, 0xde, 0xf4, 0x28, 0xd5, 0x02, 0x6d, 0xf5, 0x16, 0x0d, 0xa0, 0x12, 0xd7, + 0xbf, 0xee, 0xc4, 0x79, 0x02, 0x99, 0xb7, 0xc4, 0x46, 0x1c, 0x2c, 0xb1, 0x83, 0x99, 0xd4, 0x41, + 0x08, 0xeb, 0xf1, 0x6b, 0x7c, 0x11, 0x97, 0x69, 0x3e, 0x1b, 0xfa, 0x74, 0x2d, 0x39, 0x91, 0x3a, + 0xf8, 0x38, 0x14, 0xc2, 0x4a, 0x71, 0xbb, 0x28, 0xca, 0x7a, 0x58, 0xf4, 0x85, 0xb0, 0x8b, 0x04, + 0x43, 0xb8, 0x85, 0xfa, 0xbd, 0xed, 0x42, 0x92, 0xa5, 0x79, 0xd0, 0x9b, 0x42, 0xfa, 0x78, 0x33, + 0x28, 0x0a, 0xde, 0x43, 0x88, 0x97, 0xd0, 0xd4, 0xcc, 0xf7, 0x64, 0x6c, 0x20, 0x18, 0xbc, 0x08, + 0x34, 0xeb, 0x34, 0x21, 0x3e, 0x8a, 0x2f, 0xa1, 0x7e, 0xc0, 0x50, 0xcf, 0x6b, 0x43, 0x9f, 0xbe, + 0x43, 0x10, 0xeb, 0x34, 0x3f, 0xa9, 0x5c, 0x2d, 0xa2, 0x0f, 0x84, 0xfc, 0x24, 0x2e, 0x79, 0x9a, + 0xa4, 0x45, 0x9c, 0x37, 0xf9, 0xbf, 0xaf, 0x5f, 0xb7, 0x28, 0xed, 0x72, 0xb3, 0x27, 0xad, 0xdc, + 0xfe, 0x72, 0x10, 0xdd, 0xc6, 0x7e, 0x4f, 0xa0, 0x9c, 0xa7, 0x62, 0x19, 0x59, 0xc9, 0x41, 0x78, + 0xf8, 0x79, 0xd8, 0x68, 0x4b, 0x41, 0x97, 0xe6, 0xc7, 0xd7, 0x57, 0x54, 0x05, 0xfb, 0xe3, 0x28, + 0x92, 0xcb, 0x15, 0xb1, 0xa4, 0x74, 0x7b, 0xad, 0x5a, 0xc7, 0x38, 0xeb, 0xc9, 0xdb, 0x01, 0xc2, + 0x4c, 0x15, 0xf2, 0x77, 0xb1, 0x52, 0x1e, 0x7a, 0x35, 0x84, 0x88, 0x98, 0x2a, 0x10, 0x82, 0x0b, + 0x3a, 0xbe, 0x60, 0x57, 0xfe, 0x82, 0xd6, 0x92, 0x70, 0x41, 0x15, 0x61, 0xf6, 0xae, 0x54, 0x41, + 0x7d, 0x7b, 0x57, 0x4d, 0x31, 0x42, 0x7b, 0x57, 0x98, 0x51, 0x86, 0x59, 0xf4, 0xdb, 0xb6, 0xe1, + 0xe7, 0x8c, 0x5d, 0xce, 0xe3, 0xf2, 0x72, 0xf8, 0x98, 0x56, 0x6e, 0x18, 0xed, 0x68, 0xbd, 0x17, + 0x6b, 0x86, 0x05, 0xdb, 0x61, 0x9d, 0x68, 0x9c, 0x95, 0x19, 0x1a, 0x16, 0x1c, 0x1b, 0x0a, 0x21, + 0x86, 0x05, 0x02, 0x35, 0x09, 0xb4, 0xf2, 0x76, 0x11, 0x8b, 0x75, 0xbb, 0xff, 0xa1, 0x48, 0x21, + 0x91, 0x40, 0xb7, 0x20, 0x33, 0x2b, 0xd8, 0x35, 0x19, 0x03, 0x5e, 0x89, 0x39, 0x45, 0x1b, 0x03, + 0xb5, 0x12, 0xf3, 0x60, 0x38, 0x3c, 0xf7, 0xcb, 0xb8, 0xb8, 0xf0, 0x87, 0xa7, 0x10, 0x85, 0xc3, + 0xb3, 0x41, 0x70, 0x2c, 0x8d, 0x21, 0x2e, 0x93, 0x0b, 0x7f, 0x2c, 0x49, 0x59, 0x38, 0x96, 0x34, + 0x83, 0x63, 0x49, 0x0a, 0x5e, 0xa7, 0xfc, 0xe2, 0x08, 0x78, 0xec, 0x8f, 0x25, 0x97, 0x09, 0xc7, + 0x52, 0x8b, 0x35, 0x59, 0x92, 0xed, 0x70, 0xbc, 0x78, 0x53, 0x25, 0x65, 0xfa, 0x06, 0x86, 0x01, + 0x2b, 0x1a, 0x22, 0xb2, 0x24, 0x12, 0x36, 0x13, 0x80, 0xf2, 0xd9, 0xc8, 0x0e, 0xa6, 0x15, 0x9a, + 0x00, 0x1a, 0x1b, 0x16, 0x41, 0x4c, 0x00, 0x7e, 0x12, 0x57, 0x6f, 0xbf, 0x64, 0x8b, 0xa2, 0xea, + 0xa8, 0x1e, 0x82, 0xc2, 0xd5, 0x6b, 0xc3, 0xca, 0xe7, 0xdb, 0xe8, 0x77, 0xed, 0x47, 0x7a, 0x96, + 0x57, 0xda, 0xeb, 0x26, 0xfd, 0x9c, 0x2c, 0x8c, 0xd8, 0xf2, 0x0a, 0xe0, 0x26, 0x05, 0x6a, 0x3c, + 0xf3, 0x5d, 0xe0, 0x71, 0x9a, 0x55, 0xc3, 0x07, 0x7e, 0x1b, 0x8d, 0x9c, 0x48, 0x81, 0x7c, 0x1c, + 0xee, 0xb3, 0xbb, 0x8b, 0x22, 0x4b, 0x93, 0xf6, 0xde, 0xa7, 0xd2, 0xd5, 0xe2, 0x70, 0x9f, 0xb5, + 0x31, 0x3c, 0xbe, 0x8d, 0x81, 0xcb, 0xff, 0x4c, 0x56, 0x05, 0xf8, 0xc7, 0x37, 0x07, 0x09, 0x8f, + 0x6f, 0x18, 0xc5, 0xf5, 0x19, 0x03, 0x3f, 0x8c, 0x57, 0x6c, 0x41, 0x8c, 0x41, 0x5a, 0x1c, 0xae, + 0x8f, 0x8d, 0x99, 0x2c, 0x44, 0x7b, 0x38, 0xc8, 0x39, 0x94, 0x79, 0x9c, 0xed, 0x65, 0xf1, 0xac, + 0x1a, 0x12, 0xfd, 0xc6, 0xa5, 0x88, 0x2c, 0x84, 0xa6, 0x3d, 0x8f, 0xf1, 0xa0, 0xda, 0x8b, 0x97, + 0xac, 0x4c, 0x39, 0xfd, 0x18, 0x0d, 0xd2, 0xf9, 0x18, 0x1d, 0xd4, 0xeb, 0x6d, 0xbb, 0x4c, 0x2e, + 0xd2, 0x25, 0x4c, 0x03, 0xde, 0x1a, 0xa4, 0x87, 0x37, 0x0b, 0xf5, 0x34, 0xda, 0x98, 0x2d, 0xca, + 0x04, 0xc8, 0x46, 0x93, 0xe2, 0xce, 0x46, 0xd3, 0x98, 0xf2, 0xf0, 0xb7, 0x83, 0xe8, 0xf7, 0xa4, + 0xd4, 0xde, 0x90, 0xdc, 0x8d, 0xab, 0x8b, 0x37, 0x2c, 0x2e, 0xa7, 0xc3, 0x8f, 0x7d, 0x76, 0xbc, + 0xa8, 0x76, 0xfd, 0xf4, 0x3a, 0x2a, 0xf8, 0xb1, 0x1e, 0xa6, 0x95, 0xd5, 0xe3, 0xbc, 0x8f, 0xd5, + 0x41, 0xc2, 0x8f, 0x15, 0xa3, 0x78, 0x00, 0x11, 0x72, 0xb9, 0xf8, 0x7f, 0x40, 0xea, 0xbb, 0x3b, + 0x00, 0x6b, 0x9d, 0x1c, 0x1e, 0x1f, 0x6b, 0xa1, 0x1b, 0x2d, 0x9b, 0x94, 0x0d, 0x7f, 0xc4, 0x8c, + 0xfa, 0xe2, 0xa4, 0x67, 0xdd, 0x2b, 0xc2, 0x9e, 0x5b, 0x3d, 0x63, 0xd4, 0x17, 0x27, 0x3c, 0x5b, + 0xc3, 0x5a, 0xc8, 0xb3, 0x67, 0x68, 0x1b, 0xf5, 0xc5, 0x71, 0x46, 0xa1, 0x98, 0x66, 0x5e, 0x78, + 0x1c, 0xb0, 0x83, 0xe7, 0x86, 0xf5, 0x5e, 0xac, 0x72, 0xf8, 0xf7, 0x83, 0xe8, 0x87, 0xc6, 0xe3, + 0x11, 0x9b, 0xa6, 0xe7, 0x2b, 0x09, 0xbd, 0x8a, 0xb3, 0x05, 0x54, 0xc3, 0xa7, 0x94, 0xb5, 0x36, + 0xab, 0x4b, 0xf0, 0xec, 0x5a, 0x3a, 0xb8, 0xef, 0x6c, 0x17, 0x45, 0xb6, 0x9a, 0xc0, 0xbc, 0xc8, + 0xc8, 0xbe, 0xe3, 0x20, 0xe1, 0xbe, 0x83, 0x51, 0x9c, 0x69, 0x4e, 0x58, 0x9d, 0xc7, 0x7a, 0x33, + 0x4d, 0x21, 0x0a, 0x67, 0x9a, 0x0d, 0x82, 0x73, 0xa5, 0x09, 0xdb, 0x61, 0x59, 0x06, 0x09, 0x6f, + 0x1f, 0x6a, 0x6a, 0x4d, 0x43, 0x84, 0x73, 0x25, 0x44, 0x9a, 0xf5, 0x7f, 0xb3, 0xe6, 0x8a, 0x4b, + 0x78, 0xbe, 0x3a, 0x4c, 0xf3, 0xcb, 0xa1, 0x3f, 0x2d, 0x30, 0x00, 0xb1, 0xfe, 0xf7, 0x82, 0x78, + 0x6d, 0x77, 0x96, 0x4f, 0x99, 0x7f, 0x6d, 0x57, 0x4b, 0xc2, 0x6b, 0x3b, 0x45, 0x60, 0x93, 0xa7, + 0x40, 0x99, 0xac, 0x25, 0x61, 0x93, 0x8a, 0xf0, 0x0d, 0x85, 0x6a, 0x97, 0x98, 0x1c, 0x0a, 0xd1, + 0xbe, 0xf0, 0x5a, 0x27, 0x87, 0x23, 0xb4, 0x59, 0xe4, 0xed, 0x01, 0x4f, 0x2e, 0xfc, 0x11, 0xea, + 0x20, 0xe1, 0x08, 0xc5, 0x28, 0xae, 0xd2, 0x84, 0xe9, 0x45, 0xea, 0x03, 0x7f, 0x7c, 0xb4, 0x16, + 0xa8, 0x6b, 0x9d, 0x1c, 0x5e, 0x1a, 0x1d, 0xcc, 0xc5, 0x33, 0xf3, 0x06, 0xb9, 0x94, 0x85, 0x97, + 0x46, 0x9a, 0xc1, 0xa5, 0x97, 0x82, 0xfa, 0x71, 0xfa, 0x4b, 0x6f, 0xe4, 0xe1, 0xd2, 0x3b, 0x9c, + 0x72, 0xf2, 0xef, 0x83, 0xe8, 0xa6, 0xed, 0xe5, 0x98, 0xd5, 0x7d, 0xe4, 0x55, 0x9c, 0xa5, 0xd3, + 0x98, 0xc3, 0x84, 0x5d, 0x42, 0x8e, 0xf6, 0x6d, 0xdc, 0xd2, 0x4a, 0x7e, 0xe4, 0x28, 0x10, 0xfb, + 0x36, 0xbd, 0x14, 0x71, 0x9c, 0x48, 0xfa, 0xac, 0x82, 0x9d, 0xb8, 0x22, 0x46, 0x32, 0x07, 0x09, + 0xc7, 0x09, 0x46, 0x71, 0xbe, 0x2a, 0xe5, 0x2f, 0xde, 0x16, 0x50, 0xa6, 0x90, 0x27, 0xe0, 0xcf, + 0x57, 0x31, 0x15, 0xce, 0x57, 0x3d, 0x74, 0x6b, 0x5b, 0x43, 0x0f, 0x4e, 0xed, 0x7b, 0x09, 0x98, + 0x08, 0xdc, 0x4b, 0x20, 0x50, 0x5c, 0x49, 0x03, 0x78, 0xb7, 0x06, 0x5b, 0x56, 0x82, 0x5b, 0x83, + 0x34, 0xdd, 0xda, 0x2c, 0xd2, 0xcc, 0xb8, 0xee, 0x26, 0x1d, 0x45, 0x1f, 0xdb, 0xdd, 0x65, 0xbd, + 0x17, 0xeb, 0xdf, 0x9d, 0x3a, 0x85, 0x2c, 0x16, 0x53, 0x48, 0x60, 0x0b, 0xa8, 0x61, 0xfa, 0xec, + 0x4e, 0x59, 0xac, 0x72, 0xf8, 0xd7, 0x83, 0xe8, 0x23, 0x9f, 0xc7, 0x97, 0x85, 0xf0, 0xfb, 0xa4, + 0xdb, 0x96, 0x24, 0x89, 0x8b, 0x17, 0x61, 0x0d, 0x55, 0x86, 0x3f, 0x8f, 0x3e, 0x6c, 0x44, 0xe6, + 0x5e, 0x86, 0x2a, 0x80, 0x9b, 0x40, 0xe9, 0xf2, 0x63, 0x4e, 0xbb, 0xdf, 0xea, 0xcd, 0x9b, 0xb5, + 0x89, 0x5b, 0xae, 0x0a, 0xad, 0x4d, 0xb4, 0x0d, 0x25, 0x26, 0xd6, 0x26, 0x1e, 0xcc, 0xec, 0x6a, + 0xd8, 0xd5, 0x7b, 0x9d, 0xf2, 0x0b, 0x91, 0xfb, 0xa0, 0x5d, 0x0d, 0xa7, 0xac, 0x1a, 0x22, 0x76, + 0x35, 0x48, 0x18, 0x67, 0x07, 0x0d, 0x58, 0xf7, 0x4d, 0xdf, 0xb8, 0xaa, 0x0d, 0xd9, 0x3d, 0xf3, + 0x61, 0x37, 0x88, 0xe3, 0xb5, 0x11, 0xab, 0x65, 0xc8, 0xe3, 0x90, 0x05, 0xb4, 0x14, 0x59, 0xef, + 0xc5, 0x2a, 0x87, 0x7f, 0x19, 0xfd, 0xa0, 0x55, 0xb1, 0x3d, 0x88, 0xf9, 0xa2, 0x84, 0xe9, 0x70, + 0xab, 0xa3, 0xdc, 0x0d, 0xa8, 0x5d, 0x3f, 0xe9, 0xaf, 0xd0, 0xca, 0x97, 0x1b, 0x4e, 0x86, 0x95, + 0x2e, 0xc3, 0xd3, 0x90, 0x49, 0x97, 0x0d, 0xe6, 0xcb, 0xb4, 0x4e, 0x6b, 0xc9, 0x6b, 0x47, 0xd7, + 0xf6, 0x32, 0x4e, 0x33, 0x71, 0x44, 0xf3, 0x71, 0xc8, 0xa8, 0x83, 0x06, 0x97, 0xbc, 0xa4, 0x4a, + 0x6b, 0x64, 0x16, 0x7d, 0xdc, 0x5a, 0x2a, 0x6d, 0xd0, 0x23, 0x81, 0x67, 0xa5, 0xb4, 0xd9, 0x93, + 0x56, 0x6e, 0x79, 0xb3, 0x55, 0x58, 0xff, 0x6c, 0x07, 0xb9, 0xcf, 0xab, 0x52, 0xf5, 0x44, 0xfa, + 0x66, 0x4f, 0x5a, 0x79, 0xfd, 0x8b, 0xe8, 0xc3, 0xb6, 0x57, 0x35, 0x11, 0x6d, 0x75, 0x9a, 0x42, + 0x73, 0xd1, 0x93, 0xfe, 0x0a, 0x66, 0x79, 0xf1, 0x65, 0x5a, 0x71, 0x56, 0xae, 0xc6, 0x17, 0xec, + 0xaa, 0xb9, 0xef, 0xec, 0xf6, 0x56, 0x05, 0x8c, 0x2c, 0x82, 0x58, 0x5e, 0xf8, 0xc9, 0x96, 0x2b, + 0x73, 0x2f, 0xba, 0x22, 0x5c, 0x59, 0x44, 0x87, 0x2b, 0x97, 0x34, 0x63, 0x55, 0x53, 0x2b, 0x73, + 0x89, 0x7b, 0xcd, 0x5f, 0xd4, 0xf6, 0x45, 0xee, 0x87, 0xdd, 0xa0, 0xc9, 0x58, 0x94, 0x78, 0x37, + 0x3d, 0x3f, 0xd7, 0x75, 0xf2, 0x97, 0xd4, 0x46, 0x88, 0x8c, 0x85, 0x40, 0x4d, 0x02, 0xbc, 0x97, + 0x66, 0x20, 0xce, 0xfb, 0x5e, 0x9e, 0x9f, 0x67, 0x2c, 0x9e, 0xa2, 0x04, 0xb8, 0x16, 0x8f, 0x6c, + 0x39, 0x91, 0x00, 0xfb, 0x38, 0x73, 0xda, 0x53, 0x4b, 0x4f, 0x21, 0x61, 0x79, 0x92, 0x66, 0xf8, + 0xfa, 0x97, 0xd0, 0xd4, 0x42, 0xe2, 0xb4, 0xa7, 0x05, 0x99, 0x89, 0xb1, 0x16, 0xd5, 0xdd, 0xbe, + 0x29, 0xff, 0xfd, 0xb6, 0xa2, 0x25, 0x26, 0x26, 0x46, 0x0f, 0x66, 0xd6, 0x81, 0xb5, 0xf0, 0xac, + 0x10, 0xc6, 0x6f, 0xb5, 0xb5, 0xa4, 0x84, 0x58, 0x07, 0xba, 0x84, 0x59, 0xcf, 0xd4, 0xbf, 0xef, + 0xb2, 0xab, 0x5c, 0x18, 0xbd, 0xd3, 0x56, 0x69, 0x64, 0xc4, 0x7a, 0x06, 0x33, 0xca, 0xf0, 0x4f, + 0xa3, 0x5f, 0x15, 0x86, 0x4b, 0x56, 0x0c, 0x6f, 0x78, 0x14, 0x4a, 0xeb, 0xa6, 0xd6, 0x4d, 0x52, + 0x6e, 0x2e, 0x1c, 0xea, 0xd8, 0x38, 0xab, 0xe2, 0x19, 0x0c, 0xef, 0x11, 0x2d, 0x2e, 0xa4, 0xc4, + 0x85, 0xc3, 0x36, 0xe5, 0x46, 0xc5, 0x31, 0x9b, 0x2a, 0xeb, 0x9e, 0x1a, 0x6a, 0x61, 0x28, 0x2a, + 0x6c, 0xc8, 0x24, 0x33, 0xc7, 0xf1, 0x32, 0x9d, 0xe9, 0x09, 0x47, 0x8e, 0x5b, 0x15, 0x4a, 0x66, + 0x0c, 0x33, 0xb2, 0x20, 0x22, 0x99, 0x21, 0x61, 0xe5, 0xf3, 0xdf, 0x06, 0xd1, 0x2d, 0xc3, 0xec, + 0x37, 0x3b, 0x67, 0x07, 0xf9, 0x39, 0xab, 0x53, 0x9f, 0xc3, 0x34, 0xbf, 0xac, 0x86, 0x9f, 0x51, + 0x26, 0xfd, 0xbc, 0x2e, 0xca, 0xe7, 0xd7, 0xd6, 0x33, 0x59, 0x6b, 0xb3, 0xad, 0x64, 0xce, 0x62, + 0xa5, 0x06, 0xca, 0x5a, 0xf5, 0xee, 0x13, 0xe6, 0x88, 0xac, 0x35, 0xc4, 0x9b, 0x26, 0xd6, 0xce, + 0x33, 0x96, 0xe3, 0x26, 0x36, 0x16, 0x6a, 0x21, 0xd1, 0xc4, 0x2d, 0xc8, 0x8c, 0xc7, 0x8d, 0x48, + 0xee, 0x80, 0x6c, 0x67, 0x19, 0x1a, 0x8f, 0xb5, 0xaa, 0x06, 0x88, 0xf1, 0xd8, 0x0b, 0x2a, 0x3f, + 0xa7, 0xd1, 0xf7, 0xea, 0x47, 0x7a, 0x52, 0xc2, 0x32, 0x05, 0x7c, 0x6d, 0xc0, 0x92, 0x10, 0xfd, + 0xdf, 0x25, 0x4c, 0xcf, 0x3a, 0xcb, 0xab, 0x22, 0x8b, 0xab, 0x0b, 0x75, 0xd8, 0xeb, 0xd6, 0xb9, + 0x11, 0xe2, 0xe3, 0xde, 0xfb, 0x1d, 0x94, 0x19, 0xd4, 0x1b, 0x99, 0x1e, 0x62, 0x1e, 0xf8, 0x55, + 0x5b, 0xc3, 0xcc, 0x5a, 0x27, 0x67, 0x76, 0x9f, 0xf7, 0xe3, 0x2c, 0x83, 0x72, 0xd5, 0xc8, 0x8e, + 0xe2, 0x3c, 0x3d, 0x87, 0x8a, 0xa3, 0xdd, 0x67, 0x45, 0x8d, 0x30, 0x46, 0xec, 0x3e, 0x07, 0x70, + 0x93, 0xcd, 0x23, 0xcf, 0x07, 0xf9, 0x14, 0xde, 0xa2, 0x6c, 0x1e, 0xdb, 0x11, 0x0c, 0x91, 0xcd, + 0x53, 0xac, 0xd9, 0x85, 0x7d, 0x9e, 0xb1, 0xe4, 0x52, 0x4d, 0x01, 0x6e, 0x03, 0x0b, 0x09, 0x9e, + 0x03, 0xee, 0x84, 0x10, 0x33, 0x09, 0x08, 0xc1, 0x29, 0x14, 0x59, 0x9c, 0xe0, 0xbb, 0x23, 0x52, + 0x47, 0xc9, 0x88, 0x49, 0x00, 0x33, 0xa8, 0xb8, 0xea, 0x4e, 0x8a, 0xaf, 0xb8, 0xe8, 0x4a, 0xca, + 0x9d, 0x10, 0x62, 0xa6, 0x41, 0x21, 0x18, 0x17, 0x59, 0xca, 0x51, 0x37, 0x90, 0x1a, 0x42, 0x42, + 0x74, 0x03, 0x97, 0x40, 0x26, 0x8f, 0xa0, 0x9c, 0x81, 0xd7, 0xa4, 0x90, 0x04, 0x4d, 0x36, 0x84, + 0xb9, 0x62, 0x28, 0xeb, 0xce, 0x8a, 0x15, 0xba, 0x62, 0xa8, 0xaa, 0xc5, 0x8a, 0x15, 0x71, 0xc5, + 0xd0, 0x01, 0x50, 0x11, 0x4f, 0xe2, 0x8a, 0xfb, 0x8b, 0x28, 0x24, 0xc1, 0x22, 0x36, 0x84, 0x99, + 0xa3, 0x65, 0x11, 0x17, 0x1c, 0xcd, 0xd1, 0xaa, 0x00, 0xd6, 0x69, 0xf0, 0x4d, 0x52, 0x6e, 0x46, + 0x12, 0xd9, 0x2a, 0xc0, 0xf7, 0x52, 0xc8, 0xa6, 0x15, 0x1a, 0x49, 0xd4, 0x73, 0x6f, 0xa4, 0xc4, + 0x48, 0xd2, 0xa6, 0x50, 0x28, 0xa9, 0xbd, 0x6a, 0x5f, 0xed, 0xd0, 0x36, 0xf5, 0x9d, 0x10, 0x62, + 0xc6, 0xa7, 0xa6, 0xd0, 0x3b, 0x71, 0x59, 0xa6, 0xf5, 0xe4, 0xff, 0xc0, 0x5f, 0xa0, 0x46, 0x4e, + 0x8c, 0x4f, 0x3e, 0x0e, 0x75, 0xaf, 0x66, 0xe0, 0xf6, 0x15, 0x0c, 0x0f, 0xdd, 0x77, 0x83, 0x8c, + 0xc9, 0x38, 0x85, 0xc4, 0x3a, 0xce, 0xf4, 0x3d, 0x4d, 0xcf, 0x69, 0xe6, 0x83, 0x2e, 0xcc, 0x7a, + 0x05, 0x40, 0xbb, 0x38, 0x62, 0x4b, 0x98, 0xb0, 0x17, 0x6f, 0xd3, 0x8a, 0xa7, 0xf9, 0x4c, 0xcd, + 0xdc, 0xcf, 0x08, 0x4b, 0x3e, 0x98, 0x78, 0x05, 0xa0, 0x53, 0xc9, 0x24, 0x10, 0xa8, 0x2c, 0xc7, + 0x70, 0xe5, 0x4d, 0x20, 0xb0, 0x45, 0xcd, 0x11, 0x09, 0x44, 0x88, 0x37, 0xfb, 0x28, 0xda, 0xb9, + 0x7a, 0x4f, 0x72, 0xc2, 0x9a, 0x5c, 0x8e, 0xb2, 0x86, 0x41, 0x62, 0x29, 0x1b, 0x54, 0x30, 0xeb, + 0x4b, 0xed, 0xdf, 0x74, 0xb1, 0x87, 0x84, 0x9d, 0x76, 0x37, 0x7b, 0xd4, 0x83, 0xf4, 0xb8, 0x32, + 0x67, 0xf2, 0x94, 0xab, 0xf6, 0x91, 0xfc, 0xa3, 0x1e, 0xa4, 0xb5, 0x27, 0x63, 0x57, 0xeb, 0x79, + 0x9c, 0x5c, 0xce, 0x4a, 0xb6, 0xc8, 0xa7, 0x3b, 0x2c, 0x63, 0x25, 0xda, 0x93, 0x71, 0x4a, 0x8d, + 0x50, 0x62, 0x4f, 0xa6, 0x43, 0xc5, 0x64, 0x70, 0x76, 0x29, 0xb6, 0xb3, 0x74, 0x86, 0x57, 0xd4, + 0x8e, 0x21, 0x01, 0x10, 0x19, 0x9c, 0x17, 0xf4, 0x04, 0x91, 0x5c, 0x71, 0xf3, 0x34, 0x89, 0x33, + 0xe9, 0x6f, 0x8b, 0x36, 0xe3, 0x80, 0x9d, 0x41, 0xe4, 0x51, 0xf0, 0xd4, 0x73, 0xb2, 0x28, 0xf3, + 0x83, 0x9c, 0x33, 0xb2, 0x9e, 0x0d, 0xd0, 0x59, 0x4f, 0x0b, 0x44, 0xc3, 0xea, 0x04, 0xde, 0xd6, + 0xa5, 0xa9, 0xff, 0xf1, 0x0d, 0xab, 0xf5, 0xef, 0x23, 0x25, 0x0f, 0x0d, 0xab, 0x88, 0x43, 0x95, + 0x51, 0x4e, 0x64, 0xc0, 0x04, 0xb4, 0xdd, 0x30, 0x79, 0xd8, 0x0d, 0xfa, 0xfd, 0x8c, 0xf9, 0x2a, + 0x83, 0x90, 0x1f, 0x01, 0xf4, 0xf1, 0xd3, 0x80, 0x66, 0xbb, 0xc5, 0xa9, 0xcf, 0x05, 0x24, 0x97, + 0xad, 0x2b, 0x46, 0x6e, 0x41, 0x25, 0x42, 0x6c, 0xb7, 0x10, 0xa8, 0xbf, 0x89, 0x0e, 0x12, 0x96, + 0x87, 0x9a, 0xa8, 0x96, 0xf7, 0x69, 0x22, 0xc5, 0x99, 0xc5, 0xaf, 0x96, 0xaa, 0xc8, 0x94, 0xcd, + 0xb4, 0x4e, 0x58, 0xb0, 0x21, 0x62, 0xf1, 0x4b, 0xc2, 0x26, 0x27, 0xc7, 0x3e, 0x8f, 0xda, 0xf7, + 0x95, 0x5b, 0x56, 0x8e, 0xe8, 0xfb, 0xca, 0x14, 0x4b, 0x57, 0x52, 0xc6, 0x48, 0x87, 0x15, 0x37, + 0x4e, 0x36, 0xfa, 0xc1, 0x66, 0xc9, 0xe3, 0xf8, 0xdc, 0xc9, 0x20, 0x2e, 0xa5, 0xd7, 0xcd, 0x80, + 0x21, 0x83, 0x11, 0x4b, 0x9e, 0x00, 0x8e, 0x86, 0x30, 0xc7, 0xf3, 0x0e, 0xcb, 0x39, 0xe4, 0xdc, + 0x37, 0x84, 0xb9, 0xc6, 0x14, 0x18, 0x1a, 0xc2, 0x28, 0x05, 0x14, 0xb7, 0x62, 0x3f, 0x08, 0xf8, + 0x71, 0x3c, 0xf7, 0x66, 0x6c, 0x72, 0xaf, 0x47, 0xca, 0x43, 0x71, 0x8b, 0x38, 0xeb, 0x90, 0xcf, + 0xf6, 0x32, 0x89, 0xcb, 0x99, 0xde, 0xdd, 0x98, 0x0e, 0x9f, 0xd0, 0x76, 0x5c, 0x92, 0x38, 0xe4, + 0x0b, 0x6b, 0xa0, 0x61, 0xe7, 0x60, 0x1e, 0xcf, 0x74, 0x4d, 0x3d, 0x35, 0x10, 0xf2, 0x56, 0x55, + 0x1f, 0x76, 0x83, 0xc8, 0xcf, 0xab, 0x74, 0x0a, 0x2c, 0xe0, 0x47, 0xc8, 0xfb, 0xf8, 0xc1, 0x20, + 0xca, 0xde, 0xea, 0x7a, 0xcb, 0x15, 0xdd, 0x76, 0x3e, 0x55, 0xeb, 0xd8, 0x11, 0xf1, 0x78, 0x10, + 0x17, 0xca, 0xde, 0x08, 0x1e, 0xf5, 0xd1, 0x66, 0x83, 0x36, 0xd4, 0x47, 0xf5, 0xfe, 0x6b, 0x9f, + 0x3e, 0xea, 0x83, 0x95, 0xcf, 0x9f, 0xab, 0x3e, 0xba, 0x1b, 0xf3, 0xb8, 0xce, 0xdb, 0x5f, 0xa5, + 0x70, 0xa5, 0x16, 0xc2, 0x9e, 0xfa, 0x36, 0xd4, 0x48, 0xbc, 0xa8, 0x86, 0x56, 0xc5, 0x5b, 0xbd, + 0xf9, 0x80, 0x6f, 0xb5, 0x42, 0xe8, 0xf4, 0x8d, 0x96, 0x0a, 0x5b, 0xbd, 0xf9, 0x80, 0x6f, 0xf5, + 0x06, 0x6c, 0xa7, 0x6f, 0xf4, 0x1a, 0xec, 0x56, 0x6f, 0x5e, 0xf9, 0xfe, 0x9b, 0xa6, 0xe3, 0xda, + 0xce, 0xeb, 0x3c, 0x2c, 0xe1, 0xe9, 0x12, 0x7c, 0xe9, 0xa4, 0x6b, 0x4f, 0xa3, 0xa1, 0x74, 0x92, + 0x56, 0xb1, 0x3e, 0x9b, 0xe2, 0x2b, 0xc5, 0x09, 0xab, 0x52, 0x71, 0x48, 0xff, 0xac, 0x87, 0xd1, + 0x06, 0x0e, 0x2d, 0x9a, 0x42, 0x4a, 0xe6, 0xb8, 0xd1, 0x41, 0xcd, 0x8d, 0xe2, 0x8d, 0x80, 0xbd, + 0xf6, 0xc5, 0xe2, 0xcd, 0x9e, 0xb4, 0x39, 0xf8, 0x73, 0x18, 0xfb, 0xc4, 0x31, 0xd4, 0xaa, 0xde, + 0x43, 0xc7, 0x27, 0xfd, 0x15, 0x94, 0xfb, 0xbf, 0x6b, 0xd6, 0x15, 0xd8, 0xbf, 0xea, 0x04, 0x4f, + 0xfb, 0x58, 0x44, 0x1d, 0xe1, 0xd9, 0xb5, 0x74, 0x54, 0x41, 0xfe, 0x73, 0x10, 0xdd, 0xf1, 0x16, + 0xc4, 0x3d, 0x7b, 0xfe, 0xfd, 0x3e, 0xb6, 0xfd, 0x67, 0xd0, 0x5f, 0x7c, 0x17, 0x55, 0x55, 0xba, + 0x7f, 0x6a, 0x96, 0xf7, 0x8d, 0x86, 0x78, 0xeb, 0xe3, 0x65, 0x39, 0x85, 0x52, 0xf5, 0xd8, 0x50, + 0xd0, 0x19, 0x18, 0xf7, 0xdb, 0x4f, 0xaf, 0xa9, 0x65, 0x7d, 0xe2, 0xc7, 0x81, 0xd5, 0xdb, 0x7c, + 0x56, 0x79, 0x42, 0x96, 0x2d, 0x1a, 0x17, 0xe8, 0xb3, 0xeb, 0xaa, 0x51, 0x3d, 0xd9, 0x82, 0xc5, + 0x17, 0x03, 0x9e, 0xf5, 0x34, 0xec, 0x7c, 0x43, 0xe0, 0x93, 0xeb, 0x29, 0xa9, 0xb2, 0xfc, 0xf7, + 0x20, 0xba, 0xef, 0xb0, 0xe6, 0xb4, 0x03, 0xed, 0xc9, 0xfc, 0x24, 0x60, 0x9f, 0x52, 0xd2, 0x85, + 0xfb, 0x83, 0xef, 0xa6, 0x6c, 0xbe, 0x87, 0xe3, 0xa8, 0xec, 0xa5, 0x19, 0x87, 0xb2, 0xfd, 0x3d, + 0x1c, 0xd7, 0xae, 0xa4, 0x46, 0xf4, 0xf7, 0x70, 0x02, 0xb8, 0xf5, 0x3d, 0x1c, 0x8f, 0x67, 0xef, + 0xf7, 0x70, 0xbc, 0xd6, 0x82, 0xdf, 0xc3, 0x09, 0x6b, 0x50, 0x93, 0x4f, 0x53, 0x04, 0xb9, 0xab, + 0xde, 0xcb, 0xa2, 0xbb, 0xc9, 0xfe, 0xf4, 0x3a, 0x2a, 0xc4, 0xf4, 0x2b, 0x39, 0x71, 0x0b, 0xaf, + 0xc7, 0x33, 0x75, 0x6e, 0xe2, 0x6d, 0xf5, 0xe6, 0x95, 0xef, 0x9f, 0xa9, 0xb5, 0x97, 0x9e, 0x6c, + 0x58, 0x29, 0xde, 0xa9, 0x5c, 0x0f, 0x4d, 0x1e, 0xb5, 0x05, 0xbb, 0xe5, 0x37, 0xfa, 0xc1, 0x44, + 0x75, 0x6b, 0x42, 0x35, 0xfa, 0xa8, 0xcb, 0x10, 0x6a, 0xf2, 0xad, 0xde, 0x3c, 0x31, 0xc9, 0x49, + 0xdf, 0xb2, 0xb5, 0x7b, 0x18, 0x73, 0xdb, 0xfa, 0x49, 0x7f, 0x05, 0xe5, 0x7e, 0xa9, 0x92, 0x5a, + 0xdb, 0xbd, 0x68, 0xe7, 0xcd, 0x2e, 0x53, 0x63, 0xa7, 0x99, 0x47, 0x7d, 0xf1, 0x50, 0x7a, 0x63, + 0x4f, 0xf0, 0x5d, 0xe9, 0x8d, 0x77, 0x92, 0xff, 0xe4, 0x7a, 0x4a, 0xaa, 0x2c, 0xff, 0x3a, 0x88, + 0x6e, 0x92, 0x65, 0x51, 0x71, 0xf0, 0x59, 0x5f, 0xcb, 0x28, 0x1e, 0x3e, 0xbf, 0xb6, 0x9e, 0x2a, + 0xd4, 0x7f, 0x0c, 0xa2, 0x5b, 0x81, 0x42, 0xc9, 0x00, 0xb9, 0x86, 0x75, 0x37, 0x50, 0x7e, 0x7c, + 0x7d, 0x45, 0x6a, 0xba, 0xb7, 0xf1, 0x71, 0xfb, 0x43, 0x31, 0x01, 0xdb, 0x63, 0xfa, 0x43, 0x31, + 0xdd, 0x5a, 0x78, 0x0b, 0xaa, 0x4e, 0x4a, 0xd4, 0xca, 0xc8, 0xb7, 0x05, 0x25, 0x72, 0x16, 0xb4, + 0x22, 0x5a, 0xeb, 0xe4, 0x7c, 0x4e, 0x5e, 0xbc, 0x2d, 0xe2, 0x7c, 0x4a, 0x3b, 0x91, 0xf2, 0x6e, + 0x27, 0x9a, 0xc3, 0x5b, 0x77, 0xb5, 0xf4, 0x94, 0x35, 0xcb, 0xbc, 0x47, 0x94, 0xbe, 0x46, 0x82, + 0x5b, 0x77, 0x2d, 0x94, 0xf0, 0xa6, 0x72, 0xda, 0x90, 0x37, 0x94, 0xca, 0x3e, 0xee, 0x83, 0xa2, + 0x05, 0x84, 0xf6, 0xa6, 0x4f, 0x04, 0x36, 0x42, 0x56, 0x5a, 0xa7, 0x02, 0x9b, 0x3d, 0x69, 0xc2, + 0xed, 0x18, 0xf8, 0x97, 0x10, 0x4f, 0xa1, 0x0c, 0xba, 0xd5, 0x54, 0x2f, 0xb7, 0x36, 0xed, 0x73, + 0xbb, 0xc3, 0xb2, 0xc5, 0x3c, 0x57, 0x8d, 0x49, 0xba, 0xb5, 0xa9, 0x6e, 0xb7, 0x88, 0xc6, 0x9b, + 0x96, 0xc6, 0xad, 0x48, 0x2f, 0x1f, 0x87, 0xcd, 0x38, 0x59, 0xe5, 0x7a, 0x2f, 0x96, 0xae, 0xa7, + 0x0a, 0xa3, 0x8e, 0x7a, 0xa2, 0x48, 0xda, 0xec, 0x49, 0xe3, 0xdd, 0x43, 0xcb, 0xad, 0x8e, 0xa7, + 0xad, 0x0e, 0x5b, 0xad, 0x90, 0x7a, 0xd2, 0x5f, 0x01, 0xef, 0xd5, 0xaa, 0xa8, 0xaa, 0xd7, 0x45, + 0x7b, 0x69, 0x96, 0x0d, 0xd7, 0x03, 0x61, 0xd2, 0x40, 0xc1, 0xbd, 0x5a, 0x0f, 0x4c, 0x44, 0x72, + 0xb3, 0xb7, 0x99, 0x0f, 0xbb, 0xec, 0x08, 0xaa, 0x57, 0x24, 0xdb, 0x34, 0xda, 0x6f, 0xb3, 0x1e, + 0xb5, 0xae, 0xed, 0x28, 0xfc, 0xe0, 0x5a, 0x15, 0xde, 0xea, 0xcd, 0xa3, 0xcb, 0x00, 0x82, 0x12, + 0x33, 0xcb, 0x3d, 0xca, 0x84, 0x33, 0x93, 0xdc, 0xef, 0xa0, 0xd0, 0x9e, 0xa5, 0xec, 0x46, 0xaf, + 0xd3, 0xe9, 0x0c, 0xb8, 0xf7, 0x1c, 0xcb, 0x06, 0x82, 0xe7, 0x58, 0x08, 0x44, 0x4d, 0x27, 0x7f, + 0xd7, 0x9b, 0xb5, 0x07, 0x53, 0x5f, 0xd3, 0x29, 0x65, 0x8b, 0x0a, 0x35, 0x9d, 0x97, 0x46, 0xa3, + 0x81, 0x76, 0xab, 0x5e, 0xdc, 0x7f, 0x1c, 0x32, 0x83, 0xde, 0xde, 0x5f, 0xef, 0xc5, 0xa2, 0x19, + 0xc5, 0x38, 0x4c, 0xe7, 0x29, 0xf7, 0xcd, 0x28, 0x96, 0x8d, 0x1a, 0x09, 0xcd, 0x28, 0x6d, 0x94, + 0xaa, 0x5e, 0x9d, 0x23, 0x1c, 0x4c, 0xc3, 0xd5, 0x93, 0x4c, 0xbf, 0xea, 0x69, 0xb6, 0x75, 0xec, + 0x9a, 0xeb, 0x90, 0xe1, 0x17, 0x6a, 0xb1, 0xec, 0x89, 0x6d, 0xf1, 0x42, 0x27, 0x06, 0x43, 0xa3, + 0x0e, 0xa5, 0x80, 0x8f, 0x13, 0x6a, 0xae, 0x39, 0x19, 0x2e, 0x0a, 0x88, 0xcb, 0x38, 0x4f, 0xbc, + 0x8b, 0x53, 0x61, 0xb0, 0x45, 0x86, 0x16, 0xa7, 0xa4, 0x06, 0x3a, 0xd4, 0x77, 0x5f, 0xc5, 0xf4, + 0x74, 0x05, 0xfd, 0xce, 0xa3, 0xfb, 0x26, 0xe6, 0xa3, 0x1e, 0x24, 0x3e, 0xd4, 0x6f, 0x00, 0xbd, + 0x2d, 0x2f, 0x9d, 0x7e, 0x1c, 0x30, 0xe5, 0xa2, 0xa1, 0x85, 0x30, 0xad, 0x82, 0x82, 0x5a, 0x27, + 0xb8, 0xc0, 0x7f, 0x0a, 0x2b, 0x5f, 0x50, 0x9b, 0xfc, 0x54, 0x20, 0xa1, 0xa0, 0x6e, 0xa3, 0x28, + 0xcf, 0xb4, 0xd7, 0x41, 0x0f, 0x02, 0xfa, 0xf6, 0xd2, 0x67, 0xad, 0x93, 0x43, 0x3d, 0x67, 0x37, + 0x5d, 0x3a, 0xa7, 0x18, 0x9e, 0x82, 0xee, 0xa6, 0x4b, 0xff, 0x21, 0xc6, 0x7a, 0x2f, 0x16, 0x5f, + 0x18, 0x88, 0x39, 0xbc, 0x6d, 0x4e, 0xf2, 0x3d, 0xc5, 0x15, 0xf2, 0xd6, 0x51, 0xfe, 0xc3, 0x6e, + 0xd0, 0x5c, 0xcf, 0x3d, 0x29, 0x59, 0x02, 0x55, 0xa5, 0xbe, 0x9e, 0xe7, 0xde, 0x7f, 0x52, 0xb2, + 0x11, 0xfa, 0x76, 0xde, 0xbd, 0x30, 0xa4, 0x6c, 0x7f, 0x19, 0xbd, 0x7b, 0xc8, 0x66, 0x63, 0xc8, + 0xa7, 0xc3, 0x1f, 0xb9, 0x17, 0x62, 0xd9, 0x6c, 0x54, 0xff, 0xac, 0xed, 0xdd, 0xa0, 0xc4, 0xe6, + 0x4a, 0xdf, 0x2e, 0xbc, 0x59, 0xcc, 0xc6, 0x3c, 0xe6, 0xe8, 0x4a, 0x9f, 0xf8, 0x7d, 0x54, 0x0b, + 0x88, 0x2b, 0x7d, 0x0e, 0x80, 0xec, 0x4d, 0x4a, 0x00, 0xaf, 0xbd, 0x5a, 0x10, 0xb4, 0xa7, 0x00, + 0x33, 0xeb, 0x6a, 0x7b, 0x75, 0x62, 0x8b, 0xaf, 0xe0, 0x19, 0x1d, 0x21, 0x25, 0x66, 0xdd, 0x36, + 0x65, 0x82, 0x41, 0x56, 0x5f, 0x7c, 0xcf, 0x63, 0x31, 0x9f, 0xc7, 0xe5, 0x0a, 0x05, 0x83, 0xaa, + 0xa5, 0x05, 0x10, 0xc1, 0xe0, 0x05, 0x4d, 0x94, 0x37, 0x8f, 0x39, 0xb9, 0xdc, 0x67, 0x25, 0x5b, + 0xf0, 0x34, 0x07, 0xfc, 0x4d, 0x07, 0xfd, 0x40, 0x6d, 0x86, 0x88, 0x72, 0x8a, 0x35, 0x59, 0xa1, + 0x20, 0xe4, 0xed, 0x40, 0xf1, 0x0d, 0xda, 0x8a, 0xb3, 0x12, 0x9f, 0x0e, 0x4a, 0x2b, 0x18, 0x22, + 0xb2, 0x42, 0x12, 0x46, 0x6d, 0x7f, 0x92, 0xe6, 0x33, 0x6f, 0xdb, 0x9f, 0xd8, 0x5f, 0x70, 0xbc, + 0x45, 0x03, 0x66, 0x7c, 0x97, 0x0f, 0x4d, 0x7e, 0x37, 0x49, 0xbd, 0x99, 0xe9, 0x7d, 0xe8, 0x36, + 0x41, 0x8c, 0xef, 0x7e, 0x12, 0xb9, 0x7a, 0x59, 0x40, 0x0e, 0xd3, 0xe6, 0x0e, 0x9c, 0xcf, 0x95, + 0x43, 0x04, 0x5d, 0x61, 0xd2, 0x8c, 0xaa, 0x42, 0x7e, 0xba, 0xc8, 0x4f, 0x4a, 0x76, 0x9e, 0x66, + 0x50, 0xa2, 0x51, 0x55, 0xaa, 0x5b, 0x72, 0x62, 0x54, 0xf5, 0x71, 0xe6, 0x32, 0x85, 0x90, 0x3a, + 0x1f, 0x52, 0x9e, 0x94, 0x71, 0x82, 0x2f, 0x53, 0x48, 0x1b, 0x6d, 0x8c, 0xd8, 0x49, 0x0b, 0xe0, + 0x26, 0xd2, 0x8f, 0x80, 0x97, 0x69, 0x52, 0x8d, 0x81, 0x9f, 0xc4, 0x65, 0x3c, 0x07, 0x0e, 0x25, + 0x8e, 0x74, 0x85, 0x8c, 0x1c, 0x86, 0x88, 0x74, 0x8a, 0x55, 0x0e, 0xff, 0x30, 0x7a, 0xbf, 0x1e, + 0xe8, 0x21, 0x57, 0xdf, 0xfc, 0x7f, 0x21, 0xfe, 0x58, 0xc8, 0xf0, 0x03, 0x6d, 0x63, 0xcc, 0x4b, + 0x88, 0xe7, 0x8d, 0xed, 0xf7, 0xf4, 0xef, 0x02, 0x7c, 0x32, 0xa8, 0x1b, 0xe4, 0x98, 0xf1, 0xf4, + 0xbc, 0x5e, 0x57, 0xa9, 0x53, 0x2c, 0xd4, 0x20, 0xb6, 0x78, 0x14, 0xf8, 0x4c, 0x81, 0x8f, 0x33, + 0x03, 0x8d, 0x2d, 0x3d, 0x85, 0x22, 0xc3, 0x03, 0x8d, 0xa3, 0x2d, 0x00, 0x62, 0xa0, 0xf1, 0x82, + 0x26, 0xba, 0x6c, 0xf1, 0x04, 0xc2, 0x95, 0x99, 0x40, 0xbf, 0xca, 0x4c, 0x9c, 0x77, 0x04, 0xb2, + 0xe8, 0xfd, 0x23, 0x98, 0xbf, 0x81, 0xb2, 0xba, 0x48, 0x8b, 0xfd, 0x7a, 0x86, 0x8d, 0xf9, 0x02, + 0xbf, 0x45, 0x67, 0x88, 0x91, 0x46, 0x88, 0x34, 0x84, 0x40, 0xcd, 0x50, 0x66, 0x80, 0x83, 0xea, + 0x38, 0x9e, 0x83, 0xf8, 0xe8, 0xc2, 0x70, 0x9d, 0x32, 0x62, 0x41, 0xc4, 0x50, 0x46, 0xc2, 0xd6, + 0xeb, 0x46, 0x86, 0x39, 0x85, 0x59, 0x1d, 0x61, 0xe5, 0x49, 0xbc, 0x9a, 0x43, 0xce, 0x95, 0x49, + 0xb4, 0x09, 0x6b, 0x99, 0xf4, 0xf3, 0xc4, 0x26, 0x6c, 0x1f, 0x3d, 0x2b, 0xe9, 0x76, 0x1e, 0xfc, + 0x09, 0x2b, 0xb9, 0xfc, 0x8b, 0x1e, 0x67, 0x65, 0x86, 0x92, 0x6e, 0xf7, 0xa1, 0x3a, 0x24, 0x91, + 0x74, 0x87, 0x35, 0xac, 0x4f, 0x61, 0x3b, 0x65, 0x78, 0x05, 0xa5, 0x8e, 0x93, 0x17, 0xf3, 0x38, + 0xcd, 0x54, 0x34, 0x7c, 0x11, 0xb0, 0x4d, 0xe8, 0x10, 0x9f, 0xc2, 0xee, 0xab, 0x6b, 0x7d, 0x3c, + 0x3c, 0x5c, 0x42, 0xb4, 0x27, 0xdc, 0x61, 0x9f, 0xd8, 0x13, 0xee, 0xd6, 0x32, 0x4b, 0x35, 0xc3, + 0x0a, 0x6e, 0x25, 0x88, 0x1d, 0x36, 0xc5, 0x1b, 0x44, 0x96, 0x4d, 0x04, 0x12, 0x4b, 0xb5, 0xa0, + 0x82, 0x99, 0xdb, 0x0c, 0xb6, 0x97, 0xe6, 0x71, 0x96, 0xfe, 0x1c, 0xdf, 0x7d, 0xb6, 0xec, 0x34, + 0x04, 0x31, 0xb7, 0xf9, 0x49, 0x9f, 0xab, 0x7d, 0xe0, 0x93, 0xb4, 0x1e, 0xfa, 0x1f, 0x06, 0x9e, + 0x9b, 0x20, 0xba, 0x5d, 0x59, 0xa4, 0x72, 0xf5, 0x8b, 0x41, 0x74, 0x13, 0x3f, 0xd6, 0xed, 0xa2, + 0x18, 0xd7, 0x29, 0xc9, 0x29, 0x24, 0x90, 0x16, 0x7c, 0xf8, 0x69, 0xf8, 0x59, 0x21, 0x9c, 0x38, + 0x59, 0xef, 0xa1, 0x66, 0x9d, 0xd7, 0xd6, 0x63, 0xc9, 0x58, 0xfe, 0xa9, 0xab, 0xb3, 0x0a, 0x4a, + 0x35, 0x53, 0xee, 0x03, 0x47, 0xbd, 0xd3, 0xe2, 0x46, 0x16, 0x58, 0x57, 0x94, 0xe8, 0x9d, 0x61, + 0x0d, 0xb3, 0xbb, 0x63, 0x71, 0xa7, 0x50, 0xb1, 0x6c, 0x09, 0xe2, 0xfa, 0xdb, 0x06, 0x69, 0xcc, + 0xa2, 0x88, 0xdd, 0x1d, 0x9a, 0x36, 0xe9, 0x46, 0xdb, 0xed, 0x76, 0xbe, 0x3a, 0xc0, 0x67, 0xe4, + 0x1e, 0x4b, 0x02, 0x23, 0xd2, 0x8d, 0x00, 0x6e, 0xed, 0x7e, 0x96, 0x2c, 0x9e, 0x26, 0x71, 0xc5, + 0x4f, 0xe2, 0x55, 0xc6, 0xe2, 0xa9, 0x98, 0xd7, 0xf1, 0xee, 0x67, 0xc3, 0x8c, 0x6c, 0x88, 0xda, + 0xfd, 0xa4, 0x60, 0xb3, 0xb2, 0x53, 0x7f, 0xc1, 0x4b, 0x5d, 0x2d, 0xbc, 0x8b, 0x72, 0x24, 0x51, + 0x5e, 0x7c, 0xad, 0xf0, 0x5e, 0x18, 0x32, 0xaf, 0x44, 0x49, 0x91, 0x48, 0x43, 0x6e, 0xf9, 0x74, + 0x9c, 0x04, 0xe4, 0x76, 0x80, 0x30, 0x9f, 0x49, 0x90, 0xbf, 0x37, 0x7f, 0x84, 0x82, 0xab, 0x0f, + 0xf7, 0x6e, 0xf8, 0x74, 0x6d, 0x68, 0x64, 0x7f, 0xfb, 0x6c, 0xb3, 0x27, 0x6d, 0x16, 0x6e, 0xea, + 0xe3, 0xc1, 0x47, 0x50, 0x79, 0xde, 0x6f, 0xae, 0x85, 0x23, 0x23, 0x25, 0x16, 0x6e, 0x6d, 0xca, + 0x04, 0x7a, 0x2d, 0x7b, 0x31, 0x4d, 0xb9, 0x92, 0x35, 0x17, 0x76, 0x37, 0xda, 0x06, 0xda, 0x14, + 0x51, 0x2b, 0x9a, 0x36, 0x63, 0x79, 0xcd, 0x4c, 0xd8, 0x6c, 0x96, 0x81, 0x82, 0x4e, 0x21, 0x96, + 0xdf, 0x78, 0xdb, 0x6a, 0xdb, 0xf2, 0x82, 0xc4, 0x58, 0x1e, 0x54, 0x30, 0x69, 0x64, 0x8d, 0xc9, + 0x33, 0x88, 0xe6, 0xc1, 0xae, 0xb5, 0xcd, 0x38, 0x00, 0x91, 0x46, 0x7a, 0x41, 0xf3, 0x1a, 0x56, + 0x2d, 0xde, 0x87, 0xe6, 0x49, 0xe0, 0x2f, 0xe2, 0x08, 0x65, 0x4b, 0x4c, 0xbc, 0x86, 0xe5, 0xc1, + 0xcc, 0x3a, 0x01, 0x79, 0x78, 0xbe, 0x3a, 0x98, 0xe2, 0x75, 0x02, 0xd6, 0x17, 0x0c, 0xb1, 0x4e, + 0xa0, 0x58, 0xb7, 0xe9, 0xf4, 0xe7, 0x7f, 0x0f, 0xe3, 0xca, 0x54, 0xce, 0xd3, 0x74, 0x5e, 0x30, + 0xd4, 0x74, 0x94, 0x82, 0xfb, 0x48, 0xed, 0x8f, 0x0b, 0x7b, 0x1e, 0xa9, 0xef, 0xa3, 0xc2, 0x0f, + 0xba, 0x30, 0xe9, 0xe1, 0xf9, 0xed, 0xff, 0xf9, 0xe6, 0xc6, 0xe0, 0xeb, 0x6f, 0x6e, 0x0c, 0xfe, + 0xef, 0x9b, 0x1b, 0x83, 0x5f, 0x7c, 0x7b, 0xe3, 0x9d, 0xaf, 0xbf, 0xbd, 0xf1, 0xce, 0xff, 0x7e, + 0x7b, 0xe3, 0x9d, 0xaf, 0xde, 0x55, 0x7f, 0x7d, 0xf1, 0xcd, 0xaf, 0x88, 0xbf, 0xa1, 0xf8, 0xec, + 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x4f, 0x9f, 0x53, 0xa1, 0x71, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -475,6 +476,7 @@ type ClientCommandsClient interface { ObjectCreateRelationOption(ctx context.Context, in *pb.RpcObjectCreateRelationOptionRequest, opts ...grpc.CallOption) (*pb.RpcObjectCreateRelationOptionResponse, error) RelationListRemoveOption(ctx context.Context, in *pb.RpcRelationListRemoveOptionRequest, opts ...grpc.CallOption) (*pb.RpcRelationListRemoveOptionResponse, error) RelationOptions(ctx context.Context, in *pb.RpcRelationOptionsRequest, opts ...grpc.CallOption) (*pb.RpcRelationOptionsResponse, error) + RelationListWithValue(ctx context.Context, in *pb.RpcRelationListWithValueRequest, opts ...grpc.CallOption) (*pb.RpcRelationListWithValueResponse, error) // Object Relations // *** ObjectRelationAdd(ctx context.Context, in *pb.RpcObjectRelationAddRequest, opts ...grpc.CallOption) (*pb.RpcObjectRelationAddResponse, error) @@ -1564,6 +1566,15 @@ func (c *clientCommandsClient) RelationOptions(ctx context.Context, in *pb.RpcRe return out, nil } +func (c *clientCommandsClient) RelationListWithValue(ctx context.Context, in *pb.RpcRelationListWithValueRequest, opts ...grpc.CallOption) (*pb.RpcRelationListWithValueResponse, error) { + out := new(pb.RpcRelationListWithValueResponse) + err := c.cc.Invoke(ctx, "/anytype.ClientCommands/RelationListWithValue", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *clientCommandsClient) ObjectRelationAdd(ctx context.Context, in *pb.RpcObjectRelationAddRequest, opts ...grpc.CallOption) (*pb.RpcObjectRelationAddResponse, error) { out := new(pb.RpcObjectRelationAddResponse) err := c.cc.Invoke(ctx, "/anytype.ClientCommands/ObjectRelationAdd", in, out, opts...) @@ -3171,6 +3182,7 @@ type ClientCommandsServer interface { ObjectCreateRelationOption(context.Context, *pb.RpcObjectCreateRelationOptionRequest) *pb.RpcObjectCreateRelationOptionResponse RelationListRemoveOption(context.Context, *pb.RpcRelationListRemoveOptionRequest) *pb.RpcRelationListRemoveOptionResponse RelationOptions(context.Context, *pb.RpcRelationOptionsRequest) *pb.RpcRelationOptionsResponse + RelationListWithValue(context.Context, *pb.RpcRelationListWithValueRequest) *pb.RpcRelationListWithValueResponse // Object Relations // *** ObjectRelationAdd(context.Context, *pb.RpcObjectRelationAddRequest) *pb.RpcObjectRelationAddResponse @@ -3674,6 +3686,9 @@ func (*UnimplementedClientCommandsServer) RelationListRemoveOption(ctx context.C func (*UnimplementedClientCommandsServer) RelationOptions(ctx context.Context, req *pb.RpcRelationOptionsRequest) *pb.RpcRelationOptionsResponse { return nil } +func (*UnimplementedClientCommandsServer) RelationListWithValue(ctx context.Context, req *pb.RpcRelationListWithValueRequest) *pb.RpcRelationListWithValueResponse { + return nil +} func (*UnimplementedClientCommandsServer) ObjectRelationAdd(ctx context.Context, req *pb.RpcObjectRelationAddRequest) *pb.RpcObjectRelationAddResponse { return nil } @@ -5914,6 +5929,24 @@ func _ClientCommands_RelationOptions_Handler(srv interface{}, ctx context.Contex return interceptor(ctx, in, info, handler) } +func _ClientCommands_RelationListWithValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(pb.RpcRelationListWithValueRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClientCommandsServer).RelationListWithValue(ctx, in), nil + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/anytype.ClientCommands/RelationListWithValue", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClientCommandsServer).RelationListWithValue(ctx, req.(*pb.RpcRelationListWithValueRequest)), nil + } + return interceptor(ctx, in, info, handler) +} + func _ClientCommands_ObjectRelationAdd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(pb.RpcObjectRelationAddRequest) if err := dec(in); err != nil { @@ -9244,6 +9277,10 @@ var _ClientCommands_serviceDesc = grpc.ServiceDesc{ MethodName: "RelationOptions", Handler: _ClientCommands_RelationOptions_Handler, }, + { + MethodName: "RelationListWithValue", + Handler: _ClientCommands_RelationListWithValue_Handler, + }, { MethodName: "ObjectRelationAdd", Handler: _ClientCommands_ObjectRelationAdd_Handler, diff --git a/pkg/lib/bundle/relation.gen.go b/pkg/lib/bundle/relation.gen.go index f0bded267..d0b2a2c39 100644 --- a/pkg/lib/bundle/relation.gen.go +++ b/pkg/lib/bundle/relation.gen.go @@ -9,7 +9,7 @@ import ( "github.com/anyproto/anytype-heart/pkg/lib/pb/model" ) -const RelationChecksum = "68778695c5d49dd1ffbab91e13bd9769d80fd89de3a77902cec1c5066e5495a8" +const RelationChecksum = "a8068f8bee7828cfa88a4cf262a8276bf2cbf1eadc9934dd52c5c06be2d02bbd" const ( RelationKeyTag domain.RelationKey = "tag" RelationKeyCamera domain.RelationKey = "camera" @@ -459,13 +459,13 @@ var ( DataSource: model.Relation_details, Description: "Done checkbox used to render action layout. ", Format: model.RelationFormat_checkbox, - Hidden: true, Id: "_brdone", Key: "done", MaxCount: 1, Name: "Done", ReadOnly: false, ReadOnlyRelation: true, + Revision: 1, Scope: model.Relation_type, }, RelationKeyDueDate: { diff --git a/pkg/lib/bundle/relations.json b/pkg/lib/bundle/relations.json index b72138981..1e066dff5 100644 --- a/pkg/lib/bundle/relations.json +++ b/pkg/lib/bundle/relations.json @@ -91,12 +91,13 @@ { "description": "Done checkbox used to render action layout. ", "format": "checkbox", - "hidden": true, + "hidden": false, "key": "done", "maxCount": 1, "name": "Done", "readonly": false, - "source": "details" + "source": "details", + "revision": 1 }, { "description": "Artist URL", diff --git a/pkg/lib/bundle/types.gen.go b/pkg/lib/bundle/types.gen.go index d52b8ab6c..d54f95654 100644 --- a/pkg/lib/bundle/types.gen.go +++ b/pkg/lib/bundle/types.gen.go @@ -9,7 +9,7 @@ import ( "github.com/anyproto/anytype-heart/pkg/lib/pb/model" ) -const TypeChecksum = "8b79add6b322acbcee123ad178c1aee523a2d9b9f219c391903530b29e554a1e" +const TypeChecksum = "a475473f827167d93b818920569ea0f2c758761ef24d6a6bcb8da6b009f01904" const ( TypePrefix = "_ot" ) @@ -337,11 +337,12 @@ var ( TypeKeyTemplate: { Description: "Sample object that has already some details in place and used to create objects from", - Hidden: true, + IconEmoji: "🧩", Layout: model.ObjectType_basic, Name: "Template", Readonly: true, RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTargetObjectType), MustGetRelationLink(RelationKeyTemplateIsBundled)}, + Revision: 1, Types: []model.SmartBlockType{model.SmartBlockType_Template}, Url: TypePrefix + "template", }, diff --git a/pkg/lib/bundle/types.json b/pkg/lib/bundle/types.json index 8184ae50a..e654caf0b 100644 --- a/pkg/lib/bundle/types.json +++ b/pkg/lib/bundle/types.json @@ -268,14 +268,15 @@ "types": [ "Template" ], - "emoji": "", - "hidden": true, + "emoji": "\uD83E\uDDE9", + "hidden": false, "layout": "basic", "relations": [ "targetObjectType", "templateIsBundled" ], - "description": "Sample object that has already some details in place and used to create objects from" + "description": "Sample object that has already some details in place and used to create objects from", + "revision": 1 }, { "id": "set", diff --git a/pkg/lib/database/schema.go b/pkg/lib/database/schema.go deleted file mode 100644 index 57ee9aae5..000000000 --- a/pkg/lib/database/schema.go +++ /dev/null @@ -1,11 +0,0 @@ -package database - -import ( - "github.com/anyproto/anytype-heart/pkg/lib/pb/model" -) - -// Schema used to subset compatible objects by some common relations -type Schema interface { - ListRelations() []*model.RelationLink - RequiredRelations() []*model.RelationLink -} diff --git a/pkg/lib/database/schema_by_realtion_test.go b/pkg/lib/database/schema_by_realtion_test.go deleted file mode 100644 index f4742e32d..000000000 --- a/pkg/lib/database/schema_by_realtion_test.go +++ /dev/null @@ -1,74 +0,0 @@ -package database - -import ( - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/anyproto/anytype-heart/pkg/lib/bundle" - "github.com/anyproto/anytype-heart/pkg/lib/pb/model" -) - -func TestSchemaByRelations_ListRelations(t *testing.T) { - // Given - common := []*model.RelationLink{ - { - Key: bundle.RelationKeyAssignee.String(), - Format: model.RelationFormat_object, - }, - { - Key: bundle.RelationKeyDueDate.String(), - Format: model.RelationFormat_date, - }, - } - sch := NewByRelations(common) - - // When - got := sch.ListRelations() - - // Then - want := []*model.RelationLink{ - { - Key: bundle.RelationKeyAssignee.String(), - Format: model.RelationFormat_object, - }, - { - Key: bundle.RelationKeyDueDate.String(), - Format: model.RelationFormat_date, - }, - } - assert.ElementsMatch(t, want, got) -} - -func TestSchemaByRelations_RequiredRelations(t *testing.T) { - t.Run("hardcoded relations are added", func(t *testing.T) { - // Given - common := []*model.RelationLink{ - { - Key: bundle.RelationKeyAssignee.String(), - Format: model.RelationFormat_object, - }, - } - sch := NewByRelations(common) - - // When - got := sch.RequiredRelations() - - // Then - want := []*model.RelationLink{ - { - Key: bundle.RelationKeyName.String(), - Format: model.RelationFormat_shorttext, - }, - { - Key: bundle.RelationKeyType.String(), - Format: model.RelationFormat_object, - }, - { - Key: bundle.RelationKeyAssignee.String(), - Format: model.RelationFormat_object, - }, - } - assert.ElementsMatch(t, want, got) - }) -} diff --git a/pkg/lib/database/schema_by_relation.go b/pkg/lib/database/schema_by_relation.go deleted file mode 100644 index a4ebd6f27..000000000 --- a/pkg/lib/database/schema_by_relation.go +++ /dev/null @@ -1,31 +0,0 @@ -package database - -import ( - "github.com/samber/lo" - - "github.com/anyproto/anytype-heart/pkg/lib/bundle" - "github.com/anyproto/anytype-heart/pkg/lib/pb/model" -) - -type schemaByRelations struct { - CommonRelations []*model.RelationLink -} - -func NewByRelations(commonRelations []*model.RelationLink) Schema { - return &schemaByRelations{CommonRelations: commonRelations} -} - -func (sch *schemaByRelations) RequiredRelations() []*model.RelationLink { - required := []*model.RelationLink{ - bundle.MustGetRelationLink(bundle.RelationKeyName), - bundle.MustGetRelationLink(bundle.RelationKeyType), - } - required = append(required, sch.CommonRelations...) - return lo.UniqBy(required, func(rel *model.RelationLink) string { - return rel.Key - }) -} - -func (sch *schemaByRelations) ListRelations() []*model.RelationLink { - return sch.CommonRelations -} diff --git a/pkg/lib/database/schema_by_type.go b/pkg/lib/database/schema_by_type.go deleted file mode 100644 index fef3abfdb..000000000 --- a/pkg/lib/database/schema_by_type.go +++ /dev/null @@ -1,22 +0,0 @@ -package database - -import ( - "github.com/anyproto/anytype-heart/pkg/lib/bundle" - "github.com/anyproto/anytype-heart/pkg/lib/pb/model" -) - -type schemaByType struct { - ObjType *model.ObjectType -} - -func NewByType(objType *model.ObjectType) Schema { - return &schemaByType{ObjType: objType} -} - -func (sch *schemaByType) ListRelations() []*model.RelationLink { - return sch.ObjType.RelationLinks -} - -func (sch *schemaByType) RequiredRelations() []*model.RelationLink { - return []*model.RelationLink{bundle.MustGetRelationLink(bundle.RelationKeyName)} -} diff --git a/pkg/lib/database/schema_by_type_test.go b/pkg/lib/database/schema_by_type_test.go deleted file mode 100644 index d04c552b5..000000000 --- a/pkg/lib/database/schema_by_type_test.go +++ /dev/null @@ -1,43 +0,0 @@ -package database - -import ( - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/anyproto/anytype-heart/pkg/lib/bundle" - "github.com/anyproto/anytype-heart/pkg/lib/pb/model" -) - -func givenSchemaByType() Schema { - objType := bundle.MustGetType(bundle.TypeKeyProject) - return NewByType(objType) -} - -func TestSchemaByType_RequiredRelations(t *testing.T) { - // Given - sch := givenSchemaByType() - - // When - got := sch.RequiredRelations() - - // Then - want := []*model.RelationLink{ - // Relation links from type are ignored - bundle.MustGetRelationLink(bundle.RelationKeyName), - } - assert.ElementsMatch(t, want, got) -} - -func TestSchemaByType_ListRelations(t *testing.T) { - // Given - sch := givenSchemaByType() - - // When - got := sch.ListRelations() - - // Then - want := bundle.MustGetType(bundle.TypeKeyProject).RelationLinks - - assert.ElementsMatch(t, want, got) -} diff --git a/pkg/lib/database/schema_empty.go b/pkg/lib/database/schema_empty.go deleted file mode 100644 index 3528561b4..000000000 --- a/pkg/lib/database/schema_empty.go +++ /dev/null @@ -1,20 +0,0 @@ -package database - -import ( - "github.com/anyproto/anytype-heart/pkg/lib/bundle" - "github.com/anyproto/anytype-heart/pkg/lib/pb/model" -) - -type emptySchema struct{} - -func NewEmptySchema() Schema { - return &emptySchema{} -} - -func (sch *emptySchema) RequiredRelations() []*model.RelationLink { - return []*model.RelationLink{bundle.MustGetRelationLink(bundle.RelationKeyName)} -} - -func (sch *emptySchema) ListRelations() []*model.RelationLink { - return nil -} diff --git a/pkg/lib/localstore/objectstore/mock_objectstore/mock_ObjectStore.go b/pkg/lib/localstore/objectstore/mock_objectstore/mock_ObjectStore.go index 3f0247737..308fbb312 100644 --- a/pkg/lib/localstore/objectstore/mock_objectstore/mock_ObjectStore.go +++ b/pkg/lib/localstore/objectstore/mock_objectstore/mock_ObjectStore.go @@ -2398,6 +2398,53 @@ func (_c *MockObjectStore_QueryByIDAndSubscribeForChanges_Call) RunAndReturn(run return _c } +// QueryIterate provides a mock function with given fields: q, proc +func (_m *MockObjectStore) QueryIterate(q database.Query, proc func(*types.Struct)) error { + ret := _m.Called(q, proc) + + if len(ret) == 0 { + panic("no return value specified for QueryIterate") + } + + var r0 error + if rf, ok := ret.Get(0).(func(database.Query, func(*types.Struct)) error); ok { + r0 = rf(q, proc) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MockObjectStore_QueryIterate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'QueryIterate' +type MockObjectStore_QueryIterate_Call struct { + *mock.Call +} + +// QueryIterate is a helper method to define mock.On call +// - q database.Query +// - proc func(*types.Struct) +func (_e *MockObjectStore_Expecter) QueryIterate(q interface{}, proc interface{}) *MockObjectStore_QueryIterate_Call { + return &MockObjectStore_QueryIterate_Call{Call: _e.mock.On("QueryIterate", q, proc)} +} + +func (_c *MockObjectStore_QueryIterate_Call) Run(run func(q database.Query, proc func(*types.Struct))) *MockObjectStore_QueryIterate_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(database.Query), args[1].(func(*types.Struct))) + }) + return _c +} + +func (_c *MockObjectStore_QueryIterate_Call) Return(_a0 error) *MockObjectStore_QueryIterate_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *MockObjectStore_QueryIterate_Call) RunAndReturn(run func(database.Query, func(*types.Struct)) error) *MockObjectStore_QueryIterate_Call { + _c.Call.Return(run) + return _c +} + // QueryObjectIDs provides a mock function with given fields: q func (_m *MockObjectStore) QueryObjectIDs(q database.Query) ([]string, int, error) { ret := _m.Called(q) diff --git a/pkg/lib/localstore/objectstore/objects.go b/pkg/lib/localstore/objectstore/objects.go index 9e5e2beb1..ab0c56fde 100644 --- a/pkg/lib/localstore/objectstore/objects.go +++ b/pkg/lib/localstore/objectstore/objects.go @@ -56,6 +56,7 @@ type ObjectStore interface { QueryByID(ids []string) (records []database.Record, err error) QueryByIDAndSubscribeForChanges(ids []string, subscription database.Subscription) (records []database.Record, close func(), err error) QueryObjectIDs(q database.Query) (ids []string, total int, err error) + QueryIterate(q database.Query, proc func(details *types.Struct)) error HasIDs(ids ...string) (exists []string, err error) GetByIDs(spaceID string, ids []string) ([]*model.ObjectInfo, error) diff --git a/pkg/lib/localstore/objectstore/queries.go b/pkg/lib/localstore/objectstore/queries.go index f31437282..a2089ba4b 100644 --- a/pkg/lib/localstore/objectstore/queries.go +++ b/pkg/lib/localstore/objectstore/queries.go @@ -8,6 +8,7 @@ import ( "strings" "time" + anystore "github.com/anyproto/any-store" "github.com/blevesearch/bleve/v2/search" "github.com/gogo/protobuf/types" "github.com/samber/lo" @@ -504,3 +505,50 @@ func (s *dsObjectStore) QueryByIDAndSubscribeForChanges(ids []string, sub databa s.addSubscriptionIfNotExists(sub) return } + +func (s *dsObjectStore) QueryIterate(q database.Query, proc func(details *types.Struct)) (err error) { + arena := s.arenaPool.Get() + defer s.arenaPool.Put(arena) + + filters, err := database.NewFilters(q, s, arena) + if err != nil { + return fmt.Errorf("new filters: %w", err) + } + + anystoreFilter := filters.FilterObj.AnystoreFilter() + query := s.objects.Find(anystoreFilter) + + iter, err := query.Iter(s.componentCtx) + if err != nil { + return fmt.Errorf("find: %w", err) + } + + defer func() { + if iterCloseErr := iter.Close(); iterCloseErr != nil { + err = errors.Join(iterCloseErr, err) + } + }() + + for iter.Next() { + var doc anystore.Doc + doc, err = iter.Doc() + if err != nil { + err = fmt.Errorf("get doc: %w", err) + return + } + + var details *types.Struct + details, err = pbtypes.JsonToProto(doc.Value()) + if err != nil { + err = fmt.Errorf("json to proto: %w", err) + return + } + proc(details) + } + err = iter.Err() + if err != nil { + err = fmt.Errorf("iterate: %w", err) + return + } + return +} diff --git a/pkg/lib/localstore/objectstore/queries_test.go b/pkg/lib/localstore/objectstore/queries_test.go index ece21cef1..08c1482d0 100644 --- a/pkg/lib/localstore/objectstore/queries_test.go +++ b/pkg/lib/localstore/objectstore/queries_test.go @@ -1,7 +1,7 @@ package objectstore import ( - context2 "context" + "context" "fmt" "sort" "strconv" @@ -1104,7 +1104,7 @@ func TestQueryByIdAndSubscribeForChanges(t *testing.T) { assertRecordsEqual(t, []TestObject{obj1, obj3}, recs) t.Run("update details called, but there are no changes", func(t *testing.T) { - err = s.UpdateObjectDetails(context2.Background(), "id1", makeDetails(obj1)) + err = s.UpdateObjectDetails(context.Background(), "id1", makeDetails(obj1)) require.NoError(t, err) select { @@ -1116,7 +1116,7 @@ func TestQueryByIdAndSubscribeForChanges(t *testing.T) { t.Run("update details order", func(t *testing.T) { for i := 1; i <= 1000; i++ { - err = s.UpdateObjectDetails(context2.Background(), "id1", makeDetails(makeObjectWithName("id1", fmt.Sprintf("%d", i)))) + err = s.UpdateObjectDetails(context.Background(), "id1", makeDetails(makeObjectWithName("id1", fmt.Sprintf("%d", i)))) require.NoError(t, err) } @@ -1265,3 +1265,73 @@ func TestIndex(t *testing.T) { obj2, obj3, }, recs) } + +func TestDsObjectStore_QueryAndProcess(t *testing.T) { + const spaceId = "spaceId" + s := NewStoreFixture(t) + s.AddObjects(t, []TestObject{ + { + bundle.RelationKeyId: pbtypes.String("id1"), + bundle.RelationKeySpaceId: pbtypes.String(spaceId), + bundle.RelationKeyName: pbtypes.String("first"), + }, + { + bundle.RelationKeyId: pbtypes.String("id2"), + bundle.RelationKeySpaceId: pbtypes.String(spaceId), + bundle.RelationKeyName: pbtypes.String("favorite"), + bundle.RelationKeyIsFavorite: pbtypes.Bool(true), + }, + { + bundle.RelationKeyId: pbtypes.String("id3"), + bundle.RelationKeySpaceId: pbtypes.String(spaceId), + bundle.RelationKeyName: pbtypes.String("hi!"), + bundle.RelationKeyDescription: pbtypes.String("hi!"), + }, + }) + + t.Run("counter", func(t *testing.T) { + var counter = 0 + err := s.QueryIterate(database.Query{Filters: []*model.BlockContentDataviewFilter{{ + RelationKey: bundle.RelationKeySpaceId.String(), + Condition: model.BlockContentDataviewFilter_Equal, + Value: pbtypes.String(spaceId), + }}}, func(_ *types.Struct) { + counter++ + }) + + assert.NoError(t, err) + assert.Equal(t, 3, counter) + }) + + t.Run("favorites collector", func(t *testing.T) { + favs := make([]string, 0) + err := s.QueryIterate(database.Query{Filters: []*model.BlockContentDataviewFilter{{ + RelationKey: bundle.RelationKeySpaceId.String(), + Condition: model.BlockContentDataviewFilter_Equal, + Value: pbtypes.String(spaceId), + }}}, func(s *types.Struct) { + if pbtypes.GetBool(s, bundle.RelationKeyIsFavorite.String()) { + favs = append(favs, pbtypes.GetString(s, bundle.RelationKeyId.String())) + } + }) + + assert.NoError(t, err) + assert.Equal(t, []string{"id2"}, favs) + }) + + t.Run("name and description analyzer", func(t *testing.T) { + ids := make([]string, 0) + err := s.QueryIterate(database.Query{Filters: []*model.BlockContentDataviewFilter{{ + RelationKey: bundle.RelationKeySpaceId.String(), + Condition: model.BlockContentDataviewFilter_Equal, + Value: pbtypes.String(spaceId), + }}}, func(s *types.Struct) { + if pbtypes.GetString(s, bundle.RelationKeyName.String()) == pbtypes.GetString(s, bundle.RelationKeyDescription.String()) { + ids = append(ids, pbtypes.GetString(s, bundle.RelationKeyId.String())) + } + }) + + assert.NoError(t, err) + assert.Equal(t, []string{"id3"}, ids) + }) +} diff --git a/space/internal/components/migration/systemobjectreviser/systemobjectreviser.go b/space/internal/components/migration/systemobjectreviser/systemobjectreviser.go index 7da55be02..262ae92ae 100644 --- a/space/internal/components/migration/systemobjectreviser/systemobjectreviser.go +++ b/space/internal/components/migration/systemobjectreviser/systemobjectreviser.go @@ -149,6 +149,7 @@ func buildDiffDetails(origin, current *types.Struct) (details []*model.Detail) { bundle.RelationKeyIsReadonly.String(), bundle.RelationKeyIsHidden.String(), bundle.RelationKeyRevision.String(), bundle.RelationKeyRelationReadonlyValue.String(), bundle.RelationKeyRelationMaxCount.String(), bundle.RelationKeyTargetObjectType.String(), + bundle.RelationKeyIconEmoji.String(), }) for key, value := range diff.Fields { diff --git a/space/spacecore/storage/sqlitestorage/service.go b/space/spacecore/storage/sqlitestorage/service.go index fed45cd03..50cffbc82 100644 --- a/space/spacecore/storage/sqlitestorage/service.go +++ b/space/spacecore/storage/sqlitestorage/service.go @@ -106,6 +106,12 @@ func (s *storageService) Run(ctx context.Context) (err error) { sql.Register(driverName, &sqlite3.SQLiteDriver{ ConnectHook: func(conn *sqlite3.SQLiteConn) error { + if s.dbTempPath != "" { + _, err := conn.Exec("PRAGMA temp_store_directory = '"+s.dbTempPath+"';", nil) + if err != nil { + return err + } + } conn.RegisterUpdateHook(func(op int, db string, table string, rowid int64) { s.lastWrite.Store(time.Now()) }) @@ -126,12 +132,6 @@ func (s *storageService) Run(ctx context.Context) (err error) { return } s.writeDb.SetMaxOpenConns(1) - if s.dbTempPath != "" { - if _, err = s.writeDb.Exec("PRAGMA temp_store_directory = '" + s.dbTempPath + "';"); err != nil { - log.Error("write:: failed to set temp store directory", zap.Error(err)) - return - } - } if _, err = s.writeDb.Exec(sqlCreateTables); err != nil { log.With(zap.String("db", "spacestore_sqlite"), zap.String("type", "createtable"), zap.Error(err)).Error("failed to open db") @@ -142,12 +142,6 @@ func (s *storageService) Run(ctx context.Context) (err error) { log.With(zap.String("db", "spacestore_sqlite"), zap.String("type", "read"), zap.Error(err)).Error("failed to open db") return } - if s.dbTempPath != "" { - if _, err = s.readDb.Exec("PRAGMA temp_store_directory = '" + s.dbTempPath + "';"); err != nil { - log.Error("read:: failed to set temp store directory", zap.Error(err)) - return - } - } s.readDb.SetMaxOpenConns(10) if err = initStmts(s); err != nil { diff --git a/tantivity_sha256.txt b/tantivity_sha256.txt index e7ab01e6f..6aced83d8 100644 --- a/tantivity_sha256.txt +++ b/tantivity_sha256.txt @@ -1,11 +1,11 @@ -7a472fd61b7c32b1aecc130a0d65a0b1e36f404c97144b2dc993c7bfe628ea6b deps/libs/android-386.tar.gz -7c3902588b98d6c4951124b8ded78b956448483a057c03e7ef85cb05182a7afd deps/libs/android-amd64.tar.gz -f12a6a9b2904a67a7cec36863a65dc128b8efd9c6968db29bb7904ca79040381 deps/libs/android-arm.tar.gz -d15a085afb2887a839697080101772525b614667924c5df98aa212ae3d72a825 deps/libs/android-arm64.tar.gz -dc6eca09d7946dbf0b0fd7615be555edfc6d6f1be9a47dd757d90626a6d05c09 deps/libs/darwin-amd64.tar.gz -216a751320edb4e5e737ebeb7eb3181fbdab71f2ec4d441621ce723056a5bc03 deps/libs/darwin-arm64.tar.gz -87d629216a127eb29064cb3d1dca63ef360d1920330bfcbecf0ca78e35f37756 deps/libs/ios-amd64.tar.gz -4a82c10a149f84073af08f2cf85dce680fd3301fc7cd19279227dddd60effbcc deps/libs/ios-arm64.tar.gz -b55ecde8d30fd38ab12ffe2d51415b2c7a74ff5af7b61cd35c401345a33a482d deps/libs/ios-arm64-sim.tar.gz -a514c9e61dd8e6fea7c5236cf359ffd14bc2fd5db52fc1ca8b0e3df10a00cbcd deps/libs/linux-amd64-musl.tar.gz -3bbab5b3a28cab4306b3ced4dd0c60f06a85e01592367ccf910f3a59c7db674b deps/libs/windows-amd64.tar.gz +03ed207923dd1f17882dd7b521669a17c2fa70199ed19a5ce87e93c23e627d95 deps/libs/android-386.tar.gz +0f9cc0190fa412dae498f790ff0629b9c5d3f4531095a9b2b756d295d483b173 deps/libs/android-amd64.tar.gz +8da9dd9060d02811c774f913d1b165f354d045b1237ff05aa5daab841a096481 deps/libs/android-arm.tar.gz +9b6c9973af588d984b214619fdc56dfc463b622bc933cd95fd0278e6f23bf63c deps/libs/android-arm64.tar.gz +eb3354937db4ec79a3586b06e0db0e474b5fdeb54fd4cf0b0b8f15f7167112aa deps/libs/darwin-amd64.tar.gz +abc15c4db91dc854461b3bc0665ab5221aa63694263c322d2833170ada279e7a deps/libs/darwin-arm64.tar.gz +1d93858fe723b24eda7c1ebaf2f5e191513125dc97a89282ae5c607bd4245c1b deps/libs/ios-amd64.tar.gz +4c5256eee402fa7d73c9db5d407ff76227cf144caca0504a4c051db18af67dc0 deps/libs/ios-arm64.tar.gz +7984768b08c8873b959b180d21aeccb4b4641d89f5980673c64ec5fa833a48e1 deps/libs/ios-arm64-sim.tar.gz +727643dab7d31ce3b08de4b9d85265a6dd9939e7323e6310457d0a8355791dcc deps/libs/linux-amd64-musl.tar.gz +628f3d449505f560a60885e46c40f16a6fa63d3ce98133e7ddce05176bbd3444 deps/libs/windows-amd64.tar.gz diff --git a/util/testMock/objectstore_mock.go b/util/testMock/objectstore_mock.go index ad72600fe..1032052c1 100644 --- a/util/testMock/objectstore_mock.go +++ b/util/testMock/objectstore_mock.go @@ -684,6 +684,20 @@ func (mr *MockObjectStoreMockRecorder) QueryByIDAndSubscribeForChanges(arg0, arg return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryByIDAndSubscribeForChanges", reflect.TypeOf((*MockObjectStore)(nil).QueryByIDAndSubscribeForChanges), arg0, arg1) } +// QueryIterate mocks base method. +func (m *MockObjectStore) QueryIterate(arg0 database.Query, arg1 func(*types.Struct)) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "QueryIterate", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// QueryIterate indicates an expected call of QueryIterate. +func (mr *MockObjectStoreMockRecorder) QueryIterate(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryIterate", reflect.TypeOf((*MockObjectStore)(nil).QueryIterate), arg0, arg1) +} + // QueryObjectIDs mocks base method. func (m *MockObjectStore) QueryObjectIDs(arg0 database.Query) ([]string, int, error) { m.ctrl.T.Helper()