From 95f645f6f2f7e34529bc7e6b471ae81fdd96a0e2 Mon Sep 17 00:00:00 2001 From: docktermj Date: Tue, 17 Oct 2023 09:09:19 -0400 Subject: [PATCH] #38 Refactor to template --- ...-dependabot-request-to-project-t-comm.yaml | 3 ++ .../add-issue-to-project-t-comm.yaml | 3 ++ .github/workflows/add-triage-label.yaml | 2 + .github/workflows/go-test-darwin.yaml | 7 ++-- .github/workflows/go-test-linux.yaml | 7 ++-- .github/workflows/go-test-windows.yaml | 7 ++-- .github/workflows/gosec.yaml | 2 + .github/workflows/identify-customer.yaml | 3 ++ CHANGELOG.md | 9 +++++ Makefile | 29 +++++--------- Makefile.darwin | 37 ++++++++++++++---- Makefile.linux | 38 +++++++++++++++---- Makefile.windows | 38 +++++++++++++++---- go.mod | 9 ++--- go.sum | 19 ++++------ 15 files changed, 148 insertions(+), 65 deletions(-) diff --git a/.github/workflows/add-dependabot-request-to-project-t-comm.yaml b/.github/workflows/add-dependabot-request-to-project-t-comm.yaml index fb86fc1..5d9cbcb 100644 --- a/.github/workflows/add-dependabot-request-to-project-t-comm.yaml +++ b/.github/workflows/add-dependabot-request-to-project-t-comm.yaml @@ -2,14 +2,17 @@ # - https://github.com/srggrs/assign-one-project-github-action name: add-dependabot-request-to-project-t-comm.yaml + on: pull_request: types: - opened - reopened + env: GITHUB_TOKEN: ${{ secrets.SENZING_GITHUB_ACCESS_TOKEN }} CREATOR: ${{ github.event.pull_request.user.login }} + jobs: add-dependabot-request-to-project: name: Add dependabot pull request to Senzing Community project diff --git a/.github/workflows/add-issue-to-project-t-comm.yaml b/.github/workflows/add-issue-to-project-t-comm.yaml index 8bbabfd..978d2b1 100644 --- a/.github/workflows/add-issue-to-project-t-comm.yaml +++ b/.github/workflows/add-issue-to-project-t-comm.yaml @@ -2,13 +2,16 @@ # - https://github.com/srggrs/assign-one-project-github-action name: add-issue-to-project-t-comm.yaml + on: issues: types: - reopened - opened + env: GITHUB_TOKEN: ${{ secrets.SENZING_GITHUB_ACCESS_TOKEN }} + jobs: add-issue-to-project: name: Add issue to Senzing Community project diff --git a/.github/workflows/add-triage-label.yaml b/.github/workflows/add-triage-label.yaml index cb1c77f..bdbefae 100644 --- a/.github/workflows/add-triage-label.yaml +++ b/.github/workflows/add-triage-label.yaml @@ -3,11 +3,13 @@ # - https://github.com/andymckay/labeler name: add-triage-label.yaml + on: issues: types: - reopened - opened + jobs: add-triage-label: name: Add triage label to issue diff --git a/.github/workflows/go-test-darwin.yaml b/.github/workflows/go-test-darwin.yaml index 1571b78..db29ac2 100644 --- a/.github/workflows/go-test-darwin.yaml +++ b/.github/workflows/go-test-darwin.yaml @@ -6,12 +6,13 @@ name: go-test-darwin.yaml on: [push] jobs: - build: - runs-on: macos-latest + go-test-darwin: + runs-on: ${{ matrix.os }} strategy: matrix: go: ["1.21"] - name: Go ${{ matrix.go }} - darwin + os: [macos-latest] + name: "go test with OS: ${{ matrix.os }}; Go: ${{ matrix.go }}" steps: - name: Checkout repository uses: actions/checkout@v4 diff --git a/.github/workflows/go-test-linux.yaml b/.github/workflows/go-test-linux.yaml index b930c3e..a5acfa8 100644 --- a/.github/workflows/go-test-linux.yaml +++ b/.github/workflows/go-test-linux.yaml @@ -6,12 +6,13 @@ name: go-test-linux.yaml on: [push] jobs: - build: - runs-on: ubuntu-latest + go-test-linux: + runs-on: ${{ matrix.os }} strategy: matrix: go: ["1.21"] - name: Go ${{ matrix.go }} - linux + os: [ubuntu-latest] + name: "go test with OS: ${{ matrix.os }}; Go: ${{ matrix.go }}" steps: - name: Checkout repository uses: actions/checkout@v4 diff --git a/.github/workflows/go-test-windows.yaml b/.github/workflows/go-test-windows.yaml index 187b0fc..ca6fe9d 100644 --- a/.github/workflows/go-test-windows.yaml +++ b/.github/workflows/go-test-windows.yaml @@ -6,12 +6,13 @@ name: go-test-windows.yaml on: [push] jobs: - build: - runs-on: windows-latest + go-test-windows: + runs-on: ${{ matrix.os }} strategy: matrix: go: ["1.21"] - name: Go ${{ matrix.go }} - windows + os: [windows-latest] + name: "go test with OS: ${{ matrix.os }}; Go: ${{ matrix.go }}" steps: - name: Checkout repository uses: actions/checkout@v4 diff --git a/.github/workflows/gosec.yaml b/.github/workflows/gosec.yaml index 42443d8..a4dc82c 100644 --- a/.github/workflows/gosec.yaml +++ b/.github/workflows/gosec.yaml @@ -2,6 +2,7 @@ # - https://github.com/securego/gosec name: gosec.yaml + on: push: branches: @@ -9,6 +10,7 @@ on: pull_request: branches: - main + jobs: gosec: runs-on: ubuntu-latest diff --git a/.github/workflows/identify-customer.yaml b/.github/workflows/identify-customer.yaml index 8770e6d..2e9a0da 100644 --- a/.github/workflows/identify-customer.yaml +++ b/.github/workflows/identify-customer.yaml @@ -1,12 +1,15 @@ name: identify-customer.yaml + on: issues: types: - opened + env: GITHUB_TOKEN: ${{ secrets.ORG_MEMBERSHIP_TOKEN }} MEMBER_LIST: ${{ secrets.SENZING_MEMBERS }} CREATOR: ${{ github.actor }} + jobs: identify-customer: name: Add customer-submission label diff --git a/CHANGELOG.md b/CHANGELOG.md index ba99b71..1095b27 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - +## [0.1.9] - 2023-10-17 + +### Changed in 0.1.9 + +- Refactor to [template-go](https://github.com/Senzing/template-go) +- Update dependencies + - github.com/senzing/go-common v0.3.1 + - github.com/spf13/viper v1.17.0 + ## [0.1.8] - 2023-08-29 ### Changed in 0.1.8 diff --git a/Makefile b/Makefile index 9c7afc4..936ebb4 100644 --- a/Makefile +++ b/Makefile @@ -26,7 +26,6 @@ GO_PACKAGE_NAME := $(shell echo $(GIT_REMOTE_URL) | sed -e 's|^git@github.com:|g # Recursive assignment ('=') -CC = gcc GO_OSARCH = $(subst /, ,$@) GO_OS = $(word 1, $(GO_OSARCH)) GO_ARCH = $(word 2, $(GO_OSARCH)) @@ -55,6 +54,10 @@ default: help -include Makefile.$(OSTYPE) -include Makefile.$(OSTYPE)_$(OSARCH) + +.PHONY: hello-world +hello-world: hello-world-osarch-specific + # ----------------------------------------------------------------------------- # Dependency management # ----------------------------------------------------------------------------- @@ -67,51 +70,40 @@ dependencies: # ----------------------------------------------------------------------------- # Build -# - The "build" target is implemented in Makefile.OS.ARCH files. # - docker-build: https://docs.docker.com/engine/reference/commandline/build/ # ----------------------------------------------------------------------------- PLATFORMS := darwin/amd64 linux/amd64 windows/amd64 $(PLATFORMS): @echo Building $(TARGET_DIRECTORY)/$(GO_OS)-$(GO_ARCH)/$(PROGRAM_NAME) - @mkdir -p $(TARGET_DIRECTORY)/$(GO_OS)-$(GO_ARCH) || true @GOOS=$(GO_OS) GOARCH=$(GO_ARCH) go build -o $(TARGET_DIRECTORY)/$(GO_OS)-$(GO_ARCH)/$(PROGRAM_NAME) -.PHONY: build-all $(PLATFORMS) -build-all: $(PLATFORMS) - @mv $(TARGET_DIRECTORY)/windows-amd64/$(PROGRAM_NAME) $(TARGET_DIRECTORY)/windows-amd64/$(PROGRAM_NAME).exe +.PHONY: build +build: build-osarch-specific # ----------------------------------------------------------------------------- # Test # ----------------------------------------------------------------------------- .PHONY: test -test: - @go test -v -p 1 ./... -# @go test -v ./engineconfiguration - +test: test-osarch-specific # ----------------------------------------------------------------------------- # Run # ----------------------------------------------------------------------------- .PHONY: run -run: - @go run main.go +run: run-osarch-specific # ----------------------------------------------------------------------------- # Utility targets # ----------------------------------------------------------------------------- .PHONY: clean -clean: +clean: clean-osarch-specific @go clean -cache @go clean -testcache - @docker rm --force $(DOCKER_CONTAINER_NAME) 2> /dev/null || true - @docker rmi --force $(DOCKER_IMAGE_NAME) $(DOCKER_BUILD_IMAGE_NAME) 2> /dev/null || true - @rm -rf $(TARGET_DIRECTORY) || true - @rm -f $(GOPATH)/bin/$(PROGRAM_NAME) || true .PHONY: help @@ -129,8 +121,7 @@ print-make-variables: .PHONY: setup -setup: - @echo "No setup required." +setup: setup-osarch-specific .PHONY: update-pkg-cache diff --git a/Makefile.darwin b/Makefile.darwin index d03e58a..061ee3e 100644 --- a/Makefile.darwin +++ b/Makefile.darwin @@ -1,19 +1,42 @@ # Makefile extensions for darwin. # ----------------------------------------------------------------------------- -# Makefile targets supported by all platforms. +# Variables # ----------------------------------------------------------------------------- -.PHONY: hello-world -hello-world: - @echo "Hello World, from darwin." # ----------------------------------------------------------------------------- -# Build +# OS-ARCH specific targets # ----------------------------------------------------------------------------- -.PHONY: build -build: darwin/amd64 +.PHONY: build-osarch-specific +build-osarch-specific: darwin/amd64 + + +.PHONY: clean-osarch-specific +clean-osarch-specific: + @rm -rf $(TARGET_DIRECTORY) || true + @rm -f $(GOPATH)/bin/$(PROGRAM_NAME) || true + + +.PHONY: hello-world-osarch-specific +hello-world-osarch-specific: + @echo "Hello World, from darwin." + + +.PHONY: run-osarch-specific +run-osarch-specific: + @go run -exec macos_exec_dyld.sh main.go + + +.PHONY: setup-osarch-specific +setup-osarch-specific: + @echo "No setup required." + + +.PHONY: test-osarch-specific +test-osarch-specific: + @go test -exec macos_exec_dyld.sh -v -p 1 ./... # ----------------------------------------------------------------------------- # Makefile targets supported only by this platform. diff --git a/Makefile.linux b/Makefile.linux index 741c682..08e409c 100644 --- a/Makefile.linux +++ b/Makefile.linux @@ -1,19 +1,43 @@ # Makefile extensions for linux. # ----------------------------------------------------------------------------- -# Makefile targets supported by all platforms. +# Variables # ----------------------------------------------------------------------------- -.PHONY: hello-world -hello-world: - @echo "Hello World, from linux." # ----------------------------------------------------------------------------- -# Build +# OS-ARCH specific targets # ----------------------------------------------------------------------------- -.PHONY: build -build: linux/amd64 +.PHONY: build-osarch-specific +build-osarch-specific: linux/amd64 + + +.PHONY: clean-osarch-specific +clean-osarch-specific: + @rm -rf $(TARGET_DIRECTORY) || true + @rm -f $(GOPATH)/bin/$(PROGRAM_NAME) || true + + +.PHONY: hello-world-osarch-specific +hello-world-osarch-specific: + @echo "Hello World, from linux." + + + +.PHONY: run-osarch-specific +run-osarch-specific: + @go run main.go + + +.PHONY: setup-osarch-specific +setup-osarch-specific: + @echo "No setup required." + + +.PHONY: test-osarch-specific +test-osarch-specific: + @go test -v -p 1 ./... # ----------------------------------------------------------------------------- # Makefile targets supported only by this platform. diff --git a/Makefile.windows b/Makefile.windows index 3a3dbcb..5fc027e 100644 --- a/Makefile.windows +++ b/Makefile.windows @@ -1,21 +1,45 @@ # Makefile extensions for windows. # ----------------------------------------------------------------------------- -# Makefile targets supported by all platforms. +# Variables # ----------------------------------------------------------------------------- -.PHONY: hello-world -hello-world: - @echo "Hello World, from windows." # ----------------------------------------------------------------------------- -# Build +# OS-ARCH specific targets # ----------------------------------------------------------------------------- -.PHONY: build -build: windows/amd64 +.PHONY: build-osarch-specific +build-osarch-specific: windows/amd64 @mv $(TARGET_DIRECTORY)/windows-amd64/$(PROGRAM_NAME) $(TARGET_DIRECTORY)/windows-amd64/$(PROGRAM_NAME).exe + +.PHONY: clean-osarch-specific +clean-osarch-specific: + del /F /S /Q $(TARGET_DIRECTORY) + del /F /S /Q $(GOPATH)/bin/$(PROGRAM_NAME) + + +.PHONY: hello-world-osarch-specific +hello-world-osarch-specific: + @echo "Hello World, from windows." + + + +.PHONY: run-osarch-specific +run-osarch-specific: + @go run main.go + + +.PHONY: setup-osarch-specific +setup-osarch-specific: + @echo "No setup required." + + +.PHONY: test-osarch-specific +test-osarch-specific: + @go test -v -p 1 ./... + # ----------------------------------------------------------------------------- # Makefile targets supported only by this platform. # ----------------------------------------------------------------------------- diff --git a/go.mod b/go.mod index 41241fa..976e1c7 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/senzing/go-cmdhelping go 1.21 require ( - github.com/senzing/go-common v0.3.0 + github.com/senzing/go-common v0.3.1 github.com/spf13/cobra v1.7.0 github.com/spf13/viper v1.17.0 github.com/stretchr/testify v1.8.4 @@ -26,10 +26,9 @@ require ( github.com/spf13/cast v1.5.1 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/subosito/gotenv v1.6.0 // indirect - go.uber.org/atomic v1.9.0 // indirect - go.uber.org/multierr v1.9.0 // indirect - golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect - golang.org/x/sys v0.12.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect + golang.org/x/sys v0.13.0 // indirect golang.org/x/text v0.13.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/ini.v1 v1.67.0 // indirect diff --git a/go.sum b/go.sum index 55582be..43b85cf 100644 --- a/go.sum +++ b/go.sum @@ -160,8 +160,8 @@ github.com/sagikazarmark/locafero v0.3.0 h1:zT7VEGWC2DTflmccN/5T1etyKvxSxpHsjb9c github.com/sagikazarmark/locafero v0.3.0/go.mod h1:w+v7UsPNFwzF1cHuOajOOzoq4U7v/ig1mpRjqV+Bu1U= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= -github.com/senzing/go-common v0.3.0 h1:xigayoS3QKW4OUL57Rfo15E3IWdADvAi4EiSyJDP4q0= -github.com/senzing/go-common v0.3.0/go.mod h1:zD3JR5hQ/nAsWlXwMQbX/BG1r/cftg0GiE3CALvhRpk= +github.com/senzing/go-common v0.3.1 h1:xeUwnd4sB4k9fa6UyE6GCx9uvWIxsl/09miBpdon2IY= +github.com/senzing/go-common v0.3.1/go.mod h1:PP9drKo/ouIbtB4+eHMT6hDeUoMX1SVuU1uqklZGgLo= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= @@ -177,7 +177,6 @@ github.com/spf13/viper v1.17.0/go.mod h1:BmMMMLQXSbcHK6KAOiFLz0l5JHrU89OdIRHvsk0 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -197,10 +196,8 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= -go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -218,8 +215,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -330,8 +327,8 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 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=