diff --git a/.github/workflows/crds-verify-kind.yaml b/.github/workflows/crds-verify-kind.yaml index 20ef2ca92e..3168128b5f 100644 --- a/.github/workflows/crds-verify-kind.yaml +++ b/.github/workflows/crds-verify-kind.yaml @@ -14,7 +14,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v2 with: - go-version: 1.17 + go-version: 1.19.8 id: go # Look for a CLI that's made for this PR - name: Fetch built CLI @@ -57,9 +57,6 @@ jobs: matrix: # Latest k8s versions. There's no series-based tag, nor is there a latest tag. k8s: - - 1.16.15 - - 1.17.17 - - 1.18.15 - 1.19.7 - 1.20.2 - 1.21.1 diff --git a/.github/workflows/e2e-test-kind.yaml b/.github/workflows/e2e-test-kind.yaml index 3f079d3339..f0d42a81dd 100644 --- a/.github/workflows/e2e-test-kind.yaml +++ b/.github/workflows/e2e-test-kind.yaml @@ -14,7 +14,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v2 with: - go-version: 1.17 + go-version: 1.19.8 id: go # Look for a CLI that's made for this PR - name: Fetch built CLI @@ -60,11 +60,6 @@ jobs: strategy: matrix: k8s: - # doesn't cover 1.15 as 1.15 doesn't support "apiextensions.k8s.io/v1" that is needed for the case - #- 1.15.12 - - 1.16.15 - - 1.17.17 - - 1.18.20 - 1.19.16 - 1.20.15 - 1.21.12 @@ -76,7 +71,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v2 with: - go-version: 1.17 + go-version: 1.19.8 id: go - name: Check out the code uses: actions/checkout@v2 @@ -122,7 +117,7 @@ jobs: CREDS_FILE=/tmp/credential BSL_BUCKET=bucket \ ADDITIONAL_OBJECT_STORE_PROVIDER=aws ADDITIONAL_BSL_CONFIG=region=minio,s3ForcePathStyle="true",s3Url=http://$(hostname -i):9000 \ ADDITIONAL_CREDS_FILE=/tmp/credential ADDITIONAL_BSL_BUCKET=additional-bucket \ - GINKGO_FOCUS='Basic\].+\[ClusterResource' VELERO_IMAGE=velero:pr-test \ + GINKGO_FOCUS='Basic\]\[ClusterResource' VELERO_IMAGE=velero:pr-test \ make -C test/e2e run timeout-minutes: 30 - name: Upload debug bundle @@ -130,4 +125,4 @@ jobs: uses: actions/upload-artifact@v2 with: name: DebugBundle - path: /home/runner/work/velero/velero/test/e2e/debug-bundle* \ No newline at end of file + path: /home/runner/work/velero/velero/test/e2e/debug-bundle* diff --git a/.github/workflows/pr-ci-check.yml b/.github/workflows/pr-ci-check.yml index 834c3c589b..079a73baf0 100644 --- a/.github/workflows/pr-ci-check.yml +++ b/.github/workflows/pr-ci-check.yml @@ -8,7 +8,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v2 with: - go-version: 1.17 + go-version: 1.19.8 id: go - name: Check out the code uses: actions/checkout@v2 diff --git a/.github/workflows/pr-containers.yml b/.github/workflows/pr-containers.yml new file mode 100644 index 0000000000..c4d21f6d45 --- /dev/null +++ b/.github/workflows/pr-containers.yml @@ -0,0 +1,37 @@ +name: build Velero containers on Dockerfile change + +on: + pull_request: + branches: + - 'main' + - 'release-**' + paths: + - 'Dockerfile' + +jobs: + build: + name: Build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + name: Checkout + + - name: Set up QEMU + id: qemu + uses: docker/setup-qemu-action@v1 + with: + platforms: all + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v1 + with: + version: latest + + # Although this action also calls docker-push.sh, it is not triggered + # by push, so BRANCH and TAG are empty by default. docker-push.sh will + # only build Velero image without pushing. + - name: Make Velero container without pushing to registry. + if: github.repository == 'vmware-tanzu/velero' + run: | + ./hack/docker-push.sh \ No newline at end of file diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 20da9f459f..7f4fd93ec6 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -18,7 +18,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v2 with: - go-version: 1.17 + go-version: 1.19.8 id: go - name: Check out code into the Go module directory diff --git a/Dockerfile b/Dockerfile index 6206acfbbf..f0345d9090 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,50 +11,70 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -FROM --platform=$BUILDPLATFORM golang:1.17.13 as builder-env + +# Velero binary build section +FROM --platform=$BUILDPLATFORM golang:1.19.8 as velero-builder ARG GOPROXY +ARG BIN ARG PKG ARG VERSION +ARG REGISTRY ARG GIT_SHA ARG GIT_TREE_STATE -ARG REGISTRY +ARG TARGETOS +ARG TARGETARCH +ARG TARGETVARIANT ENV CGO_ENABLED=0 \ GO111MODULE=on \ GOPROXY=${GOPROXY} \ + GOOS=${TARGETOS} \ + GOARCH=${TARGETARCH} \ + GOARM=${TARGETVARIANT} \ LDFLAGS="-X ${PKG}/pkg/buildinfo.Version=${VERSION} -X ${PKG}/pkg/buildinfo.GitSHA=${GIT_SHA} -X ${PKG}/pkg/buildinfo.GitTreeState=${GIT_TREE_STATE} -X ${PKG}/pkg/buildinfo.ImageRegistry=${REGISTRY}" WORKDIR /go/src/github.com/vmware-tanzu/velero COPY . /go/src/github.com/vmware-tanzu/velero -RUN apt-get update && apt-get install -y bzip2 +RUN mkdir -p /output/usr/bin && \ + export GOARM=$( echo "${GOARM}" | cut -c2-) && \ + go build -o /output/${BIN} \ + -ldflags "${LDFLAGS}" ${PKG}/cmd/${BIN} -FROM --platform=$BUILDPLATFORM builder-env as builder +# Restic binary build section +FROM --platform=$BUILDPLATFORM golang:1.19.8-bullseye as restic-builder +ARG BIN ARG TARGETOS ARG TARGETARCH ARG TARGETVARIANT -ARG PKG -ARG BIN ARG RESTIC_VERSION -ENV GOOS=${TARGETOS} \ +env CGO_ENABLED=0 \ + GO111MODULE=on \ + GOPROXY=${GOPROXY} \ + GOOS=${TARGETOS} \ GOARCH=${TARGETARCH} \ GOARM=${TARGETVARIANT} +COPY . /go/src/github.com/vmware-tanzu/velero + +# Not sure why v1.10 and main branch works without adding executable permission. +# Only v1.9 has the problem. RUN mkdir -p /output/usr/bin && \ - bash ./hack/download-restic.sh && \ - export GOARM=$( echo "${GOARM}" | cut -c2-) && \ - go build -o /output/${BIN} \ - -ldflags "${LDFLAGS}" ${PKG}/cmd/${BIN} + export GOARM=$(echo "${GOARM}" | cut -c2-) && \ + chmod +x /go/src/github.com/vmware-tanzu/velero/hack/build-restic.sh && \ + /go/src/github.com/vmware-tanzu/velero/hack/build-restic.sh -FROM gcr.io/distroless/base-debian11@sha256:99133cb0878bb1f84d1753957c6fd4b84f006f2798535de22ebf7ba170bbf434 +# Velero image packing section +FROM gcr.io/distroless/base-nossl-debian11@sha256:9523ef8cf054e23a81e722d231c6f604ab43a03c5b174b5c8386c78c0b6473d0 LABEL maintainer="Nolan Brubaker " -COPY --from=builder /output / +COPY --from=velero-builder /output / -USER nonroot:nonroot +COPY --from=restic-builder /output / +USER nonroot:nonroot diff --git a/Makefile b/Makefile index 8dcf6ee509..4954af0316 100644 --- a/Makefile +++ b/Makefile @@ -82,7 +82,7 @@ see: https://velero.io/docs/main/build-from-source/#making-images-and-updating-v endef # The version of restic binary to be downloaded -RESTIC_VERSION ?= 0.13.1 +RESTIC_VERSION ?= 0.14.0 CLI_PLATFORMS ?= linux-amd64 linux-arm linux-arm64 darwin-amd64 darwin-arm64 windows-amd64 linux-ppc64le BUILDX_PLATFORMS ?= $(subst -,/,$(ARCH)) @@ -120,7 +120,7 @@ build-%: all-build: $(addprefix build-, $(CLI_PLATFORMS)) -all-containers: container-builder-env +all-containers: @$(MAKE) --no-print-directory container @$(MAKE) --no-print-directory container BIN=velero-restic-restore-helper @@ -177,20 +177,6 @@ shell: build-dirs build-env $(BUILDER_IMAGE) \ /bin/sh $(CMD) -container-builder-env: -ifneq ($(BUILDX_ENABLED), true) - $(error $(BUILDX_ERROR)) -endif - @docker buildx build \ - --target=builder-env \ - --build-arg=GOPROXY=$(GOPROXY) \ - --build-arg=PKG=$(PKG) \ - --build-arg=VERSION=$(VERSION) \ - --build-arg=GIT_SHA=$(GIT_SHA) \ - --build-arg=GIT_TREE_STATE=$(GIT_TREE_STATE) \ - --build-arg=REGISTRY=$(REGISTRY) \ - -f $(VELERO_DOCKERFILE) . - container: ifneq ($(BUILDX_ENABLED), true) $(error $(BUILDX_ERROR)) @@ -199,6 +185,7 @@ endif --output=type=$(BUILDX_OUTPUT_TYPE) \ --platform $(BUILDX_PLATFORMS) \ $(addprefix -t , $(IMAGE_TAGS)) \ + --build-arg=GOPROXY=$(GOPROXY) \ --build-arg=PKG=$(PKG) \ --build-arg=BIN=$(BIN) \ --build-arg=VERSION=$(VERSION) \ diff --git a/Tiltfile b/Tiltfile index 02da1df56d..31bb36fc72 100644 --- a/Tiltfile +++ b/Tiltfile @@ -50,7 +50,7 @@ git_sha = str(local("git rev-parse HEAD", quiet = True, echo_off = True)).strip( tilt_helper_dockerfile_header = """ # Tilt image -FROM golang:1.17 as tilt-helper +FROM golang:1.19.8 as tilt-helper # Support live reloading with Tilt RUN wget --output-document /restart.sh --quiet https://raw.githubusercontent.com/windmilleng/rerun-process-wrapper/master/restart.sh && \ diff --git a/changelogs/CHANGELOG-0.9.md b/changelogs/CHANGELOG-0.9.md index 4b685b32e5..f29a0d28ea 100644 --- a/changelogs/CHANGELOG-0.9.md +++ b/changelogs/CHANGELOG-0.9.md @@ -154,7 +154,7 @@ * Skip completed jobs and pods when restoring (#463, @nrb) * Set namespace correctly when syncing backups from object storage (#472, @skriss) * When building on macOS, bind-mount volumes with delegated config (#478, @skriss) - * Add replica sets and daemonsets to cohabitating resources so they're not backed up twice (#482 #485, @skriss) + * Add replica sets and daemonsets to cohabiting resources so they're not backed up twice (#482 #485, @skriss) * Shut down the Ark server gracefully on SIGINT/SIGTERM (#483, @skriss) * Only back up resources that support GET and DELETE in addition to LIST and CREATE (#486, @nrb) * Show a better error message when trying to get an incomplete restore's logs (#496, @nrb) diff --git a/changelogs/CHANGELOG-1.8.md b/changelogs/CHANGELOG-1.8.md index 1e250f65d7..7c8f019467 100644 --- a/changelogs/CHANGELOG-1.8.md +++ b/changelogs/CHANGELOG-1.8.md @@ -103,7 +103,7 @@ Also added DownloadTargetKindBackupItemSnapshots for retrieving the signed URL t * Fix CVE-2020-29652 and CVE-2020-26160 (#4274, @ywk253100) * Refine tag-release.sh to align with change in release process (#4185, @reasonerjt) * Fix plugins incompatible issue in upgrade test (#4141, @danfengliu) -* Verify group before treating resource as cohabitating (#4126, @sseago) +* Verify group before treating resource as cohabiting (#4126, @sseago) * Added ItemSnapshotter plugin definition and plugin framework - addresses #3533. Part of the Upload Progress enhancement (#3533) (#4077, @dsmithuchida) * Add upgrade test in E2E test (#4058, @danfengliu) diff --git a/changelogs/CHANGELOG-1.9.md b/changelogs/CHANGELOG-1.9.md index f1889ca094..814bb33605 100644 --- a/changelogs/CHANGELOG-1.9.md +++ b/changelogs/CHANGELOG-1.9.md @@ -1,3 +1,81 @@ +## v1.9.7 +### 2023-04-14 + +### Download +https://github.com/vmware-tanzu/velero/releases/tag/v1.9.7 + +### Container Image +`velero/velero:v1.9.7` + +### Documentation +https://velero.io/docs/v1.9/ + +### Upgrading +https://velero.io/docs/v1.9/upgrade-to-1.9/ + +### All changes + * Bump Golang version to v1.19.8 (#6148, @blackpiglet) + +## v1.9.6 +### 2023-02-21 + +### Download +https://github.com/vmware-tanzu/velero/releases/tag/v1.9.6 + +### Container Image +`velero/velero:v1.9.6` + +### Documentation +https://velero.io/docs/v1.9/ + +### Upgrading +https://velero.io/docs/v1.9/upgrade-to-1.9/ + +### All changes + * Bump up Golang version and fix CVEs. (#5884, @blackpiglet) + * Add labels for velero installed namespace to support PSA. (#5887, @blackpiglet) + * Fix Dockerfile issue. (#5761, @blackpiglet) + * Add PR container build action, which will not push image. Add GOARM parameter. (#5777, @blackpiglet) + * Correct PVB/PVR Failed Phase patching during startup (#5829, @kaovilai) + +## v1.9.5 +### 2022-12-19 + +### Download +https://github.com/vmware-tanzu/velero/releases/tag/v1.9.5 + +### Container Image +`velero/velero:v1.9.5` + +### Documentation +https://velero.io/docs/v1.9/ + +### Upgrading +https://velero.io/docs/v1.9/upgrade-to-1.9/ + +### All changes + * Add Restic builder in Dockerfile, and keep the used built Golang image version in accordance with upstream Restic. (#5685, @blackpiglet) + +## v1.9.4 +### 2022-11-30 + +### Download +https://github.com/vmware-tanzu/velero/releases/tag/v1.9.4 + +### Container Image +`velero/velero:v1.9.4` + +### Documentation +https://velero.io/docs/v1.9/ + +### Upgrading +https://velero.io/docs/v1.9/upgrade-to-1.9/ + +### All changes + * Fix CVE for trivy scan (#5642, @qiuming-best) + * Remove old kubernetes versions from kind CI (#5627, @Lyndon-Li)) + * Restore ClusterBootstrap before Cluster (#5617, @ywk253100) + ## v1.9.3 ### 2022-11-03 @@ -14,7 +92,9 @@ https://velero.io/docs/v1.9/ https://velero.io/docs/v1.9/upgrade-to-1.9/ ### All changes - + * Fix controller problematic log output (#5570, @qiuming-best) + * Add compile restic binary for CVE fix (#5564, @qiuming-best) + * Bump up golang version to 1.18.8 (#5558, @qiuming-best) * Enhance the restore priorities list to support specifying the low prioritized resources that need to be restored in the last (#5529, @ywk253100) * Fix v1.9.3 CSI VolumeSnapshot status duplicate issue. (#5518, @blackpiglet) * Bump up the distroless image to the latest version (#5500, @ywk253100) diff --git a/changelogs/unreleased/6775-blackpiglet b/changelogs/unreleased/6775-blackpiglet new file mode 100644 index 0000000000..e7e5d71206 --- /dev/null +++ b/changelogs/unreleased/6775-blackpiglet @@ -0,0 +1 @@ +Add PSA audit and warn labels. \ No newline at end of file diff --git a/config/crd/v1/crds/crds.go b/config/crd/v1/crds/crds.go index e03edacf3e..37366ebe5b 100644 --- a/config/crd/v1/crds/crds.go +++ b/config/crd/v1/crds/crds.go @@ -29,17 +29,17 @@ import ( ) var rawCRDs = [][]byte{ - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xec=Msܸrw\xfd\x8a.\xe5\xe0\xf7\xaa4\xa3u吔n^\xd9[Q\xedƫ\xb2\xf4\x9cC*\a\f\xd93\x83\x15\t\xf0\x01\xe0ȓT\xfe{\xaa\x1b\xe0\xe7\x80$F+\xbd\xb7/e\\\xec!\x81F\xa3\xd1\xe8/4[\x17\xab\xd5\xeaBT\xf2+\x1a+\xb5\xba\x01QI\xfc\xe6P\xd1/\xbb~\xfaW\xbb\x96\xfa\xfa\xf0\xfe\xe2I\xaa\xfc\x06nk\xebt\xf9\x05\xad\xaeM\x86\x1fq+\x95tR\xab\x8b\x12\x9dȅ\x137\x17\x00B)\xed\x04=\xb6\xf4\x13 \xd3\xca\x19]\x14hV;T\xeb\xa7z\x83\x9bZ\x169\x1a\x06\xdeL}\xf8a\xfd/\xeb\x1f.\x002\x83<\xfcQ\x96h\x9d(\xab\x1bPuQ\\\x00(Q\xe2\rlD\xf6TWv}\xc0\x02\x8d^K}a+\xcch\xae\x9d\xd1uu\x03\xdd\v?$\xe0\xe1\xd7\xf0#\x8f\xe6\a\x85\xb4\xee\xe7\xde\xc3_\xa4u\xfc\xa2*j#\x8av&~f\xa5\xdaՅ0\xcd\xd3\v\x00\x9b\xe9\no\xe03MQ\x89\f\xf3\v\x80\xb0\x1c\x9er\x15\x10>\xbc\xf7\x10\xb2=\x96\xc2\xe3\x02\xa0+T\x1f\xee\xef\xbe\xfe\xf3\xc3\xe01@\x8e63\xb2rL\x14\x8f\x18H\v\x02\xbe\xf2\xb2\xc0\x04\xf2\x83\xdb\v\a\x06+\x83\x16\x95\xb3\xe0\xf6\b\x99\xa8\\m\x10\xf4\x16~\xae7h\x14:\xb4-h\x80\xac\xa8\xadC\x03\xd6\t\x87 \x1c\b\xa8\xb4T\x0e\xa4\x02'K\x84?}\xb8\xbf\x03\xbd\xf9\r3gA\xa8\x1c\x84\xb5:\x93\xc2a\x0e\a]\xd4%\xfa\xb1\u007f^\xb7P+\xa3+4N6t\xf6\xad\xc7U\xbd\xa7\xa3\xe5\xbd#\n\xf8^\x90\x13;\xa1_F\xa0\"\xe6\x81h\xb4\x1e\xb7\x97\xb6[.s\xc8\x000P'\xa1\x02\xf2kx@C`\xc0\xeeu]\xe4ą\a4D\xb0L\xef\x94\xfc\xef\x16\xb6\x05\xa7y\xd2B8\f\f\xd05\xa9\x1c\x1a%\n8\x88\xa2\xc6+&I)\x8e`\x90f\x81Z\xf5\xe0q\x17\xbb\x86\u007f\xd7\x06A\xaa\xad\xbe\x81\xbds\x95\xbd\xb9\xbe\xdeIל\xa6L\x97e\xad\xa4;^\xf3\xc1\x90\x9b\xdaic\xafs<`qm\xe5n%L\xb6\x97\x0e3\xda\xc8kQ\xc9\x15\xa3\xae\xf8D\xad\xcb\xfc\x9f\x1a\x06\xb0\xef\x06\xb8\xba#1\xa3uF\xaa]\xef\x05s\xfd\xcc\x0e\xd0\x01\xf0\xfc\xe5\x87\xfaUt\x84\xa6GD\x9d/\x9f\x1e\x1e\xfb\xbc'\xed\x98\xfaL\xf7\x1eCv[@\x04\x93j\x8b\xc6o\xe2\xd6\xe8\x92a\xa2\xca=\xf71\xeb\x16\x12\u0558\xfc\xb6ޔ\xd2Ѿ\xff\xb5FKL\xae\xd7p\xcb\"\x066\bu\x95\x13g\xae\xe1N\xc1\xad(\xb1\xb8\x15\x16\xdf|\x03\x88\xd2vE\x84Mۂ\xbet\x1cw\xf6T\xeb\xbdhd\xd9\xc4~y\x81\xf0Pa6804Jne\xc6\xc7\x02\xb6\xdat\xf2\u008b\xab\xf5\x00d\xfc\xc8Rˬ|P\xa2\xb2{\xedH\xfe\xeaڍ{\x8c\x10\xba}\xb8\x1b\rh\x90\t\xa8\xb1X\xa9-\xe6tΞ\x85t\x84\xde\tL @\xf0\x95%L\x03\x8f%Mm\xc1\xd5F\xf1)\xfd\x82\"?>\xea\xbfX\x84\xbcffmt\xc5\x15lp\xab\rF\xe0\x1a\xa4\xf1\xd4\x19\x8d!\xc2XFI\xd7n\r\x8f{$2\x8a\xbap\x81聾\xf7?@)U\xedp}\x02mb\x83=Q\x18\x8c_\x81}\xd4_\xd0:\x99-\x10\xefctP\x8f\x80\xcf{t{4t\xf0\xf8\x05˲\xc8\"7\x1d\x89\x9dxB\x10a\xdbY&\x16\x05T\xba\x11\xdf\x166\xc7\x06٩\x05n\xb4.P\x8c\xc5+~ˊ:Ǽ\xd5w'\xcc3Zݧ\x93\x01l\v\b\xa9Hܐ\xf6%\xf4T\xf7\x964Zdq\xc2 Ё\x97\xca\xc3ce\xb5\xc7(gS\x93\x0e\xcb\bn\xb3\xdb\alc\x88M\x817\xe0L}\xcaH~\xac0F\x1c'\xe8\xd2\xd8E\xa9di\xfb\a\xf1[Ȍ\x15w+d\x992^͋(k\xff\x81\x89\xb2\xd7\xfai\x89\x10\xffF}:\x85\x01\x19\x9b\x97\xb0\xc1\xbd8Hm\xc2҃\xfe\xde \xe07\xccj\x871\xfe\x17\x0er\xb9ݢ!8\xd5^X\xb4\xdef\x98&ȴ\f\x04\x96\x1a\x93\x9by\xb2\x8en#\x89Sy\xe5S\xa8Ӂ\x1e\x9f\xab\xa6\x11\xa2$\xa6\xc8\xdeS\xb9<ȼ\x16\x05He\x9dP\x99_\x8fh\xf1:]\x0f\xccm\xf2\t\xce^\x8f4\x98\xd3N\ft\x8aV\b\xda@I\x8a\xf4\xb4\xebX\xf5wmj\xd9\x1bA\xd2I{\x165u\x816L\x95\xb3\xb2\xead\xc0\xd5$\xe8vG\xbc\x11V\x88\r\x16`\xb1\xc0\xcci\x13'\xc7\xd2&\xfb\x96\"\xd7&\xa8\x18\x91pC\xe5\xd7-l\x06$\xb0f\xdc\xcbl\xef\xed#\xe2 \x86\x03\xb9F˧\\TUq\x9cZ$,\xed|\x98d\xee\xa0wm\xe1ȏ\xe1\xc5\x0e\u007f\xd7\x12dc\xd7\x16\xa4䐲-;\x80ӳ\xcb\xfe\xffI\xd8F쿀i\xefN\x86\xbe.\xd3\x12I%\xf9Aw[\xc0\xb2r\xc7+\x90\xaey\xba\x04\x91\x8c\x95n\xfe\u007f\xe0\x8d9\x9f\xe3\xef\xc6#_\x95\xe3gwe\t\"\xedJ;\xfd?র\xb2x\b\xba\"yC~鏺\x02\xb9m7$\xbf\x82\xad,\x1c\x9a\xd1\xce\xfc\xae\xf3\xf2\x1a\xc4H\xd1w\xd4J\xe1\xb2\xfd\xa7ody\xd9.R\x97H\x97\xf1`o\xbf6\xf6\xfcP1/\xc0\x05\xf6\xec\xa5\xc1\xd2G\f\x1e\x99\x9a\xdd\x13\xb6\xa8>|\xfe\x88\xf9\x1cy \x8d\xf3N\x16\xf2a\x84l\u007f\xea`\x94\xa7.#\x98>\xad\u007f\xe3cAW \xe0\t\x8f\xdeb\x11\nhs\x04M4\xe1\xe9\x9c\x12\x87\x83R\xccdOxd0!ʴ8:\x95\x15|{\xc2cJ\xb7\x11\x01\t'iC\xf4\x8c(I\x0f\x98\x10\x1c\x94H'\x1epİ\x91Eˋ\x83tAҴ\x86\xf6/Xf\xbbm\xbdh+o\xec;뷈N\xc1^V\x89\v%5\a\x16\xf9\xb441ï\xa2\x90y;\x91\xe7\xfb;5m\r\x0f\xdbg\xed\xee\xd4\x15|\xfa&m\b\xdb~\xd4h?k\xc7Oބ\x9c\x1e\xf1\x17\x10\xd3\x0f\xe4㥼\xd8&:\xf4\x83\x8f\t\xcc\xed\u06dd\xf7\xf0\xda\xed\x91\x16\xee\x14\xf9-\x81\x1e\x1cJ\xf6\xd3\xcd\xeb\x87a+k\xcb\xd1E\xa5ՊU\xe5:6\x93'v\"Hm\x06;r\x8aZ;\xa9\x9f0\x11\xec#i\x12?\xde\a\xc7\v\x91a\xde\x04\xc78\xa4+\x1c\xeed\x06%\x9aݜ\xe2跊\xe4{\x1a\n\x89R\u05f739,M\xb57-\x88\xee|\x19\x99\x15\x9d܄^\xcdf/v\x9d\x88\xe4Nw]^\x11\xabX\xb6?\x16\xa9+\xf2\x9c/\xe1Dq\u007f\x86\xc4?c/Nu\xbfG\xcck\xc8Rp\x90\xf1\u007fH\xcd1C\xff/TB\x9a\x843\xfc\x81\xef\xd4\n\x1c\x8c\rQ\xac\xfe44\x83\xb4@\xfb{\x10\xc5\xe9\x1dAdq\x9ad\v\x16^\x91\xeb\xed\x89\xc5r\x05\xcf{m\xbdN\xddJ\x8c\x86T\x87MZ\xb8|\xc2\xe3\xe5Չ\x1c\xb8\xbcS\x97^\xc1\x9f-nZkA\xab\xe2\b\x97<\xf6\xf2\xf7\x18A\x89\x9c\x98ԍ\xef.SMe\xf2%\x1bK\x80\x06\xb6\x17vd\xe6\xcea\x9dć\x95\xb6\x91k\x88\tT\xee\xb5u>\xb280Kωb\x81\xe7\xa1\x10\xbd\x02\xb1\xf5W\xa6\xda4\x97a$\xf6F\x01W\xda5;/ai\x1bۈ\x98\aJ\x8e\xd5ew\x82\xbd<\xbd\xf47d<\x89\xc8ظX\x84[\x19\x9d\xa1\xb5\xf3,\x92 \xad\x17\x82\x84m\x80Px\a\xc6\xdf4\xcd\a%\x9b\x96n\x90\x12\x91\xce4\xe5?}\xebE/\xe9\xf0\xd3\xef%\xe6;\x17/\xe03[\x96b|\xa5\x9a\x84\xe2\xad\x1f\xd9\x1c\x93\x00Ȼ\x06fW\xf3QO\xb7 \x03#\xfd\x11\xd4t)\xd5\x1dO\x00\xef_]\xad\xb7B\x12_b\xb8\xdf6c;\xa2\xb7\x0f\xf8\xf4\xa6ZD\x9a#\xf7\x06\a;w\x1a\xe7&C1\x11\xa4Ү\x1fN \xb8\x95\xce\xdfY\xd8Jc]\x1f\xd1T\xa6\xa8\x17N\u007f\xd7\xce\xf5\x9c\xd4'c^\xe48\xfd\xeaG\xf6\x02Y{\xfd\xdc\\LO^f\xc6\x1a_\n!\xc8-H\a\xa82]+\x0e\xbf\xd0Q\xe7)\xfc\x16x\x01\x9dL\xb24\x01A\rU]\xa6\x11`\xc5\\'\xd5l\x9c\xa6\xdf\xfd'!\x8b\xb7\xd867u\u007f\x1fk\x83mk.\xf2\xfb\x19\x06\xa5\xf8&˺\x04Q\x12\xe9Sݞ\xad\xbf\xfe\x1f\xecx\x9b\x04\xc0pY\x8d8M\x87\xaa*Х\x9eH\u007f\xddO\xc7\xc4\xca\x1c[\xc5\x1c\xb8@+\x10\xb0\x15\xb2\xa8M\xa2\x84<\x8b\xb6\xe7\xf8\x1aAX\xbc\x9e\x13\x916\xf9\x8aI\x91\x10\x88M4\x16\xe7\xa5ue\xd2M\xc5{\x83i\xe6\xd9RP\xba1\xcf*#\x89\x97\xf4k[h\x81ń:~7\xd1N\xdaw\x13m\xa1}7\xd1&\xdbw\x13m\xb9}7\xd1B\xfbn\xa25\xed\xbb\x89\xf6\xddD\x9b\xeb6'\xad\x970\xf2\x9f*L\xbc\\\xc4\"\xe1zz\x0e\xc5\x19\xf8!\x9b\xe2\xd6\u007f\xb6\x90\x9aay\x17\x1f\x15ɫ\r\xdfC\xac\xf8S\x8e\x18\atI\x17\x9d*iS.\xe9\x804\xec\xed3\xaf\x17\x920\x93\xd2)\xe3ٷ)\t?Ki>\xc3<\xd36ͦI4\xd5\xcd$\x11:4\x9f\x84\x90\xd9\xdb\xcf!\x19\xe6밝\xdb`\xfaw\xcfAMH\xc5YH\xc0\x99O̝\xa3\xd7\xc8\xf5\x18\x12\xcc\f\x12F\xff0\xf4ZȒ\x99\u038d\t7A\xe8\xc4\xe1\xfdz\xf8\xc6\xe9\x90)\x03\xcf\xd2\xed#Kyޣ\xe2;,\xb5맽6\xfc\x16\xbe\xcd\x19\xd3\x11\xb4\x01%\v&\xe7\f\xb7\x0e\xc8\v\xbfVޅ;\xfb\\λ\x1fi\xb94/Π\x19f\xc8L\x88\xe8s\xaf\x8c\xd2\x13\x85\xd3sd\xe6\x93Z\xceɌ\x19\xe7\xbdL\x02]·I\xf1\x1c\x17r_^\x90\xf1\x92\x98\xed\xf8\xbb/\xc6RrZ^\x94ɲ\x98\x10\x98\x98\xbf2\xccL\x99\ayF\xd6J\x12q\x963T\xce\xceK\ty \xb3\xebH\xceF\x89\xe4\x99\xcc\x02\x9e\xccA\x99\xcb.Y\x88J\x9df\x9e\xa4\xe7\x94̂\xe6|\x93\xe5L\x92\xd7\xcb\x17}\r\x1bxZ\xd4,f\x83,\xda\xc8\xf3\xf8-\xe6{\x9c\x93\xe5\xb1H\xb1\x17ft\xb4\x19\x1b\x13\xf3\x9e\x9b\xc71\xccӘ\x00\x9a\x92\xbd1\x91\x9d1\x01q6g#5'c\x02\xf6\x82ڝ咙\x97\xf1/HaQ\xbf\x15\u007f+\x8ez\xe9´\x19\x98\x8bK\x16\xfa\xaf\xa3\ued17\x8d\xd54o~\xc6,O\xe9\xf6盟e]8Y\x15\x1c\xce?\xc8<\xea4\xba=\x1e\xe1Y\x16\x05\x89\xd5\xdf4\u007f\xe6\xb492\xa4_\xbf\xb4\xec\xb9\x1e\x19\xd1\xc2\xc23\x16\x05\x88\x18s\x9d\xac<\xf3\x1fAgz\x85$\xf3\xe9\xc0\x85O>÷\xd2W\x9e\x83\xf9K\xaeX\xc4\xd3\xed\xb1$(ͷ\xa3g\xb8\x1f\xf3\x06\xa2\xb7e\xf9\xd9_k4G\xd0\a4\x9dŰ\xf0\x1d\x81?h\xb6.\xbaĭ ?\xfc\xa7\xf7#ù;p\xf0Ay\x15\x16\x05;\u0091\xe1Й/ڽ&\xf1F~\xc0D\xd7x\xe0C\xb7\xa3#\xef\x97l\xcf\xd4$\xfc\xb7u\x1d\xcew\x1e\x16\xd5\xf6\x9b8\x10/w!f@\xa6&է]@-&ѿ\x95+\xb1\xe4L$[QiI\xf2o\x91\x1c\u007fFR\xfc\x19N\xc5ynE2\x99R\x92\xdf\xdfĹxC\xf7\xe2-\x1c\x8c\x97\xb9\x18\v GI\xed)\xe9\xeaI\x97\xab\xc9\xf7\v)\x97\xa3\xcbW\x00\xf3i\xe8\t\xe9\xe7\t\x97\x03K\x98&\xa4\x99\x9f\x97^\x9e@\xc37r>\xde\xc8\xfdx\v\a\xe4m]\x90E'd\x91sf_\xbf8\xba\xacM\x8ef6\x18\x9f\xcaj\xb3L6\xf2\x17\x86s\x8e\xbe\xa8mj\xa4P\xaf\x81i\x1a\v)\xb7_\u007ff\xf0\xb3T\xb9\xdf\x0fb\xaa\x9e\x1e\xe7bJ\x9c\xff\xde\x1a\x15\x9d}\x16\a:\xbaT\xb0X\t\xc3ն6G\u007f1i\xd7\xf0Id\xfbaG\xd8\v\v[mʨ\xc1t\xd9\xde\xc8\\7\xa3\xe8\xc9\xe5\x1a\xe0'\xdd^z\xf5+*XYVő\xfc\x00\xb8\x1c\x0ey\x19\x03D\x99dž\xba>\xa1\xdc͂\xaf\xf70\xec\x1d\xb9\xbck\x8a\xddd\x85\xae\xf3\x16\xfa\xc4\xe6\tu\x84\xfb\xafl\x93p\x99\x90\xac+\x99\x12\xac\x8e\xc6\xe7\x1bWT\xf9\xf1\xf5/\xf3\xac\xd3F\xec\xf0\x17\xed\v6-Qb\xd8{P\xad+Ȋ\xe6r\xbd\xf9\xf6\"\xa6CC\xe9\xa8\x11\xb0.g&\x9c\x86\ue793\xb0\x8c\t\x91\x99\xf3\xe7\\\xb1\xb0\x98\xc7\xc7_\xfc\x02\x9c,q\xfd\xb1\xf6\x17\xa7\xabJ\x18\x8bD\xcdfa~І\xfe\xbb\xd7ϱ؆\x0ek\xfeq\x8c\xb7A\xce\xcb\xe1\xfbٳ\xb0?\f\xcaO5$Zbԯ\xf1Q=Ǭ\xb7I\xfe\x94G\x1d\xf2)8\xbd\n|\x1c\xb2\xe0\xefj^\xb7\xccϔԞ\xaaQ\xc6u\xb9\x96\xab\x94\xf9\xf2]\xa1&a\xc8\xee\xaa\r\xd7\xe8\t\xa5\xbd\xb8\xa6\xcd\xcb\n\x95\xf9d\x94A\x9d\xc8\xf9}\xba=\x1d\xc1\xd5\x00M\xde+T\xd6\x16\xcez\x16\xb6Mx\x89*\xd2\x0e\x9c\x1fɖ,A\xc3\x1c\xf0\x80\n\xb4\xe2\xfc\x16\xae~\xe3+V\x8e\xc7D\xa0\xf6\xa1\x84\x04\x9a\xba*\xb4ț\x13\xde\xe8\xacP\xe5\xf0\x91\xe5\x979\xa0ygg`rq\xb0\xad61\"\x9c\nL\xafXn \x17\x0eWQ\xa0I\xb2/\xcal\x99\x95CF\xb7\x1f\x9c#\xbf f+\x8f+\xcdM\x8dl\xf4\xaf\xd3N\x14\xa0\xear\xe3\x15\xbah:\xc4\xf6\xef\xa4ޜ\r\x19O3\xc7\xcb/L*\x87\xbb\x93\x98\xe2\xe9\xcan\x1b\xfe9{e\xedȩ\x95\xd9:\xcb\xd0\xdam]\x141Ӿ\xe5\xdc\xd7_&\xe7\xf2-\xd68\xe3N^\x04r\"`S\x88\xceg\x02\x96h\xad\xd85\xc5͞I\x03\xedP!\x1b>\xb1x\xa3w\f\xbḇai/\x1f\xc1\x12\x99\xabE\x98\xa0\xb9\xf9\xef\xf5z\x17\xb3\v\n\xbd\x83\xad,\xb8k\xa8_\x19T\xf3\x994\xf9VI\x93\xa2\xca?\xb5\x1d\x896\x1c|\xe6\x8d\xe8\xea\xbcb!w\x92\xf4 m\xd2N\x98\x8d\xd8\xe1*\xd3E\x81\x9cf~\x8a\xd7[\x1e\u0590\x9f\xf7\x05\x85]\\\xdaO\xfd\xbe!\xd2\xe1w\xdbW\xc6\x10\xbe@!\x97\xfdt\xd2`WG\xf7\x04!\xcd\x13\x9f\xa5\xba=\x15\xa2\x15gO1\xed\xf7m\x0eX\x90\xab\x1eNS\x80\xf6*\x18\x83qo\xb6\x14\xbfis\x05\xa5T\xf4\x0fY\xfc\x1c\x8ah\x06\x9f\x85?\u05ec[\xc0\xfb\x9e\xfa\xb4i\xd2=E\x8á\x982U㩱+\xf8\x8c\xa7\x96\x95\xcfvŜ\x83o\xb12\xbb\xd4\xe5N\xdd\x1b\xbd#\u007f8\xf2\xb2\x15^\x91w\xf7\xc28)\x8a\xe2\xe8'\x99\x9c=\xf2\xe2#\x92⚴^\xe2d\rX.Q6t\xeb\\o\xa9<'p\x9e\xeaF\xd7n J:Q\x14\x0f\xfb3\xb05|\xd6\x0e\x9b\x88\xae\x1c\xc2$\xe1\x8b֭p\xbb\xd5\xc6yO\u007f\xb5\x02\xb9\r\xd6P\x04.\x9d\t\xbe\x91\xf2UoA\xba\xeeR\xbe\xe3^vt\f\x1fB\xae\xf0T\x8a\xa3\xcfY\x14YF\xc66^['\x8a\x88|\xfb]9Plv\x12\xf7a\xfe\x97\x88\x1dvB\xf0\xbb~\xff\xf6\xc3\xf1V\xbb18O9\xce)\xf7\xb2=\xaa\xe9\x803\x8dQ\xc1\xb3\x91Α<\xed_ف#\tZ\x14`I\xa6L\x94\t\x9c\x93\xec\xfc\x9et\xef\xddt\bq\xe8ߴ\x9d\xa7TwX\x9c\xa6m\xd90\t&\x96\xe5\xbfY\x92\xb6\x19K[\x99\xed\x85\xda\x11S\x19]\xef\xf6\r_NhƩ\b\\MHAU\xd4;b\xf5p]\xe2j\xa3z!\x98p\x81\x92\xf7\xd0\x15\xd9\xd3$\xa6!$\xdcT^\xbf\x0e\x85\xffV[\xa3\xcbU\xd8\v\xbe\xe5\xb8\n\xa1\x11#5\xd9\xff\xe4\xc8O\x00\xed*l1\x1bT\x15*\x106\xe0\x93\xf0A\xd5\xfc\xb6\xce\xc5)\x9c0.իx\x18t^p(\x18r\x1c߇\x10\xf8\xf1\x1f\x96ݎk\xe0_\x81\x95\xaa)\xfa\xee\x03K\x9e\x15,\xf9\x19\x06\xd9W\x8f^`\x9dx\b\x03\u007f`\x88\xfe\xdf\xd6\x158\xb4\x1a\xe6S\x8aM\xf9u\xd4}\x94\x9dK\xa7\xbc\x83\x18\xec\xc0\b=\xfe$\xb7\xfeN-#\xac\xff\xfcwϺ=$\xd9,\xeff\xcd\x15\xb6DZ\xbb\x03>be0\x13Q\xc7\x03\xe0\xbe@\xb2#,\xe2\xd0\x12zw\x96\xc9{x\x99\x13\xf7\x9a\x1e\\\xf3\xf7\b^ǯ9\xbc\xccw{3\xc7\xeduW\xf7,\xb8\x06\xfa\xd2\x19\xfb\x8f\xd0-\xe2\xb9\x05\b\x11\xdf-\xb2\x8c֛[\xf4\xddz\xae[\x83\xe3D\xb5\xeb\x91;\xf7J\xce[T\x0f\x9c\x8aU_\xbdٓ\xe9t:a\x8d|F\xeb\xa4\xd1s`\x8dğ=j\xfa媗\u07fbJ\x9a\xd9\xfe\xfbɋ\xd4b\x0e\xcb༩\xbf\xa23\xc1r\xfc\x84\x1b\xa9\xa5\x97FOj\xf4L0\xcf\xe6\x13\x00\xa6\xb5\xf1\x8c\xa6\x1d\xfd\x04\xe0F{k\x94B;ݢ\xae^\xc2\x1a\xd7A*\x816\x12/W\xef?T\xbf\xab>L\x00\xb8\xc5x\xfcI\xd6\xe8<\xab\x9b9\xe8\xa0\xd4\x04@\xb3\x1a\xe7\xb0f\xfc%4\xce\x1b˶\xa8\fOwU{ThM%\xcd\xc45\xc8\xe9\xea\xad5\xa1\x99C\xbb\x90(d\xb6\x92H\x1f#\xb1U\"v\x9f\x89\xc5u%\x9d\xff\xf3\xe5=\xf7\xd2\xf9\xb8\xafQ\xc12u\x89\xad\xb8\xc5\xed\x8c\xf5?\xb4WOa\xedTZ\x91z\x1b\x14\xb3\x17\x8eO\x00\x1c7\r\xce!\x9en\x18G1\x01ȘEjS`BD-0\xf5h\xa5\xf6h\x97F\x85Z\x9f\xee\x12踕\x8d\x8f('Y \v\x03E\x1ap\x9e\xf9\xe0\xc0\x05\xbe\x03\xe6`\xb1gR\xb1\xb5\xc2\xd9_4+\xffGz\x00?9\xa3\x1f\x99\xdf͡J\xa7\xaaf\xc7\\YM:z\xec\xcc\xf8#\t༕z;\xc6\xd2=s\xfe\x99))NZ\a\xe9\xc0\xef\x10\x14s\x1e\x8c\xb6e,\x1e?\x97ț\x1c(\xfb[ƪ\x82E\xf6\\\xb3\x81\x0f \xa4\xa3\x02\xc0E\xa2C\xb0\xa8<\xa3\xf59x\x1b\xde$>7z#\xb7C\xa1\xbb5\xcd%\x8b\xb9B\xba\x87\xdc2\xdeD\xa1\x89\xac\xa3\xb1f/\x05\xda)\xf9\x87\xdcH\x9e9\t6e\xae\x8dD%\xdcP\xd2\v^\x16E\xb1(ȫ\x99\xba\xa2\xc3\xe5ic,\x8d\x99\xd4ɂ[\x021\xd8\xd8:\xa7T\xedQ\x8bS5rƍ\x89Qˡ\x80\x83\xf4\xbb\x14\x0e\u0558\xdf\xc1\xab\xbeG\xe3\x05\x8fc\xd3=ޟvH;S\x02Ep\xc8-\xfahm\xa8\xc8|Ȕ*\x80/\xc1ŀڏ\x13e\xc4B\xad\x9c~\xc1\xe3\x10h\xb8\xa6\xdc\\\xc2\\g\xf9\x8eJ\xe7°\xc5\rZ\xd4~4\xa8Sgb5z\x8cq]\x18\xee(\xa4sl\xbc\x9b\x99=ڽ\xc4\xc3\xec`\xec\x8b\xd4\xdb)\x01>\xcd\x1e4\x8bm\xc5\xec\xbb\xf8\xe7\x82\xc8O\x0f\x9f\x1e\xe6\xb0\x10\x02\x8cߡ%\xadm\x82*\x86֩o\xde\xc7\x1c\xfb\x1e\x82\x14\u007f\xb8\xfb\x16\\L\x93<\xe7\x06lV\xd1\xfa\x8fT\xa8E\xa6\b\xa2UҊ\xb1@\x99\x92\x94]gm\xa6X3f\x88c\x15fwP`\xa2\f2\x16Q_p\x18L_q\xb3\\\xec^\xf1\xb1RHK-$\xa7B\xec\xdc7J\x83!\xce\xea\xed\x11\xc1\xfa\x15\xf8\xa5\x880.x\x12 \xe7\xc3+\x1c?t\xf7\xb6mY\nO9\xc79\xf4T@9\xd0H9\x90\xd9!r1(p\xa35y\xa37\xc0N\xa1\xee\xce\xf5c\xfc\x1b#\xc4:\xf0\x17\x1c\x01~ \xcaǸ\xb1`\x9c\x8e\x11/\xc1a\f\xbe\xd7\u0600\xeb6\xce\xd9\x12\xed-\xbc,\x17\xb4\xf1\x94&\x19,\x17\xb0\x0eZ(,\x1c\x1dv\xa8\xa9C\x90\x9b\xe3\xf8]4\x9e\xeeW\x05\xd5Xa\xe4\x1a\xbf`;.C\x8a\xe1sX\x1fGj\x82\x1b\x84l,n\xe4\xcf7\b\xf9\x187\x16\xc0\x1b\xe6w \xb5\x93\x02\x81\x8d\xc0\x9f\x8a\xb5\v\x82\x9e\xf2\xffC\x8e\"ߠ\x9e\u05fc=\xb1\xf3\x16\x87/\x18_\xf1\x9fǼ\xed\x84B\xf9\x9d#\xffy-xɏG%ڟ\x1e\f\xfe\x94*,>\x92*Ϙy\x1e\x9ex\xa5R+\xcf\x16c\xceLu\x81\xb1\x16]c\xb4\xa0\xe6\xe9\xb6:\xade\xf9\u007fW\xad\x8d\xabuz\x1e\xe5zkE\v7\xb5*\xf1\x89\xe6\xcd\xcdJz\xb8\xea\xb6\x02f\xed\xa8Sl\xfb\x95\x9e\x8c\xbfH\x9b\xf2\xaeӧP?\xac!\xe8X\xa9Ō_\xc1\xdf5|\xa2ޖ\xb2\x93\x98\x13\xdfv\xcc\x00\xa4\x03m\x0et\xbcC/\x92\x00\xa3S\xbe\xa6n\x8di\x91\x9b\xe1\xb8t\x90JQƶX\x9b\xfdhƦBӢ:\x02sd:\xfb\xdfT\x1f\xaaw\xbfZ\x17\xa4\x98\xf3\xd4Ԡ\xf8\x8a{9|\xe5\x19\xa2{?8Q\x1c\xff\xe4\x0e\xf4\xe3\xc7\xd2,\xcfl\xde\xf6\xe3\b\x18\x1b\xa9\xa8\x16\x1c\x89\x13m\xc50|\x8f\xfc\xb8\xba\xbfs\xb1\x84G\xed\xc7ʾ\x03Z\x8c\x1d\x13\n\xaa\xe2M~\x97\bΣ\x1d1\x80\x93\xf6\xa2\xceA\x19\xbd\xed9N\x1a\xf9\x95\x82*\xb4dPƂ@O\xa9Io\x81\xef\x98\xdeb\xfb\n\x95\xf9\u007f\x9dS2\x9f\x9eʹ\x16\"\xf5%\xf3\xb8I\xa3Or\xacL\x1f\xbc\x00\xb7\x9b\xc7_\u007f\v\xf7E\xb3\x17ۜ+\xb8\x0f\xf6\x97,M\xa0N}\xfb\"\u070eooo\x87\xcf\xcd7 \xf1ַ\xf0W\xde5\xe0\xc0\\\xfb*\xfe\xeb\xe1PS\xb5z\xb5\x04\xfe\x92v\xa5\xe7\xc3|\x04\xd8\xda\x04\xff\x9agލ\x19t~\xee\u007f\v\x8f\xf1#Ƶ\"\x83\xf6\x14\x8d\xf0`\xa9\x95l_\xc5bP\x18\xcb-\xb7?/-z\xdfZ\xbak\xc3/17\xc85\x9ak\a\x93)_v\xf4\x9aA\xee΄\xf5\xe9\xa5x\x0e\xff\xfeϤMה\x13\x1b\x8f\xe2\x87\xfeǵw)d\x94/d\xf1'\xa7:&}\x1d\x84\xbf\xfdc\x92\xaeB\xf1\\>i\xd1\xe4\u007f\x03\x00\x00\xff\xff\x1d\r\x93\v\x97\x1c\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4\x96Ms\xe36\x0f\xc7\xef\xfa\x14\x98}\x0e{y$\xefN\x0f\xed\xe8\xd6\xcd\xee!\xd36\xe3I2\xb9tz\xa0I\xd8\xe2F\"Y\x00t\xeav\xfa\xdd;$%\xbf\xc8v6=\x947\x91 \xf0\xe7\x0f\x04Ī\xae\xebJ\x05\xfb\x84\xc4ֻ\x16T\xb0\xf8\x87\xa0K_\xdc<\xff\xc0\x8d\xf5\x8b\xed\xc7\xea\xd9:\xd3\xc2Md\xf1\xc3=\xb2\x8f\xa4\xf13\xae\xad\xb3b\xbd\xab\x06\x14e\x94\xa8\xb6\x02P\xceyQi\x9a\xd3'\x80\xf6N\xc8\xf7=R\xbdA\xd7<\xc7\x15\xae\xa2\xed\rRv>\x85\xde~h\xbeo>T\x00\x9a0o\u007f\xb4\x03\xb2\xa8!\xb4\xe0b\xdfW\x00N\r\u0602\xc1\x1e\x05WJ?\xc7@\xf8{D\x16n\xb6\xd8#\xf9\xc6\xfa\x8a\x03\xea\x14xC>\x86\x16\x0e\ve\xff(\xaa\x1c\xe8sv\xf5)\xbb\xba/\xae\xf2joY~\xbaf\xf1\xb3\x1d\xadB\x1fI\xf5\x97\x05e\x03\xb6n\x13{E\x17M*\x00\xd6>`\vwIVP\x1aM\x050\xf2\xc82kP\xc6dª_\x92u\x82t\xe3\xfb8Ldk0Țl\x90L\xf0\xb1\xc3|D\xf0k\x90\x0e\xa1\x84\x03\xf1\xb0\xc2Q\x81\xc9\xfb\x00\xbe\xb2wK%]\vM\xe2\xd5\x14\xd3$d4(\xa8?ͧe\x97\x04\xb3\x90u\x9bk\x12X\x94D\x9eD\xe4\xb8\xd6;\xa0#\xbe\xa7\x02\xb2}\x13:ŧ\xd1\x1f\xf2µ\xc8\xc5f\xfb\xb1\x90\xd6\x1d\x0e\xaa\x1dm}@\xf7\xe3\xf2\xf6黇\x93i8\xd5z!\xb5`\x19Ԥ4\x81+\xd4\xc0;\x04O0x\x9a\xa8r\xb3w\x1a\xc8\a$\xb1\xd3\xd5*㨪\x8efg\x12\xde'\x95\xc5\nL*'\xe4\fm\xbc\x04hƃ\x15\x98\x96\x810\x102\xbaR`'\x8e!\x19)\a~\xf5\x15\xb54\xf0\x80\x94\xdc\x00w>\xf6&U\xe1\x16I\x80P\xfb\x8d\xb3\u007f\xee}s:g\n\xda+9\xe4g\x1a\xf9\xd29\xd5\xc3V\xf5\x11\xff\x0f\xca\x19\x18\xd4\x0e\bS\x14\x88\xee\xc8_6\xe1\x06~I\x98\xac[\xfb\x16:\x91\xc0\xedb\xb1\xb12u\x13\xed\x87!:+\xbbEn\fv\x15\xc5\x13/\fn\xb1_\xb0\xddԊtg\x05\xb5D\u0085\n\xb6\xce\xd2]\xee(\xcd`\xfeGc\xff\xe1\xf7'Z\xcf.H\x19\xb9\xd0_\xc9@*\xf3\x92\xf6\xb2\xb5\x9c\xe2\x00:M%:\xf7_\x1e\x1ea\n\x9d\x931\xa7\x9f\xb9\x1f6\xf2!\x05\t\x98uk\xa4\x92\xc45\xf9!\xfbDg\x82\xb7N\xf2\x87\xee-\xba9~\x8e\xab\xc1\nOW2媁\x9b\xdcbSQ\xc7`\x94\xa0i\xe0\xd6\xc1\x8d\x1a\xb0\xbfQ\x8c\xffy\x02\x12i\xae\x13ط\xa5\xe0\xf8\xef07.Ԏ\x16\xa6\xf6}%_\x17\x8a\xf6!\xa0N\x19L\x10\xd3n\xbb\xb6:\x97\a\xac=\xc1Kgu7\x15\xed\x8c\xee\xbe\xc0\x9b\x93\x85\xcb\x05\x9dơM\xceW\xae\x1e\x1er\xee,\xe1\xec\x16\xd6p\xd6s_璛\xe1\xbf$S:\xf1\xc8FG\"trԟեMoe\x81D\x9e\xcefg\xa2\xbed\xa3\xfc\x04P\xd61(\xb7\x1b7\x82tJ\xe0\x05)\x95\x81\xf61\xf5\x194`\xe2\x19\xbf\x11\xcb\xf1\xbf$\x90\xd7\xc8ܜ\xd9Y\xc1ႦW\xb2\x93Fz^\xa8U\x8f-\bE\xbc\x92YE\xa4v\xb3\xb5\xfc\xcf\xfa\x06\x82e\xb2\xb9\x94\x83\xfd\u007f\xfa\x9bIȸ]\x1c\xce#\xd5p\x87/\x17foݒ\xfc\x86\x90\xe7W>-.\v\xbd\xfdc\xe0\r\x94.^ʳIN\xfd\xce\x1cQd\xf1\xa46\xc7\\9\xae\xf6\xfd\xbb\x85\xbf\xfe\xae\x0e\xf7Zi\x8dA\xd0\xdc\xcd_i\xefޝ<\xb7\xf2\xa7\xf6\xae\xbc\x8c\xb8\x85_\u007f\xabJ(4O\xd3\xeb)M\xfe\x13\x00\x00\xff\xff--\nM\xde\n\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4WM\x8f\xdb6\x10\xbd\xfbW\f\xd2CZ \x92\x13\xf4\xd0·v\x93âi\x10\xd8\xe9^\x8a\x1ehj,\xb1K\x91,g\xe8\xcd\xf6\xd7\x17CJ\xfe\x90\xe5\xdd͡\xbc\x89\x1c\x0e\x1f\x1f\xdf.\xbd\u007f[\xffT\xbf]\x00\xe8\x88y\xfa\x17\xd3#\xb1\xea\xc3\n\\\xb2v\x01\xe0T\x8f+h\xfc\x83\xb3^5\x11\xffIHL\xf5\x1e-F_\x1b\xbf\xa0\x80Z\x16m\xa3Oa\x05ǁ2w\x00T6\xf3~H\xb3.i\xf2\x885Ŀ͍~4CD\xb0)*{\t\"\x0f\x92qm\xb2*^\f/\x00H\xfb\x80+\xf8$0\x82\xd2\xd8,\x00\x86\xbdgXհ\xbb\xfd\xbb\x92Jwث\x82\x17\xc0\at\xbf|\xbe\xbd\xfbqs\xd6\r\xd0 \xe9h\x02g\x06'\x98\xc1\x10(\x18\x10\x00\xfb\x03(P\x0eTd\xb3S\x9aa\x17}\x0f[\xa5\xefS8d\x05\xf0ۿQ3\x10\xfb\xa8Z|\x03\x94t\aJ\xf2\x95P\xb0\xbe\x85\x9d\xb1X\x1f&\x85\xe8\x03F6#˥\x9d\x88\xeb\xa4w\x02\xfc\xb5\xec\xadDA#\xaaB\x02\xeep\xe4\a\x9b\x81\x0e\xf0;\xe0\xce\x10D\f\x11\t]\xd1\xd9Yb\x90 \xe5\x86\x1d\u0530\xc1(i\x80:\x9fl#b\xdccd\x88\xa8}\xeb̿\x87\xdc$\fɢV\xf1(\x87c3\x8e1:ea\xafl\xc27\xa0\\\x03\xbdz\x84\x88\x99\xa7\xe4N\xf2\xe5\x10\xaa\xe1w\x1f\x11\x8c\xdb\xf9\x15t́V\xcbekx,*\xed\xfb>9Ï\xcb\\\x1ff\x9b\xd8GZ6\xb8G\xbb$\xd3V*\xea\xce0jN\x11\x97*\x98*Cw\xb9\xb0\xea\xbe\xf9.\x0eeH\xafϰ\xf2\xa3Ȍ8\x1aמ\fd\xcd?q\x02\xa2\xfa\"\x982\xb5\xec\xe2H\xb4t\t;\xeb\x0f\x9b/0.\x9d\x0fc\xca~Q\xcea\"\x1d\x8f@\b3n\x87\xb1\x1cbV\x9e\xe4D\xd7\x04o\x1c\xe7\x0fm\r\xba)\xfd\x94\xb6\xbda\x1a\xc5,gU\xc3Mv\x1a\xd8\"\xa4\xd0(Ʀ\x86[\a7\xaaG{\xa3\b\xff\xf7\x03\x10\xa6\xa9\x12b_v\x04\xa7&9\r.\xac\x9d\f\x8cNv\xe5\xbc&\xa5\xbe\t\xa8\xe5\xf4\x84@\x99ivF\xe7Ҁ\x9d\x8f\xa0\x8e\x95?\x10X\x9fe\x9e\xaf\xdc\fN\xc5\x16y\xda;\xc1\xf2%\a\xc9\xf2\x0f\x9d:7\x9a\xef\xb1nk\xf1\n\x1a\x80\x14\xf7\xf8\xa1\xbe\xc8x\x1d\x03̪w\x16\xc9(b\xa1Ax\x15+\x10\x93:\xc5t\xb9\xb44t\xa9\x9f_\xa0\x82_3揾}r\xfc\xc6;\x16\xb9?\x19t\xe7m\xeaq\xe3T\xa0\xce?\x13{\xcbؿ,r\xbc\x90\x0f\x97\xd4e\xe0\x1a\xc5\xca\xf1\xfa&\x86\x805R\xb2W\x97\xbb\xd9\xdc~\xcb>\xae\x84?\xc9ԕ\xda\x19[\xbe#\x9f\x17\x82ܲ\xa3\x10dJ\xb98\x10\xe4\xed\x11\x1d2\xd2\xd1\xc3\x1e\fw\xb3\x19\x01\x1e:\xa3\xbb<1\xabH\xec\x91\xc8k\x93\xcd\xe6\xdb\xe1K\xf1\x99\x883J\xae\xb2\xc2g\xba\x05\xfcE\xf7\x15˸\xb6@5\x94\xf1\x8bl\x87\x15'\xfa\x06\xe3\xc9\xf1#\xd5:ň\x8e\x87,\xf9\"\x9eNx\xa9\xf3\x8c\xe5\xfa\xc7\xfa\xe33\xf6\xf3\xfe\x18\x99\x9f\x9aʸ\x82&D\xacȴ\xf2|\x9011\xa0l\f\x97d\x94v\xfe\x9c9'j\xf6D\xf1k01\xdb\xec3\x10?\x1c\x02\x8bK\xa2+7\xe0\xf4\xc1\x96\x13\"\xe5ׅV\xd3w\x8d\xb4-B\x83\x16\x19\x1b\xd8>\x16\xbb\u007f$\xc6\xfe\x12\xf7\xce\xc7^\xf1\n\xe4f\xac\xd8\xcc\xc8H\x1e\xd5jkq\x05\x1c\xd35\x95\xcdn4\xfa\xf150\x9b\xcf\xe73\xa6\xc5#\x1a+\x94\\\x02\xd3\x02\xbf8\x94\xf4\xcb\x16O\u007f\xb5\x85P\x8b\xdd\xf7\xb3'!\xf9\x12\xae[\xebT\xf3\x80V\xb5\xa6\xc4\x1b\xdc\b)\x9cPr֠c\x9c9\xb6\x9c\x010)\x95c\xd4l\xe9'@\xa9\xa43\xaa\xae\xd1\xcc+\x94\xc5S\xbb\xc6u+j\x8e\xc6\vOK\xef\xbe+\xfeR|7\x03(\r\xfa\xe9\x1fE\x83ֱF/A\xb6u=\x03\x90\xac\xc1%h\xc5w\xaan\x1b\\\xb3\xf2\xa9ն\xd8a\x8dF\x15Bͬƒ\x16\xad\x8cj\xf5\x12\x8e\x1dan\x04\x146s\xaf\xf8\xa3\x17\xf3ދ\xf1=\xb5\xb0\ue7f9ޟ\x84u~\x84\xae[\xc3\xea)\b\xdfi\x85\xacښ\x99I\xf7\f\xc0\x96J\xe3\x12\xee\b\x86f%\xf2\x19@ܻ\x875\aƹ\xd7&\xab\uf350\x0e\xcd5IHZ\x9c\x03G[\x1a\xa1\x9d\xd7ֽ\xe2\x10\x00B@\b\xd61\xd7Z\xb0m\xb9\x05f\xe1\x0e\xf7\x8b[yoTe\xd0\x06x\x00\xbfX%\xef\x99\xdb.\xa1\b\xc3\v\xbde\x16coP\xef\xcaw\xc4&w \xd0\xd6\x19!\xab\x1c\f:#\xd8oQ\x82\xdb\n\va\xb7\xb0g\x96\xe0\x18\xe7w\x99_\xd8\xf7wG<@pM\x06\xd0M\r\x108s\x98\x03\xd0\xe9\x13\xd4\x06\xdc\x16I\xf3\xde☐BV\xbe)\x9c\x048\x05k\xf4\x10\x91C\xab3\xc84\x96\x85V\xbc\x90I\xe8\x00\xd6ݨ\xf5\x92nh\xfc\xff\x1a\xd5\x00н⯀\xf2\xa2u\xc3\xe0\xc1\xaa\x8f\xfd\xa6K\v?\xa0u\xa2\x04\x83ZY\xe1\x949\x80\xe0(\x9d\xd8\b4\xb0Q\xa6o6' \xd0\xdc\xdbn\xd2\x00J\x94\xfe\x80Z\xbdB\x11\xd1oVN\x19V!\xfc\xa4J\x1fvȜ\r\x0e\xec\xd9nU[sX\xa7]\x03X\xa7Lָ\tq\x98\x15\xe5&\xb1#\x1f\x1b\xaey\x1a}Ov\n\xb2\xc5$@\x0ed\xbf\xab0\xef9\xa1{\xf7}\bU\xe5\x16\x1b\xb6\x8c#\x95F\xf9\xee\xfe\xf6\xf1\x8f\xabA3\x806J\xa3q\"\x85\xce\xf0\xf52F\xaf\x15\x86\xaa\xbe\"\x81a\x14pJ\x15h\x83\xfd\x856\xe4\x11C8\x0ea\xc9H\fZ\x94\xae\xaf\x92\xf4\xa9\r0\tj\xfd\v\x96\xae\x80\x15\x1a\x12\x93\x0e\xa6Tr\x87Ɓ\xc1RUR\xfc\xa7\x93m\xc9\xcciњ9\x8c\x11\xfc\xf8\xf9 +Y\r;V\xb7\xf8\x16\x98\xe4а\x03\x18\xa4U\xa0\x95=y~\x88-\xe0ge\x10\x84ܨ%l\x9d\xd3v\xb9XT¥LY\xaa\xa6i\xa5p\x87\x85Ozb\xdd:e\xec\x82\xe3\x0e\xeb\x85\x15՜\x99r+\x1c\x96\xae5\xb8`Z\xcc=t\xe9\xb3e\xd1\xf0oḼ\xf6j\x80ub\x18\xe1\xf3\x89\xec\xcc\tP*\x03a\x81ũa\x17GE\xa7P\xf4\xf0\xb7\xd5GHK\xfb\xc3\x18k\xdf\xeb\xfd8\xd1\x1e\x8f\x80\x14&\xe4\x06\xa3+o\x8cj\xbcL\x94\\+!\x9d\xffQ\xd6\x02\xe5X\xfd\xb6]7\xc2ѹ\xff\xbbE\xeb\xe8\xac\n\xb8\xf6\xf4\x81BS\xab\xc9ry\x01\xb7\x12\xaeY\x83\xf55\xb3\xf8\xd5\x0f\x804m\xe7\xa4\xd8\xe7\x1dA\x9f\xf9\x8c\a\a\xad\xf5:\x12=9q^#α\xd2X\xd2\xe9\x91\x02i\xa6؈\x18\xa1(p\xb2\xf1\xf0b 8\xef\xb8\xf4e\xa3\xd3x\xd0\b\xd9\xfbܜ\x84M\xf6bj\n\x98a\xe4D(@=\x8e\xb2d\x8e\x93\x1cac\x80-&\x12N\x1c\x03}Rq\xbc\xb0\x8f;\xc51\a\x9b\xa6\x82۲`\xadĭ(\x1e\xb5RNW\xa1O\xc9\x17\x01ӊ_\xc0\x15Wd`p\x83\x06e\x89)p\x9d#\x0e\x19d\xfd\x94>\xc5x\xda(\xe0LT\xcf\"~w\u007f\x9b\"yRb\xc4\xee\xa6\xeb^\xd0\x0f}\x1b\x815\xf7\x89\xee\xf2\xdaW\xb7\x9b\xb0\x98\x8fiN\x01\x03-0P\xc0.I\x80\x90\xd6!\xe3\xa06Y\x89T\xa8\x009\xbe\xc18\xe3m\x88`1T\x1eS\v\xe9\x1e\x18\xc5N\xc1\xe1\x1f\xab\x0fw\x8b\xbf\xe7T\xdf\xed\x02XY\xa2\xf5\f\xd8a\x83ҽ\xedH9G+\fr\xa2\xd8X4L\x8a\rZW\xc45\xd0\xd8O?|\xcek\x0f\xe0Ge\x00\xbf\xb0F\xd7\xf8\x16D\xd0x\x17\x96\x93\xd1\b\x1b\xd4\xd1I\x84\xbdp[1N\xa6\x9d\x06ȼ\xe2\xb6\xf7~\xbb\x8e=!\xa8\xb8\xdd\x16\xa1\x16O\xb8\x847\x9e\xd6\x1ca\xfeJ\xbe\xf3ۛ\x13R\xff\x10\\\xfb\r\rz\x13\xc0uy\xb8\xeftG\x90\xc1\xf3\x8c\xa8*<\xb2\xaa\xf1\xe7\x93\n\x85\xeaoA\x19ҀT=\x11^0\x9d^\b\x94\xc8'\xa0?\xfd\xf0\xf9$⡾@H\x8e_\xe0\a\x10\xb1\xacъ\u007f[\xc0Go\x1d\a\xe9\xd8\x17Z\xa9\xdc*\x8b\xa74\xabd}\xa0=o\xd9\x0e\xc1**\x92\xb0\xae\xe7\x81\aqس\x03i!\x1d\x1c\xd9\x1b\x03͌;k\xad\x89\xfd|\xfcp\xf3a\x19\x90\x91AU>\x12S\xd6\xdc\bb3DcB.\xf6\xd68I\xe6\xe9\xb3m0\x1f\xa7\xa0\xdc2Ya\xd8/¦\xa5\xecX\\\xbdƏ\xa7\x94$}\x19j2\x0e\x1c\xff\xb7\xe4\xfe\xcc\xcdy\x06\xfd\x8c\xcd\xf5\xab\x8c\xb3\x9b{j\xd7h$:\xf4\xfb㪴\xb4\xb5\x12\xb5\xb3\v\xb5C\xb3\x13\xb8_\xec\x95y\x12\xb2\x9a\x93i\u0383\r\u0605/Q\x17\xdf\xf8?\xafދ\xaff\x9f\xbb\xa1A\x95\xfd5wE\xeb\xd8ū6\x958\xec\xf3\xf3\xd8\xd5*2\xab\xf1\\r\x8b\xfdV\x94\xdbT\x9c\xc4\x18{\u0099\x041a\x1eB3\x93\x87\xafnʤ\xd0\xd6\x10\xa2\xc3<^\xb0͙\xe4\xf4\xbf\x15\xd6Q\xfb\xab4؊g\xb9\xef\xbfno~\x1f\x03oū|\xf5\x04\x01\x0f6ҿO\xb8@\xcc\x1e\x06\x83\x13u\xcc0\xd6n̋\x98\xa1cU\x86\x8a\xf5/\x02\xcf\x11\xb6\xb3\x1a\x18^ӱ\xca\x023\b\f\x1a\xa6\xe9\xe4\x9e\xf00\x0f)^3A\xf9\x99Rpw\xcf\x01L\xebZdSqL䑄F\xbeO\x856\xab쩽g\xcf!H\xb8\xa0\xffxř\xa1\xec\x11@\xe07\x1dm\xf7\xb7Z9^|\x9a\x14\x9f\xd4\"ե\xc4ֆ\x10\xe7\xf9\x02j4\x86\n\x8aQ\x93V|Ԓ\xbd\xd9J\x9d\x83\x9b\xb7\xb3\xca\f\x17\xaa/\xa8+\xc3Eq\xd4i\x88\".]\x1f\x13\x85~meY*b\xa7ë\xfb\xf3\xc7{=\x9d\xe1/q\f\x0f\xe0\x9ch\xc8f{\xd7\xcaq\x8d\\i\b=qa\xa6\x8f\xdb$\r\xb9\xa7\x8e\xc4l7L\xd4\xc8!\xbd\x1d\x8c\xe7d\xa4\xf6\xa5\xacqCA\xaeյb<\x15d\x11^GϨ^\xf7\xb7#W\xf6\x8c\xcc\xd6\"\xf7\x95|F\tSʶQ\xa6a.\xdc\xe6ͳBe[\xd7l]\xe3\x12\x9ci\xa7\xddg\x82E\x83ֲ\xea\x92+\xfe\x1cF\x85:5N\x01\xb6V\xad\xeb\n\xd5AP\xb8\xb2Ѧ^V+gK\xc0\xa193\xa2\xe86Rպ\xf6s\xfa\x81\xe0\xf8\xe0\xe4Q\xad1\x9f\xea^\x13\x13\x00\xfc\x83\xc9%\x844&\xe7`]\xf4:\xeba\xf4\xa1l\x9b\xe9*s\xb8\xc3}\xa6u\xf2\xd0\xd3\xef\xbcN.\x93\xe9\xfb\xd1{Ë\xf6\x1f\x17\xba\xa4\x828\f\xb6\xaaNά\x1c\xabA\xb6\xcd\x1a\r\xe9a}ph\x87\xe1n\xe6r\xd0\n53\xe4\xe9\xfe&\xfcz\xfcT\xf3\x16\xac\xf0\xd7{ķ\x02\x01\vŷ\xa5\xe4D\xc4R\x19̄L\x98\xa6\x95A\x12\x19\xc2\xff=\xf3G\xd6N&\x8d\x1e9\xefɎW\xc4\xfd\x96v\xdd=\u007f,\xe1\xd7\xdffGb\xc3J*\x19\x90ߍ\x1f\xf1߄+\x9d\xf4*\xef\u007f\x96J\x06\xfel\x97\xf0\xe9\xf3,=\xd6=\xa6\xc7vj\xfco\x00\x00\x00\xff\xff\xbe\xf4?~\xf9 \x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xc4Y_s\x1b\xb7\x11\u007f\xe7\xa7\xd8q\x1e\xd4̘\xc7\xc4\xed\xb4\x1d\xbe\xd9R\xd3Q\x9b\xc8\x1aSՋ\xc7\x0f\xe0ay\x87\xe8\x0e\xb8b\x01\xd2l&߽\xb3\xc0\x81\xbc\u007f\x14%M\x94܋-`\xb1\xf8\xedb\xffs6\x9f\xcfg\xa2Q\xf7hI\x19\xbd\x04\xd1(\xfc\xeaP\xf3_\x94=\xfc\x9d2e\x16\xdb\xefg\x0fJ\xcb%\\zr\xa6\xfe\x84d\xbc\xcd\xf1\n7J+\xa7\x8c\x9e\xd5\xe8\x84\x14N,g\x00Bk\xe3\x04/\x13\xff\t\x90\x1b\xed\xac\xa9*\xb4\xf3\x02u\xf6\xe0\u05f8\xf6\xaa\x92h\x03\xf3t\xf5\xf6\xbb\xeco\xd9w3\x80\xdcb8~\xa7j$'\xeaf\t\xdaW\xd5\f@\x8b\x1a\x97\xd0\x18\xb95\x95\xaf\xd1\"9c\x91\xb2-VhM\xa6̌\x1a\xcc\xf9\xd6\xc2\x1a\xdf,\xe1\xb8\x11\x0f\xb7\x88\xa24\xb7F\xde\a>\x9f\"\x9f\xb0U)r\xff\x9e\xdc\xfeQ\x91\v$M孨&p\x84]R\xba\xf0\x95\xb0\xe3\xfd\x19\x00\xe5\xa6\xc1%\xdc0\x94F\xe4(g\x00\xad\x02\x02\xb49\b)\x83JEuk\x95vh/\x99ER\xe5\x1c$RnU\xe3\x82\xca\x0e|\xc0l\xc0\x95\xc8W\x06u\v\xa5\x95.\xc2R\x84\x00\xce\xc0\x1a\xa1E\"\x033\x80\x9f\xc9\xe8[\xe1\xca%d\xac\xb8\xac12ӉgK\x13u~3Xu{\x96\x83\x9cU\xba8\x85\xec7\x06\xd5\xc3sk\xe4\v\x90<\xe7\xdaHۻ\xf4\xbe\xbbt\xee\xde[#\xdb\x03\xd0\x1a\x10\x90\x13\xce\x13\x90\xcfK\x10\x047\xb8[\\\xeb[k\n\x8bD\x130\x02y֔\x82\xfa8Va\xe3uql\x8c\xad\x85[\x82\xd2\xee\xaf\u007f9\x8d\xad=\x949\xe3D\xf5a\xef\x90zH\xef\x86\xcb\x11-\x1bv\x81\xf6\x8f\x83\xbbfHWF\xf7\xf5\xfaa\xb0:\x05\xb6\xc34\x05\xbdl\x14\xb0z\\\xdf\x17}~R\xb8\xb8\x10\xb7\xb7\xdfǰ\x91\x97X\x8beKi\x1a\xd4\xefo\xaf\xef\xff\xbc\xea-\x034\xd64h\x9dJ\x91,~\x9d\b\xdeY\x85\xbef/\x98a\xa4\x02ɡ\x1b):E\\C\xd9b\x88\u03a2\b,6\x16\tu\f\xe6=\xc6\xc0DB\x83Y\xff\x8c\xb9\xcb`\x85\x96\xd9\x00\x95\xc6W\xc1۷h\x1dX\xccM\xa1\xd5\xff\x0e\xbc\x89}\x8f/\xad\x84\xc36\x9c\x1e\xbf\x10ﴨ`+*\x8foAh\t\xb5\u0603E\xbe\x05\xbc\xee\xf0\v$\x94\xc1Ol!Jo\xcc\x12J\xe7\x1aZ.\x16\x85r)s妮\xbdVn\xbf\bIH\xad\xbd3\x96\x16\x12\xb7X-H\x15sa\xf3R9̝\xb7\xb8\x10\x8d\x9a\a\xe8:d\xaf\xac\x96\xdf\xd86\xd7\xd1E\x0f\xeb\xc8\xe9\xe2\x17\xf2\xca#/\xc0\x89\x05\x14\x81h\x8fF)\x8e\x8aN\xe1\xf1\xd3?Vw\x90\xae\x0e\x8f1\xd4~\xd0\xfb\xf1 \x1d\x9f\x80\x15\xa6\xf4\x06m|č5u\xe0\x89Z6Fi\x17\xfe\xc8+\x85z\xa8~\xf2\xebZ9~\xf7\xffz$\xc7o\x95\xc1eH\xe7\x1c/}Ö+3\xb8\xd6p)j\xac.\x05\xe1\xab?\x00k\x9a\xe6\xacا=A\xb7\x12\x19\x12G\xadu6R\xb5p⽆\x15\xc0\xaa\xc1\x9c\x9f\x8f5\xc8G\xd5F\xe5\xc178\xfc\x80\x18\xd1g=\xd6Ӯ\xcb\xdfZ\xe4\x0f\xbeY9cE\x81?\x9a\xc8sH4\xc0\xf6a\xeaL\x02\xa7;9/2\a\x8a\x94#\xa6\x00U:\xbc+\xd1b8éQ\xe5l^\x86\x943vόc\xb6\xccF\x1cN\xbf\xfb2\xad=\x80\x1f\x8c\x05\xfc*\xea\xa6·\xa0\xa2\xc6\x0f\xe1/ٌ\xa2\xa8\x8e\x03G\xd8)W\xaaa\xd2:h\x80\xad\xab\x15{\x17\xc4u\xe2\x01\xc1\xb4\xe2z\x84J=\xe0\x12ބJ\xf0\b\xf3\x17v\xac_ߜ\xe0\xfa\xa7\xe8@o\x98\xe8M\x04w\xc8w]\x8f<\x82t\xa5p\xe0\xac*\n<\x16\xa2\xc3/\x04o\x0e\x89߂\xb1\xac\x01m:,\x02c~\xbd\x18\x8fP\x8e@\u007f~\xf7\xe5$⾾@i\x89_\xe1\x1d(\x1du\xd3\x18\xf9m\x06w\xc1:\xf6ډ\xaf|S^\x1a\xc2S\x9a5\xbaڳ̥\xd8\"\x90\xa9\x11vXU\xf3XoH؉=k!=\x1cۛ\x80FX\xf7\xa8\xb5\xa6*\xe3\xee\xe3\xd5\xc7eD\xc6\x06U\x84x\xc7\xd9i\xa3\xb8j\xe0r!\xe6\xbc`\x8d\xa3\xa4\x99>\xf2\xd1|\x9c\x81\xbc\x14\xba\xc0(/\xc2\xc6s\x16\xca.^\xe2\xc7\xe3ԟ\xbe\x89\x12`\x188\xfe\xb0$\xfaD\xe1B\xa5\xfa\x04ẽ֣\xc2=\xf85Z\x8d\x0e\x83|\xd2\xe4Ģ\xe5\xd88Z\x98-ڭ\xc2\xddbg\xec\x83\xd2ŜMs\x1em\x80\x16\xa1=]|\x13\xfey\xb1,\xa1\x93}\xaa@\xbd\x06\xfb5\xa5\xe2{h\xf1\"\xa1R\xad\xf8\xf4\xc2\xf9t\xe70\xa0i\x8c\x1c\xac\xf4-a\xb0y|\x9a\xc1Fo \xd6\xc5;n\xab´\xe59\x8dU\x9c\U0003468d\xfe\xed\xd2܇\x8b\xdb\x17\xb7V\xb9\xe1±?M~\xfc\x95/\xc7'\xc2\x1c\xc3ʈΩ\x1aC\xbf\x12\x87S;A钩\x17\x85\x0e\xbfx4\xc4Tf\x872\x94u\\un\x84\xaaP\xc2a\x9e\rw\xdca\x86\x86\xfeb\xaa\x8aI\x8c<\xa1\f\xbd\xe7\x04\xe8\xf1\xb94#\xe36~\xce,F\x14\xdaW\x95XW\xb8\x04g\xfdx\xfb\x11\a\xaa\x91H\x14\xe7<\xe8\xa7H\x15;\xbe\xf6\b\x88\xb5\xf1\xee\xd0\xf2\xb5\xaeԪ\xe2\x82Z+x^\xdbY\n:\a\xe5\x96i\xa6,\xee\xe0ԏ\x9b\x1c\u007f\xa8}=\xbef\x0e7\xb8\x9bX\x1d\xcd,\xbb\x9b\x97Ʉ&\xf6~\b\xd6\xf1,\x05\xb4\x17\x9d\xd3AK\x06\xa5\xa9\x92u\x1b'*о^\xa3eE\x84Ai\xd2H\n\rS=t\xa8\xbd\x8f\x9a\xbc_=(#\x1b\xb8\x8a\x81m\xb7\xa1`\xa3\x17\xf4\x13m\x95Q\xac\xacYu\xc4(\x91\xb1Y\x01\xa01\x961\x89CZ\x02\bk\xd8[\xad\xc9W;2\xf5Cl\xa9\x8dJK\xf2\xd9\xf8\xe0\xfa\xf0\xae\xfe\xbe~\xb7\x02\x10\x9e\xf2\xf1Ϫ\xa3\xc0ع\x06L\xd4z\x05`\xb0\xa3\x06<\x05V\u0093\xb3A\xb1\xf5\x8aB} M\xde\xd6ʮ\x82#\x91\xdc\uef0d\xae\x81\xd3F9݇T\xd2\xd9dC\x9b\xc1\xd01oi\x15\xf8\xd7\xc5\xedO*pVq:z\xd4K\x81\xe4\xed\xa0\xcc.j\xf43\x85\xe4 \b먁\x9b\x14\x8bCAr\x05\xd0C\x90c\xab\x00\xa5̠\xa2\xbe\xf5\xca0\xf9+\xabc7\x80Y\xc1\x97`\xcd-\xf2\xbe\x81z\x80\xbd\x9eA\x96u\a\xc0>\xec\xa8_\xf319\x97\xc8EP\xb6\x0f\xefK\xd8bO\x1d6\xbd\xa6ud>\xdc~\xbc\xff\xee\xeeL\f\xe0\xbcu\xe4Y\rP\x96oTC#)\x80\xa4 \xbcr\x9c\x19~\x9b\f\x16-\x90\xa9x(\x00\xefiȟd\x1f\x03\xd8-\xf0^\x05\xf0\xe4<\x052\xa5\x9c\xce\fCRB\x03\xb6\xfdB\x82k\xb8#\x9f\xcc@\xd8ۨe\xaa\xb9\x03y\x06O\xc2\xee\x8c\xfa\xeb\xc9v\x00\xb6٩F\xa6\x9e\xcfӗ\xf16\xa8\xe1\x80:\xd2\xff\x01\x8d\x84\x0e\x8f\xe0)y\x81hF\xf6\xb2J\xa8\xe1\xdaz\x02e\xb6\xb6\x81=\xb3\v\xcdz\xbdS<\xf4\x8e\xb0]\x17\x8d\xe2\xe3:\xb7\x81j#[\x1f֒\x0e\xa4\xd7A\xed*\xf4b\xaf\x98\x04GOkt\xaaʡ\x9b\xdc?u'\xff\xe7\xfbn\vo\xcfb-L\x06\xf6\xca\xecF\x1b\xb9\xb0_` U6\xa8\x00\xd8\x1f-Y\x9c\x80N\xa2\x84\xce\xe6\xe7\xbb\xcf0\xb8\xcedL\xd1ϸ\x9f\x0e\x86\x13\x05\t0e\xb6\xe4\v\x89[o\xbbl\x93\x8ctV\x19\xce\v\xa1\x15\x99)\xfc!\xb6\x9d\xe2\xc4\xfb\x1f\x91\x02'\xaej\xb8\xca\x03\x05Z\x82\xe8R\xe5\xca\x1a>\x1a\xb8\u008e\xf4\x15\x06\xfa\xcf\tHH\x87*\x01\xfbu\x14\x8cg\xe1T\xb9\xa06\xda\x18\xc6\xd53|MGН#\x91\xe8K\b\xa6\xa3j\xabD\xee\r\xd8Z\x0f8ӯ\xcfL/\xb7n\xfaZ\x14\x0f\xd1ݱ\xf5\xb8\xa3O\xb6\u061c*Mb\xfbq\xe9\xcc\x10\\\x9a,\xa5\x8diYqf\x1b\x80\xf7ȣ\xfeeT\xe6i\f,\xe6\xf3\x02\t\x99\bL\xedl\xd0\b\xfa%W\x94\x11\xc7\v9]/\x1cI)\xed\xed#\xd8-\x93\x19\x1b\xedc]Ȥ%\xf0Ѽ*\xd8rU|\x94\xa9\xf0\xb6\x8a\xfc\x85@7\x13\xf5\x01\xf7mԺ\xb7U\t\xdb9d\xd5jZv\x99\xbeT6\xaaX9\x96\xde\xffv\xbc\x0f鞢\xa7\x9b\xedB\x06\xf7\xe7\xda\xe3\xc2)\x82>\x94\x94\n\xf8\xf3;\xfa\xfc\xebk%\x80\xb3\xb2\x0f\xa2/\xe8\x90\xf2{E\x0e\x89r\xe5i2A\xab\xe5\xf6\x98\xe8,U\xdbDe\xca\xf1d{\x82\xdfW\x8d\x0fF\x8e\xe15\x03$\x1f\x18\xc0\x16\xd1{2ܛ\xc97\xea7\x8f\x10\x8d\x81G\xed\x93^\"\x17*\xe0\xd3\xfc\xc4\x10X2\x06\x9c\x04\xe3~{\xc4\xe9-\x94I[괭\xf5\x1dry\xeaT\xc9\xd0L#=)\xb1\xd5\xd4\x00\xfb8\xdf~i\xaeP\b\xb8\xbb\x94\xddu\xd1*\x97m\u007f\x04\xb0\xb5\x91\x9f\x81\x9e\xf7\xf3(\xe0\x02\x1d\x17\"u{\f\x97\xe2\xbcM:K\x05\xf14\xbf/\x87@&vs7\x15\xdc\xd0\xe3\x82tC(\xe7}\\\xc1\x8d\xe5\xe5\xadg3\\슙0\xa4w\x89\x1c\xf1\x1cJ#\x8f%\xb1}zg5\xf0\xf7?\xabSc\xa1\x10\xe4\x98\xe4\xcd\xf4\xef\xe1͛\xb3\x9f\x81\xbc\x14֔\xc7{h\xe0\xb7\xdfW\xc5\x15\xc9\xfbၟ\x84\xff\x06\x00\x00\xff\xff\xe08S\ft\r\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xec\xbd}s#\xb7\x918\xfc\xbf?\x05j\xe3z$\xfd\"Rvr\xc9s\xb7\x95zR\x1b\xadl\xab\xe2ժV\xca\xe6I9>\x1f8\xd3$q\xc2\x00\x13\x00C-s\xbe\xef\xfe+4\x80y!\x87/\xc0P\xda]\x87\xb8\xaa\x9c\x97\x9a\xe9\x01\x1a\x8d~G7-\xd9{P\x9aI\xf1\x92В\xc1\a\x03\xc2\xfeK\x8f\x1f\xfe]\x8f\x99\xbcX|\xfd\xc5\x03\x13\xf9KrYi#\x8bw\xa0e\xa52x\rS&\x98aR|Q\x80\xa195\xf4\xe5\x17\x84P!\xa4\xa1\xf6gm\xffIH&\x85Q\x92sP\xa3\x19\x88\xf1C5\x81I\xc5x\x0e\n\x81\x87O/\xbe\x1a\xff\xbf㯾 $S\x80\xaf߳\x02\xb4\xa1E\xf9\x92\x88\x8a\xf3/\b\x11\xb4\x80\x97D\x816R\x81\x1e/\x80\x83\x92c&\xbf\xd0%d\xf6c3%\xab\xf2%i\xfe\xe0\xde\xf1\x13q\x8bx\xe7^\xc7_8\xd3\xe6\xcf\xed_\xbfg\xda\xe0_J^)ʛ\x8fᏚ\x89Yũ\xaa\u007f\xfe\x82\x10\x9d\xc9\x12^\x92\x1b\xfb\x99\x92f\x90\u007fA\x88_\x13~v\xe4g\xbd\xf8ځ\xc8\xe6PP7\x1fBd\t\xe2\xd5\xed\xf5\xfb\xdf\xdeu~&$\a\x9d)V\x1aČ\x9f\x1ba\x9aP\xf2\x1e\xd7f'\x80\x9b@̜\x1a\xa2\xa0T\xa0A\x18M\xcc\x1c\b-K\xce2Db\r\x91\x109\xad\xdf\xd2d\xaad\xd1@\x9b\xd0\xec\xa1*\x89\x91\x84\x12C\xd5\f\f\xf9s5\x01%\xc0\x80&\x19\xaf\xb4\x015\xaea\x95J\x96\xa0\f\v\x88u\xa3EG\xad_W\xd6rb\x97\xeb\x9e\"\xb9% pS\xf6(\x83\xdcc\xc8\xce\xd6̙n\x96\xb6\xba\x1c\xbf$*\x88\x9c\xfc7dfL\xee@Y0D\xcfe\xc5sKw\vP\x169\x99\x9c\t\xf6\xcf\x1a\xb6\xb6\v\xb5\x1f\xe5Ԁ\xdf\xeff0a@\t\xcaɂ\xf2\n\xce\t\x159)\xe8\x92(\xb0_!\x95h\xc1\xc3G\xf4\x98\xbc\xc1\xed\x11S\xf9\x92̍)\xf5ˋ\x8b\x193\xe1\xfcd\xb2(*\xc1\xcc\xf2\x02\x8f\x02\x9bTF*}\x91\xc3\x02\xf8\x85f\xb3\x11Uٜ\x19\xc8L\xa5\xe0\x82\x96l\x84S\x17x\x86\xc6E\xfe\xabz\xdbN:s5KKy\xda(&f\xad? \x99o\xd9\x01K\xf0\x8e\x96ܫn\x15\r\xa2\xedO\x16;\xef\xae\xee\xee\xdbt\xc6\xf4*\xf6\x11\xef-\xe2k\xb6\xc0\"\x8c\x89)(\xb7\x89Hm\x16&\x88\xbc\x94L\x18\xfcG\xc6\x19\x88U\xf4\xebjR0c\xf7\xfd\x1f\x15hK\xd0rL.\x91\xa9\x90\t\x90\xaa̩\x81|L\xae\x05\xb9\xa4\x05\xf0K\xaa\xe1\xc97\xc0bZ\x8f,b\xf7ۂ6?\\}\xd8a\xad\xf5\x87\xc0\xbc6\xec\x97?\xfdw%d\x9d\x13c_cS\u007f\xcc\xc9T\xaa\x0es\xb0\xaf\x8c;@\xfb\x0f\xad\x1d\xee\xf4[\x0e\xb6\xfa\x97\x95\xa9\xfc\xa9~\xd0ҏ\x9dD%\xd8?*@\x16\xe7N,\xac\xb1\x945\x90$\xcc\x0f\xc9b\xbc\xf6\xf7\r8\xb5\x03>d\xbc\xca!\xaf\xb9\xed\xdaZVf|\xb5\xf6\x02\x8a#ʄ\xa5\u007f\xcb\xfe\xed\xb4E\xf3W\xcbN{fL\x15\x10K\x81L8x\x84\t\\l/\xa6\xed`\x06\x8a\x9e\xc9m]\x1dA9G'\x1c^\x12\xa3*\u0600\x19\xaa\x14]n@L\x90\xcd\xfb\xe2\xa5~\xde3\x04\xce2h\v\n\x87\x1a'd\xa8Z\x9f\x11\xf9ı´ega\x95\xb7\x92\xb3l\xb9\x135}/\x85\xe3\xe6\x0f_\xa0\xe0\t\xcc\xe9\x82\xc9J\xf5\xac\xc9\x1eI\xfb\xecC#I\x1bn*-3\xf3P\xf2\xb4\x15\xf7bk.\xe5î\xcd\xff\xce>Ӱm\x92\xa1Z\x17֢\xfcv{):\x01\x02\x1f \xabL\xcf4\t\xc9+\x94 R\x91Rj\xb3y\xe373\x1f\xe2\xf8\xc1&\xaa%ۨfme\x9eW\x86\xad\xb3\v\xed\xf0M)\xc0ε\xb0[\xd7<\xabd\xe5\x9e]\x15p-\x8c\xf7c\x84L\xa8\x86\x9cHO\xf6\x15\a\xed\xbf\x95\xe3\xf67\x8c\xe5|#\xe8z\xf1N\xd5\xe0t\x02\x9ch\xe0\x90\x19\xa9\xd61\xb9\x0f>\xdd؇Yn\xc0c\x0f\xdb\xec\xd2\u007f\xb3\xb0- \x89%\xf3\xc79\xcb\xe6N\v\xb0\xb4\x89pH.A#簚\xear\xd3\"ɮ\xbd\xf7\x1f\xd9\xc6;\x9a\xb1\xe3L\xad\xc2\xeb\xe3'\xcd\u0603\xdf6c\a\xe7]\xe3,\xfe\xf7^\xd1ٌ_&b\x83(I \xda\xeb\xb5W\x0fK\xb4hUYm\xffzJ\xa0(\xcd\xf2\x9c0\x13~\xdd\x05\x91r\xde\xfa\xfeg\xbc1\xf1\x14\u007f\xbd\xfa\xe6A)~\xeb\xae\xec\x82hw\xa5\xfe\xfcg\xb8)(,\uef2c\xd8{C\xbeo\xbfuNشސ\xfc\x9cL\x197\xa0Vvf\xd0y9\x042\xf6\x91wv\x14\xd4d\xf3\xab\x0fV\xb3э\ajO\xbc\xac\xbe\xect\xe2`$t\x05\xf3\x0e\xb8\x04\xedW\xa6\xa0pv\xf1=b\xb3\xf9\x05\r\x8aW7\xaf!߆\x1e\xb2\x1f\xe5\xad-\xe4\xd5\xcad۟\xf6\x8a\xfe\xbe\xcb\xf0\xaaOm49\x8f\xc79\xa1\xe4\x01\x96Nc\xa1\x82\xd8͡\x06\xf5\xdd^\xf3i\x1d9\xe8zq\xea1,\x11\x8c\xf7\xa5\xec|{_Rp\xe3\x01z\xf4\xfd\xbe\xd1A\xa0\x9d\x93\xb7p\x1d&\xed\x0f\x88\b\xb4\xbc\xf7G\x1eA\xbfX\xe0E\xbb\x17G\xf6g$a\x04\xdc',\xb3\u07b6\x96\xff\x107\xf6D\xbb-\xb2\xa7`\xce\xca=\x17\x8a\xeeC\rxZ\x82g\xec=\xe5,\xaf?\xe4\xe8\xfeZlֆ\xbb\xe3F\x9akq\xeeL2\x8dT\xf2Z\x82\xbe\x91\x06\u007fy\x12t\xba\x89' ӽ\x88\xc7K8\xb6m\xf1\xd0v\xb1\xedA\xdcn\\;OJ\xbd=L\x93ka\r\x17\x8f\x0ft\x98\xba\xcfm\x97\x0f\xddQT\x1a}hB\x8a\x11\x8a\xcaqߗ\x1c\xb2\xf7\x04)UgG֧V\u007f\xd4}pO\xb0\xf7V\x92\xb8\xf7\x9d\v\x98\xd3\f\xf2`m\xa2\xe3\x92\x1a\x98\xb1\x8c\x14\xa0f\xdb\x04G{\x94\x96\xbf\xef7\x85=\xb9\xae\x1b\x91\x14\xb6\x9fh\x0fó\xee|\xf7dF\xf6\xe4\xee\xf1T\xd8읏n\xf0Wn~t\xf7\x8aPĢ\xfe\xb1\x13\xbb4\xcf1\xb8D\xf9m\x04Ǐ؋u\xd9\xef&\xe6$dAK{~\xffNJ9$\xe8\xff%%ej\x8f3\xfc\n\xe3D\x1c:\xefz\xcfX\xfb3\xf6\vL\x13\xbb\xbf\v\xca\xd7=\xe1=\x8b\x93\x96\xb7\x00w\x82\\N\xd74\x96s\xf28\x97\xda\xc9\xd4)\x03\xde\xe7\xb2\xe9\x0e\xa6ɋ\aX\xbe8_\xe3\x03/\xae\xc5\v'\xe0\xa3\xd9M\xad-H\xc1\x97\xe4\x05\xbe\xfbb\x88\x12\xb4'%\xee\xf5\x98\xe8\xf5s7\xa3C\x16m_w\xe3\xe4\xf6j\xee\xb6Y\xefE\x87\xa5\xd4\xe6\xbb~\x87݆\xf9܆7\xba\xbai\x8f\xdfk\xa7\xce\xee}X5S\xb5\x9a\xdcԀ\xf2N<\xc7h\x83\x050\xd06\xda夫\x1dt\xb4\xf6\xacZ\x04\xef\xa0\n\x17\xf3\xd8g\x8a1Z\xa3\xc5K\xa4\xbe}\xf5\xa1\xe5c\xb4'\xd4\xfe\xbb\xbd\x90Ck\xb5\x99,\n\xba\x1a\xe5\xdbk\xaa\x97\xee\xcd@\xd3\x1e\x90\xdb}5\xab\xf0\\\xee\xaf\xee\x05\x1a\xc2\xf8\xde#3s&\b\r\xc7\x1f\x94'(JJ\xb9\x9b\x13\xb91\xa7\x9aL\x00D\xed\x1b\xff\x14\xe4u\xc1\xc45~\x80|}p\xf9N\x1at%mg@u\xbd\xa1\xf5\x0f(q\xf6U\x8ddN\x1e砠C\x15\xeb\x0eo\xab1\xee\tRH\xd3\xf6+X\xb8\xa5\xccO4\x992\xa5M{\xa2\xfb\x12\\\xa5\xf7%\x87\xc8\x1d\xb6\xab\xbbg\x05\xc8\xca$\xec\xc1U\xf3v'@[\xd0\x0f\xac\xa8\nB\vY\xed!\xdcݰ\xf2\x85\x15u\x14\xd5\xef\xc0#e\xa6\x8e'\xa1\x87\xc5H\xbbK%\a\xb3\xef\x16O`j\xd9Q&\x85f9\xa8\x10\xe5w;ˤ=\xb8S\xcax\xd5\x17\xbe\xe9\x1b\xb1f\xaa\xb8R*\xc9J}\xeb\xdely\r\xe7\U000b12e0\xbdQ0\xa7\v lJ\x98! 2\xbb/\xa0\x1c\xcb\xc6Oxd j\xf6&\xcb\xfd\x18\xbc\x1d \xaab?\x04\x8c\xf0d3\xb1\xd5)\xd6~\xfc\x1b\xca\xf8Sl\x9b\xa5\xbc\xf4\xa3\xf1\xd7\xe6\xedg9\x1a5S\xd9_\x84M\x80\xbc\x03\x9a/\xc3\xf9\xa0\xc6XS\x15i@\x12U\x896G|\x82\x93\x11c\xdf\xf9Y\x1c\xd2pc\x82\xed\xb1\xb1+\xfe|f\xdaڎ\x05\xf1\xa4ڎ\xfd@-\xe8R\\3\xd7\x1d\x00VT\x06\xc5\x19\xe7^SM\x84\xe63\x01k\xa0B\xee\x9c^V|z=\xda\xe5.m\b\x83\xf7\xae.FuYq\xf3zC\xb3\x95\xef\x17}\x04\xbc\x83w)+\xf2H\x85\tD_+s\xa5ܓ\xeacw\xd5\r\xaaf\x11O\xaf%\x13\x06\x955d\xf4\x810j\x89\x19f\xfbNڍ\xfb\xae\xeaT\xd0\x19\x9c\x9chr\xf9浥\x16\xabx\x10\xb6\xaf\xe2\xe3\x06Z\x89\xcc\x05cK%\x17,\xb7\xda\xd3{\xaa\x18\x9dpk\aOA\x81\xd8\x15[Y\x1d_\x9e\xbe\u007f\xf5\ue9dbWo\xae\xce\xd0z\x86\x0f%\x15\x96\f+\x1d\x04z\xbd\x8c\x93\x938\xd8 \x16LIa\xf1\x89\x8eAJ\x16a\xb6Y\x9d\u007fg\xad-\xbe\x80|_\x0fn@Fk\xc5\xc1\x17\xc2DY\x99\xe0 }d|?\xf9\x15\xc6\x04H%\xb29\x153\x8b\xd7ײ\xb2\xf3\xfc\xf2KĊ\x82\xbc\xca\xf0lF\x81\xa4\xe1<}y\xee#Z\x94s\xf9\xa8Q\xbc\x80\xceh\xb9\xaf\xc1\xd0^w{\xcb\xf4R\x18\xfa\xe1%ac\x18\x93\x17_\xb6\xfe\xf4\"\n\xaeŖ\xa5*\xbbL\x17\x92pX\xe4̀\xa2\x9c\xbchC\x8e;\tWv\x9d\x90\xb7\b\xd4}M\xc0\x02\x943\x05\x1c\xc9\xc5Q\x80\x82\x19U9\a\xad-\xdb}\x9c\x83\x99\x83\xf2\x9e%Od\x10\xe3xvC*{\xbez\xf3C\x9b\x8c\xd0(\x88!{\xb4I\xda\x1a3y\x91\xcbL_\x18\xaa\x1f\xf4\x05\x13V\xaa\x8erj\xe8\xa8\xc5w/\x9c@\x1cy\x11=\n\xc6\xf4\xa8>\x8e\x17\xbfR\x95\x10L\xccF\xb4~\x8a\x89\x11\x1d\xe99p~\x121\xcb(\x89\xe1F\xb4\xc9\xdb~-&\xc6\x10\xe9\x9bp\xa3\xcbԯj\x1e\xee\xbe<&7\xd2lKB\xdb\x0e\xe2fɰ\xc2\xed\xa3\xb5\x85u\xc9p\xe4\xf6=\xaf\xc5q{\x10\x8bdN\xff\xbd7\xc2Z\xac\xa8\xde\xf38:4\x12\xf3\x0e\x98\xe8\xf2\xb9>\xc5\xe0i1\xdfu\f\x8a\xc5{\xdaM\xae\x10\xed\xc5FA&\xcdq\by\xdb(\xd9j\xbb6\x8e-\xa6\xd8jn슟\xf5\x8f\xf5\xa8\x9a\xbf.\x92\x8e\x0f\xd2\xc2ɘ\xbc\xf1y\x06\x94\\\xfet\xfd\xfa\xea\xe6\xfe\xfa\x9b\xeb\xabwqH!\xe9g\x87\x84ԑ\x81\xa89\x19j!\xba\xb1\xdbNL\x00Z*X0Yi\xbe\xac\x93܇\x1f]7VO\xaeO,[\x12\rj\xc1\"\xb5\b7z\xa7\xb6b\xd8&\x80=\xac\xc2\xe3\xc6\x13\xa8=n\xecT~RHk\x8bq\x9cHXOa\"\xbb\xb1\xc3PN\x80xX\x05\xaa5˭jT\x02\xd0\xedf6\xd9;}\xb1=P\xfdz\rSZq\xe7s{\xf1b\x1c\xa3˸1\x94\xc5~\xa3\xe4\x9ea\x94\xf6\xe8\xb0\xd9;w\r+\xc4\r\x0e#\x84N|zlG\xedБ\xe6\x9a\x1b\xccgP\x06\x9b2*{\xae\x19\xe9R\x9e\xb8\xc0\xf4\x94\xcd\xde\xd0\xf2ϰ|\a\xd3\x14\x10\xabh\xc7\xccY\x9fd\x1ak\x1a4\x03\xb5\x1e7\xb5\x14\xae8\x14/$&\xaf\xb8otpr\xefs\xa0Q\x87\xb5\xe8I[\x12\x19v\xb0\xc2H\xd3\xee\xc2\xe8\xaa2-5/\x19\"\t\x9c\xd5\xeck\xb8eRdP\x1a}!\x17Vw\x80NjG\xa9\x1e\xac%\xf6\xc8\xcc|\xe4\xa2b\xfa\x02/\xe3\\\xfc\n\xff߀\xd9ݿ}\xfd\xf6%y\x95\xe7D\"\xab\xad4L+\xee\x92\xef\xf6\xce\xf7\xed\x1bM5\x85s\xbc\xd1\u007fN*\x96\xff1\x9eنq\x00ڐ\xa5\xcb\xc7<\x10}\xdca<\u007f\x19\xa4\xd4\x00\\Y\x16^s\x04\"\x15\x06\xe1\xf6I\x86\xdd\xfd\xfb\x18\xff\xe3\xff\x9c\xfd\xf1\xec\xe7\xf0\x8f_\x9f\x9d\x9d\x9e\xfe\xf0\xe77\xdf\xde\xdf^\xfd\xc8\xce~\xfeATŃ\xfb\xd7ϧ?\xc0Տ{\x029;\xfb\xe3\x97\xc9S\xfe0j<4#&\xccH\xaa\x91#\x82\x9d%\x1f\xb6\x8d\x80\xdcC\xf1\xa4wA\x13\x19*xI[c\xfb\x88\xacc\xa8j5\b\r\x035+\r\x99\x02\xf3\xe9\xf9\x9cݼ\x82\x1a\xee\xee2\xd5\x06\xff/\xc6\r=\xdc\xf4thj\xec\x16\xac\xf2H0@?\x00,\x86\xf6\x17XM\xc2\u007f\xe1\x01\x12\"\"a\x1c]\xe5GW\xf9\xa6\xf1Kw\x95߹\xf3\xd3\xf8\xc9\xd1\xdb=\xecl\x1e\xfd\xe4I\xd2.\xf9\xe5\xb4պb\xe4Q\xaf$\xce01\x9706\xb4ߛOؔ\x93#\xa5,+N\xf7\xbe#[\xcfc=sh=\xb90\n\xa6\x17\xafMy\xd0&5ݥ\"D\x1f\xc1\xf5\\7\xf2\x8as\u0084\x13\x92\xf8\xb1\x94[5\n\x9cׁP\x97\xaf\xb8\xb0hx\x9c\x83H\xbaa\xe9\x06\xd3D\x1b\xaa\f\x13\xb31\xf9\xab\x85\xe5\xb41\x9f\x8b\xc2\x04)*nX\x19\x99\x90T[Xu\x85\x12B\xb5\x96\x19\xa3\xc6c8Z\xa0r\xaaM\xd8\x12L\xcb1\xf4\x013.3\xc8Ad\x80\x15\xad\xaaH9\x18\xf6|\xb2\xb4\x18\xbd\x12\v77J\xf2ʥ\x14C4\xf7\xe9\x9f\xdb\xc7Nw\xb5\xc7ק\xd64Y\xaf\x91L\x11}\xdc\x0e\x86\x9c6\x05\xc5\xea\xf8n\x1c\xbct\x15\xbb\xce~I2C\xd6t\xeb&>]k\xc6)QU%\x8bg\xce\x02JWs7\xaa\xb8\x8d\xa2\x9a\xa8/|j\xea퓨\xb6\x87Tk\a\xaa\xb4\xc3\xd4\xd9m\xaa\xec\x00\x8b\xa79Q\x87H\xd6\x18\xa6\x80\x0eP\x02K\x05S\x16yK\x88\xac]\x05\x17\xf5\x1e\x11\x96\x830lʒ\xec\x04\xab3)(A`\x9a0\xd0l\xee\x8aa\x8an\x92M\nM\u007f\x02\x19\xfa\xcesp\x18\x86~\xb7\xe2\xe78r\xf3#7\xdf2\x8e\xdc|\xfb\xf0\xc7\xe93f\xe5\xcfh)\xe3\xcd\xe5\xf4\x1b֗\xdd+\xd0\xc8\x14\x9c\xcf0Ϊ\xdb\xfb\xc86\x15V.\xf0\x8bq'\x13\xab\xc1\xe2鳆d-\xe7\\U}\xf9H\xe6l\x16\xeb\x14\xe3\xb0\x00\xeeU|RPAg\xae\xa6\xa6\x91!Z\x17{A\xc2r%\xc5\xf2\xb5\xfb\xe5h\xddZN\xc5%\x8d#\xe7\xa6o\x9e&\x9c=\x00y\r%\x97K_:S\xe4\xe4\xcePc9\xd3\x1d\x98\xb8\x1c\xb8$\xfe\x81\xab\xb9\xad8\xdf\xd4Eg\xf3\xe8R\xdf5\xd2\\YqNJ\x045&o\x05\xc4Ff^\xf1G\xba\xd4\xe7\xe4\x06\x16\xa0\xce\xc9\xf5\xf4F\x9a[gq6WT\xe2ί\xf4@\t\x9b\x92\x97\xae7\x1c1t\x86ދ\xba\x90]\x1cQ\xa8\xceĜ\xbaV\x9f\xae\xaad\x92\xea0\xa7\"砰p\xa1w\x03v\xe0\x1bP\x05\x134\xb6l\b\xa93\xbc\xd0k\t9\xa1Y&U\xee\x8b\u0085\x12_T\xc5+\xfd5\xc7Cu\xa9%yVS\xf6\xa2!O\xb8\xcc\x1e4\xa9\x84a\xbc\xa9\x13\x19\x8aD\xea\x04\xf9NRe|\xfd\x9f\xa3\xfaL\x8c\xb01\xd9ů\x9a?\xe1\x0f\xb1\xfa\xef\x10\xe3g\xbf¾\xebc\xbdԯ\x1e\x9czD\x91\x97a\xd52\xfa\xb0g\xa1\xb8\xee\x18\x9a;\x90P\xa6\xa7=\xb6\x14\x15N\x8e\x01\x86\xb2\xb3\x9c\thW\x17fX\xb14=\xb4\xd8>V\x8eIx\xcb1=8\xcb\x14v\x00Y\xb6*O\xba\xb9\x0fI\xb2WR\x1arzrqr\xb6\x16l\x8a,R\xd4\x1eS\xc6\xc1\x89\xbcP\xff(lV2H͊\x92/q\u007fNr\xec\xb7䯩\xaa*-vK\x90\xd3\xd8]\x0e\xb5\x9aΉ\x96\xc4(\x1az\x00\xa4\xcf\xd5B\xb3\xc0\x8d\xaa\xbc\x02qz\xf2\xf3\xc99\x01\x93\xa5\xe6\xe9\x12\xf2(ʼnA2\x1a\x93{I*\xddL<\x19\xe6RVD\x80\xbb\x9f\x0f\x1fJ\xce2f\xf8\x12eo2LY\x19W\x1a\x11\xdb\x17b\r\xac\xab\x0f\xcc\xf8\xfb3\xe9`\xa7\xe4+<\xedN~\x13j-\x94\x05\\́r3O\xbfwg\xe9RH1\xfa'(\x89嵄\x87\x98\xeauI\x88i\xb5\xc7\x012AR\xcc\xfbշ\x13\x93\v\xac\xd4\xfe\x16\xa2\xf5@\xb2\xd6/\xf4\xfe\xfe\xf6[0\a\x10{vF!o\x1e]͠\xa6R\xf5\xf4\x00\xde=\x86ʿ\xb9\xd4I\x98!\xeb\xddT\xb5q\xbd!\x9c\xe5 \xd2|\xc1n\x18\xd9M\x17\xf6\x99\x86\xe4\xfa6=A\xeao\xb2\xb2ؚ\xd0\t_\xd65^5\x18\xf2\xc2N==\x1d\x99\t\xdc\xcf\xef\x80\xe6XUWh\x034\xa9L\t9\xc4Qk\xcd\xe50J\x8d\xeb\x8a;w \a\xech\xbb4\x95\xa7\xfd1\x9e\xa9t6\xe9*\xaf((\x1d\xfb\xf5s\xfcHLr\x8dW\xb8]\xf0\xbfO\x06\xe5\f\xd2М\xd8-\xd1W^N,\xaa\x11\x06\x138M<\x14\x03f7<{\x97\f\xce\"%}\x91)\x87\xabA0\xfd\x9d\xc8\xf8t\xb1\xd5q\x90{\x1fɥ\xb5\xda\xe3)ф\xd3\xfb\xf8x\x1a\x96\x02I\xd2\x12\x04\xbb\xaf\x0f\xc3\xc4\xc0\x9b\x03d\xb0\xbe\x85\x97l\x92\xaf\x01\xaf_\x026\x92\xd0,K+\xe0\xe4\x86\xef-\x8e\fK\x83Z\xc4&\x1e6c0\x89\x952ީ\x18Ơ\x8bh\x87\xb9\x86v\x90Kh=u\f\x15\x11U1\x19\xc0I\xea\xc2\x14\xca4\x04\xe37~\x803\xa5.\x82y\x83\xd3\v\xa1\xd5!\xfa\x1e\xaa0T̀|mg\xfa\xfb\xdf\xfd\uedff\x1b#\x1a\x92\xa1\x86\x80/\x15\xe4\xfa\xd5ͫ\x9f\xee\xde_bq\xb5T*\u007f\x92\x1bgXN!Y\xfet#\xe6\b\xcab\xaf\xd2X\x80l\xc8\x0e[[\xc3;\xa5\x9d\xc7W\xa7\x06\xbf\xda\xc3Hd7\x1f\x89\xcf\f\x11b#}\xebT\x03\xd4&\u05cc\x99y5\x19g\xb2\xb8\xb0\f\xc7\xfdτ\xcb\xc9EA\xb5\x01e\xad0/\xffG\x99\x85\xc2\xc4l\\\xe4\t\x99\xf9v\xfc]\xb8\x9a\xa8\x8eqX\x15\xb2)A\x9c\xbc\xceP\xdaz\x02VvH\xbc\xab\xd2\xf4&JF\xdd8%\xc1j\x80\x96\x91\xea_I\xf2\xad$+%\x89\xa9\x89\xbb\xd3\x12\x11r4Ƈ\xa7$\x0e\xe1\xf5\xa9~\xf7\xa7ICܒ\x82H\xfe\x96h\xb0lI?L\x15 \aJ=\x1c\xa4\xcf\x0fL9ܒn\xe8q\x94h\x16\xaf\xa7\x1a\xae\xa6\f\xa6\xa1<=\xcdp\x80\xc5\xf5T酛S\vSI\x92\fN+\x1c\x9eRx\xc0\xbe\xbbM\x8e\x9cS\xb2\x93\xa1\x92a\x11\x9d\x03\x04\x9a\x06\xa6\x0f>\x15Z\x0e\x91,\xf7\x11\xfb\xa0'\xef\xea\x904\xc1\x81)\x82C\xd2\x03SS\x03\xb7\xa4\x05\x0e\tL\x0eL\t\x1cD>\xa9\xe6ir\xe4zx\xd4zp\xc4zK\xea\xdf\x10\xeb\xba7R\x9d\xdaI7\x8c5#\xbdmp'\xaa\x85\xed\b\xf5A#\xcd\a\x8f2\xa7\xa7\xebmO\xd5k\xa5ܥ\xe2p=MoH\xba\xdd/\xdeNd\x82\x19F\xf9k\xe0ty\a\x99\x14y\xb4f\xb4Қ\xaf>\xafځs\xfe\xe2\xf8Xi\xa7\x9bʜ\xfa\x1eΐ\x87:\"!x\x1e\xcfZQ}\xc4\x148\xb7z\x93p\x19\xff\xc9\xc2\xdc\xe4\xa39\xb2]E\x83C\x10\xc1w\xf2\x91ȩ\x01AN\x99\bt\x10\x1f\xddk\x9c\x05M\x14\xa3>\xd6\xf6\xaf_\u007f\x95\xe0P\xc4\xc9|\xbe\xe1\x06\f\xb8h\xfdt\xd1&\xff\x81Ç\x9b<\xe0i\x15\x1f9\ue11c\\ت\xcbߣ7\xafi\b\xfb5\xce;p\x13\ft\xf8j?\t0?S\xa2JN\xb0\xee\x1an!\xa1\xba\x13͊\xdflW\xba\xa3\x1dͺ\xbf\xbcu\xc1\xac\xcf\xcdi\xb8\x92\xa8\x9bn\xd1mH\xd2\xf5\x1aO\xa2^\x9c\x9c\xa0{4m\"ǖDܣi\xf3\t\x996\x9f\x87\xd2ުF\xf5\xad\xa2\x19\xdc\x1eLs\v\xec\x8a䕢\x9e\r\a\x9d)I\x85\xb7LF\x00\xe4\x8eS\x85\xcaf\xae\x86ִ\xe2\te\x04\xabR\x8an\x1d>\x97<7\xb4,\x97\x9dmϪ\xbd\xee\x91rBK%\x9d&ET%\x84\x95d\xfe,Y\xa4X\xf3C\xa7\xd4&\xa4\x9dbd\x9a\xcd\xecvY\xad\x05딱\x04\xf9\xe2\xee\xd68\xc5\xcdO\xd8\xcen*U\xc6&|I攧D4\x1e\x99\x99\x13J\x1e\x18\xe7~\x9acr\aƅ\x95\xd3\xfc\x93\\\x8a\x19n\x06u\x13\x86\x0f%d\xd6&\xcc8PQ\x95i\xeb\xb7\xfa\xdfRV*\xac\u007f\\\a\xbf\x83\x1e\x17\rR0~\x1e\xb6\xba[\x86o\xfd\xc0& ֥\x88Wڪ\xc1oCW\xdf\xf3!\x98\r\r\xa4\xdd9p\xeb.\x95\\\xb0\xdc\x15\xfbK\xa2\u007f\x99\xa3&8&\xef\x11^\xe0\xfbB\x8a\x91\x80\x19\xb5\xe6F\xfcIuBܝy7OW\xccH\xe4,\xa3&\xc1l\xd1X\xe2\xb4)lJ\x16\x8c\"\x16Z\x94\x1b\r\xf4TH\"\xf1j`%\x98Yb\xb8q^\x19\x92\xcbGq\xe6r\xb2R\x98\x94\xcb\xe1ږ\x93\x15\r\x15Ӷ\xee{\t4$gE\xc3\xc4d\xae>k\xc8\xd1\xc3a\x8f\x03\xd3>\xa88%\x95\xd0\x10m$\xb4L\xae\xdf\xff\xdb\xf3\x99\\\xac\x00Y\x99O\xca\xe7\xf68gټm³\x024\x91Ր;\xcf\xd68\xf7\xd3꧈'n\f\xfc\x8bs\xd4%i\x8d\xb1Q\xeb\x9eP\xccJ}\xd6&#,j\xddxK\xfa\xf5\xcd\xddO߿\xfa\xd3\xd5\xf7crE\xb3y\xbb \xb4 \xd4ʍ(\x98(W\xe6t\x01\x84\x92J\xb0\u007fT.\xbf\x8f\x9c\xd6\xdf9\v\xb7\xa0\xa2\xe0\xa6ݘJ\xb2\x14\xad\xa0\x88b\x02\x9d\r\xfa\x9ei,\xa0\x8bP\xfc\xbd\x05\xa9\x81L\x95,\xe2\x98R\xc7z$W\x16\x8c\xf3\xc0\xa0\xa5\x89W\xc7gl\x11)d1aҵ\xbd\xa7y\xb8=\x82G؞\x1e\xab\xc5҉\xac\"M\xa09\x10\x01ƞ\xee:h$\x85\xeeT\x17\xaf4踋D\x93\n\xef̔\x8a\x15T1\xbelOҪ\xaf7u&\xe42VԶQ\xf8\xfa\xed\xd5\x1dV\x0f(\x15\xd6}v\x97C\xa2-H\xbb\xbdd\x02v\x83܆\xe7c\xf2J,݇\x1c/\x8f\xd428\xd3\x06\xd0R\U0006e110\xb3\xf9\xe2\xab1\xfe\xdf\v\xbb\x83*6\xeaR\xdf#\xca֮9:\xcf\x05\x9b\xf08\x19\x80Ko\xd1\xc0\xc0[\x8e\t\xd9S+\xb7\xe3B\x0e\xbcE\xbd\x82R\x81\xb5\xedb\xa5%\xadI\x1a\xb7\x10\x99\xa1=\u007f<٧\x93\xee\x00\xcd\xdaK\x8a\xf7\xba\xf5:\xbc\xa6\xb5\xc3\xca\xd1k\x82\xbfG\x8a\x96Yu}\x1b\xc8\xd1\xdfr\xb0\x92 \x01\xa8\xa5CW\v\xc3M\xd0\xe5\x1c\x9c\x93\xaf\xc8\x1f\xc8\a\xf2\x87\x04\x88\xbf\xff\xdd\xef~\xfb\xfbx\u007fְd\xfb!^ι\xd4\xe6\xfav\xe0>\xffղ1\v\xc9\ue311d\u0092.3:\xcbހ\xb2b\xc2SL<.\axl\xed\x12>I\xb2w\x89\r\xd7\xd3n:~\xd2\xed\xc1\xda\t\xbb\x81\xf0S|\xb1\xe4\x0f\x9e\xf0\xed\x14\xbf\x93\xda\xdcxv\xd6.\xbc\x92r\xb5ׄ\xc3M\nj\xb2y\x97\xdfZ\x13\"\xe9\xd87\x05\xf5I.\U000560fb\xf79g\t)\xb8\x1f\xef\xe8\xa6e\xa4v(u\x9d\xa2\x86\xb0\xd2\x15\xb7>\xfa)\xbc^\xee:T$\xf2\x84R\xe6\xde`\xb0K\xce[B2\xd6bpc\x83\xdd\xe0\xa3\x14i\x95Ú\xd2(\x96\x17fT\xb8Z\x0eSP\n\xaf\x14\xa7\xa0t\x19\xae\x1b%\x90\xe5\x00.X*id&y\nm\xa1ֈ\x11\xe1a\x84y\xeb\xe7\x80>Zw\x9d\xf1M2a\xfe\xe5\xf5\xed\xb9\x9d\xd29\x91\x8a\xdc]\xde\xdf\x0e\xbb\xb3Jȋ\xfb\xcb\xdb\x17ϸ'iѩQW\x97\x8b|7PA\x9cu6\xa4\xa6Kl\xeep'\x04h-\x98QA\xcb\xd1\x03,\xa3t\xdet,%\xe1h}\xd2n\xf1\x05\xdd\xffr\x95\x02\x9a\xb3O\xa8\x9cM\xb8\x14Yϫ\xbf\xaeM!\x17\x91N#\xb4\xf6\x02t\x10y)\x990\xba\xaf\xd8M\x14\xd8u\x93\xf1\x93\xc9\x02<\x16\xbb9\x16\xbb\xd91\x8e\xc5n\x8e\xc5n\x8e\xc5n\x8e\xc5n\x8e\xc5n\xfc̎\xc5n\xf6\x1d\xc7b7\x9bƱ\xd8Mg\x1c\x8b\xddD\xce\xe3X\xecf\xc78\x16\xbb9\x16\xbb\xd94\x8e\xc5n\xc2\xf8\xe8\xf7V\x8e\xc5n\x8e\xc5n\xdc8\x16\xbb\xd9k\x1c\x8bݬ\x8fc\xb1\x9b\xdeq,v\xd33\x8e\xc5n\xf6\x1d\xc7b7\xf5\xf8\xe5\xdc\b=\x16\xbb\xf9To\x84\x1e\x8b\xdd\xec3>\x0f;\xf1X\xec\xe6X\xec&\xe0\xe5X\xec&j\x1c\x8bݬ\x8cc\xb1\x9bϕ\xa8\x8e\xc5n\xd6DZ\xd8͖\xd9\x1cM\x9b\xb8q,v\xf3y\x986\x9f\x87\xd2~,vs,vs,vs,vs,vs,vs,vs,vs,v\xf3/\xe4\xa8K\xd2\x1a\x15hY\xa9,\xce\x0e\xee\x12٥,\xca\xca\x00y\x17@\xd5\xcar\xd4\xc2Q\x960ݮ\xa9\xf2\xbcݸ3)\xa6l\xe6\x15\xbd\x8b\x82\n:\x83Q\x8d\x9fQs\x03\xfa\xe29n'qV\xb0\xb827v45cn\ax8\x12\r\xea\xa1\xe6\xf4@c\xba\xa4ƀ\x12/\xc9\u007f\x9e\xfe\xfd\xd7?\x8f\xce\xfexz\xfa\xc3W\xa3\xff\xf8\xf1ק\u007f\x1f\xe3\u007f\xfc\x9f\xb3?\x9e\xfd\x1c\xfe\xf1볳\xd3\xd3\x1f\xfe\xfc\xe6\xdb\xfb۫\x1f\xd9\xd9\xcf?\x88\xaaxp\xff\xfa\xf9\xf4\a\xb8\xfaqO gg\u007f\xfc2z\xaa\a6N\xbb\xe7\xf1{\xa4\x9c&K\a\xf9vA?X\x06\x1bO\n\x85\xac\x84q\xf7\x1c\xdd1\xafO\x84\xcbl\x8a=\x94\xe4S9\x98d\x88\xa1\xedS\xbc\x8e\xe73b\x1cϧ;\x9f>\x8d{\xe5\x84Fϱ\xf0*Ӗ\x13\x1a\r3\bn4t\xeby2Md\xc1\x8c5\xa7S\n=\xb4JY\xe1\xddö\x8b\xda\xf1\xaax-o\xea\xae\xcd1ݾ\x89\xd7JE\x97\xc1\xf6MQK\xa9 \xac(9\x14 \f\xf2\x9cQ\xc8FG\xf5\xf4_\x8f\xdf%\xbd\xa6!\xab\x143\xcbK)\f|\x88r\xecw\xcf\xcb]\x17\x90\xbf\x1a\x10\u007fh\u0084\x88,\xdd\xfdҕ\x1a\x8dsYE\xe6\x14N\x80\xa8J\xa0?\xcbU\x1a\x02\xe3\x9c;h\x86\xe3\x15Ε\xc9G\x81\x0f\xae\x17\xe7\xd1\xfaG\xc5\x16\x94\x830-\xe8\xb7h\x1c\xb7?\xf0\x14\x1a\xb2\xa1\xfa\xa1\xa1J\x18YS\xa9\xc6\xdbE@+\xfe\x04\x1f̳hǨz\xdc*\xb6`\x1cfp\xa53\xca\xf1\xb4\f3\x97_m\x80\x1a}\xe0-*\x94\xe4\x9a<\xce\xc1r\"B\x83\v\x11\xcb\xdc\xcchB\x9esa\xf7\xaa\f\x93\xd3\xce\xd7i\x15\xbd\x92*K\x15\xc1G\x19\r\x18\xaf\x01N\xa4\xe4\xfej<_6\xf3gi!(!\u007f\x12\xf0\xf8\x93\x9d\xad&SNg\xb5kR\x83Iͼl\x8ej\xed\x8e=؆1\x8dr\x9dP\xfeH\x97\xbaq|\xa7\x15\xf7p\x10_\x92\xafϐ?PM\xea9\xe6\xe47g\x98\xb4t\xf9\xea\xf6\xa7\xbb\xbf\xdd\xfd\xf4\xea\xf5\x9b\xeb\x9bh\xe87Ҁ\x13\x81h3;\xb7_V\x9b\xcb)\x17\x18p\xcd腓z\x8c\xf1G\xa6\xc9#\x13\xb9|\xd4ѱ`'1,QAd\xa0?\xa3%\x9d0\xceR4\xe3\xb5l\xf160\x94\xecy~\x91+\x19\u007fM\t\x91\x13\x825\x8d\x00\x1e\xe6\xfej\x17\r\xc5s1\xedL8\u07b9\xaa\xa80\xb5W\xbeu^T%\f+\x12\x14\x97\xe7&\xb3g\xcc\xe2\xa0\xf9\xf0\xda'\xaf\xf2\x1c\xf2a{v\xb8\v:\x97a\x1a˦\xa8j\x12TBn\xdf\xde]\xff\xff+\x87gY\x0e\xb95\xf0\x11\xca6\x10bO\xfa\xe0=~\xe7j0\x1dwy\xeb\xf8\xfc\x8asԚ\u0530D\xc9w\x95\xe8\x96do\xe0&hx9\x8c\xc9m\x1dk\xef@kI\x9dx^\xa7\x80X\x90\xc20\xca\xf9\xb2mK\x18\x89\xe5\x8b\xe2\xc3\xc2bCB\xfd\x94r\rX\xfd;\xc1\xf6\xde&iPr\xc4\xc7p\x0f#i\xd2\xf5\x19\xab\xab\xbe\x91\x95\x18\x96AYC!9\bi\xbcS7\xe9\xb8\xca)B#\xcemԺb\xd1\xd1\x19\x92\xec\x88F\x9da:\x10\xc5m=s\f\"\xc6g\xf5hX\xb5Խ:S;\x92\x92\xf2:\x14\xd0\\\n\xbeĻe.\xbb\xb7\xa0\xfa\x01r\xf7C\xa2\x19UG\xdd\xed\x8c\xeb\xa5\xdf/KH\x0e\x99\xa3\xf9\xe4r\xa61\x94\x0f\xf9xE/\x8b\a\xb9\xe1tuNK\x8a\r5\xe8t%\x15\xf9\xa4\xf9[\xc1\x97\xef\xa44\xdf\xd45\xd3\x06\x9d\xb4\xbfz\x8b\xbd\x1b\x8b\x8cF\xc6\x1c\x9bw\xd8\xf9\x8d\x90ʰF\\\xbb\xac\x9b?\x1e)Xn\xb1\xd8\r,3\x1a\xea&\"\xf8(,SU\xe2\x95\xfeV\xc9*Z{[3\x00\xbf\xbd~\x8d\"\xae\xf2ia¨%V\xc4La\x9b].T;!\xfe\xe2\x13\xf9\x92R\xccj\x86\x19rT\xc8\x1b\xba$\x94k\x99j`1\xd1\xe7\x16$\xde?\x99r\xc3~\"\xcd|Ց\x89\fs\xfd;\xf1\xe5\x19\x9b\xac\xb2\xda}o\x970\xc4o\x8a`\xe9\x03hR*\xc8 \a\x91m8.\xf1>\xa8\xed<3%#0\xf1x}\x9c\xe4$<\x9a7RX\x86;\xe8p^\x87\xac\xbc\xb0%C|m\x98?\xe8=m\x14\xb3\b\x91\xddV\x1a\x94K\xd9T\x15\xa4Q柫\tp\xbbӌsW\xfc\x9f\x1a\xe7\x8fg\x05\x9d\xc5\x1fwjj\xed\xc5H\x02BW\xca\x13%3$\x97\t\xa6\xa5/\xe3i\x97\xfe\x97\xeb\xd7\xe4+rj\xd7~\x86\xe7sJ\x19O)\xba\x87לV\xd8\x1d\x9b\x86)Z\x94ƫq\x02=\\\xca\t\xafs\"$\xd1U6\x0f8M\xf1\xd9\x06\x97\xb2\xbf\n\x88w5\x8f\xbc\xf3)x\xe7\xf3J\xfe\xbfhP\x83\x05\xff_\x9eA\xf0\x0f\xf1\xfdZ\xde\xd4\xdd5d(\xa4\x00Cs\x9aP\x8d\xd1)\x10\x01\xe0\xdaQH\xa1\xdd\xedG\x01I;\x1a\xe6\xe7~\x14\x8ejD3\x06\xdcU\x86\uf668>\xb8KE\xc3\xc3\x10[B\x8b\xc0OA\xddx\xe1VR;\xb5\xd3b\xddv<0\x91\xfb\v\xbb\x1d\xe4{og\xda\xd9s\x96-^\xb7gy\x9b\xfb\xbf$\u007fO;{\xf5\x86\x91\xd1\xfa\xd1N\x82\xd8f\a=G;\t\xa6c\a\xef\x9c\xc1\x1d\xeaÍ\x06F\x1b\x88sT\xb6S\x10j\x04$\\\"\b\xa3\xe6^\u007f\x11x\x06-\x8b\x1c\x11!\aq\xb2\x863\x06\x1a\xf8l\x9a\"$\xe8\xeb\xc9:\x9f\x97ׇ\xf2G\xfdՁ\v·̲;\xc3\xc4,!s\xab\xf1IQ\xce;\x99LJpJ\x05N\x80M#1ee\xcd\xf9\x92\x1c\x96q\xc4\xdcu\x17\x0f\xf6\xc0lp\x105\x0e\x9f\xa4\x04\xb1M\x0e\"\xe7\xf0\x89\x06\xb9\xcbA\xf4\x14I\x1a\xdc\xdaoϩo\xce\nM/\x95]\xa6a\x94ߕ\xf1\xbd4\xc9Z\xbf\xab7w\xaf\xba \xd3\x04\t\xde\xdfP\xce\\\xb00\t\xcd\v\xa65\x93\x82<\xc2d.\xe5C\x12\xdcӞ\x96;\xadk\xa2\x9a\xcd\xf4\x85g$#\x8b\x9d\xb4\xae\x85L\xf0p\xbb\u0379t\x85\xd1!\x06e\x17\x93\xa6\xd4\xd5XE\xc2\xf1=\xc1\xfd=\x81u\xb4ߤ\x16#D\xf2~v\rn\x9d\x14o\x12{1\xec \xc7d\xbc\xb4\x9aK\xb5\xf7\xb2\xb5/i\xd2\xdd\xee\xa5\v&>\u007f\a\x16g\x19f\xa0\x87w`\xf9\xae\x81ErpE\x80\x12\xcdL6m\xdf7n\xe9?.G\"\xd1t=\xc1\x1a\x9d~\x8a'm'LR\xbd&R\xe7`2M(/\xe7t\x84\x0e\x13\x14oV~&A\f\xb6\xd5\\\n\xa9\xdc\xf1\xb6\x16\x84\x14\x96\x85$\x1a\xd8\xd4\xf8\xa4S\xa4Y\xaf״\xb6\xeb2=)\x9d\xb4z\xfcM9\x9da\r8\xab%\r\t\xa5\x10_^\x0e\xfb\xb1Ρ\xf3\x81t\xcc*И\xa3'\b(%\x95\xbf\x1f\x18RWRK\xd2;u\v/1Z\xa6@\xed\xbfN\xf4\x90<\u007f\x12|\x17s\xbap;\xa6-ǁ\xe9\x142\xf4\x10\xb4v.\t\xb8\x8b\xa9\x9d6\r\x84}\t\x10˄\xec7\x13\x8fW\xc1>X\f\xb4\xd9\xc0@,\x84F\xb7\xfd \xcfƄ\\\xa7ٽ\xa1\x80ǹ\xe54m\xe8\xfe\x06i*)\b\x04v\x03\xe6Q\xaa\a\xb7\x89>\xfe\x9a&\x19\x00S\xfb\xed\x8c\xd2%CJ\x06\x0fig\xf1\x1cD\fc6\x8f\af\x8f\xa0gB\xa9.\xb8\xf5\x8c\xa0\xb5\f\x9f4_\xdcjVPp\xc7%\xc7T\xb6d\a\x11\x16\x1fw'.\v\xef\xa0\x19BdC\x96Pz\xbe\x1cy\xea\x9c9\xf2t\xe9\x01\xe4\x00\xb9s\xe4\xa3D\xbd\xd2\n|\xb8b\xf8X&r@u\x8f\x16\x94\x96\x035:\xa8\xe3ũk\bR7\x14\xe0\xcb\xd0Ȅ\xfd3\xb6R\x95%⦢\x8c\x90\xae\xa8L\xbbK\b|\x80\xac\x8a\xad\x80[\t\xc3x\b\xe6\x15%\xb7\xc6cg\xc6\xd1\xf9\xb5\b\xab)|\xac\xcfkd\x04_\x8c\x02\xdf#%\xee\xbc\xfc7\x8a\xa1P\x05\xa2n\x85p[\u007f\xca\x05[\"5\xe0\x8c\x8a\xbaߟ\x91!\xfeHr6\x9dB\xa8d\x11)\xf6J\xaaha\r\aM|2\xf9\x04f\xcc\xdd֯U\xabȀH]\f\xf2ܩ{̐\x82\xcd\xe6\xce)D(\x96\x1c\x8e/+l$\xe1\x92\xe6\x04\xb9\xb8T䑪\xc2Z,4\x9bc\x9d^*H^E\x1f|l¹\x1ciC\r\x10Y\x82+\x1d\xe4;|\xd7\xf1\xcd82\xf5\x15\x17?\x99\xfe7\xa9\xce*{H\ayt\xaf>@\xb6\xd2\xea6\xb1\x0f\xbb\xd5\b\xe8óv3\xcfdQP1\xbc\xd4\xc1\xa5\x83\x13<\x19\x1elZ\xae\b\x13\xee\xf6\x83㞄a#\x98\xae\n\x96.\xd7-\xfd\xd9c\xefj\xd9H\xb5\fw[\x13\xa3\xa1n\xd9v\xddx\xa7\xe4\xf4\xe4\xe2\xe4lHS\xefz\x89'\xbas\x1f\xf0~ V\x99&\x9a\x15%_\"^Or,\xb5\xe6\xad4U\xa5)b~g(\xd1s\xe0\xfc\x9chkQ\xd0P\xc101 \x05\x9cc\xdb`Ue.\xf8pz\xf2\xf3\xc99\x01\x93\xa59L\x1f\xa581>\xb2~\xefn3\xd7\x13^&vM\x16\xe0dS\xab\xb8\\F\xad\x99^%%\x17\x93\xe0K\xc1i\x8d\xc9\xd5\af\xac\xfad*t\xed~\x95\x92\xe1\x890\x15\xb6\x14\xb6\"\xda\xcaf\xdf\xe6}Y[\xbf\xff\x04\x956Y\xa6I%<\xb4gn:\xfc\xf9U\x92\xf0\xcd&\x9e\xae\xf1\x96\xff\xc0\xc1\xfbn9\r.>\x06\xd7\uee45\x8a+\xe4+m\xb7\xa2a\xfe\xf6\xf3\xed\xbb6S\xe50\xfd\xe2\xdbw\xb7\x97\x9d\xc6X\xa9\xeaE\xbb1\x16\x02\xc5\xceXN\t\xac[\x04\xc4\x13\xd1\xe6\x96\x02\xf8\x95\xda\x05|\x1b\xad\xb6\x93\x96\v\x18;\x03<\xa3b\x94\xdal\xaa\xdbRX*s\x80F\xb43\xa4\x00P\v\x86!\xe3\xd56Kɺ\x90o\xcdԴYJ\x804\xe4P\x91A\a\x8b\xa0\x1f\x13\x912=\xb4\xa4\xa5\x84\x861\x18/\xa9\xaa\x82\x1b\xa3\xf4]\x1d\rXy\xb2\xca\xd1~=\xad`kI\xcd|\xb8MF\xcd|\xad\xf5m\x12&\x90\xd9XM\xff#\\\xf0<\xf6B\xc6\\Iu\x00\xeb\xfa\xd8\v\xf9\xc0\xedl\b\xd1\xd9\x1c\x0e\x90\xdas\x87`\xda5H\xbd^\x9d\x9cS'7T\xa5\xb5G\xf9\x99\xcf\xf0\xe7a'\xfa\xec\x88\xd7\xc0\xe9\xf2\x93j9ٽ:\x8cY\x1d.\x85\x81L`*U\x93\x8d\x10\xcfZ\x9b\x04\x0e\xb7\xfaO*\xccM>\x9a#\xbb\x0f\xa5}k\x9b\xfcA,<\xb0+\x92\xfb\xf6\x93\xa4Q\xe0\x92Tx\xcbd\x04@\xee8\x95\x9f7\x90\x99\x9d6f;GC\xadJ)Z\xd9Ε\x02\x97<\x87 \xbd\x12\x1b\x9f:\xe1b[=\xab\xf6\xbaG\xca\t-\xebN.\xa1s\x98?K\x16)\xd6\xfcHj\xdeC\xdb\xdbO4\x9b\xd9\xed\xb2Z\vv\x04I\xa9A_w\xbbk&lg7\x95*c\x13\xbe$s\xcaS\"\x1a\x8f\xcc\xcc\t%\x0f\x8cs?M\xbc\xe2\xe7\xc2\xcai\xfeI.\xc5\f7\x83\xfaK<\x1fJȬM\x98q\xa0\xa2*\xd3\xd6o\xf5\xbf\xa5\xacZ\x95}C\xf0;\xe8q\xd1 \x05\xf3կJ\xbcӷ\xf5\xc0& \xb6]a\xe1mhu{>\x04\xb3\xa1Ɩn]\x8e\xa9+\x83\xb9\x8b\xe2\t\x82>wu\n\xc8{\x84\x17\xf8\xbe\x90b$`\x86E\x8b\xe2O\xaa\x13\xe2\xee̻y\xfe\x13\x94\x1cP\x9dJ\x1bY\x12V\x14\x903j\x80/ɂQWH\xa9\xa1\xdch\xa0\xa7B\x12YZ\xa1P\tf\x96\x18n\x9cW\x86\xe4\xf2Q\x9c%^\x1b\xaes\xb8\xb6\xe5dECŴ\xad\xfb^\x02M\xeeY\x83\xc9\\}\u0590\xa3\x87\xc3\x1e\a\xa6}P1\xb4\xd0H7\xb9\x9e\xb1\x04\xb2\xe5T\xb22\x9f\x94\xcf\r\xabV\xb5MxV\x80&\xb22\xc3j\x9d\u007f\xed\xa7\xd5O\x11od\x02\x81\xfd\v;\xea\x12\xef\xea\xe5,\xaa9\xf2\x1e=\x91R\x8a]\x85rז\x91U\xd3)(\x14\xbe8\xbb\xa0\x1c\xa5]\xc3\r-N\xd7\xf2\xd6\xc0\x9cc\x1b&W\xe4(\xce\xd5\xd6;\xadP\xb7\x1b\x1b\x05\xbb\xca\x00\x91\x1ewr\xf5\xf6\x9bƏY7t\x8a\xa6\x81\xd8\xfbٸ\x9e\xb7\".\x9dr\x03!\xf4\x144\x8fí+̑q\xa9}\xa5\x02Dv6\xa7B\x00\xf7J7\x8b\xccy\xa3\x9aL\x00\x04\x91%\xb8\xa4BB\x89fbƁPch6\x1f\xdb\x15\xc4y\xa4<\x11\xf8\xfe\xd0\xcdL\xb5Q@\vG\f\n\x8a؎\xdev\x8a\x84fJjM\x8a\x8a\x1bV֓$\x1a\xb0XQd\x1e\xd0\xf5\xb4\xd9`\xbc\rԔ\x008\xafW\x11=GW\xf7\xb2u\xe6\rU\xe6\xdc\u0087\xa24Kw\x9b5N\xf0a\u007f|\xa5\r\xc98\x03a\xfc\xaa]\xc5`\x9c\xe79\x89\xbd\x04\x85\x05\x14\xdc.h\x8fZ\x91\xa3W\xa44\xdaݵL\x9b\xa8\x9fbδ\xf7\xbe\xe9sBM\x10\x94\xd1D\x1fh\t\xc9>(pn\xd6\xfe\xa7\xc4i6mztsٷa\x86SN\xe3\x14\xc3\xc0\x94\xce;\xd5t\x1a\xfb\x10o3![\x8d\x02\x8bu\xe6\x1c\x16\xf0\xe0\bXX\xfe\x01\x19\xb0\x05\xfa\x83,g\x8c\x82\xb8\xcaE\x9f\x9c\x89\xb6t\xd77\xa05\x9d\xc1md\xd6\xca&\a1&\xae4\xc4\x15ipa\xf9I#[:\\sӰk\x81F\x81-\xdc\x1ak\x9b\xf3Q1c\x00\x89\x18\x1b\x88b2_䅟\xb5ɵ\xefA\xbe\t\x1ft\x1f\x8a\xa5Z\xabO\x89\xdc\xddޛ\x00\x99(\x06S2e\x82r\u007f\xe1.\xeef)\xf6\xa8\xa2\xeeR\x8e֠\xd0\xe7\xe2\xddN\x017q\x04\xfbW\x8fH\xa3*\x91\xd1V\xbbv,wʦd\x86\x97\xfa\"\x8d\x899\x15\xe4߾\xfa\x8fߓ\xc9\xd2j\xc1h\x1c\x1bi(\xaf7\x90\x83\x98E\xf6\xeb\xf1\xe2\xa9[x\xb2\xa6\x04\xce\n\x16\xeb\x16\xb2\xc6\xc0o\x1e&\xdd\xd8\xddE\x0e\x8b\x8b\x16}\x8e\xb8\x9c\xc5\xe1\xf4\xb2\xae\xe0\x1dn\xad\xc7(\xf2I\xae\xfd\x1e6 9˖Ɍ 4\xc4#s\xf9\xe8\\y\x03OlS\xfa\xac\x94e\xc5]\x96\xc37\xa1\x94p\x14\xc8J\xc3z=\xc2^>\x18K\raj+R\xccߍ\xf5K\x89SZ|\xa5Q\x1fm\xae\xfb\u085f\xf8\x1b\xca\xf9\x84f\x0f\xf7\xf2{9\xd3oŕR2\xee\xa4!\xf5\a|pj\xb5\x98y%\x1e,FZ\xd5\xefe\x9c\xb4\x95\x95)+\x13\xcal\xb4ݻa3\xa3\v\x00\xd7\nZ\xf0\f7\xb3\x83\x0f\xf6ܢ{6\x8e\x1d\xf8\xf2g\x8e\xbbp9\xab\xe7\xad\x033\x88\xbd\xfa\xf9\x9b\xaf\xfe\xed\xdf\x1d\xcb\"R\x91\u007f\xff\nk\x03\xe8s'\xc4P7\xb0\x8alA9\x8f\rf\xb5\x19\x8c%\xfaq\x0f\x93xr\x1ea\xd2\xd9\xc1\x93\x98\xdc\xf7\xf7\u007fC{\x9b\x19\r|z\xee\xaa?\x05\x0fb\x14\xd0\x13T\xe2N\xbc\x94\xc52c\x1f\xc1\xa0]H^\x15\xf0\x1a\x16,\x8b\x8b\xf0wP݁\x12\"A\x9ciCd\\\x1d\x9e\t\x97\xd9\x03\xc9=\xa0\xd6u\a/\xe1\x93\xe2\xb2\t\x17;6\xae\xae\xb9\xd2Ab\xef\x01\x17\xb4,\xebj:\x8a>v\x16\x8b\xbc$\xfaN\aM\rT\xa7gu\xb8\xe9\xc6*\xec\xe1\xdd\x16V\x1b@\x81`\xcaX\xe9\xe7\x86/\xb1\xb1\xd6d2t\xc5M\xca5\xf0{\xe2\xf44\xbbsș\xe3\xc3\xeb\x03\x92\x1eҮ\xc9tp,\xea\\\x81\x82\x1ao\xd3$\xe6\xcf Ֆ\xa04\xd3V\x81y\x8fg\xe2\x92SV\xa4_\xdcMi\x913\xa0\xd1}J^¨E\xa7\x91/F#zP幸\xeb\"\x8e\xa5\xbd\xb1\xe6g:\u05ff\x95\xb9\a\x84\xac\x1a\x8dY4e\xa3\xc9aSE\x9fA\n\xc7P\xb6\xff\xbe\xc1Q\x9b\xeb\xbbu\xc6\x1fg<@\x0e\xa6g\xf6\x1f\x83}\xe3\xe4\x0f\xc0\xbd\x91o\xfbe\f\xad\xfc\xd9v\xd8x\x82j\x99^\xdeG2v\xe9\xa6\t\xe0-\x05\xf9鑓\x97'\xcf\xca\xc3\x1d\xba\x95,\xe9\f\xad\x91\x81X_\x057\xacԷ5\x93\x11b\xdd\xc5\f\xe1B^7\xb3H\x02\xea\xee\xa87r8\x98OX\xfb1\x01\xe2#]\x12\xaad%r\x17{h\x82RoV\xd0q#Eʔ}\xf4ۗy\xa9\xab\x8ac\x9a\x00\x13\xe4\xeb\xf1\xd7_}n\x82\x1fW\xb2\"\xf8\x13K\xef\xb7\xf8ֳbA\x01\xcd\xdf\n\x1ee\xff\xb9\xd1\xcd\xcf\xf7.V\vn\x84\xf5ݓ\n\xff\xba\x18\x10\x02yT\xccxj~d\x1a\xc8i\xac\xd7<\f\xa9\xdaՄϺ.\xbdh\xfb\xcf\xcfs@\xd9i]M\x9e@28\x86\x9e\x80\x1edB}\xbex\x9d\x0e\xb3G\xac\xb4\x91\xfe\"\xa5\x10ʩ\x9b͉+o\x98P.f\xc0!\xf1[v\xf5\xa1L\xe8e\xbaR\xa2\xb3\xa4\xe8\xf5/\x9b\xfdK9'\x8d\b\u07fc\u007f\tp7\xab\x05\u007f\x829]$\xc9?\xcd\nƩ\xe2\x98Zv\xe70I&\x95! \x16LIQ\xa4\xe4\x96\x12\xb2\xa0\x8aa\xbf\a\x05X\x8d7\x03M\xbe<}\xff\xea\x1dfh\xa7Tht\x85\x92\xfd\xfeT\xda5x\x18\x8a\xd1\xd6\"W\x0fAC\xd2\tp\xdd!\b\xf8\xb4\x94\x89\x1a@\xc0/MHU\"\xa4\xa8LE9V\xe6\xccx\xa5\xd9\xe29eQ\xaa\xe5X\xebڿ \xc3\xd1׆}͢\xf8\xcdJ\x1d܆\x91\xaf\x95\x9a\x8dN\xd8X\xaf\xac\xb5\x9eV\x13Iǡ\xcaV;I\xd8;\xd4}\xfdjw+\xcf7\xf9\x8cM]Z\xc96(\xe8\xec#\xb8\xd6ci:\x8a*\xa3\xe91\x8e\x12}\xde\xe7~S\xef\xaa\xc5\xeeM_3\xcdy\x1d\v\xfa\x01\x13*)\x1e\xd7=W(\xa78\v\xf2\x1e8(\x19\xc4\xd2#e\xa6\xbe\xc2\xc9\x043ѽ}\xd0pr\x15\xed\xf7#\x80\xa8\xad\xdf{_\xf6|p\xf7\xb6\xed\"\xb3\xadd\xb5s\x16۾\xbf\xe5e&2^\xe5p\xc9+m@\xbd\x03-+\xd5\x1b\xfdX\x89.\xf7\xbeպ\xa8\xf9\xe8\x03N\x99{d\xa43Y\xf6\xb2\aռ\\\xeb3~Ry\xa8\xe1\x80W~\xeb\x9b4\xaeX\x966R\xc1\x86\xde\x06\xa2\xe2|\xe5Rco\xe7\x1a\xfb\x9c\xd5N6\xdc\xed\xdaf?\x84)ZCR\x97to\x94\xb5^p\t\xf8\x9a\xb3\f\x1d\xf6\"\xfc\xc1\xfd\x97\x9d\xb5\xffH\xcf\n\xdd^\xba$T\xcc\xcb\xc2\xe8\xec9&W\x88\xe6\v\xae(\x81\xfb\xf0\xfa\xf27:\x05\xb7\x1e\xa4\xbd\x90\xd6G\x87a\"\x91D\xd6<\xbf\x82\xb0@9\xfb\xe0k\x9dl\xda\x18kh\xd0?7\xa1\xd9CU~Z\xe8\xe3t\x02\xfc\x0e8\xea\x06;P\xf7}\xfbY\x87\xb6\x02\f]|=\xee\xfe\xc5\xda\u058c\x1b\xccB\xeeU\xcd\x1e]&\xa4Ś\xbbp\x96\xb3\x05\xcb+\xca;\x14\xd8\xc2Y\x83Z\xbc\x90\xcax_\x82\x14\xd6>\xf7\xefwp\\_\x18\x8c>\xab۽\xc0\xe8\xf8\xb1\xea\xb7O\x85\xedg\xc1]\xf7\xe2\xca+\x0e\x8b>\x8e\xeb6\x83\xe8\x80G\xcfڭ\xfd\xb01\xcd\xf6\xde\xd7\xf8\v\xcf\xe1\xca_ݼޤ\xdelu\xd9w\xa6\xfaj\xcbt\xfc\x99\xa97|[\x1f\x1c\xaf\x88\xf9;_\xfa\x9cP\xf2\x00\xcbs\x97\xfc*|#\x10\x0fĵ\x89\xf7j\xc3\x03lVU\xec\xcb\x0e\xde&\xc4\xec\xe3\xc0\u007f\x80\xad\xbe\xaf\x0e:\x1e`Y\x87\xdd\x11/\xf6\x87\x10\x00mP\xe1z!oWF\xb6G9\xf7\xd27\x02\xd6\xf6\x9e~\x8df\x05\x96\xf8\x1c\xa9\xd85\x9chߛ_\n=g\xe5\xae\xe4\x18\x8a)\xdbr\x1a\xb0_wkw\xe0\x1d\xfd]\x8bsr#\x8d\xfd\u007fW\x1f\x98\xdeq!\xc7\xee\xe5k\t\xfaF\x1a|z0r\xdc\xd4\xf6F\x8d{\x1cIZ8\x1e\x89\x97\x94\xf0\x1b\xf52\xafw\xdf\u007f\xafQ\xcc4\xb9\x16\x96Qy\x1cԗ\x15\xb5\a߾c\x88\\m\xbb&\xea\xbe݁\xef\xd0j\xbf\xd1\xc6\\\xfbS\xdbQޙ\x86\x9b\x82\xf3h\xbb\xbf`\x826\u058c\xce}\xa7\x1f\xbb\xf1FQ\x033\xb6\xbd\xe1q\x01j\x86\x89\x06\xd9|۪\xf6\b\x1d\xee\xa9x\x1fBE\xde\xccjF5ڟB\x85\xf62\x04\xc5\xe7\x06l\x84^\x8e\x94\xdf\xee\xe4h;1\xb6.\x8bܧ\xbd0\xa7\xa5\xa5\xfc\xff\xb1\xec\x19\x89\xe8\u007fII\x99\xd2c\xf2\xca\xdfP\xd9\xf0\xdd\xf6\x1b^\xd7i\x03\xb7p\x99&v\x17\x16\x94\x83\xab\xfdK\x05\x01\x0e[\x1c\x80r\xba&-\xcf\xc9\xe3\\j\x94\fM\x10\xe9\xc5\x03,_\x9cwN\xc8\x06\x88\xf6\xe1k\xf1⼎\x97u\x0ee-\xa70\x84\xf1\x02\xff\xf6b\xbc&`7\xc0\xde!v\xb7Rɖ?\xd6Z\xf7\x1b\x97ڴ\xbe\xf3\xfb\xd2\xc7V\xdaX+j\xd8\xfef\x878\xda\xcaqǬ\xe8\xfb$U30}&\x88ט1\x95aL^\x89\xe5\x1a\\\xbc\x18\u05ebr{#\xae\xa6\xb3\xb2\xd3@\x0e\x9b\nc\x86D\vT\xa8\x87\xdfo\b\xdb\a\xd7wm˦H\xd5\xd1wwY\x1coW\x1ew\xa9\xa8N\xe3ۮ?\xf7\xa9\xce\xcc\xcc\x13\xf5\xe7p\x83\xab\aj}\x89\xde\xccaY\xe3\xf3\xbf\xa5/{\x8f\x90\u07be\xab\xcf\xd7x\xc5\x14\xe8mY\xfd\b\x9c\x13\xaaח\xef[\xbder\x04Vhٝ\f\xf4\xe0\xabU\x9f\xe3\x19\xec3PE\xc8B+\xda\x1d\xfa\xf67\xa2\xb6k\xb8N\x19\xc7\xdf\xfeQ\x81Zb\xc1\x81F\xe5\xa9\r\xba\xfe3\xee8\x056a\x0e\xbc\xcb3@\xcbo\xd64\xff\x86c\x90W\xc2\xc9\xe0^\xb0+sD8\xa0\xdb֎\xe5\xcf\u0590\xd9\xf0h/T!\xeb\xb7\xfb\xe9a\xab\xa8\xd9\xcf\xf2yj\xdb'\xde\xfa٩w<\x89\x05\x94n\x03m\x01ie\xe0n+h\xdfD\xa6\x1d\x96\xd0\xd3\xd9B\xbb\xac\xa1\xbd\xd5\xc0},\xa2D\x9bh\xe7\x02\x9e\xc2*\x8a\xb3\x8b\xf6F\xd3n\xdb艬\xa3'\xb4\x8f\x9e\xc2BJ\xb3\x91v\x80\xac-\xa8}\xad\xa4=S,\xf7\x0eQ\xec\x13\x05\xda\x1d\xb7\xdaf/\xeda1\xed\x15\xfc\xd85ӝvS\x9c\xe5\xb4\x17\x0e\x9f\xc8zz\"\xfb\xe9),\xa8\xa7\xb5\xa1vZQ;)g럓}\xe4(\x1c\xd4\x02nd\x0e\xb7R\xf5\xe5sw\xf3\xb3V\x9f\xef\x89`\xb5\x8c \xc9s\xbcW\x8b\x8f\xf6,\nuy\xafǧ-\xaa?\xd8\xe4\xbf\u007f\xfb~\xd7z\xde\xd5\x0fn_\bŦ\xa9\xce>\xebY\x87}\xdfݭ\x17\xb4\xd4si\xc8i(b\x95qY\xe5\xde\bQ=\xf9]\xc3Wy\x87\x975\xf7[\xa8{\xb6\xb3V\x96\xcd[\xf1\x9c\xc7:M\xcaC\xef#E,\u0081\x80𠡐Ċk\x8d\xea\xfd93H\xe3D\x9d\xc3\x13\xd9\x06?BW\x81j?_w?\xae\xeb\x85\"8\x87\xba9]\x04ΰ\xb1*7V\u05ebcAڞ\xb2~{vWqK\xacMt\xbdY\u007f\xea&\xbe\xd6\x0f\x87\x05\xb8\xd2Fkː\xedP\xd5\xe6\xb4\x1e\xa6ëvϲ9V\xb67s%\xab\xd9<\x90\xe0&\x06\xba\xc9\u007fQ\xf9^\xd0\xd5̒\xb5w6\x9bJ\x89\x96\xafĻ\x9f\xf3f\xbaۀnG\xe16\xf5\xaf#\xf1v)\x80\x9d\x87\x87I\xf6\xba\xecܧ+\x91\x175K\xbd\xdaG6\xbf_y|%\xa1\xd1J\xe9\x06\xa2\x97\xa7=\xc89eSgZdv\xd6\xeb\x97h\x9e91\xf1\x91*\xc1\xc4l\xd7\xe2\xff\xea\x1f\xebQM<\x84\x1e\xe5\xa4g\x11\xb5\xba\x12\xa5\x9c\x84In\xb8sS+,\x03ԓ\xde3\xb4\xf6#\x12r\xdeB\xb2\xff\x92\xff\xa5Q\xeb]\xb9I\x9f0\xecp\xfb\xc0D\xfe2\\\xcc+y\xa5(\xf7\xff̤plA\xbf$?\xfc\xf8EX\xd0{P\xba\xfe\xf1\xff\x06\x00\x00\xff\xff\x01\b\xb6\xda\xef\x13\x02\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xec\x1d\xcbn\x1c\xb9\xf1\xae\xaf((\a'\x80f\xb4F\x0e\tt\xf3\xcaZDX\xc76,\xad.A\x0e\x9c\xee\x9ai\xae\xba\xc9^\x92=\xf2d\xb1\xff\x1e\x14\x1f\xfd\x9a~\xb0\xc7\x12\xb2Y\x88\x17k\xd8d\xb1XU\xac\aY\xa4\xcfV\xab\xd5\x19+\xf9\x03*ͥ\xb8\x02Vr\xfcjP\xd0/\xbd~\xfc\xbb^sy\xb9\u007f{\xf6\xc8Ez\x05ו6\xb2\xf8\x82ZV*\xc1\xf7\xb8\xe5\x82\x1b.\xc5Y\x81\x86\xa5̰\xab3\x00&\x844\x8c\xaa5\xfd\x04H\xa40J\xe69\xaa\xd5\x0e\xc5\xfa\xb1\xda\xe0\xa6\xe2y\x8a\xca\x02\x0fC\xef\xbf[\xffm\xfd\xdd\x19@\xa2\xd0v\xbf\xe7\x05jÊ\xf2\nD\x95\xe7g\x00\x82\x15x\x05:\xc90\xadr\xd4\xeb=\xe6\xa8\xe4\x9a\xcb3]bB\xa3픬\xca+h>\xb8N\x1e\x137\x8b;\xdf\xdfV\xe5\\\x9b\x1f;\xd5\x1f\xb86\xf6S\x99W\x8a\xe5\xad\xf1l\xad\xe6bW\xe5L5\xf5g\x00:\x91%^\xc1G\x1a\xaad\t\xa6g\x00~bv\xe8\x15\xb04\xb5\xa4b\xf9gŅAu-\xf3\xaa\b$ZA\x8a:Q\xbc4\x96\x14w\x86\x99J\x83܂ɰ=\x0e\x95\x9f\xb5\x14\x9f\x99ɮ`\xadm\xbbu\x991\x1d\xbe:\x129\x00\xbe\xca\x1c\b7m\x14\x17\xbb\xa1\xd1\xde\xc1\xb5\x92\x02\xf0k\xa9P\x13ʐZΊ\x1dCș6`x\x81\xc0\xfc\x80\xf0Ĵ\xc5a+\x15\x98\x8c\xeby\x9a\x10\x90\x0e\xb6\x0e\x9d\x0f\xfdj\x87P\xca\fztZ\xa0\x82T\xaf\x8f$\xb2\x03\xf3\xdd\x0e\x87\x81\xb9\xcf\xfb\xb7Nn\x92\f\vv\xe5[\xca\x12ŻϷ\x0f\u007f\xbd\xebTCO\x0e\xfc,\x81k`\xf0`\x85\x1a\x94_~`2f@!q\r\x85\xa1\x16\xa5\xc2U\xa0LZ\x83\x04\x90\nJT\\\xa6<\t\x14\xb5\x9du&\xab<\x85\r\x12q\xd7u\x87R\xc9\x12\x95\xe1aٸ\xd2R\x13\xad\xda\x1e\xc6ohR\xae\x95\x93\"\xd4Vp\xfcb\xc0\xd4\xd3\xc1\xc96\xd7\r\xfe\x96\xc0\x1d\xc0@\x8d\x98\x00\xb9\xf9\x19\x13\xb3\x86;T\x04&`\x9dH\xb1GE\x14H\xe4N\xf0\xff\u05305I\xac\xb1\x82dЯ\xe5\xa6\xd8\xc5'X\x0e{\x96Wx\x01L\xa4P\xb0\x03(\xa4Q\xa0\x12-x\xb6\x89^\xc3?\xa5B\xe0b+\xaf 3\xa6\xd4W\x97\x97;n\x82zLdQT\x82\x9bå\xd5t|S\x19\xa9\xf4e\x8a{\xcc/5߭\x98J2n01\x95\xc2KV\xf2\x95E]X\x15\xb9.\xd2?\x05\x8e\xea7\x1d\\\x8f֊+V\x89Mp\x80\xb4\x99\x13\x18\xd7\xd5͢!4U\x11u\xbe\xdc\xdcݷ\x85\x89\xeb>\xf5-\xdd[\x12ְ\x80\b\xc6\xc5\x16\xfdj\xdc*YX\x98(\xd2Rra\xec\x8f$\xe7(\xfa\xe4\xd7զ\xe0\x86\xf8\xfeK\x85\xda\x10\xaf\xd6pmm\x06\xc9aU\xd2\xeaI\xd7p+\xe0\x9a\x15\x98_3\x8d/\xce\x00\xa2\xb4^\x11a\xe3X\xd06w\xfdƎj\xad\x0f\xc14\x8d\xf0+\xac\xf1\xbb\x12\x93Β\xa1~|\xcb\x13\xbb0\xac\xe6\xabU@O\xfb\xb92\xbcj\xc1\xab\x1ejޯ\x9f\xd46\xb16\xe1\b&x\x15\xb3>\xfa2BM\xfb\t\x8b\x92\x96\xeb\f\x8a\xf7\xbe\x19\xa1H4Jk\x17$\x18ˠޤ\xd7jp\xa4T\xecp\x19\x12\xbd\xf6<\xf5Z㈚\xd3\x14\xa5\x92h~'X\xa93i\xc8.\xc8\xca\f\xb5\xeaM\xe0\xfa\xee\xb6\xd7)\xf0\xd9s\xddڽJcJSxb\xbc\xbf~B!y\xb8\xbe\xbb\x85\ar#0\xc0\x04g\xfd\xc0TJX5\xf8\x05Yz\xb8\x97?i\x84\xb4\xb2\xda ز\x8b\x11\xc0\x1b\xdc\xd2bSH0\xa8\x03*E\xb2\xa7-j\xb22kk\xa4Sܲ*7^\xb9p\ro\xbf\x83\x82\x8b\xca\xe01\xdfa\x9a\xf7\x8eH\x16\x9c\x9b\x8d\xbe\x97_P\x1b\x9eD\x10\xf4\xfd`\xc7\x16Q\x9f24\x19*\xd2t\xf6\x835\x1e\xa3s\xafIo\xd8#\xf9\x1f\x1b'Nd\x88\xf2\x1cJ\x99\xc2ލ\x04\x9bC@zj\xc2\x1b)sdC\"\x88_\x93\xbcJ1\xad}\xc6A!\xeb\xcd\xf6樓\xf5\xae\x19\x17\xb4dɗ%TE\xfdud\x9e\xd6\xf83\x85@Z\x97\v\a\x13\xb8\xf3\xf16#\xab\x97\n7X\x8c\xe09\xcbb\xb0^<\xdb\xe4x\x05FUC\x8a#\xc0`J\xb1\xc3\x04\xcdB\x04\xb2\x84du\x1fo\x1bs\x9e \x11\xab\xb6\x80\x96j\x964#\xf3\xfb?$X&\xe5c\f\x91\xfeA\xed\x1aK\x0f\x89\r\xf4`\x83\x19\xdbs\xa9t\xdf]į\x98T\x06\xc7\xd6\x113\x90\xf2\xed\x16\x15\xc1\xb2\xd1I\x1d\xccL\x11kZ\xdfRQӌ?\x9aW\xc3tb\x9e\xa5\xc6\xd8T\xac]\x1b\x85\n\x16qR\x87U\t\\\xa4|\xcfӊ\xe5\xc0\x856L$n~\xac\xc6ox~0'\x10G\xf8;k\x16fA\\\xea\xb8\tR \xf9\xf6\x85T\xc3\xc2\x11\xca1\x98q2l\x18i@9fۛ\xa2($\xf6\xa8\xa4\xd6\x1e5z\xe7\xa2\xe1\x94\xf3\xb0s\xb6\xc1\x1c4\xe6\x98\x18\xa9\xc6\xc9\x13#\x04\xae\xc4\xea\xcf\x11\xca\x0ehҮ!\x9eU\xa2M!K\x9d\xf1$s\xce0I\x99\x85\x05\xa9Dm5\x06+\xcb\xfc05i\x88\x91\f?\u061c\xd2hJ\x84\xfa\xe8\xc3\x1dS$M\x89\xd4\xc1M\x99\xd1\xc6]\xaa\xd7b\xf3J\xf4\x0e\x9a⛄\xfd\xf6\xa8\xfb\xf3\v;\x91\x9bS\xb0|\xbb\x05,Js\xb8\x00nBm\fTr\xb0\x1a<\xfe`\x8c;m\xb5\xdc\xf6{?\xfbjy\x16\xae\xd5h\xfcA\x98f\x8d՝\xb7U\x8b\x18\xf6\xa1\xdd\xf3\x02\xf8\xb6fXz\x01[\x9e\x1b\xb4\xbe\xd4\x1c\xa2-Gg\x96s\xcfI\xa0X\xdbK\xa5`&\xc9n\xea\xfd\x81\x88\x1e=Z\xf5\x018\xbf<\xc40\x96\a\x11 \xa1v*\xec\x96\x12WX\xb8\xad\xaa{\xbb>\x9a\x1a\xeb\x01\xbe\xfb\xf8\x1e\xd39\x92A\xbc\xa4\x1eM\xea]\xcf\xd3i\xa3`'\x18\x05\xb25)\xeb\xa6\xd51\x9eې\xbc\x00\x06\x8fxp\x9e\xd5`p9T\x88\xb5\xac\x06\xa9\xd0\xee\x8eZ5\xf2\x88\a\v\xcaowF\xc1[\"*\xae<\xe2!\xb6i\x8f\xa8\x84\x9f\xdf\xf0qԥ\n;\x8b\x98\xa5Ԕ\x9a\xa8~퀑q\x93\x85eJ)\x94@\xf1\x13\xa7]3\xac\xb3\xc7\xff\x88\x877ڱ\x8fVM\xc6\xcb\x05\x14 \x85\r\x1a\xed\n\v\x9b\xdb\x0f,\xe7i=\x98]'\v ފ\v\xf8(\r\xfds\xf3\x95kBQ\xa4\xf0^\xa2\xfe(\x8d\xadyQ\x12\xbbI\x9cH`\xd7\xd9.K\xe1\xcc\x02\xd1e\xd1\xf8\r\x0eք\x92\x88\xd6l\xe3\x1an\x05\xc5g\x8e>Kؔa@ΡUT\xdan\x8f\v)V\xd6L\x87\xd1\x16\x00m\xe3\xe5Y%U\x87S\x17\v!\x0e\xa2\xe8ѻ'k\xe5\xbe\x1c\x1d,L\x15\x85e\xce\x12L\xc3v\xa5=\xc5`\x06w<\x81\x02\xd5\x0e\xa1$\xbb\x11/T\v4\xb9+'Ha\xbck\x11\x8a7\vi\x1cb+Z\xf5\x91-\x03\x9b\xa3\x9a\x8f\x1cYL7\x8f\x9b\xa55\xef\xd6\x1f\x8a\xa2~\xfb||\x99eYȯc\x1f\xc4!\xe9\u070f\x82\xd9\xcd\xde_ɼZ\xf1\xfe-\xce\x1a2\xae\xf4\x1a\xde\xd9\xec\x80\x1c\xdb\xfd\xc3.ak\xa8(\x90\x84\t\xd7@r\xb2g9\xb9\x0f\xa4\xbc\x05`\xee\x9c\t\xb9=\xf2\xa0\xe2T\xccS&\xb5\xb3\xf9[\x8e\xb9=*<\u007f\xc4\xc3\xf9ő\xf6:\xbf\x15\xe7q0I\xe7\x1f)\xad\xdak\x91\"?\xc0\xb9\xfdvn\x1d\xb3%K\xe4\x04\xe7m\x81TG7\xb5g\xf9KB\x01\x8a\xb5\x83\xd7B\x9d\xeb\x13or\xe1\xe7f\x11-ӥ\xd4#\xc7N#h}\x96ڸ\r\xc0\x8e\xbb=\xb0C\x18\x13\xfd\xf9]C`[\x83\n\xb4\x91*\x9c.\x93\xda\xedm\x90\x13\xe7\xf5<\xef\x89\xd5\xf5n\xa4\x03LA\xe6y\xa3!\x9cN?w\xc7\xce\xf4\xf7<\xcc\xc4:K\x16v\xa9d\x82ZϋR\xa4\xe5\x98ٰ\xad7k\x99\v\u07b6Q\xaa9f+9\x94e\xae8\x91\xf6\x84\xc0\xe6\xe6kkߙ\xd4\x10\xfd\x8e\x11\xe5Sp\x04\x9b5V\x14\xac\x9f\xe9\x10\x8d\xee\xb5\xeb\x1d\x16\xa0\a\xe6\x02&\xb5\xab\xacRY\xe67{\x91\xfc\xbd9\x1e\x05\x17\xb7v x\xfbb\xce\n\x04U\x8e\xa7\x862ס\u007fÐ\xba\"6~\x85pn/\xedY\x8d\xc2\x0eg\x8fO2\xe29\x05\xe4L\viڛ5~\xa47\x1a\xb6\\i\xd3 \xbc\x00*\xd7\xf68\xf9ecLq\xa3\xd4\xc9!\xe6'\u05fb\xb5\xad\x98\xc9'\x9fe\xb2$\xb0\x0e\xc4\xcf\xd8\x1e\x81o\x81\x1b@\x91\xc8J\xd8\r/R\x174\xcc\x02\x88\x8e\x89ΘD\xda\xccVgQ\x15\xf1\x04YY\xe9\xe4bvw\xac\xdd\xe5\a\xc6\xe3v\xa7\xe04\xb6\x9a\xa9\x8c\x92\xa1\xd2M\x93\xf1\xa9%\xedt\xa2\x82}\xe5EU\x00+\x88-K\xe2ƭKJ\t\xb9G\x8e\xd7O\x8c\x1b\x9f\x8e\xe9\x0eV\x97i\xd3D\x16e\x8e\x06C\xbaI\"\x85\xe6)\xd6\xee\x83\xe7\xff`\xf2\xceXa\xb0e<\xaf\xd4\x02\x1d\xbd\x983K\xe36\xaf\x9e\x9e?\x18\x8bGde\x89\x19\xb9\xe9\xbe\xc0i\x9e\xb7\x1f\xa5Z\xe62\u007fV\xf8\xfc\xaei\xa98I\xa9\x9c\xf3NgaZ\xef\xb5\xeb\x9dz\xe1e\xe20\xe6\x9e\xceB\xb5\x98\xbc\xba\xa7uyuO_\xdd\xd3W\xf7\xb4W^\xdd\xd3W\xf7\xf4\xd5=\x1d.\xaf\xeei\xab\xbc\xba\xa7\xd1\xf6#\x06Õݹ\x9dh\x10\x85Ud\n\xc6\x1c\xda3c\xf9L\xa3\xeb\xbc\xd2\x06Ւ\f\xe9\xdb\xe1\x9e\x039\xf4\x89k\xb2\xb2\xd7\x1dǤ\xa6I]i\x8c^\x9d2MK2,&w\xb1%\xc2\v\x8fN\x83\x1e϶\x8fM\xa0\x9bK\x9b\xeb\xe6\x8e\xd7\xe9j\xee\xaf\x11\x82\x18\x19\x86\xf7\xdcs\x17\xa6\xda9W\xdd\xdc7\x1b\a\x04\x8c\u007f\x97y\xe5\x91im3\xc9lӉ\xf8c\x16>вw\xb8\xd0%\xa6\xea$~\xff\xaei\x19\x91m6\x9ec\xe6O-Ѱ\xfd\xdbu\xf7\x8b\x91>\xe3ldfO\xdcd\xee2\x17\x85\xaeb\xd7Nk\x0fr\xea/R\xf6i<\x02Q*\x10\x11\x90*E5{\xb8\xb2D4g\x85\xb2\x17\x13u\xc7\xef\xbd:\x10\xdeĢV탛1\xee\xc8\xfa\x16|\x02?r\x91:ސ\x10\xb6\xfc\v\xfbj\xa1\xbd'S;>\xe3b\xd4x\x9b\xbdC#\x8d%#5j\x83\"{\xb8\xad\xd7pÒ\xacn8\x02ю\x9c1\r[\xa9\nf\xe0\xbc>\x8d\xbb\f=\xa9\xe6|\r\xf0\x83\xac\x0fB[\xaf܌\xc0ռ(\xf3\x03E?p\xde\x05\xf4m\xa23*~ڿ\x04\xe7\x1fD\x8b\x88\x80\xef\xba=\x06\x8e}\xc3shI.\xab\xb4\x1ea\x82\xddL\x1c\xe0\xf3\x83\xf5\xa6\xec#PI\xf3X\x96\xf7\x95B$\xdc{Kk\x04\xe4\u0603\x82\x8bH6~8\xac\x8dTl\x87\x1f\xa4{k1\x86f\xdd\x1e\x9d\xe76\xbd\xae\n\xa9\"\xfe\xeeר$\xbb\xb9\xf5\x016\x19d~\xb55g\xe9\x84\xed\x98\x12\x9bY\xe7\xc6\xe4\x11\x93\xbb\xbf\xff\xe0&dx\x81\xeb\xf7\x95;\xa8_\x95Li$J\x87\x89\xbaN\x9bq;\x97\xc9'ȥ\xa7\xc3\xf7\xfdy(\xb4\x19k6'\xe0\xa4\xd9\xec;O\x1f\x06\xd2ň\xfc\xc3p\xcfV \xdbb\xe2\xd4Ѿ\u070e\xc2bZ˄[]d\xb7\x84l\xa2\xd8\xcb=\x157eQ&TF\xa5\xf1ӓ@\xf5%,T}+\x1c\xa7f^\xe2\xfc\xe9\xa8c`\xf0\x90\xfa \xfd\xd7k>d\xf7\x84'\x90v\xafT\x86\xbd-\xae\xeb\xb7I\x8fI7\xb3\xfe\xc7\xd7\xfe\xb0\xef\xba\x1a~\x0etU\xbfPz\x16AY\xf7\ng̣\xaf\xee\xb9΄\x95\xa6R\u07bc&\x95\xb2\xef\xe6\x11\x10t\xcfʝ\xf6\xeck\xf3\x04\xf6\f/\x9bG\xb1\x9bh\u007f\xf6\t\xee\x01\xfe\xd5\x0fȎ\xbe\xa8ꬫ{\"{E\xf0Oc\xe7\xe0:\xb0\xef\f\xce\xcc\xf43\xb5\xa9\x93|=\xa1m\xc7\xf0>\xe1\xdd\x18\xea\xc3Y\x9b+\xf8\x88O\x03\xb57\x82&q|\xa6\xe6R31\xb5{\x04CO^ONq_\xf7\xb2y\xb1\x03ڢ\xab\xe6z\xcd{\t7,\xcf[\x10]\x0e\xec\x10[\xff̷n\x03'\xa19\xfd\xe5\xa8Ũ\xe2\x9aTZc\nkpI\x1dUjT{L[B\xe2mx\xbb\xa6\xda4\xcfE¯\xbf\x9d5\xab\x92%\t\x96\xc6'v\xb5\xffk\x80\xf3s\xfb#\xbc\xfco\u007f&R8G[_\xc1\xbf\xfe}\x06\xde\x00?\x84\xe7\xfd\xa9\xf2\xbf\x01\x00\x00\xff\xff\x9dJq\x1dHa\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4VO\x8f\xeb4\x10\xbf\xe7S\x8c\x1e\x87w!\xe9{\xe2\x00\xca\r\x15\x0e+`\xb5\xda>\xed\x05qp\x9di;\xacc\x9b\xf1\xb8K\xf9\xf4\xc8v\xb2m\x93\x94]\x90\xf0-\xf6\xfc\xf9\xcdo\xfed\xaa\xba\xae+\xe5\xe9\t9\x90\xb3-(O\xf8\xa7\xa0M_\xa1y\xfe.4\xe4V\xc7\xcf\xd53ٮ\x85u\f\xe2\xfaG\f.\xb2\xc6\x1fpG\x96\x84\x9c\xadz\x14\xd5)Qm\x05\xa0\xacu\xa2\xd2uH\x9f\x00\xdaYag\fr\xbdG\xdb<\xc7-n#\x99\x0e9\x1b\x1f]\x1f?5\xdf6\x9f*\x00͘տP\x8fAT\xef[\xb0ј\n\xc0\xaa\x1e[\b\xc8II\x94\xc4\xc0\xf8G\xc4 \xa19\xa2Av\r\xb9*x\xd4\xc9\xf1\x9e]\xf4-\x9c\x1f\x8a\xfe\x00\xaa\x04\xb4ɦ6\xd9\xd4c1\x95_\r\x05\xf9\xe9\x96\xc4\xcf4Hy\x13Y\x99e@Y \x1c\x1c\xcb\xfd\xd9i\r!py!\xbb\x8fF\xf1\xa2r\x05\x10\xb4\xf3\xd8B\xd6\xf5JcW\x01\fLe[\xf5\xc0\xc5\xf1s1\xa7\x0fث\xe2\x04\xc0y\xb4\xdf?\xdc=}\xb3\xb9\xba\x06\xe80h&/\x99\xef\x85Ȁ\x02(\x18P\x808PZc\b\xa0#3Z\x81\x82\x12\xc8\xee\x1c\xf79G\xaf\xa6\x01\xd4\xd6E\x019 d\x05\xd9*\x03Ge\"~\r\xcavЫ\x130&/\x10텽,\x12\x1a\xf8\xc51f2[8\x88\xf8ЮV{\x92\xb1\xeb\xb4\xeb\xfbhIN\xab\xdc@\xb4\x8d\xe28\xac:<\xa2Y\x05\xda\u05ca\xf5\x81\x04\xb5Dƕ\xf2Tg\xe86w^\xd3w_\xf1Ч\xe1\xe3\x15V9\xa5\xca\n\xc2d\xf7\x17\x0f\xb9!\xfe!\x03\xa9\x1dJ}\x14\xd5\x12ř\xe8t\x95\xd8y\xfcq\xf3\x05F\xd79\x19S\xf63\xefg\xc5pNA\"\x8c\xec\x0e\xb9$qǮ\xcf6\xd1vޑ-ե\r\xa1\x9d\xd2\x1f\xe2\xb6'\tc\xed\xa6\\5\xb0Σ\b\xb6\b\xd1wJ\xb0k\xe0\xce\xc2Z\xf5h\xd6*\xe0\xff\x9e\x80\xc4t\xa8\x13\xb1\xefK\xc1\xe5\x14\x9d\n\x17\xd6.\x1e\xc61w#_\vݽ\xf1\xa8S\x06\x13\x89I\x9bv\xa4s{\xc0\xce1\xa8%\x95\xe6]H\xb2ƿ\xc42L\x92\x82f2_R\u007f\xbe\x8dfy\x9c䗃\n8\xbd\x9c`zH2S\xff\x86v\xa8O\xda`1Q\xa6\t\xbe\r%\x1d\xb4\xb1\x9f\xfb\xac\xe1\x1e_\x16n\x1fإɚ\xe7\xfa\xf5\xb9Q\x1bP\xfe7{\xb2\xb3p\xa7\x91\x15\xa9\xfc\x0f\xbb\x1c\xd5\x17\x03z0\x04\x1c\xadM};\x9b\x90\x19\xc8t\x92\xcfdH\xb0_@\xb3\x88\xe7\xce\xee\\\xde\x04Tr\xac\xa4\xf4\x13\x0e\xc9\x1e\xfc\x14\\\v\x06o纜\xf9\xf0z\x17\xa1\xe5\xe4?\xe9\u007fSN\xe3\x86\x18\x17}\xd7\x19\xd5\xe2C\xf2\xb8\xc4\xf8r\u007f\r(\xa31jk\xb0\x05\xe18\xd7.\xba\x8aY\x9d\xa6U3\x96\xday\x9fz\xa3\x80f\n\xa9O^\x0ehou\x03\xbc\xa8锿\xf2\f\xdb\xd3-\xd5\xf5\xebr8o\xa9R\xba-\xa4\xd9]\v-p\xf6.R\x16\xb3WJzq\xf3\x98\x11\xb2\xb9\x94\x1dg\xc6Uk\x8c\x8b\xc8<\x86\x9b\x10\x16\x93=\xbb\xcc滋\xf0\x828V\xfb1\xe0\xf3\xe8M\x9b\x9a\x17\xec\xee\xa7+\xee\x87\x0fW\xbbj\xfe\xd4\xcevT6t\xf8\xf5\xb7\xaaX\xc5\xeei\\0\xd3\xe5\xdf\x01\x00\x00\xff\xff\xfb\xb1p\x12\x1b\f\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4VM\x8f\xdb6\x10\xbd\xebW\f\xd2C.\x95\x9c\xa0\x87\x16\xba\x05n\x0fA\xd3`\x11\xa7\xbe\x14=\xd0\xe4Ȟ.E\xb2\x9c\xa1\xdb\xed\xaf/HQ돕\xb7Y\xa0э\xc3\xe1\x9b7o>\xec\xa6m\xdbF\x05\xdabd\xf2\xae\a\x15\b\xff\x16t\xf9\xc4\xdd\xfd\x0fܑ_\x1d\xdf6\xf7\xe4L\x0f\xeb\xc4\xe2\xc7O\xc8>E\x8d?\xe2@\x8e\x84\xbckF\x14e\x94\xa8\xbe\x01P\xceyQ\xd9\xcc\xf9\b\xa0\xbd\x93\xe8\xad\xc5\xd8\xee\xd1u\xf7i\x87\xbbD\xd6`,\xe0s\xe8\xe3\x9b\xee\xfb\xeeM\x03\xa0#\x96\xe7\x9fiD\x165\x86\x1e\\\xb2\xb6\x01pj\xc4\x1e\x8eަ\x11٩\xc0\a/\xd6\xeb)XwD\x8b\xd1w\xe4\x1b\x0e\xa8s\xec}\xf4)\xf4p\xba\x98 *\xaf)\xa7mA\xdbT\xb4\x0f\x15\xad8Xb\xf9\xf9\x19\xa7\x0f\xc4R\x1c\x83MQٛ̊\x0f\x93\xdb'\xab\xe2-\xaf\x06\x80\xb5\x0f\xd8\xc3\xc7L1(\x8d\xa6\x01\xa8\xf2\x14\xca\xed,\xc0\xdb\tQ\x1fpTS.\x00>\xa0{w\xf7~\xfb\xdd\xe6\xc2\f`\x90u\xa4 E\xe4\xe5D\x80\x18\x14\xccL\xe0\xaf\x03F\x84mQ\rX|D\xae\xa4\x1fA\x01f\xfe\xdc=\x1aC\xf4\x01\xa3\xd0,\xf0\xf4\x9d\xb5י\xf5\x8a\xd7\xebL}\xf2\x02\x93\xfb\n\x19\xe4\x80s\xfahj\xb6\xe0\a\x90\x031D\f\x11\x19\x9d\x9c\xcau\xfa\xfc\x00ʁ\xdf\xfd\x81Z:\xd8`\xcc0\xc0\a\x9f\xac\xc9\xedx\xc4(\x10Q\xfb\xbd\xa3\u007f\x1e\xb1\x19ė\xa0V\t\xd6ʞ>r\x82\xd1)\vGe\x13~\v\xca\x19\x18\xd5\x03D\xccQ \xb93\xbc\xe2\xc2\x1d\xfc\xe2#\x02\xb9\xc1\xf7p\x10\tܯV{\x92y\xac\xb4\x1f\xc7\xe4H\x1eVeBh\x97\xc4G^\x19<\xa2]1\xed[\x15\xf5\x81\x04\xb5\xa4\x88+\x15\xa8-\xd4\xdd\xd4\xed\xa3\xf9&\xd6A\xe4\xd7\x17\\\xe5!w\x11K$\xb7?\xbb(\xed\xfeL\x05r\xa7O\x8d0=\x9d\xb28\t\x9dMY\x9dO?m>\xc3\x1c\xba\x14\xe3Z\xfd\xa2\xfb\xe9!\x9fJ\x90\x05#7`\x9c\x8a8D?\x16Lt&xrR\x0e\xda\x12\xbak\xf99\xedF\x92\\\xf7?\x13\xb2\xe4Zu\xb0.\xbb\x06v\b)\x18%h:x\xef`\xadF\xb4k\xc5\xf8\xd5\v\x90\x95\xe66\v\xfbe%8_\x93\xd7Γj\xe7\x03V\x97؍z-O\xf2&\xa0\xbe\x18\xa0\x8cB\x03\xd5\xc9\x1e|\xbc\xd2U\xcds\xbe\x8c\xd7]\xb8/\x0f8L;~\xa0\xfd\xb5\x15@\x19S~!\x94\xbd\xbb\xf9\xf6\x19\xc1\x16\xf2^\x97H\xb9Q\a\x1f3\xa3#\x19\x8c\xed\x9cge\x92bM\x98\xd0\x1a\xee\x9e@\xdeм&Y \x9fҼ\xe0qW\xdd2\x93,\xf4\xfcl\xdaPX\x17fY\x9fj\x8f\xb7\x18,d\x9c;\x9c\"^\xcdj\xfb\x18\xe0\x8bzG\x94$~y\xf7\x94g\xd5sW;H\xa7\x18\xd1I\xc5\\ش\xffO\a\x85\x83b\xfc\x0f͗#\xdc\xe5\x97s\x19,\r\xa8\x1f\xb4\xc5\t\x10\xfc\xb0\xd0m/\xa2\x9c?ti|ʭ\x85wGEV\xed,.\xdc\xfd\xea\xd4\xcdۛ\xc5_\xac\xe7\x13#\xe7ujz\x90\x98&\xec\xdae\xd5r\xaa\xbe\xd2\x1a\x83\xa0\xf9x\xfd\xaf\xe7ի\x8b?.娽\x9b\x86\x95{\xf8\xed\xf7fBE\xb3\x9d\xff\x81d\xe3\xbf\x01\x00\x00\xff\xff\xbf\xca\xff\xa71\n\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xec=Msܸrw\xfd\x8a.\xe5\xe0\xf7\xaa4\xa3u吔n^\xd9[Q\xedƫ\xb2\xf4\x9cC*\a\f\xd93\x83\x15\t\xf0\x01\xe0ȓT\xfe{\xaa\x1b\xe0\xe7\x80$F+\xbd\xb7/e\\\xec!\x81F\xa3\xd1\xe8/4[\x17\xab\xd5\xeaBT\xf2+\x1a+\xb5\xba\x01QI\xfc\xe6P\xd1/\xbb~\xfaW\xbb\x96\xfa\xfa\xf0\xfe\xe2I\xaa\xfc\x06nk\xebt\xf9\x05\xad\xaeM\x86\x1fq+\x95tR\xab\x8b\x12\x9dȅ\x137\x17\x00B)\xed\x04=\xb6\xf4\x13 \xd3\xca\x19]\x14hV;T\xeb\xa7z\x83\x9bZ\x169\x1a\x06\xdeL}\xf8a\xfd/\xeb\x1f.\x002\x83<\xfcQ\x96h\x9d(\xab\x1bPuQ\\\x00(Q\xe2\rlD\xf6TWv}\xc0\x02\x8d^K}a+\xcch\xae\x9d\xd1uu\x03\xdd\v?$\xe0\xe1\xd7\xf0#\x8f\xe6\a\x85\xb4\xee\xe7\xde\xc3_\xa4u\xfc\xa2*j#\x8av&~f\xa5\xdaՅ0\xcd\xd3\v\x00\x9b\xe9\no\xe03MQ\x89\f\xf3\v\x80\xb0\x1c\x9er\x15\x10>\xbc\xf7\x10\xb2=\x96\xc2\xe3\x02\xa0+T\x1f\xee\xef\xbe\xfe\xf3\xc3\xe01@\x8e63\xb2rL\x14\x8f\x18H\v\x02\xbe\xf2\xb2\xc0\x04\xf2\x83\xdb\v\a\x06+\x83\x16\x95\xb3\xe0\xf6\b\x99\xa8\\m\x10\xf4\x16~\xae7h\x14:\xb4-h\x80\xac\xa8\xadC\x03\xd6\t\x87 \x1c\b\xa8\xb4T\x0e\xa4\x02'K\x84?}\xb8\xbf\x03\xbd\xf9\r3gA\xa8\x1c\x84\xb5:\x93\xc2a\x0e\a]\xd4%\xfa\xb1\x7f^\xb7P+\xa3+4N6t\xf6\xad\xc7U\xbd\xa7\xa3\xe5\xbd#\n\xf8^\x90\x13;\xa1_F\xa0\"\xe6\x81h\xb4\x1e\xb7\x97\xb6[.s\xc8\x000P'\xa1\x02\xf2kx@C`\xc0\xeeu]\xe4ą\a4D\xb0L\xef\x94\xfc\xef\x16\xb6\x05\xa7y\xd2B8\f\f\xd05\xa9\x1c\x1a%\n8\x88\xa2\xc6+&I)\x8e`\x90f\x81Z\xf5\xe0q\x17\xbb\x86\x7f\xd7\x06A\xaa\xad\xbe\x81\xbds\x95\xbd\xb9\xbe\xdeIל\xa6L\x97e\xad\xa4;^\xf3\xc1\x90\x9b\xdaic\xafs<`qm\xe5n%L\xb6\x97\x0e3\xda\xc8kQ\xc9\x15\xa3\xae\xf8D\xad\xcb\xfc\x9f\x1a\x06\xb0\xef\x06\xb8\xba#1\xa3uF\xaa]\xef\x05s\xfd\xcc\x0e\xd0\x01\xf0\xfc\xe5\x87\xfaUt\x84\xa6GD\x9d/\x9f\x1e\x1e\xfb\xbc'\xed\x98\xfaL\xf7\x1eCv[@\x04\x93j\x8b\xc6o\xe2\xd6\xe8\x92a\xa2\xca=\xf71\xeb\x16\x12\u0558\xfc\xb6ޔ\xd2Ѿ\xff\xb5FKL\xae\xd7p\xcb\"\x066\bu\x95\x13g\xae\xe1N\xc1\xad(\xb1\xb8\x15\x16\xdf|\x03\x88\xd2vE\x84Mۂ\xbet\x1cw\xf6T\xeb\xbdhd\xd9\xc4~y\x81\xf0Pa6804Jne\xc6\xc7\x02\xb6\xdat\xf2\u008b\xab\xf5\x00d\xfc\xc8Rˬ|P\xa2\xb2{\xedH\xfe\xeaڍ{\x8c\x10\xba}\xb8\x1b\rh\x90\t\xa8\xb1X\xa9-\xe6tΞ\x85t\x84\xde\tL @\xf0\x95%L\x03\x8f%Mm\xc1\xd5F\xf1)\xfd\x82\"?>\xea\xbfX\x84\xbcffmt\xc5\x15lp\xab\rF\xe0\x1a\xa4\xf1\xd4\x19\x8d!\xc2XFI\xd7n\r\x8f{$2\x8a\xbap\x81聾\xf7?@)U\xedp}\x02mb\x83=Q\x18\x8c_\x81}\xd4_\xd0:\x99-\x10\xefctP\x8f\x80\xcf{t{4t\xf0\xf8\x05˲\xc8\"7\x1d\x89\x9dxB\x10a\xdbY&\x16\x05T\xba\x11\xdf\x166\xc7\x06٩\x05n\xb4.P\x8c\xc5+~ˊ:Ǽ\xd5w'\xcc3Zݧ\x93\x01l\v\b\xa9Hܐ\xf6%\xf4T\xf7\x964Zdq\xc2 Ё\x97\xca\xc3ce\xb5\xc7(gS\x93\x0e\xcb\bn\xb3\xdb\alc\x88M\x817\xe0L}\xcaH~\xac0F\x1c'\xe8\xd2\xd8E\xa9di\xfb\a\xf1[Ȍ\x15w+d\x992^͋(k\xff\x81\x89\xb2\xd7\xfai\x89\x10\xffF}:\x85\x01\x19\x9b\x97\xb0\xc1\xbd8Hm\xc2҃\xfe\xde \xe07\xccj\x871\xfe\x17\x0er\xb9ݢ!8\xd5^X\xb4\xdef\x98&ȴ\f\x04\x96\x1a\x93\x9by\xb2\x8en#\x89Sy\xe5S\xa8Ӂ\x1e\x9f\xab\xa6\x11\xa2$\xa6\xc8\xdeS\xb9<ȼ\x16\x05He\x9dP\x99_\x8fh\xf1:]\x0f\xccm\xf2\t\xce^\x8f4\x98\xd3N\ft\x8aV\b\xda@I\x8a\xf4\xb4\xebX\xf5wmj\xd9\x1bA\xd2I{\x165u\x816L\x95\xb3\xb2\xead\xc0\xd5$\xe8vG\xbc\x11V\x88\r\x16`\xb1\xc0\xcci\x13'\xc7\xd2&\xfb\x96\"\xd7&\xa8\x18\x91pC\xe5\xd7-l\x06$\xb0f\xdc\xcbl\xef\xed#\xe2 \x86\x03\xb9F˧\\TUq\x9cZ$,\xed|\x98d\xee\xa0wm\xe1ȏ\xe1\xc5\x0e\x7f\xd7\x12dc\xd7\x16\xa4䐲-;\x80ӳ\xcb\xfe\xffI\xd8F쿀i\xefN\x86\xbe.\xd3\x12I%\xf9Aw[\xc0\xb2r\xc7+\x90\xaey\xba\x04\x91\x8c\x95n\xfe\x7f\xe0\x8d9\x9f\xe3\xef\xc6#_\x95\xe3gwe\t\"\xedJ;\xfd?র\xb2x\b\xba\"yC~鏺\x02\xb9m7$\xbf\x82\xad,\x1c\x9a\xd1\xce\xfc\xae\xf3\xf2\x1a\xc4H\xd1w\xd4J\xe1\xb2\xfd\xa7ody\xd9.R\x97H\x97\xf1`o\xbf6\xf6\xfcP1/\xc0\x05\xf6\xec\xa5\xc1\xd2G\f\x1e\x99\x9a\xdd\x13\xb6\xa8>|\xfe\x88\xf9\x1cy \x8d\xf3N\x16\xf2a\x84l\x7f\xea`\x94\xa7.#\x98>\xad\x7f\xe3cAW \xe0\t\x8f\xdeb\x11\nhs\x04M4\xe1\xe9\x9c\x12\x87\x83R\xccdOxd0!ʴ8:\x95\x15|{\xc2cJ\xb7\x11\x01\t'iC\xf4\x8c(I\x0f\x98\x10\x1c\x94H'\x1epİ\x91Eˋ\x83tAҴ\x86\xf6/Xf\xbbm\xbdh+o\xec;뷈N\xc1^V\x89\v%5\a\x16\xf9\xb441ï\xa2\x90y;\x91\xe7\xfb;5m\r\x0f\xdbg\xed\xee\xd4\x15|\xfa&m\b\xdb~\xd4h?k\xc7Oބ\x9c\x1e\xf1\x17\x10\xd3\x0f\xe4㥼\xd8&:\xf4\x83\x8f\t\xcc\xed\u06dd\xf7\xf0\xda\xed\x91\x16\xee\x14\xf9-\x81\x1e\x1cJ\xf6\xd3\xcd\xeb\x87a+k\xcb\xd1E\xa5ՊU\xe5:6\x93'v\"Hm\x06;r\x8aZ;\xa9\x9f0\x11\xec#i\x12?\xde\a\xc7\v\x91a\xde\x04\xc78\xa4+\x1c\xeed\x06%\x9aݜ\xe2跊\xe4{\x1a\n\x89R\u05f739,M\xb57-\x88\xee|\x19\x99\x15\x9d܄^\xcdf/v\x9d\x88\xe4Nw]^\x11\xabX\xb6?\x16\xa9+\xf2\x9c/\xe1Dq\x7f\x86\xc4?c/Nu\xbfG\xcck\xc8Rp\x90\xf1\x7fH\xcd1C\xff/TB\x9a\x843\xfc\x81\xef\xd4\n\x1c\x8c\rQ\xac\xfe44\x83\xb4@\xfb{\x10\xc5\xe9\x1dAdq\x9ad\v\x16^\x91\xeb\xed\x89\xc5r\x05\xcf{m\xbdN\xddJ\x8c\x86T\x87MZ\xb8|\xc2\xe3\xe5Չ\x1c\xb8\xbcS\x97^\xc1\x9f-nZkA\xab\xe2\b\x97<\xf6\xf2\xf7\x18A\x89\x9c\x98ԍ\xef.SMe\xf2%\x1bK\x80\x06\xb6\x17vd\xe6\xcea\x9dć\x95\xb6\x91k\x88\tT\xee\xb5u>\xb280Kωb\x81\xe7\xa1\x10\xbd\x02\xb1\xf5W\xa6\xda4\x97a$\xf6F\x01W\xda5;/ai\x1bۈ\x98\aJ\x8e\xd5ew\x82\xbd<\xbd\xf47d<\x89\xc8ظX\x84[\x19\x9d\xa1\xb5\xf3,\x92 \xad\x17\x82\x84m\x80Px\a\xc6\xdf4\xcd\a%\x9b\x96n\x90\x12\x91\xce4\xe5?}\xebE/\xe9\xf0\xd3\xef%\xe6;\x17/\xe03[\x96b|\xa5\x9a\x84\xe2\xad\x1f\xd9\x1c\x93\x00Ȼ\x06fW\xf3QO\xb7 \x03#\xfd\x11\xd4t)\xd5\x1dO\x00\xef_]\xad\xb7B\x12_b\xb8\xdf6c;\xa2\xb7\x0f\xf8\xf4\xa6ZD\x9a#\xf7\x06\a;w\x1a\xe7&C1\x11\xa4Ү\x1fN \xb8\x95\xce\xdfY\xd8Jc]\x1f\xd1T\xa6\xa8\x17N\x7f\xd7\xce\xf5\x9c\xd4'c^\xe48\xfd\xeaG\xf6\x02Y{\xfd\xdc\\LO^f\xc6\x1a_\n!\xc8-H\a\xa82]+\x0e\xbf\xd0Q\xe7)\xfc\x16x\x01\x9dL\xb24\x01A\rU]\xa6\x11`\xc5\\'\xd5l\x9c\xa6\xdf\xfd'!\x8b\xb7\xd867u\x7f\x1fk\x83mk.\xf2\xfb\x19\x06\xa5\xf8&˺\x04Q\x12\xe9Sݞ\xad\xbf\xfe\x1f\xecx\x9b\x04\xc0pY\x8d8M\x87\xaa*Х\x9eH\x7f\xddO\xc7\xc4\xca\x1c[\xc5\x1c\xb8@+\x10\xb0\x15\xb2\xa8M\xa2\x84<\x8b\xb6\xe7\xf8\x1aAX\xbc\x9e\x13\x916\xf9\x8aI\x91\x10\x88M4\x16\xe7\xa5ue\xd2M\xc5{\x83i\xe6\xd9RP\xba1\xcf*#\x89\x97\xf4k[h\x81ń:~7\xd1N\xdaw\x13m\xa1}7\xd1&\xdbw\x13m\xb9}7\xd1B\xfbn\xa25\xed\xbb\x89\xf6\xddD\x9b\xeb6'\xad\x970\xf2\x9f*L\xbc\\\xc4\"\xe1zz\x0e\xc5\x19\xf8!\x9b\xe2\xd6\x7f\xb6\x90\x9aay\x17\x1f\x15ɫ\r\xdfC\xac\xf8S\x8e\x18\atI\x17\x9d*iS.\xe9\x804\xec\xed3\xaf\x17\x920\x93\xd2)\xe3ٷ)\t?Ki>\xc3<\xd36ͦI4\xd5\xcd$\x11:4\x9f\x84\x90\xd9\xdb\xcf!\x19\xe6밝\xdb`\xfaw\xcfAMH\xc5YH\xc0\x99O̝\xa3\xd7\xc8\xf5\x18\x12\xcc\f\x12F\xff0\xf4ZȒ\x99\u038d\t7A\xe8\xc4\xe1\xfdz\xf8\xc6\xe9\x90)\x03\xcf\xd2\xed#Kyޣ\xe2;,\xb5맽6\xfc\x16\xbe\xcd\x19\xd3\x11\xb4\x01%\v&\xe7\f\xb7\x0e\xc8\v\xbfVޅ;\xfb\\λ\x1fi\xb94/Π\x19f\xc8L\x88\xe8s\xaf\x8c\xd2\x13\x85\xd3sd\xe6\x93Z\xceɌ\x19\xe7\xbdL\x02]·I\xf1\x1c\x17r_^\x90\xf1\x92\x98\xed\xf8\xbb/\xc6RrZ^\x94ɲ\x98\x10\x98\x98\xbf2\xccL\x99\ayF\xd6J\x12q\x963T\xce\xceK\ty \xb3\xebH\xceF\x89\xe4\x99\xcc\x02\x9e\xccA\x99\xcb.Y\x88J\x9df\x9e\xa4\xe7\x94̂\xe6|\x93\xe5L\x92\xd7\xcb\x17}\r\x1bxZ\xd4,f\x83,\xda\xc8\xf3\xf8-\xe6{\x9c\x93\xe5\xb1H\xb1\x17ft\xb4\x19\x1b\x13\xf3\x9e\x9b\xc71\xccӘ\x00\x9a\x92\xbd1\x91\x9d1\x01q6g#5'c\x02\xf6\x82ڝ咙\x97\xf1/HaQ\xbf\x15\x7f+\x8ez\xe9´\x19\x98\x8bK\x16\xfa\xaf\xa3\ued17\x8d\xd54o~\xc6,O\xe9\xf6盟e]8Y\x15\x1c\xce?\xc8<\xea4\xba=\x1e\xe1Y\x16\x05\x89\xd5\xdf4\x7f\xe6\xb492\xa4_\xbf\xb4\xec\xb9\x1e\x19\xd1\xc2\xc23\x16\x05\x88\x18s\x9d\xac<\xf3\x1fAgz\x85$\xf3\xe9\xc0\x85O>÷\xd2W\x9e\x83\xf9K\xaeX\xc4\xd3\xed\xb1$(ͷ\xa3g\xb8\x1f\xf3\x06\xa2\xb7e\xf9\xd9_k4G\xd0\a4\x9dŰ\xf0\x1d\x81?h\xb6.\xbaĭ ?\xfc\xa7\xf7#ù;p\xf0Ay\x15\x16\x05;\u0091\xe1Й/ڽ&\xf1F~\xc0D\xd7x\xe0C\xb7\xa3#\xef\x97l\xcf\xd4$\xfc\xb7u\x1d\xcew\x1e\x16\xd5\xf6\x9b8\x10/w!f@\xa6&է]@-&ѿ\x95+\xb1\xe4L$[QiI\xf2o\x91\x1c\x7fFR\xfc\x19N\xc5ynE2\x99R\x92\xdf\xdfĹxC\xf7\xe2-\x1c\x8c\x97\xb9\x18\v GI\xed)\xe9\xeaI\x97\xab\xc9\xf7\v)\x97\xa3\xcbW\x00\xf3i\xe8\t\xe9\xe7\t\x97\x03K\x98&\xa4\x99\x9f\x97^\x9e@\xc37r>\xde\xc8\xfdx\v\a\xe4m]\x90E'd\x91sf_\xbf8\xba\xacM\x8ef6\x18\x9f\xcaj\xb3L6\xf2\x17\x86s\x8e\xbe\xa8mj\xa4P\xaf\x81i\x1a\v)\xb7_\x7ff\xf0\xb3T\xb9\xdf\x0fb\xaa\x9e\x1e\xe7bJ\x9c\xff\xde\x1a\x15\x9d}\x16\a:\xbaT\xb0X\t\xc3ն6G\x7f1i\xd7\xf0Id\xfbaG\xd8\v\v[mʨ\xc1t\xd9\xde\xc8\\7\xa3\xe8\xc9\xe5\x1a\xe0'\xdd^z\xf5+*XYVő\xfc\x00\xb8\x1c\x0ey\x19\x03D\x99dž\xba>\xa1\xdc͂\xaf\xf70\xec\x1d\xb9\xbck\x8a\xddd\x85\xae\xf3\x16\xfa\xc4\xe6\tu\x84\xfb\xafl\x93p\x99\x90\xac+\x99\x12\xac\x8e\xc6\xe7\x1bWT\xf9\xf1\xf5/\xf3\xac\xd3F\xec\xf0\x17\xed\v6-Qb\xd8{P\xad+Ȋ\xe6r\xbd\xf9\xf6\"\xa6CC\xe9\xa8\x11\xb0.g&\x9c\x86\ue793\xb0\x8c\t\x91\x99\xf3\xe7\\\xb1\xb0\x98\xc7\xc7_\xfc\x02\x9c,q\xfd\xb1\xf6\x17\xa7\xabJ\x18\x8bD\xcdfa~І\xfe\xbb\xd7ϱ؆\x0ek\xfeq\x8c\xb7A\xce\xcb\xe1\xfbٳ\xb0?\f\xcaO5$Zbԯ\xf1Q=Ǭ\xb7I\xfe\x94G\x1d\xf2)8\xbd\n|\x1c\xb2\xe0\xefj^\xb7\xccϔԞ\xaaQ\xc6u\xb9\x96\xab\x94\xf9\xf2]\xa1&a\xc8\xee\xaa\r\xd7\xe8\t\xa5\xbd\xb8\xa6\xcd\xcb\n\x95\xf9d\x94A\x9d\xc8\xf9}\xba=\x1d\xc1\xd5\x00M\xde+T\xd6\x16\xcez\x16\xb6Mx\x89*\xd2\x0e\x9c\x1fɖ,A\xc3\x1c\xf0\x80\n\xb4\xe2\xfc\x16\xae~\xe3+V\x8e\xc7D\xa0\xf6\xa1\x84\x04\x9a\xba*\xb4ț\x13\xde\xe8\xacP\xe5\xf0\x91\xe5\x979\xa0ygg`rq\xb0\xad61\"\x9c\nL\xafXn \x17\x0eWQ\xa0I\xb2/\xcal\x99\x95CF\xb7\x1f\x9c#\xbf f+\x8f+\xcdM\x8dl\xf4\xaf\xd3N\x14\xa0\xear\xe3\x15\xbah:\xc4\xf6\xef\xa4ޜ\r\x19O3\xc7\xcb/L*\x87\xbb\x93\x98\xe2\xe9\xcan\x1b\xfe9{e\xedȩ\x95\xd9:\xcb\xd0\xdam]\x141Ӿ\xe5\xdc\xd7_&\xe7\xf2-\xd68\xe3N^\x04r\"`S\x88\xceg\x02\x96h\xad\xd85\xc5͞I\x03\xedP!\x1b>\xb1x\xa3w\f\xbḇai/\x1f\xc1\x12\x99\xabE\x98\xa0\xb9\xf9\xef\xf5z\x17\xb3\v\n\xbd\x83\xad,\xb8k\xa8_\x19T\xf3\x994\xf9VI\x93\xa2\xca?\xb5\x1d\x896\x1c|\xe6\x8d\xe8\xea\xbcb!w\x92\xf4 m\xd2N\x98\x8d\xd8\xe1*\xd3E\x81\x9cf~\x8a\xd7[\x1e\u0590\x9f\xf7\x05\x85]\\\xdaO\xfd\xbe!\xd2\xe1w\xdbW\xc6\x10\xbe@!\x97\xfdt\xd2`WG\xf7\x04!\xcd\x13\x9f\xa5\xba=\x15\xa2\x15gO1\xed\xf7m\x0eX\x90\xab\x1eNS\x80\xf6*\x18\x83qo\xb6\x14\xbfis\x05\xa5T\xf4\x0fY\xfc\x1c\x8ah\x06\x9f\x85?\u05ec[\xc0\xfb\x9e\xfa\xb4i\xd2=E\x8á\x982U㩱+\xf8\x8c\xa7\x96\x95\xcfvŜ\x83o\xb12\xbb\xd4\xe5N\xdd\x1b\xbd#\x7f8\xf2\xb2\x15^\x91w\xf7\xc28)\x8a\xe2\xe8'\x99\x9c=\xf2\xe2#\x92⚴^\xe2d\rX.Q6t\xeb\\o\xa9<'p\x9e\xeaF\xd7n J:Q\x14\x0f\xfb3\xb05|\xd6\x0e\x9b\x88\xae\x1c\xc2$\xe1\x8b֭p\xbb\xd5\xc6yO\x7f\xb5\x02\xb9\r\xd6P\x04.\x9d\t\xbe\x91\xf2UoA\xba\xeeR\xbe\xe3^vt\f\x1fB\xae\xf0T\x8a\xa3\xcfY\x14YF\xc66^['\x8a\x88|\xfb]9Plv\x12\xf7a\xfe\x97\x88\x1dvB\xf0\xbb~\xff\xf6\xc3\xf1V\xbb18O9\xce)\xf7\xb2=\xaa\xe9\x803\x8dQ\xc1\xb3\x91Α<\xed_ف#\tZ\x14`I\xa6L\x94\t\x9c\x93\xec\xfc\x9et\xef\xddt\bq\xe8ߴ\x9d\xa7TwX\x9c\xa6m\xd90\t&\x96\xe5\xbfY\x92\xb6\x19K[\x99\xed\x85\xda\x11S\x19]\xef\xf6\r_NhƩ\b\\MHAU\xd4;b\xf5p]\xe2j\xa3z!\x98p\x81\x92\xf7\xd0\x15\xd9\xd3$\xa6!$\xdcT^\xbf\x0e\x85\xffV[\xa3\xcbU\xd8\v\xbe\xe5\xb8\n\xa1\x11#5\xd9\xff\xe4\xc8O\x00\xed*l1\x1bT\x15*\x106\xe0\x93\xf0A\xd5\xfc\xb6\xce\xc5)\x9c0.իx\x18t^p(\x18r\x1c߇\x10\xf8\xf1\x1f\x96ݎk\xe0_\x81\x95\xaa)\xfa\xee\x03K\x9e\x15,\xf9\x19\x06\xd9W\x8f^`\x9dx\b\x03\x7f`\x88\xfe\xdf\xd6\x158\xb4\x1a\xe6S\x8aM\xf9u\xd4}\x94\x9dK\xa7\xbc\x83\x18\xec\xc0\b=\xfe$\xb7\xfeN-#\xac\xff\xfcwϺ=$\xd9,\xeff\xcd\x15\xb6DZ\xbb\x03>be0\x13Q\xc7\x03\xe0\xbe@\xb2#,\xe2\xd0\x12zw\x96\xc9{x\x99\x13\xf7\x9a\x1e\\\xf3\xf7\b^ǯ9\xbc\xccw{3\xc7\xeduW\xf7,\xb8\x06\xfa\xd2\x19\xfb\x8f\xd0-\xe2\xb9\x05\b\x11\xdf-\xb2\x8c֛[\xf4\xddz\xae[\x83\xe3D\xb5\xeb\x91;\xf7J\xce[T\x0f\x9c\x8aU_\xbdٓ\xe9t:a\x8d|F\xeb\xa4\xd1s`\x8dğ=j\xfa媗\u07fbJ\x9a\xd9\xfe\xfbɋ\xd4b\x0e\xcb༩\xbf\xa23\xc1r\xfc\x84\x1b\xa9\xa5\x97FOj\xf4L0\xcf\xe6\x13\x00\xa6\xb5\xf1\x8c\xa6\x1d\xfd\x04\xe0F{k\x94B;ݢ\xae^\xc2\x1a\xd7A*\x816\x12/W\xef?T\xbf\xab>L\x00\xb8\xc5x\xfcI\xd6\xe8<\xab\x9b9\xe8\xa0\xd4\x04@\xb3\x1a\xe7\xb0f\xfc%4\xce\x1b˶\xa8\fOwU{ThM%\xcd\xc45\xc8\xe9\xea\xad5\xa1\x99C\xbb\x90(d\xb6\x92H\x1f#\xb1U\"v\x9f\x89\xc5u%\x9d\xff\xf3\xe5=\xf7\xd2\xf9\xb8\xafQ\xc12u\x89\xad\xb8\xc5\xed\x8c\xf5?\xb4WOa\xedTZ\x91z\x1b\x14\xb3\x17\x8eO\x00\x1c7\r\xce!\x9en\x18G1\x01ȘEjS`BD-0\xf5h\xa5\xf6h\x97F\x85Z\x9f\xee\x12踕\x8d\x8f('Y \v\x03E\x1ap\x9e\xf9\xe0\xc0\x05\xbe\x03\xe6`\xb1gR\xb1\xb5\xc2\xd9_4+\xffGz\x00?9\xa3\x1f\x99\xdf͡J\xa7\xaaf\xc7\\YM:z\xec\xcc\xf8#\t༕z;\xc6\xd2=s\xfe\x99))NZ\a\xe9\xc0\xef\x10\x14s\x1e\x8c\xb6e,\x1e?\x97ț\x1c(\xfb[ƪ\x82E\xf6\\\xb3\x81\x0f \xa4\xa3\x02\xc0E\xa2C\xb0\xa8<\xa3\xf59x\x1b\xde$>7z#\xb7C\xa1\xbb5\xcd%\x8b\xb9B\xba\x87\xdc2\xdeD\xa1\x89\xac\xa3\xb1f/\x05\xda)\xf9\x87\xdcH\x9e9\t6e\xae\x8dD%\xdcP\xd2\v^\x16E\xb1(ȫ\x99\xba\xa2\xc3\xe5ic,\x8d\x99\xd4ɂ[\x021\xd8\xd8:\xa7T\xedQ\x8bS5rƍ\x89Qˡ\x80\x83\xf4\xbb\x14\x0e\u0558\xdf\xc1\xab\xbeG\xe3\x05\x8fc\xd3=ޟvH;S\x02Ep\xc8-\xfahm\xa8\xc8|Ȕ*\x80/\xc1ŀڏ\x13e\xc4B\xad\x9c~\xc1\xe3\x10h\xb8\xa6\xdc\\\xc2\\g\xf9\x8eJ\xe7°\xc5\rZ\xd4~4\xa8Sgb5z\x8cq]\x18\xee(\xa4sl\xbc\x9b\x99=ڽ\xc4\xc3\xec`\xec\x8b\xd4\xdb)\x01>\xcd\x1e4\x8bm\xc5\xec\xbb\xf8\xe7\x82\xc8O\x0f\x9f\x1e\xe6\xb0\x10\x02\x8cߡ%\xadm\x82*\x86֩o\xde\xc7\x1c\xfb\x1e\x82\x14\x7f\xb8\xfb\x16\\L\x93<\xe7\x06lV\xd1\xfa\x8fT\xa8E\xa6\b\xa2UҊ\xb1@\x99\x92\x94]gm\xa6X3f\x88c\x15fwP`\xa2\f2\x16Q_p\x18L_q\xb3\\\xec^\xf1\xb1RHK-$\xa7B\xec\xdc7J\x83!\xce\xea\xed\x11\xc1\xfa\x15\xf8\xa5\x880.x\x12 \xe7\xc3+\x1c?t\xf7\xb6mY\nO9\xc79\xf4T@9\xd0H9\x90\xd9!r1(p\xa35y\xa37\xc0N\xa1\xee\xce\xf5c\xfc\x1b#\xc4:\xf0\x17\x1c\x01~ \xcaǸ\xb1`\x9c\x8e\x11/\xc1a\f\xbe\xd7\u0600\xeb6\xce\xd9\x12\xed-\xbc,\x17\xb4\xf1\x94&\x19,\x17\xb0\x0eZ(,\x1c\x1dv\xa8\xa9C\x90\x9b\xe3\xf8]4\x9e\xeeW\x05\xd5Xa\xe4\x1a\xbf`;.C\x8a\xe1sX\x1fGj\x82\x1b\x84l,n\xe4\xcf7\b\xf9\x187\x16\xc0\x1b\xe6w \xb5\x93\x02\x81\x8d\xc0\x9f\x8a\xb5\v\x82\x9e\xf2\xffC\x8e\"ߠ\x9e\u05fc=\xb1\xf3\x16\x87/\x18_\xf1\x9fǼ\xed\x84B\xf9\x9d#\xffy-xɏG%ڟ\x1e\f\xfe\x94*,>\x92*Ϙy\x1e\x9ex\xa5R+\xcf\x16c\xceLu\x81\xb1\x16]c\xb4\xa0\xe6\xe9\xb6:\xade\xf9\x7fW\xad\x8d\xabuz\x1e\xe5zkE\v7\xb5*\xf1\x89\xe6\xcd\xcdJz\xb8\xea\xb6\x02f\xed\xa8Sl\xfb\x95\x9e\x8c\xbfH\x9b\xf2\xaeӧP?\xac!\xe8X\xa9Ō_\xc1\xdf5|\xa2ޖ\xb2\x93\x98\x13\xdfv\xcc\x00\xa4\x03m\x0et\xbcC/\x92\x00\xa3S\xbe\xa6n\x8di\x91\x9b\xe1\xb8t\x90JQƶX\x9b\xfdhƦBӢ:\x02sd:\xfb\xdfT\x1f\xaaw\xbfZ\x17\xa4\x98\xf3\xd4Ԡ\xf8\x8a{9|\xe5\x19\xa2{?8Q\x1c\xff\xe4\x0e\xf4\xe3\xc7\xd2,\xcfl\xde\xf6\xe3\b\x18\x1b\xa9\xa8\x16\x1c\x89\x13m\xc50|\x8f\xfc\xb8\xba\xbfs\xb1\x84G\xed\xc7ʾ\x03Z\x8c\x1d\x13\n\xaa\xe2M~\x97\bΣ\x1d1\x80\x93\xf6\xa2\xceA\x19\xbd\xed9N\x1a\xf9\x95\x82*\xb4dPƂ@O\xa9Io\x81\xef\x98\xdeb\xfb\n\x95\xf9\x7f\x9dS2\x9f\x9eʹ\x16\"\xf5%\xf3\xb8I\xa3Or\xacL\x1f\xbc\x00\xb7\x9b\xc7_\x7f\v\xf7E\xb3\x17ۜ+\xb8\x0f\xf6\x97,M\xa0N}\xfb\"\u070eooo\x87\xcf\xcd7 \xf1ַ\xf0W\xde5\xe0\xc0\\\xfb*\xfe\xeb\xe1PS\xb5z\xb5\x04\xfe\x92v\xa5\xe7\xc3|\x04\xd8\xda\x04\xff\x9agލ\x19t~\xee\x7f\v\x8f\xf1#Ƶ\"\x83\xf6\x14\x8d\xf0`\xa9\x95l_\xc5bP\x18\xcb-\xb7?/-z\xdfZ\xbak\xc3/17\xc85\x9ak\a\x93)_v\xf4\x9aA\xee΄\xf5\xe9\xa5x\x0e\xff\xfeϤMה\x13\x1b\x8f\xe2\x87\xfeǵw)d\x94/d\xf1'\xa7:&}\x1d\x84\xbf\xfdc\x92\xaeB\xf1\\>i\xd1\xe4\x7f\x03\x00\x00\xff\xff\x1d\r\x93\v\x97\x1c\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4\x96Ms\xe36\x0f\xc7\xef\xfa\x14\x98}\x0e{y$\xefN\x0f\xed\xe8\xd6\xcd\xee!\xd36\xe3I2\xb9tz\xa0I\xd8\xe2F\"Y\x00t\xeav\xfa\xdd;$%\xbf\xc8v6=\x947\x91 \xf0\xe7\x0f\x04Ī\xae\xebJ\x05\xfb\x84\xc4ֻ\x16T\xb0\xf8\x87\xa0K_\xdc<\xff\xc0\x8d\xf5\x8b\xed\xc7\xea\xd9:\xd3\xc2Md\xf1\xc3=\xb2\x8f\xa4\xf13\xae\xad\xb3b\xbd\xab\x06\x14e\x94\xa8\xb6\x02P\xceyQi\x9a\xd3'\x80\xf6N\xc8\xf7=R\xbdA\xd7<\xc7\x15\xae\xa2\xed\rRv>\x85\xde~h\xbeo>T\x00\x9a0o\x7f\xb4\x03\xb2\xa8!\xb4\xe0b\xdfW\x00N\r\u0602\xc1\x1e\x05WJ?\xc7@\xf8{D\x16n\xb6\xd8#\xf9\xc6\xfa\x8a\x03\xea\x14xC>\x86\x16\x0e\ve\xff(\xaa\x1c\xe8sv\xf5)\xbb\xba/\xae\xf2joY~\xbaf\xf1\xb3\x1d\xadB\x1fI\xf5\x97\x05e\x03\xb6n\x13{E\x17M*\x00\xd6>`\vwIVP\x1aM\x050\xf2\xc82kP\xc6dª_\x92u\x82t\xe3\xfb8Ldk0Țl\x90L\xf0\xb1\xc3|D\xf0k\x90\x0e\xa1\x84\x03\xf1\xb0\xc2Q\x81\xc9\xfb\x00\xbe\xb2wK%]\vM\xe2\xd5\x14\xd3$d4(\xa8?ͧe\x97\x04\xb3\x90u\x9bk\x12X\x94D\x9eD\xe4\xb8\xd6;\xa0#\xbe\xa7\x02\xb2}\x13:ŧ\xd1\x1f\xf2µ\xc8\xc5f\xfb\xb1\x90\xd6\x1d\x0e\xaa\x1dm}@\xf7\xe3\xf2\xf6黇\x93i8\xd5z!\xb5`\x19Ԥ4\x81+\xd4\xc0;\x04O0x\x9a\xa8r\xb3w\x1a\xc8\a$\xb1\xd3\xd5*㨪\x8efg\x12\xde'\x95\xc5\nL*'\xe4\fm\xbc\x04hƃ\x15\x98\x96\x810\x102\xbaR`'\x8e!\x19)\a~\xf5\x15\xb54\xf0\x80\x94\xdc\x00w>\xf6&U\xe1\x16I\x80P\xfb\x8d\xb3\x7f\xee}s:g\n\xda+9\xe4g\x1a\xf9\xd29\xd5\xc3V\xf5\x11\xff\x0f\xca\x19\x18\xd4\x0e\bS\x14\x88\xee\xc8_6\xe1\x06~I\x98\xac[\xfb\x16:\x91\xc0\xedb\xb1\xb12u\x13\xed\x87!:+\xbbEn\fv\x15\xc5\x13/\fn\xb1_\xb0\xddԊtg\x05\xb5D\u0085\n\xb6\xce\xd2]\xee(\xcd`\xfeGc\xff\xe1\xf7'Z\xcf.H\x19\xb9\xd0_\xc9@*\xf3\x92\xf6\xb2\xb5\x9c\xe2\x00:M%:\xf7_\x1e\x1ea\n\x9d\x931\xa7\x9f\xb9\x1f6\xf2!\x05\t\x98uk\xa4\x92\xc45\xf9!\xfbDg\x82\xb7N\xf2\x87\xee-\xba9~\x8e\xab\xc1\nOW2媁\x9b\xdcbSQ\xc7`\x94\xa0i\xe0\xd6\xc1\x8d\x1a\xb0\xbfQ\x8c\xffy\x02\x12i\xae\x13ط\xa5\xe0\xf8\xef07.Ԏ\x16\xa6\xf6}%_\x17\x8a\xf6!\xa0N\x19L\x10\xd3n\xbb\xb6:\x97\a\xac=\xc1Kgu7\x15\xed\x8c\xee\xbe\xc0\x9b\x93\x85\xcb\x05\x9dơM\xceW\xae\x1e\x1er\xee,\xe1\xec\x16\xd6p\xd6s_璛\xe1\xbf$S:\xf1\xc8FG\"trԟեMoe\x81D\x9e\xcefg\xa2\xbed\xa3\xfc\x04P\xd61(\xb7\x1b7\x82tJ\xe0\x05)\x95\x81\xf61\xf5\x194`\xe2\x19\xbf\x11\xcb\xf1\xbf$\x90\xd7\xc8ܜ\xd9Y\xc1ႦW\xb2\x93Fz^\xa8U\x8f-\bE\xbc\x92YE\xa4v\xb3\xb5\xfc\xcf\xfa\x06\x82e\xb2\xb9\x94\x83\xfd\x7f\xfa\x9bIȸ]\x1c\xce#\xd5p\x87/\x17foݒ\xfc\x86\x90\xe7W>-.\v\xbd\xfdc\xe0\r\x94.^ʳIN\xfd\xce\x1cQd\xf1\xa46\xc7\\9\xae\xf6\xfd\xbb\x85\xbf\xfe\xae\x0e\xf7Zi\x8dA\xd0\xdc\xcd_i\xefޝ<\xb7\xf2\xa7\xf6\xae\xbc\x8c\xb8\x85_\x7f\xabJ(4O\xd3\xeb)M\xfe\x13\x00\x00\xff\xff--\nM\xde\n\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4WM\x8f\xdb6\x10\xbd\xfbW\f\xd2CZ \x92\x13\xf4\xd0·v\x93âi\x10\xd8\xe9^\x8a\x1ehj,\xb1K\x91,g\xe8\xcd\xf6\xd7\x17CJ\xfe\x90\xe5\xdd͡\xbc\x89\x1c\x0e\x1f\x1f\xdf.\xbd\x7f[\xffT\xbf]\x00\xe8\x88y\xfa\x17\xd3#\xb1\xea\xc3\n\\\xb2v\x01\xe0T\x8f+h\xfc\x83\xb3^5\x11\xffIHL\xf5\x1e-F_\x1b\xbf\xa0\x80Z\x16m\xa3Oa\x05ǁ2w\x00T6\xf3~H\xb3.i\xf2\x885Ŀ͍~4CD\xb0)*{\t\"\x0f\x92qm\xb2*^\f/\x00H\xfb\x80+\xf8$0\x82\xd2\xd8,\x00\x86\xbdgXհ\xbb\xfd\xbb\x92Jwث\x82\x17\xc0\at\xbf|\xbe\xbd\xfbqs\xd6\r\xd0 \xe9h\x02g\x06'\x98\xc1\x10(\x18\x10\x00\xfb\x03(P\x0eTd\xb3S\x9aa\x17}\x0f[\xa5\xefS8d\x05\xf0ۿQ3\x10\xfb\xa8Z|\x03\x94t\aJ\xf2\x95P\xb0\xbe\x85\x9d\xb1X\x1f&\x85\xe8\x03F6#˥\x9d\x88\xeb\xa4w\x02\xfc\xb5\xec\xadDA#\xaaB\x02\xeep\xe4\a\x9b\x81\x0e\xf0;\xe0\xce\x10D\f\x11\t]\xd1\xd9Yb\x90 \xe5\x86\x1d\u0530\xc1(i\x80:\x9fl#b\xdccd\x88\xa8}\xeb̿\x87\xdc$\fɢV\xf1(\x87c3\x8e1:ea\xafl\xc27\xa0\\\x03\xbdz\x84\x88\x99\xa7\xe4N\xf2\xe5\x10\xaa\xe1w\x1f\x11\x8c\xdb\xf9\x15t́V\xcbekx,*\xed\xfb>9Ï\xcb\\\x1ff\x9b\xd8GZ6\xb8G\xbb$\xd3V*\xea\xce0jN\x11\x97*\x98*Cw\xb9\xb0\xea\xbe\xf9.\x0eeH\xafϰ\xf2\xa3Ȍ8\x1aמ\fd\xcd?q\x02\xa2\xfa\"\x982\xb5\xec\xe2H\xb4t\t;\xeb\x0f\x9b/0.\x9d\x0fc\xca~Q\xcea\"\x1d\x8f@\b3n\x87\xb1\x1cbV\x9e\xe4D\xd7\x04o\x1c\xe7\x0fm\r\xba)\xfd\x94\xb6\xbda\x1a\xc5,gU\xc3Mv\x1a\xd8\"\xa4\xd0(Ʀ\x86[\a7\xaaG{\xa3\b\xff\xf7\x03\x10\xa6\xa9\x12b_v\x04\xa7&9\r.\xac\x9d\f\x8cNv\xe5\xbc&\xa5\xbe\t\xa8\xe5\xf4\x84@\x99ivF\xe7Ҁ\x9d\x8f\xa0\x8e\x95?\x10X\x9fe\x9e\xaf\xdc\fN\xc5\x16y\xda;\xc1\xf2%\a\xc9\xf2\x0f\x9d:7\x9a\xef\xb1nk\xf1\n\x1a\x80\x14\xf7\xf8\xa1\xbe\xc8x\x1d\x03̪w\x16\xc9(b\xa1Ax\x15+\x10\x93:\xc5t\xb9\xb44t\xa9\x9f_\xa0\x82_3揾}r\xfc\xc6;\x16\xb9?\x19t\xe7m\xeaq\xe3T\xa0\xce?\x13{\xcbؿ,r\xbc\x90\x0f\x97\xd4e\xe0\x1a\xc5\xca\xf1\xfa&\x86\x805R\xb2W\x97\xbb\xd9\xdc~\xcb>\xae\x84?\xc9ԕ\xda\x19[\xbe#\x9f\x17\x82ܲ\xa3\x10dJ\xb98\x10\xe4\xed\x11\x1d2\xd2\xd1\xc3\x1e\fw\xb3\x19\x01\x1e:\xa3\xbb<1\xabH\xec\x91\xc8k\x93\xcd\xe6\xdb\xe1K\xf1\x99\x883J\xae\xb2\xc2g\xba\x05\xfcE\xf7\x15˸\xb6@5\x94\xf1\x8bl\x87\x15'\xfa\x06\xe3\xc9\xf1#\xd5:ň\x8e\x87,\xf9\"\x9eNx\xa9\xf3\x8c\xe5\xfa\xc7\xfa\xe33\xf6\xf3\xfe\x18\x99\x9f\x9aʸ\x82&D\xacȴ\xf2|\x9011\xa0l\f\x97d\x94v\xfe\x9c9'j\xf6D\xf1k01\xdb\xec3\x10?\x1c\x02\x8bK\xa2+7\xe0\xf4\xc1\x96\x13\"\xe5ׅV\xd3w\x8d\xb4-B\x83\x16\x19\x1b\xd8>\x16\xbb\x7f$\xc6\xfe\x12\xf7\xce\xc7^\xf1\n\xe4f\xac\xd8\xcc\xc8H\x1e\xd5jkq\x05\x1c\xd35\x95\xcdn4\xfa\xf150\x9b\xcf\xe73\xa6\xc5#\x1a+\x94\\\x02\xd3\x02\xbf8\x94\xf4\xcb\x16O\x7f\xb5\x85P\x8b\xdd\xf7\xb3'!\xf9\x12\xae[\xebT\xf3\x80V\xb5\xa6\xc4\x1b\xdc\b)\x9cPr֠c\x9c9\xb6\x9c\x010)\x95c\xd4l\xe9'@\xa9\xa43\xaa\xae\xd1\xcc+\x94\xc5S\xbb\xc6u+j\x8e\xc6\vOK\xef\xbe+\xfeR|7\x03(\r\xfa\xe9\x1fE\x83ֱF/A\xb6u=\x03\x90\xac\xc1%h\xc5w\xaan\x1b\\\xb3\xf2\xa9ն\xd8a\x8dF\x15Bͬƒ\x16\xad\x8cj\xf5\x12\x8e\x1dan\x04\x146s\xaf\xf8\xa3\x17\xf3ދ\xf1=\xb5\xb0\ue7f9ޟ\x84u~\x84\xae[\xc3\xea)\b\xdfi\x85\xacښ\x99I\xf7\f\xc0\x96J\xe3\x12\xee\b\x86f%\xf2\x19@ܻ\x875\aƹ\xd7&\xab\uf350\x0e\xcd5IHZ\x9c\x03G[\x1a\xa1\x9d\xd7ֽ\xe2\x10\x00B@\b\xd61\xd7Z\xb0m\xb9\x05f\xe1\x0e\xf7\x8b[yoTe\xd0\x06x\x00\xbfX%\xef\x99\xdb.\xa1\b\xc3\v\xbde\x16coP\xef\xcaw\xc4&w \xd0\xd6\x19!\xab\x1c\f:#\xd8oQ\x82\xdb\n\va\xb7\xb0g\x96\xe0\x18\xe7w\x99_\xd8\xf7wG<@pM\x06\xd0M\r\x108s\x98\x03\xd0\xe9\x13\xd4\x06\xdc\x16I\xf3\xde☐BV\xbe)\x9c\x048\x05k\xf4\x10\x91C\xab3\xc84\x96\x85V\xbc\x90I\xe8\x00\xd6ݨ\xf5\x92nh\xfc\xff\x1a\xd5\x00н⯀\xf2\xa2u\xc3\xe0\xc1\xaa\x8f\xfd\xa6K\v?\xa0u\xa2\x04\x83ZY\xe1\x949\x80\xe0(\x9d\xd8\b4\xb0Q\xa6o6' \xd0\xdc\xdbn\xd2\x00J\x94\xfe\x80Z\xbdB\x11\xd1oVN\x19V!\xfc\xa4J\x1fvȜ\r\x0e\xec\xd9nU[sX\xa7]\x03X\xa7Lָ\tq\x98\x15\xe5&\xb1#\x1f\x1b\xaey\x1a}Ov\n\xb2\xc5$@\x0ed\xbf\xab0\xef9\xa1{\xf7}\bU\xe5\x16\x1b\xb6\x8c#\x95F\xf9\xee\xfe\xf6\xf1\x8f\xabA3\x806J\xa3q\"\x85\xce\xf0\xf52F\xaf\x15\x86\xaa\xbe\"\x81a\x14pJ\x15h\x83\xfd\x856\xe4\x11C8\x0ea\xc9H\fZ\x94\xae\xaf\x92\xf4\xa9\r0\tj\xfd\v\x96\xae\x80\x15\x1a\x12\x93\x0e\xa6Tr\x87Ɓ\xc1RUR\xfc\xa7\x93m\xc9\xcciњ9\x8c\x11\xfc\xf8\xf9 +Y\r;V\xb7\xf8\x16\x98\xe4а\x03\x18\xa4U\xa0\x95=y~\x88-\xe0ge\x10\x84ܨ%l\x9d\xd3v\xb9XT¥LY\xaa\xa6i\xa5p\x87\x85Ozb\xdd:e\xec\x82\xe3\x0e\xeb\x85\x15՜\x99r+\x1c\x96\xae5\xb8`Z\xcc=t\xe9\xb3e\xd1\xf0oḼ\xf6j\x80ub\x18\xe1\xf3\x89\xec\xcc\tP*\x03a\x81ũa\x17GE\xa7P\xf4\xf0\xb7\xd5GHK\xfb\xc3\x18k\xdf\xeb\xfd8\xd1\x1e\x8f\x80\x14&\xe4\x06\xa3+o\x8cj\xbcL\x94\\+!\x9d\xffQ\xd6\x02\xe5X\xfd\xb6]7\xc2ѹ\xff\xbbE\xeb\xe8\xac\n\xb8\xf6\xf4\x81BS\xab\xc9ry\x01\xb7\x12\xaeY\x83\xf55\xb3\xf8\xd5\x0f\x804m\xe7\xa4\xd8\xe7\x1dA\x9f\xf9\x8c\a\a\xad\xf5:\x12=9q^#α\xd2X\xd2\xe9\x91\x02i\xa6؈\x18\xa1(p\xb2\xf1\xf0b 8\xef\xb8\xf4e\xa3\xd3x\xd0\b\xd9\xfbܜ\x84M\xf6bj\n\x98a\xe4D(@=\x8e\xb2d\x8e\x93\x1cac\x80-&\x12N\x1c\x03}Rq\xbc\xb0\x8f;\xc51\a\x9b\xa6\x82۲`\xadĭ(\x1e\xb5RNW\xa1O\xc9\x17\x01ӊ_\xc0\x15Wd`p\x83\x06e\x89)p\x9d#\x0e\x19d\xfd\x94>\xc5x\xda(\xe0LT\xcf\"~w\x7f\x9b\"yRb\xc4\xee\xa6\xeb^\xd0\x0f}\x1b\x815\xf7\x89\xee\xf2\xdaW\xb7\x9b\xb0\x98\x8fiN\x01\x03-0P\xc0.I\x80\x90\xd6!\xe3\xa06Y\x89T\xa8\x009\xbe\xc18\xe3m\x88`1T\x1eS\v\xe9\x1e\x18\xc5N\xc1\xe1\x1f\xab\x0fw\x8b\xbf\xe7T\xdf\xed\x02XY\xa2\xf5\f\xd8a\x83ҽ\xedH9G+\fr\xa2\xd8X4L\x8a\rZW\xc45\xd0\xd8O?|\xcek\x0f\xe0Ge\x00\xbf\xb0F\xd7\xf8\x16D\xd0x\x17\x96\x93\xd1\b\x1b\xd4\xd1I\x84\xbdp[1N\xa6\x9d\x06ȼ\xe2\xb6\xf7~\xbb\x8e=!\xa8\xb8\xdd\x16\xa1\x16O\xb8\x847\x9e\xd6\x1ca\xfeJ\xbe\xf3ۛ\x13R\xff\x10\\\xfb\r\rz\x13\xc0uy\xb8\xeftG\x90\xc1\xf3\x8c\xa8*<\xb2\xaa\xf1\xe7\x93\n\x85\xeaoA\x19ҀT=\x11^0\x9d^\b\x94\xc8'\xa0?\xfd\xf0\xf9$⡾@H\x8e_\xe0\a\x10\xb1\xacъ\x7f[\xc0Go\x1d\a\xe9\xd8\x17Z\xa9\xdc*\x8b\xa74\xabd}\xa0=o\xd9\x0e\xc1**\x92\xb0\xae\xe7\x81\aqس\x03i!\x1d\x1c\xd9\x1b\x03͌;k\xad\x89\xfd|\xfcp\xf3a\x19\x90\x91AU>\x12S\xd6\xdc\bb3DcB.\xf6\xd68I\xe6\xe9\xb3m0\x1f\xa7\xa0\xdc2Ya\xd8/¦\xa5\xecX\\\xbdƏ\xa7\x94$}\x19j2\x0e\x1c\xff\xb7\xe4\xfe\xcc\xcdy\x06\xfd\x8c\xcd\xf5\xab\x8c\xb3\x9b{j\xd7h$:\xf4\xfb㪴\xb4\xb5\x12\xb5\xb3\v\xb5C\xb3\x13\xb8_\xec\x95y\x12\xb2\x9a\x93i\u0383\r\u0605/Q\x17\xdf\xf8?\xafދ\xaff\x9f\xbb\xa1A\x95\xfd5wE\xeb\xd8ū6\x958\xec\xf3\xf3\xd8\xd5*2\xab\xf1\\r\x8b\xfdV\x94\xdbT\x9c\xc4\x18{\u0099\x041a\x1eB3\x93\x87\xafnʤ\xd0\xd6\x10\xa2\xc3<^\xb0͙\xe4\xf4\xbf\x15\xd6Q\xfb\xab4؊g\xb9\xef\xbfno~\x1f\x03oū|\xf5\x04\x01\x0f6ҿO\xb8@\xcc\x1e\x06\x83\x13u\xcc0\xd6n̋\x98\xa1cU\x86\x8a\xf5/\x02\xcf\x11\xb6\xb3\x1a\x18^ӱ\xca\x023\b\f\x1a\xa6\xe9\xe4\x9e\xf00\x0f)^3A\xf9\x99Rpw\xcf\x01L\xebZdSqL䑄F\xbeO\x856\xab쩽g\xcf!H\xb8\xa0\xffxř\xa1\xec\x11@\xe07\x1dm\xf7\xb7Z9^|\x9a\x14\x9f\xd4\"ե\xc4ֆ\x10\xe7\xf9\x02j4\x86\n\x8aQ\x93V|Ԓ\xbd\xd9J\x9d\x83\x9b\xb7\xb3\xca\f\x17\xaa/\xa8+\xc3Eq\xd4i\x88\".]\x1f\x13\x85~meY*b\xa7ë\xfb\xf3\xc7{=\x9d\xe1/q\f\x0f\xe0\x9ch\xc8f{\xd7\xcaq\x8d\\i\b=qa\xa6\x8f\xdb$\r\xb9\xa7\x8e\xc4l7L\xd4\xc8!\xbd\x1d\x8c\xe7d\xa4\xf6\xa5\xacqCA\xaeյb<\x15d\x11^GϨ^\xf7\xb7#W\xf6\x8c\xcc\xd6\"\xf7\x95|F\tSʶQ\xa6a.\xdc\xe6ͳBe[\xd7l]\xe3\x12\x9ci\xa7\xddg\x82E\x83ֲ\xea\x92+\xfe\x1cF\x85:5N\x01\xb6V\xad\xeb\n\xd5AP\xb8\xb2Ѧ^V+gK\xc0\xa193\xa2\xe86Rպ\xf6s\xfa\x81\xe0\xf8\xe0\xe4Q\xad1\x9f\xea^\x13\x13\x00\xfc\x83\xc9%\x844&\xe7`]\xf4:\xeba\xf4\xa1l\x9b\xe9*s\xb8\xc3}\xa6u\xf2\xd0\xd3\xef\xbcN.\x93\xe9\xfb\xd1{Ë\xf6\x1f\x17\xba\xa4\x828\f\xb6\xaaNά\x1c\xabA\xb6\xcd\x1a\r\xe9a}ph\x87\xe1n\xe6r\xd0\n53\xe4\xe9\xfe&\xfcz\xfcT\xf3\x16\xac\xf0\xd7{ķ\x02\x01\vŷ\xa5\xe4D\xc4R\x19̄L\x98\xa6\x95A\x12\x19\xc2\xff=\xf3G\xd6N&\x8d\x1e9\xefɎW\xc4\xfd\x96v\xdd=\x7f,\xe1\xd7\xdffGb\xc3J*\x19\x90ߍ\x1f\xf1߄+\x9d\xf4*\xef\x7f\x96J\x06\xfel\x97\xf0\xe9\xf3,=\xd6=\xa6\xc7vj\xfco\x00\x00\x00\xff\xff\xbe\xf4?~\xf9 \x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xc4Y_s\x1b\xb7\x11\x7f\xe7\xa7\xd8q\x1e\xd4̘\xc7\xc4\xed\xb4\x1d\xbe\xd9R\xd3Q\x9b\xc8\x1aSՋ\xc7\x0f\xe0ay\x87\xe8\x0e\xb8b\x01\xd2l&߽\xb3\xc0\x81\xbc\x7f\x14%M\x94܋-`\xb1\xf8\xedb\xffs6\x9f\xcfg\xa2Q\xf7hI\x19\xbd\x04\xd1(\xfc\xeaP\xf3_\x94=\xfc\x9d2e\x16\xdb\xefg\x0fJ\xcb%\\zr\xa6\xfe\x84d\xbc\xcd\xf1\n7J+\xa7\x8c\x9e\xd5\xe8\x84\x14N,g\x00Bk\xe3\x04/\x13\xff\t\x90\x1b\xed\xac\xa9*\xb4\xf3\x02u\xf6\xe0\u05f8\xf6\xaa\x92h\x03\xf3t\xf5\xf6\xbb\xeco\xd9w3\x80\xdcb8~\xa7j$'\xeaf\t\xdaW\xd5\f@\x8b\x1a\x97\xd0\x18\xb95\x95\xaf\xd1\"9c\x91\xb2-VhM\xa6̌\x1a\xcc\xf9\xd6\xc2\x1a\xdf,\xe1\xb8\x11\x0f\xb7\x88\xa24\xb7F\xde\a>\x9f\"\x9f\xb0U)r\xff\x9e\xdc\xfeQ\x91\v$M孨&p\x84]R\xba\xf0\x95\xb0\xe3\xfd\x19\x00\xe5\xa6\xc1%\xdc0\x94F\xe4(g\x00\xad\x02\x02\xb49\b)\x83JEuk\x95vh/\x99ER\xe5\x1c$RnU\xe3\x82\xca\x0e|\xc0l\xc0\x95\xc8W\x06u\v\xa5\x95.\xc2R\x84\x00\xce\xc0\x1a\xa1E\"\x033\x80\x9f\xc9\xe8[\xe1\xca%d\xac\xb8\xac12ӉgK\x13u~3Xu{\x96\x83\x9cU\xba8\x85\xec7\x06\xd5\xc3sk\xe4\v\x90<\xe7\xdaHۻ\xf4\xbe\xbbt\xee\xde[#\xdb\x03\xd0\x1a\x10\x90\x13\xce\x13\x90\xcfK\x10\x047\xb8[\\\xeb[k\n\x8bD\x130\x02y֔\x82\xfa8Va\xe3uql\x8c\xad\x85[\x82\xd2\xee\xaf\x7f9\x8d\xad=\x949\xe3D\xf5a\xef\x90zH\xef\x86\xcb\x11-\x1bv\x81\xf6\x8f\x83\xbbfHWF\xf7\xf5\xfaa\xb0:\x05\xb6\xc34\x05\xbdl\x14\xb0z\\\xdf\x17}~R\xb8\xb8\x10\xb7\xb7\xdfǰ\x91\x97X\x8beKi\x1a\xd4\xefo\xaf\xef\xff\xbc\xea-\x034\xd64h\x9dJ\x91,~\x9d\b\xdeY\x85\xbef/\x98a\xa4\x02ɡ\x1b):E\\C\xd9b\x88\u03a2\b,6\x16\tu\f\xe6=\xc6\xc0DB\x83Y\xff\x8c\xb9\xcb`\x85\x96\xd9\x00\x95\xc6W\xc1۷h\x1dX\xccM\xa1\xd5\xff\x0e\xbc\x89}\x8f/\xad\x84\xc36\x9c\x1e\xbf\x10ﴨ`+*\x8foAh\t\xb5\u0603E\xbe\x05\xbc\xee\xf0\v$\x94\xc1Ol!Jo\xcc\x12J\xe7\x1aZ.\x16\x85r)s妮\xbdVn\xbf\bIH\xad\xbd3\x96\x16\x12\xb7X-H\x15sa\xf3R9̝\xb7\xb8\x10\x8d\x9a\a\xe8:d\xaf\xac\x96\xdf\xd86\xd7\xd1E\x0f\xeb\xc8\xe9\xe2\x17\xf2\xca#/\xc0\x89\x05\x14\x81h\x8fF)\x8e\x8aN\xe1\xf1\xd3?Vw\x90\xae\x0e\x8f1\xd4~\xd0\xfb\xf1 \x1d\x9f\x80\x15\xa6\xf4\x06m|č5u\xe0\x89Z6Fi\x17\xfe\xc8+\x85z\xa8~\xf2\xebZ9~\xf7\xffz$\xc7o\x95\xc1eH\xe7\x1c/}Ö+3\xb8\xd6p)j\xac.\x05\xe1\xab?\x00k\x9a\xe6\xacا=A\xb7\x12\x19\x12G\xadu6R\xb5p⽆\x15\xc0\xaa\xc1\x9c\x9f\x8f5\xc8G\xd5F\xe5\xc178\xfc\x80\x18\xd1g=\xd6Ӯ\xcb\xdfZ\xe4\x0f\xbeY9cE\x81?\x9a\xc8sH4\xc0\xf6a\xeaL\x02\xa7;9/2\a\x8a\x94#\xa6\x00U:\xbc+\xd1b8éQ\xe5l^\x86\x943vόc\xb6\xccF\x1cN\xbf\xfb2\xad=\x80\x1f\x8c\x05\xfc*\xea\xa6·\xa0\xa2\xc6\x0f\xe1/ٌ\xa2\xa8\x8e\x03G\xd8)W\xaaa\xd2:h\x80\xad\xab\x15{\x17\xc4u\xe2\x01\xc1\xb4\xe2z\x84J=\xe0\x12ބJ\xf0\b\xf3\x17v\xac_ߜ\xe0\xfa\xa7\xe8@o\x98\xe8M\x04w\xc8w]\x8f<\x82t\xa5p\xe0\xac*\n<\x16\xa2\xc3/\x04o\x0e\x89߂\xb1\xac\x01m:,\x02c~\xbd\x18\x8fP\x8e@\x7f~\xf7\xe5$⾾@i\x89_\xe1\x1d(\x1du\xd3\x18\xf9m\x06w\xc1:\xf6ډ\xaf|S^\x1a\xc2S\x9a5\xbaڳ̥\xd8\"\x90\xa9\x11vXU\xf3XoH؉=k!=\x1cۛ\x80FX\xf7\xa8\xb5\xa6*\xe3\xee\xe3\xd5\xc7eD\xc6\x06U\x84x\xc7\xd9i\xa3\xb8j\xe0r!\xe6\xbc`\x8d\xa3\xa4\x99>\xf2\xd1|\x9c\x81\xbc\x14\xba\xc0(/\xc2\xc6s\x16\xca.^\xe2\xc7\xe3ԟ\xbe\x89\x12`\x188\xfe\xb0$\xfaD\xe1B\xa5\xfa\x04ẽ֣\xc2=\xf85Z\x8d\x0e\x83|\xd2\xe4Ģ\xe5\xd88Z\x98-ڭ\xc2\xddbg\xec\x83\xd2ŜMs\x1em\x80\x16\xa1=]|\x13\xfey\xb1,\xa1\x93}\xaa@\xbd\x06\xfb5\xa5\xe2{h\xf1\"\xa1R\xad\xf8\xf4\xc2\xf9t\xe70\xa0i\x8c\x1c\xac\xf4-a\xb0y|\x9a\xc1Fo \xd6\xc5;n\xab´\xe59\x8dU\x9c\U0003468d\xfe\xed\xd2܇\x8b\xdb\x17\xb7V\xb9\xe1±?M~\xfc\x95/\xc7'\xc2\x1c\xc3ʈΩ\x1aC\xbf\x12\x87S;A钩\x17\x85\x0e\xbfx4\xc4Tf\x872\x94u\\un\x84\xaaP\xc2a\x9e\rw\xdca\x86\x86\xfeb\xaa\x8aI\x8c<\xa1\f\xbd\xe7\x04\xe8\xf1\xb94#\xe36~\xce,F\x14\xdaW\x95XW\xb8\x04g\xfdx\xfb\x11\a\xaa\x91H\x14\xe7<\xe8\xa7H\x15;\xbe\xf6\b\x88\xb5\xf1\xee\xd0\xf2\xb5\xaeԪ\xe2\x82Z+x^\xdbY\n:\a\xe5\x96i\xa6,\xee\xe0ԏ\x9b\x1c\x7f\xa8}=\xbef\x0e7\xb8\x9bX\x1d\xcd,\xbb\x9b\x97Ʉ&\xf6~\b\xd6\xf1,\x05\xb4\x17\x9d\xd3AK\x06\xa5\xa9\x92u\x1b'*о^\xa3eE\x84Ai\xd2H\n\rS=t\xa8\xbd\x8f\x9a\xbc_=(#\x1b\xb8\x8a\x81m\xb7\xa1`\xa3\x17\xf4\x13m\x95Q\xac\xacYu\xc4(\x91\xb1Y\x01\xa01\x961\x89CZ\x02\bk\xd8[\xad\xc9W;2\xf5Cl\xa9\x8dJK\xf2\xd9\xf8\xe0\xfa\xf0\xae\xfe\xbe~\xb7\x02\x10\x9e\xf2\xf1Ϫ\xa3\xc0ع\x06L\xd4z\x05`\xb0\xa3\x06<\x05V\u0093\xb3A\xb1\xf5\x8aB} M\xde\xd6ʮ\x82#\x91\xdc\uef0d\xae\x81\xd3F9݇T\xd2\xd9dC\x9b\xc1\xd01oi\x15\xf8\xd7\xc5\xedO*pVq:z\xd4K\x81\xe4\xed\xa0\xcc.j\xf43\x85\xe4 \b먁\x9b\x14\x8bCAr\x05\xd0C\x90c\xab\x00\xa5̠\xa2\xbe\xf5\xca0\xf9+\xabc7\x80Y\xc1\x97`\xcd-\xf2\xbe\x81z\x80\xbd\x9eA\x96u\a\xc0>\xec\xa8_\xf319\x97\xc8EP\xb6\x0f\xefK\xd8bO\x1d6\xbd\xa6ud>\xdc~\xbc\xff\xee\xeeL\f\xe0\xbcu\xe4Y\rP\x96oTC#)\x80\xa4 \xbcr\x9c\x19~\x9b\f\x16-\x90\xa9x(\x00\xefiȟd\x1f\x03\xd8-\xf0^\x05\xf0\xe4<\x052\xa5\x9c\xce\fCRB\x03\xb6\xfdB\x82k\xb8#\x9f\xcc@\xd8ۨe\xaa\xb9\x03y\x06O\xc2\xee\x8c\xfa\xeb\xc9v\x00\xb6٩F\xa6\x9e\xcfӗ\xf16\xa8\xe1\x80:\xd2\xff\x01\x8d\x84\x0e\x8f\xe0)y\x81hF\xf6\xb2J\xa8\xe1\xdaz\x02e\xb6\xb6\x81=\xb3\v\xcdz\xbdS<\xf4\x8e\xb0]\x17\x8d\xe2\xe3:\xb7\x81j#[\x1f֒\x0e\xa4\xd7A\xed*\xf4b\xaf\x98\x04GOkt\xaaʡ\x9b\xdc?u'\xff\xe7\xfbn\vo\xcfb-L\x06\xf6\xca\xecF\x1b\xb9\xb0_` U6\xa8\x00\xd8\x1f-Y\x9c\x80N\xa2\x84\xce\xe6\xe7\xbb\xcf0\xb8\xcedL\xd1ϸ\x9f\x0e\x86\x13\x05\t0e\xb6\xe4\v\x89[o\xbbl\x93\x8ctV\x19\xce\v\xa1\x15\x99)\xfc!\xb6\x9d\xe2\xc4\xfb\x1f\x91\x02'\xaej\xb8\xca\x03\x05Z\x82\xe8R\xe5\xca\x1a>\x1a\xb8\u008e\xf4\x15\x06\xfa\xcf\tHH\x87*\x01\xfbu\x14\x8cg\xe1T\xb9\xa06\xda\x18\xc6\xd53|MGН#\x91\xe8K\b\xa6\xa3j\xabD\xee\r\xd8Z\x0f8ӯ\xcfL/\xb7n\xfaZ\x14\x0f\xd1ݱ\xf5\xb8\xa3O\xb6\u061c*Mb\xfbq\xe9\xcc\x10\\\x9a,\xa5\x8diYqf\x1b\x80\xf7ȣ\xfeeT\xe6i\f,\xe6\xf3\x02\t\x99\bL\xedl\xd0\b\xfa%W\x94\x11\xc7\v9]/\x1cI)\xed\xed#\xd8-\x93\x19\x1b\xedc]Ȥ%\xf0Ѽ*\xd8rU|\x94\xa9\xf0\xb6\x8a\xfc\x85@7\x13\xf5\x01\xf7mԺ\xb7U\t\xdb9d\xd5jZv\x99\xbeT6\xaaX9\x96\xde\xffv\xbc\x0f鞢\xa7\x9b\xedB\x06\xf7\xe7\xda\xe3\xc2)\x82>\x94\x94\n\xf8\xf3;\xfa\xfc\xebk%\x80\xb3\xb2\x0f\xa2/\xe8\x90\xf2{E\x0e\x89r\xe5i2A\xab\xe5\xf6\x98\xe8,U\xdbDe\xca\xf1d{\x82\xdfW\x8d\x0fF\x8e\xe15\x03$\x1f\x18\xc0\x16\xd1{2ܛ\xc97\xea7\x8f\x10\x8d\x81G\xed\x93^\"\x17*\xe0\xd3\xfc\xc4\x10X2\x06\x9c\x04\xe3~{\xc4\xe9-\x94I[괭\xf5\x1dry\xeaT\xc9\xd0L#=)\xb1\xd5\xd4\x00\xfb8\xdf~i\xaeP\b\xb8\xbb\x94\xddu\xd1*\x97m\x7f\x04\xb0\xb5\x91\x9f\x81\x9e\xf7\xf3(\xe0\x02\x1d\x17\"u{\f\x97\xe2\xbcM:K\x05\xf14\xbf/\x87@&vs7\x15\xdc\xd0\xe3\x82tC(\xe7}\\\xc1\x8d\xe5\xe5\xadg3\\슙0\xa4w\x89\x1c\xf1\x1cJ#\x8f%\xb1}zg5\xf0\xf7?\xabSc\xa1\x10\xe4\x98\xe4\xcd\xf4\xef\xe1͛\xb3\x9f\x81\xbc\x14֔\xc7{h\xe0\xb7\xdfW\xc5\x15\xc9\xfbၟ\x84\xff\x06\x00\x00\xff\xff\xe08S\ft\r\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xec\xbd}s#\xb7\x918\xfc\xbf?\x05j\xe3z$\xfd\"Rvr\xc9s\xb7\x95zR\x1b\xadl\xab\xe2ժV\xca\xe6I9>\x1f8\xd3$q\xc2\x00\x13\x00C-s\xbe\xef\xfe+4\x80y!\x87/\xc0P\xda]\x87\xb8\xaa\x9c\x97\x9a\xe9\x01\x1a\x8d~G7-\xd9{P\x9aI\xf1\x92В\xc1\a\x03\xc2\xfeK\x8f\x1f\xfe]\x8f\x99\xbcX|\xfd\xc5\x03\x13\xf9KrYi#\x8bw\xa0e\xa52x\rS&\x98aR|Q\x80\xa195\xf4\xe5\x17\x84P!\xa4\xa1\xf6gm\xffIH&\x85Q\x92sP\xa3\x19\x88\xf1C5\x81I\xc5x\x0e\n\x81\x87O/\xbe\x1a\xff\xbf㯾 $S\x80\xaf߳\x02\xb4\xa1E\xf9\x92\x88\x8a\xf3/\b\x11\xb4\x80\x97D\x816R\x81\x1e/\x80\x83\x92c&\xbf\xd0%d\xf6c3%\xab\xf2%i\xfe\xe0\xde\xf1\x13q\x8bx\xe7^\xc7_8\xd3\xe6\xcf\xed_\xbfg\xda\xe0_J^)ʛ\x8fᏚ\x89Yũ\xaa\x7f\xfe\x82\x10\x9d\xc9\x12^\x92\x1b\xfb\x99\x92f\x90\x7fA\x88_\x13~v\xe4g\xbd\xf8ځ\xc8\xe6PP7\x1fBd\t\xe2\xd5\xed\xf5\xfb\xdf\xdeu~&$\a\x9d)V\x1aČ\x9f\x1ba\x9aP\xf2\x1e\xd7f'\x80\x9b@̜\x1a\xa2\xa0T\xa0A\x18M\xcc\x1c\b-K\xce2Db\r\x91\x109\xad\xdf\xd2d\xaad\xd1@\x9b\xd0\xec\xa1*\x89\x91\x84\x12C\xd5\f\f\xf9s5\x01%\xc0\x80&\x19\xaf\xb4\x015\xaea\x95J\x96\xa0\f\v\x88u\xa3EG\xad_W\xd6rb\x97\xeb\x9e\"\xb9% pS\xf6(\x83\xdcc\xc8\xce\xd6̙n\x96\xb6\xba\x1c\xbf$*\x88\x9c\xfc7dfL\xee@Y0D\xcfe\xc5sKw\vP\x169\x99\x9c\t\xf6\xcf\x1a\xb6\xb6\v\xb5\x1f\xe5Ԁ\xdf\xeff0a@\t\xcaɂ\xf2\n\xce\t\x159)\xe8\x92(\xb0_!\x95h\xc1\xc3G\xf4\x98\xbc\xc1\xed\x11S\xf9\x92̍)\xf5ˋ\x8b\x193\xe1\xfcd\xb2(*\xc1\xcc\xf2\x02\x8f\x02\x9bTF*}\x91\xc3\x02\xf8\x85f\xb3\x11Uٜ\x19\xc8L\xa5\xe0\x82\x96l\x84S\x17x\x86\xc6E\xfe\xabz\xdbN:s5KKy\xda(&f\xad? \x99o\xd9\x01K\xf0\x8e\x96ܫn\x15\r\xa2\xedO\x16;\xef\xae\xee\xee\xdbt\xc6\xf4*\xf6\x11\xef-\xe2k\xb6\xc0\"\x8c\x89)(\xb7\x89Hm\x16&\x88\xbc\x94L\x18\xfcG\xc6\x19\x88U\xf4\xebjR0c\xf7\xfd\x1f\x15hK\xd0rL.\x91\xa9\x90\t\x90\xaa̩\x81|L\xae\x05\xb9\xa4\x05\xf0K\xaa\xe1\xc97\xc0bZ\x8f,b\xf7ۂ6?\\}\xd8a\xad\xf5\x87\xc0\xbc6\xec\x97?\xfdw%d\x9d\x13c_cS\x7f\xcc\xc9T\xaa\x0es\xb0\xaf\x8c;@\xfb\x0f\xad\x1d\xee\xf4[\x0e\xb6\xfa\x97\x95\xa9\xfc\xa9~\xd0ҏ\x9dD%\xd8?*@\x16\xe7N,\xac\xb1\x945\x90$\xcc\x0f\xc9b\xbc\xf6\xf7\r8\xb5\x03>d\xbc\xca!\xaf\xb9\xed\xdaZVf|\xb5\xf6\x02\x8a#ʄ\xa5\x7f\xcb\xfe\xed\xb4E\xf3W\xcbN{fL\x15\x10K\x81L8x\x84\t\\l/\xa6\xed`\x06\x8a\x9e\xc9m]\x1dA9G'\x1c^\x12\xa3*\u0600\x19\xaa\x14]n@L\x90\xcd\xfb\xe2\xa5~\xde3\x04\xce2h\v\n\x87\x1a'd\xa8Z\x9f\x11\xf9ı´ega\x95\xb7\x92\xb3l\xb9\x135}/\x85\xe3\xe6\x0f_\xa0\xe0\t\xcc\xe9\x82\xc9J\xf5\xac\xc9\x1eI\xfb\xecC#I\x1bn*-3\xf3P\xf2\xb4\x15\xf7bk.\xe5î\xcd\xff\xce>Ӱm\x92\xa1Z\x17֢\xfcv{):\x01\x02\x1f \xabL\xcf4\t\xc9+\x94 R\x91Rj\xb3y\xe373\x1f\xe2\xf8\xc1&\xaa%ۨfme\x9eW\x86\xad\xb3\v\xed\xf0M)\xc0ε\xb0[\xd7<\xabd\xe5\x9e]\x15p-\x8c\xf7c\x84L\xa8\x86\x9cHO\xf6\x15\a\xed\xbf\x95\xe3\xf67\x8c\xe5|#\xe8z\xf1N\xd5\xe0t\x02\x9ch\xe0\x90\x19\xa9\xd61\xb9\x0f>\xdd؇Yn\xc0c\x0f\xdb\xec\xd2\x7f\xb3\xb0- \x89%\xf3\xc79\xcb\xe6N\v\xb0\xb4\x89pH.A#簚\xear\xd3\"ɮ\xbd\xf7\x1f\xd9\xc6;\x9a\xb1\xe3L\xad\xc2\xeb\xe3'\xcd\u0603\xdf6c\a\xe7]\xe3,\xfe\xf7^\xd1ٌ_&b\x83(I \xda\xeb\xb5W\x0fK\xb4hUYm\xffzJ\xa0(\xcd\xf2\x9c0\x13~\xdd\x05\x91r\xde\xfa\xfeg\xbc1\xf1\x14\x7f\xbd\xfa\xe6A)~\xeb\xae\xec\x82hw\xa5\xfe\xfcg\xb8)(,\uef2c\xd8{C\xbeo\xbfuNشސ\xfc\x9cL\x197\xa0Vvf\xd0y9\x042\xf6\x91wv\x14\xd4d\xf3\xab\x0fV\xb3э\ajO\xbc\xac\xbe\xect\xe2`$t\x05\xf3\x0e\xb8\x04\xedW\xa6\xa0pv\xf1=b\xb3\xf9\x05\r\x8aW7\xaf!߆\x1e\xb2\x1f\xe5\xad-\xe4\xd5\xcad۟\xf6\x8a\xfe\xbe\xcb\xf0\xaaOm49\x8f\xc79\xa1\xe4\x01\x96Nc\xa1\x82\xd8͡\x06\xf5\xdd^\xf3i\x1d9\xe8zq\xea1,\x11\x8c\xf7\xa5\xec|{_Rp\xe3\x01z\xf4\xfd\xbe\xd1A\xa0\x9d\x93\xb7p\x1d&\xed\x0f\x88\b\xb4\xbc\xf7G\x1eA\xbfX\xe0E\xbb\x17G\xf6g$a\x04\xdc',\xb3\u07b6\x96\xff\x107\xf6D\xbb-\xb2\xa7`\xce\xca=\x17\x8a\xeeC\rxZ\x82g\xec=\xe5,\xaf?\xe4\xe8\xfeZlֆ\xbb\xe3F\x9akq\xeeL2\x8dT\xf2Z\x82\xbe\x91\x06\x7fy\x12t\xba\x89' ӽ\x88\xc7K8\xb6m\xf1\xd0v\xb1\xedA\xdcn\\;OJ\xbd=L\x93ka\r\x17\x8f\x0ft\x98\xba\xcfm\x97\x0f\xddQT\x1a}hB\x8a\x11\x8a\xcaqߗ\x1c\xb2\xf7\x04)UgG֧V\x7f\xd4}pO\xb0\xf7V\x92\xb8\xf7\x9d\v\x98\xd3\f\xf2`m\xa2\xe3\x92\x1a\x98\xb1\x8c\x14\xa0f\xdb\x04G{\x94\x96\xbf\xef7\x85=\xb9\xae\x1b\x91\x14\xb6\x9fh\x0fó\xee|\xf7dF\xf6\xe4\xee\xf1T\xd8읏n\xf0Wn~t\xf7\x8aPĢ\xfe\xb1\x13\xbb4\xcf1\xb8D\xf9m\x04Ǐ؋u\xd9\xef&\xe6$dAK{~\xffNJ9$\xe8\xff%%ej\x8f3\xfc\n\xe3D\x1c:\xefz\xcfX\xfb3\xf6\vL\x13\xbb\xbf\v\xca\xd7=\xe1=\x8b\x93\x96\xb7\x00w\x82\\N\xd74\x96s\xf28\x97\xda\xc9\xd4)\x03\xde\xe7\xb2\xe9\x0e\xa6ɋ\aX\xbe8_\xe3\x03/\xae\xc5\v'\xe0\xa3\xd9M\xad-H\xc1\x97\xe4\x05\xbe\xfbb\x88\x12\xb4'%\xee\xf5\x98\xe8\xf5s7\xa3C\x16m_w\xe3\xe4\xf6j\xee\xb6Y\xefE\x87\xa5\xd4\xe6\xbb~\x87݆\xf9܆7\xba\xbai\x8f\xdfk\xa7\xce\xee}X5S\xb5\x9a\xdcԀ\xf2N<\xc7h\x83\x050\xd06\xda夫\x1dt\xb4\xf6\xacZ\x04\xef\xa0\n\x17\xf3\xd8g\x8a1Z\xa3\xc5K\xa4\xbe}\xf5\xa1\xe5c\xb4'\xd4\xfe\xbb\xbd\x90Ck\xb5\x99,\n\xba\x1a\xe5\xdbk\xaa\x97\xee\xcd@\xd3\x1e\x90\xdb}5\xab\xf0\\\xee\xaf\xee\x05\x1a\xc2\xf8\xde#3s&\b\r\xc7\x1f\x94'(JJ\xb9\x9b\x13\xb91\xa7\x9aL\x00D\xed\x1b\xff\x14\xe4u\xc1\xc45~\x80|}p\xf9N\x1at%mg@u\xbd\xa1\xf5\x0f(q\xf6U\x8ddN\x1e砠C\x15\xeb\x0eo\xab1\xee\tRH\xd3\xf6+X\xb8\xa5\xccO4\x992\xa5M{\xa2\xfb\x12\\\xa5\xf7%\x87\xc8\x1d\xb6\xab\xbbg\x05\xc8\xca$\xec\xc1U\xf3v'@[\xd0\x0f\xac\xa8\nB\vY\xed!\xdcݰ\xf2\x85\x15u\x14\xd5\xef\xc0#e\xa6\x8e'\xa1\x87\xc5H\xbbK%\a\xb3\xef\x16O`j\xd9Q&\x85f9\xa8\x10\xe5w;ˤ=\xb8S\xcax\xd5\x17\xbe\xe9\x1b\xb1f\xaa\xb8R*\xc9J}\xeb\xdely\r\xe7\U000b12e0\xbdQ0\xa7\v lJ\x98! 2\xbb/\xa0\x1c\xcb\xc6Oxd j\xf6&\xcb\xfd\x18\xbc\x1d \xaab?\x04\x8c\xf0d3\xb1\xd5)\xd6~\xfc\x1b\xca\xf8Sl\x9b\xa5\xbc\xf4\xa3\xf1\xd7\xe6\xedg9\x1a5S\xd9_\x84M\x80\xbc\x03\x9a/\xc3\xf9\xa0\xc6XS\x15i@\x12U\x896G|\x82\x93\x11c\xdf\xf9Y\x1c\xd2pc\x82\xed\xb1\xb1+\xfe|f\xdaڎ\x05\xf1\xa4ڎ\xfd@-\xe8R\\3\xd7\x1d\x00VT\x06\xc5\x19\xe7^SM\x84\xe63\x01k\xa0B\xee\x9c^V|z=\xda\xe5.m\b\x83\xf7\xae.FuYq\xf3zC\xb3\x95\xef\x17}\x04\xbc\x83w)+\xf2H\x85\tD_+s\xa5ܓ\xeacw\xd5\r\xaaf\x11O\xaf%\x13\x06\x955d\xf4\x810j\x89\x19f\xfbNڍ\xfb\xae\xeaT\xd0\x19\x9c\x9chr\xf9浥\x16\xabx\x10\xb6\xaf\xe2\xe3\x06Z\x89\xcc\x05cK%\x17,\xb7\xda\xd3{\xaa\x18\x9dpk\aOA\x81\xd8\x15[Y\x1d_\x9e\xbe\x7f\xf5\ue9dbWo\xae\xce\xd0z\x86\x0f%\x15\x96\f+\x1d\x04z\xbd\x8c\x93\x938\xd8 \x16LIa\xf1\x89\x8eAJ\x16a\xb6Y\x9d\x7fg\xad-\xbe\x80|_\x0fn@Fk\xc5\xc1\x17\xc2DY\x99\xe0 }d|?\xf9\x15\xc6\x04H%\xb29\x153\x8b\xd7ײ\xb2\xf3\xfc\xf2KĊ\x82\xbc\xca\xf0lF\x81\xa4\xe1<}y\xee#Z\x94s\xf9\xa8Q\xbc\x80\xceh\xb9\xaf\xc1\xd0^w{\xcb\xf4R\x18\xfa\xe1%ac\x18\x93\x17_\xb6\xfe\xf4\"\n\xaeŖ\xa5*\xbbL\x17\x92pX\xe4̀\xa2\x9c\xbchC\x8e;\tWv\x9d\x90\xb7\b\xd4}M\xc0\x02\x943\x05\x1c\xc9\xc5Q\x80\x82\x19U9\a\xad-\xdb}\x9c\x83\x99\x83\xf2\x9e%Od\x10\xe3xvC*{\xbez\xf3C\x9b\x8c\xd0(\x88!{\xb4I\xda\x1a3y\x91\xcbL_\x18\xaa\x1f\xf4\x05\x13V\xaa\x8erj\xe8\xa8\xc5w/\x9c@\x1cy\x11=\n\xc6\xf4\xa8>\x8e\x17\xbfR\x95\x10L\xccF\xb4~\x8a\x89\x11\x1d\xe99p~\x121\xcb(\x89\xe1F\xb4\xc9\xdb~-&\xc6\x10\xe9\x9bp\xa3\xcbԯj\x1e\xee\xbe<&7\xd2lKB\xdb\x0e\xe2fɰ\xc2\xed\xa3\xb5\x85u\xc9p\xe4\xf6=\xaf\xc5q{\x10\x8bdN\xff\xbd7\xc2Z\xac\xa8\xde\xf38:4\x12\xf3\x0e\x98\xe8\xf2\xb9>\xc5\xe0i1\xdfu\f\x8a\xc5{\xdaM\xae\x10\xed\xc5FA&\xcdq\by\xdb(\xd9j\xbb6\x8e-\xa6\xd8jn슟\xf5\x8f\xf5\xa8\x9a\xbf.\x92\x8e\x0f\xd2\xc2ɘ\xbc\xf1y\x06\x94\\\xfet\xfd\xfa\xea\xe6\xfe\xfa\x9b\xeb\xabwqH!\xe9g\x87\x84ԑ\x81\xa89\x19j!\xba\xb1\xdbNL\x00Z*X0Yi\xbe\xac\x93܇\x1f]7VO\xaeO,[\x12\rj\xc1\"\xb5\b7z\xa7\xb6b\xd8&\x80=\xac\xc2\xe3\xc6\x13\xa8=n\xecT~RHk\x8bq\x9cHXOa\"\xbb\xb1\xc3PN\x80xX\x05\xaa5˭jT\x02\xd0\xedf6\xd9;}\xb1=P\xfdz\rSZq\xe7s{\xf1b\x1c\xa3˸1\x94\xc5~\xa3\xe4\x9ea\x94\xf6\xe8\xb0\xd9;w\r+\xc4\r\x0e#\x84N|zlG\xedБ\xe6\x9a\x1b\xccgP\x06\x9b2*{\xae\x19\xe9R\x9e\xb8\xc0\xf4\x94\xcd\xde\xd0\xf2ϰ|\a\xd3\x14\x10\xabh\xc7\xccY\x9fd\x1ak\x1a4\x03\xb5\x1e7\xb5\x14\xae8\x14/$&\xaf\xb8otpr\xefs\xa0Q\x87\xb5\xe8I[\x12\x19v\xb0\xc2H\xd3\xee\xc2\xe8\xaa2-5/\x19\"\t\x9c\xd5\xeck\xb8eRdP\x1a}!\x17Vw\x80NjG\xa9\x1e\xac%\xf6\xc8\xcc|\xe4\xa2b\xfa\x02/\xe3\\\xfc\n\xff߀\xd9ݿ}\xfd\xf6%y\x95\xe7D\"\xab\xad4L+\xee\x92\xef\xf6\xce\xf7\xed\x1bM5\x85s\xbc\xd1\x7fN*\x96\xff1\x9eنq\x00ڐ\xa5\xcb\xc7<\x10}\xdca<\x7f\x19\xa4\xd4\x00\\Y\x16^s\x04\"\x15\x06\xe1\xf6I\x86\xdd\xfd\xfb\x18\xff\xe3\xff\x9c\xfd\xf1\xec\xe7\xf0\x8f_\x9f\x9d\x9d\x9e\xfe\xf0\xe77\xdf\xde\xdf^\xfd\xc8\xce~\xfeATŃ\xfb\xd7ϧ?\xc0Տ{\x029;\xfb\xe3\x97\xc9S\xfe0j<4#&\xccH\xaa\x91#\x82\x9d%\x1f\xb6\x8d\x80\xdcC\xf1\xa4wA\x13\x19*xI[c\xfb\x88\xacc\xa8j5\b\r\x035+\r\x99\x02\xf3\xe9\xf9\x9cݼ\x82\x1a\xee\xee2\xd5\x06\xff/\xc6\r=\xdc\xf4thj\xec\x16\xac\xf2H0@?\x00,\x86\xf6\x17XM\xc2\x7f\xe1\x01\x12\"\"a\x1c]\xe5GW\xf9\xa6\xf1Kw\x95߹\xf3\xd3\xf8\xc9\xd1\xdb=\xecl\x1e\xfd\xe4I\xd2.\xf9\xe5\xb4պb\xe4Q\xaf$\xce01\x9706\xb4ߛOؔ\x93#\xa5,+N\xf7\xbe#[\xcfc=sh=\xb90\n\xa6\x17\xafMy\xd0&5ݥ\"D\x1f\xc1\xf5\\7\xf2\x8as\u0084\x13\x92\xf8\xb1\x94[5\n\x9cׁP\x97\xaf\xb8\xb0hx\x9c\x83H\xbaa\xe9\x06\xd3D\x1b\xaa\f\x13\xb31\xf9\xab\x85\xe5\xb41\x9f\x8b\xc2\x04)*nX\x19\x99\x90T[Xu\x85\x12B\xb5\x96\x19\xa3\xc6c8Z\xa0r\xaaM\xd8\x12L\xcb1\xf4\x013.3\xc8Ad\x80\x15\xad\xaaH9\x18\xf6|\xb2\xb4\x18\xbd\x12\v77J\xf2ʥ\x14C4\xf7\xe9\x9f\xdb\xc7Nw\xb5\xc7ק\xd64Y\xaf\x91L\x11}\xdc\x0e\x86\x9c6\x05\xc5\xea\xf8n\x1c\xbct\x15\xbb\xce~I2C\xd6t\xeb&>]k\xc6)QU%\x8bg\xce\x02JWs7\xaa\xb8\x8d\xa2\x9a\xa8/|j\xea퓨\xb6\x87Tk\a\xaa\xb4\xc3\xd4\xd9m\xaa\xec\x00\x8b\xa79Q\x87H\xd6\x18\xa6\x80\x0eP\x02K\x05S\x16yK\x88\xac]\x05\x17\xf5\x1e\x11\x96\x830lʒ\xec\x04\xab3)(A`\x9a0\xd0l\xee\x8aa\x8an\x92M\nM\x7f\x02\x19\xfa\xcesp\x18\x86~\xb7\xe2\xe78r\xf3#7\xdf2\x8e\xdc|\xfb\xf0\xc7\xe93f\xe5\xcfh)\xe3\xcd\xe5\xf4\x1b֗\xdd+\xd0\xc8\x14\x9c\xcf0Ϊ\xdb\xfb\xc86\x15V.\xf0\x8bq'\x13\xab\xc1\xe2鳆d-\xe7\\U}\xf9H\xe6l\x16\xeb\x14\xe3\xb0\x00\xeeU|RPAg\xae\xa6\xa6\x91!Z\x17{A\xc2r%\xc5\xf2\xb5\xfb\xe5h\xddZN\xc5%\x8d#\xe7\xa6o\x9e&\x9c=\x00y\r%\x97K_:S\xe4\xe4\xcePc9\xd3\x1d\x98\xb8\x1c\xb8$\xfe\x81\xab\xb9\xad8\xdf\xd4Eg\xf3\xe8R\xdf5\xd2\\YqNJ\x045&o\x05\xc4Ff^\xf1G\xba\xd4\xe7\xe4\x06\x16\xa0\xce\xc9\xf5\xf4F\x9a[gq6WT\xe2ί\xf4@\t\x9b\x92\x97\xae7\x1c1t\x86ދ\xba\x90]\x1cQ\xa8\xceĜ\xbaV\x9f\xae\xaad\x92\xea0\xa7\"砰p\xa1w\x03v\xe0\x1bP\x05\x134\xb6l\b\xa93\xbc\xd0k\t9\xa1Y&U\xee\x8b\u0085\x12_T\xc5+\xfd5\xc7Cu\xa9%yVS\xf6\xa2!O\xb8\xcc\x1e4\xa9\x84a\xbc\xa9\x13\x19\x8aD\xea\x04\xf9NRe|\xfd\x9f\xa3\xfaL\x8c\xb01\xd9ů\x9a?\xe1\x0f\xb1\xfa\xef\x10\xe3g\xbf¾\xebc\xbdԯ\x1e\x9czD\x91\x97a\xd52\xfa\xb0g\xa1\xb8\xee\x18\x9a;\x90P\xa6\xa7=\xb6\x14\x15N\x8e\x01\x86\xb2\xb3\x9c\thW\x17fX\xb14=\xb4\xd8>V\x8eIx\xcb1=8\xcb\x14v\x00Y\xb6*O\xba\xb9\x0fI\xb2WR\x1arzrqr\xb6\x16l\x8a,R\xd4\x1eS\xc6\xc1\x89\xbcP\xff(lV2H͊\x92/q\x7fNr\xec\xb7䯩\xaa*-vK\x90\xd3\xd8]\x0e\xb5\x9aΉ\x96\xc4(\x1az\x00\xa4\xcf\xd5B\xb3\xc0\x8d\xaa\xbc\x02qz\xf2\xf3\xc99\x01\x93\xa5\xe6\xe9\x12\xf2(ʼnA2\x1a\x93{I*\xddL<\x19\xe6RVD\x80\xbb\x9f\x0f\x1fJ\xce2f\xf8\x12eo2LY\x19W\x1a\x11\xdb\x17b\r\xac\xab\x0f\xcc\xf8\xfb3\xe9`\xa7\xe4+<\xedN~\x13j-\x94\x05\\́r3O\xbfwg\xe9RH1\xfa'(\x89嵄\x87\x98\xeauI\x88i\xb5\xc7\x012AR\xcc\xfbշ\x13\x93\v\xac\xd4\xfe\x16\xa2\xf5@\xb2\xd6/\xf4\xfe\xfe\xf6[0\a\x10{vF!o\x1e]͠\xa6R\xf5\xf4\x00\xde=\x86ʿ\xb9\xd4I\x98!\xeb\xddT\xb5q\xbd!\x9c\xe5 \xd2|\xc1n\x18\xd9M\x17\xf6\x99\x86\xe4\xfa6=A\xeao\xb2\xb2ؚ\xd0\t_\xd65^5\x18\xf2\xc2N==\x1d\x99\t\xdc\xcf\xef\x80\xe6XUWh\x034\xa9L\t9\xc4Qk\xcd\xe50J\x8d\xeb\x8a;w \a\xech\xbb4\x95\xa7\xfd1\x9e\xa9t6\xe9*\xaf((\x1d\xfb\xf5s\xfcHLr\x8dW\xb8]\xf0\xbfO\x06\xe5\f\xd2М\xd8-\xd1W^N,\xaa\x11\x06\x138M<\x14\x03f7<{\x97\f\xce\"%}\x91)\x87\xabA0\xfd\x9d\xc8\xf8t\xb1\xd5q\x90{\x1fɥ\xb5\xda\xe3)ф\xd3\xfb\xf8x\x1a\x96\x02I\xd2\x12\x04\xbb\xaf\x0f\xc3\xc4\xc0\x9b\x03d\xb0\xbe\x85\x97l\x92\xaf\x01\xaf_\x026\x92\xd0,K+\xe0\xe4\x86\xef-\x8e\fK\x83Z\xc4&\x1e6c0\x89\x952ީ\x18Ơ\x8bh\x87\xb9\x86v\x90Kh=u\f\x15\x11U1\x19\xc0I\xea\xc2\x14\xca4\x04\xe37~\x803\xa5.\x82y\x83\xd3\v\xa1\xd5!\xfa\x1e\xaa0T̀|mg\xfa\xfb\xdf\xfd\uedff\x1b#\x1a\x92\xa1\x86\x80/\x15\xe4\xfa\xd5ͫ\x9f\xee\xde_bq\xb5T*\x7f\x92\x1bgXN!Y\xfet#\xe6\b\xcab\xaf\xd2X\x80l\xc8\x0e[[\xc3;\xa5\x9d\xc7W\xa7\x06\xbf\xda\xc3Hd7\x1f\x89\xcf\f\x11b#}\xebT\x03\xd4&\u05cc\x99y5\x19g\xb2\xb8\xb0\f\xc7\xfdτ\xcb\xc9EA\xb5\x01e\xad0/\xffG\x99\x85\xc2\xc4l\\\xe4\t\x99\xf9v\xfc]\xb8\x9a\xa8\x8eqX\x15\xb2)A\x9c\xbc\xceP\xdaz\x02VvH\xbc\xab\xd2\xf4&JF\xdd8%\xc1j\x80\x96\x91\xea_I\xf2\xad$+%\x89\xa9\x89\xbb\xd3\x12\x11r4Ƈ\xa7$\x0e\xe1\xf5\xa9~\xf7\xa7ICܒ\x82H\xfe\x96h\xb0lI?L\x15 \aJ=\x1c\xa4\xcf\x0fL9ܒn\xe8q\x94h\x16\xaf\xa7\x1a\xae\xa6\f\xa6\xa1<=\xcdp\x80\xc5\xf5T酛S\vSI\x92\fN+\x1c\x9eRx\xc0\xbe\xbbM\x8e\x9cS\xb2\x93\xa1\x92a\x11\x9d\x03\x04\x9a\x06\xa6\x0f>\x15Z\x0e\x91,\xf7\x11\xfb\xa0'\xef\xea\x904\xc1\x81)\x82C\xd2\x03SS\x03\xb7\xa4\x05\x0e\tL\x0eL\t\x1cD>\xa9\xe6ir\xe4zx\xd4zp\xc4zK\xea\xdf\x10\xeb\xba7R\x9d\xdaI7\x8c5#\xbdmp'\xaa\x85\xed\b\xf5A#\xcd\a\x8f2\xa7\xa7\xebmO\xd5k\xa5ܥ\xe2p=MoH\xba\xdd/\xdeNd\x82\x19F\xf9k\xe0ty\a\x99\x14y\xb4f\xb4Қ\xaf>\xafځs\xfe\xe2\xf8Xi\xa7\x9bʜ\xfa\x1eΐ\x87:\"!x\x1e\xcfZQ}\xc4\x148\xb7z\x93p\x19\xff\xc9\xc2\xdc\xe4\xa39\xb2]E\x83C\x10\xc1w\xf2\x91ȩ\x01AN\x99\bt\x10\x1f\xddk\x9c\x05M\x14\xa3>\xd6\xf6\xaf_\x7f\x95\xe0P\xc4\xc9|\xbe\xe1\x06\f\xb8h\xfdt\xd1&\xff\x81Ç\x9b<\xe0i\x15\x1f9\ue11c\\ت\xcbߣ7\xafi\b\xfb5\xce;p\x13\ft\xf8j?\t0?S\xa2JN\xb0\xee\x1an!\xa1\xba\x13͊\xdflW\xba\xa3\x1dͺ\xbf\xbcu\xc1\xac\xcf\xcdi\xb8\x92\xa8\x9bn\xd1mH\xd2\xf5\x1aO\xa2^\x9c\x9c\xa0{4m\"ǖDܣi\xf3\t\x996\x9f\x87\xd2ުF\xf5\xad\xa2\x19\xdc\x1eLs\v\xec\x8a䕢\x9e\r\a\x9d)I\x85\xb7LF\x00\xe4\x8eS\x85\xcaf\xae\x86ִ\xe2\te\x04\xabR\x8an\x1d>\x97<7\xb4,\x97\x9dmϪ\xbd\xee\x91rBK%\x9d&ET%\x84\x95d\xfe,Y\xa4X\xf3C\xa7\xd4&\xa4\x9dbd\x9a\xcd\xecvY\xad\x05딱\x04\xf9\xe2\xee\xd68\xc5\xcdO\xd8\xcen*U\xc6&|I攧D4\x1e\x99\x99\x13J\x1e\x18\xe7~\x9acr\aƅ\x95\xd3\xfc\x93\\\x8a\x19n\x06u\x13\x86\x0f%d\xd6&\xcc8PQ\x95i\xeb\xb7\xfa\xdfRV*\xac\x7f\\\a\xbf\x83\x1e\x17\rR0~\x1e\xb6\xba[\x86o\xfd\xc0& ֥\x88Wڪ\xc1oCW\xdf\xf3!\x98\r\r\xa4\xdd9p\xeb.\x95\\\xb0\xdc\x15\xfbK\xa2\x7f\x99\xa3&8&\xef\x11^\xe0\xfbB\x8a\x91\x80\x19\xb5\xe6F\xfcIuBܝy7OW\xccH\xe4,\xa3&\xc1l\xd1X\xe2\xb4)lJ\x16\x8c\"\x16Z\x94\x1b\r\xf4TH\"\xf1j`%\x98Yb\xb8q^\x19\x92\xcbGq\xe6r\xb2R\x98\x94\xcb\xe1ږ\x93\x15\r\x15Ӷ\xee{\t4$gE\xc3\xc4d\xae>k\xc8\xd1\xc3a\x8f\x03\xd3>\xa88%\x95\xd0\x10m$\xb4L\xae\xdf\xff\xdb\xf3\x99\\\xac\x00Y\x99O\xca\xe7\xf68gټm³\x024\x91Ր;\xcf\xd68\xf7\xd3꧈'n\f\xfc\x8bs\xd4%i\x8d\xb1Q\xeb\x9eP\xccJ}\xd6&#,j\xddxK\xfa\xf5\xcd\xddO߿\xfa\xd3\xd5\xf7crE\xb3y\xbb \xb4 \xd4ʍ(\x98(W\xe6t\x01\x84\x92J\xb0\x7fT.\xbf\x8f\x9c\xd6\xdf9\v\xb7\xa0\xa2\xe0\xa6ݘJ\xb2\x14\xad\xa0\x88b\x02\x9d\r\xfa\x9ei,\xa0\x8bP\xfc\xbd\x05\xa9\x81L\x95,\xe2\x98R\xc7z$W\x16\x8c\xf3\xc0\xa0\xa5\x89W\xc7gl\x11)d1aҵ\xbd\xa7y\xb8=\x82G؞\x1e\xab\xc5҉\xac\"M\xa09\x10\x01ƞ\xee:h$\x85\xeeT\x17\xaf4踋D\x93\n\xef̔\x8a\x15T1\xbelOҪ\xaf7u&\xe42VԶQ\xf8\xfa\xed\xd5\x1dV\x0f(\x15\xd6}v\x97C\xa2-H\xbb\xbdd\x02v\x83܆\xe7c\xf2J,݇\x1c/\x8f\xd428\xd3\x06\xd0R\U0006e110\xb3\xf9\xe2\xab1\xfe\xdf\v\xbb\x83*6\xeaR\xdf#\xca֮9:\xcf\x05\x9b\xf08\x19\x80Ko\xd1\xc0\xc0[\x8e\t\xd9S+\xb7\xe3B\x0e\xbcE\xbd\x82R\x81\xb5\xedb\xa5%\xadI\x1a\xb7\x10\x99\xa1=\x7f<٧\x93\xee\x00\xcd\xdaK\x8a\xf7\xba\xf5:\xbc\xa6\xb5\xc3\xca\xd1k\x82\xbfG\x8a\x96Yu}\x1b\xc8\xd1\xdfr\xb0\x92 \x01\xa8\xa5CW\v\xc3M\xd0\xe5\x1c\x9c\x93\xaf\xc8\x1f\xc8\a\xf2\x87\x04\x88\xbf\xff\xdd\xef~\xfb\xfbx\x7fְd\xfb!^ι\xd4\xe6\xfav\xe0>\xffղ1\v\xc9\ue311d\u0092.3:\xcbހ\xb2b\xc2SL<.\axl\xed\x12>I\xb2w\x89\r\xd7\xd3n:~\xd2\xed\xc1\xda\t\xbb\x81\xf0S|\xb1\xe4\x0f\x9e\xf0\xed\x14\xbf\x93\xda\xdcxv\xd6.\xbc\x92r\xb5ׄ\xc3M\nj\xb2y\x97\xdfZ\x13\"\xe9\xd87\x05\xf5I.\U000560fb\xf79g\t)\xb8\x1f\xef\xe8\xa6e\xa4v(u\x9d\xa2\x86\xb0\xd2\x15\xb7>\xfa)\xbc^\xee:T$\xf2\x84R\xe6\xde`\xb0K\xce[B2\xd6bpc\x83\xdd\xe0\xa3\x14i\x95Ú\xd2(\x96\x17fT\xb8Z\x0eSP\n\xaf\x14\xa7\xa0t\x19\xae\x1b%\x90\xe5\x00.X*id&y\nm\xa1ֈ\x11\xe1a\x84y\xeb\xe7\x80>Zw\x9d\xf1M2a\xfe\xe5\xf5\xed\xb9\x9d\xd29\x91\x8a\xdc]\xde\xdf\x0e\xbb\xb3Jȋ\xfb\xcb\xdb\x17ϸ'iѩQW\x97\x8b|7PA\x9cu6\xa4\xa6Kl\xeep'\x04h-\x98QA\xcb\xd1\x03,\xa3t\xdet,%\xe1h}\xd2n\xf1\x05\xdd\xffr\x95\x02\x9a\xb3O\xa8\x9cM\xb8\x14Yϫ\xbf\xaeM!\x17\x91N#\xb4\xf6\x02t\x10y)\x990\xba\xaf\xd8M\x14\xd8u\x93\xf1\x93\xc9\x02<\x16\xbb9\x16\xbb\xd91\x8e\xc5n\x8e\xc5n\x8e\xc5n\x8e\xc5n\x8e\xc5n\xfc̎\xc5n\xf6\x1d\xc7b7\x9bƱ\xd8Mg\x1c\x8b\xddD\xce\xe3X\xecf\xc78\x16\xbb9\x16\xbb\xd94\x8e\xc5n\xc2\xf8\xe8\xf7V\x8e\xc5n\x8e\xc5n\xdc8\x16\xbb\xd9k\x1c\x8bݬ\x8fc\xb1\x9b\xdeq,v\xd33\x8e\xc5n\xf6\x1d\xc7b7\xf5\xf8\xe5\xdc\b=\x16\xbb\xf9To\x84\x1e\x8b\xdd\xec3>\x0f;\xf1X\xec\xe6X\xec&\xe0\xe5X\xec&j\x1c\x8bݬ\x8cc\xb1\x9bϕ\xa8\x8e\xc5n\xd6DZ\xd8͖\xd9\x1cM\x9b\xb8q,v\xf3y\x986\x9f\x87\xd2~,vs,vs,vs,vs,vs,vs,vs,vs,v\xf3/\xe4\xa8K\xd2\x1a\x15hY\xa9,\xce\x0e\xee\x12٥,\xca\xca\x00y\x17@\xd5\xcar\xd4\xc2Q\x960ݮ\xa9\xf2\xbcݸ3)\xa6l\xe6\x15\xbd\x8b\x82\n:\x83Q\x8d\x9fQs\x03\xfa\xe29n'qV\xb0\xb827v45cn\ax8\x12\r\xea\xa1\xe6\xf4@c\xba\xa4ƀ\x12/\xc9\x7f\x9e\xfe\xfd\xd7?\x8f\xce\xfexz\xfa\xc3W\xa3\xff\xf8\xf1ק\x7f\x1f\xe3\x7f\xfc\x9f\xb3?\x9e\xfd\x1c\xfe\xf1볳\xd3\xd3\x1f\xfe\xfc\xe6\xdb\xfb۫\x1f\xd9\xd9\xcf?\x88\xaaxp\xff\xfa\xf9\xf4\a\xb8\xfaqO gg\x7f\xfc2z\xaa\a6N\xbb\xe7\xf1{\xa4\x9c&K\a\xf9vA?X\x06\x1bO\n\x85\xac\x84q\xf7\x1c\xdd1\xafO\x84\xcbl\x8a=\x94\xe4S9\x98d\x88\xa1\xedS\xbc\x8e\xe73b\x1cϧ;\x9f>\x8d{\xe5\x84Fϱ\xf0*Ӗ\x13\x1a\r3\bn4t\xeby2Md\xc1\x8c5\xa7S\n=\xb4JY\xe1\xddö\x8b\xda\xf1\xaax-o\xea\xae\xcd1ݾ\x89\xd7JE\x97\xc1\xf6MQK\xa9 \xac(9\x14 \f\xf2\x9cQ\xc8FG\xf5\xf4_\x8f\xdf%\xbd\xa6!\xab\x143\xcbK)\f|\x88r\xecw\xcf\xcb]\x17\x90\xbf\x1a\x10\x7fh\u0084\x88,\xdd\xfdҕ\x1a\x8dsYE\xe6\x14N\x80\xa8J\xa0?\xcbU\x1a\x02\xe3\x9c;h\x86\xe3\x15Ε\xc9G\x81\x0f\xae\x17\xe7\xd1\xfaG\xc5\x16\x94\x830-\xe8\xb7h\x1c\xb7?\xf0\x14\x1a\xb2\xa1\xfa\xa1\xa1J\x18YS\xa9\xc6\xdbE@+\xfe\x04\x1f̳hǨz\xdc*\xb6`\x1cfp\xa53\xca\xf1\xb4\f3\x97_m\x80\x1a}\xe0-*\x94\xe4\x9a<\xce\xc1r\"B\x83\v\x11\xcb\xdc\xcchB\x9esa\xf7\xaa\f\x93\xd3\xce\xd7i\x15\xbd\x92*K\x15\xc1G\x19\r\x18\xaf\x01N\xa4\xe4\xfej<_6\xf3gi!(!\x7f\x12\xf0\xf8\x93\x9d\xad&SNg\xb5kR\x83Iͼl\x8ej\xed\x8e=؆1\x8dr\x9dP\xfeH\x97\xbaq|\xa7\x15\xf7p\x10_\x92\xafϐ?PM\xea9\xe6\xe47g\x98\xb4t\xf9\xea\xf6\xa7\xbb\xbf\xdd\xfd\xf4\xea\xf5\x9b\xeb\x9bh\xe87Ҁ\x13\x81h3;\xb7_V\x9b\xcb)\x17\x18p\xcd腓z\x8c\xf1G\xa6\xc9#\x13\xb9|\xd4ѱ`'1,QAd\xa0?\xa3%\x9d0\xceR4\xe3\xb5l\xf160\x94\xecy~\x91+\x19\x7fM\t\x91\x13\x825\x8d\x00\x1e\xe6\xfej\x17\r\xc5s1\xedL8\u07b9\xaa\xa80\xb5W\xbeu^T%\f+\x12\x14\x97\xe7&\xb3g\xcc\xe2\xa0\xf9\xf0\xda'\xaf\xf2\x1c\xf2a{v\xb8\v:\x97a\x1a˦\xa8j\x12TBn\xdf\xde]\xff\xff+\x87gY\x0e\xb95\xf0\x11\xca6\x10bO\xfa\xe0=~\xe7j0\x1dwy\xeb\xf8\xfc\x8asԚ\u0530D\xc9w\x95\xe8\x96do\xe0&hx9\x8c\xc9m\x1dk\xef@kI\x9dx^\xa7\x80X\x90\xc20\xca\xf9\xb2mK\x18\x89\xe5\x8b\xe2\xc3\xc2bCB\xfd\x94r\rX\xfd;\xc1\xf6\xde&iPr\xc4\xc7p\x0f#i\xd2\xf5\x19\xab\xab\xbe\x91\x95\x18\x96AYC!9\bi\xbcS7\xe9\xb8\xca)B#\xcemԺb\xd1\xd1\x19\x92\xec\x88F\x9da:\x10\xc5m=s\f\"\xc6g\xf5hX\xb5Խ:S;\x92\x92\xf2:\x14\xd0\\\n\xbeĻe.\xbb\xb7\xa0\xfa\x01r\xf7C\xa2\x19UG\xdd\xed\x8c\xeb\xa5\xdf/KH\x0e\x99\xa3\xf9\xe4r\xa61\x94\x0f\xf9xE/\x8b\a\xb9\xe1tuNK\x8a\r5\xe8t%\x15\xf9\xa4\xf9[\xc1\x97\xef\xa44\xdf\xd45\xd3\x06\x9d\xb4\xbfz\x8b\xbd\x1b\x8b\x8cF\xc6\x1c\x9bw\xd8\xf9\x8d\x90ʰF\\\xbb\xac\x9b?\x1e)Xn\xb1\xd8\r,3\x1a\xea&\"\xf8(,SU\xe2\x95\xfeV\xc9*Z{[3\x00\xbf\xbd~\x8d\"\xae\xf2ia¨%V\xc4La\x9b].T;!\xfe\xe2\x13\xf9\x92R\xccj\x86\x19rT\xc8\x1b\xba$\x94k\x99j`1\xd1\xe7\x16$\xde?\x99r\xc3~\"\xcd|Ց\x89\fs\xfd;\xf1\xe5\x19\x9b\xac\xb2\xda}o\x970\xc4o\x8a`\xe9\x03hR*\xc8 \a\x91m8.\xf1>\xa8\xed<3%#0\xf1x}\x9c\xe4$<\x9a7RX\x86;\xe8p^\x87\xac\xbc\xb0%C|m\x98?\xe8=m\x14\xb3\b\x91\xddV\x1a\x94K\xd9T\x15\xa4Q柫\tp\xbbӌsW\xfc\x9f\x1a\xe7\x8fg\x05\x9d\xc5\x1fwjj\xed\xc5H\x02BW\xca\x13%3$\x97\t\xa6\xa5/\xe3i\x97\xfe\x97\xeb\xd7\xe4+rj\xd7~\x86\xe7sJ\x19O)\xba\x87לV\xd8\x1d\x9b\x86)Z\x94ƫq\x02=\\\xca\t\xafs\"$\xd1U6\x0f8M\xf1\xd9\x06\x97\xb2\xbf\n\x88w5\x8f\xbc\xf3)x\xe7\xf3J\xfe\xbfhP\x83\x05\xff_\x9eA\xf0\x0f\xf1\xfdZ\xde\xd4\xdd5d(\xa4\x00Cs\x9aP\x8d\xd1)\x10\x01\xe0\xdaQH\xa1\xdd\xedG\x01I;\x1a\xe6\xe7~\x14\x8ejD3\x06\xdcU\x86\uf668>\xb8KE\xc3\xc3\x10[B\x8b\xc0OA\xddx\xe1VR;\xb5\xd3b\xddv<0\x91\xfb\v\xbb\x1d\xe4{og\xda\xd9s\x96-^\xb7gy\x9b\xfb\xbf$\x7fO;{\xf5\x86\x91\xd1\xfa\xd1N\x82\xd8f\a=G;\t\xa6c\a\xef\x9c\xc1\x1d\xeaÍ\x06F\x1b\x88sT\xb6S\x10j\x04$\\\"\b\xa3\xe6^\x7f\x11x\x06-\x8b\x1c\x11!\aq\xb2\x863\x06\x1a\xf8l\x9a\"$\xe8\xeb\xc9:\x9f\x97ׇ\xf2G\xfdՁ\v·̲;\xc3\xc4,!s\xab\xf1IQ\xce;\x99LJpJ\x05N\x80M#1ee\xcd\xf9\x92\x1c\x96q\xc4\xdcu\x17\x0f\xf6\xc0lp\x105\x0e\x9f\xa4\x04\xb1M\x0e\"\xe7\xf0\x89\x06\xb9\xcbA\xf4\x14I\x1a\xdc\xdaoϩo\xce\nM/\x95]\xa6a\x94ߕ\xf1\xbd4\xc9Z\xbf\xab7w\xaf\xba \xd3\x04\t\xde\xdfP\xce\\\xb00\t\xcd\v\xa65\x93\x82<\xc2d.\xe5C\x12\xdcӞ\x96;\xadk\xa2\x9a\xcd\xf4\x85g$#\x8b\x9d\xb4\xae\x85L\xf0p\xbb\u0379t\x85\xd1!\x06e\x17\x93\xa6\xd4\xd5XE\xc2\xf1=\xc1\xfd=\x81u\xb4ߤ\x16#D\xf2~v\rn\x9d\x14o\x12{1\xec \xc7d\xbc\xb4\x9aK\xb5\xf7\xb2\xb5/i\xd2\xdd\xee\xa5\v&>\x7f\a\x16g\x19f\xa0\x87w`\xf9\xae\x81ErpE\x80\x12\xcdL6m\xdf7n\xe9?.G\"\xd1t=\xc1\x1a\x9d~\x8a'm'LR\xbd&R\xe7`2M(/\xe7t\x84\x0e\x13\x14oV~&A\f\xb6\xd5\\\n\xa9\xdc\xf1\xb6\x16\x84\x14\x96\x85$\x1a\xd8\xd4\xf8\xa4S\xa4Y\xaf״\xb6\xeb2=)\x9d\xb4z\xfcM9\x9da\r8\xab%\r\t\xa5\x10_^\x0e\xfb\xb1Ρ\xf3\x81t\xcc*И\xa3'\b(%\x95\xbf\x1f\x18RWRK\xd2;u\v/1Z\xa6@\xed\xbfN\xf4\x90<\x7f\x12|\x17s\xbap;\xa6-ǁ\xe9\x142\xf4\x10\xb4v.\t\xb8\x8b\xa9\x9d6\r\x84}\t\x10˄\xec7\x13\x8fW\xc1>X\f\xb4\xd9\xc0@,\x84F\xb7\xfd \xcfƄ\\\xa7ٽ\xa1\x80ǹ\xe54m\xe8\xfe\x06i*)\b\x04v\x03\xe6Q\xaa\a\xb7\x89>\xfe\x9a&\x19\x00S\xfb\xed\x8c\xd2%CJ\x06\x0fig\xf1\x1cD\fc6\x8f\af\x8f\xa0gB\xa9.\xb8\xf5\x8c\xa0\xb5\f\x9f4_\xdcjVPp\xc7%\xc7T\xb6d\a\x11\x16\x1fw'.\v\xef\xa0\x19BdC\x96Pz\xbe\x1cy\xea\x9c9\xf2t\xe9\x01\xe4\x00\xb9s\xe4\xa3D\xbd\xd2\n|\xb8b\xf8X&r@u\x8f\x16\x94\x96\x035:\xa8\xe3ũk\bR7\x14\xe0\xcb\xd0Ȅ\xfd3\xb6R\x95%⦢\x8c\x90\xae\xa8L\xbbK\b|\x80\xac\x8a\xad\x80[\t\xc3x\b\xe6\x15%\xb7\xc6cg\xc6\xd1\xf9\xb5\b\xab)|\xac\xcfkd\x04_\x8c\x02\xdf#%\xee\xbc\xfc7\x8a\xa1P\x05\xa2n\x85p[\x7f\xca\x05[\"5\xe0\x8c\x8a\xbaߟ\x91!\xfeHr6\x9dB\xa8d\x11)\xf6J\xaaha\r\aM|2\xf9\x04f\xcc\xdd֯U\xabȀH]\f\xf2ܩ{̐\x82\xcd\xe6\xce)D(\x96\x1c\x8e/+l$\xe1\x92\xe6\x04\xb9\xb8T䑪\xc2Z,4\x9bc\x9d^*H^E\x1f|l¹\x1ciC\r\x10Y\x82+\x1d\xe4;|\xd7\xf1\xcd82\xf5\x15\x17?\x99\xfe7\xa9\xce*{H\ayt\xaf>@\xb6\xd2\xea6\xb1\x0f\xbb\xd5\b\xe8óv3\xcfdQP1\xbc\xd4\xc1\xa5\x83\x13<\x19\x1elZ\xae\b\x13\xee\xf6\x83㞄a#\x98\xae\n\x96.\xd7-\xfd\xd9c\xefj\xd9H\xb5\fw[\x13\xa3\xa1n\xd9v\xddx\xa7\xe4\xf4\xe4\xe2\xe4lHS\xefz\x89'\xbas\x1f\xf0~ V\x99&\x9a\x15%_\"^Or,\xb5\xe6\xad4U\xa5)b~g(\xd1s\xe0\xfc\x9chkQ\xd0P\xc101 \x05\x9cc\xdb`Ue.\xf8pz\xf2\xf3\xc99\x01\x93\xa59L\x1f\xa581>\xb2~\xefn3\xd7\x13^&vM\x16\xe0dS\xab\xb8\\F\xad\x99^%%\x17\x93\xe0K\xc1i\x8d\xc9\xd5\af\xac\xfad*t\xed~\x95\x92\xe1\x890\x15\xb6\x14\xb6\"\xda\xcaf\xdf\xe6}Y[\xbf\xff\x04\x956Y\xa6I%<\xb4gn:\xfc\xf9U\x92\xf0\xcd&\x9e\xae\xf1\x96\xff\xc0\xc1\xfbn9\r.>\x06\xd7\uee45\x8a+\xe4+m\xb7\xa2a\xfe\xf6\xf3\xed\xbb6S\xe50\xfd\xe2\xdbw\xb7\x97\x9d\xc6X\xa9\xeaE\xbb1\x16\x02\xc5\xceXN\t\xac[\x04\xc4\x13\xd1\xe6\x96\x02\xf8\x95\xda\x05|\x1b\xad\xb6\x93\x96\v\x18;\x03<\xa3b\x94\xdal\xaa\xdbRX*s\x80F\xb43\xa4\x00P\v\x86!\xe3\xd56Kɺ\x90o\xcdԴYJ\x804\xe4P\x91A\a\x8b\xa0\x1f\x13\x912=\xb4\xa4\xa5\x84\x861\x18/\xa9\xaa\x82\x1b\xa3\xf4]\x1d\rXy\xb2\xca\xd1~=\xad`kI\xcd|\xb8MF\xcd|\xad\xf5m\x12&\x90\xd9XM\xff#\\\xf0<\xf6B\xc6\\Iu\x00\xeb\xfa\xd8\v\xf9\xc0\xedl\b\xd1\xd9\x1c\x0e\x90\xdas\x87`\xda5H\xbd^\x9d\x9cS'7T\xa5\xb5G\xf9\x99\xcf\xf0\xe7a'\xfa\xec\x88\xd7\xc0\xe9\xf2\x93j9ٽ:\x8cY\x1d.\x85\x81L`*U\x93\x8d\x10\xcfZ\x9b\x04\x0e\xb7\xfaO*\xccM>\x9a#\xbb\x0f\xa5}k\x9b\xfcA,<\xb0+\x92\xfb\xf6\x93\xa4Q\xe0\x92Tx\xcbd\x04@\xee8\x95\x9f7\x90\x99\x9d6f;GC\xadJ)Z\xd9Ε\x02\x97<\x87 \xbd\x12\x1b\x9f:\xe1b[=\xab\xf6\xbaG\xca\t-\xebN.\xa1s\x98?K\x16)\xd6\xfcHj\xdeC\xdb\xdbO4\x9b\xd9\xed\xb2Z\vv\x04I\xa9A_w\xbbk&lg7\x95*c\x13\xbe$s\xcaS\"\x1a\x8f\xcc\xcc\t%\x0f\x8cs?M\xbc\xe2\xe7\xc2\xcai\xfeI.\xc5\f7\x83\xfaK<\x1fJȬM\x98q\xa0\xa2*\xd3\xd6o\xf5\xbf\xa5\xacZ\x95}C\xf0;\xe8q\xd1 \x05\xf3կJ\xbcӷ\xf5\xc0& \xb6]a\xe1mhu{>\x04\xb3\xa1Ɩn]\x8e\xa9+\x83\xb9\x8b\xe2\t\x82>wu\n\xc8{\x84\x17\xf8\xbe\x90b$`\x86E\x8b\xe2O\xaa\x13\xe2\xee̻y\xfe\x13\x94\x1cP\x9dJ\x1bY\x12V\x14\x903j\x80/ɂQWH\xa9\xa1\xdch\xa0\xa7B\x12YZ\xa1P\tf\x96\x18n\x9cW\x86\xe4\xf2Q\x9c%^\x1b\xaes\xb8\xb6\xe5dECŴ\xad\xfb^\x02M\xeeY\x83\xc9\\}\u0590\xa3\x87\xc3\x1e\a\xa6}P1\xb4\xd0H7\xb9\x9e\xb1\x04\xb2\xe5T\xb22\x9f\x94\xcf\r\xabV\xb5MxV\x80&\xb22\xc3j\x9d\x7f\xed\xa7\xd5O\x11od\x02\x81\xfd\v;\xea\x12\xef\xea\xe5,\xaa9\xf2\x1e=\x91R\x8a]\x85rז\x91U\xd3)(\x14\xbe8\xbb\xa0\x1c\xa5]\xc3\r-N\xd7\xf2\xd6\xc0\x9cc\x1b&W\xe4(\xce\xd5\xd6;\xadP\xb7\x1b\x1b\x05\xbb\xca\x00\x91\x1ewr\xf5\xf6\x9bƏY7t\x8a\xa6\x81\xd8\xfbٸ\x9e\xb7\".\x9dr\x03!\xf4\x144\x8fí+̑q\xa9}\xa5\x02Dv6\xa7B\x00\xf7J7\x8b\xccy\xa3\x9aL\x00\x04\x91%\xb8\xa4BB\x89fbƁPch6\x1f\xdb\x15\xc4y\xa4<\x11\xf8\xfe\xd0\xcdL\xb5Q@\vG\f\n\x8a؎\xdev\x8a\x84fJjM\x8a\x8a\x1bV֓$\x1a\xb0XQd\x1e\xd0\xf5\xb4\xd9`\xbc\rԔ\x008\xafW\x11=GW\xf7\xb2u\xe6\rU\xe6\xdc\u0087\xa24Kw\x9b5N\xf0a\x7f|\xa5\r\xc98\x03a\xfc\xaa]\xc5`\x9c\xe79\x89\xbd\x04\x85\x05\x14\xdc.h\x8fZ\x91\xa3W\xa44\xdaݵL\x9b\xa8\x9fbδ\xf7\xbe\xe9sBM\x10\x94\xd1D\x1fh\t\xc9>(pn\xd6\xfe\xa7\xc4i6mztsٷa\x86SN\xe3\x14\xc3\xc0\x94\xce;\xd5t\x1a\xfb\x10o3![\x8d\x02\x8bu\xe6\x1c\x16\xf0\xe0\bXX\xfe\x01\x19\xb0\x05\xfa\x83,g\x8c\x82\xb8\xcaE\x9f\x9c\x89\xb6t\xd77\xa05\x9d\xc1md\xd6\xca&\a1&\xae4\xc4\x15ipa\xf9I#[:\\sӰk\x81F\x81-\xdc\x1ak\x9b\xf3Q1c\x00\x89\x18\x1b\x88b2_䅟\xb5ɵ\xefA\xbe\t\x1ft\x1f\x8a\xa5Z\xabO\x89\xdc\xddޛ\x00\x99(\x06S2e\x82r\x7f\xe1.\xeef)\xf6\xa8\xa2\xeeR\x8e֠\xd0\xe7\xe2\xddN\x017q\x04\xfbW\x8fH\xa3*\x91\xd1V\xbbv,wʦd\x86\x97\xfa\"\x8d\x899\x15\xe4߾\xfa\x8fߓ\xc9\xd2j\xc1h\x1c\x1bi(\xaf7\x90\x83\x98E\xf6\xeb\xf1\xe2\xa9[x\xb2\xa6\x04\xce\n\x16\xeb\x16\xb2\xc6\xc0o\x1e&\xdd\xd8\xddE\x0e\x8b\x8b\x16}\x8e\xb8\x9c\xc5\xe1\xf4\xb2\xae\xe0\x1dn\xad\xc7(\xf2I\xae\xfd\x1e6 9˖Ɍ 4\xc4#s\xf9\xe8\\y\x03OlS\xfa\xac\x94e\xc5]\x96\xc37\xa1\x94p\x14\xc8J\xc3z=\xc2^>\x18K\raj+R\xccߍ\xf5K\x89SZ|\xa5Q\x1fm\xae\xfb\u085f\xf8\x1b\xca\xf9\x84f\x0f\xf7\xf2{9\xd3oŕR2\xee\xa4!\xf5\a|pj\xb5\x98y%\x1e,FZ\xd5\xefe\x9c\xb4\x95\x95)+\x13\xcal\xb4ݻa3\xa3\v\x00\xd7\nZ\xf0\f7\xb3\x83\x0f\xf6ܢ{6\x8e\x1d\xf8\xf2g\x8e\xbbp9\xab\xe7\xad\x033\x88\xbd\xfa\xf9\x9b\xaf\xfe\xed\xdf\x1d\xcb\"R\x91\x7f\xff\nk\x03\xe8s'\xc4P7\xb0\x8alA9\x8f\rf\xb5\x19\x8c%\xfaq\x0f\x93xr\x1ea\xd2\xd9\xc1\x93\x98\xdc\xf7\xf7\x7fC{\x9b\x19\r|z\xee\xaa?\x05\x0fb\x14\xd0\x13T\xe2N\xbc\x94\xc52c\x1f\xc1\xa0]H^\x15\xf0\x1a\x16,\x8b\x8b\xf0wP݁\x12\"A\x9ciCd\\\x1d\x9e\t\x97\xd9\x03\xc9=\xa0\xd6u\a/\xe1\x93\xe2\xb2\t\x17;6\xae\xae\xb9\xd2Ab\xef\x01\x17\xb4,\xebj:\x8a>v\x16\x8b\xbc$\xfaN\aM\rT\xa7gu\xb8\xe9\xc6*\xec\xe1\xdd\x16V\x1b@\x81`\xcaX\xe9\xe7\x86/\xb1\xb1\xd6d2t\xc5M\xca5\xf0{\xe2\xf44\xbbsș\xe3\xc3\xeb\x03\x92\x1eҮ\xc9tp,\xea\\\x81\x82\x1ao\xd3$\xe6\xcf Ֆ\xa04\xd3V\x81y\x8fg\xe2\x92SV\xa4_\xdcMi\x913\xa0\xd1}J^¨E\xa7\x91/F#zP幸\xeb\"\x8e\xa5\xbd\xb1\xe6g:\u05ff\x95\xb9\a\x84\xac\x1a\x8dY4e\xa3\xc9aSE\x9fA\n\xc7P\xb6\xff\xbe\xc1Q\x9b\xeb\xbbu\xc6\x1fg<@\x0e\xa6g\xf6\x1f\x83}\xe3\xe4\x0f\xc0\xbd\x91o\xfbe\f\xad\xfc\xd9v\xd8x\x82j\x99^\xdeG2v\xe9\xa6\t\xe0-\x05\xf9鑓\x97'\xcf\xca\xc3\x1d\xba\x95,\xe9\f\xad\x91\x81X_\x057\xacԷ5\x93\x11b\xdd\xc5\f\xe1B^7\xb3H\x02\xea\xee\xa87r8\x98OX\xfb1\x01\xe2#]\x12\xaad%r\x17{h\x82RoV\xd0q#Eʔ}\xf4ۗy\xa9\xab\x8ac\x9a\x00\x13\xe4\xeb\xf1\xd7_}n\x82\x1fW\xb2\"\xf8\x13K\xef\xb7\xf8ֳbA\x01\xcd\xdf\n\x1ee\xff\xb9\xd1\xcd\xcf\xf7.V\vn\x84\xf5ݓ\n\xff\xba\x18\x10\x02yT\xccxj~d\x1a\xc8i\xac\xd7<\f\xa9\xdaՄϺ.\xbdh\xfb\xcf\xcfs@\xd9i]M\x9e@28\x86\x9e\x80\x1edB}\xbex\x9d\x0e\xb3G\xac\xb4\x91\xfe\"\xa5\x10ʩ\x9b͉+o\x98P.f\xc0!\xf1[v\xf5\xa1L\xe8e\xbaR\xa2\xb3\xa4\xe8\xf5/\x9b\xfdK9'\x8d\b\u07fc\x7f\tp7\xab\x05\x7f\x829]$\xc9?\xcd\nƩ\xe2\x98Zv\xe70I&\x95! \x16LIQ\xa4\xe4\x96\x12\xb2\xa0\x8aa\xbf\a\x05X\x8d7\x03M\xbe<}\xff\xea\x1dfh\xa7Tht\x85\x92\xfd\xfeT\xda5x\x18\x8a\xd1\xd6\"W\x0fAC\xd2\tp\xdd!\b\xf8\xb4\x94\x89\x1a@\xc0/MHU\"\xa4\xa8LE9V\xe6\xccx\xa5\xd9\xe29eQ\xaa\xe5X\xebڿ \xc3\xd1׆}͢\xf8\xcdJ\x1d܆\x91\xaf\x95\x9a\x8dN\xd8X\xaf\xac\xb5\x9eV\x13Iǡ\xcaV;I\xd8;\xd4}\xfdjw+\xcf7\xf9\x8cM]Z\xc96(\xe8\xec#\xb8\xd6ci:\x8a*\xa3\xe91\x8e\x12}\xde\xe7~S\xef\xaa\xc5\xeeM_3\xcdy\x1d\v\xfa\x01\x13*)\x1e\xd7=W(\xa78\v\xf2\x1e8(\x19\xc4\xd2#e\xa6\xbe\xc2\xc9\x043ѽ}\xd0pr\x15\xed\xf7#\x80\xa8\xad\xdf{_\xf6|p\xf7\xb6\xed\"\xb3\xadd\xb5s\x16۾\xbf\xe5e&2^\xe5p\xc9+m@\xbd\x03-+\xd5\x1b\xfdX\x89.\xf7\xbeպ\xa8\xf9\xe8\x03N\x99{d\xa43Y\xf6\xb2\aռ\\\xeb3~Ry\xa8\xe1\x80W~\xeb\x9b4\xaeX\x966R\xc1\x86\xde\x06\xa2\xe2|\xe5Rco\xe7\x1a\xfb\x9c\xd5N6\xdc\xed\xdaf?\x84)ZCR\x97to\x94\xb5^p\t\xf8\x9a\xb3\f\x1d\xf6\"\xfc\xc1\xfd\x97\x9d\xb5\xffH\xcf\n\xdd^\xba$T\xcc\xcb\xc2\xe8\xec9&W\x88\xe6\v\xae(\x81\xfb\xf0\xfa\xf27:\x05\xb7\x1e\xa4\xbd\x90\xd6G\x87a\"\x91D\xd6<\xbf\x82\xb0@9\xfb\xe0k\x9dl\xda\x18kh\xd0?7\xa1\xd9CU~Z\xe8\xe3t\x02\xfc\x0e8\xea\x06;P\xf7}\xfbY\x87\xb6\x02\f]|=\xee\xfe\xc5\xda\u058c\x1b\xccB\xeeU\xcd\x1e]&\xa4Ś\xbbp\x96\xb3\x05\xcb+\xca;\x14\xd8\xc2Y\x83Z\xbc\x90\xcax_\x82\x14\xd6>\xf7\xefwp\\_\x18\x8c>\xab۽\xc0\xe8\xf8\xb1\xea\xb7O\x85\xedg\xc1]\xf7\xe2\xca+\x0e\x8b>\x8e\xeb6\x83\xe8\x80G\xcfڭ\xfd\xb01\xcd\xf6\xde\xd7\xf8\v\xcf\xe1\xca_ݼޤ\xdelu\xd9w\xa6\xfaj\xcbt\xfc\x99\xa97|[\x1f\x1c\xaf\x88\xf9;_\xfa\x9cP\xf2\x00\xcbs\x97\xfc*|#\x10\x0fĵ\x89\xf7j\xc3\x03lVU\xec\xcb\x0e\xde&\xc4\xec\xe3\xc0\x7f\x80\xad\xbe\xaf\x0e:\x1e`Y\x87\xdd\x11/\xf6\x87\x10\x00mP\xe1z!oWF\xb6G9\xf7\xd27\x02\xd6\xf6\x9e~\x8df\x05\x96\xf8\x1c\xa9\xd85\x9chߛ_\n=g\xe5\xae\xe4\x18\x8a)\xdbr\x1a\xb0_wkw\xe0\x1d\xfd]\x8bsr#\x8d\xfd\x7fW\x1f\x98\xdeq!\xc7\xee\xe5k\t\xfaF\x1a|z0r\xdc\xd4\xf6F\x8d{\x1cIZ8\x1e\x89\x97\x94\xf0\x1b\xf52\xafw\xdf\x7f\xafQ\xcc4\xb9\x16\x96Qy\x1cԗ\x15\xb5\a߾c\x88\\m\xbb&\xea\xbe݁\xef\xd0j\xbf\xd1\xc6\\\xfbS\xdbQޙ\x86\x9b\x82\xf3h\xbb\xbf`\x826\u058c\xce}\xa7\x1f\xbb\xf1FQ\x033\xb6\xbd\xe1q\x01j\x86\x89\x06\xd9|۪\xf6\b\x1d\xee\xa9x\x1fBE\xde\xccjF5ڟB\x85\xf62\x04\xc5\xe7\x06l\x84^\x8e\x94\xdf\xee\xe4h;1\xb6.\x8bܧ\xbd0\xa7\xa5\xa5\xfc\xff\xb1\xec\x19\x89\xe8\x7fII\x99\xd2c\xf2\xca\xdfP\xd9\xf0\xdd\xf6\x1b^\xd7i\x03\xb7p\x99&v\x17\x16\x94\x83\xab\xfdK\x05\x01\x0e[\x1c\x80r\xba&-\xcf\xc9\xe3\\j\x94\fM\x10\xe9\xc5\x03,_\x9cwN\xc8\x06\x88\xf6\xe1k\xf1⼎\x97u\x0ee-\xa70\x84\xf1\x02\xff\xf6b\xbc&`7\xc0\xde!v\xb7Rɖ?\xd6Z\xf7\x1b\x97ڴ\xbe\xf3\xfb\xd2\xc7V\xdaX+j\xd8\xfef\x878\xda\xcaqǬ\xe8\xfb$U30}&\x88ט1\x95aL^\x89\xe5\x1a\\\xbc\x18\u05ebr{#\xae\xa6\xb3\xb2\xd3@\x0e\x9b\nc\x86D\vT\xa8\x87\xdfo\b\xdb\a\xd7wm˦H\xd5\xd1wwY\x1coW\x1ew\xa9\xa8N\xe3ۮ?\xf7\xa9\xce\xcc\xcc\x13\xf5\xe7p\x83\xab\aj}\x89\xde\xccaY\xe3\xf3\xbf\xa5/{\x8f\x90\u07be\xab\xcf\xd7x\xc5\x14\xe8mY\xfd\b\x9c\x13\xaaח\xef[\xbder\x04Vhٝ\f\xf4\xe0\xabU\x9f\xe3\x19\xec3PE\xc8B+\xda\x1d\xfa\xf67\xa2\xb6k\xb8N\x19\xc7\xdf\xfeQ\x81Zb\xc1\x81F\xe5\xa9\r\xba\xfe3\xee8\x056a\x0e\xbc\xcb3@\xcbo\xd64\xff\x86c\x90W\xc2\xc9\xe0^\xb0+sD8\xa0\xdb֎\xe5\xcf\u0590\xd9\xf0h/T!\xeb\xb7\xfb\xe9a\xab\xa8\xd9\xcf\xf2yj\xdb'\xde\xfa٩w<\x89\x05\x94n\x03m\x01ie\xe0n+h\xdfD\xa6\x1d\x96\xd0\xd3\xd9B\xbb\xac\xa1\xbd\xd5\xc0},\xa2D\x9bh\xe7\x02\x9e\xc2*\x8a\xb3\x8b\xf6F\xd3n\xdb艬\xa3'\xb4\x8f\x9e\xc2BJ\xb3\x91v\x80\xac-\xa8}\xad\xa4=S,\xf7\x0eQ\xec\x13\x05\xda\x1d\xb7\xdaf/\xeda1\xed\x15\xfc\xd85ӝvS\x9c\xe5\xb4\x17\x0e\x9f\xc8zz\"\xfb\xe9),\xa8\xa7\xb5\xa1vZQ;)g럓}\xe4(\x1c\xd4\x02nd\x0e\xb7R\xf5\xe5sw\xf3\xb3V\x9f\xef\x89`\xb5\x8c \xc9s\xbcW\x8b\x8f\xf6,\nuy\xafǧ-\xaa?\xd8\xe4\xbf\x7f\xfb~\xd7z\xde\xd5\x0fn_\bŦ\xa9\xce>\xebY\x87}\xdfݭ\x17\xb4\xd4si\xc8i(b\x95qY\xe5\xde\bQ=\xf9]\xc3Wy\x87\x975\xf7[\xa8{\xb6\xb3V\x96\xcd[\xf1\x9c\xc7:M\xcaC\xef#E,\u0081\x80𠡐Ċk\x8d\xea\xfd93H\xe3D\x9d\xc3\x13\xd9\x06?BW\x81j?_w?\xae\xeb\x85\"8\x87\xba9]\x04ΰ\xb1*7V\u05ebcAڞ\xb2~{vWqK\xacMt\xbdY\x7f\xea&\xbe\xd6\x0f\x87\x05\xb8\xd2Fkː\xedP\xd5\xe6\xb4\x1e\xa6ëvϲ9V\xb67s%\xab\xd9<\x90\xe0&\x06\xba\xc9\x7fQ\xf9^\xd0\xd5̒\xb5w6\x9bJ\x89\x96\xafĻ\x9f\xf3f\xbaۀnG\xe16\xf5\xaf#\xf1v)\x80\x9d\x87\x87I\xf6\xba\xecܧ+\x91\x175K\xbd\xdaG6\xbf_y|%\xa1\xd1J\xe9\x06\xa2\x97\xa7=\xc89eSgZdv\xd6\xeb\x97h\x9e91\xf1\x91*\xc1\xc4l\xd7\xe2\xff\xea\x1f\xebQM<\x84\x1e\xe5\xa4g\x11\xb5\xba\x12\xa5\x9c\x84In\xb8sS+,\x03ԓ\xde3\xb4\xf6#\x12r\xdeB\xb2\xff\x92\xff\xa5Q\xeb]\xb9I\x9f0\xecp\xfb\xc0D\xfe2\\\xcc+y\xa5(\xf7\xff̤plA\xbf$?\xfc\xf8EX\xd0{P\xba\xfe\xf1\xff\x06\x00\x00\xff\xff\x01\b\xb6\xda\xef\x13\x02\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xec\x1d\xcbn\x1c\xb9\xf1\xae\xaf((\a'\x80f\xb4F\x0e\tt\xf3\xcaZDX\xc76,\xad.A\x0e\x9c\xee\x9ai\xae\xba\xc9^\x92=\xf2d\xb1\xff\x1e\x14\x1f\xfd\x9a~\xb0\xc7\x12\xb2Y\x88\x17k\xd8d\xb1XU\xac\aY\xa4\xcfV\xab\xd5\x19+\xf9\x03*ͥ\xb8\x02Vr\xfcjP\xd0/\xbd~\xfc\xbb^sy\xb9\x7f{\xf6\xc8Ez\x05ו6\xb2\xf8\x82ZV*\xc1\xf7\xb8\xe5\x82\x1b.\xc5Y\x81\x86\xa5̰\xab3\x00&\x844\x8c\xaa5\xfd\x04H\xa40J\xe69\xaa\xd5\x0e\xc5\xfa\xb1\xda\xe0\xa6\xe2y\x8a\xca\x02\x0fC\xef\xbf[\xffm\xfd\xdd\x19@\xa2\xd0v\xbf\xe7\x05jÊ\xf2\nD\x95\xe7g\x00\x82\x15x\x05:\xc90\xadr\xd4\xeb=\xe6\xa8\xe4\x9a\xcb3]bB\xa3픬\xca+h>\xb8N\x1e\x137\x8b;\xdf\xdfV\xe5\\\x9b\x1f;\xd5\x1f\xb86\xf6S\x99W\x8a\xe5\xad\xf1l\xad\xe6bW\xe5L5\xf5g\x00:\x91%^\xc1G\x1a\xaad\t\xa6g\x00~bv\xe8\x15\xb04\xb5\xa4b\xf9gŅAu-\xf3\xaa\b$ZA\x8a:Q\xbc4\x96\x14w\x86\x99J\x83܂ɰ=\x0e\x95\x9f\xb5\x14\x9f\x99ɮ`\xadm\xbbu\x991\x1d\xbe:\x129\x00\xbe\xca\x1c\b7m\x14\x17\xbb\xa1\xd1\xde\xc1\xb5\x92\x02\xf0k\xa9P\x13ʐZΊ\x1dCș6`x\x81\xc0\xfc\x80\xf0Ĵ\xc5a+\x15\x98\x8c\xeby\x9a\x10\x90\x0e\xb6\x0e\x9d\x0f\xfdj\x87P\xca\fztZ\xa0\x82T\xaf\x8f$\xb2\x03\xf3\xdd\x0e\x87\x81\xb9\xcf\xfb\xb7Nn\x92\f\vv\xe5[\xca\x12ŻϷ\x0f\x7f\xbd\xebTCO\x0e\xfc,\x81k`\xf0`\x85\x1a\x94_~`2f@!q\r\x85\xa1\x16\xa5\xc2U\xa0LZ\x83\x04\x90\nJT\\\xa6<\t\x14\xb5\x9du&\xab<\x85\r\x12q\xd7u\x87R\xc9\x12\x95\xe1aٸ\xd2R\x13\xad\xda\x1e\xc6ohR\xae\x95\x93\"\xd4Vp\xfcb\xc0\xd4\xd3\xc1\xc96\xd7\r\xfe\x96\xc0\x1d\xc0@\x8d\x98\x00\xb9\xf9\x19\x13\xb3\x86;T\x04&`\x9dH\xb1GE\x14H\xe4N\xf0\xff\u05305I\xac\xb1\x82dЯ\xe5\xa6\xd8\xc5'X\x0e{\x96Wx\x01L\xa4P\xb0\x03(\xa4Q\xa0\x12-x\xb6\x89^\xc3?\xa5B\xe0b+\xaf 3\xa6\xd4W\x97\x97;n\x82zLdQT\x82\x9bå\xd5t|S\x19\xa9\xf4e\x8a{\xcc/5߭\x98J2n01\x95\xc2KV\xf2\x95E]X\x15\xb9.\xd2?\x05\x8e\xea7\x1d\\\x8f֊+V\x89Mp\x80\xb4\x99\x13\x18\xd7\xd5͢!4U\x11u\xbe\xdc\xdcݷ\x85\x89\xeb>\xf5-\xdd[\x12ְ\x80\b\xc6\xc5\x16\xfdj\xdc*YX\x98(\xd2Rra\xec\x8f$\xe7(\xfa\xe4\xd7զ\xe0\x86\xf8\xfeK\x85\xda\x10\xaf\xd6pmm\x06\xc9aU\xd2\xeaI\xd7p+\xe0\x9a\x15\x98_3\x8d/\xce\x00\xa2\xb4^\x11a\xe3X\xd06w\xfdƎj\xad\x0f\xc14\x8d\xf0+\xac\xf1\xbb\x12\x93Β\xa1~|\xcb\x13\xbb0\xac\xe6\xabU@O\xfb\xb92\xbcj\xc1\xab\x1ejޯ\x9f\xd46\xb16\xe1\b&x\x15\xb3>\xfa2BM\xfb\t\x8b\x92\x96\xeb\f\x8a\xf7\xbe\x19\xa1H4Jk\x17$\x18ˠޤ\xd7jp\xa4T\xecp\x19\x12\xbd\xf6<\xf5Z㈚\xd3\x14\xa5\x92h~'X\xa93i\xc8.\xc8\xca\f\xb5\xeaM\xe0\xfa\xee\xb6\xd7)\xf0\xd9s\xddڽJcJSxb\xbc\xbf~B!y\xb8\xbe\xbb\x85\ar#0\xc0\x04g\xfd\xc0TJX5\xf8\x05Yz\xb8\x97?i\x84\xb4\xb2\xda ز\x8b\x11\xc0\x1b\xdc\xd2bSH0\xa8\x03*E\xb2\xa7-j\xb22kk\xa4Sܲ*7^\xb9p\ro\xbf\x83\x82\x8b\xca\xe01\xdfa\x9a\xf7\x8eH\x16\x9c\x9b\x8d\xbe\x97_P\x1b\x9eD\x10\xf4\xfd`\xc7\x16Q\x9f24\x19*\xd2t\xf6\x835\x1e\xa3s\xafIo\xd8#\xf9\x1f\x1b'Nd\x88\xf2\x1cJ\x99\xc2ލ\x04\x9bC@zj\xc2\x1b)sdC\"\x88_\x93\xbcJ1\xad}\xc6A!\xeb\xcd\xf6樓\xf5\xae\x19\x17\xb4dɗ%TE\xfdud\x9e\xd6\xf83\x85@Z\x97\v\a\x13\xb8\xf3\xf16#\xab\x97\n7X\x8c\xe09\xcbb\xb0^<\xdb\xe4x\x05FUC\x8a#\xc0`J\xb1\xc3\x04\xcdB\x04\xb2\x84du\x1fo\x1bs\x9e \x11\xab\xb6\x80\x96j\x964#\xf3\xfb?$X&\xe5c\f\x91\xfeA\xed\x1aK\x0f\x89\r\xf4`\x83\x19\xdbs\xa9t\xdf]į\x98T\x06\xc7\xd6\x113\x90\xf2\xed\x16\x15\xc1\xb2\xd1I\x1d\xccL\x11kZ\xdfRQӌ?\x9aW\xc3tb\x9e\xa5\xc6\xd8T\xac]\x1b\x85\n\x16qR\x87U\t\\\xa4|\xcfӊ\xe5\xc0\x856L$n~\xac\xc6ox~0'\x10G\xf8;k\x16fA\\\xea\xb8\tR \xf9\xf6\x85T\xc3\xc2\x11\xca1\x98q2l\x18i@9fۛ\xa2($\xf6\xa8\xa4\xd6\x1e5z\xe7\xa2\xe1\x94\xf3\xb0s\xb6\xc1\x1c4\xe6\x98\x18\xa9\xc6\xc9\x13#\x04\xae\xc4\xea\xcf\x11\xca\x0ehҮ!\x9eU\xa2M!K\x9d\xf1$s\xce0I\x99\x85\x05\xa9Dm5\x06+\xcb\xfc05i\x88\x91\f?\u061c\xd2hJ\x84\xfa\xe8\xc3\x1dS$M\x89\xd4\xc1M\x99\xd1\xc6]\xaa\xd7b\xf3J\xf4\x0e\x9a⛄\xfd\xf6\xa8\xfb\xf3\v;\x91\x9bS\xb0|\xbb\x05,Js\xb8\x00nBm\fTr\xb0\x1a<\xfe`\x8c;m\xb5\xdc\xf6{?\xfbjy\x16\xae\xd5h\xfcA\x98f\x8d՝\xb7U\x8b\x18\xf6\xa1\xdd\xf3\x02\xf8\xb6fXz\x01[\x9e\x1b\xb4\xbe\xd4\x1c\xa2-Gg\x96s\xcfI\xa0X\xdbK\xa5`&\xc9n\xea\xfd\x81\x88\x1e=Z\xf5\x018\xbf<\xc40\x96\a\x11 \xa1v*\xec\x96\x12WX\xb8\xad\xaa{\xbb>\x9a\x1a\xeb\x01\xbe\xfb\xf8\x1e\xd39\x92A\xbc\xa4\x1eM\xea]\xcf\xd3i\xa3`'\x18\x05\xb25)\xeb\xa6\xd51\x9eې\xbc\x00\x06\x8fxp\x9e\xd5`p9T\x88\xb5\xac\x06\xa9\xd0\xee\x8eZ5\xf2\x88\a\v\xcaowF\xc1[\"*\xae<\xe2!\xb6i\x8f\xa8\x84\x9f\xdf\xf0qԥ\n;\x8b\x98\xa5Ԕ\x9a\xa8~퀑q\x93\x85eJ)\x94@\xf1\x13\xa7]3\xac\xb3\xc7\xff\x88\x877ڱ\x8fVM\xc6\xcb\x05\x14 \x85\r\x1a\xed\n\v\x9b\xdb\x0f,\xe7i=\x98]'\v ފ\v\xf8(\r\xfds\xf3\x95kBQ\xa4\xf0^\xa2\xfe(\x8d\xadyQ\x12\xbbI\x9cH`\xd7\xd9.K\xe1\xcc\x02\xd1e\xd1\xf8\r\x0eք\x92\x88\xd6l\xe3\x1an\x05\xc5g\x8e>Kؔa@ΡUT\xdan\x8f\v)V\xd6L\x87\xd1\x16\x00m\xe3\xe5Y%U\x87S\x17\v!\x0e\xa2\xe8ѻ'k\xe5\xbe\x1c\x1d,L\x15\x85e\xce\x12L\xc3v\xa5=\xc5`\x06w<\x81\x02\xd5\x0e\xa1$\xbb\x11/T\v4\xb9+'Ha\xbck\x11\x8a7\vi\x1cb+Z\xf5\x91-\x03\x9b\xa3\x9a\x8f\x1cYL7\x8f\x9b\xa55\xef\xd6\x1f\x8a\xa2~\xfb||\x99eYȯc\x1f\xc4!\xe9\u070f\x82\xd9\xcd\xde_ɼZ\xf1\xfe-\xce\x1a2\xae\xf4\x1a\xde\xd9\xec\x80\x1c\xdb\xfd\xc3.ak\xa8(\x90\x84\t\xd7@r\xb2g9\xb9\x0f\xa4\xbc\x05`\xee\x9c\t\xb9=\xf2\xa0\xe2T\xccS&\xb5\xb3\xf9[\x8e\xb9=*<\x7f\xc4\xc3\xf9ő\xf6:\xbf\x15\xe7q0I\xe7\x1f)\xad\xdak\x91\"?\xc0\xb9\xfdvn\x1d\xb3%K\xe4\x04\xe7m\x81TG7\xb5g\xf9KB\x01\x8a\xb5\x83\xd7B\x9d\xeb\x13or\xe1\xe7f\x11-ӥ\xd4#\xc7N#h}\x96ڸ\r\xc0\x8e\xbb=\xb0C\x18\x13\xfd\xf9]C`[\x83\n\xb4\x91*\x9c.\x93\xda\xedm\x90\x13\xe7\xf5<\xef\x89\xd5\xf5n\xa4\x03LA\xe6y\xa3!\x9cN?w\xc7\xce\xf4\xf7<\xcc\xc4:K\x16v\xa9d\x82ZϋR\xa4\xe5\x98ٰ\xad7k\x99\v\u07b6Q\xaa9f+9\x94e\xae8\x91\xf6\x84\xc0\xe6\xe6kkߙ\xd4\x10\xfd\x8e\x11\xe5Sp\x04\x9b5V\x14\xac\x9f\xe9\x10\x8d\xee\xb5\xeb\x1d\x16\xa0\a\xe6\x02&\xb5\xab\xacRY\xe67{\x91\xfc\xbd9\x1e\x05\x17\xb7v x\xfbb\xce\n\x04U\x8e\xa7\x862ס\x7fÐ\xba\"6~\x85pn/\xedY\x8d\xc2\x0eg\x8fO2\xe29\x05\xe4L\viڛ5~\xa47\x1a\xb6\\i\xd3 \xbc\x00*\xd7\xf68\xf9ecLq\xa3\xd4\xc9!\xe6'\u05fb\xb5\xad\x98\xc9'\x9fe\xb2$\xb0\x0e\xc4\xcf\xd8\x1e\x81o\x81\x1b@\x91\xc8J\xd8\r/R\x174\xcc\x02\x88\x8e\x89ΘD\xda\xccVgQ\x15\xf1\x04YY\xe9\xe4bvw\xac\xdd\xe5\a\xc6\xe3v\xa7\xe04\xb6\x9a\xa9\x8c\x92\xa1\xd2M\x93\xf1\xa9%\xedt\xa2\x82}\xe5EU\x00+\x88-K\xe2ƭKJ\t\xb9G\x8e\xd7O\x8c\x1b\x9f\x8e\xe9\x0eV\x97i\xd3D\x16e\x8e\x06C\xbaI\"\x85\xe6)\xd6\xee\x83\xe7\xff`\xf2\xceXa\xb0e<\xaf\xd4\x02\x1d\xbd\x983K\xe36\xaf\x9e\x9e?\x18\x8bGde\x89\x19\xb9\xe9\xbe\xc0i\x9e\xb7\x1f\xa5Z\xe62\x7fV\xf8\xfc\xaei\xa98I\xa9\x9c\xf3NgaZ\xef\xb5\xeb\x9dz\xe1e\xe20\xe6\x9e\xceB\xb5\x98\xbc\xba\xa7uyuO_\xdd\xd3W\xf7\xb4W^\xdd\xd3W\xf7\xf4\xd5=\x1d.\xaf\xeei\xab\xbc\xba\xa7\xd1\xf6#\x06Õݹ\x9dh\x10\x85Ud\n\xc6\x1c\xda3c\xf9L\xa3\xeb\xbc\xd2\x06Ւ\f\xe9\xdb\xe1\x9e\x039\xf4\x89k\xb2\xb2\xd7\x1dǤ\xa6I]i\x8c^\x9d2MK2,&w\xb1%\xc2\v\x8fN\x83\x1e϶\x8fM\xa0\x9bK\x9b\xeb\xe6\x8e\xd7\xe9j\xee\xaf\x11\x82\x18\x19\x86\xf7\xdcs\x17\xa6\xda9W\xdd\xdc7\x1b\a\x04\x8c\x7f\x97y\xe5\x91im3\xc9lӉ\xf8c\x16>вw\xb8\xd0%\xa6\xea$~\xff\xaei\x19\x91m6\x9ec\xe6O-Ѱ\xfd\xdbu\xf7\x8b\x91>\xe3ldfO\xdcd\xee2\x17\x85\xaeb\xd7Nk\x0fr\xea/R\xf6i<\x02Q*\x10\x11\x90*E5{\xb8\xb2D4g\x85\xb2\x17\x13u\xc7\xef\xbd:\x10\xdeĢV탛1\xee\xc8\xfa\x16|\x02?r\x91:ސ\x10\xb6\xfc\v\xfbj\xa1\xbd'S;>\xe3b\xd4x\x9b\xbdC#\x8d%#5j\x83\"{\xb8\xad\xd7pÒ\xacn8\x02ю\x9c1\r[\xa9\nf\xe0\xbc>\x8d\xbb\f=\xa9\xe6|\r\xf0\x83\xac\x0fB[\xaf܌\xc0ռ(\xf3\x03E?p\xde\x05\xf4m\xa23*~ڿ\x04\xe7\x1fD\x8b\x88\x80\xef\xba=\x06\x8e}\xc3shI.\xab\xb4\x1ea\x82\xddL\x1c\xe0\xf3\x83\xf5\xa6\xec#PI\xf3X\x96\xf7\x95B$\xdc{Kk\x04\xe4\u0603\x82\x8bH6~8\xac\x8dTl\x87\x1f\xa4{k1\x86f\xdd\x1e\x9d\xe76\xbd\xae\n\xa9\"\xfe\xeeר$\xbb\xb9\xf5\x016\x19d~\xb55g\xe9\x84\xed\x98\x12\x9bY\xe7\xc6\xe4\x11\x93\xbb\xbf\xff\xe0&dx\x81\xeb\xf7\x95;\xa8_\x95Li$J\x87\x89\xbaN\x9bq;\x97\xc9'ȥ\xa7\xc3\xf7\xfdy(\xb4\x19k6'\xe0\xa4\xd9\xec;O\x1f\x06\xd2ň\xfc\xc3p\xcfV \xdbb\xe2\xd4Ѿ\u070e\xc2bZ˄[]d\xb7\x84l\xa2\xd8\xcb=\x157eQ&TF\xa5\xf1ӓ@\xf5%,T}+\x1c\xa7f^\xe2\xfc\xe9\xa8c`\xf0\x90\xfa \xfd\xd7k>d\xf7\x84'\x90v\xafT\x86\xbd-\xae\xeb\xb7I\x8fI7\xb3\xfe\xc7\xd7\xfe\xb0\xef\xba\x1a~\x0etU\xbfPz\x16AY\xf7\ng̣\xaf\xee\xb9΄\x95\xa6R\u07bc&\x95\xb2\xef\xe6\x11\x10t\xcfʝ\xf6\xeck\xf3\x04\xf6\f/\x9bG\xb1\x9bh\x7f\xf6\t\xee\x01\xfe\xd5\x0fȎ\xbe\xa8ꬫ{\"{E\xf0Oc\xe7\xe0:\xb0\xef\f\xce\xcc\xf43\xb5\xa9\x93|=\xa1m\xc7\xf0>\xe1\xdd\x18\xea\xc3Y\x9b+\xf8\x88O\x03\xb57\x82&q|\xa6\xe6R31\xb5{\x04CO^ONq_\xf7\xb2y\xb1\x03ڢ\xab\xe6z\xcd{\t7,\xcf[\x10]\x0e\xec\x10[\xff̷n\x03'\xa19\xfd\xe5\xa8Ũ\xe2\x9aTZc\nkpI\x1dUjT{L[B\xe2mx\xbb\xa6\xda4\xcfE¯\xbf\x9d5\xab\x92%\t\x96\xc6'v\xb5\xffk\x80\xf3s\xfb#\xbc\xfco\x7f&R8G[_\xc1\xbf\xfe}\x06\xde\x00?\x84\xe7\xfd\xa9\xf2\xbf\x01\x00\x00\xff\xff\x9dJq\x1dHa\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4VO\x8f\xeb4\x10\xbf\xe7S\x8c\x1e\x87w!\xe9{\xe2\x00\xca\r\x15\x0e+`\xb5\xda>\xed\x05qp\x9di;\xacc\x9b\xf1\xb8K\xf9\xf4\xc8v\xb2m\x93\x94]\x90\xf0-\xf6\xfc\xf9\xcdo\xfed\xaa\xba\xae+\xe5\xe9\t9\x90\xb3-(O\xf8\xa7\xa0M_\xa1y\xfe.4\xe4V\xc7\xcf\xd53ٮ\x85u\f\xe2\xfaG\f.\xb2\xc6\x1fpG\x96\x84\x9c\xadz\x14\xd5)Qm\x05\xa0\xacu\xa2\xd2uH\x9f\x00\xdaYag\fr\xbdG\xdb<\xc7-n#\x99\x0e9\x1b\x1f]\x1f?5\xdf6\x9f*\x00͘տP\x8fAT\xef[\xb0ј\n\xc0\xaa\x1e[\b\xc8II\x94\xc4\xc0\xf8G\xc4 \xa19\xa2Av\r\xb9*x\xd4\xc9\xf1\x9e]\xf4-\x9c\x1f\x8a\xfe\x00\xaa\x04\xb4ɦ6\xd9\xd4c1\x95_\r\x05\xf9\xe9\x96\xc4\xcf4Hy\x13Y\x99e@Y \x1c\x1c\xcb\xfd\xd9i\r!py!\xbb\x8fF\xf1\xa2r\x05\x10\xb4\xf3\xd8B\xd6\xf5JcW\x01\fLe[\xf5\xc0\xc5\xf1s1\xa7\x0fث\xe2\x04\xc0y\xb4\xdf?\xdc=}\xb3\xb9\xba\x06\xe80h&/\x99\xef\x85Ȁ\x02(\x18P\x808PZc\b\xa0#3Z\x81\x82\x12\xc8\xee\x1c\xf79G\xaf\xa6\x01\xd4\xd6E\x019 d\x05\xd9*\x03Ge\"~\r\xcavЫ\x130&/\x10텽,\x12\x1a\xf8\xc51f2[8\x88\xf8ЮV{\x92\xb1\xeb\xb4\xeb\xfbhIN\xab\xdc@\xb4\x8d\xe28\xac:<\xa2Y\x05\xda\u05ca\xf5\x81\x04\xb5Dƕ\xf2Tg\xe86w^\xd3w_\xf1Ч\xe1\xe3\x15V9\xa5\xca\n\xc2d\xf7\x17\x0f\xb9!\xfe!\x03\xa9\x1dJ}\x14\xd5\x12ř\xe8t\x95\xd8y\xfcq\xf3\x05F\xd79\x19S\xf63\xefg\xc5pNA\"\x8c\xec\x0e\xb9$qǮ\xcf6\xd1vޑ-ե\r\xa1\x9d\xd2\x1f\xe2\xb6'\tc\xed\xa6\\5\xb0Σ\b\xb6\b\xd1wJ\xb0k\xe0\xce\xc2Z\xf5h\xd6*\xe0\xff\x9e\x80\xc4t\xa8\x13\xb1\xefK\xc1\xe5\x14\x9d\n\x17\xd6.\x1e\xc61w#_\vݽ\xf1\xa8S\x06\x13\x89I\x9bv\xa4s{\xc0\xce1\xa8%\x95\xe6]H\xb2ƿ\xc42L\x92\x82f2_R\x7f\xbe\x8dfy\x9c䗃\n8\xbd\x9c`zH2S\xff\x86v\xa8O\xda`1Q\xa6\t\xbe\r%\x1d\xb4\xb1\x9f\xfb\xac\xe1\x1e_\x16n\x1fإɚ\xe7\xfa\xf5\xb9Q\x1bP\xfe7{\xb2\xb3p\xa7\x91\x15\xa9\xfc\x0f\xbb\x1c\xd5\x17\x03z0\x04\x1c\xadM};\x9b\x90\x19\xc8t\x92\xcfdH\xb0_@\xb3\x88\xe7\xce\xee\\\xde\x04Tr\xac\xa4\xf4\x13\x0e\xc9\x1e\xfc\x14\\\v\x06o纜\xf9\xf0z\x17\xa1\xe5\xe4?\xe9\x7fSN\xe3\x86\x18\x17}\xd7\x19\xd5\xe2C\xf2\xb8\xc4\xf8r\x7f\r(\xa31jk\xb0\x05\xe18\xd7.\xba\x8aY\x9d\xa6U3\x96\xday\x9fz\xa3\x80f\n\xa9O^\x0ehou\x03\xbc\xa8锿\xf2\f\xdb\xd3-\xd5\xf5\xebr8o\xa9R\xba-\xa4\xd9]\v-p\xf6.R\x16\xb3WJzq\xf3\x98\x11\xb2\xb9\x94\x1dg\xc6Uk\x8c\x8b\xc8<\x86\x9b\x10\x16\x93=\xbb\xcc滋\xf0\x828V\xfb1\xe0\xf3\xe8M\x9b\x9a\x17\xec\xee\xa7+\xee\x87\x0fW\xbbj\xfe\xd4\xcevT6t\xf8\xf5\xb7\xaaX\xc5\xeei\\0\xd3\xe5\xdf\x01\x00\x00\xff\xff\xfb\xb1p\x12\x1b\f\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4VM\x8f\xdb6\x10\xbd\xebW\f\xd2C.\x95\x9c\xa0\x87\x16\xba\x05n\x0fA\xd3`\x11\xa7\xbe\x14=\xd0\xe4Ȟ.E\xb2\x9c\xa1\xdb\xed\xaf/HQ돕\xb7Y\xa0э\xc3\xe1\x9b7o>\xec\xa6m\xdbF\x05\xdabd\xf2\xae\a\x15\b\xff\x16t\xf9\xc4\xdd\xfd\x0fܑ_\x1d\xdf6\xf7\xe4L\x0f\xeb\xc4\xe2\xc7O\xc8>E\x8d?\xe2@\x8e\x84\xbckF\x14e\x94\xa8\xbe\x01P\xceyQ\xd9\xcc\xf9\b\xa0\xbd\x93\xe8\xad\xc5\xd8\xee\xd1u\xf7i\x87\xbbD\xd6`,\xe0s\xe8\xe3\x9b\xee\xfb\xeeM\x03\xa0#\x96\xe7\x9fiD\x165\x86\x1e\\\xb2\xb6\x01pj\xc4\x1e\x8eަ\x11٩\xc0\a/\xd6\xeb)XwD\x8b\xd1w\xe4\x1b\x0e\xa8s\xec}\xf4)\xf4p\xba\x98 *\xaf)\xa7mA\xdbT\xb4\x0f\x15\xad8Xb\xf9\xf9\x19\xa7\x0f\xc4R\x1c\x83MQٛ̊\x0f\x93\xdb'\xab\xe2-\xaf\x06\x80\xb5\x0f\xd8\xc3\xc7L1(\x8d\xa6\x01\xa8\xf2\x14\xca\xed,\xc0\xdb\tQ\x1fpTS.\x00>\xa0{w\xf7~\xfb\xdd\xe6\xc2\f`\x90u\xa4 E\xe4\xe5D\x80\x18\x14\xccL\xe0\xaf\x03F\x84mQ\rX|D\xae\xa4\x1fA\x01f\xfe\xdc=\x1aC\xf4\x01\xa3\xd0,\xf0\xf4\x9d\xb5י\xf5\x8a\xd7\xebL}\xf2\x02\x93\xfb\n\x19\xe4\x80s\xfahj\xb6\xe0\a\x90\x031D\f\x11\x19\x9d\x9c\xcau\xfa\xfc\x00ʁ\xdf\xfd\x81Z:\xd8`\xcc0\xc0\a\x9f\xac\xc9\xedx\xc4(\x10Q\xfb\xbd\xa3\x7f\x1e\xb1\x19ė\xa0V\t\xd6ʞ>r\x82\xd1)\vGe\x13~\v\xca\x19\x18\xd5\x03D\xccQ \xb93\xbc\xe2\xc2\x1d\xfc\xe2#\x02\xb9\xc1\xf7p\x10\tܯV{\x92y\xac\xb4\x1f\xc7\xe4H\x1eVeBh\x97\xc4G^\x19<\xa2]1\xed[\x15\xf5\x81\x04\xb5\xa4\x88+\x15\xa8-\xd4\xdd\xd4\xed\xa3\xf9&\xd6A\xe4\xd7\x17\\\xe5!w\x11K$\xb7?\xbb(\xed\xfeL\x05r\xa7O\x8d0=\x9d\xb28\t\x9dMY\x9dO?m>\xc3\x1c\xba\x14\xe3Z\xfd\xa2\xfb\xe9!\x9fJ\x90\x05#7`\x9c\x8a8D?\x16Lt&xrR\x0e\xda\x12\xbak\xf99\xedF\x92\\\xf7?\x13\xb2\xe4Zu\xb0.\xbb\x06v\b)\x18%h:x\xef`\xadF\xb4k\xc5\xf8\xd5\v\x90\x95\xe66\v\xfbe%8_\x93\xd7Γj\xe7\x03V\x97؍z-O\xf2&\xa0\xbe\x18\xa0\x8cB\x03\xd5\xc9\x1e|\xbc\xd2U\xcds\xbe\x8c\xd7]\xb8/\x0f8L;~\xa0\xfd\xb5\x15@\x19S~!\x94\xbd\xbb\xf9\xf6\x19\xc1\x16\xf2^\x97H\xb9Q\a\x1f3\xa3#\x19\x8c\xed\x9cge\x92bM\x98\xd0\x1a\xee\x9e@\xdeм&Y \x9fҼ\xe0qW\xdd2\x93,\xf4\xfcl\xdaPX\x17fY\x9fj\x8f\xb7\x18,d\x9c;\x9c\"^\xcdj\xfb\x18\xe0\x8bzG\x94$~y\xf7\x94g\xd5sW;H\xa7\x18\xd1I\xc5\\ش\xffO\a\x85\x83b\xfc\x0f͗#\xdc\xe5\x97s\x19,\r\xa8\x1f\xb4\xc5\t\x10\xfc\xb0\xd0m/\xa2\x9c?ti|ʭ\x85wGEV\xed,.\xdc\xfd\xea\xd4\xcdۛ\xc5_\xac\xe7\x13#\xe7ujz\x90\x98&\xec\xdae\xd5r\xaa\xbe\xd2\x1a\x83\xa0\xf9x\xfd\xaf\xe7ի\x8b?.娽\x9b\x86\x95{\xf8\xed\xf7fBE\xb3\x9d\xff\x81d\xe3\xbf\x01\x00\x00\xff\xff\xbf\xca\xff\xa71\n\x00\x00"), } var CRDs = crds() diff --git a/go.mod b/go.mod index 004d6538ae..743471c00f 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/vmware-tanzu/velero -go 1.17 +go 1.18 require ( cloud.google.com/go/storage v1.10.0 @@ -11,7 +11,7 @@ require ( github.com/Azure/go-autorest/autorest/azure/auth v0.5.8 github.com/Azure/go-autorest/autorest/to v0.3.0 github.com/apex/log v1.9.0 - github.com/aws/aws-sdk-go v1.28.2 + github.com/aws/aws-sdk-go v1.43.31 github.com/bombsimon/logrusr/v3 v3.0.0 github.com/evanphx/json-patch v5.6.0+incompatible github.com/fatih/color v1.13.0 @@ -35,20 +35,20 @@ require ( github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.7.1 github.com/vmware-tanzu/crash-diagnostics v0.3.7 - golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 - golang.org/x/net v0.0.0-20220615171555-694bf12d69de + golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 + golang.org/x/net v0.7.0 golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb golang.org/x/sync v0.0.0-20210220032951-036812b2e83c google.golang.org/api v0.56.0 google.golang.org/grpc v1.40.0 - k8s.io/api v0.24.1 - k8s.io/apiextensions-apiserver v0.24.1 - k8s.io/apimachinery v0.24.1 + k8s.io/api v0.24.2 + k8s.io/apiextensions-apiserver v0.24.2 + k8s.io/apimachinery v0.24.2 k8s.io/cli-runtime v0.24.0 - k8s.io/client-go v0.24.1 + k8s.io/client-go v0.24.2 k8s.io/klog v1.0.0 k8s.io/kube-aggregator v0.19.12 - sigs.k8s.io/controller-runtime v0.12.1 + sigs.k8s.io/controller-runtime v0.12.2 sigs.k8s.io/yaml v1.3.0 ) @@ -81,7 +81,7 @@ require ( github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb // indirect github.com/imdario/mergo v0.3.13 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect - github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect @@ -110,9 +110,9 @@ require ( go.uber.org/multierr v1.6.0 // indirect go.uber.org/zap v1.19.1 // indirect golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd // indirect - golang.org/x/sys v0.0.0-20220614162138-6c1b26c55098 // indirect - golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 // indirect - golang.org/x/text v0.3.7 // indirect + golang.org/x/sys v0.5.0 // indirect + golang.org/x/term v0.5.0 // indirect + golang.org/x/text v0.7.0 // indirect golang.org/x/time v0.0.0-20220609170525-579cf78fd858 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect @@ -122,12 +122,10 @@ require ( gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/component-base v0.24.1 // indirect + k8s.io/component-base v0.24.2 // indirect k8s.io/klog/v2 v2.60.1 // indirect k8s.io/kube-openapi v0.0.0-20220614142933-1062c7ade5f8 // indirect k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 // indirect sigs.k8s.io/json v0.0.0-20220525155127-227cbc7cc124 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect ) - -replace github.com/gogo/protobuf => github.com/gogo/protobuf v1.3.2 diff --git a/go.sum b/go.sum index f3afe3d68c..4dfd59f15f 100644 --- a/go.sum +++ b/go.sum @@ -121,8 +121,8 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPd github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/aws/aws-sdk-go v1.20.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.28.2 h1:j5IXG9CdyLfcVfICqo1PXVv+rua+QQHbkXuvuU/JF+8= -github.com/aws/aws-sdk-go v1.28.2/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.43.31 h1:yJZIr8nMV1hXjAvvOLUFqZRJcHV7udPQBfhJqawDzI0= +github.com/aws/aws-sdk-go v1.43.31/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= @@ -142,7 +142,6 @@ github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx2 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= @@ -190,7 +189,6 @@ github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25Kn github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful/v3 v3.8.0 h1:eCZ8ulSerjdAiaNpF7GxXIE7ZCMo1moN1qX+S609eVw= github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= @@ -271,6 +269,9 @@ github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJA github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -416,7 +417,6 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= @@ -424,8 +424,11 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jhump/protoreflect v1.6.0 h1:h5jfMVslIg6l29nsMs0D8Wj17RDVdNYti0vDN/PZZoE= github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= @@ -445,6 +448,8 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -731,7 +736,6 @@ go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= -go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= @@ -793,8 +797,9 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 h1:kQgndtyPBW/JIYERgdxfwMYh3AVStj88WQTlNDi2a+o= golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -852,8 +857,8 @@ golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220615171555-694bf12d69de h1:ogOG2+P6LjO2j55AkRScrkB2BFpd+Z8TY2wcM0Z3MGo= -golang.org/x/net v0.0.0-20220615171555-694bf12d69de/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -967,16 +972,14 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220614162138-6c1b26c55098 h1:PgOr27OhUx2IRqGJ2RxAWI4dJQ7bi9cSrB82uzFzfUA= -golang.org/x/sys v0.0.0-20220614162138-6c1b26c55098/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 h1:CBpWXWQpIRjzmkkA+M7q9Fqnwd2mZr3AFqexg8YTfoM= -golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -985,8 +988,9 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -997,8 +1001,10 @@ golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220609170525-579cf78fd858 h1:Dpdu/EMxGMFgq0CeYMh4fazTD2vtlZRYE7wyynxJb9U= golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -1256,20 +1262,18 @@ k8s.io/api v0.19.0/go.mod h1:I1K45XlvTrDjmj5LoM5LuP/KYrhWbjUKT/SoPG0qTjw= k8s.io/api v0.19.12/go.mod h1:EK+KvSq2urA6+CjVdZyAHEphXoLq2K2eW6lxOzTKSaY= k8s.io/api v0.22.2/go.mod h1:y3ydYpLJAaDI+BbSe2xmGcqxiWHmWjkEeIbiwHvnPR8= k8s.io/api v0.24.0/go.mod h1:5Jl90IUrJHUJYEMANRURMiVvJ0g7Ax7r3R1bqO8zx8I= -k8s.io/api v0.24.1 h1:BjCMRDcyEYz03joa3K1+rbshwh1Ay6oB53+iUx2H8UY= -k8s.io/api v0.24.1/go.mod h1:JhoOvNiLXKTPQ60zh2g0ewpA+bnEYf5q44Flhquh4vQ= -k8s.io/apiextensions-apiserver v0.24.0/go.mod h1:iuVe4aEpe6827lvO6yWQVxiPSpPoSKVjkq+MIdg84cM= -k8s.io/apiextensions-apiserver v0.24.1 h1:5yBh9+ueTq/kfnHQZa0MAo6uNcPrtxPMpNQgorBaKS0= -k8s.io/apiextensions-apiserver v0.24.1/go.mod h1:A6MHfaLDGfjOc/We2nM7uewD5Oa/FnEbZ6cD7g2ca4Q= +k8s.io/api v0.24.2 h1:g518dPU/L7VRLxWfcadQn2OnsiGWVOadTLpdnqgY2OI= +k8s.io/api v0.24.2/go.mod h1:AHqbSkTm6YrQ0ObxjO3Pmp/ubFF/KuM7jU+3khoBsOg= +k8s.io/apiextensions-apiserver v0.24.2 h1:/4NEQHKlEz1MlaK/wHT5KMKC9UKYz6NZz6JE6ov4G6k= +k8s.io/apiextensions-apiserver v0.24.2/go.mod h1:e5t2GMFVngUEHUd0wuCJzw8YDwZoqZfJiGOW6mm2hLQ= k8s.io/apimachinery v0.19.0/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= k8s.io/apimachinery v0.19.12/go.mod h1:9eb44nUQSsz9QZiilFRuMj3ZbTmoWolU8S2gnXoRMjo= k8s.io/apimachinery v0.22.2/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0= k8s.io/apimachinery v0.24.0/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= -k8s.io/apimachinery v0.24.1 h1:ShD4aDxTQKN5zNf8K1RQ2u98ELLdIW7jEnlO9uAMX/I= -k8s.io/apimachinery v0.24.1/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= +k8s.io/apimachinery v0.24.2 h1:5QlH9SL2C8KMcrNJPor+LbXVTaZRReml7svPEh4OKDM= +k8s.io/apimachinery v0.24.2/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= k8s.io/apiserver v0.19.12/go.mod h1:ldZAZTNIKfMMv/UUEhk6UyTXC0/34iRdNFHo+MJOPc4= -k8s.io/apiserver v0.24.0/go.mod h1:WFx2yiOMawnogNToVvUYT9nn1jaIkMKj41ZYCVycsBA= -k8s.io/apiserver v0.24.1/go.mod h1:dQWNMx15S8NqJMp0gpYfssyvhYnkilc1LpExd/dkLh0= +k8s.io/apiserver v0.24.2/go.mod h1:pSuKzr3zV+L+MWqsEo0kHHYwCo77AT5qXbFXP2jbvFI= k8s.io/cli-runtime v0.22.2/go.mod h1:tkm2YeORFpbgQHEK/igqttvPTRIHFRz5kATlw53zlMI= k8s.io/cli-runtime v0.24.0 h1:ot3Qf49T852uEyNApABO1UHHpFIckKK/NqpheZYN2gM= k8s.io/cli-runtime v0.24.0/go.mod h1:9XxoZDsEkRFUThnwqNviqzljtT/LdHtNWvcNFrAXl0A= @@ -1277,16 +1281,14 @@ k8s.io/client-go v0.19.0/go.mod h1:H9E/VT95blcFQnlyShFgnFT9ZnJOAceiUHM3MlRC+mU= k8s.io/client-go v0.19.12/go.mod h1:BAGKQraZ6fDmXhT46pGXWZQQqN7P4E0BJux0+9O6Gt0= k8s.io/client-go v0.22.2/go.mod h1:sAlhrkVDf50ZHx6z4K0S40wISNTarf1r800F+RlCF6U= k8s.io/client-go v0.24.0/go.mod h1:VFPQET+cAFpYxh6Bq6f4xyMY80G6jKKktU6G0m00VDw= -k8s.io/client-go v0.24.1 h1:w1hNdI9PFrzu3OlovVeTnf4oHDt+FJLd9Ndluvnb42E= -k8s.io/client-go v0.24.1/go.mod h1:f1kIDqcEYmwXS/vTbbhopMUbhKp2JhOeVTfxgaCIlF8= +k8s.io/client-go v0.24.2 h1:CoXFSf8if+bLEbinDqN9ePIDGzcLtqhfd6jpfnwGOFA= +k8s.io/client-go v0.24.2/go.mod h1:zg4Xaoo+umDsfCWr4fCnmLEtQXyCNXCvJuSsglNcV30= k8s.io/code-generator v0.19.0/go.mod h1:moqLn7w0t9cMs4+5CQyxnfA/HV8MF6aAVENF+WZZhgk= k8s.io/code-generator v0.19.12/go.mod h1:ADrDvaUQWGn4a8lX0ONtzb7uFmDRQOMSYIMk1qWIAx8= -k8s.io/code-generator v0.24.0/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= -k8s.io/code-generator v0.24.1/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= +k8s.io/code-generator v0.24.2/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= k8s.io/component-base v0.19.12/go.mod h1:tpwExE0sY3A7CwtlxGL7SnQOdQfUlnFybT6GmAD+z/s= -k8s.io/component-base v0.24.0/go.mod h1:Dgazgon0i7KYUsS8krG8muGiMVtUZxG037l1MKyXgrA= -k8s.io/component-base v0.24.1 h1:APv6W/YmfOWZfo+XJ1mZwep/f7g7Tpwvdbo9CQLDuts= -k8s.io/component-base v0.24.1/go.mod h1:DW5vQGYVCog8WYpNob3PMmmsY8A3L9QZNg4j/dV3s38= +k8s.io/component-base v0.24.2 h1:kwpQdoSfbcH+8MPN4tALtajLDfSfYxBDYlXobNWI6OU= +k8s.io/component-base v0.24.2/go.mod h1:ucHwW76dajvQ9B7+zecZAP3BVqvrHoOxm8olHEg0nmM= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= @@ -1315,8 +1317,8 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.30/go.mod h1:fEO7lRTdivWO2qYVCVG7dEADOMo/MLDCVr8So2g88Uw= -sigs.k8s.io/controller-runtime v0.12.1 h1:4BJY01xe9zKQti8oRjj/NeHKRXthf1YkYJAgLONFFoI= -sigs.k8s.io/controller-runtime v0.12.1/go.mod h1:BKhxlA4l7FPK4AQcsuL4X6vZeWnKDXez/vp1Y8dxTU0= +sigs.k8s.io/controller-runtime v0.12.2 h1:nqV02cvhbAj7tbt21bpPpTByrXGn2INHRsi39lXy9sE= +sigs.k8s.io/controller-runtime v0.12.2/go.mod h1:qKsk4WE6zW2Hfj0G4v10EnNB2jMG1C+NTb8h+DwCoU0= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= sigs.k8s.io/json v0.0.0-20220525155127-227cbc7cc124 h1:2sgAQQcY0dEW2SsQwTXhQV4vO6+rSslYx8K3XmM5hqQ= sigs.k8s.io/json v0.0.0-20220525155127-227cbc7cc124/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= diff --git a/golangci.yaml b/golangci.yaml index 0b6da27f7c..e958170d02 100644 --- a/golangci.yaml +++ b/golangci.yaml @@ -25,8 +25,8 @@ run: # from this option's value (see skip-dirs-use-default). # "/" will be replaced by current OS file path separator to properly work # on Windows. - #skip-dirs: - # - src/external_libs + skip-dirs: + - test/e2e/* # - autogenerated_by_my_lib # default is true. Enables skipping of directories: @@ -39,8 +39,8 @@ run: # autogenerated files. If it's not please let us know. # "/" will be replaced by current OS file path separator to properly work # on Windows. - # skip-files: - # - ".*\\.my\\.go$" + skip-files: + - ".*_test.go$" # - lib/bad.go # by default isn't set. If set we pass it to "go list -mod={option}". From "go help modules": @@ -117,7 +117,7 @@ linters-settings: # minimal length of string constant, 3 by default min-len: 3 # minimal occurrences count to trigger, 3 by default - min-occurrences: 3 + min-occurrences: 5 gocritic: # Which checks should be enabled; can't be combined with 'disabled-checks'; # See https://go-critic.github.io/overview#checks-overview @@ -320,7 +320,7 @@ linters: fast: false -#issues: +issues: # # List of regexps of issue texts to exclude, empty list by default. # # But independently from this option we use default exclude patterns, # # it can be disabled by `exclude-use-default: false`. To list all @@ -359,7 +359,7 @@ linters: # it can be disabled by this option. To list all # excluded by default patterns execute `golangci-lint run --help`. # Default value for this option is true. - exclude-use-default: false + exclude-use-default: true # The default value is false. If set to true exclude and exclude-rules # regular expressions become case sensitive. diff --git a/hack/build-image/Dockerfile b/hack/build-image/Dockerfile index 468074e402..21b3bd87ea 100644 --- a/hack/build-image/Dockerfile +++ b/hack/build-image/Dockerfile @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM golang:1.17.13 +FROM golang:1.19.8 ARG GOPROXY @@ -20,12 +20,6 @@ ENV GO111MODULE=on # Use a proxy for go modules to reduce the likelihood of various hosts being down and breaking the build ENV GOPROXY=${GOPROXY} -# get code-generation tools (for now keep in GOPATH since they're not fully modules-compatible yet) -RUN mkdir -p /go/src/k8s.io -WORKDIR /go/src/k8s.io -RUN git config --global advice.detachedHead false -RUN git clone -b v0.22.2 https://github.com/kubernetes/code-generator - # kubebuilder test bundle is separated from kubebuilder. Need to setup it for CI test. RUN curl -sSLo envtest-bins.tar.gz https://go.kubebuilder.io/test-tools/1.22.1/linux/amd64 && \ mkdir /usr/local/kubebuilder && \ @@ -36,11 +30,11 @@ RUN wget --quiet https://github.com/kubernetes-sigs/kubebuilder/releases/downloa chmod +x /usr/local/kubebuilder/bin/kubebuilder # get controller-tools -RUN go get sigs.k8s.io/controller-tools/cmd/controller-gen@v0.7.0 +RUN go install sigs.k8s.io/controller-tools/cmd/controller-gen@v0.7.0 # get goimports (the revision is pinned so we don't indiscriminately update, but the particular commit # is not important) -RUN go get golang.org/x/tools/cmd/goimports@11e9d9cc0042e6bd10337d4d2c3e5d9295508e7d +RUN go install golang.org/x/tools/cmd/goimports@11e9d9cc0042e6bd10337d4d2c3e5d9295508e7d # get protoc compiler and golang plugin WORKDIR /root @@ -49,7 +43,7 @@ RUN wget --quiet https://github.com/protocolbuffers/protobuf/releases/download/v unzip protoc-3.9.1-linux-x86_64.zip && \ mv bin/protoc /usr/bin/protoc && \ chmod +x /usr/bin/protoc -RUN go get github.com/golang/protobuf/protoc-gen-go@v1.0.0 +RUN go install github.com/golang/protobuf/protoc-gen-go@v1.0.0 # get goreleaser RUN wget --quiet https://github.com/goreleaser/goreleaser/releases/download/v0.120.8/goreleaser_Linux_x86_64.tar.gz && \ @@ -58,7 +52,7 @@ RUN wget --quiet https://github.com/goreleaser/goreleaser/releases/download/v0.1 chmod +x /usr/bin/goreleaser # get golangci-lint -RUN curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.27.0 +RUN curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.51.0 # install kubectl RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl diff --git a/hack/download-restic.sh b/hack/build-restic.sh old mode 100755 new mode 100644 similarity index 74% rename from hack/download-restic.sh rename to hack/build-restic.sh index 2da59383cc..4e4995a88d --- a/hack/download-restic.sh +++ b/hack/build-restic.sh @@ -22,6 +22,7 @@ set -o pipefail # is the path expected by the Velero Dockerfile. output_dir=${OUTPUT_DIR:-/output/usr/bin} restic_bin=${output_dir}/restic +build_path=$(dirname "$PWD") if [[ -z "${BIN}" ]]; then echo "BIN must be set" @@ -46,8 +47,11 @@ if [[ -z "${RESTIC_VERSION}" ]]; then exit 1 fi -curl -s -L https://github.com/restic/restic/releases/download/v${RESTIC_VERSION}/restic_${RESTIC_VERSION}_${GOOS}_${GOARCH}.bz2 -O -bunzip2 restic_${RESTIC_VERSION}_${GOOS}_${GOARCH}.bz2 -mv restic_${RESTIC_VERSION}_${GOOS}_${GOARCH} ${restic_bin} - +mkdir ${build_path}/restic +git clone -b v${RESTIC_VERSION} https://github.com/restic/restic.git ${build_path}/restic +pushd ${build_path}/restic +git apply /go/src/github.com/vmware-tanzu/velero/hack/modify_acces_denied_code.txt +git apply /go/src/github.com/vmware-tanzu/velero/hack/fix_restic_cve.txt +go run build.go --goos "${GOOS}" --goarch "${GOARCH}" --goarm "${GOARM}" -o ${restic_bin} chmod +x ${restic_bin} +popd diff --git a/hack/docker-push.sh b/hack/docker-push.sh index d9f1835b8b..d675bffd34 100755 --- a/hack/docker-push.sh +++ b/hack/docker-push.sh @@ -56,6 +56,18 @@ elif [[ "$triggeredBy" == "tags" ]]; then TAG=$(echo $GITHUB_REF | cut -d / -f 3) fi +# if both BRANCH and TAG are empty, then it's triggered by PR. Use target branch instead. +# BRANCH is needed in docker buildx command to set as image tag. +# When action is triggered by PR, just build container without pushing, so set type to local. +# When action is triggered by PUSH, need to push container, so set type to registry. +if [[ -z $BRANCH && -z $TAG ]]; then + echo "Test Velero container build without pushing, when Dockerfile is changed by PR." + BRANCH="${GITHUB_BASE_REF}-container" + OUTPUT_TYPE="local,dest=." +else + OUTPUT_TYPE="registry" +fi + TAG_LATEST=false if [[ ! -z "$TAG" ]]; then echo "We're building tag $TAG" @@ -90,11 +102,9 @@ echo "BUILDX_PLATFORMS: $BUILDX_PLATFORMS" echo "Building and pushing container images." -# The use of "registry" as the buildx output type below instructs -# Docker to push the image VERSION="$VERSION" \ TAG_LATEST="$TAG_LATEST" \ BUILDX_PLATFORMS="$BUILDX_PLATFORMS" \ -BUILDX_OUTPUT_TYPE="registry" \ +BUILDX_OUTPUT_TYPE=$OUTPUT_TYPE \ make all-containers diff --git a/hack/fix_restic_cve.txt b/hack/fix_restic_cve.txt new file mode 100644 index 0000000000..a65dbf05c4 --- /dev/null +++ b/hack/fix_restic_cve.txt @@ -0,0 +1,97 @@ +diff --git a/go.mod b/go.mod +index d819a6be7..4ec9d9bf1 100644 +--- a/go.mod ++++ b/go.mod +@@ -35,12 +35,12 @@ require ( + github.com/spf13/cobra v1.5.0 + github.com/spf13/pflag v1.0.5 + golang.org/x/crypto v0.0.0-20220817201139-bc19a97f63c8 +- golang.org/x/net v0.0.0-20220822230855-b0a4917ee28c ++ golang.org/x/net v0.7.0 + golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2 + golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde +- golang.org/x/sys v0.0.0-20220818161305-2296e01440c6 +- golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 +- golang.org/x/text v0.3.7 ++ golang.org/x/sys v0.5.0 ++ golang.org/x/term v0.5.0 ++ golang.org/x/text v0.7.0 + google.golang.org/api v0.93.0 + google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc // indirect + gopkg.in/ini.v1 v1.67.0 // indirect +diff --git a/go.sum b/go.sum +index 959651048..da200f0c5 100644 +--- a/go.sum ++++ b/go.sum +@@ -319,6 +319,7 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de + github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= + github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= + github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= ++github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= + go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= + go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= + go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +@@ -373,6 +374,7 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= + golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= + golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= + golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= ++golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= + golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= + golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= + golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +@@ -418,8 +420,8 @@ golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug + golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= + golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= + golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +-golang.org/x/net v0.0.0-20220822230855-b0a4917ee28c h1:JVAXQ10yGGVbSyoer5VILysz6YKjdNT2bsvlayjqhes= +-golang.org/x/net v0.0.0-20220822230855-b0a4917ee28c/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= ++golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= ++golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= + golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= + golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= + golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +@@ -454,6 +456,7 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ + golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= + golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= + golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= ++golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= + golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde h1:ejfdSekXMDxDLbRrJMwUk6KnSLZ2McaUCVcIKM+N6jc= + golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= + golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +@@ -522,13 +525,12 @@ golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBc + golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= + golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= + golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +-golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +-golang.org/x/sys v0.0.0-20220818161305-2296e01440c6 h1:Sx/u41w+OwrInGdEckYmEuU5gHoGSL4QbDz3S9s6j4U= +-golang.org/x/sys v0.0.0-20220818161305-2296e01440c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= ++golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= ++golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= + golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= + golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +-golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 h1:Q5284mrmYTpACcm+eAKjKJH48BBwSyfJqmmGDTtT8Vc= +-golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= ++golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= ++golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= + golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= + golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= + golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +@@ -537,8 +539,9 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= + golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= + golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= + golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +-golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= + golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= ++golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= ++golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= + golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= + golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= + golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +@@ -593,6 +596,7 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= + golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= + golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= + golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= ++golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= + golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= + golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= + golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/hack/modify_acces_denied_code.txt b/hack/modify_acces_denied_code.txt new file mode 100644 index 0000000000..5c2577b698 --- /dev/null +++ b/hack/modify_acces_denied_code.txt @@ -0,0 +1,13 @@ +diff --git a/internal/backend/s3/s3.go b/internal/backend/s3/s3.go +index 0b3816c06..eec10f9c7 100644 +--- a/internal/backend/s3/s3.go ++++ b/internal/backend/s3/s3.go +@@ -164,7 +164,7 @@ func isAccessDenied(err error) bool { + debug.Log("isAccessDenied(%T, %#v)", err, err) + + var e minio.ErrorResponse +- return errors.As(err, &e) && e.Code == "Access Denied" ++ return errors.As(err, &e) && e.Code == "AccessDenied" + } + + // IsNotExist returns true if the error is caused by a not existing file. diff --git a/hack/release-tools/chk_version.go b/hack/release-tools/chk_version.go index b0c7ecd8d7..32736e12e9 100644 --- a/hack/release-tools/chk_version.go +++ b/hack/release-tools/chk_version.go @@ -24,6 +24,7 @@ import ( // This regex should match both our GA format (example: v1.4.3) and pre-release formats (v1.2.4-beta.2, v1.5.0-rc.1) // The following sub-capture groups are defined: +// // major // minor // patch diff --git a/hack/update-generated-crd-code.sh b/hack/update-generated-crd-code.sh index 70b9a942bd..11083c0097 100755 --- a/hack/update-generated-crd-code.sh +++ b/hack/update-generated-crd-code.sh @@ -25,16 +25,17 @@ if [[ -z "${GOPATH}" ]]; then GOPATH=~/go fi -if [[ ! -d "${GOPATH}/src/k8s.io/code-generator" ]]; then - echo "k8s.io/code-generator missing from GOPATH" - exit 1 -fi - if ! command -v controller-gen > /dev/null; then echo "controller-gen is missing" exit 1 fi +# get code-generation tools (for now keep in GOPATH since they're not fully modules-compatible yet) +mkdir -p ${GOPATH}/src/k8s.io +pushd ${GOPATH}/src/k8s.io +git clone -b v0.22.2 https://github.com/kubernetes/code-generator +popd + ${GOPATH}/src/k8s.io/code-generator/generate-groups.sh \ all \ github.com/vmware-tanzu/velero/pkg/generated \ diff --git a/pkg/archive/extractor.go b/pkg/archive/extractor.go index 7a0dfce74b..1bd16c2586 100644 --- a/pkg/archive/extractor.go +++ b/pkg/archive/extractor.go @@ -84,7 +84,7 @@ func (e *Extractor) readBackup(tarRdr *tar.Reader) (string, error) { return "", err } - target := filepath.Join(dir, header.Name) + target := filepath.Join(dir, header.Name) //nolint:gosec switch header.Typeflag { case tar.TypeDir: diff --git a/pkg/backup/backup_test.go b/pkg/backup/backup_test.go index 53554e8b38..d3ed239352 100644 --- a/pkg/backup/backup_test.go +++ b/pkg/backup/backup_test.go @@ -1000,7 +1000,7 @@ func TestBackupResourceCohabitation(t *testing.T) { }, }, { - name: "when deployments exist that are not in the cohabitating groups those are backed up along with apps/deployments", + name: "when deployments exist that are not in the cohabiting groups those are backed up along with apps/deployments", backup: defaultBackup().Result(), apiResources: []*test.APIResource{ test.VeleroDeployments( @@ -1044,11 +1044,11 @@ func TestBackupResourceCohabitation(t *testing.T) { } } -// TestBackupUsesNewCohabitatingResourcesForEachBackup ensures that when two backups are -// run that each include cohabitating resources, one copy of the relevant resources is +// TestBackupUsesNewCohabitingResourcesForEachBackup ensures that when two backups are +// run that each include cohabiting resources, one copy of the relevant resources is // backed up in each backup. Verification is done by looking at the contents of the backup // tarball. This covers a specific issue that was fixed by https://github.com/vmware-tanzu/velero/pull/485. -func TestBackupUsesNewCohabitatingResourcesForEachBackup(t *testing.T) { +func TestBackupUsesNewCohabitingResourcesForEachBackup(t *testing.T) { h := newHarness(t) // run and verify backup 1 diff --git a/pkg/backup/item_collector.go b/pkg/backup/item_collector.go index 474fbabee3..88be4e0789 100644 --- a/pkg/backup/item_collector.go +++ b/pkg/backup/item_collector.go @@ -151,7 +151,7 @@ func sortResourcesByOrder(log logrus.FieldLogger, items []*kubernetesResource, o } // getOrderedResourcesForType gets order of resourceType from orderResources. -func getOrderedResourcesForType(log logrus.FieldLogger, orderedResources map[string]string, resourceType string) []string { +func getOrderedResourcesForType(orderedResources map[string]string, resourceType string) []string { if orderedResources == nil { return nil } @@ -175,7 +175,7 @@ func (r *itemCollector) getResourceItems(log logrus.FieldLogger, gv schema.Group clusterScoped = !resource.Namespaced ) - orders := getOrderedResourcesForType(log, r.backupRequest.Backup.Spec.OrderedResources, resource.Name) + orders := getOrderedResourcesForType(r.backupRequest.Backup.Spec.OrderedResources, resource.Name) // Getting the preferred group version of this resource preferredGVR, _, err := r.discoveryHelper.ResourceFor(gr.WithVersion("")) if err != nil { diff --git a/pkg/builder/container_builder_test.go b/pkg/builder/container_builder_test.go index a5c85a909a..d2d48dbdc1 100644 --- a/pkg/builder/container_builder_test.go +++ b/pkg/builder/container_builder_test.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/builder/json_schema_props_builder.go b/pkg/builder/json_schema_props_builder.go index 2eafb8605e..10f904cf0a 100644 --- a/pkg/builder/json_schema_props_builder.go +++ b/pkg/builder/json_schema_props_builder.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/buildinfo/buildinfo_test.go b/pkg/buildinfo/buildinfo_test.go index f4c7cf9131..40631525a1 100644 --- a/pkg/buildinfo/buildinfo_test.go +++ b/pkg/buildinfo/buildinfo_test.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/client/client_test.go b/pkg/client/client_test.go index e4f6f6a53b..df8df51e43 100644 --- a/pkg/client/client_test.go +++ b/pkg/client/client_test.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/client/factory_test.go b/pkg/client/factory_test.go index 33b04231a9..db5edb2573 100644 --- a/pkg/client/factory_test.go +++ b/pkg/client/factory_test.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/cmd/cli/backup/describe.go b/pkg/cmd/cli/backup/describe.go index 82ca472980..1284e29c93 100644 --- a/pkg/cmd/cli/backup/describe.go +++ b/pkg/cmd/cli/backup/describe.go @@ -73,7 +73,7 @@ func NewDescribeCommand(f client.Factory, use string) *cobra.Command { } first := true - for _, backup := range backups.Items { + for i, backup := range backups.Items { deleteRequestListOptions := pkgbackup.NewDeleteBackupRequestListOptions(backup.Name, string(backup.UID)) deleteRequestList, err := veleroClient.VeleroV1().DeleteBackupRequests(f.Namespace()).List(context.TODO(), deleteRequestListOptions) if err != nil { @@ -102,7 +102,7 @@ func NewDescribeCommand(f client.Factory, use string) *cobra.Command { } } - s := output.DescribeBackup(context.Background(), kbClient, &backup, deleteRequestList.Items, podVolumeBackupList.Items, vscList.Items, details, veleroClient, insecureSkipTLSVerify, caCertFile) + s := output.DescribeBackup(context.Background(), kbClient, &backups.Items[i], deleteRequestList.Items, podVolumeBackupList.Items, vscList.Items, details, veleroClient, insecureSkipTLSVerify, caCertFile) if first { first = false fmt.Print(s) diff --git a/pkg/cmd/cli/backuplocation/create.go b/pkg/cmd/cli/backuplocation/create.go index a90564be3a..e08e0c6ae2 100644 --- a/pkg/cmd/cli/backuplocation/create.go +++ b/pkg/cmd/cli/backuplocation/create.go @@ -209,10 +209,10 @@ func (o *CreateOptions) Run(c *cobra.Command, f client.Factory) error { if err := kbClient.List(context.Background(), locations, &kbclient.ListOptions{Namespace: f.Namespace()}); err != nil { return errors.WithStack(err) } - for _, location := range locations.Items { + for i, location := range locations.Items { if location.Spec.Default { location.Spec.Default = false - if err := kbClient.Update(context.Background(), &location, &kbclient.UpdateOptions{}); err != nil { + if err := kbClient.Update(context.Background(), &locations.Items[i], &kbclient.UpdateOptions{}); err != nil { return errors.WithStack(err) } break diff --git a/pkg/cmd/cli/backuplocation/delete.go b/pkg/cmd/cli/backuplocation/delete.go index daedf77cd6..0747fe18e6 100644 --- a/pkg/cmd/cli/backuplocation/delete.go +++ b/pkg/cmd/cli/backuplocation/delete.go @@ -115,8 +115,8 @@ func Run(f client.Factory, o *cli.DeleteOptions) error { } // Create a backup-location deletion request for each - for _, location := range locations.Items { - if err := kbClient.Delete(context.Background(), &location, &kbclient.DeleteOptions{}); err != nil { + for i, location := range locations.Items { + if err := kbClient.Delete(context.Background(), &locations.Items[i], &kbclient.DeleteOptions{}); err != nil { errs = append(errs, errors.WithStack(err)) continue } @@ -162,8 +162,8 @@ func findAssociatedResticRepos(client kbclient.Client, bslName, ns string) (vele func deleteBackups(client kbclient.Client, backups velerov1api.BackupList) []error { var errs []error - for _, backup := range backups.Items { - if err := client.Delete(context.Background(), &backup, &kbclient.DeleteOptions{}); err != nil { + for i, backup := range backups.Items { + if err := client.Delete(context.Background(), &backups.Items[i], &kbclient.DeleteOptions{}); err != nil { errs = append(errs, errors.WithStack(fmt.Errorf("delete backup %q associated with deleted BSL: %w", backup.Name, err))) continue } @@ -174,8 +174,8 @@ func deleteBackups(client kbclient.Client, backups velerov1api.BackupList) []err func deleteResticRepos(client kbclient.Client, repos velerov1api.ResticRepositoryList) []error { var errs []error - for _, repo := range repos.Items { - if err := client.Delete(context.Background(), &repo, &kbclient.DeleteOptions{}); err != nil { + for i, repo := range repos.Items { + if err := client.Delete(context.Background(), &repos.Items[i], &kbclient.DeleteOptions{}); err != nil { errs = append(errs, errors.WithStack(fmt.Errorf("delete Restic repository %q associated with deleted BSL: %w", repo.Name, err))) continue } diff --git a/pkg/cmd/cli/backuplocation/set.go b/pkg/cmd/cli/backuplocation/set.go index dda731ac6d..bdb36b867c 100644 --- a/pkg/cmd/cli/backuplocation/set.go +++ b/pkg/cmd/cli/backuplocation/set.go @@ -120,7 +120,7 @@ func (o *SetOptions) Run(c *cobra.Command, f client.Factory) error { if err := kbClient.List(context.Background(), locations, &kbclient.ListOptions{Namespace: f.Namespace()}); err != nil { return errors.WithStack(err) } - for _, location := range locations.Items { + for i, location := range locations.Items { if !location.Spec.Default { continue } @@ -129,7 +129,7 @@ func (o *SetOptions) Run(c *cobra.Command, f client.Factory) error { break } location.Spec.Default = false - if err := kbClient.Update(context.Background(), &location, &kbclient.UpdateOptions{}); err != nil { + if err := kbClient.Update(context.Background(), &locations.Items[i], &kbclient.UpdateOptions{}); err != nil { return errors.WithStack(err) } break diff --git a/pkg/cmd/cli/install/install.go b/pkg/cmd/cli/install/install.go index 0f1819fa86..5fd03eed17 100644 --- a/pkg/cmd/cli/install/install.go +++ b/pkg/cmd/cli/install/install.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -315,7 +315,7 @@ func (o *InstallOptions) Run(c *cobra.Command, f client.Factory) error { return nil } -//Complete completes options for a command. +// Complete completes options for a command. func (o *InstallOptions) Complete(args []string, f client.Factory) error { o.Namespace = f.Namespace() return nil diff --git a/pkg/cmd/cli/restic/server.go b/pkg/cmd/cli/restic/server.go index ae593306b0..c870fe9da0 100644 --- a/pkg/cmd/cli/restic/server.go +++ b/pkg/cmd/cli/restic/server.go @@ -175,7 +175,7 @@ func (s *resticServer) run() { metricsMux := http.NewServeMux() metricsMux.Handle("/metrics", promhttp.Handler()) s.logger.Infof("Starting metric server for restic at address [%s]", s.metricsAddress) - if err := http.ListenAndServe(s.metricsAddress, metricsMux); err != nil { + if err := http.ListenAndServe(s.metricsAddress, metricsMux); err != nil { //nolint:gosec s.logger.Fatalf("Failed to start metric server for restic at [%s]: %v", s.metricsAddress, err) } }() @@ -291,7 +291,7 @@ func (s *resticServer) markInProgressPVBsFailed(client ctrlclient.Client) { log.WithError(errors.WithStack(err)).Error("failed to list podvolumebackups") return } - for _, pvb := range pvbs.Items { + for i, pvb := range pvbs.Items { if pvb.Status.Phase != velerov1api.PodVolumeBackupPhaseInProgress { log.Debugf("the status of podvolumebackup %q is %q, skip", pvb.GetName(), pvb.Status.Phase) continue @@ -300,12 +300,11 @@ func (s *resticServer) markInProgressPVBsFailed(client ctrlclient.Client) { log.Debugf("the node of podvolumebackup %q is %q, not %q, skip", pvb.GetName(), pvb.Spec.Node, s.nodeName) continue } - original := pvb.DeepCopy() - pvb.Status.Phase = velerov1api.PodVolumeBackupPhaseFailed - pvb.Status.Message = fmt.Sprintf("get a podvolumebackup with status %q during the server starting, mark it as %q", velerov1api.PodVolumeBackupPhaseInProgress, pvb.Status.Phase) - pvb.Status.CompletionTimestamp = &metav1.Time{Time: time.Now()} - if err := client.Patch(s.ctx, &pvb, ctrlclient.MergeFrom(original)); err != nil { - log.WithError(errors.WithStack(err)).Errorf("failed to patch podvolumebackup %q", pvb.GetName()) + + if err := controller.UpdatePVBStatusToFailed(client, s.ctx, &pvbs.Items[i], + fmt.Sprintf("get a podvolumebackup with status %q during the server starting, mark it as %q", velerov1api.PodVolumeBackupPhaseInProgress, velerov1api.PodVolumeBackupPhaseFailed), + time.Now()); err != nil { + s.logger.WithError(errors.WithStack(err)).Errorf("failed to patch podvolumebackup %q", pvb.GetName()) continue } log.WithField("podvolumebackup", pvb.GetName()).Warn(pvb.Status.Message) @@ -318,7 +317,7 @@ func (s *resticServer) markInProgressPVRsFailed(client ctrlclient.Client) { log.WithError(errors.WithStack(err)).Error("failed to list podvolumerestores") return } - for _, pvr := range pvrs.Items { + for i, pvr := range pvrs.Items { if pvr.Status.Phase != velerov1api.PodVolumeRestorePhaseInProgress { log.Debugf("the status of podvolumerestore %q is %q, skip", pvr.GetName(), pvr.Status.Phase) continue @@ -338,12 +337,10 @@ func (s *resticServer) markInProgressPVRsFailed(client ctrlclient.Client) { continue } - original := pvr.DeepCopy() - pvr.Status.Phase = velerov1api.PodVolumeRestorePhaseFailed - pvr.Status.Message = fmt.Sprintf("get a podvolumerestore with status %q during the server starting, mark it as %q", velerov1api.PodVolumeRestorePhaseInProgress, pvr.Status.Phase) - pvr.Status.CompletionTimestamp = &metav1.Time{Time: time.Now()} - if err := client.Patch(s.ctx, &pvr, ctrlclient.MergeFrom(original)); err != nil { - log.WithError(errors.WithStack(err)).Errorf("failed to patch podvolumerestore %q", pvr.GetName()) + if err := controller.UpdatePVRStatusToFailed(client, s.ctx, &pvrs.Items[i], + fmt.Sprintf("get a podvolumerestore with status %q during the server starting, mark it as %q", velerov1api.PodVolumeRestorePhaseInProgress, velerov1api.PodVolumeRestorePhaseFailed), + time.Now()); err != nil { + s.logger.WithError(errors.WithStack(err)).Errorf("failed to patch podvolumerestore %q", pvr.GetName()) continue } log.WithField("podvolumerestore", pvr.GetName()).Warn(pvr.Status.Message) diff --git a/pkg/cmd/cli/restic/server_test.go b/pkg/cmd/cli/restic/server_test.go index ff222e996f..af6e8967de 100644 --- a/pkg/cmd/cli/restic/server_test.go +++ b/pkg/cmd/cli/restic/server_test.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/cmd/cli/restore/describe.go b/pkg/cmd/cli/restore/describe.go index 3a8c797a61..bfed139daa 100644 --- a/pkg/cmd/cli/restore/describe.go +++ b/pkg/cmd/cli/restore/describe.go @@ -68,14 +68,14 @@ func NewDescribeCommand(f client.Factory, use string) *cobra.Command { } first := true - for _, restore := range restores.Items { + for i, restore := range restores.Items { opts := restic.NewPodVolumeRestoreListOptions(restore.Name) podvolumeRestoreList, err := veleroClient.VeleroV1().PodVolumeRestores(f.Namespace()).List(context.TODO(), opts) if err != nil { fmt.Fprintf(os.Stderr, "error getting PodVolumeRestores for restore %s: %v\n", restore.Name, err) } - s := output.DescribeRestore(context.Background(), kbClient, &restore, podvolumeRestoreList.Items, details, veleroClient, insecureSkipTLSVerify, caCertFile) + s := output.DescribeRestore(context.Background(), kbClient, &restores.Items[i], podvolumeRestoreList.Items, details, veleroClient, insecureSkipTLSVerify, caCertFile) if first { first = false fmt.Print(s) diff --git a/pkg/cmd/cli/schedule/describe.go b/pkg/cmd/cli/schedule/describe.go index ba6972a96c..b43cad45fc 100644 --- a/pkg/cmd/cli/schedule/describe.go +++ b/pkg/cmd/cli/schedule/describe.go @@ -53,8 +53,8 @@ func NewDescribeCommand(f client.Factory, use string) *cobra.Command { } first := true - for _, schedule := range schedules.Items { - s := output.DescribeSchedule(&schedule) + for i := range schedules.Items { + s := output.DescribeSchedule(&schedules.Items[i]) if first { first = false fmt.Print(s) diff --git a/pkg/cmd/server/server.go b/pkg/cmd/server/server.go index 86f41ac791..08f956ce14 100644 --- a/pkg/cmd/server/server.go +++ b/pkg/cmd/server/server.go @@ -468,31 +468,32 @@ func (s *server) veleroResourcesExist() error { } // High priorities: -// - Custom Resource Definitions come before Custom Resource so that they can be -// restored with their corresponding CRD. -// - Namespaces go second because all namespaced resources depend on them. -// - Storage Classes are needed to create PVs and PVCs correctly. -// - VolumeSnapshotClasses are needed to provision volumes using volumesnapshots -// - VolumeSnapshotContents are needed as they contain the handle to the volume snapshot in the -// storage provider -// - VolumeSnapshots are needed to create PVCs using the VolumeSnapshot as their data source. -// - PVs go before PVCs because PVCs depend on them. -// - PVCs go before pods or controllers so they can be mounted as volumes. -// - Secrets and config maps go before pods or controllers so they can be mounted -// as volumes. -// - Service accounts go before pods or controllers so pods can use them. -// - Limit ranges go before pods or controllers so pods can use them. -// - Pods go before controllers so they can be explicitly restored and potentially -// have restic restores run before controllers adopt the pods. -// - Replica sets go before deployments/other controllers so they can be explicitly -// restored and be adopted by controllers. -// - CAPI ClusterClasses go before Clusters. -// - CAPI Clusters come before ClusterResourceSets because failing to do so means the CAPI controller-manager will panic. -// Both Clusters and ClusterResourceSets need to come before ClusterResourceSetBinding in order to properly restore workload clusters. -// See https://github.com/kubernetes-sigs/cluster-api/issues/4105 +// - Custom Resource Definitions come before Custom Resource so that they can be +// restored with their corresponding CRD. +// - Namespaces go second because all namespaced resources depend on them. +// - Storage Classes are needed to create PVs and PVCs correctly. +// - VolumeSnapshotClasses are needed to provision volumes using volumesnapshots +// - VolumeSnapshotContents are needed as they contain the handle to the volume snapshot in the +// storage provider +// - VolumeSnapshots are needed to create PVCs using the VolumeSnapshot as their data source. +// - PVs go before PVCs because PVCs depend on them. +// - PVCs go before pods or controllers so they can be mounted as volumes. +// - Secrets and config maps go before pods or controllers so they can be mounted +// as volumes. +// - Service accounts go before pods or controllers so pods can use them. +// - Limit ranges go before pods or controllers so pods can use them. +// - Pods go before controllers so they can be explicitly restored and potentially +// have restic restores run before controllers adopt the pods. +// - Replica sets go before deployments/other controllers so they can be explicitly +// restored and be adopted by controllers. +// - CAPI ClusterClasses go before Clusters. // // Low priorities: -// - Tanzu ClusterBootstrap go last as it can reference any other kind of resources +// - Tanzu ClusterBootstraps go last as it can reference any other kind of resources. +// ClusterBootstraps go before CAPI Clusters otherwise a new default ClusterBootstrap object is created for the cluster +// - CAPI Clusters come before ClusterResourceSets because failing to do so means the CAPI controller-manager will panic. +// Both Clusters and ClusterResourceSets need to come before ClusterResourceSetBinding in order to properly restore workload clusters. +// See https://github.com/kubernetes-sigs/cluster-api/issues/4105 var defaultRestorePriorities = restore.Priorities{ HighPriorities: []string{ "customresourcedefinitions", @@ -514,11 +515,11 @@ var defaultRestorePriorities = restore.Priorities{ // in the backup. "replicasets.apps", "clusterclasses.cluster.x-k8s.io", - "clusters.cluster.x-k8s.io", - "clusterresourcesets.addons.cluster.x-k8s.io", }, LowPriorities: []string{ "clusterbootstraps.run.tanzu.vmware.com", + "clusters.cluster.x-k8s.io", + "clusterresourcesets.addons.cluster.x-k8s.io", }, } @@ -594,7 +595,7 @@ func (s *server) runControllers(defaultVolumeSnapshotLocations map[string]string metricsMux := http.NewServeMux() metricsMux.Handle("/metrics", promhttp.Handler()) s.logger.Infof("Starting metric server at address [%s]", s.metricsAddress) - if err := http.ListenAndServe(s.metricsAddress, metricsMux); err != nil { + if err := http.ListenAndServe(s.metricsAddress, metricsMux); err != nil { //nolint:gosec s.logger.Fatalf("Failed to start metric server at [%s]: %v", s.metricsAddress, err) } }() @@ -611,7 +612,7 @@ func (s *server) runControllers(defaultVolumeSnapshotLocations map[string]string csiVSLister, csiVSCLister, csiVSClassLister := s.getCSISnapshotListers() - backupSyncControllerRunInfo := func() controllerRunInfo { + backupSyncControllerRunInfo := func() controllerRunInfo { //nolint:typecheck backupSyncContoller := controller.NewBackupSyncController( s.veleroClient.VeleroV1(), s.mgr.GetClient(), @@ -636,7 +637,7 @@ func (s *server) runControllers(defaultVolumeSnapshotLocations map[string]string backupTracker := controller.NewBackupTracker() - backupControllerRunInfo := func() controllerRunInfo { + backupControllerRunInfo := func() controllerRunInfo { //nolint:typecheck backupper, err := backup.NewKubernetesBackupper( s.veleroClient.VeleroV1(), s.discoveryHelper, @@ -680,7 +681,7 @@ func (s *server) runControllers(defaultVolumeSnapshotLocations map[string]string } } - gcControllerRunInfo := func() controllerRunInfo { + gcControllerRunInfo := func() controllerRunInfo { //nolint:typecheck gcController := controller.NewGCController( s.logger, s.sharedInformerFactory.Velero().V1().Backups(), @@ -696,7 +697,7 @@ func (s *server) runControllers(defaultVolumeSnapshotLocations map[string]string } } - restoreControllerRunInfo := func() controllerRunInfo { + restoreControllerRunInfo := func() controllerRunInfo { //nolint:typecheck restorer, err := restore.NewKubernetesRestorer( s.veleroClient.VeleroV1(), s.discoveryHelper, @@ -906,7 +907,7 @@ func (s *server) runProfiler() { mux.HandleFunc("/debug/pprof/symbol", pprof.Symbol) mux.HandleFunc("/debug/pprof/trace", pprof.Trace) - if err := http.ListenAndServe(s.config.profilerAddress, mux); err != nil { + if err := http.ListenAndServe(s.config.profilerAddress, mux); err != nil { //nolint:gosec s.logger.WithError(errors.WithStack(err)).Error("error running profiler http server") } } @@ -964,7 +965,7 @@ func markInProgressBackupsFailed(ctx context.Context, client ctrlclient.Client, return } - for _, backup := range backups.Items { + for i, backup := range backups.Items { if backup.Status.Phase != velerov1api.BackupPhaseInProgress { log.Debugf("the status of backup %q is %q, skip", backup.GetName(), backup.Status.Phase) continue @@ -973,7 +974,7 @@ func markInProgressBackupsFailed(ctx context.Context, client ctrlclient.Client, updated.Status.Phase = velerov1api.BackupPhaseFailed updated.Status.FailureReason = fmt.Sprintf("get a backup with status %q during the server starting, mark it as %q", velerov1api.BackupPhaseInProgress, updated.Status.Phase) updated.Status.CompletionTimestamp = &metav1.Time{Time: time.Now()} - if err := client.Patch(ctx, updated, ctrlclient.MergeFrom(&backup)); err != nil { + if err := client.Patch(ctx, updated, ctrlclient.MergeFrom(&backups.Items[i])); err != nil { log.WithError(errors.WithStack(err)).Errorf("failed to patch backup %q", backup.GetName()) continue } @@ -987,7 +988,7 @@ func markInProgressRestoresFailed(ctx context.Context, client ctrlclient.Client, log.WithError(errors.WithStack(err)).Error("failed to list restores") return } - for _, restore := range restores.Items { + for i, restore := range restores.Items { if restore.Status.Phase != velerov1api.RestorePhaseInProgress { log.Debugf("the status of restore %q is %q, skip", restore.GetName(), restore.Status.Phase) continue @@ -996,7 +997,7 @@ func markInProgressRestoresFailed(ctx context.Context, client ctrlclient.Client, updated.Status.Phase = velerov1api.RestorePhaseFailed updated.Status.FailureReason = fmt.Sprintf("get a restore with status %q during the server starting, mark it as %q", velerov1api.RestorePhaseInProgress, updated.Status.Phase) updated.Status.CompletionTimestamp = &metav1.Time{Time: time.Now()} - if err := client.Patch(ctx, updated, ctrlclient.MergeFrom(&restore)); err != nil { + if err := client.Patch(ctx, updated, ctrlclient.MergeFrom(&restores.Items[i])); err != nil { log.WithError(errors.WithStack(err)).Errorf("failed to patch restore %q", restore.GetName()) continue } diff --git a/pkg/cmd/util/downloadrequest/downloadrequest.go b/pkg/cmd/util/downloadrequest/downloadrequest.go index 22861245f3..9c0a49bc46 100644 --- a/pkg/cmd/util/downloadrequest/downloadrequest.go +++ b/pkg/cmd/util/downloadrequest/downloadrequest.go @@ -104,7 +104,7 @@ func Stream(ctx context.Context, kbClient kbclient.Client, namespace, name strin httpClient := new(http.Client) httpClient.Transport = &http.Transport{ TLSClientConfig: &tls.Config{ - InsecureSkipVerify: insecureSkipTLSVerify, + InsecureSkipVerify: insecureSkipTLSVerify, //nolint:gosec RootCAs: caPool, }, IdleConnTimeout: timeout, diff --git a/pkg/cmd/util/output/backup_describer.go b/pkg/cmd/util/output/backup_describer.go index 1ec0928316..06c1e2771c 100644 --- a/pkg/cmd/util/output/backup_describer.go +++ b/pkg/cmd/util/output/backup_describer.go @@ -126,7 +126,7 @@ func DescribeBackupSpec(d *Describer, spec velerov1api.BackupSpec) { } d.Printf("\tIncluded:\t%s\n", s) if len(spec.ExcludedNamespaces) == 0 { - s = "" + s = emptyDisplay } else { s = strings.Join(spec.ExcludedNamespaces, ", ") } @@ -141,7 +141,7 @@ func DescribeBackupSpec(d *Describer, spec velerov1api.BackupSpec) { } d.Printf("\tIncluded:\t%s\n", s) if len(spec.ExcludedResources) == 0 { - s = "" + s = emptyDisplay } else { s = strings.Join(spec.ExcludedResources, ", ") } @@ -150,7 +150,7 @@ func DescribeBackupSpec(d *Describer, spec velerov1api.BackupSpec) { d.Printf("\tCluster-scoped:\t%s\n", BoolPointerString(spec.IncludeClusterResources, "excluded", "included", "auto")) d.Println() - s = "" + s = emptyDisplay if spec.LabelSelector != nil { s = metav1.FormatLabelSelector(spec.LabelSelector) } @@ -167,7 +167,7 @@ func DescribeBackupSpec(d *Describer, spec velerov1api.BackupSpec) { d.Println() if len(spec.Hooks.Resources) == 0 { - d.Printf("Hooks:\t\n") + d.Printf("Hooks:\t" + emptyDisplay + "\n") } else { d.Printf("Hooks:\n") d.Printf("\tResources:\n") @@ -182,7 +182,7 @@ func DescribeBackupSpec(d *Describer, spec velerov1api.BackupSpec) { } d.Printf("\t\t\t\tIncluded:\t%s\n", s) if len(spec.ExcludedNamespaces) == 0 { - s = "" + s = emptyDisplay } else { s = strings.Join(spec.ExcludedNamespaces, ", ") } @@ -197,14 +197,14 @@ func DescribeBackupSpec(d *Describer, spec velerov1api.BackupSpec) { } d.Printf("\t\t\t\tIncluded:\t%s\n", s) if len(spec.ExcludedResources) == 0 { - s = "" + s = emptyDisplay } else { s = strings.Join(spec.ExcludedResources, ", ") } d.Printf("\t\t\t\tExcluded:\t%s\n", s) d.Println() - s = "" + s = emptyDisplay if backupResourceHookSpec.LabelSelector != nil { s = metav1.FormatLabelSelector(backupResourceHookSpec.LabelSelector) } diff --git a/pkg/cmd/util/output/output.go b/pkg/cmd/util/output/output.go index 24188ed0d7..5e7d068891 100644 --- a/pkg/cmd/util/output/output.go +++ b/pkg/cmd/util/output/output.go @@ -34,7 +34,10 @@ import ( "github.com/vmware-tanzu/velero/pkg/util/encode" ) -const downloadRequestTimeout = 30 * time.Second +const ( + downloadRequestTimeout = 30 * time.Second + emptyDisplay = "" +) // BindFlags defines a set of output-specific flags within the provided // FlagSet. diff --git a/pkg/cmd/util/output/restore_describer.go b/pkg/cmd/util/output/restore_describer.go index 286467d038..783c55faa3 100644 --- a/pkg/cmd/util/output/restore_describer.go +++ b/pkg/cmd/util/output/restore_describer.go @@ -107,7 +107,7 @@ func DescribeRestore(ctx context.Context, kbClient kbclient.Client, restore *vel } d.Printf("\tIncluded:\t%s\n", s) if len(restore.Spec.ExcludedNamespaces) == 0 { - s = "" + s = emptyDisplay } else { s = strings.Join(restore.Spec.ExcludedNamespaces, ", ") } @@ -122,7 +122,7 @@ func DescribeRestore(ctx context.Context, kbClient kbclient.Client, restore *vel } d.Printf("\tIncluded:\t%s\n", s) if len(restore.Spec.ExcludedResources) == 0 { - s = "" + s = emptyDisplay } else { s = strings.Join(restore.Spec.ExcludedResources, ", ") } @@ -134,7 +134,7 @@ func DescribeRestore(ctx context.Context, kbClient kbclient.Client, restore *vel d.DescribeMap("Namespace mappings", restore.Spec.NamespaceMapping) d.Println() - s = "" + s = emptyDisplay if restore.Spec.LabelSelector != nil { s = metav1.FormatLabelSelector(restore.Spec.LabelSelector) } @@ -149,7 +149,7 @@ func DescribeRestore(ctx context.Context, kbClient kbclient.Client, restore *vel } d.Println() - s = "" + s = emptyDisplay if restore.Spec.ExistingResourcePolicy != "" { s = string(restore.Spec.ExistingResourcePolicy) } @@ -194,7 +194,7 @@ func describeRestoreResult(d *Describer, name string, result pkgrestore.Result) d.DescribeSlice(1, "Velero", result.Velero) d.DescribeSlice(1, "Cluster", result.Cluster) if len(result.Namespaces) == 0 { - d.Printf("\tNamespaces: \n") + d.Printf("\tNamespaces:" + emptyDisplay + "\n") } else { d.Printf("\tNamespaces:\n") for ns, warnings := range result.Namespaces { diff --git a/pkg/controller/backup_controller.go b/pkg/controller/backup_controller.go index 86b1186027..ce83efec3c 100644 --- a/pkg/controller/backup_controller.go +++ b/pkg/controller/backup_controller.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -463,11 +463,12 @@ func (c *backupController) prepareBackupRequest(backup *velerov1api.Backup) *pkg // validateAndGetSnapshotLocations gets a collection of VolumeSnapshotLocation objects that // this backup will use (returned as a map of provider name -> VSL), and ensures: -// - each location name in .spec.volumeSnapshotLocations exists as a location -// - exactly 1 location per provider -// - a given provider's default location name is added to .spec.volumeSnapshotLocations if one -// is not explicitly specified for the provider (if there's only one location for the provider, -// it will automatically be used) +// - each location name in .spec.volumeSnapshotLocations exists as a location +// - exactly 1 location per provider +// - a given provider's default location name is added to .spec.volumeSnapshotLocations if one +// is not explicitly specified for the provider (if there's only one location for the provider, +// it will automatically be used) +// // if backup has snapshotVolume disabled then it returns empty VSL func (c *backupController) validateAndGetSnapshotLocations(backup *velerov1api.Backup) (map[string]*velerov1api.VolumeSnapshotLocation, []string) { errors := []string{} @@ -720,7 +721,7 @@ func (c *backupController) runBackup(backup *pkgbackup.Request) error { return err } - if errs := persistBackup(backup, backupFile, logFile, backupStore, c.logger.WithField(Backup, kubeutil.NamespaceAndName(backup)), volumeSnapshots, volumeSnapshotContents, volumeSnapshotClasses); len(errs) > 0 { + if errs := persistBackup(backup, backupFile, logFile, backupStore, volumeSnapshots, volumeSnapshotContents, volumeSnapshotClasses); len(errs) > 0 { fatalErrs = append(fatalErrs, errs...) } @@ -764,7 +765,6 @@ func recordBackupMetrics(log logrus.FieldLogger, backup *velerov1api.Backup, bac func persistBackup(backup *pkgbackup.Request, backupContents, backupLog *os.File, backupStore persistence.BackupStore, - log logrus.FieldLogger, csiVolumeSnapshots []snapshotv1api.VolumeSnapshot, csiVolumeSnapshotContents []*snapshotv1api.VolumeSnapshotContent, csiVolumesnapshotClasses []*snapshotv1api.VolumeSnapshotClass, diff --git a/pkg/controller/backup_deletion_controller.go b/pkg/controller/backup_deletion_controller.go index 9cbfe1e8d9..0cf1220b29 100644 --- a/pkg/controller/backup_deletion_controller.go +++ b/pkg/controller/backup_deletion_controller.go @@ -323,11 +323,11 @@ func (r *backupDeletionReconciler) Reconcile(ctx context.Context, req ctrl.Reque }); err != nil { log.WithError(errors.WithStack(err)).Error("Error listing restore API objects") } else { - for _, restore := range restoreList.Items { + for i, restore := range restoreList.Items { if restore.Spec.BackupName != backup.Name { continue } - restoreLog := log.WithField("restore", kube.NamespaceAndName(&restore)) + restoreLog := log.WithField("restore", kube.NamespaceAndName(&restoreList.Items[i])) restoreLog.Info("Deleting restore log/results from backup storage") if err := backupStore.DeleteRestore(restore.Name); err != nil { @@ -337,8 +337,8 @@ func (r *backupDeletionReconciler) Reconcile(ctx context.Context, req ctrl.Reque } restoreLog.Info("Deleting restore referencing backup") - if err := r.Delete(ctx, &restore); err != nil { - errs = append(errs, errors.Wrapf(err, "error deleting restore %s", kube.NamespaceAndName(&restore)).Error()) + if err := r.Delete(ctx, &restoreList.Items[i]); err != nil { + errs = append(errs, errors.Wrapf(err, "error deleting restore %s", kube.NamespaceAndName(&restoreList.Items[i])).Error()) } } } @@ -421,11 +421,11 @@ func (r *backupDeletionReconciler) deleteExistingDeletionRequests(ctx context.Co return []error{errors.Wrap(err, "error listing existing DeleteBackupRequests for backup")} } var errs []error - for _, dbr := range dbrList.Items { + for i, dbr := range dbrList.Items { if dbr.Name == req.Name { continue } - if err := r.Delete(ctx, &dbr); err != nil { + if err := r.Delete(ctx, &dbrList.Items[i]); err != nil { errs = append(errs, errors.WithStack(err)) } else { log.Infof("deletion request '%s' removed.", dbr.Name) diff --git a/pkg/controller/backup_sync_controller.go b/pkg/controller/backup_sync_controller.go index c19badd6e3..0a1133ddb7 100644 --- a/pkg/controller/backup_sync_controller.go +++ b/pkg/controller/backup_sync_controller.go @@ -149,7 +149,7 @@ func (c *backupSyncController) run() { pluginManager := c.newPluginManager(c.logger) defer pluginManager.CleanupClients() - for _, location := range locations { + for i, location := range locations { log := c.logger.WithField("backupLocation", location.Name) syncPeriod := c.defaultBackupSyncPeriod @@ -177,7 +177,7 @@ func (c *backupSyncController) run() { log.Debug("Checking backup location for backups to sync into cluster") - backupStore, err := c.backupStoreGetter.Get(&location, pluginManager, log) + backupStore, err := c.backupStoreGetter.Get(&locations[i], pluginManager, log) if err != nil { log.WithError(err).Error("Error getting backup store for this location") continue @@ -337,7 +337,7 @@ func (c *backupSyncController) run() { // update the location's last-synced time field statusPatch := client.MergeFrom(location.DeepCopy()) location.Status.LastSyncedTime = &metav1.Time{Time: time.Now().UTC()} - if err := c.kbClient.Patch(context.Background(), &location, statusPatch); err != nil { + if err := c.kbClient.Patch(context.Background(), &locations[i], statusPatch); err != nil { log.WithError(errors.WithStack(err)).Error("Error patching backup location's last-synced time") continue } diff --git a/pkg/controller/pod_volume_backup_controller.go b/pkg/controller/pod_volume_backup_controller.go index 420e3ca9cf..8f7985245a 100644 --- a/pkg/controller/pod_volume_backup_controller.go +++ b/pkg/controller/pod_volume_backup_controller.go @@ -276,19 +276,22 @@ func (r *PodVolumeBackupReconciler) updateBackupProgressFunc(pvb *velerov1api.Po } func (r *PodVolumeBackupReconciler) updateStatusToFailed(ctx context.Context, pvb *velerov1api.PodVolumeBackup, err error, msg string, log logrus.FieldLogger) (ctrl.Result, error) { - original := pvb.DeepCopy() - pvb.Status.Phase = velerov1api.PodVolumeBackupPhaseFailed - pvb.Status.Message = errors.WithMessage(err, msg).Error() - pvb.Status.CompletionTimestamp = &metav1.Time{Time: r.Clock.Now()} - - if err = r.Client.Patch(ctx, pvb, client.MergeFrom(original)); err != nil { + if err = UpdatePVBStatusToFailed(r.Client, ctx, pvb, errors.WithMessage(err, msg).Error(), r.Clock.Now()); err != nil { log.WithError(err).Error("error updating PodVolumeBackup status") return ctrl.Result{}, err } - return ctrl.Result{}, nil } +func UpdatePVBStatusToFailed(c client.Client, ctx context.Context, pvb *velerov1api.PodVolumeBackup, errString string, time time.Time) error { + original := pvb.DeepCopy() + pvb.Status.Phase = velerov1api.PodVolumeBackupPhaseFailed + pvb.Status.Message = errString + pvb.Status.CompletionTimestamp = &metav1.Time{Time: time} + + return c.Patch(ctx, pvb, client.MergeFrom(original)) +} + type resticDetails struct { credsFile, caCertFile string envs []string diff --git a/pkg/controller/pod_volume_restore_controller.go b/pkg/controller/pod_volume_restore_controller.go index 14671834e7..2b46d07503 100644 --- a/pkg/controller/pod_volume_restore_controller.go +++ b/pkg/controller/pod_volume_restore_controller.go @@ -22,6 +22,7 @@ import ( "io/ioutil" "os" "path/filepath" + "time" "github.com/pkg/errors" "github.com/sirupsen/logrus" @@ -110,11 +111,7 @@ func (c *PodVolumeRestoreReconciler) Reconcile(ctx context.Context, req ctrl.Req } if err = c.processRestore(ctx, pvr, pod, log); err != nil { - original = pvr.DeepCopy() - pvr.Status.Phase = velerov1api.PodVolumeRestorePhaseFailed - pvr.Status.Message = err.Error() - pvr.Status.CompletionTimestamp = &metav1.Time{Time: c.clock.Now()} - if e := c.Patch(ctx, pvr, client.MergeFrom(original)); e != nil { + if e := UpdatePVRStatusToFailed(c, ctx, pvr, err.Error(), c.clock.Now()); e != nil { log.WithError(err).Error("Unable to update status to failed") } @@ -133,6 +130,15 @@ func (c *PodVolumeRestoreReconciler) Reconcile(ctx context.Context, req ctrl.Req return ctrl.Result{}, nil } +func UpdatePVRStatusToFailed(c client.Client, ctx context.Context, pvr *velerov1api.PodVolumeRestore, errString string, time time.Time) error { + original := pvr.DeepCopy() + pvr.Status.Phase = velerov1api.PodVolumeRestorePhaseFailed + pvr.Status.Message = errString + pvr.Status.CompletionTimestamp = &metav1.Time{Time: time} + + return c.Patch(ctx, pvr, client.MergeFrom(original)) +} + func (c *PodVolumeRestoreReconciler) shouldProcess(ctx context.Context, log logrus.FieldLogger, pvr *velerov1api.PodVolumeRestore) (bool, *corev1api.Pod, error) { if !isPVRNew(pvr) { log.Debug("PodVolumeRestore is not new, skip") @@ -310,7 +316,7 @@ func (c *PodVolumeRestoreReconciler) processRestore(ctx context.Context, req *ve // Write a done file with name= into the just-created .velero dir // within the volume. The velero restic init container on the pod is waiting // for this file to exist in each restored volume before completing. - if err := ioutil.WriteFile(filepath.Join(volumePath, ".velero", string(restoreUID)), nil, 0644); err != nil { + if err := ioutil.WriteFile(filepath.Join(volumePath, ".velero", string(restoreUID)), nil, 0644); err != nil { //nolint:gosec return errors.Wrap(err, "error writing done file") } diff --git a/pkg/controller/restore_controller.go b/pkg/controller/restore_controller.go index d0ff0769f8..fde8232d0a 100644 --- a/pkg/controller/restore_controller.go +++ b/pkg/controller/restore_controller.go @@ -442,7 +442,7 @@ func (c *restoreController) fetchBackupInfo(backupName string, pluginManager cli func (c *restoreController) runValidatedRestore(restore *api.Restore, info backupInfo) error { // instantiate the per-restore logger that will output both to a temp file // (for upload to object storage) and to stdout. - restoreLog, err := newRestoreLogger(restore, c.logger, c.restoreLogLevel, c.logFormat) + restoreLog, err := newRestoreLogger(restore, c.restoreLogLevel, c.logFormat) if err != nil { return err } @@ -556,14 +556,14 @@ func (c *restoreController) runValidatedRestore(restore *api.Restore, info backu "errors": restoreErrors, } - if err := putResults(restore, m, info.backupStore, c.logger); err != nil { + if err := putResults(restore, m, info.backupStore); err != nil { c.logger.WithError(err).Error("Error uploading restore results to backup storage") } return nil } -func putResults(restore *api.Restore, results map[string]pkgrestore.Result, backupStore persistence.BackupStore, log logrus.FieldLogger) error { +func putResults(restore *api.Restore, results map[string]pkgrestore.Result, backupStore persistence.BackupStore) error { buf := new(bytes.Buffer) gzw := gzip.NewWriter(buf) defer gzw.Close() @@ -648,7 +648,7 @@ type restoreLogger struct { w *gzip.Writer } -func newRestoreLogger(restore *api.Restore, baseLogger logrus.FieldLogger, logLevel logrus.Level, logFormat logging.Format) (*restoreLogger, error) { +func newRestoreLogger(restore *api.Restore, logLevel logrus.Level, logFormat logging.Format) (*restoreLogger, error) { file, err := ioutil.TempFile("", "") if err != nil { return nil, errors.Wrap(err, "error creating temp file") diff --git a/pkg/generated/clientset/versioned/fake/register.go b/pkg/generated/clientset/versioned/fake/register.go index 3482b9c353..5839b1517a 100644 --- a/pkg/generated/clientset/versioned/fake/register.go +++ b/pkg/generated/clientset/versioned/fake/register.go @@ -37,14 +37,14 @@ var localSchemeBuilder = runtime.SchemeBuilder{ // AddToScheme adds all types of this clientset into the given scheme. This allows composition // of clientsets, like in: // -// import ( -// "k8s.io/client-go/kubernetes" -// clientsetscheme "k8s.io/client-go/kubernetes/scheme" -// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" -// ) +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) // -// kclientset, _ := kubernetes.NewForConfig(c) -// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) // // After this, RawExtensions in Kubernetes types will serialize kube-aggregator types // correctly. diff --git a/pkg/generated/clientset/versioned/scheme/register.go b/pkg/generated/clientset/versioned/scheme/register.go index 6eadbc890c..f94b9a72c3 100644 --- a/pkg/generated/clientset/versioned/scheme/register.go +++ b/pkg/generated/clientset/versioned/scheme/register.go @@ -37,14 +37,14 @@ var localSchemeBuilder = runtime.SchemeBuilder{ // AddToScheme adds all types of this clientset into the given scheme. This allows composition // of clientsets, like in: // -// import ( -// "k8s.io/client-go/kubernetes" -// clientsetscheme "k8s.io/client-go/kubernetes/scheme" -// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" -// ) +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) // -// kclientset, _ := kubernetes.NewForConfig(c) -// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) // // After this, RawExtensions in Kubernetes types will serialize kube-aggregator types // correctly. diff --git a/pkg/install/resources.go b/pkg/install/resources.go index 78a9ed6891..f01e540b9f 100644 --- a/pkg/install/resources.go +++ b/pkg/install/resources.go @@ -30,6 +30,11 @@ import ( velerov1api "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" ) +const ( + podSecurityLevel = "privileged" + podSecurityVersion = "latest" +) + var ( DefaultVeleroPodCPURequest = "500m" DefaultVeleroPodMemRequest = "128Mi" @@ -136,13 +141,22 @@ func ClusterRoleBinding(namespace string) *rbacv1.ClusterRoleBinding { } func Namespace(namespace string) *corev1.Namespace { - return &corev1.Namespace{ + ns := &corev1.Namespace{ ObjectMeta: objectMeta("", namespace), TypeMeta: metav1.TypeMeta{ Kind: "Namespace", APIVersion: corev1.SchemeGroupVersion.String(), }, } + + ns.Labels["pod-security.kubernetes.io/enforce"] = podSecurityLevel + ns.Labels["pod-security.kubernetes.io/enforce-version"] = podSecurityVersion + ns.Labels["pod-security.kubernetes.io/audit"] = podSecurityLevel + ns.Labels["pod-security.kubernetes.io/audit-version"] = podSecurityVersion + ns.Labels["pod-security.kubernetes.io/warn"] = podSecurityLevel + ns.Labels["pod-security.kubernetes.io/warn-version"] = podSecurityVersion + + return ns } func BackupStorageLocation(namespace, provider, bucket, prefix string, config map[string]string, caCert []byte) *velerov1api.BackupStorageLocation { diff --git a/pkg/install/resources_test.go b/pkg/install/resources_test.go index 748d70defe..28fc2e4529 100644 --- a/pkg/install/resources_test.go +++ b/pkg/install/resources_test.go @@ -40,6 +40,15 @@ func TestResources(t *testing.T) { ns := Namespace("velero") assert.Equal(t, "velero", ns.Name) + // For k8s version v1.25 and later, need to add the following labels to make + // velero installation namespace has privileged version to work with + // PSA(Pod Security Admission) and PSS(Pod Security Standards). + assert.Equal(t, ns.Labels["pod-security.kubernetes.io/enforce"], "privileged") + assert.Equal(t, ns.Labels["pod-security.kubernetes.io/enforce-version"], "latest") + assert.Equal(t, ns.Labels["pod-security.kubernetes.io/audit"], "privileged") + assert.Equal(t, ns.Labels["pod-security.kubernetes.io/audit-version"], "latest") + assert.Equal(t, ns.Labels["pod-security.kubernetes.io/warn"], "privileged") + assert.Equal(t, ns.Labels["pod-security.kubernetes.io/warn-version"], "latest") crb := ClusterRoleBinding(DefaultVeleroNamespace) // The CRB is a cluster-scoped resource diff --git a/pkg/plugin/clientmgmt/client_builder.go b/pkg/plugin/clientmgmt/client_builder.go index 76e3b1985d..619895c7fd 100644 --- a/pkg/plugin/clientmgmt/client_builder.go +++ b/pkg/plugin/clientmgmt/client_builder.go @@ -76,7 +76,7 @@ func (b *clientBuilder) clientConfig() *hcplugin.ClientConfig { string(framework.PluginKindItemSnapshotter): framework.NewItemSnapshotterPlugin(framework.ClientLogger(b.clientLogger)), }, Logger: b.pluginLogger, - Cmd: exec.Command(b.commandName, b.commandArgs...), + Cmd: exec.Command(b.commandName, b.commandArgs...), //nolint } } diff --git a/pkg/plugin/clientmgmt/logrus_adapter_test.go b/pkg/plugin/clientmgmt/logrus_adapter_test.go index ccfdfa8286..d9ccb9727a 100644 --- a/pkg/plugin/clientmgmt/logrus_adapter_test.go +++ b/pkg/plugin/clientmgmt/logrus_adapter_test.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/plugin/clientmgmt/process_test.go b/pkg/plugin/clientmgmt/process_test.go index ac82ade87a..9b685e83a3 100644 --- a/pkg/plugin/clientmgmt/process_test.go +++ b/pkg/plugin/clientmgmt/process_test.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/plugin/clientmgmt/registry_test.go b/pkg/plugin/clientmgmt/registry_test.go index 45bbcbb899..a55122e9fe 100644 --- a/pkg/plugin/clientmgmt/registry_test.go +++ b/pkg/plugin/clientmgmt/registry_test.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/plugin/clientmgmt/restartable_delegate_test.go b/pkg/plugin/clientmgmt/restartable_delegate_test.go index 3e3366c88e..ff1c052f96 100644 --- a/pkg/plugin/clientmgmt/restartable_delegate_test.go +++ b/pkg/plugin/clientmgmt/restartable_delegate_test.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/plugin/framework/client_dispenser_test.go b/pkg/plugin/framework/client_dispenser_test.go index 9ec5266691..e628a65596 100644 --- a/pkg/plugin/framework/client_dispenser_test.go +++ b/pkg/plugin/framework/client_dispenser_test.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/plugin/framework/item_snapshotter.go b/pkg/plugin/framework/item_snapshotter.go index 6e6f91439f..96c85f895f 100644 --- a/pkg/plugin/framework/item_snapshotter.go +++ b/pkg/plugin/framework/item_snapshotter.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/plugin/framework/item_snapshotter_server.go b/pkg/plugin/framework/item_snapshotter_server.go index 166e6d07f5..89f08da244 100644 --- a/pkg/plugin/framework/item_snapshotter_server.go +++ b/pkg/plugin/framework/item_snapshotter_server.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/plugin/framework/logger_test.go b/pkg/plugin/framework/logger_test.go index 15564646d8..7e9ba7bf2f 100644 --- a/pkg/plugin/framework/logger_test.go +++ b/pkg/plugin/framework/logger_test.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/plugin/framework/plugin_base_test.go b/pkg/plugin/framework/plugin_base_test.go index 3d25732586..f4ceb56c8a 100644 --- a/pkg/plugin/framework/plugin_base_test.go +++ b/pkg/plugin/framework/plugin_base_test.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/plugin/framework/server_errors.go b/pkg/plugin/framework/server_errors.go index 55f8859fde..fbe0e344ea 100644 --- a/pkg/plugin/framework/server_errors.go +++ b/pkg/plugin/framework/server_errors.go @@ -54,7 +54,7 @@ func newGRPCErrorWithCode(err error, code codes.Code, details ...goproto.Message // newGRPCError is a convenience function for creating a new gRPC error // with code = codes.Unknown -func newGRPCError(err error, details ...goproto.Message) error { +func newGRPCError(err error, details ...goproto.Message) error { //nolint:unparam return newGRPCErrorWithCode(err, codes.Unknown, details...) } diff --git a/pkg/plugin/generated/BackupItemAction.pb.go b/pkg/plugin/generated/BackupItemAction.pb.go index 937da01d05..70a5abe4a7 100644 --- a/pkg/plugin/generated/BackupItemAction.pb.go +++ b/pkg/plugin/generated/BackupItemAction.pb.go @@ -5,6 +5,7 @@ Package generated is a generated protocol buffer package. It is generated from these files: + BackupItemAction.proto DeleteItemAction.proto ItemSnapshotter.proto @@ -15,6 +16,7 @@ It is generated from these files: VolumeSnapshotter.proto It has these top-level messages: + ExecuteRequest ExecuteResponse BackupItemActionAppliesToRequest diff --git a/pkg/restic/aws.go b/pkg/restic/aws.go index d97c5f0b77..75c437d299 100644 --- a/pkg/restic/aws.go +++ b/pkg/restic/aws.go @@ -14,13 +14,14 @@ See the License for the specific language governing permissions and limitations under the License. */ +//nolint:unparam package restic const ( // AWS specific environment variable awsProfileEnvVar = "AWS_PROFILE" awsProfileKey = "profile" - awsCredentialsFileEnvVar = "AWS_SHARED_CREDENTIALS_FILE" + awsCredentialsFileEnvVar = "AWS_SHARED_CREDENTIALS_FILE" //nolint:gosec ) // getS3ResticEnvVars gets the environment variables that restic diff --git a/pkg/restic/azure.go b/pkg/restic/azure.go index 20324b8e36..71b9c2312f 100644 --- a/pkg/restic/azure.go +++ b/pkg/restic/azure.go @@ -81,7 +81,7 @@ func getStorageAccountKey(config map[string]string) (string, *azure.Environment, } // we need config["resourceGroup"], config["storageAccount"] - if _, err := getRequiredValues(mapLookup(config), resourceGroupConfigKey, storageAccountConfigKey); err != nil { + if err := getRequiredValues(mapLookup(config), resourceGroupConfigKey, storageAccountConfigKey); err != nil { return "", env, errors.Wrap(err, "unable to get all required config values") } @@ -140,7 +140,7 @@ func getAzureResticEnvVars(config map[string]string) (map[string]string, error) return nil, err } - if _, err := getRequiredValues(mapLookup(config), storageAccountConfigKey); err != nil { + if err := getRequiredValues(mapLookup(config), storageAccountConfigKey); err != nil { return nil, errors.Wrap(err, "unable to get all required config values") } @@ -190,7 +190,7 @@ func parseAzureEnvironment(cloudName string) (*azure.Environment, error) { return &env, errors.WithStack(err) } -func getRequiredValues(getValue func(string) string, keys ...string) (map[string]string, error) { +func getRequiredValues(getValue func(string) string, keys ...string) error { missing := []string{} results := map[string]string{} @@ -203,8 +203,8 @@ func getRequiredValues(getValue func(string) string, keys ...string) (map[string } if len(missing) > 0 { - return nil, errors.Errorf("the following keys do not have values: %s", strings.Join(missing, ", ")) + return errors.Errorf("the following keys do not have values: %s", strings.Join(missing, ", ")) } - return results, nil + return nil } diff --git a/pkg/restic/command.go b/pkg/restic/command.go index d06968018f..1f5b9d0d8d 100644 --- a/pkg/restic/command.go +++ b/pkg/restic/command.go @@ -77,7 +77,7 @@ func (c *Command) String() string { // Cmd returns an exec.Cmd for the command. func (c *Command) Cmd() *exec.Cmd { parts := c.StringSlice() - cmd := exec.Command(parts[0], parts[1:]...) + cmd := exec.Command(parts[0], parts[1:]...) //nolint:gosec cmd.Dir = c.Dir if len(c.Env) > 0 { diff --git a/pkg/restic/command_factory_test.go b/pkg/restic/command_factory_test.go index 4a38bc1901..c0a627ad1f 100644 --- a/pkg/restic/command_factory_test.go +++ b/pkg/restic/command_factory_test.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/restic/gcp.go b/pkg/restic/gcp.go index 96d1edfe60..ab42800850 100644 --- a/pkg/restic/gcp.go +++ b/pkg/restic/gcp.go @@ -18,12 +18,12 @@ package restic const ( // GCP specific environment variable - gcpCredentialsFileEnvVar = "GOOGLE_APPLICATION_CREDENTIALS" + gcpCredentialsFileEnvVar = "GOOGLE_APPLICATION_CREDENTIALS" //nolint:gosec ) // getGCPResticEnvVars gets the environment variables that restic relies // on based on info in the provided object storage location config map. -func getGCPResticEnvVars(config map[string]string) (map[string]string, error) { +func getGCPResticEnvVars(config map[string]string) (map[string]string, error) { //nolint:unparam result := make(map[string]string) if credentialsFile, ok := config[credentialsFileKey]; ok { diff --git a/pkg/restic/mocks/fake_restic_executer.go b/pkg/restic/mocks/fake_restic_executer.go index 9dcae9574c..39e0d19704 100644 --- a/pkg/restic/mocks/fake_restic_executer.go +++ b/pkg/restic/mocks/fake_restic_executer.go @@ -34,4 +34,4 @@ func (exec FakeResticBackupExec) RunBackup(cmd *restic.Command, log logrus.Field // GetSnapshotID gets the Restic snapshot ID. func (exec FakeResticBackupExec) GetSnapshotID(cmd *restic.Command) (string, error) { return "", nil -} \ No newline at end of file +} diff --git a/pkg/restic/repo_locker.go b/pkg/restic/repo_locker.go index 29434753e9..138806e733 100644 --- a/pkg/restic/repo_locker.go +++ b/pkg/restic/repo_locker.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/restic/repository_keys.go b/pkg/restic/repository_keys.go index 28c190f70e..eb3b932abd 100644 --- a/pkg/restic/repository_keys.go +++ b/pkg/restic/repository_keys.go @@ -14,6 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +//nolint:gosec package restic import ( diff --git a/pkg/restore/admissionwebhook_config_action.go b/pkg/restore/admissionwebhook_config_action.go index 8fd5c1693e..74fd1b3ff9 100644 --- a/pkg/restore/admissionwebhook_config_action.go +++ b/pkg/restore/admissionwebhook_config_action.go @@ -70,9 +70,9 @@ func (a *AdmissionWebhookConfigurationAction) Execute(input *velero.RestoreItemA return velero.NewRestoreItemActionExecuteOutput(input.Item), nil } newWebhooks := make([]interface{}, 0) - for i, entry := range webhooks { + for i := range webhooks { logger2 := logger.WithField("index", i) - obj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(&entry) + obj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(&webhooks[i]) if err != nil { logger2.Errorf("failed to convert the webhook entry, error: %v, it will be dropped", err) continue diff --git a/pkg/restore/change_pvc_node_selector.go b/pkg/restore/change_pvc_node_selector.go index b4d947c21f..5ee977a935 100644 --- a/pkg/restore/change_pvc_node_selector.go +++ b/pkg/restore/change_pvc_node_selector.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -59,8 +59,9 @@ func (p *ChangePVCNodeSelectorAction) AppliesTo() (velero.ResourceSelector, erro } // Execute updates the pvc's selected-node annotation: -// a) if node mapping found in the config map for the plugin -// b) if node mentioned in annotation doesn't exist +// +// a) if node mapping found in the config map for the plugin +// b) if node mentioned in annotation doesn't exist func (p *ChangePVCNodeSelectorAction) Execute(input *velero.RestoreItemActionExecuteInput) (*velero.RestoreItemActionExecuteOutput, error) { p.logger.Info("Executing ChangePVCNodeSelectorAction") defer p.logger.Info("Done executing ChangePVCNodeSelectorAction") diff --git a/pkg/restore/merge_service_account_test.go b/pkg/restore/merge_service_account_test.go index 8079018ee3..e58c423744 100644 --- a/pkg/restore/merge_service_account_test.go +++ b/pkg/restore/merge_service_account_test.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/restore/priority.go b/pkg/restore/priority.go index c544532c74..d84a95dd75 100644 --- a/pkg/restore/priority.go +++ b/pkg/restore/priority.go @@ -26,9 +26,10 @@ const ( ) // Priorities defines the desired order of resource operations: -// Resources in the HighPriorities list will be handled first -// Resources in the LowPriorities list will be handled last -// Other resources will be handled alphabetically after the high prioritized resources and before the low prioritized resources +// +// Resources in the HighPriorities list will be handled first +// Resources in the LowPriorities list will be handled last +// Other resources will be handled alphabetically after the high prioritized resources and before the low prioritized resources type Priorities struct { HighPriorities []string LowPriorities []string diff --git a/pkg/restore/restore.go b/pkg/restore/restore.go index e236552182..afc1933d97 100644 --- a/pkg/restore/restore.go +++ b/pkg/restore/restore.go @@ -1029,7 +1029,7 @@ func (ctx *restoreContext) restoreItem(obj *unstructured.Unstructured, groupReso // Check to see if the claimRef.namespace field needs to be remapped, // and do so if necessary. - _, err = remapClaimRefNS(ctx, obj) + err = remapClaimRefNS(ctx, obj) if err != nil { errs.Add(namespace, err) return warnings, errs @@ -1119,7 +1119,7 @@ func (ctx *restoreContext) restoreItem(obj *unstructured.Unstructured, groupReso ctx.log.Infof("Restoring persistent volume as-is because it doesn't have a snapshot and its reclaim policy is not Delete.") // Check to see if the claimRef.namespace field needs to be remapped, and do so if necessary. - _, err = remapClaimRefNS(ctx, obj) + err = remapClaimRefNS(ctx, obj) if err != nil { errs.Add(namespace, err) return warnings, errs @@ -1529,37 +1529,37 @@ func shouldRenamePV(ctx *restoreContext, obj *unstructured.Unstructured, client // remapClaimRefNS remaps a PersistentVolume's claimRef.Namespace based on a // restore's NamespaceMappings, if necessary. Returns true if the namespace was // remapped, false if it was not required. -func remapClaimRefNS(ctx *restoreContext, obj *unstructured.Unstructured) (bool, error) { +func remapClaimRefNS(ctx *restoreContext, obj *unstructured.Unstructured) error { if len(ctx.restore.Spec.NamespaceMapping) == 0 { ctx.log.Debug("Persistent volume does not need to have the claimRef.namespace remapped because restore is not remapping any namespaces") - return false, nil + return nil } // Conversion to the real type here is more readable than all the error checking // involved with reading each field individually. pv := new(v1.PersistentVolume) if err := runtime.DefaultUnstructuredConverter.FromUnstructured(obj.Object, pv); err != nil { - return false, errors.Wrapf(err, "error converting persistent volume to structured") + return errors.Wrapf(err, "error converting persistent volume to structured") } if pv.Spec.ClaimRef == nil { ctx.log.Debugf("Persistent volume does not need to have the claimRef.namespace remapped because it's not claimed") - return false, nil + return nil } targetNS, ok := ctx.restore.Spec.NamespaceMapping[pv.Spec.ClaimRef.Namespace] if !ok { ctx.log.Debugf("Persistent volume does not need to have the claimRef.namespace remapped because it's not claimed by a PVC in a namespace that's being remapped") - return false, nil + return nil } err := unstructured.SetNestedField(obj.Object, targetNS, "spec", "claimRef", "namespace") if err != nil { - return false, err + return err } ctx.log.Debug("Persistent volume's namespace was updated") - return true, nil + return nil } // restorePodVolumeBackups restores the PodVolumeBackups for the given restored pod diff --git a/pkg/test/helpers.go b/pkg/test/helpers.go index 261e33da4e..5c103c5eae 100644 --- a/pkg/test/helpers.go +++ b/pkg/test/helpers.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/test/mock_pod_command_executor.go b/pkg/test/mock_pod_command_executor.go index ef28ec96e1..219361b776 100644 --- a/pkg/test/mock_pod_command_executor.go +++ b/pkg/test/mock_pod_command_executor.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/util/kube/periodical_enqueue_source.go b/pkg/util/kube/periodical_enqueue_source.go index 20b658c61a..e3bb3c7da8 100644 --- a/pkg/util/kube/periodical_enqueue_source.go +++ b/pkg/util/kube/periodical_enqueue_source.go @@ -18,6 +18,7 @@ package kube import ( "context" + "fmt" "reflect" "time" @@ -96,3 +97,10 @@ func (p *PeriodicalEnqueueSource) Start(ctx context.Context, h handler.EventHand return nil } + +func (p *PeriodicalEnqueueSource) String() string { + if p.objList != nil { + return fmt.Sprintf("kind source: %T", p.objList) + } + return "kind source: unknown type" +} diff --git a/pkg/util/kube/utils.go b/pkg/util/kube/utils.go index bf7ac0011c..aba6731557 100644 --- a/pkg/util/kube/utils.go +++ b/pkg/util/kube/utils.go @@ -123,9 +123,9 @@ func EnsureNamespaceExistsAndIsReady(namespace *corev1api.Namespace, client core func GetVolumeDirectory(ctx context.Context, log logrus.FieldLogger, pod *corev1api.Pod, volumeName string, cli client.Client) (string, error) { var volume *corev1api.Volume - for _, item := range pod.Spec.Volumes { + for i, item := range pod.Spec.Volumes { if item.Name == volumeName { - volume = &item + volume = &pod.Spec.Volumes[i] break } } diff --git a/pkg/util/logging/format_flag.go b/pkg/util/logging/format_flag.go index fda083cb8d..c757a17dd7 100644 --- a/pkg/util/logging/format_flag.go +++ b/pkg/util/logging/format_flag.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/util/logging/log_level_flag.go b/pkg/util/logging/log_level_flag.go index 4d3d306d03..ff0f0efb22 100644 --- a/pkg/util/logging/log_level_flag.go +++ b/pkg/util/logging/log_level_flag.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/test/e2e/Makefile b/test/e2e/Makefile index 152f6674a8..94ef0bc464 100644 --- a/test/e2e/Makefile +++ b/test/e2e/Makefile @@ -88,7 +88,7 @@ DEBUG_E2E_TEST ?= false .PHONY:ginkgo ginkgo: # Make sure ginkgo is in $GOPATH/bin - go get github.com/onsi/ginkgo/ginkgo + go install github.com/onsi/ginkgo/ginkgo@v1.16.5 .PHONY: run run: ginkgo diff --git a/test/e2e/backup/backup.go b/test/e2e/backup/backup.go index 103568e058..eafe0829a0 100644 --- a/test/e2e/backup/backup.go +++ b/test/e2e/backup/backup.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/test/e2e/backups/deletion.go b/test/e2e/backups/deletion.go index 89d1186318..4a942c5732 100644 --- a/test/e2e/backups/deletion.go +++ b/test/e2e/backups/deletion.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/test/e2e/backups/sync_backups.go b/test/e2e/backups/sync_backups.go index 37162bac14..d1e5c57d71 100644 --- a/test/e2e/backups/sync_backups.go +++ b/test/e2e/backups/sync_backups.go @@ -13,10 +13,9 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - * / */ -//Refer to https://github.com/vmware-tanzu/velero/issues/4253 +// Refer to https://github.com/vmware-tanzu/velero/issues/4253 package backups import ( diff --git a/test/e2e/bsl-mgmt/deletion.go b/test/e2e/bsl-mgmt/deletion.go index 823a8ce17b..4a26f9ca76 100644 --- a/test/e2e/bsl-mgmt/deletion.go +++ b/test/e2e/bsl-mgmt/deletion.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/test/e2e/upgrade/upgrade.go b/test/e2e/upgrade/upgrade.go index 7461697a25..ca2db3181a 100644 --- a/test/e2e/upgrade/upgrade.go +++ b/test/e2e/upgrade/upgrade.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/test/e2e/util/k8s/namespace.go b/test/e2e/util/k8s/namespace.go index 9b28873ef9..cc5f05a0f4 100644 --- a/test/e2e/util/k8s/namespace.go +++ b/test/e2e/util/k8s/namespace.go @@ -35,6 +35,11 @@ import ( func CreateNamespace(ctx context.Context, client TestClient, namespace string) error { ns := builder.ForNamespace(namespace).Result() + // Add label to avoid PSA check. + ns.Labels = map[string]string{ + "pod-security.kubernetes.io/enforce": "baseline", + "pod-security.kubernetes.io/enforce-version": "latest", + } _, err := client.ClientGo.CoreV1().Namespaces().Create(ctx, ns, metav1.CreateOptions{}) if apierrors.IsAlreadyExists(err) { return nil @@ -45,6 +50,9 @@ func CreateNamespace(ctx context.Context, client TestClient, namespace string) e func CreateNamespaceWithLabel(ctx context.Context, client TestClient, namespace string, label map[string]string) error { ns := builder.ForNamespace(namespace).Result() ns.Labels = label + // Add label to avoid PSA check. + ns.Labels["pod-security.kubernetes.io/enforce"] = "baseline" + ns.Labels["pod-security.kubernetes.io/enforce-version"] = "latest" _, err := client.ClientGo.CoreV1().Namespaces().Create(ctx, ns, metav1.CreateOptions{}) if apierrors.IsAlreadyExists(err) { return nil @@ -54,6 +62,11 @@ func CreateNamespaceWithLabel(ctx context.Context, client TestClient, namespace func CreateNamespaceWithAnnotation(ctx context.Context, client TestClient, namespace string, annotation map[string]string) error { ns := builder.ForNamespace(namespace).Result() + // Add label to avoid PSA check. + ns.Labels = map[string]string{ + "pod-security.kubernetes.io/enforce": "baseline", + "pod-security.kubernetes.io/enforce-version": "latest", + } ns.ObjectMeta.Annotations = annotation _, err := client.ClientGo.CoreV1().Namespaces().Create(ctx, ns, metav1.CreateOptions{}) if apierrors.IsAlreadyExists(err) { diff --git a/test/e2e/util/k8s/secret.go b/test/e2e/util/k8s/secret.go index 3c3682c933..21c5271c90 100644 --- a/test/e2e/util/k8s/secret.go +++ b/test/e2e/util/k8s/secret.go @@ -22,7 +22,6 @@ import ( "github.com/pkg/errors" "github.com/sirupsen/logrus" - "golang.org/x/net/context" v1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" @@ -73,25 +72,3 @@ func WaitForSecretsComplete(c clientset.Interface, ns, secretName string) error func GetSecret(c clientset.Interface, ns, secretName string) (*v1.Secret, error) { return c.CoreV1().Secrets(ns).Get(context.TODO(), secretName, metav1.GetOptions{}) } - -//CreateVCCredentialSecret refer to https://github.com/vmware-tanzu/velero-plugin-for-vsphere/blob/v1.3.0/docs/vanilla.md -func CreateVCCredentialSecret(c clientset.Interface, veleroNamespace string) error { - secret, err := GetSecret(c, "kube-system", "vsphere-config-secret") - if err != nil { - return err - } - vsphereCfg, exist := secret.Data["csi-vsphere.conf"] - if !exist { - return errors.New("failed to retrieve csi-vsphere config") - } - se := &v1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "velero-vsphere-config-secret", - Namespace: veleroNamespace, - }, - Type: v1.SecretTypeOpaque, - Data: map[string][]byte{"csi-vsphere.conf": vsphereCfg}, - } - _, err = c.CoreV1().Secrets(veleroNamespace).Create(context.TODO(), se, metav1.CreateOptions{}) - return err -} diff --git a/test/e2e/util/kibishii/kibishii_utils.go b/test/e2e/util/kibishii/kibishii_utils.go index 8406cda55b..ee244417e1 100644 --- a/test/e2e/util/kibishii/kibishii_utils.go +++ b/test/e2e/util/kibishii/kibishii_utils.go @@ -148,6 +148,13 @@ func installKibishii(ctx context.Context, namespace string, cloudPlatform, veler return errors.Wrapf(err, "failed to install kibishii, stderr=%s", stderr) } + labelNamespaceCmd := exec.CommandContext(ctx, "kubectl", "label", "namespace", namespace, "pod-security.kubernetes.io/enforce=baseline", "pod-security.kubernetes.io/enforce-version=latest", "--overwrite=true") + _, stderr, err = veleroexec.RunCommand(labelNamespaceCmd) + fmt.Printf("Label namespace with PSA policy: %s\n", labelNamespaceCmd) + if err != nil { + return errors.Wrapf(err, "failed to label namespace with PSA policy, stderr=%s", stderr) + } + kibishiiSetWaitCmd := exec.CommandContext(ctx, "kubectl", "rollout", "status", "statefulset.apps/kibishii-deployment", "-n", namespace, "-w", "--timeout=30m") _, stderr, err = veleroexec.RunCommand(kibishiiSetWaitCmd) diff --git a/test/e2e/util/velero/install.go b/test/e2e/util/velero/install.go index ed3f6156dd..74b8b2ea08 100644 --- a/test/e2e/util/velero/install.go +++ b/test/e2e/util/velero/install.go @@ -42,6 +42,11 @@ import ( . "github.com/vmware-tanzu/velero/test/e2e/util/k8s" ) +const ( + KubeSystemNamespace = "kube-system" + VSphereCSIControllerNamespace = "vmware-system-csi" +) + // we provide more install options other than the standard install.InstallOptions in E2E test type installOptions struct { *install.InstallOptions @@ -105,7 +110,7 @@ func VeleroInstall(ctx context.Context, veleroCfg *VerleroConfig, useVolumeSnaps return nil } -//configvSpherePlugin refers to https://github.com/vmware-tanzu/velero-plugin-for-vsphere/blob/v1.3.0/docs/vanilla.md +// configvSpherePlugin refers to https://github.com/vmware-tanzu/velero-plugin-for-vsphere/blob/v1.3.0/docs/vanilla.md func configvSpherePlugin() error { cli, err := NewTestClient() if err != nil { @@ -119,7 +124,7 @@ func configvSpherePlugin() error { if err := CreateNamespace(context.Background(), cli, VeleroCfg.VeleroNamespace); err != nil { return errors.WithMessagef(err, "Failed to create Velero %s namespace", VeleroCfg.VeleroNamespace) } - if err := CreateVCCredentialSecret(cli.ClientGo, VeleroCfg.VeleroNamespace); err != nil { + if err := createVCCredentialSecret(cli.ClientGo, VeleroCfg.VeleroNamespace); err != nil { return errors.WithMessagef(err, "Failed to create virtual center credential secret in %s namespace", VeleroCfg.VeleroNamespace) } if err := WaitForSecretsComplete(cli.ClientGo, VeleroCfg.VeleroNamespace, vsphereSecret); err != nil { @@ -418,3 +423,37 @@ func VeleroUninstall(ctx context.Context, cli, namespace string) error { fmt.Println("Velero uninstalled ⛵") return nil } + +// createVCCredentialSecret refer to https://github.com/vmware-tanzu/velero-plugin-for-vsphere/blob/v1.3.0/docs/vanilla.md +func createVCCredentialSecret(c clientset.Interface, veleroNamespace string) error { + secret, err := getVCCredentialSecret(c) + if err != nil { + return err + } + vsphereCfg, exist := secret.Data["csi-vsphere.conf"] + if !exist { + return errors.New("failed to retrieve csi-vsphere config") + } + se := &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "velero-vsphere-config-secret", + Namespace: veleroNamespace, + }, + Type: corev1.SecretTypeOpaque, + Data: map[string][]byte{"csi-vsphere.conf": vsphereCfg}, + } + _, err = c.CoreV1().Secrets(veleroNamespace).Create(context.TODO(), se, metav1.CreateOptions{}) + return err +} + +// Reference https://github.com/vmware-tanzu/velero-plugin-for-vsphere/blob/main/docs/vanilla.md#create-vc-credential-secret +// Read secret from kube-system namespace first, if not found, try with vmware-system-csi. +func getVCCredentialSecret(c clientset.Interface) (secret *corev1.Secret, err error) { + secret, err = GetSecret(c, KubeSystemNamespace, "vsphere-config-secret") + if err != nil { + if apierrors.IsNotFound(err) { + secret, err = GetSecret(c, VSphereCSIControllerNamespace, "vsphere-config-secret") + } + } + return +}