From b728cc4b9861ee25ac9cd1c3dd2d5c53fced6db4 Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Tue, 18 Jun 2024 16:20:51 +0900 Subject: [PATCH 01/29] Fix build of arm64 binary --- .github/workflows/release.yml | 155 +++++++++++----------------------- Dockerfile | 20 +++-- docker-bake.hcl | 54 ++++++++++++ 3 files changed, 117 insertions(+), 112 deletions(-) create mode 100644 docker-bake.hcl diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9a439b776..cf57181da 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,138 +8,85 @@ on: jobs: build: name: Build - strategy: - matrix: - os: [linux] - arch: [amd64, arm64] runs-on: ubuntu-latest steps: - name: Checkout Code - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: submodules: true - - name: Set up a Git safe directory - run: git config --global --add safe.directory ${{ github.workspace }} + - name: Setup QEMU + uses: docker/setup-qemu-action@v3 - - name: Build Binary - ${{ matrix.os }} ${{ matrix.arch }} - if: matrix.arch == 'amd64' - run: | - docker run --rm -t \ - -v ${{ github.workspace }}:${{ github.workspace }} \ - -w ${{ github.workspace }} \ - -e GOOS=${{ matrix.os }} \ - -e GOARCH=${{ matrix.arch }} \ - golang:1.20.14-bookworm sh -c "git config --global --add safe.directory ${{ github.workspace }} && make geth" + - name: Setup Docker Buildx + uses: docker/setup-buildx-action@v3 - - name: Build Binary - ${{ matrix.os }} ${{ matrix.arch }} - if: matrix.arch == 'arm64' - run: | - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - docker run --rm -t \ - -v ${{ github.workspace }}:${{ github.workspace }} \ - -w ${{ github.workspace }} \ - -e GOOS=${{ matrix.os }} \ - -e GOARCH=${{ matrix.arch }} \ - arm64v8/golang:1.20.14-bookworm sh -c "git config --global --add safe.directory ${{ github.workspace }} && make geth" + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Cache Docker Layers + uses: actions/cache@v4 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx + restore-keys: ${{ runner.os }}-buildx- + + - name: Build and Push + uses: docker/bake-action@v4 + env: + REGISTRY: ghcr.io + REPOSITORY: ${{ github.repository }} + GIT_COMMIT: ${{ github.sha }} + GIT_VERSION: ${{ github.ref_name }} + IMAGE_TAGS: ${{ github.ref_name }} + with: + files: docker-bake.hcl + push: true + set: | + *.platform=linux/amd64,linux/arm64 + *.cache-from=type=local,src=/tmp/.buildx-cache + *.cache-to=type=local,dest=/tmp/.buildx-cache,mode=max + binaries.output=type=local,dest=./binaries - name: Check version label - if: matrix.arch == 'amd64' - run: './build/bin/geth version | grep -q "Version: $(echo ${{ github.ref_name }} | cut -c 2-10)"' + run: 'binaries/linux_amd64/geth version | grep -q "Version: $(echo ${{ github.ref_name }} | cut -c 2-10)"' - - name: Compress Binary - run: zip -j geth-${{ github.ref_name }}-${{ matrix.os }}-${{ matrix.arch }}.zip ./build/bin/geth + - name: Compress Binaries + run: | + (cd binaries/linux_amd64 && zip -q - geth) > geth-${{ github.ref_name }}-linux-amd64.zip + (cd binaries/linux_arm64 && zip -q - geth) > geth-${{ github.ref_name }}-linux-arm64.zip - - name: Upload Artifact - uses: actions/upload-artifact@v2 + - name: Upload Artifacts + uses: actions/upload-artifact@v4 with: name: ${{ github.ref_name }} - path: geth-${{ github.ref_name }}-${{ matrix.os }}-${{ matrix.arch }}.zip + path: geth-*.zip release: name: Release needs: build runs-on: ubuntu-latest steps: - - name: Checkout Code - uses: actions/checkout@v2 - - name: Download Artifact - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4 with: name: ${{ github.ref_name }} path: artifacts - - name: Archive genesis.json - run: zip -r genesis.zip genesis - - - name: Create setup.sh - run: | - sed -e 's#__REPOSITORY__#${{ github.repository }}#' .github/setup_template.sh | \ - sed -e 's#__RELEASE__#${{ github.ref_name }}#' > setup.sh - - name: Create sha256sums.txt - run: | - sha256sum genesis.zip > sha256sums.txt - sha256sum setup.sh >> sha256sums.txt - (cd artifacts && sha256sum *) >> sha256sums.txt + run: (cd artifacts && sha256sum *) > sha256sums.txt - name: Create Release - id: create_release - uses: actions/create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + uses: softprops/action-gh-release@v2 with: + token: ${{ secrets.GITHUB_TOKEN }} tag_name: ${{ github.ref_name }} - release_name: Release ${{ github.ref_name }} + name: Release ${{ github.ref_name }} draft: true - - - name: Upload Asset - Linux amd64 - uses: actions/upload-release-asset@v1.0.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: artifacts/geth-${{ github.ref_name }}-linux-amd64.zip - asset_name: geth-${{ github.ref_name }}-linux-amd64.zip - asset_content_type: application/zip - - - name: Upload Asset - Linux arm64 - uses: actions/upload-release-asset@v1.0.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: artifacts/geth-${{ github.ref_name }}-linux-arm64.zip - asset_name: geth-${{ github.ref_name }}-linux-arm64.zip - asset_content_type: application/zip - - - name: Upload Asset - genesis.zip - uses: actions/upload-release-asset@v1.0.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: genesis.zip - asset_name: genesis.zip - asset_content_type: application/zip - - - name: Upload Asset - setup.sh - uses: actions/upload-release-asset@v1.0.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: setup.sh - asset_name: setup.sh - asset_content_type: text/plain - - - name: Upload Asset - sha256sums.txt - uses: actions/upload-release-asset@v1.0.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: sha256sums.txt - asset_name: sha256sums.txt - asset_content_type: text/plain + files: | + artifacts/*.zip + sha256sums.txt diff --git a/Dockerfile b/Dockerfile index ed69a0478..c8bf8998e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,12 @@ +# Build Geth in a stock Go builder container +FROM golang:1.20.14-bookworm as builder + # Support setting various labels on the final image ARG COMMIT="" ARG VERSION="" ARG BUILDNUM="" -# Build Geth in a stock Go builder container -FROM golang:1.21-alpine as builder - -RUN apk add --no-cache gcc musl-dev linux-headers git +RUN apt update && apt install -y git ca-certificates # Get dependencies - will also be cached if we won't change go.mod/go.sum COPY go.mod /go-ethereum/ @@ -16,11 +16,15 @@ RUN cd /go-ethereum && go mod download ADD . /go-ethereum RUN cd /go-ethereum && go run build/ci.go install -static ./cmd/geth -# Pull Geth into a second stage deploy alpine container -FROM alpine:latest +# Binary extraction stage +FROM scratch as binaries +COPY --from=builder /go-ethereum/build/bin/geth /geth -RUN apk add --no-cache ca-certificates -COPY --from=builder /go-ethereum/build/bin/geth /usr/local/bin/ +# Final stage +FROM gcr.io/distroless/base-debian12 +COPY --from=builder /go-ethereum/build/bin/geth /usr/local/bin/geth +COPY --from=builder /etc/ssl /etc/ssl +COPY --from=builder /usr/share/ca-certificates /usr/share/ca-certificates EXPOSE 8545 8546 30303 30303/udp ENTRYPOINT ["geth"] diff --git a/docker-bake.hcl b/docker-bake.hcl new file mode 100644 index 000000000..72e6f2bdf --- /dev/null +++ b/docker-bake.hcl @@ -0,0 +1,54 @@ +variable "REGISTRY" { + default = "localhost" +} + +variable "REPOSITORY" { + default = "oasysgames/oasys-validator" +} + +variable "GIT_COMMIT" { + default = "dev" +} + +// The default version to embed in the built images. +// During CI release builds this is set to <> +variable "GIT_VERSION" { + default = "v0.0.0" +} + +variable "IMAGE_TAGS" { + default = "${GIT_COMMIT}" // split by "," +} + +variable "PLATFORMS" { + // You can override this as "linux/amd64,linux/arm64". + // Only a specify a single platform when `--load` ing into docker. + // Multi-platform is supported when outputting to disk or pushing to a registry. + // Multi-platform builds can be tested locally with: --set="*.output=type=image,push=false" + default = "" +} + +group "default" { + targets = ["geth", "binaries"] +} + +target "geth" { + dockerfile = "Dockerfile" + context = "." + args = { + COMMIT = "${GIT_COMMIT}" + VERSION = "${GIT_VERSION}" + } + platforms = split(",", PLATFORMS) + tags = [for tag in split(",", IMAGE_TAGS) : "${REGISTRY}/${REPOSITORY}:${tag}"] +} + +target "binaries" { + dockerfile = "Dockerfile" + target = "binaries" + context = "." + args = { + VERSION = "${GIT_VERSION}" + } + platforms = split(",", PLATFORMS) +} From ec5550405755166a48244f212a4886932097a57d Mon Sep 17 00:00:00 2001 From: georgefuru <157681680+georgefuru@users.noreply.github.com> Date: Wed, 26 Jun 2024 05:11:10 +0000 Subject: [PATCH 02/29] Fixed README Configuration links. --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e67a04281..4deac1949 100644 --- a/README.md +++ b/README.md @@ -71,9 +71,9 @@ directory. All validator need to process following steps. All full node installation requires **only `1`** in steps. -1. [Run geth client](https://docs.oasys.games/docs/hub-validator/operate-validator/1-2-build-validator-node) -2. [Join PoS system & delegage](https://docs.oasys.games/docs/hub-validator/operate-validator/1-4-join-validator-web) -3. [Run verifier](https://docs.oasys.games/docs/hub-validator/operate-validator/1-5-setup-verifier) +1. [Run geth client](https://docs.oasys.games/docs/hub-validator/operate-validator/build-validator-node) +2. [Join PoS system & delegage](https://docs.oasys.games/docs/hub-validator/operate-validator/join-validator) +3. [Run verifier](https://docs.oasys.games/docs/hub-validator/operate-validator/setup-verifier) ### Programmatically interfacing `geth` nodes From f887414eff0ca8e0f02ebf9620b5709c15c3f850 Mon Sep 17 00:00:00 2001 From: georgefuru <157681680+georgefuru@users.noreply.github.com> Date: Mon, 1 Jul 2024 02:44:23 +0000 Subject: [PATCH 03/29] Fixed README Docs links. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4deac1949..33a91ea42 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Automated builds are available for stable releases and the unstable master branc archives are published at https://github.com/oasysgames/oasys-validator/releases. ## Running `geth` on Oasys -Read following manual on [**Oasys docs**](https://docs.oasys.games/docs/hub-validator/operate-validator/1-2-build-validator-node). +Read following manual on [**Oasys docs**](https://docs.oasys.games/docs/hub-validator/operate-validator/build-validator-node). ### Hardware Requirements From 8abc816c39dbb052873a83cc3d07544e561f8192 Mon Sep 17 00:00:00 2001 From: tak Date: Mon, 8 Jul 2024 21:47:55 +0900 Subject: [PATCH 04/29] reschedule mainnet hardfork 1 week after --- params/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/params/config.go b/params/config.go index 23c5cbee8..d785af2a0 100644 --- a/params/config.go +++ b/params/config.go @@ -228,7 +228,7 @@ var ( MuirGlacierBlock: big.NewInt(0), BerlinBlock: big.NewInt(0), LondonBlock: big.NewInt(0), - ShanghaiTime: newUint64(1721305800), // Thu Jul 18 2024 21:30:00 GMT+0900 + ShanghaiTime: newUint64(1721910600), // Thu Jul 25 2024 21:30:00 GMT+0900 Oasys: &OasysConfig{ Period: 15, From 65d66f32962bf4d1362999602439024b5ac7ed0c Mon Sep 17 00:00:00 2001 From: tak Date: Tue, 9 Jul 2024 12:38:07 +0900 Subject: [PATCH 05/29] increment verseion to v1.4.1 (#58) --- params/version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/params/version.go b/params/version.go index 4907e0683..07ea25bcb 100644 --- a/params/version.go +++ b/params/version.go @@ -23,7 +23,7 @@ import ( const ( VersionMajor = 1 // Major version component of the current release VersionMinor = 4 // Minor version component of the current release - VersionPatch = 0 // Patch version component of the current release + VersionPatch = 1 // Patch version component of the current release VersionMeta = "" // Version metadata to append to the version string ) From a0bac4c293658aeffab632215fb50b12a986fade Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Tue, 9 Jul 2024 18:57:21 +0900 Subject: [PATCH 06/29] Fix release asset files --- .github/workflows/release.yml | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index cf57181da..7723857b7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -60,11 +60,22 @@ jobs: (cd binaries/linux_amd64 && zip -q - geth) > geth-${{ github.ref_name }}-linux-amd64.zip (cd binaries/linux_arm64 && zip -q - geth) > geth-${{ github.ref_name }}-linux-arm64.zip + - name: Create genesis.zip + run: zip -r genesis.zip genesis + + - name: Create setup.sh + run: | + sed -e 's#__REPOSITORY__#${{ github.repository }}#' .github/setup_template.sh | \ + sed -e 's#__RELEASE__#${{ github.ref_name }}#' > setup.sh + - name: Upload Artifacts uses: actions/upload-artifact@v4 with: name: ${{ github.ref_name }} - path: geth-*.zip + path: | + geth-*.zip + genesis.zip + setup.sh release: name: Release @@ -88,5 +99,5 @@ jobs: name: Release ${{ github.ref_name }} draft: true files: | - artifacts/*.zip + artifacts/* sha256sums.txt From 3aacdca37359633a02fe8e542f84fb1c0abe191f Mon Sep 17 00:00:00 2001 From: Oksana <107276324+Ocheretovich@users.noreply.github.com> Date: Sun, 28 Jul 2024 15:02:33 +0300 Subject: [PATCH 07/29] Update 2021-08-22-split-postmortem.md (#60) Update 2021-08-22-split-postmortem --- docs/postmortems/2021-08-22-split-postmortem.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/postmortems/2021-08-22-split-postmortem.md b/docs/postmortems/2021-08-22-split-postmortem.md index 962aa51f6..7aba117e4 100644 --- a/docs/postmortems/2021-08-22-split-postmortem.md +++ b/docs/postmortems/2021-08-22-split-postmortem.md @@ -62,7 +62,7 @@ Since we had merged the removal of `ETH65`, if the entire network were to upgrad - Announce an upcoming security release on Tuesday (August 24th), via Twitter and official channels, plus reach out to downstream projects. - Temporarily revert the `ETH65`-removal. -- Place the fix into the PR optimizing the jumpdest analysis [233381](https://github.com/ethereum/go-ethereum/pull/23381). +- Place the fix into the PR optimizing the jumpdest analysis [23381](https://github.com/ethereum/go-ethereum/pull/23381). - After 4-8 weeks, release details about the vulnerability. From b2bbee526e6aebc07aaa2c6d3141db3bc588efc1 Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Sun, 11 Aug 2024 17:42:06 +0900 Subject: [PATCH 08/29] Deleted onchain Environment contract call --- .dockerignore | 1 + consensus/oasys/contract.go | 101 +---------- consensus/oasys/contract_test.go | 78 -------- consensus/oasys/environment_value.go | 176 ++++++++++++++++++ consensus/oasys/environment_value_test.go | 207 ++++++++++++++++++++++ consensus/oasys/oasys.go | 84 ++------- consensus/oasys/scheduler.go | 6 +- consensus/oasys/scheduler_test.go | 12 +- consensus/oasys/snapshot.go | 41 ++--- params/config.go | 11 ++ 10 files changed, 439 insertions(+), 278 deletions(-) create mode 100644 consensus/oasys/environment_value.go create mode 100644 consensus/oasys/environment_value_test.go diff --git a/.dockerignore b/.dockerignore index 0c013d18b..2f6b90499 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,3 +3,4 @@ build/_workspace build/_bin tests/testdata +tmp/ diff --git a/consensus/oasys/contract.go b/consensus/oasys/contract.go index ae5c790cb..39a37f92e 100644 --- a/consensus/oasys/contract.go +++ b/consensus/oasys/contract.go @@ -150,54 +150,6 @@ func (c chainContext) GetHeader(hash common.Hash, number uint64) *types.Header { return c.Chain.GetHeader(hash, number) } -// environmentValue -type environmentValue struct { - // Block and epoch to which this setting applies - StartBlock *big.Int - StartEpoch *big.Int - // Block generation interval(by seconds) - BlockPeriod *big.Int - // Number of blocks in epoch - EpochPeriod *big.Int - // Annual rate of staking reward - RewardRate *big.Int - // Validator commission rate - CommissionRate *big.Int - // Amount of tokens required to become a validator - ValidatorThreshold *big.Int - // Number of not sealed to jailing the validator - JailThreshold *big.Int - // Number of epochs to jailing the validator - JailPeriod *big.Int -} - -func (p *environmentValue) IsEpoch(number uint64) bool { - return (number-p.StartBlock.Uint64())%p.EpochPeriod.Uint64() == 0 -} - -func (p *environmentValue) Epoch(number uint64) uint64 { - return p.StartEpoch.Uint64() + (number-p.StartBlock.Uint64())/p.EpochPeriod.Uint64() -} - -func (p *environmentValue) GetFirstBlock(number uint64) uint64 { - elapsedEpoch := p.Epoch(number) - p.StartEpoch.Uint64() - return p.StartBlock.Uint64() + elapsedEpoch*p.EpochPeriod.Uint64() -} - -func (p *environmentValue) Copy() *environmentValue { - return &environmentValue{ - StartBlock: new(big.Int).Set(p.StartBlock), - StartEpoch: new(big.Int).Set(p.StartEpoch), - BlockPeriod: new(big.Int).Set(p.BlockPeriod), - EpochPeriod: new(big.Int).Set(p.EpochPeriod), - RewardRate: new(big.Int).Set(p.RewardRate), - CommissionRate: new(big.Int).Set(p.CommissionRate), - ValidatorThreshold: new(big.Int).Set(p.ValidatorThreshold), - JailThreshold: new(big.Int).Set(p.JailThreshold), - JailPeriod: new(big.Int).Set(p.JailPeriod), - } -} - // nextValidators type nextValidators struct { Owners []common.Address @@ -228,20 +180,6 @@ func (p *nextValidators) Exists(validator common.Address) bool { return false } -func getInitialEnvironment(config *params.OasysConfig) *environmentValue { - return &environmentValue{ - StartBlock: common.Big0, - StartEpoch: common.Big1, - BlockPeriod: big.NewInt(int64(config.Period)), - EpochPeriod: big.NewInt(int64(config.Epoch)), - RewardRate: big.NewInt(10), - CommissionRate: big.NewInt(10), - ValidatorThreshold: new(big.Int).Mul(big.NewInt(params.Ether), big.NewInt(10_000_000)), - JailThreshold: big.NewInt(500), - JailPeriod: big.NewInt(2), - } -} - // callmsg type callmsg struct { ethereum.CallMsg @@ -303,7 +241,8 @@ func (c *Oasys) initializeSystemContracts( if !environment.verifyCode(state) { return errors.New("invalid contract code: Environment") } - data, err := environment.abi.Pack("initialize", getInitialEnvironment(c.config)) + initialEnv, _ := getEnvironmentValue(c.chainConfig, 0) + data, err := environment.abi.Pack("initialize", initialEnv) if err != nil { return err } @@ -610,42 +549,6 @@ func getRewards(ethAPI blockchainAPI, hash common.Hash) (*big.Int, error) { return result, nil } -// Call the `Environment.nextValue` method. -func getNextEnvironmentValue(ethAPI blockchainAPI, hash common.Hash) (*environmentValue, error) { - method := "nextValue" - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - data, err := environment.abi.Pack(method) - if err != nil { - return nil, err - } - - hexData := (hexutil.Bytes)(data) - blockNrOrHash := rpc.BlockNumberOrHashWithHash(hash, false) - rbytes, err := ethAPI.Call( - ctx, - ethapi.TransactionArgs{ - To: &environment.address, - Data: &hexData, - }, - &blockNrOrHash, - nil, - nil, - ) - if err != nil { - return nil, err - } - - var recv struct{ Result environmentValue } - if err := environment.abi.UnpackIntoInterface(&recv, method, rbytes); err != nil { - return nil, err - } - - return &recv.Result, nil -} - func (c *Oasys) applyTransaction( msg callmsg, state *state.StateDB, diff --git a/consensus/oasys/contract_test.go b/consensus/oasys/contract_test.go index cb4a36375..7da9419ed 100644 --- a/consensus/oasys/contract_test.go +++ b/consensus/oasys/contract_test.go @@ -317,84 +317,6 @@ func TestGetRewards(t *testing.T) { } } -func TestGetNextEnvironmentValue(t *testing.T) { - want := &environmentValue{ - StartBlock: common.Big0, - StartEpoch: common.Big1, - BlockPeriod: big.NewInt(3), - EpochPeriod: big.NewInt(20), - RewardRate: big.NewInt(10), - CommissionRate: big.NewInt(15), - ValidatorThreshold: new(big.Int).Mul(big.NewInt(params.Ether), big.NewInt(10_000_000)), - JailThreshold: big.NewInt(500), - JailPeriod: big.NewInt(2), - } - - uint256Ty, _ := abi.NewType("uint256", "", nil) - arguments := abi.Arguments{ - {Type: uint256Ty}, - {Type: uint256Ty}, - {Type: uint256Ty}, - {Type: uint256Ty}, - {Type: uint256Ty}, - {Type: uint256Ty}, - {Type: uint256Ty}, - {Type: uint256Ty}, - {Type: uint256Ty}, - } - - rbyte, _ := arguments.Pack( - want.StartBlock, - want.StartEpoch, - want.BlockPeriod, - want.EpochPeriod, - want.RewardRate, - want.CommissionRate, - want.ValidatorThreshold, - want.JailThreshold, - want.JailPeriod, - ) - - ethapi := &testBlockchainAPI{rbytes: map[common.Address][][]byte{environment.address: {rbyte}}} - got, _ := getNextEnvironmentValue(ethapi, common.Hash{}) - - if got.StartBlock.Cmp(want.StartBlock) != 0 { - t.Errorf("StartBlock, got %v, want: %v", got.StartBlock, want.StartBlock) - } - - if got.StartEpoch.Cmp(want.StartEpoch) != 0 { - t.Errorf("StartEpoch, got %v, want: %v", got.StartEpoch, want.StartEpoch) - } - - if got.BlockPeriod.Cmp(want.BlockPeriod) != 0 { - t.Errorf("BlockPeriod, got %v, want: %v", got.BlockPeriod, want.BlockPeriod) - } - - if got.EpochPeriod.Cmp(want.EpochPeriod) != 0 { - t.Errorf("EpochPeriod, got %v, want: %v", got.EpochPeriod, want.EpochPeriod) - } - - if got.RewardRate.Cmp(want.RewardRate) != 0 { - t.Errorf("RewardRate, got %v, want: %v", got.RewardRate, want.RewardRate) - } - - if got.CommissionRate.Cmp(want.CommissionRate) != 0 { - t.Errorf("CommissionRate, got %v, want: %v", got.CommissionRate, want.CommissionRate) - } - - if got.ValidatorThreshold.Cmp(want.ValidatorThreshold) != 0 { - t.Errorf("ValidatorThreshold, got %v, want: %v", got.ValidatorThreshold, want.ValidatorThreshold) - } - - if got.JailThreshold.Cmp(want.JailThreshold) != 0 { - t.Errorf("JailThreshold, got %v, want: %v", got.JailThreshold, want.JailThreshold) - } - - if got.JailPeriod.Cmp(want.JailPeriod) != 0 { - t.Errorf("JailPeriod, got %v, want: %v", got.JailPeriod, want.JailPeriod) - } -} - var _ blockchainAPI = (*testBlockchainAPI)(nil) type testBlockchainAPI struct { diff --git a/consensus/oasys/environment_value.go b/consensus/oasys/environment_value.go new file mode 100644 index 000000000..9b1558a4f --- /dev/null +++ b/consensus/oasys/environment_value.go @@ -0,0 +1,176 @@ +package oasys + +import ( + "math/big" + "sync" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/params" +) + +// environmentValue is a representation of `Environment.EnvironmentValue`. +// https://github.com/oasysgames/oasys-genesis-contract/blob/3b87148/contracts/IEnvironment.sol#L13-L31 +type environmentValue struct { + // Block and epoch to which this setting applies + StartBlock *big.Int + StartEpoch *big.Int + // Block generation interval(by seconds) + BlockPeriod *big.Int + // Number of blocks in epoch + EpochPeriod *big.Int + // Annual rate of staking reward + RewardRate *big.Int + // Validator commission rate + CommissionRate *big.Int + // Amount of tokens required to become a validator + ValidatorThreshold *big.Int + // Number of not sealed to jailing the validator + JailThreshold *big.Int + // Number of epochs to jailing the validator + JailPeriod *big.Int +} + +// Safely copy all values and return a new pointer. +func (p *environmentValue) Copy() *environmentValue { + return &environmentValue{ + StartBlock: new(big.Int).Set(p.StartBlock), + StartEpoch: new(big.Int).Set(p.StartEpoch), + BlockPeriod: new(big.Int).Set(p.BlockPeriod), + EpochPeriod: new(big.Int).Set(p.EpochPeriod), + RewardRate: new(big.Int).Set(p.RewardRate), + CommissionRate: new(big.Int).Set(p.CommissionRate), + ValidatorThreshold: new(big.Int).Set(p.ValidatorThreshold), + JailThreshold: new(big.Int).Set(p.JailThreshold), + JailPeriod: new(big.Int).Set(p.JailPeriod), + } +} + +// Check if all values are equal to `other`. +func (p *environmentValue) Equals(other *environmentValue) bool { + comps := []int{ + p.StartBlock.Cmp(other.StartBlock), + p.StartEpoch.Cmp(other.StartEpoch), + p.BlockPeriod.Cmp(other.BlockPeriod), + p.EpochPeriod.Cmp(other.EpochPeriod), + p.RewardRate.Cmp(other.RewardRate), + p.CommissionRate.Cmp(other.CommissionRate), + p.ValidatorThreshold.Cmp(other.ValidatorThreshold), + p.JailThreshold.Cmp(other.JailThreshold), + p.JailPeriod.Cmp(other.JailPeriod), + } + for _, c := range comps { + if c != 0 { + return false + } + } + return true +} + +// Calculate epoch number from the given block number. +func (p *environmentValue) Epoch(number uint64) uint64 { + return p.StartEpoch.Uint64() + (number-p.StartBlock.Uint64())/p.EpochPeriod.Uint64() +} + +// Calculate the block number where the next environment should start based on this environment. +func (p *environmentValue) NewValueStartBlock(newValue *environmentValue) uint64 { + return p.StartBlock.Uint64() + + (newValue.StartEpoch.Uint64()-p.StartEpoch.Uint64())*p.EpochPeriod.Uint64() +} + +// Returns whether this environment can be applied to the given block number. +func (p *environmentValue) Started(number uint64) bool { + return number >= p.StartBlock.Uint64() +} + +// Determine if the given block number is the start block of the corresponding epoch. +func (p *environmentValue) IsEpochStartBlock(number uint64) bool { + return (number-p.StartBlock.Uint64())%p.EpochPeriod.Uint64() == 0 +} + +// Calculate the start block number of the corresponding epoch from the given block number. +func (p *environmentValue) EpochStartBlock(number uint64) uint64 { + elapsedEpoch := p.Epoch(number) - p.StartEpoch.Uint64() + return p.StartBlock.Uint64() + elapsedEpoch*p.EpochPeriod.Uint64() +} + +// Determine if the given block number is suitable for deploying a new environment. +func (p *environmentValue) ShouldUpdate(newValue *environmentValue, number uint64) bool { + if p.Epoch(number)-1 != newValue.StartEpoch.Uint64() { + // past or future epoch + return false + } + // check if it is in the middle of the epoch + return (number - p.EpochStartBlock(number)) == p.EpochPeriod.Uint64()/2 +} + +// Returns the environment value to be used under the given block +// and the environment value that is pending application next. +// The value returned by `next` is the environment value that should be deployed +// via the `Environment.updateValue(...)` contract method. It is not the environment +// value that should be applied in the next block or epoch. +var getEnvironmentValue = func() func(cfg *params.ChainConfig, number uint64) (curr, next *environmentValue) { + updates := []func(cfg *params.ChainConfig, env *environmentValue){ + // Genesis + func(cfg *params.ChainConfig, env *environmentValue) { + env.StartBlock = common.Big0 + env.StartEpoch = common.Big1 + env.BlockPeriod = big.NewInt(int64(cfg.Oasys.Period)) + env.EpochPeriod = big.NewInt(int64(cfg.Oasys.Epoch)) + env.RewardRate = big.NewInt(10) + env.CommissionRate = big.NewInt(10) + env.ValidatorThreshold = new(big.Int).Mul(big.NewInt(params.Ether), big.NewInt(10_000_000)) + env.JailThreshold = big.NewInt(500) + env.JailPeriod = big.NewInt(2) + }, + + // Sep 2024 + func(cfg *params.ChainConfig, env *environmentValue) { + env.StartEpoch = cfg.OasysShortenedBlockTimeStartEpoch() + + if cfg.ChainID.Cmp(params.OasysMainnetChainConfig.ChainID) == 0 || + cfg.ChainID.Cmp(params.OasysTestnetChainConfig.ChainID) == 0 { + env.BlockPeriod = big.NewInt(6) + env.EpochPeriod = big.NewInt(14400) + } + }, + } + + var ( + mu sync.Mutex + cache []*environmentValue + ) + return func(cfg *params.ChainConfig, number uint64) (curr *environmentValue, next *environmentValue) { + mu.Lock() + defer mu.Unlock() + + if len(cache) > 0 { + curr = cache[0] + } else { + curr = &environmentValue{} + cache = append(cache, curr) + updates[0](cfg, curr) + } + + for i, update := range updates[1:] { + if len(cache) > i+1 { + next = cache[i+1] + } else { + next = curr.Copy() + cache = append(cache, next) + + update(cfg, next) + next.StartBlock = new(big.Int).SetUint64(curr.NewValueStartBlock(next)) + } + + if !next.Started(number) { + break + } + curr = next + } + + if next == nil { + next = curr.Copy() + } + return curr, next + } +}() diff --git a/consensus/oasys/environment_value_test.go b/consensus/oasys/environment_value_test.go new file mode 100644 index 000000000..90aad4612 --- /dev/null +++ b/consensus/oasys/environment_value_test.go @@ -0,0 +1,207 @@ +package oasys + +import ( + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/params" +) + +func TestEnvironmentValue(t *testing.T) { + env := &environmentValue{ + StartBlock: common.Big0, + StartEpoch: common.Big1, + BlockPeriod: big.NewInt(15), + EpochPeriod: big.NewInt(5760), + RewardRate: big.NewInt(10), + CommissionRate: big.NewInt(10), + ValidatorThreshold: new(big.Int).Mul(big.NewInt(params.Ether), big.NewInt(10_000_000)), + JailThreshold: big.NewInt(500), + JailPeriod: big.NewInt(2), + } + + newVal := env.Copy() + newVal.StartEpoch = big.NewInt(3) + newVal.StartBlock = new(big.Int).SetUint64(env.NewValueStartBlock(newVal)) + + if env.Equals(env) != true { + t.Error("Equals(): should be true") + } + if env.Equals(newVal) != false { + t.Error("Equals(): should be false") + } + + // epoch 1 + for i, number := range []uint64{0, 1, 2, 5757, 5758, 5759} { + if got := env.Epoch(number); got != 1 { + t.Errorf("Epoch(%d): want=1 got=%d", number, got) + } + if got := env.NewValueStartBlock(newVal); got != 11520 { + t.Errorf("NewValueStartBlock(%d): want=11520 got=%d", number, got) + } + if got := env.Started(number); !got { + t.Errorf("Started(%d): should be true", number) + } + if got := env.IsEpochStartBlock(number); (i == 0 && !got) || (i != 0 && got) { + t.Errorf("IsEpochStartBlock(%d): should be %v", number, !got) + } + if got := env.EpochStartBlock(number); got != 0 { + t.Errorf("EpochStartBlock(%d): want=0 got=%d", number, got) + } + if got := env.ShouldUpdate(newVal, number); got { + t.Errorf("ShouldUpdate(newVal, %d): should be false", number) + } + + if got := newVal.Started(number); got { + t.Errorf("Started(%d): should be false", number) + } + } + // epoch 2 + for i, number := range []uint64{5760, 5761, 5762, 11517, 11518, 11519} { + if got := env.Epoch(number); got != 2 { + t.Errorf("Epoch(%d): want=2 got=%d", number, got) + } + if got := env.NewValueStartBlock(newVal); got != 11520 { + t.Errorf("NewValueStartBlock(%d): want=11520 got=%d", number, got) + } + if got := env.Started(number); !got { + t.Errorf("Started(%d): should be true", number) + } + if got := env.IsEpochStartBlock(number); (i == 0 && !got) || (i != 0 && got) { + t.Errorf("IsEpochStartBlock(%d): should be %v", number, !got) + } + if got := env.EpochStartBlock(number); got != 5760 { + t.Errorf("EpochStartBlock(%d): want=5760 got=%d", number, got) + } + if got := env.ShouldUpdate(newVal, number); (number == 8640 && !got) || (number != 8640 && got) { + t.Errorf("ShouldUpdate(newVal, %d): should be false", number) + } + + if got := newVal.Started(number); got { + t.Errorf("Started(%d): should be false", number) + } + } + // epoch 3 + for i, number := range []uint64{11520, 11521, 11522, 17277, 17278, 17279} { + if got := env.Epoch(number); got != 3 { + t.Errorf("Epoch(%d): want=3 got=%d", number, got) + } + if got := env.NewValueStartBlock(newVal); got != 11520 { + t.Errorf("NewValueStartBlock(%d): want=11520 got=%d", number, got) + } + if got := env.Started(number); !got { + t.Errorf("Started(%d): should be true", number) + } + if got := env.IsEpochStartBlock(number); (i == 0 && !got) || (i != 0 && got) { + t.Errorf("IsEpochStartBlock(%d): should be %v", number, !got) + } + if got := env.EpochStartBlock(number); got != 11520 { + t.Errorf("EpochStartBlock(%d): want=11520 got=%d", number, got) + } + if got := env.ShouldUpdate(newVal, number); got { + t.Errorf("ShouldUpdate(newVal, %d): should be false", number) + } + + if got := newVal.Epoch(number); got != 3 { + t.Errorf("Epoch(%d): want=3 got=%d", number, got) + } + if got := newVal.Started(number); !got { + t.Errorf("Started(%d): should be true", number) + } + if got := newVal.IsEpochStartBlock(number); (i == 0 && !got) || (i != 0 && got) { + t.Errorf("IsEpochStartBlock(%d): should be %v", number, !got) + } + if got := newVal.EpochStartBlock(number); got != 11520 { + t.Errorf("EpochStartBlock(%d): want=11520 got=%d", number, got) + } + } +} + +func TestGetEnvironmentValue(t *testing.T) { + compare := func(number uint64, got, want *environmentValue) { + if got.StartBlock.Cmp(want.StartBlock) != 0 { + t.Errorf("StartBlock: number=%d want=%d got=%d", + number, want.StartBlock, got.StartBlock) + } + if got.StartEpoch.Cmp(want.StartEpoch) != 0 { + t.Errorf("StartEpoch: number=%d want=%d got=%d", + number, want.StartEpoch, got.StartEpoch) + } + if got.BlockPeriod.Cmp(want.BlockPeriod) != 0 { + t.Errorf("BlockPeriod: number=%d want=%d got=%d", + number, want.BlockPeriod, got.BlockPeriod) + } + if got.EpochPeriod.Cmp(want.EpochPeriod) != 0 { + t.Errorf("EpochPeriod: number=%d want=%d got=%d", + number, want.EpochPeriod, got.EpochPeriod) + } + if got.RewardRate.Cmp(want.RewardRate) != 0 { + t.Errorf("RewardRate: number=%d want=%d got=%d", + number, want.RewardRate, got.RewardRate) + } + if got.CommissionRate.Cmp(want.CommissionRate) != 0 { + t.Errorf("CommissionRate: number=%d want=%d got=%d", + number, want.CommissionRate, got.CommissionRate) + } + if got.ValidatorThreshold.Cmp(want.ValidatorThreshold) != 0 { + t.Errorf("ValidatorThreshold: number=%d want=%d got=%d", + number, want.ValidatorThreshold, got.ValidatorThreshold) + } + if got.JailThreshold.Cmp(want.JailThreshold) != 0 { + t.Errorf("JailThreshold: number=%d want=%d got=%d", + number, want.JailThreshold, got.JailThreshold) + } + if got.JailPeriod.Cmp(want.JailPeriod) != 0 { + t.Errorf("JailPeriod: number=%d want=%d got=%d", + number, want.JailPeriod, got.JailPeriod) + } + } + + want0 := &environmentValue{ + StartBlock: common.Big0, + StartEpoch: common.Big1, + BlockPeriod: big.NewInt(15), + EpochPeriod: big.NewInt(5760), + RewardRate: big.NewInt(10), + CommissionRate: big.NewInt(10), + ValidatorThreshold: new(big.Int).Mul(big.NewInt(params.Ether), big.NewInt(10_000_000)), + JailThreshold: big.NewInt(500), + JailPeriod: big.NewInt(2), + } + want1 := &environmentValue{ + StartBlock: big.NewInt(5748480), + StartEpoch: big.NewInt(999), + BlockPeriod: big.NewInt(6), + EpochPeriod: big.NewInt(14400), + RewardRate: big.NewInt(10), + CommissionRate: big.NewInt(10), + ValidatorThreshold: new(big.Int).Mul(big.NewInt(params.Ether), big.NewInt(10_000_000)), + JailThreshold: big.NewInt(500), + JailPeriod: big.NewInt(2), + } + + cases := []struct { + numbers []uint64 + wantCurr, wantNext *environmentValue + }{ + // epoch 1 + {[]uint64{0, 1, 5758, 5759}, want0, want1}, + // epoch 2 + {[]uint64{5760, 5761, 11518, 11519}, want0, want1}, + // epoch 998 + {[]uint64{5742720, 5742721, 5748478, 5748479}, want0, want1}, + // epoch 999 + {[]uint64{5748480, 5748481, 5754238, 5754239}, want1, want1}, + // epoch 1000 + {[]uint64{5754240, 5754241, 5759998, 5759999}, want1, want1}, + } + + for _, c := range cases { + for _, number := range c.numbers { + gotCurr, gotNext := getEnvironmentValue(params.OasysMainnetChainConfig, number) + compare(number, gotCurr, c.wantCurr) + compare(number, gotNext, c.wantNext) + } + } +} diff --git a/consensus/oasys/oasys.go b/consensus/oasys/oasys.go index f23aea697..4c9ca316d 100644 --- a/consensus/oasys/oasys.go +++ b/consensus/oasys/oasys.go @@ -262,9 +262,9 @@ func (c *Oasys) verifyHeader(chain consensus.ChainHeaderReader, header *types.He // - StartEpoch ->> 1 // - BlockPeriod ->> 15 // - EpochPeriod ->> 5760 - env := getInitialEnvironment(c.config) + env, _ := getEnvironmentValue(c.chainConfig, number) validatorBytes := len(header.Extra) - extraVanity - extraSeal - if env.IsEpoch(number) { + if env.IsEpochStartBlock(number) { if err := c.verifyExtraHeaderLengthInEpoch(header.Number, validatorBytes); err != nil { return err } @@ -334,7 +334,7 @@ func (c *Oasys) verifyCascadingFields(chain consensus.ChainHeaderReader, header validators []common.Address stakes []*big.Int ) - if number > 0 && env.IsEpoch(number) { + if number > 0 && env.IsEpochStartBlock(number) { // TODO: Extract the validators from header extra data // Now the keccak256 hash of the validators is stored in the extra data. // To avoid ethapi call, we need to store each validator's address and stake amount. @@ -418,7 +418,7 @@ func (c *Oasys) snapshot(chain consensus.ChainHeaderReader, number uint64, hash return nil, err } - snap = newSnapshot(c.chainConfig, c.signatures, c.ethAPI, number, hash, validators, getInitialEnvironment(c.config)) + snap = newSnapshot(c.chainConfig, c.signatures, c.ethAPI, number, hash, validators) if err := snap.store(c.db); err != nil { return nil, err } @@ -521,10 +521,7 @@ func (c *Oasys) Prepare(chain consensus.ChainHeaderReader, header *types.Header) // Mix digest is reserved for now, set to empty header.MixDigest = common.Hash{} - env, err := c.environment(chain, header, nil) - if err != nil { - return err - } + env, _ := getEnvironmentValue(c.chainConfig, number) // Ensure the extra data has all its components if len(header.Extra) < extraVanity { @@ -536,7 +533,7 @@ func (c *Oasys) Prepare(chain consensus.ChainHeaderReader, header *types.Header) validators []common.Address stakes []*big.Int ) - if number > 0 && env.IsEpoch(number) { + if number > 0 && env.IsEpochStartBlock(number) { result, err := getNextValidators(c.chainConfig, c.ethAPI, header.ParentHash, env.Epoch(number), number) if err != nil { log.Error("Failed to get validators", "in", "Prepare", "hash", header.ParentHash, "number", number, "err", err) @@ -600,16 +597,13 @@ func (c *Oasys) Finalize(chain consensus.ChainHeaderReader, header *types.Header } } - env, err := c.environment(chain, header, nil) - if err != nil { - return err - } + env, _ := getEnvironmentValue(c.chainConfig, number) var ( validators []common.Address stakes []*big.Int ) - if env.IsEpoch(number) { + if env.IsEpochStartBlock(number) { result, err := getNextValidators(c.chainConfig, c.ethAPI, header.ParentHash, env.Epoch(number), number) if err != nil { log.Error("Failed to get validators", "in", "Finalize", "hash", header.ParentHash, "number", number, "err", err) @@ -634,7 +628,7 @@ func (c *Oasys) Finalize(chain consensus.ChainHeaderReader, header *types.Header return err } - if env.IsEpoch(number) { + if env.IsEpochStartBlock(number) { // If the block is a epoch block, verify the validator list or hash actual := header.Extra[extraVanity : len(header.Extra)-extraSeal] if err := c.verifyExtraHeaderValueInEpoch(header.Number, actual, validators); err != nil { @@ -691,16 +685,13 @@ func (c *Oasys) FinalizeAndAssemble(chain consensus.ChainHeaderReader, header *t } } - env, err := c.environment(chain, header, nil) - if err != nil { - return nil, nil, err - } + env, _ := getEnvironmentValue(c.chainConfig, number) var ( validators []common.Address stakes []*big.Int ) - if env.IsEpoch(number) { + if env.IsEpochStartBlock(number) { result, err := getNextValidators(c.chainConfig, c.ethAPI, header.ParentHash, env.Epoch(number), number) if err != nil { log.Error("Failed to get validators", "in", "FinalizeAndAssemble", "hash", header.ParentHash, "number", number, "err", err) @@ -772,14 +763,11 @@ func (c *Oasys) Seal(chain consensus.ChainHeaderReader, block *types.Block, resu validator, signFn := c.signer, c.signFn c.lock.RUnlock() - env, err := c.environment(chain, header, nil) - if err != nil { - return err - } + env, _ := getEnvironmentValue(c.chainConfig, number) // Bail out if we're unauthorized to sign a block var exists bool - if number > 0 && env.IsEpoch(number) { + if number > 0 && env.IsEpochStartBlock(number) { result, err := getNextValidators(c.chainConfig, c.ethAPI, header.ParentHash, env.Epoch(number), number) if err != nil { log.Error("Failed to get validators", "in", "Seal", "hash", header.ParentHash, "number", number, "err", err) @@ -829,17 +817,13 @@ func (c *Oasys) Seal(chain consensus.ChainHeaderReader, block *types.Block, resu // that a new block should have: func (c *Oasys) CalcDifficulty(chain consensus.ChainHeaderReader, time uint64, parent *types.Header) *big.Int { number := parent.Number.Uint64() - - env, err := c.environment(chain, parent, nil) - if err != nil { - return nil - } + env, _ := getEnvironmentValue(c.chainConfig, number) var ( validators []common.Address stakes []*big.Int ) - if env.IsEpoch(number) { + if env.IsEpochStartBlock(number) { result, err := getNextValidators(c.chainConfig, c.ethAPI, parent.Hash(), env.Epoch(number), number) if err != nil { log.Error("Failed to get validators", "in", "Seal", "hash", parent.Hash(), "number", number, "err", err) @@ -990,7 +974,7 @@ func encodeSigHeader(w io.Writer, header *types.Header) { } func (c *Oasys) addBalanceToStakeManager(state *state.StateDB, hash common.Hash, number uint64, env *environmentValue) error { - if !env.IsEpoch(number) || env.Epoch(number) < 3 || env.Epoch(number) > 60 { + if !env.IsEpochStartBlock(number) || env.Epoch(number) < 3 || env.Epoch(number) > 60 { return nil } @@ -1012,40 +996,6 @@ func (c *Oasys) addBalanceToStakeManager(state *state.StateDB, hash common.Hash, return nil } -func (c *Oasys) environment(chain consensus.ChainHeaderReader, header *types.Header, parents []*types.Header) (*environmentValue, error) { - number := header.Number.Uint64() - if number < c.config.Epoch { - return getInitialEnvironment(c.config), nil - } - - snap, err := c.snapshot(chain, number-1, header.ParentHash, parents) - if err != nil { - return nil, err - } - - var env *environmentValue - if number%snap.Environment.EpochPeriod.Uint64() == 0 { - if env, err = getNextEnvironmentValue(c.ethAPI, header.ParentHash); err != nil { - log.Error("Failed to get environment value", "in", "environment", "hash", header.ParentHash, "number", number, "err", err) - return nil, err - } - } else { - env = snap.Environment - } - - if env.BlockPeriod.Cmp(common.Big0) == 0 { - return nil, errors.New("invalid block period") - } - if env.EpochPeriod.Cmp(common.Big0) == 0 { - return nil, errors.New("invalid epoch period") - } - if env.ValidatorThreshold.Cmp(common.Big0) == 0 { - return nil, errors.New("invalid validator threshold") - } - - return env, nil -} - func (c *Oasys) scheduler(chain consensus.ChainHeaderReader, header *types.Header, env *environmentValue, validators []common.Address, stakes []*big.Int) (*scheduler, error) { number := header.Number.Uint64() @@ -1068,7 +1018,7 @@ func (c *Oasys) scheduler(chain consensus.ChainHeaderReader, header *types.Heade return cache.(*scheduler), nil } - created := newScheduler(env, env.GetFirstBlock(number), + created := newScheduler(env, env.EpochStartBlock(number), newWeightedChooser(validators, stakes, seedHash.Big().Int64())) schedulerCache.Add(seedHash, created) return created, nil diff --git a/consensus/oasys/scheduler.go b/consensus/oasys/scheduler.go index 830a5550b..795472fe4 100644 --- a/consensus/oasys/scheduler.go +++ b/consensus/oasys/scheduler.go @@ -93,7 +93,7 @@ func (s *scheduler) schedules() []*common.Address { } func (s *scheduler) expect(number uint64) *common.Address { - return s.schedules()[number-s.env.GetFirstBlock(number)] + return s.schedules()[number-s.env.EpochStartBlock(number)] } func (s *scheduler) difficulty(number uint64, validator common.Address, ext bool) *big.Int { @@ -133,7 +133,7 @@ func (s *scheduler) turn(number uint64, validator common.Address) (uint64, error s.turns.Add(number, turns) } - for bpos := number - s.env.GetFirstBlock(number); ; bpos++ { + for bpos := number - s.env.EpochStartBlock(number); ; bpos++ { if turn, ok := turns[s.ptrmap[validator]]; ok { return turn, nil } @@ -266,7 +266,7 @@ func getPrevEpochLastBlockHash( ) (common.Hash, error) { var ( number = header.Number.Uint64() - epochStart = env.GetFirstBlock(number) + epochStart = env.EpochStartBlock(number) parent = header.ParentHash ) for ; number > epochStart; number-- { diff --git a/consensus/oasys/scheduler_test.go b/consensus/oasys/scheduler_test.go index a1e540623..10c5c357f 100644 --- a/consensus/oasys/scheduler_test.go +++ b/consensus/oasys/scheduler_test.go @@ -125,8 +125,8 @@ func TestBackOffTimes(t *testing.T) { } for _, s := range wantSchedules { - chooser := newWeightedChooser(validators, stakes, int64(env.GetFirstBlock(s.block))) - scheduler := newScheduler(env, env.GetFirstBlock(s.block), chooser) + chooser := newWeightedChooser(validators, stakes, int64(env.EpochStartBlock(s.block))) + scheduler := newScheduler(env, env.EpochStartBlock(s.block), chooser) for i, validator := range validators { want := uint64(s.turns[i]) if want > 0 { @@ -149,8 +149,8 @@ func TestExpect(t *testing.T) { } for _, s := range wantSchedules { - chooser := newWeightedChooser(validators, stakes, int64(env.GetFirstBlock(s.block))) - scheduler := newScheduler(env, env.GetFirstBlock(s.block), chooser) + chooser := newWeightedChooser(validators, stakes, int64(env.EpochStartBlock(s.block))) + scheduler := newScheduler(env, env.EpochStartBlock(s.block), chooser) var want common.Address for i, validator := range validators { @@ -175,8 +175,8 @@ func TestDifficulty(t *testing.T) { } for _, s := range wantSchedules { - chooser := newWeightedChooser(validators, stakes, int64(env.GetFirstBlock(s.block))) - scheduler := newScheduler(env, env.GetFirstBlock(s.block), chooser) + chooser := newWeightedChooser(validators, stakes, int64(env.EpochStartBlock(s.block))) + scheduler := newScheduler(env, env.EpochStartBlock(s.block), chooser) for i, validator := range validators { want1 := diffNoTurn.Uint64() diff --git a/consensus/oasys/snapshot.go b/consensus/oasys/snapshot.go index 4ec7cb116..3144b9016 100644 --- a/consensus/oasys/snapshot.go +++ b/consensus/oasys/snapshot.go @@ -26,8 +26,6 @@ type Snapshot struct { Number uint64 `json:"number"` // Block number where the snapshot was created Hash common.Hash `json:"hash"` // Block hash where the snapshot was created Validators map[common.Address]*big.Int `json:"validators"` // Set of authorized validators and stakes at this moment - - Environment *environmentValue `json:"environment"` } // validatorsAscending implements the sort interface to allow sorting a list of addresses @@ -41,15 +39,14 @@ func (s validatorsAscending) Swap(i, j int) { s[i], s[j] = s[j], s[i] } // method does not initialize the set of recent validators, so only ever use if for // the genesis block. func newSnapshot(config *params.ChainConfig, sigcache *lru.ARCCache, ethAPI *ethapi.BlockChainAPI, - number uint64, hash common.Hash, validators []common.Address, environment *environmentValue) *Snapshot { + number uint64, hash common.Hash, validators []common.Address) *Snapshot { snap := &Snapshot{ - config: config, - sigcache: sigcache, - ethAPI: ethAPI, - Number: number, - Hash: hash, - Validators: make(map[common.Address]*big.Int), - Environment: environment.Copy(), + config: config, + sigcache: sigcache, + ethAPI: ethAPI, + Number: number, + Hash: hash, + Validators: make(map[common.Address]*big.Int), } for _, address := range validators { snap.Validators[address] = new(big.Int).Set(common.Big0) @@ -87,13 +84,12 @@ func (s *Snapshot) store(db ethdb.Database) error { // copy creates a deep copy of the snapshot, though not the individual votes. func (s *Snapshot) copy() *Snapshot { cpy := &Snapshot{ - config: s.config, - sigcache: s.sigcache, - ethAPI: s.ethAPI, - Number: s.Number, - Hash: s.Hash, - Validators: make(map[common.Address]*big.Int), - Environment: s.Environment.Copy(), + config: s.config, + sigcache: s.sigcache, + ethAPI: s.ethAPI, + Number: s.Number, + Hash: s.Hash, + Validators: make(map[common.Address]*big.Int), } for address, stake := range s.Validators { cpy.Validators[address] = new(big.Int).Set(stake) @@ -122,6 +118,7 @@ func (s *Snapshot) apply(headers []*types.Header, chain consensus.ChainHeaderRea for _, header := range headers { number := header.Number.Uint64() + env, _ := getEnvironmentValue(s.config, number) validator, err := ecrecover(header, s.sigcache) if err != nil { @@ -129,19 +126,13 @@ func (s *Snapshot) apply(headers []*types.Header, chain consensus.ChainHeaderRea } var exists bool - if number > 0 && number%snap.Environment.EpochPeriod.Uint64() == 0 { - nextValidator, err := getNextValidators(s.config, s.ethAPI, header.ParentHash, snap.Environment.Epoch(number), number) + if number > 0 && env.IsEpochStartBlock(number) { + nextValidator, err := getNextValidators(s.config, s.ethAPI, header.ParentHash, env.Epoch(number), number) if err != nil { log.Error("Failed to get validators", "in", "Snapshot.apply", "hash", header.ParentHash, "number", number, "err", err) return nil, err } - nextEnv, err := getNextEnvironmentValue(s.ethAPI, header.ParentHash) - if err != nil { - log.Error("Failed to get environment value", "in", "Snapshot.apply", "hash", header.ParentHash, "number", number, "err", err) - return nil, err - } - snap.Environment = nextEnv.Copy() snap.Validators = map[common.Address]*big.Int{} for i, address := range nextValidator.Operators { snap.Validators[address] = nextValidator.Stakes[i] diff --git a/params/config.go b/params/config.go index d785af2a0..ebe07f860 100644 --- a/params/config.go +++ b/params/config.go @@ -599,6 +599,17 @@ func (c *ChainConfig) IsForkedOasysExtendDifficulty(num *big.Int) bool { return isBlockForked(c.OasysExtendDifficultyBlock(), num) } +// OasysShortenedBlockTimeBlock returns the hard fork of Oasys. +func (c *ChainConfig) OasysShortenedBlockTimeStartEpoch() *big.Int { + if c.ChainID.Cmp(OasysMainnetChainConfig.ChainID) == 0 { + return big.NewInt(999) // TODO + } + if c.ChainID.Cmp(OasysTestnetChainConfig.ChainID) == 0 { + return big.NewInt(999) // TODO + } + return big.NewInt(5) +} + // IsTerminalPoWBlock returns whether the given block is the last block of PoW stage. func (c *ChainConfig) IsTerminalPoWBlock(parentTotalDiff *big.Int, totalDiff *big.Int) bool { if c.TerminalTotalDifficulty == nil { From 22ebc9767c3e3f4062d2e880986f7de65bd8ee60 Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Wed, 14 Aug 2024 14:36:22 +0900 Subject: [PATCH 09/29] Add update environment value --- consensus/oasys/contract.go | 20 ++ consensus/oasys/contract_test.go | 235 +++++++++++++++++++--- consensus/oasys/environment_value.go | 20 +- consensus/oasys/environment_value_test.go | 6 + consensus/oasys/oasys.go | 24 ++- params/config.go | 2 +- 6 files changed, 262 insertions(+), 45 deletions(-) diff --git a/consensus/oasys/contract.go b/consensus/oasys/contract.go index 39a37f92e..a952cb489 100644 --- a/consensus/oasys/contract.go +++ b/consensus/oasys/contract.go @@ -269,6 +269,26 @@ func (c *Oasys) initializeSystemContracts( return nil } +// Transact the `Environment.updateValue` method. +func (c *Oasys) updateEnvironmentValue( + newValue *environmentValue, + state *state.StateDB, + header *types.Header, + cx core.ChainContext, + txs *[]*types.Transaction, + receipts *[]*types.Receipt, + systemTxs *[]*types.Transaction, + usedGas *uint64, + mining bool, +) error { + data, err := environment.abi.Pack("updateValue", newValue) + if err != nil { + return err + } + msg := getMessage(header.Coinbase, environment.address, data, common.Big0) + return c.applyTransaction(msg, state, header, cx, txs, receipts, systemTxs, usedGas, mining) +} + // Transact the `StakeManager.slash` method. func (c *Oasys) slash( validator common.Address, diff --git a/consensus/oasys/contract_test.go b/consensus/oasys/contract_test.go index 7da9419ed..e6de46e9f 100644 --- a/consensus/oasys/contract_test.go +++ b/consensus/oasys/contract_test.go @@ -63,11 +63,48 @@ func TestInitializeSystemContracts(t *testing.T) { t.Error("Block.GasUsed is zero") } - environmentInitialized := env.statedb.GetState(_environmentAddress, common.HexToHash("0x00")) - stakeManagerInitialized := env.statedb.GetState(_stakeManagerAddress, common.HexToHash("0x00")) - if environmentInitialized.Big().Uint64() != 1 { - t.Errorf("Environment.initialize not called") + envInitialized := env.statedb.GetState(_environmentAddress, common.HexToHash("0x00")).Big().Uint64() + envStartBlock := env.statedb.GetState(_environmentAddress, common.HexToHash("0x02")).Big().Uint64() + envStartEpoch := env.statedb.GetState(_environmentAddress, common.HexToHash("0x03")).Big().Uint64() + envBlockPeriod := env.statedb.GetState(_environmentAddress, common.HexToHash("0x04")).Big().Uint64() + envEpochPeriod := env.statedb.GetState(_environmentAddress, common.HexToHash("0x05")).Big().Uint64() + envRewardRate := env.statedb.GetState(_environmentAddress, common.HexToHash("0x06")).Big().Uint64() + envCommissionRate := env.statedb.GetState(_environmentAddress, common.HexToHash("0x07")).Big().Uint64() + envValidatorThreshold := env.statedb.GetState(_environmentAddress, common.HexToHash("0x08")) + envJailThreshold := env.statedb.GetState(_environmentAddress, common.HexToHash("0x09")).Big().Uint64() + envJailPeriod := env.statedb.GetState(_environmentAddress, common.HexToHash("0x0a")).Big().Uint64() + if envInitialized != 1 { + t.Errorf("Environment.initialize: want=1 got=%d", envInitialized) + } + if envStartBlock != 0 { + t.Errorf("Environment.startBlock: want=0 got=%d", envStartBlock) + } + if envStartEpoch != 1 { + t.Errorf("Environment.startEpoch: want=1 got=%d", envStartEpoch) + } + if envBlockPeriod != 15 { + t.Errorf("Environment.blockPeriod: want=15 got=%d", envBlockPeriod) + } + if envEpochPeriod != 5760 { + t.Errorf("Environment.epochPeriod: want=5760 got=%d", envEpochPeriod) + } + if envRewardRate != 10 { + t.Errorf("Environment.rewardRate: want=10 got=%d", envRewardRate) } + if envCommissionRate != 10 { + t.Errorf("Environment.commissionRate: want=10 got=%d", envCommissionRate) + } + if new(big.Int).Div(envValidatorThreshold.Big(), big.NewInt(params.Ether)).Uint64() != 10000000 { + t.Errorf("Environment.validatorThreshold: want=10000000000000000000000000 got=%d", envValidatorThreshold) + } + if envJailThreshold != 500 { + t.Errorf("Environment.jailThreshold: want=500 got=%d", envJailThreshold) + } + if envJailPeriod != 2 { + t.Errorf("Environment.jailPeriod: want=2 got=%d", envJailPeriod) + } + + stakeManagerInitialized := env.statedb.GetState(_stakeManagerAddress, common.HexToHash("0x00")) if stakeManagerInitialized.Big().Uint64() != 1 { t.Errorf("StakeManager.initialize not called") } @@ -94,6 +131,113 @@ func TestInitializeSystemContracts(t *testing.T) { } } +func TestUpdateEnvironmentValue(t *testing.T) { + wallets, accounts, err := makeWallets(1) + if err != nil { + t.Fatalf("failed to create test wallets: %v", err) + } + + env, err := makeEnv(*wallets[0], *accounts[0]) + if err != nil { + t.Fatalf("failed to create test env: %v", err) + } + + header := &types.Header{ + Number: big.NewInt(50), + Coinbase: accounts[0].Address, + Difficulty: diffInTurn, + } + cx := env.chain + txs := make([]*types.Transaction, 0) + receipts := make([]*types.Receipt, 0) + systemTxs := make([]*types.Transaction, 0) + usedGas := uint64(0) + mining := true + + err = env.engine.updateEnvironmentValue(&environmentValue{ + StartBlock: big.NewInt(10), + StartEpoch: big.NewInt(11), + BlockPeriod: big.NewInt(12), + EpochPeriod: big.NewInt(13), + RewardRate: big.NewInt(14), + CommissionRate: big.NewInt(15), + ValidatorThreshold: big.NewInt(16), + JailThreshold: big.NewInt(17), + JailPeriod: big.NewInt(18), + }, env.statedb, header, cx, &txs, &receipts, &systemTxs, &usedGas, mining) + + if err != nil { + t.Fatalf("failed to call updateValue method: %v", err) + } + if len(receipts) != 1 { + t.Errorf("len(receipts), got %v, want 1", len(receipts)) + } + if usedGas == 0 { + t.Error("Block.GasUsed is zero") + } + + envUpdated := env.statedb.GetState(_environmentAddress, common.HexToHash("0x01")).Big().Uint64() + envStartBlock := env.statedb.GetState(_environmentAddress, common.HexToHash("0x02")).Big().Uint64() + envStartEpoch := env.statedb.GetState(_environmentAddress, common.HexToHash("0x03")).Big().Uint64() + envBlockPeriod := env.statedb.GetState(_environmentAddress, common.HexToHash("0x04")).Big().Uint64() + envEpochPeriod := env.statedb.GetState(_environmentAddress, common.HexToHash("0x05")).Big().Uint64() + envRewardRate := env.statedb.GetState(_environmentAddress, common.HexToHash("0x06")).Big().Uint64() + envCommissionRate := env.statedb.GetState(_environmentAddress, common.HexToHash("0x07")).Big().Uint64() + envValidatorThreshold := env.statedb.GetState(_environmentAddress, common.HexToHash("0x08")).Big().Uint64() + envJailThreshold := env.statedb.GetState(_environmentAddress, common.HexToHash("0x09")).Big().Uint64() + envJailPeriod := env.statedb.GetState(_environmentAddress, common.HexToHash("0x0a")).Big().Uint64() + if envUpdated != 1 { + t.Errorf("Environment.updated: want=1 got=%d", envUpdated) + } + if envStartBlock != 10 { + t.Errorf("Environment.startBlock: want=1 got=%d", envStartBlock) + } + if envStartEpoch != 11 { + t.Errorf("Environment.startEpoch: want=2 got=%d", envStartEpoch) + } + if envBlockPeriod != 12 { + t.Errorf("Environment.blockPeriod: want=3 got=%d", envBlockPeriod) + } + if envEpochPeriod != 13 { + t.Errorf("Environment.epochPeriod: want=4 got=%d", envEpochPeriod) + } + if envRewardRate != 14 { + t.Errorf("Environment.rewardRate: want=5 got=%d", envRewardRate) + } + if envCommissionRate != 15 { + t.Errorf("Environment.commissionRate: want=6 got=%d", envCommissionRate) + } + if envValidatorThreshold != 16 { + t.Errorf("Environment.validatorThreshold: want=7 got=%d", envValidatorThreshold) + } + if envJailThreshold != 17 { + t.Errorf("Environment.jailThreshold: want=8 got=%d", envJailThreshold) + } + if envJailPeriod != 18 { + t.Errorf("Environment.jailPeriod: want=9 got=%d", envJailPeriod) + } + + receipt := receipts[0] + if receipt.TxHash == (common.Hash{0x00}) { + t.Error("receipt.TxHash is empty") + } + if receipt.GasUsed == 0 { + t.Error("receipt.GasUsed is zero") + } + if len(receipt.Logs) != 1 { + t.Errorf("len(receipt.Logs), got %v, want 1", len(receipt.Logs)) + } + if receipt.Bloom == (types.Bloom{}) { + t.Error("receipt.Bloom is empty") + } + if receipt.BlockNumber.Uint64() != 50 { + t.Errorf("receipt.BlockNumber, got %v, want 50", receipt.BlockNumber) + } + if env.statedb.GetNonce(env.engine.signer) != 1 { + t.Errorf("account nonce value, got %v, want 1", env.statedb.GetNonce(env.engine.signer)) + } +} + func TestSlash(t *testing.T) { wallets, accounts, err := makeWallets(1) if err != nil { @@ -142,9 +286,6 @@ func TestSlash(t *testing.T) { if receipt.GasUsed == 0 { t.Error("receipt.GasUsed is zero") } - if len(receipt.Logs) != 1 { - t.Errorf("len(receipt.Logs), got %v, want 1", len(receipt.Logs)) - } if receipt.Bloom == (types.Bloom{}) { t.Error("receipt.Bloom is empty") } @@ -378,7 +519,7 @@ func makeEnv(wallet accounts.Wallet, account accounts.Account) (*testEnv, error) var ( db = rawdb.NewMemoryDatabase() chainConfig = ¶ms.ChainConfig{ - ChainID: big.NewInt(12345), + ChainID: big.NewInt(248), HomesteadBlock: common.Big0, EIP150Block: common.Big0, EIP155Block: common.Big0, @@ -391,8 +532,8 @@ func makeEnv(wallet accounts.Wallet, account accounts.Account) (*testEnv, error) BerlinBlock: common.Big0, LondonBlock: common.Big0, Oasys: ¶ms.OasysConfig{ - Period: 0, - Epoch: 100, + Period: 15, + Epoch: 5760, }, } genspec = &core.Genesis{ @@ -408,29 +549,63 @@ func makeEnv(wallet accounts.Wallet, account accounts.Account) (*testEnv, error) pragma solidity ^0.8.2; contract Environment { - struct EnvironmentValue { - uint256 startBlock; - uint256 startEpoch; - uint256 blockPeriod; - uint256 epochPeriod; - uint256 rewardRate; + struct EnvironmentValue { + uint256 startBlock; + uint256 startEpoch; + uint256 blockPeriod; + uint256 epochPeriod; + uint256 rewardRate; uint256 commissionRate; - uint256 validatorThreshold; - uint256 jailThreshold; - uint256 jailPeriod; - } - - event Initialized(); - - address public initialized; - - function initialize(Environment.EnvironmentValue memory initialValue) external { - initialized = address(1); - emit Initialized(); - } + uint256 validatorThreshold; + uint256 jailThreshold; + uint256 jailPeriod; + } + + event Initialized(); + event Updated(); + + address public initialized; + address public updated; + address public startBlock; + address public startEpoch; + address public blockPeriod; + address public epochPeriod; + address public rewardRate; + address public commissionRate; + address public validatorThreshold; + address public jailThreshold; + address public jailPeriod; + + function initialize(EnvironmentValue memory initialValue) external { + initialized = address(1); + _set(initialValue); + emit Initialized(); + } + + function updateValue(EnvironmentValue memory newValue) external { + updated = address(1); + _set(newValue); + emit Updated(); + } + + function _set(EnvironmentValue memory val) internal { + startBlock = _conv(val.startBlock); + startEpoch = _conv(val.startEpoch); + blockPeriod = _conv(val.blockPeriod); + epochPeriod = _conv(val.epochPeriod); + rewardRate = _conv(val.rewardRate); + commissionRate = _conv(val.commissionRate); + validatorThreshold = _conv(val.validatorThreshold); + jailThreshold = _conv(val.jailThreshold); + jailPeriod = _conv(val.jailPeriod); + } + + function _conv(uint256 val) internal pure returns (address) { + return address(uint160(val)); + } } */ - Code: common.FromHex("0x608060405234801561001057600080fd5b50600436106100365760003560e01c806308a543561461003b578063158ef93e14610050575b600080fd5b61004e6100493660046100f4565b61007f565b005b600054610063906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b600080546001600160a01b03191660011781556040517f5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c89190a150565b604051610120810167ffffffffffffffff811182821017156100ee57634e487b7160e01b600052604160045260246000fd5b60405290565b6000610120828403121561010757600080fd5b61010f6100bc565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c082015260e083013560e0820152610100808401358183015250809150509291505056fea264697066735822122041f32989a5b45778808b251b74c621d5d19de8c37be0b731a89cb63b775dd07b64736f6c634300080c0033"), + Code: common.FromHex("0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c80637b0a47ee1161008c578063af0dfd3e11610066578063af0dfd3e1461019d578063b5b7a184146101b0578063bd4eff19146101c3578063de833b50146101d657600080fd5b80637b0a47ee146101645780637b2aab0314610177578063a2c8b1771461018a57600080fd5b806308a54356146100d4578063158ef93e146100e957806348cd4cb1146101185780634fd101d71461012b5780635ea1d6f81461013e578063660f5c1714610151575b600080fd5b6100e76100e2366004610372565b6101e9565b005b6000546100fc906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6002546100fc906001600160a01b031681565b6008546100fc906001600160a01b031681565b6007546100fc906001600160a01b031681565b600a546100fc906001600160a01b031681565b6006546100fc906001600160a01b031681565b6001546100fc906001600160a01b031681565b6003546100fc906001600160a01b031681565b6004546100fc906001600160a01b031681565b6005546100fc906001600160a01b031681565b6100e76101d1366004610372565b610231565b6009546100fc906001600160a01b031681565b600080546001600160a01b031916600117905561020581610278565b6040517f5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c890600090a150565b600180546001600160a01b0319168117905561024c81610278565b6040517ff2e795d4a33ae9a0d3282888375b8ae781ea4de1cbf101ac96150aa95ccff0b490600090a150565b8051600280546001600160a01b03199081166001600160a01b0393841617909155602083015160038054831691841691909117905560408301516004805483169184169190911790556060830151600580548316918416919091179055608083015160068054831691841691909117905560a083015160078054831691841691909117905560c083015160088054831691841691909117905560e083015160098054831691841691909117905561010090920151600a80549093169116179055565b604051610120810167ffffffffffffffff8111828210171561036c57634e487b7160e01b600052604160045260246000fd5b60405290565b6000610120828403121561038557600080fd5b61038d61033a565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c082015260e083013560e0820152610100808401358183015250809150509291505056fea2646970667358221220b3a402d60729e72e8f9f0637840b4c292983cb008e033e7489e294fa7d9ab98b64736f6c634300080c0033"), Balance: common.Big0, }, _stakeManagerAddress: { diff --git a/consensus/oasys/environment_value.go b/consensus/oasys/environment_value.go index 9b1558a4f..4f2a9dbf0 100644 --- a/consensus/oasys/environment_value.go +++ b/consensus/oasys/environment_value.go @@ -95,19 +95,22 @@ func (p *environmentValue) EpochStartBlock(number uint64) uint64 { // Determine if the given block number is suitable for deploying a new environment. func (p *environmentValue) ShouldUpdate(newValue *environmentValue, number uint64) bool { - if p.Epoch(number)-1 != newValue.StartEpoch.Uint64() { - // past or future epoch - return false + if p.Equals(newValue) { + return false // skip if same value } - // check if it is in the middle of the epoch + if p.Epoch(number)+1 != newValue.StartEpoch.Uint64() { + return false // skip if not the previous epoch + } + // check if it is in the middle of the previous epoch return (number - p.EpochStartBlock(number)) == p.EpochPeriod.Uint64()/2 } // Returns the environment value to be used under the given block // and the environment value that is pending application next. -// The value returned by `next` is the environment value that should be deployed -// via the `Environment.updateValue(...)` contract method. It is not the environment -// value that should be applied in the next block or epoch. +// Must not process consensus using the value of `next`. The value +// returned by `next` is the new value that should be updated with +// the `Environment.updateValue(...)` contract method +// if `curr.ShouldUpdate(next, number)` returns true. var getEnvironmentValue = func() func(cfg *params.ChainConfig, number uint64) (curr, next *environmentValue) { updates := []func(cfg *params.ChainConfig, env *environmentValue){ // Genesis @@ -168,9 +171,6 @@ var getEnvironmentValue = func() func(cfg *params.ChainConfig, number uint64) (c curr = next } - if next == nil { - next = curr.Copy() - } return curr, next } }() diff --git a/consensus/oasys/environment_value_test.go b/consensus/oasys/environment_value_test.go index 90aad4612..f4cb4db68 100644 --- a/consensus/oasys/environment_value_test.go +++ b/consensus/oasys/environment_value_test.go @@ -52,6 +52,9 @@ func TestEnvironmentValue(t *testing.T) { if got := env.ShouldUpdate(newVal, number); got { t.Errorf("ShouldUpdate(newVal, %d): should be false", number) } + if got := env.ShouldUpdate(env, number); got { + t.Errorf("ShouldUpdate(newVal, %d): should be false", number) + } if got := newVal.Started(number); got { t.Errorf("Started(%d): should be false", number) @@ -77,6 +80,9 @@ func TestEnvironmentValue(t *testing.T) { if got := env.ShouldUpdate(newVal, number); (number == 8640 && !got) || (number != 8640 && got) { t.Errorf("ShouldUpdate(newVal, %d): should be false", number) } + if got := env.ShouldUpdate(env, number); got { + t.Errorf("ShouldUpdate(newVal, %d): should be false", number) + } if got := newVal.Started(number); got { t.Errorf("Started(%d): should be false", number) diff --git a/consensus/oasys/oasys.go b/consensus/oasys/oasys.go index 4c9ca316d..0ba946656 100644 --- a/consensus/oasys/oasys.go +++ b/consensus/oasys/oasys.go @@ -587,6 +587,7 @@ func (c *Oasys) Finalize(chain consensus.ChainHeaderReader, header *types.Header hash := header.Hash() number := header.Number.Uint64() + env, nextEnv := getEnvironmentValue(c.chainConfig, number) cx := chainContext{Chain: chain, oasys: c} if number == 1 { @@ -595,9 +596,16 @@ func (c *Oasys) Finalize(chain consensus.ChainHeaderReader, header *types.Header log.Error("Failed to initialize system contracts", "in", "Finalize", "hash", hash, "number", number, "err", err) return err } + log.Info("Initialized system contracts", "in", "Finalize", "hash", hash, "number", number) + } + if nextEnv != nil && env.ShouldUpdate(nextEnv, number) { + err := c.updateEnvironmentValue(nextEnv, state, header, cx, txs, receipts, systemTxs, usedGas, false) + if err != nil { + log.Error("Failed to update environment value", "in", "Finalize", "hash", hash, "number", number, "err", err) + return err + } + log.Info("Updated environment value", "in", "Finalize", "hash", hash, "number", number) } - - env, _ := getEnvironmentValue(c.chainConfig, number) var ( validators []common.Address @@ -675,6 +683,7 @@ func (c *Oasys) FinalizeAndAssemble(chain consensus.ChainHeaderReader, header *t hash := header.Hash() number := header.Number.Uint64() + env, nextEnv := getEnvironmentValue(c.chainConfig, number) cx := chainContext{Chain: chain, oasys: c} if number == 1 { @@ -683,9 +692,16 @@ func (c *Oasys) FinalizeAndAssemble(chain consensus.ChainHeaderReader, header *t log.Error("Failed to initialize system contracts", "in", "FinalizeAndAssemble", "hash", hash, "err", err) return nil, nil, err } + log.Info("Initialized system contracts", "in", "FinalizeAndAssemble", "hash", hash, "number", number) + } + if nextEnv != nil && env.ShouldUpdate(nextEnv, number) { + err := c.updateEnvironmentValue(nextEnv, state, header, cx, &txs, &receipts, nil, &header.GasUsed, true) + if err != nil { + log.Error("Failed to update environment value", "in", "FinalizeAndAssemble", "hash", hash, "err", err) + return nil, nil, err + } + log.Info("Updated environment value", "in", "FinalizeAndAssemble", "hash", hash, "number", number) } - - env, _ := getEnvironmentValue(c.chainConfig, number) var ( validators []common.Address diff --git a/params/config.go b/params/config.go index ebe07f860..24e09b523 100644 --- a/params/config.go +++ b/params/config.go @@ -607,7 +607,7 @@ func (c *ChainConfig) OasysShortenedBlockTimeStartEpoch() *big.Int { if c.ChainID.Cmp(OasysTestnetChainConfig.ChainID) == 0 { return big.NewInt(999) // TODO } - return big.NewInt(5) + return big.NewInt(10) } // IsTerminalPoWBlock returns whether the given block is the last block of PoW stage. From dbb0d772a4cc7b8c1ae1eb6d814409faa4a89ddb Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Wed, 14 Aug 2024 15:09:51 +0900 Subject: [PATCH 10/29] Update Environment and StakeManager contract --- contracts/oasys/contracts.go | 4 ++++ contracts/oasys/deployments.go | 16 ++++++++++++++++ contracts/oasys/oasys_test.go | 14 ++++++++++++++ params/version.go | 2 +- 4 files changed, 35 insertions(+), 1 deletion(-) diff --git a/contracts/oasys/contracts.go b/contracts/oasys/contracts.go index 435b9908b..5b15cfd4f 100644 --- a/contracts/oasys/contracts.go +++ b/contracts/oasys/contracts.go @@ -2,6 +2,10 @@ package oasys var ( // Genesis + environment = &contract{ + name: "Environment", + address: "0x0000000000000000000000000000000000001000", + } stakeManager = &contract{ name: "StakeManager", address: "0x0000000000000000000000000000000000001001", diff --git a/contracts/oasys/deployments.go b/contracts/oasys/deployments.go index 0388a42b6..f80f50a86 100644 --- a/contracts/oasys/deployments.go +++ b/contracts/oasys/deployments.go @@ -796,6 +796,19 @@ var ( }, } + deployments11 = []*deployment{ + { + // commit: https://github.com/ironbeer/oasys-genesis-contract/blob/667bec346eb31b476e0757bdfbbc0caf7564e6fa/contracts/Environment.sol + contract: environment, + code: mustDecodeCode(`0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063900cf0cf11610071578063900cf0cf146101b9578063b4c2f727146101cf578063bd4eff19146101e2578063ccfb9935146101f5578063d4a53686146101fd578063fcbb371b1461020557600080fd5b806308a54356146100ae578063158ef93e146100c35780633fa4f245146100e55780634ba7ed391461015a5780635e383d2114610162575b600080fd5b6100c16100bc366004610f1c565b610218565b005b6000546100d09060ff1681565b60405190151581526020015b60405180910390f35b6100ed61027e565b6040516100dc9190600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525092915050565b6100d06102f6565b610175610170366004610f97565b610327565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e0830152610100820152610120016100dc565b6101c1610385565b6040519081526020016100dc565b6101c16101dd366004610f97565b61039c565b6100c16101f0366004610f1c565b6103bd565b6100ed61047e565b6100d0610563565b6100ed610213366004610f97565b61058e565b33411461023857604051631cf4735960e01b815260040160405180910390fd5b60005460ff161561025b5760405162dc149f60e41b815260040160405180910390fd5b6000805460ff191660019081178255908252602082015261027b8161060c565b50565b610286610e98565b61028e6108f3565b604080516101208101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152600890910154610100820152919050565b6000806103016108f3565b60038101548154919250906103169043610fc6565b6103209190610ff3565b1592915050565b6002818154811061033757600080fd5b90600052602060002090600902016000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080154905089565b60006103976103926108f3565b610925565b905090565b600181815481106103ac57600080fd5b600091825260209091200154905081565b3341146103dd57604051631cf4735960e01b815260040160405180910390fd5b6103e5610563565b1561040357604051631e59ccd960e01b815260040160405180910390fd5b61040b610385565b81602001511161042e57604051630eae4c9760e01b815260040160405180910390fd5b6000610438610959565b905061044681439054111590565b1561045c576104558183610997565b8252610471565b61046e826104686109cf565b90610997565b82525b61047a8261060c565b5050565b610486610e98565b60006104906108f3565b9050600061049c610959565b90506000826003015483600101546104b385610925565b6104bd9190610fc6565b6104c8906001611007565b6104d2919061101f565b83546104de9190611007565b90506104ec82829054111590565b6104f657826104f8565b815b604080516101208101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152600890910154610100820152949350505050565b60008061056e6108f3565b60038101548154919250906105839043610fc6565b610316906001611007565b610596610e98565b6105a36001600284610a22565b604080516101208101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260089091015461010082015292915050565b61061581610b09565b60f8461480610625575061249c46145b156106335761063381610d69565b60015480158061067b575061067b43600261064f600185610fc6565b8154811061065f5761065f61103e565b906000526020600020906009020161099090919063ffffffff16565b1561083857506020810180516001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6019190915560028054918201815560005282517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace60099092029182015590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf82015560408201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad082015560608201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad182015560808201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad282015560a08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad382015560c08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad482015560e08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad5820155610100909101517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad690910155565b602082015160016108498184610fc6565b815481106108595761085961103e565b600091825260209091200155816002610873600184610fc6565b815481106108835761088361103e565b9060005260206000209060090201600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007015561010082015181600801559050505050565b6000806108fe610959565b905061090c81439054111590565b61091d576109186109cf565b61091f565b805b91505090565b600381015481546000919061093a9043610fc6565b6109449190611054565b82600101546109539190611007565b92915050565b600280546000919061096d90600190610fc6565b8154811061097d5761097d61103e565b9060005260206000209060090201905090565b9054111590565b60008260030154836001015483602001516109b29190610fc6565b6109bc919061101f565b83546109c89190611007565b9392505050565b6002546000906001811415610a065760026000815481106109f2576109f261103e565b906000526020600020906009020191505090565b6002610a128183610fc6565b815481106109f2576109f261103e565b82546000908285610a34600184610fc6565b81548110610a4457610a4461103e565b906000526020600020015411610a865783610a60600183610fc6565b81548110610a7057610a7061103e565b90600052602060002090600902019150506109c8565b600181118015610abc57508285610a9e600284610fc6565b81548110610aae57610aae61103e565b906000526020600020015411155b15610acd5783610a60600283610fc6565b6000610adc8685600085610de5565b9050848181548110610af057610af061103e565b9060005260206000209060090201925050509392505050565b600181604001511015610b645760405163a1b63ceb60e01b815260206004820152601960248201527f626c6f636b506572696f6420697320746f6f20736d616c6c2e0000000000000060448201526064015b60405180910390fd5b600381606001511015610bba5760405163a1b63ceb60e01b815260206004820152601960248201527f65706f6368506572696f6420697320746f6f20736d616c6c2e000000000000006044820152606401610b5b565b606481608001511115610c105760405163a1b63ceb60e01b815260206004820152601860248201527f7265776172645261746520697320746f6f206c617267652e00000000000000006044820152606401610b5b565b60648160a001511115610c665760405163a1b63ceb60e01b815260206004820152601c60248201527f636f6d6d697373696f6e5261746520697320746f6f206c617267652e000000006044820152606401610b5b565b60018160c001511015610cbc5760405163a1b63ceb60e01b815260206004820181905260248201527f76616c696461746f725468726573686f6c6420697320746f6f20736d616c6c2e6044820152606401610b5b565b60018160e001511015610d125760405163a1b63ceb60e01b815260206004820152601b60248201527f6a61696c5468726573686f6c6420697320746f6f20736d616c6c2e00000000006044820152606401610b5b565b6001816101000151101561027b5760405163a1b63ceb60e01b815260206004820152601860248201527f6a61696c506572696f6420697320746f6f20736d616c6c2e00000000000000006044820152606401610b5b565b80606001518160400151610d7d919061101f565b620151801461027b5760405163a1b63ceb60e01b815260206004820152602d60248201527f626c6f636b506572696f642a65706f6368506572696f64206973206e6f74206560448201526c38bab0b6103a379018b230bc9760991b6064820152608401610b5b565b600081831415610e0157610dfa600183610fc6565b9050610e90565b60006002610e0f8486611007565b610e199190611054565b905084868281548110610e2e57610e2e61103e565b90600052602060002001541115610e5357610e4b86868684610de5565b915050610e90565b84868281548110610e6657610e6661103e565b90600052602060002001541015610e8d57610e4b8686610e87846001611007565b86610de5565b90505b949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051610120810167ffffffffffffffff81118282101715610f1657634e487b7160e01b600052604160045260246000fd5b60405290565b60006101208284031215610f2f57600080fd5b610f37610ee4565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c082015260e083013560e08201526101008084013581830152508091505092915050565b600060208284031215610fa957600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b600082821015610fd857610fd8610fb0565b500390565b634e487b7160e01b600052601260045260246000fd5b60008261100257611002610fdd565b500690565b6000821982111561101a5761101a610fb0565b500190565b600081600019048311821515161561103957611039610fb0565b500290565b634e487b7160e01b600052603260045260246000fd5b60008261106357611063610fdd565b50049056fea26469706673582212206834d6e08c8e80df2e5bdd4c11d189f13debbbfe7cde54e68ba1eb50091a589a64736f6c634300080c0033`), + }, + { + // commit: https://github.com/ironbeer/oasys-genesis-contract/blob/667bec346eb31b476e0757bdfbbc0caf7564e6fa/contracts/StakeManager.sol + contract: stakeManager, + code: mustDecodeCode(`0x6080604052600436106102675760003560e01c806374e2b63c11610144578063cf5c13db116100b6578063e1aca3411161007a578063e1aca34114610850578063f3621e4314610870578063f65a5ed214610890578063f8d6b1ab146108b0578063fa52c7d8146108d0578063ff3d3f601461093f57600080fd5b8063cf5c13db1461074e578063d0051adf1461076e578063d1f18ee11461079f578063dbd61d87146107f7578063df93c8421461081757600080fd5b80639168ae72116101085780639168ae72146106785780639c508219146106ae578063a6a41f44146106ce578063ac7475ed146106ee578063ad71bd361461070e578063cbc0fac61461072e57600080fd5b806374e2b63c146105c75780637b520aa8146105ec5780637befa74f1461062257806388325234146106355780639043150b1461067057600080fd5b80632ee462b3116101dd578063485cc955116101a1578063485cc955146104e65780635c4fc4c5146105065780635d94ccf6146105365780635efc766e146105565780636b2b336914610576578063724319911461059657600080fd5b80632ee462b31461043757806333f32d7814610457578063428e85621461047757806345367f231461049757806346dfce7b146104b757600080fd5b8063195afea11161022f578063195afea11461032b5780631c1b4f3a1461034b5780632168e8b41461036b57806322226367146103995780632b42ed8c146103ce5780632b47da52146103ff57600080fd5b806302fb4d851461026c5780630ddda63c1461028e578063158ef93e146102ae5780631903cf16146102dd578063190b9257146102fd575b600080fd5b34801561027857600080fd5b5061028c610287366004614cc8565b61095f565b005b34801561029a57600080fd5b5061028c6102a9366004614cf4565b610b65565b3480156102ba57600080fd5b506000546102c89060ff1681565b60405190151581526020015b60405180910390f35b3480156102e957600080fd5b5061028c6102f8366004614d9f565b610d70565b34801561030957600080fd5b5061031d610318366004614cf4565b610f69565b6040519081526020016102d4565b34801561033757600080fd5b5061031d610346366004614cc8565b610f8a565b34801561035757600080fd5b5061031d610366366004614cf4565b610fc1565b34801561037757600080fd5b5061038b610386366004614e49565b610fd1565b6040516102d4929190614eaf565b3480156103a557600080fd5b506103b96103b4366004614cc8565b6110b7565b604080519283526020830191909152016102d4565b3480156103da57600080fd5b506103ee6103e9366004614ed1565b611185565b6040516102d4959493929190614f3c565b34801561040b57600080fd5b5060015461041f906001600160a01b031681565b6040516001600160a01b0390911681526020016102d4565b34801561044357600080fd5b5061031d610452366004614cc8565b6114d2565b34801561046357600080fd5b5061031d610472366004614f9c565b611585565b34801561048357600080fd5b5061028c610492366004614d9f565b61174b565b3480156104a357600080fd5b5061031d6104b2366004614cf4565b611944565b3480156104c357600080fd5b506104d76104d2366004614ed1565b6119da565b6040516102d49392919061503b565b3480156104f257600080fd5b5061028c610501366004615071565b611c37565b34801561051257600080fd5b50610526610521366004614cc8565b611cb6565b6040516102d494939291906150e2565b34801561054257600080fd5b5061028c610551366004614cf4565b611d82565b34801561056257600080fd5b5061041f610571366004614cf4565b611e8c565b34801561058257600080fd5b5061028c61059136600461510d565b611eb6565b3480156105a257600080fd5b506105b66105b136600461512a565b611faf565b6040516102d4959493929190615188565b3480156105d357600080fd5b5060005461041f9061010090046001600160a01b031681565b3480156105f857600080fd5b5061041f61060736600461510d565b6006602052600090815260409020546001600160a01b031681565b61028c6106303660046151d5565b61204f565b34801561064157600080fd5b5061065561065036600461510d565b61221a565b604080519384526020840192909252908201526060016102d4565b61028c61229a565b34801561068457600080fd5b5061041f61069336600461510d565b6007602052600090815260409020546001600160a01b031681565b3480156106ba57600080fd5b5061031d6106c9366004614cc8565b6122cf565b3480156106da57600080fd5b5060095461041f906001600160a01b031681565b3480156106fa57600080fd5b5061028c61070936600461510d565b6123ab565b34801561071a57600080fd5b5061038b610729366004614e49565b6124b1565b34801561073a57600080fd5b5061028c610749366004614cc8565b61258f565b34801561075a57600080fd5b5061028c610769366004614cc8565b612637565b34801561077a57600080fd5b5061078e61078936600461521a565b612836565b6040516102d495949392919061524f565b3480156107ab57600080fd5b506107bf6107ba366004614cc8565b612aee565b604080516001600160a01b0390961686529315156020860152911515928401929092529015156060830152608082015260a0016102d4565b34801561080357600080fd5b5061031d6108123660046152b8565b612c68565b34801561082357600080fd5b5061031d61083236600461510d565b6001600160a01b031660009081526007602052604090206006015490565b34801561085c57600080fd5b5061028c61086b3660046151d5565b612cae565b34801561087c57600080fd5b5061028c61088b3660046152b8565b612cc7565b34801561089c57600080fd5b5061041f6108ab366004614cf4565b612dd3565b3480156108bc57600080fd5b5061028c6108cb36600461510d565b612de3565b3480156108dc57600080fd5b506109196108eb36600461510d565b6004602052600090815260409020805460018201546006909201546001600160a01b03918216929091169083565b604080516001600160a01b039485168152939092166020840152908201526060016102d4565b34801561094b57600080fd5b5061028c61095a3660046151d5565b612e45565b6001600160a01b0380831660009081526006602090815260408083205484168084526004909252909120549091166109aa576040516372898ae960e11b815260040160405180910390fd5b3341146109ca57604051631cf4735960e01b815260040160405180910390fd5b6001600160a01b038084166000908152600660209081526040808320548416835260049182905280832083548251633fa4f24560e01b815292519195610add946101009092041692633fa4f2459281830192610120928290030181865afa158015610a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5d91906152e8565b600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad49190615363565b84919087613185565b82546040519192506001600160a01b0316907f1647efd0ce9727dc31dc201c9d8d35ac687f7370adcacbd454afc6485ddabfda90600090a28015610b5e5781546040518281526001600160a01b03909116907feb7d7a49847ec491969db21a0e31b234565a9923145a2d1b56a75c9e95825802906020015b60405180910390a25b5050505050565b336000818152600460205260409020546001600160a01b0316610b9b576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316610bd15760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c489190615391565b15610c6657604051631e59ccd960e01b815260040160405180910390fd5b60008054338252600460205260408220610c8e9161010090046001600160a01b031686613264565b905080610cae57604051637bc90c0560e11b815260040160405180910390fd5b610d323333600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a9190615363565b600085613284565b604051818152339081907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba1043836906020015b60405180910390a350505050565b6001600160a01b03828116600090815260046020526040902080548492163314801590610daa575060018101546001600160a01b03163314155b15610dc857604051630101292160e31b815260040160405180910390fd5b6001600160a01b03808516600090815260046020526040902054859116610e02576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e799190615391565b15610e9757604051631e59ccd960e01b815260040160405180910390fd5b610f30600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f119190615363565b6001600160a01b03871660009081526004602052604090209086613399565b846001600160a01b03167fc11dfc9c24621433bb10587dc4bbae26a33a4aff53914e0d4c9fddf224a8cb7d85604051610b5591906153ac565b60028181548110610f7957600080fd5b600091825260209091200154905081565b600080546001600160a01b038481168352600460205260408320610fb792909161010090910416846133ab565b5090505b92915050565b60038181548110610f7957600080fd5b60606000610fe5848460058054905061353f565b9093509050826001600160401b0381111561100257611002614d0d565b60405190808252806020026020018201604052801561102b578160200160208202803683370190505b50915060005b838110156110af57600561104582876153d5565b81548110611055576110556153ed565b9060005260206000200160009054906101000a90046001600160a01b0316838281518110611085576110856153ed565b6001600160a01b0390921660209283029190910190910152806110a781615403565b915050611031565b509250929050565b60008061117a6000841161114157600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113c9190615363565b611143565b835b6001600160a01b038616600090815260046020908152604080832093835260098401825280832054600a9094019091529020549091565b909590945092505050565b6001600160a01b03841660009081526007602052604081206060918291829182918861122757600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112229190615363565b611229565b885b985061123b888860058054905061353f565b9097509150866001600160401b0381111561125857611258614d0d565b604051908082528060200260200182016040528015611281578160200160208202803683370190505b509550866001600160401b0381111561129c5761129c614d0d565b6040519080825280602002602001820160405280156112c5578160200160208202803683370190505b509450866001600160401b038111156112e0576112e0614d0d565b604051908082528060200260200182016040528015611309578160200160208202803683370190505b509350866001600160401b0381111561132457611324614d0d565b60405190808252806020026020018201604052801561134d578160200160208202803683370190505b50925060005b878110156114c5576005611367828b6153d5565b81548110611377576113776153ed565b9060005260206000200160009054906101000a90046001600160a01b03168782815181106113a7576113a76153ed565b60200260200101906001600160a01b031690816001600160a01b0316815250506113f88782815181106113dc576113dc6153ed565b602002602001015160008c85613577909392919063ffffffff16565b86828151811061140a5761140a6153ed565b60200260200101818152505061144787828151811061142b5761142b6153ed565b602002602001015160018c85613577909392919063ffffffff16565b858281518110611459576114596153ed565b60200260200101818152505061149687828151811061147a5761147a6153ed565b602002602001015160028c85613577909392919063ffffffff16565b8482815181106114a8576114a86153ed565b6020908102919091010152806114bd81615403565b915050611353565b5050945094509450945094565b600080821161155757600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561152e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115529190615363565b611559565b815b6001600160a01b038416600090815260046020526040902090925061157e9083613636565b9392505050565b600080600183600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116029190615363565b61160c919061541e565b611616919061541e565b845190915060005b84811015611742576116316001846153d5565b6000805460405163fcbb371b60e01b81526004810184905292955090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015611685573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a991906152e8565b905060005b8381101561172d57600061170a8387600460008d87815181106116d3576116d36153ed565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206136499092919063ffffffff16565b50905061171781886153d5565b965050808061172590615403565b9150506116ae565b5050808061173a90615403565b91505061161e565b50505092915050565b6001600160a01b03828116600090815260046020526040902080548492163314801590611785575060018101546001600160a01b03163314155b156117a357604051630101292160e31b815260040160405180910390fd5b6001600160a01b038085166000908152600460205260409020548591166117dd576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015611830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118549190615391565b1561187257604051631e59ccd960e01b815260040160405180910390fd5b61190b600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ec9190615363565b6001600160a01b038716600090815260046020526040902090866137b8565b846001600160a01b03167f0ad9bf1b8c026a174a2f30954417002a6ea00c9b08c1b8846c7951c687be809585604051610b5591906153ac565b60008082116119c957600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c49190615363565b6119cb565b815b9150610fbb60026003846137c5565b6001600160a01b0384166000908152600460205260408120606091829186611a7857600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a739190615363565b611a7a565b865b9650611a8e8686836007018054905061353f565b9095509150846001600160401b03811115611aab57611aab614d0d565b604051908082528060200260200182016040528015611ad4578160200160208202803683370190505b509350846001600160401b03811115611aef57611aef614d0d565b604051908082528060200260200182016040528015611b18578160200160208202803683370190505b50925060005b85811015611c2b576000600781848201611b38858c6153d5565b81548110611b4857611b486153ed565b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190208054885191935090911690879084908110611b8e57611b8e6153ed565b6001600160a01b0392831660209182029290920101528354611bb59183911660028c613577565b8354611bce9083906001600160a01b031660018d613577565b8454611be79084906001600160a01b031660008e613577565b611bf191906153d5565b611bfb91906153d5565b858381518110611c0d57611c0d6153ed565b60209081029190910101525080611c2381615403565b915050611b1e565b50509450945094915050565b334114611c5757604051631cf4735960e01b815260040160405180910390fd5b60005460ff1615611c7a5760405162dc149f60e41b815260040160405180910390fd5b6000805460016001600160a81b03199091166101006001600160a01b039586160217811790915580546001600160a01b03191691909216179055565b6001600160a01b03821660009081526007602052604081206006018054829182918291829187908110611ceb57611ceb6153ed565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115611d1e57611d1e6150aa565b6002811115611d2f57611d2f6150aa565b81526020016001820154815260200160028201548152505090508060000151816020015182604001518360400151600014158015611d71575083604001514210155b929a91995097509095509350505050565b336000818152600760205260409020546001600160a01b0316611db85760405163cf83d93d60e01b815260040160405180910390fd5b336000908152600760205260408120600601805484908110611ddc57611ddc6153ed565b9060005260206000209060030201905060008160020154905080421015611e16576040516303cb96db60e21b815260040160405180910390fd5b80611e3457604051630c8d9eab60e31b815260040160405180910390fd5b6000600283015560405184815233907fbf5f92dc2b945251eadf78c2ca629ae64053d979bfbc43a7b17a463707906bf99060200160405180910390a281546001830154611e869160ff169033906138de565b50505050565b60058181548110611e9c57600080fd5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b0381811660009081526006602052604090205433911615611ef15760405163055ee1f160e31b815260040160405180910390fd5b6001600160a01b0381166000908152600460205260409020611f1390836139fd565b60058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b038381166001600160a01b03199283168117909355841660009081526006602090815260409182902080549093168417909255519182527fd5828184f48f65962d10eac907318df85953d4e3542a0f09b5932ee3fe398bdd910160405180910390a15050565b600954604051632d73a02f60e01b81526004810185905260248101849052604481018390526060918291829182916000916001600160a01b031690632d73a02f90606401600060405180830381865afa158015612010573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120389190810190615561565b959e949d50909b5099509297509095505050505050565b6001600160a01b03808416600090815260046020526040902054849116612089576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121009190615391565b1561211e57604051631e59ccd960e01b815260040160405180910390fd5b8161213c57604051637bc90c0560e11b815260040160405180910390fd5b612147833384613a3f565b6121d53385600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561219f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c39190615363565b6121ce9060016153d5565b8686613284565b836001600160a01b0316336001600160a01b03167f8fc656e319452025372383dc27d933046d412b8253de50a10739eeaa59862be68585604051610d62929190615660565b6001600160a01b03808216600090815260076020526040812081549192839283929161224f9183916101009091041684613ae0565b60005490945061227090829061010090046001600160a01b03166001613ae0565b60005490935061229190829061010090046001600160a01b03166002613ae0565b93959294505050565b6040513481527f1de49774d094a85fc1bbbd16e8d09a865fb848218f41e2da4369f528c42ee42e9060200160405180910390a1565b6001600160a01b038083166000818152600660209081526040808320548516835260049091528120600181015491939092911614612311576000915050610fbb565b6000831161239557600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561236c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123909190615363565b612397565b825b92506123a38184613636565b949350505050565b336000818152600460205260409020546001600160a01b03166123e1576040516372898ae960e11b815260040160405180910390fd5b6001600160a01b038281166000908152600660205260409020543391161561241c5760405163055ee1f160e31b815260040160405180910390fd5b6001600160a01b03808216600090815260046020526040902060018101549091166124478286613d06565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916888616908117909155825194861685529084019290925290917f758820d0b14a01c1fa60b8d2bbef25ed1b6a5af4802e5dec3f08679255ba8bf39101610b55565b606060006124c5848460088054905061353f565b9093509050826001600160401b038111156124e2576124e2614d0d565b60405190808252806020026020018201604052801561250b578160200160208202803683370190505b50915060005b838110156110af57600861252582876153d5565b81548110612535576125356153ed565b9060005260206000200160009054906101000a90046001600160a01b0316838281518110612565576125656153ed565b6001600160a01b03909216602092830291909101909101528061258781615403565b915050612511565b336000818152600460205260409020546001600160a01b03166125c5576040516372898ae960e11b815260040160405180910390fd5b600080543382526004602052604082206125ed9161010090046001600160a01b031685613264565b60405181815290915033907f882d5671e5b36af50883197c33d48ba56ce337589958e871ba82fb0a54adf3e89060200160405180910390a28015611e8657611e86600033836138de565b6001600160a01b03808316600090815260046020526040902054839116612671576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166126a75760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271e9190615391565b1561273c57604051631e59ccd960e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420612777939092610100909104169087613d80565b90508061279757604051637bc90c0560e11b815260040160405180910390fd5b6127ef3386600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d06573d6000803e3d6000fd5b6040518181526001600160a01b0386169033907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba10438369060200160405180910390a35050505050565b6001600160a01b03831660009081526007602052604081206006810154606092839283928392919061286b908990899061353f565b9097509150866001600160401b0381111561288857612888614d0d565b6040519080825280602002602001820160405280156128b1578160200160208202803683370190505b509550866001600160401b038111156128cc576128cc614d0d565b6040519080825280602002602001820160405280156128f5578160200160208202803683370190505b509450866001600160401b0381111561291057612910614d0d565b604051908082528060200260200182016040528015612939578160200160208202803683370190505b509350866001600160401b0381111561295457612954614d0d565b60405190808252806020026020018201604052801561297d578160200160208202803683370190505b50925060005b87811015612ae15760006006830161299b838c6153d5565b815481106129ab576129ab6153ed565b6000918252602090912060408051606081019091526003909202018054829060ff1660028111156129de576129de6150aa565b60028111156129ef576129ef6150aa565b81526020016001820154815260200160028201548152505090508060000151888381518110612a2057612a206153ed565b60200260200101906002811115612a3957612a396150aa565b90816002811115612a4c57612a4c6150aa565b815250508060200151878381518110612a6757612a676153ed565b6020026020010181815250508060400151868381518110612a8a57612a8a6153ed565b6020908102919091010152604081015115801590612aac575080604001514210155b858381518110612abe57612abe6153ed565b911515602092830291909101909101525080612ad981615403565b915050612983565b5050939792965093509350565b60008080808085612b7357600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b709190615363565b95505b6001600160a01b03878116600090815260046020908152604080832060018101548b855260028201909352922054921696509060ff1660008881526003830160205260409020549015955060ff169350612bcd8188613636565b9150848015612bda575083155b8015612c5b575060005460405163fcbb371b60e01b8152600481018990526101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015612c2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5391906152e8565b60c001518210155b9250509295509295909350565b600080546001600160a01b038481168352600460209081526040808520888416865260079092528420612ca5939092610100909104169085613db9565b50949350505050565b604051634ee5a1b960e01b815260040160405180910390fd5b6001600160a01b03808316600090815260046020526040902054839116612d01576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316612d375760405163cf83d93d60e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420612d72939092610100909104169087613d80565b604080516001600160a01b03881681526020810183905291925033917f2ef606d064225d24c1514dc94907c134faee1237445c2f63f410cce0852b2054910160405180910390a28015612dcb57612dcb600033836138de565b505050505050565b60088181548110611e9c57600080fd5b336000818152600760205260409020546001600160a01b0316612e195760405163cf83d93d60e01b815260040160405180910390fd5b6000805433825260076020526040909120612e419161010090046001600160a01b0316613fc7565b5050565b6001600160a01b03808416600090815260046020526040902054849116612e7f576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316612eb55760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f2c9190615391565b15612f4a57604051631e59ccd960e01b815260040160405180910390fd5b33600090815260076020908152604080832083546001600160a01b038a81168652600490945291909320612f88928492610100900416908888613feb565b935083612fa857604051637bc90c0560e11b815260040160405180910390fd5b806006016040518060600160405280876002811115612fc957612fc96150aa565b815260208101879052604001612fe242620d2f006153d5565b9052815460018181018455600093845260209093208251600390920201805492939092839160ff1990911690836002811115613020576130206150aa565b0217905550602082015181600101556040820151816002015550506130cc6003600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613093573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b79190615363565b6130c29060016153d5565b6002919087614121565b50600954604051635692619d60e11b81526001600160a01b0388811660048301529091169063ad24c33a90602401600060405180830381600087803b15801561311457600080fd5b505af1158015613128573d6000803e3d6000fd5b50505060068201546001600160a01b038816915033907fb649014faa7a0e23357e091fb8a67a128c33dc9480f846f7e41cb3a6c9d806109061316c9060019061541e565b60405190815260200160405180910390a3505050505050565b60008281526009850160205260408120546131ae57600083815260098601602052604090208290555b6000838152600a860160205260408120546131ca9060016153d5565b6000858152600a88016020526040902081905560e0860151909150811080159061321657506003860160006132008660016153d5565b815260208101919091526040016000205460ff16155b15612ca55761010085015161322b90856153d5565b91505b81841015612ca5578361324081615403565b60008181526003890160205260409020805460ff19166001179055945061322e9050565b60008060006132748686866133ab565b6006880155925050509392505050565b6001600160a01b03808616600090815260076020526040902080549091166132fd5780546001600160a01b0387166001600160a01b031991821681178355600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180549092161790555b6001600160a01b0385166000908152600460205260409020613324908290869086866141fc565b6133326002600386856142c4565b600954604051635692619d60e11b81526001600160a01b0387811660048301529091169063ad24c33a90602401600060405180830381600087803b15801561337957600080fd5b505af115801561338d573d6000803e3d6000fd5b50505050505050505050565b6133a683838360006143aa565b505050565b6000808460060154905060006001856001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341b9190615363565b613425919061541e565b905083158061343c57508061343a83866153d5565b115b1561344e5761344b828261541e565b93505b60005b84811015613535576134646001846153d5565b60405163fcbb371b60e01b8152600481018290529093506000906001600160a01b0388169063fcbb371b9060240161012060405180830381865afa1580156134b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d491906152e8565b905060006134e3898387613649565b509050806134f2575050613523565b60a0820151613502575050613523565b613514818360a0015160646019614430565b61351e90876153d5565b955050505b8061352d81615403565b915050613451565b5050935093915050565b6000808261354d85876153d5565b1061355f5761355c858461541e565b93505b8361356a81876153d5565b915091505b935093915050565b600061362d856002016000856002811115613594576135946150aa565b60028111156135a5576135a56150aa565b81526020019081526020016000206000866001600160a01b03166001600160a01b03168152602001908152602001600020838760010160008760028111156135ef576135ef6150aa565b6002811115613600576136006150aa565b8152602080820192909252604090810160009081206001600160a01b038b168252909252902091906137c5565b95945050505050565b600061157e6004840160058501846137c5565b6000818152600284016020526040812054819060ff168061367a5750600083815260038601602052604090205460ff165b1561368a5750600090508061356f565b6136948584613636565b9050604983106136d4578360c001518110156136b3576000915061356f565b629896806136c382610a3461567b565b6136cd919061569a565b915061376d565b806136e45750600090508061356f565b6136f06019600a615798565b61370185608001516064601961445c565b61370b908361567b565b613715919061569a565b915081613725576000915061356f565b6137488460600151856040015161373c919061567b565b6301e13380601961445c565b613752908361567b565b91506137606019600a615798565b61376a908361569a565b91505b6000838152600a8601602052604090205480156137af5760008481526009870160205260409020546137ab846137a3848461541e565b836019614430565b9350505b50935093915050565b6133a683838360016143aa565b82546000908015806137f3575082856000815481106137e6576137e66153ed565b9060005260206000200154115b1561380257600091505061157e565b828561380f60018461541e565b8154811061381f5761381f6153ed565b90600052602060002001541161385e578361383b60018361541e565b8154811061384b5761384b6153ed565b906000526020600020015491505061157e565b6001811180156138945750828561387660028461541e565b81548110613886576138866153ed565b906000526020600020015411155b156138a5578361383b60028361541e565b60006138b48685600085614498565b90508481815481106138c8576138c86153ed565b9060005260206000200154925050509392505050565b6000808460028111156138f3576138f36150aa565b1415613952576040516001600160a01b038416908390600081818185875af1925050503d8060008114613942576040519150601f19603f3d011682016040523d82523d6000602084013e613947565b606091505b5050809150506139d4565b61395b84614540565b60405163a9059cbb60e01b81526001600160a01b03858116600483015260248201859052919091169063a9059cbb906044015b6020604051808303816000875af11580156139ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139d19190615391565b90505b80611e865783604051630db5347560e11b81526004016139f491906157a4565b60405180910390fd5b81546001600160a01b031615613a2557604051621d934160e11b815260040160405180910390fd5b81546001600160a01b03191633178255612e418282613d06565b6000836002811115613a5357613a536150aa565b1415613a79578034146133a657604051630fe5b06560e11b815260040160405180910390fd5b3415613a985760405163a745ac8560e01b815260040160405180910390fd5b6000613aa384614540565b6040516323b872dd60e01b81526001600160a01b0385811660048301523060248301526044820185905291909116906323b872dd9060640161398e565b600080846003016000846002811115613afb57613afb6150aa565b6002811115613b0c57613b0c6150aa565b8152602081019190915260400160002054905080613b2e57600091505061157e565b6000846001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b929190615363565b90506000613ba160018461541e565b9050600081118015613c04575081876003016000876002811115613bc757613bc76150aa565b6002811115613bd857613bd86150aa565b81526020019081526020016000208281548110613bf757613bf76153ed565b9060005260206000200154115b15613c175780613c13816157b2565b9150505b81876003016000876002811115613c3057613c306150aa565b6002811115613c4157613c416150aa565b81526020019081526020016000208281548110613c6057613c606153ed565b90600052602060002001541115613c7d576000935050505061157e565b6000805b828111613cfa57886004016000886002811115613ca057613ca06150aa565b6002811115613cb157613cb16150aa565b81526020019081526020016000208181548110613cd057613cd06153ed565b906000526020600020015482613ce691906153d5565b915080613cf281615403565b915050613c81565b50979650505050505050565b6001600160a01b038116613d2d57604051637138356f60e01b815260040160405180910390fd5b81546001600160a01b0382811691161415613d5b5760405163e037058f60e01b815260040160405180910390fd5b60019190910180546001600160a01b0319166001600160a01b03909216919091179055565b6000806000613d9187878787613db9565b86546001600160a01b0316600090815260058a01602052604090205592505050949350505050565b81546001600160a01b039081166000908152600586016020908152604080832054815163900cf0cf60e01b81529151939490938593600193928a169263900cf0cf92600480830193928290030181865afa158015613e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3f9190615363565b613e49919061541e565b9050831580613e60575080613e5e83866153d5565b115b15613e7257613e6f828261541e565b93505b60005b84811015613fbc57613e886001846153d5565b8654909350600090613ea7908a906001600160a01b0316600287613577565b8754613ec0908b906001600160a01b0316600188613577565b8854613ed9908c906001600160a01b0316600089613577565b613ee391906153d5565b613eed91906153d5565b905080613efa5750613faa565b600080613f788a6001600160a01b031663fcbb371b886040518263ffffffff1660e01b8152600401613f2e91815260200190565b61012060405180830381865afa158015613f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f7091906152e8565b8a90886145ab565b915091508160001415613f8d57505050613faa565b613f9a8284836019614430565b613fa490886153d5565b96505050505b80613fb481615403565b915050613e75565b505094509492505050565b613fd3828260016145fc565b613fdf828260026145fc565b612e41828260006145fc565b6000614107866002016000856002811115614008576140086150aa565b6002811115614019576140196150aa565b81526020808201929092526040908101600090812088546001600160a01b03908116835290845290829020825163900cf0cf60e01b815292519093918a169263900cf0cf9260048083019391928290030181865afa15801561407f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140a39190615363565b6140ae9060016153d5565b848960010160008860028111156140c7576140c76150aa565b60028111156140d8576140d86150aa565b8152602080820192909252604090810160009081208b546001600160a01b031682529092529020929190614121565b9150816141165750600061362d565b612ca5848684614922565b835460009080158061415857508561413a60018361541e565b8154811061414a5761414a6153ed565b906000526020600020015484105b1561417657604051630eae4c9760e01b815260040160405180910390fd5b60006141838787876149a2565b90506000868281548110614199576141996153ed565b90600052602060002001549050808511156141b457806141b6565b845b945084156141f057848783815481106141d1576141d16153ed565b9060005260206000200160008282546141ea919061541e565b90915550505b50929695505050505050565b6142ab856002016000846002811115614217576142176150aa565b6002811115614228576142286150aa565b81526020808201929092526040908101600090812087546001600160a01b031682529092528120908690849060018a019087600281111561426b5761426b6150aa565b600281111561427c5761427c6150aa565b8152602080820192909252604090810160009081208a546001600160a01b0316825290925290209291906142c4565b8454610b5e90849086906001600160a01b031684614bb2565b83546001811180156142fb5750846142dd60018361541e565b815481106142ed576142ed6153ed565b906000526020600020015483105b801561432c57508461430e60028361541e565b8154811061431e5761431e6153ed565b906000526020600020015483105b1561434a57604051630eae4c9760e01b815260040160405180910390fd5b60006143578686866149a2565b8654925090505b81811015612dcb5782858281548110614379576143796153ed565b90600052602060002001600082825461439291906153d5565b909155508190506143a281615403565b91505061435e565b815160005b81811015612dcb5760008482815181106143cb576143cb6153ed565b6020026020010151905085811180156143fb5750600081815260028801602052604090205460ff16151584151514155b1561441d5760008181526002880160205260409020805460ff19168515151790555b508061442881615403565b9150506143af565b600061443d82600a615798565b61444885858561445c565b614452908761567b565b61362d919061569a565b60008061446a8360016153d5565b61447590600a615798565b61447f908661567b565b9050600a61448d858361569a565b6144529060056153d5565b6000818314156144b4576144ad60018361541e565b90506123a3565b600060026144c284866153d5565b6144cc919061569a565b9050848682815481106144e1576144e16153ed565b90600052602060002001541115614506576144fe86868684614498565b9150506123a3565b84868281548110614519576145196153ed565b9060005260206000200154101561362d576144fe868661453a8460016153d5565b86614498565b60006001826002811115614556576145566150aa565b141561456a57506001602960991b01919050565b600282600281111561457e5761457e6150aa565b141561459257506002602960991b01919050565b604051638698bf3760e01b815260040160405180910390fd5b6000806145b9858585613649565b9092509050816145cc576000915061356f565b60a08401511561356f576145e8828560a0015160646019614430565b6145f2908361541e565b9150935093915050565b6000614609848484613ae0565b9050806146165750505050565b6000846003016000846002811115614630576146306150aa565b6002811115614641576146416150aa565b8152602001908152602001600020805490509050836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146b79190615363565b8560030160008560028111156146cf576146cf6150aa565b60028111156146e0576146e06150aa565b81526020019081526020016000206001836146fb919061541e565b8154811061470b5761470b6153ed565b9060005260206000200154116147a657846003016000846002811115614733576147336150aa565b6002811115614744576147446150aa565b8152602001908152602001600020600061475e9190614c32565b846004016000846002811115614776576147766150aa565b6002811115614787576147876150aa565b815260200190815260200160002060006147a19190614c32565b61490b565b60405180602001604052808660030160008660028111156147c9576147c96150aa565b60028111156147da576147da6150aa565b81526020019081526020016000206001846147f5919061541e565b81548110614805576148056153ed565b906000526020600020015481525085600301600085600281111561482b5761482b6150aa565b600281111561483c5761483c6150aa565b81526020810191909152604001600020614857916001614c53565b50604051806020016040528086600401600086600281111561487b5761487b6150aa565b600281111561488c5761488c6150aa565b81526020019081526020016000206001846148a7919061541e565b815481106148b7576148b76153ed565b90600052602060002001548152508560040160008560028111156148dd576148dd6150aa565b60028111156148ee576148ee6150aa565b81526020810191909152604001600020614909916001614c53565b505b8454610b5e9084906001600160a01b0316846138de565b611e8683600501836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061498b9190615363565b6149969060016153d5565b60048601919084614121565b8254600090806149dd57505082546001818101855560008581526020808220909301849055845491820185558481529182200181905561157e565b60006149ea60018361541e565b90506000868281548110614a0057614a006153ed565b9060005260206000200154905080851415614a1f5750915061157e9050565b80851115614a875786546001810188556000888152602090200185905585548690819084908110614a5257614a526153ed565b6000918252602080832090910154835460018181018655948452919092200155614a7d9083906153d5565b935050505061157e565b600082118015614abc575086614a9e60018461541e565b81548110614aae57614aae6153ed565b906000526020600020015485145b15614acc57614a7d60018361541e565b86878381548110614adf57614adf6153ed565b6000918252602080832090910154835460018101855593835291209091015585548690819084908110614b1457614b146153ed565b6000918252602080832090910154835460018101855593835291209091015586548590889084908110614b4957614b496153ed565b6000918252602090912001558115614b875785614b6760018461541e565b81548110614b7757614b776153ed565b9060005260206000200154614b8a565b60005b868381548110614b9c57614b9c6153ed565b60009182526020909120015550915061157e9050565b6001600160a01b038216600090815260088501602052604090205460ff16614c20576001600160a01b038216600081815260088601602090815260408220805460ff191660019081179091556007880180549182018155835291200180546001600160a01b03191690911790555b611e86600485016005860185846142c4565b5080546000825590600052602060002090810190614c509190614c9e565b50565b828054828255906000526020600020908101928215614c8e579160200282015b82811115614c8e578251825591602001919060010190614c73565b50614c9a929150614c9e565b5090565b5b80821115614c9a5760008155600101614c9f565b6001600160a01b0381168114614c5057600080fd5b60008060408385031215614cdb57600080fd5b8235614ce681614cb3565b946020939093013593505050565b600060208284031215614d0657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715614d4657614d46614d0d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614d7457614d74614d0d565b604052919050565b60006001600160401b03821115614d9557614d95614d0d565b5060051b60200190565b60008060408385031215614db257600080fd5b8235614dbd81614cb3565b91506020838101356001600160401b03811115614dd957600080fd5b8401601f81018613614dea57600080fd5b8035614dfd614df882614d7c565b614d4c565b81815260059190911b82018301908381019088831115614e1c57600080fd5b928401925b82841015614e3a57833582529284019290840190614e21565b80955050505050509250929050565b60008060408385031215614e5c57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015614ea45781516001600160a01b031687529582019590820190600101614e7f565b509495945050505050565b604081526000614ec26040830185614e6b565b90508260208301529392505050565b60008060008060808587031215614ee757600080fd5b8435614ef281614cb3565b966020860135965060408601359560600135945092505050565b600081518084526020808501945080840160005b83811015614ea457815187529582019590820190600101614f20565b60a081526000614f4f60a0830188614e6b565b8281036020840152614f618188614f0c565b90508281036040840152614f758187614f0c565b90508281036060840152614f898186614f0c565b9150508260808301529695505050505050565b60008060408385031215614faf57600080fd5b82356001600160401b03811115614fc557600080fd5b8301601f81018513614fd657600080fd5b80356020614fe6614df883614d7c565b82815260059290921b8301810191818101908884111561500557600080fd5b938201935b8385101561502c57843561501d81614cb3565b8252938201939082019061500a565b98969091013596505050505050565b60608152600061504e6060830186614e6b565b82810360208401526150608186614f0c565b915050826040830152949350505050565b6000806040838503121561508457600080fd5b823561508f81614cb3565b9150602083013561509f81614cb3565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b600381106150de57634e487b7160e01b600052602160045260246000fd5b9052565b608081016150f082876150c0565b846020830152836040830152821515606083015295945050505050565b60006020828403121561511f57600080fd5b813561157e81614cb3565b60008060006060848603121561513f57600080fd5b505081359360208301359350604090920135919050565b600081518084526020808501945080840160005b83811015614ea457815115158752958201959082019060010161516a565b60a08152600061519b60a0830188614e6b565b82810360208401526151ad8188614e6b565b905082810360408401526151c18187614f0c565b90508281036060840152614f898186615156565b6000806000606084860312156151ea57600080fd5b83356151f581614cb3565b925060208401356003811061520957600080fd5b929592945050506040919091013590565b60008060006060848603121561522f57600080fd5b833561523a81614cb3565b95602085013595506040909401359392505050565b60a0808252865190820181905260009060209060c0840190828a01845b8281101561528f5761527f8483516150c0565b928401929084019060010161526c565b505050838103828501526152a38189614f0c565b91505082810360408401526151c18187614f0c565b6000806000606084860312156152cd57600080fd5b83356152d881614cb3565b9250602084013561520981614cb3565b600061012082840312156152fb57600080fd5b615303614d23565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b60006020828403121561537557600080fd5b5051919050565b8051801515811461538c57600080fd5b919050565b6000602082840312156153a357600080fd5b61157e8261537c565b60208152600061157e6020830184614f0c565b634e487b7160e01b600052601160045260246000fd5b600082198211156153e8576153e86153bf565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415615417576154176153bf565b5060010190565b600082821015615430576154306153bf565b500390565b600082601f83011261544657600080fd5b81516020615456614df883614d7c565b82815260059290921b8401810191818101908684111561547557600080fd5b8286015b8481101561549957805161548c81614cb3565b8352918301918301615479565b509695505050505050565b600082601f8301126154b557600080fd5b815160206154c5614df883614d7c565b82815260059290921b840181019181810190868411156154e457600080fd5b8286015b84811015615499576154f98161537c565b83529183019183016154e8565b600082601f83011261551757600080fd5b81516020615527614df883614d7c565b82815260059290921b8401810191818101908684111561554657600080fd5b8286015b84811015615499578051835291830191830161554a565b600080600080600080600060e0888a03121561557c57600080fd5b87516001600160401b038082111561559357600080fd5b61559f8b838c01615435565b985060208a01519150808211156155b557600080fd5b6155c18b838c01615435565b975060408a01519150808211156155d757600080fd5b6155e38b838c016154a4565b965060608a01519150808211156155f957600080fd5b6156058b838c016154a4565b955060808a015191508082111561561b57600080fd5b6156278b838c01615506565b945060a08a015191508082111561563d57600080fd5b5061564a8a828b016154a4565b92505060c0880151905092959891949750929550565b6040810161566e82856150c0565b8260208301529392505050565b6000816000190483118215151615615695576156956153bf565b500290565b6000826156b757634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156110af5781600019048211156156dd576156dd6153bf565b808516156156ea57918102915b93841c93908002906156c1565b60008261570657506001610fbb565b8161571357506000610fbb565b816001811461572957600281146157335761574f565b6001915050610fbb565b60ff841115615744576157446153bf565b50506001821b610fbb565b5060208310610133831016604e8410600b8410161715615772575081810a610fbb565b61577c83836156bc565b8060001904821115615790576157906153bf565b029392505050565b600061157e83836156f7565b60208101610fbb82846150c0565b6000816157c1576157c16153bf565b50600019019056fea26469706673582212206415b47e81e259b9abcfba166ca2b9fec49587fc3c072e6d3c720c3fcb31ccee64736f6c634300080c0033`), + }, + } + deploymentSets = map[common.Hash]map[uint64]deploymentSet{ params.OasysMainnetGenesisHash: { 1: deploymentSet{deployments0}, @@ -806,6 +819,7 @@ var ( 971800: deploymentSet{deployments7}, 1529980: deploymentSet{deployments9}, 1892000: deploymentSet{deployments10}, + 9999999: deploymentSet{deployments11}, // TODO }, params.OasysTestnetGenesisHash: { 1: deploymentSet{deployments0}, @@ -818,6 +832,7 @@ var ( 955400: deploymentSet{deployments7, deployments8}, 1519840: deploymentSet{deployments9}, 1880660: deploymentSet{deployments10}, + 9999999: deploymentSet{deployments11}, // TODO }, defaultGenesisHash: { 2: deploymentSet{ @@ -832,6 +847,7 @@ var ( deployments8, deployments9, deployments10, + deployments11, }, }, } diff --git a/contracts/oasys/oasys_test.go b/contracts/oasys/oasys_test.go index 33706e703..5fce7d8bd 100644 --- a/contracts/oasys/oasys_test.go +++ b/contracts/oasys/oasys_test.go @@ -1047,6 +1047,17 @@ func _deployments10(genesisHash common.Hash, contracts wantContracts) { } } +func _deployments11(genesisHash common.Hash, contracts wantContracts) { + contracts["0x0000000000000000000000000000000000001000"] = &wantContract{ + name: "Environment", + codeHash: "34cf69fefaeeaa6fec9a43b903615dcb", + storage: map[string]string{}, + } + + // StakeManager + contracts["0x0000000000000000000000000000000000001001"].codeHash = "a9eed94b67ff9b3784c44004542ec88a" +} + func TestDeploy(t *testing.T) { type wantDeployments []struct { block uint64 @@ -1072,6 +1083,7 @@ func TestDeploy(t *testing.T) { {971800, []deployFn{_deployments7}}, {1529980, []deployFn{_deployments9}}, {1892000, []deployFn{_deployments10}}, + {9999999, []deployFn{_deployments11}}, }, }, { @@ -1089,6 +1101,7 @@ func TestDeploy(t *testing.T) { {955400, []deployFn{_deployments7, _deployments8}}, {1519840, []deployFn{_deployments9}}, {1880660, []deployFn{_deployments10}}, + {9999999, []deployFn{_deployments11}}, }, }, { @@ -1108,6 +1121,7 @@ func TestDeploy(t *testing.T) { _deployments8, _deployments9, _deployments10, + _deployments11, }}, }, }, diff --git a/params/version.go b/params/version.go index 07ea25bcb..a68d4a127 100644 --- a/params/version.go +++ b/params/version.go @@ -23,7 +23,7 @@ import ( const ( VersionMajor = 1 // Major version component of the current release VersionMinor = 4 // Minor version component of the current release - VersionPatch = 1 // Patch version component of the current release + VersionPatch = 2 // Patch version component of the current release VersionMeta = "" // Version metadata to append to the version string ) From ca1d2592e8df3fc62e6ea6ecc8fd80111f27cc7c Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Wed, 14 Aug 2024 15:23:10 +0900 Subject: [PATCH 11/29] Improved loop performance --- consensus/oasys/environment_value.go | 23 +---------------------- consensus/oasys/environment_value_test.go | 7 ------- 2 files changed, 1 insertion(+), 29 deletions(-) diff --git a/consensus/oasys/environment_value.go b/consensus/oasys/environment_value.go index 4f2a9dbf0..86886aa85 100644 --- a/consensus/oasys/environment_value.go +++ b/consensus/oasys/environment_value.go @@ -45,27 +45,6 @@ func (p *environmentValue) Copy() *environmentValue { } } -// Check if all values are equal to `other`. -func (p *environmentValue) Equals(other *environmentValue) bool { - comps := []int{ - p.StartBlock.Cmp(other.StartBlock), - p.StartEpoch.Cmp(other.StartEpoch), - p.BlockPeriod.Cmp(other.BlockPeriod), - p.EpochPeriod.Cmp(other.EpochPeriod), - p.RewardRate.Cmp(other.RewardRate), - p.CommissionRate.Cmp(other.CommissionRate), - p.ValidatorThreshold.Cmp(other.ValidatorThreshold), - p.JailThreshold.Cmp(other.JailThreshold), - p.JailPeriod.Cmp(other.JailPeriod), - } - for _, c := range comps { - if c != 0 { - return false - } - } - return true -} - // Calculate epoch number from the given block number. func (p *environmentValue) Epoch(number uint64) uint64 { return p.StartEpoch.Uint64() + (number-p.StartBlock.Uint64())/p.EpochPeriod.Uint64() @@ -95,7 +74,7 @@ func (p *environmentValue) EpochStartBlock(number uint64) uint64 { // Determine if the given block number is suitable for deploying a new environment. func (p *environmentValue) ShouldUpdate(newValue *environmentValue, number uint64) bool { - if p.Equals(newValue) { + if p.StartEpoch.Cmp(newValue.StartEpoch) == 0 { return false // skip if same value } if p.Epoch(number)+1 != newValue.StartEpoch.Uint64() { diff --git a/consensus/oasys/environment_value_test.go b/consensus/oasys/environment_value_test.go index f4cb4db68..800922c64 100644 --- a/consensus/oasys/environment_value_test.go +++ b/consensus/oasys/environment_value_test.go @@ -25,13 +25,6 @@ func TestEnvironmentValue(t *testing.T) { newVal.StartEpoch = big.NewInt(3) newVal.StartBlock = new(big.Int).SetUint64(env.NewValueStartBlock(newVal)) - if env.Equals(env) != true { - t.Error("Equals(): should be true") - } - if env.Equals(newVal) != false { - t.Error("Equals(): should be false") - } - // epoch 1 for i, number := range []uint64{0, 1, 2, 5757, 5758, 5759} { if got := env.Epoch(number); got != 1 { From 11b7f0c928f4d38108b4fd26a660075454564168 Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Wed, 14 Aug 2024 16:36:28 +0900 Subject: [PATCH 12/29] Fix random seed overflow in scheduler --- consensus/oasys/oasys.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/consensus/oasys/oasys.go b/consensus/oasys/oasys.go index 0ba946656..46e63f277 100644 --- a/consensus/oasys/oasys.go +++ b/consensus/oasys/oasys.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "io" + "math" "math/big" "sort" "sync" @@ -52,6 +53,8 @@ var ( ether = big.NewInt(1_000_000_000_000_000_000) totalSupply = new(big.Int).Mul(big.NewInt(10_000_000_000), ether) // From WhitePaper + + BigMaxInt64 = big.NewInt(math.MaxInt64) ) // Various error messages to mark blocks invalid. These should be private to @@ -1034,8 +1037,15 @@ func (c *Oasys) scheduler(chain consensus.ChainHeaderReader, header *types.Heade return cache.(*scheduler), nil } + var seed int64 + if env.Epoch(number) >= c.chainConfig.OasysShortenedBlockTimeStartEpoch().Uint64() { + seed = new(big.Int).Mod(seedHash.Big(), BigMaxInt64).Int64() + } else { + seed = seedHash.Big().Int64() + } + created := newScheduler(env, env.EpochStartBlock(number), - newWeightedChooser(validators, stakes, seedHash.Big().Int64())) + newWeightedChooser(validators, stakes, seed)) schedulerCache.Add(seedHash, created) return created, nil } From 992a43a5d7e5522995f40cb595cdf9bb6474b7a1 Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Wed, 14 Aug 2024 16:47:31 +0900 Subject: [PATCH 13/29] Change chain config description --- params/config.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/params/config.go b/params/config.go index 24e09b523..462500599 100644 --- a/params/config.go +++ b/params/config.go @@ -474,6 +474,9 @@ func (c *ChainConfig) Description() string { if c.OasysExtendDifficultyBlock() != nil { banner += fmt.Sprintf(" - Oasys Extend Difficulty: #%-8v (https://github.com/oasysgames/oasys-validator/releases/tag/v1.3.0)\n", c.OasysExtendDifficultyBlock()) } + if c.OasysShortenedBlockTimeStartEpoch() != nil { + banner += fmt.Sprintf(" - Oasys Shorten BlockTime: Epoch#%-3v (https://github.com/oasysgames/oasys-validator/releases/tag/v1.4.2)\n", c.OasysShortenedBlockTimeStartEpoch()) + } if c.ShanghaiTime != nil { banner += fmt.Sprintf(" - Shanghai: @%-10v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/shanghai.md)\n", *c.ShanghaiTime) } @@ -601,6 +604,9 @@ func (c *ChainConfig) IsForkedOasysExtendDifficulty(num *big.Int) bool { // OasysShortenedBlockTimeBlock returns the hard fork of Oasys. func (c *ChainConfig) OasysShortenedBlockTimeStartEpoch() *big.Int { + if c.Oasys == nil { + return nil + } if c.ChainID.Cmp(OasysMainnetChainConfig.ChainID) == 0 { return big.NewInt(999) // TODO } From 7013a6549dc507ccec94f2beafa442c39708dde6 Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Wed, 14 Aug 2024 16:58:13 +0900 Subject: [PATCH 14/29] Deleted unnecessary comments --- consensus/oasys/oasys.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/consensus/oasys/oasys.go b/consensus/oasys/oasys.go index 46e63f277..6dc6ab350 100644 --- a/consensus/oasys/oasys.go +++ b/consensus/oasys/oasys.go @@ -259,12 +259,6 @@ func (c *Oasys) verifyHeader(chain consensus.ChainHeaderReader, header *types.He return errMissingSignature } // Ensure that the extra-data contains a validator list on checkpoint, but none otherwise - // Use the initial environment for header verification, - // assuming the following properties never has to be checked - // - StartBlock ->> 0 - // - StartEpoch ->> 1 - // - BlockPeriod ->> 15 - // - EpochPeriod ->> 5760 env, _ := getEnvironmentValue(c.chainConfig, number) validatorBytes := len(header.Extra) - extraVanity - extraSeal if env.IsEpochStartBlock(number) { From 0921f84e05dfb48fe5a345d7d5b7bc2ba42f6676 Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:25:36 +0900 Subject: [PATCH 15/29] Add comment --- consensus/oasys/oasys.go | 1 + 1 file changed, 1 insertion(+) diff --git a/consensus/oasys/oasys.go b/consensus/oasys/oasys.go index 6dc6ab350..72df663c4 100644 --- a/consensus/oasys/oasys.go +++ b/consensus/oasys/oasys.go @@ -1033,6 +1033,7 @@ func (c *Oasys) scheduler(chain consensus.ChainHeaderReader, header *types.Heade var seed int64 if env.Epoch(number) >= c.chainConfig.OasysShortenedBlockTimeStartEpoch().Uint64() { + // prevent overflow seed = new(big.Int).Mod(seedHash.Big(), BigMaxInt64).Int64() } else { seed = seedHash.Big().Int64() From ec5bf2cd0744711d8d8d21f313f9902e11cc4efe Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Fri, 16 Aug 2024 11:47:48 +0900 Subject: [PATCH 16/29] Update Environment and StakeManager contract --- contracts/oasys/deployments.go | 8 ++++---- contracts/oasys/oasys_test.go | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/contracts/oasys/deployments.go b/contracts/oasys/deployments.go index f80f50a86..e6ae88c30 100644 --- a/contracts/oasys/deployments.go +++ b/contracts/oasys/deployments.go @@ -798,14 +798,14 @@ var ( deployments11 = []*deployment{ { - // commit: https://github.com/ironbeer/oasys-genesis-contract/blob/667bec346eb31b476e0757bdfbbc0caf7564e6fa/contracts/Environment.sol + // commit: https://github.com/ironbeer/oasys-genesis-contract/blob/4b5025986137ce4453b7e585bfa7bb6ad2a05e25/contracts/Environment.sol contract: environment, - code: mustDecodeCode(`0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063900cf0cf11610071578063900cf0cf146101b9578063b4c2f727146101cf578063bd4eff19146101e2578063ccfb9935146101f5578063d4a53686146101fd578063fcbb371b1461020557600080fd5b806308a54356146100ae578063158ef93e146100c35780633fa4f245146100e55780634ba7ed391461015a5780635e383d2114610162575b600080fd5b6100c16100bc366004610f1c565b610218565b005b6000546100d09060ff1681565b60405190151581526020015b60405180910390f35b6100ed61027e565b6040516100dc9190600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525092915050565b6100d06102f6565b610175610170366004610f97565b610327565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e0830152610100820152610120016100dc565b6101c1610385565b6040519081526020016100dc565b6101c16101dd366004610f97565b61039c565b6100c16101f0366004610f1c565b6103bd565b6100ed61047e565b6100d0610563565b6100ed610213366004610f97565b61058e565b33411461023857604051631cf4735960e01b815260040160405180910390fd5b60005460ff161561025b5760405162dc149f60e41b815260040160405180910390fd5b6000805460ff191660019081178255908252602082015261027b8161060c565b50565b610286610e98565b61028e6108f3565b604080516101208101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152600890910154610100820152919050565b6000806103016108f3565b60038101548154919250906103169043610fc6565b6103209190610ff3565b1592915050565b6002818154811061033757600080fd5b90600052602060002090600902016000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080154905089565b60006103976103926108f3565b610925565b905090565b600181815481106103ac57600080fd5b600091825260209091200154905081565b3341146103dd57604051631cf4735960e01b815260040160405180910390fd5b6103e5610563565b1561040357604051631e59ccd960e01b815260040160405180910390fd5b61040b610385565b81602001511161042e57604051630eae4c9760e01b815260040160405180910390fd5b6000610438610959565b905061044681439054111590565b1561045c576104558183610997565b8252610471565b61046e826104686109cf565b90610997565b82525b61047a8261060c565b5050565b610486610e98565b60006104906108f3565b9050600061049c610959565b90506000826003015483600101546104b385610925565b6104bd9190610fc6565b6104c8906001611007565b6104d2919061101f565b83546104de9190611007565b90506104ec82829054111590565b6104f657826104f8565b815b604080516101208101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152600890910154610100820152949350505050565b60008061056e6108f3565b60038101548154919250906105839043610fc6565b610316906001611007565b610596610e98565b6105a36001600284610a22565b604080516101208101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260089091015461010082015292915050565b61061581610b09565b60f8461480610625575061249c46145b156106335761063381610d69565b60015480158061067b575061067b43600261064f600185610fc6565b8154811061065f5761065f61103e565b906000526020600020906009020161099090919063ffffffff16565b1561083857506020810180516001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6019190915560028054918201815560005282517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace60099092029182015590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf82015560408201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad082015560608201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad182015560808201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad282015560a08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad382015560c08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad482015560e08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad5820155610100909101517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad690910155565b602082015160016108498184610fc6565b815481106108595761085961103e565b600091825260209091200155816002610873600184610fc6565b815481106108835761088361103e565b9060005260206000209060090201600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007015561010082015181600801559050505050565b6000806108fe610959565b905061090c81439054111590565b61091d576109186109cf565b61091f565b805b91505090565b600381015481546000919061093a9043610fc6565b6109449190611054565b82600101546109539190611007565b92915050565b600280546000919061096d90600190610fc6565b8154811061097d5761097d61103e565b9060005260206000209060090201905090565b9054111590565b60008260030154836001015483602001516109b29190610fc6565b6109bc919061101f565b83546109c89190611007565b9392505050565b6002546000906001811415610a065760026000815481106109f2576109f261103e565b906000526020600020906009020191505090565b6002610a128183610fc6565b815481106109f2576109f261103e565b82546000908285610a34600184610fc6565b81548110610a4457610a4461103e565b906000526020600020015411610a865783610a60600183610fc6565b81548110610a7057610a7061103e565b90600052602060002090600902019150506109c8565b600181118015610abc57508285610a9e600284610fc6565b81548110610aae57610aae61103e565b906000526020600020015411155b15610acd5783610a60600283610fc6565b6000610adc8685600085610de5565b9050848181548110610af057610af061103e565b9060005260206000209060090201925050509392505050565b600181604001511015610b645760405163a1b63ceb60e01b815260206004820152601960248201527f626c6f636b506572696f6420697320746f6f20736d616c6c2e0000000000000060448201526064015b60405180910390fd5b600381606001511015610bba5760405163a1b63ceb60e01b815260206004820152601960248201527f65706f6368506572696f6420697320746f6f20736d616c6c2e000000000000006044820152606401610b5b565b606481608001511115610c105760405163a1b63ceb60e01b815260206004820152601860248201527f7265776172645261746520697320746f6f206c617267652e00000000000000006044820152606401610b5b565b60648160a001511115610c665760405163a1b63ceb60e01b815260206004820152601c60248201527f636f6d6d697373696f6e5261746520697320746f6f206c617267652e000000006044820152606401610b5b565b60018160c001511015610cbc5760405163a1b63ceb60e01b815260206004820181905260248201527f76616c696461746f725468726573686f6c6420697320746f6f20736d616c6c2e6044820152606401610b5b565b60018160e001511015610d125760405163a1b63ceb60e01b815260206004820152601b60248201527f6a61696c5468726573686f6c6420697320746f6f20736d616c6c2e00000000006044820152606401610b5b565b6001816101000151101561027b5760405163a1b63ceb60e01b815260206004820152601860248201527f6a61696c506572696f6420697320746f6f20736d616c6c2e00000000000000006044820152606401610b5b565b80606001518160400151610d7d919061101f565b620151801461027b5760405163a1b63ceb60e01b815260206004820152602d60248201527f626c6f636b506572696f642a65706f6368506572696f64206973206e6f74206560448201526c38bab0b6103a379018b230bc9760991b6064820152608401610b5b565b600081831415610e0157610dfa600183610fc6565b9050610e90565b60006002610e0f8486611007565b610e199190611054565b905084868281548110610e2e57610e2e61103e565b90600052602060002001541115610e5357610e4b86868684610de5565b915050610e90565b84868281548110610e6657610e6661103e565b90600052602060002001541015610e8d57610e4b8686610e87846001611007565b86610de5565b90505b949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051610120810167ffffffffffffffff81118282101715610f1657634e487b7160e01b600052604160045260246000fd5b60405290565b60006101208284031215610f2f57600080fd5b610f37610ee4565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c082015260e083013560e08201526101008084013581830152508091505092915050565b600060208284031215610fa957600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b600082821015610fd857610fd8610fb0565b500390565b634e487b7160e01b600052601260045260246000fd5b60008261100257611002610fdd565b500690565b6000821982111561101a5761101a610fb0565b500190565b600081600019048311821515161561103957611039610fb0565b500290565b634e487b7160e01b600052603260045260246000fd5b60008261106357611063610fdd565b50049056fea26469706673582212206834d6e08c8e80df2e5bdd4c11d189f13debbbfe7cde54e68ba1eb50091a589a64736f6c634300080c0033`), + code: mustDecodeCode(`0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063900cf0cf11610071578063900cf0cf146101b9578063b4c2f727146101cf578063bd4eff19146101e2578063ccfb9935146101f5578063d4a53686146101fd578063fcbb371b1461020557600080fd5b806308a54356146100ae578063158ef93e146100c35780633fa4f245146100e55780634ba7ed391461015a5780635e383d2114610162575b600080fd5b6100c16100bc366004610e82565b610218565b005b6000546100d09060ff1681565b60405190151581526020015b60405180910390f35b6100ed61027e565b6040516100dc9190600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525092915050565b6100d06102f6565b610175610170366004610efd565b610327565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e0830152610100820152610120016100dc565b6101c1610385565b6040519081526020016100dc565b6101c16101dd366004610efd565b61039c565b6100c16101f0366004610e82565b6103bd565b6100ed61047e565b6100d0610563565b6100ed610213366004610efd565b61058e565b33411461023857604051631cf4735960e01b815260040160405180910390fd5b60005460ff161561025b5760405162dc149f60e41b815260040160405180910390fd5b6000805460ff191660019081178255908252602082015261027b8161060c565b50565b610286610dfe565b61028e6108d5565b604080516101208101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152600890910154610100820152919050565b6000806103016108d5565b60038101548154919250906103169043610f2c565b6103209190610f59565b1592915050565b6002818154811061033757600080fd5b90600052602060002090600902016000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080154905089565b60006103976103926108d5565b610907565b905090565b600181815481106103ac57600080fd5b600091825260209091200154905081565b3341146103dd57604051631cf4735960e01b815260040160405180910390fd5b6103e5610563565b1561040357604051631e59ccd960e01b815260040160405180910390fd5b61040b610385565b81602001511161042e57604051630eae4c9760e01b815260040160405180910390fd5b600061043861093b565b905061044681439054111590565b1561045c576104558183610979565b8252610471565b61046e826104686109b1565b90610979565b82525b61047a8261060c565b5050565b610486610dfe565b60006104906108d5565b9050600061049c61093b565b90506000826003015483600101546104b385610907565b6104bd9190610f2c565b6104c8906001610f6d565b6104d29190610f85565b83546104de9190610f6d565b90506104ec82829054111590565b6104f657826104f8565b815b604080516101208101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152600890910154610100820152949350505050565b60008061056e6108d5565b60038101548154919250906105839043610f2c565b610316906001610f6d565b610596610dfe565b6105a36001600284610a04565b604080516101208101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260089091015461010082015292915050565b61061581610aeb565b60015480158061065d575061065d436002610631600185610f2c565b8154811061064157610641610fa4565b906000526020600020906009020161097290919063ffffffff16565b1561081a57506020810180516001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6019190915560028054918201815560005282517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace60099092029182015590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf82015560408201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad082015560608201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad182015560808201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad282015560a08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad382015560c08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad482015560e08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad5820155610100909101517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad690910155565b6020820151600161082b8184610f2c565b8154811061083b5761083b610fa4565b600091825260209091200155816002610855600184610f2c565b8154811061086557610865610fa4565b9060005260206000209060090201600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007015561010082015181600801559050505050565b6000806108e061093b565b90506108ee81439054111590565b6108ff576108fa6109b1565b610901565b805b91505090565b600381015481546000919061091c9043610f2c565b6109269190610fba565b82600101546109359190610f6d565b92915050565b600280546000919061094f90600190610f2c565b8154811061095f5761095f610fa4565b9060005260206000209060090201905090565b9054111590565b60008260030154836001015483602001516109949190610f2c565b61099e9190610f85565b83546109aa9190610f6d565b9392505050565b60025460009060018114156109e85760026000815481106109d4576109d4610fa4565b906000526020600020906009020191505090565b60026109f48183610f2c565b815481106109d4576109d4610fa4565b82546000908285610a16600184610f2c565b81548110610a2657610a26610fa4565b906000526020600020015411610a685783610a42600183610f2c565b81548110610a5257610a52610fa4565b90600052602060002090600902019150506109aa565b600181118015610a9e57508285610a80600284610f2c565b81548110610a9057610a90610fa4565b906000526020600020015411155b15610aaf5783610a42600283610f2c565b6000610abe8685600085610d4b565b9050848181548110610ad257610ad2610fa4565b9060005260206000209060090201925050509392505050565b600181604001511015610b465760405163a1b63ceb60e01b815260206004820152601960248201527f626c6f636b506572696f6420697320746f6f20736d616c6c2e0000000000000060448201526064015b60405180910390fd5b600381606001511015610b9c5760405163a1b63ceb60e01b815260206004820152601960248201527f65706f6368506572696f6420697320746f6f20736d616c6c2e000000000000006044820152606401610b3d565b606481608001511115610bf25760405163a1b63ceb60e01b815260206004820152601860248201527f7265776172645261746520697320746f6f206c617267652e00000000000000006044820152606401610b3d565b60648160a001511115610c485760405163a1b63ceb60e01b815260206004820152601c60248201527f636f6d6d697373696f6e5261746520697320746f6f206c617267652e000000006044820152606401610b3d565b60018160c001511015610c9e5760405163a1b63ceb60e01b815260206004820181905260248201527f76616c696461746f725468726573686f6c6420697320746f6f20736d616c6c2e6044820152606401610b3d565b60018160e001511015610cf45760405163a1b63ceb60e01b815260206004820152601b60248201527f6a61696c5468726573686f6c6420697320746f6f20736d616c6c2e00000000006044820152606401610b3d565b6001816101000151101561027b5760405163a1b63ceb60e01b815260206004820152601860248201527f6a61696c506572696f6420697320746f6f20736d616c6c2e00000000000000006044820152606401610b3d565b600081831415610d6757610d60600183610f2c565b9050610df6565b60006002610d758486610f6d565b610d7f9190610fba565b905084868281548110610d9457610d94610fa4565b90600052602060002001541115610db957610db186868684610d4b565b915050610df6565b84868281548110610dcc57610dcc610fa4565b90600052602060002001541015610df357610db18686610ded846001610f6d565b86610d4b565b90505b949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051610120810167ffffffffffffffff81118282101715610e7c57634e487b7160e01b600052604160045260246000fd5b60405290565b60006101208284031215610e9557600080fd5b610e9d610e4a565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c082015260e083013560e08201526101008084013581830152508091505092915050565b600060208284031215610f0f57600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b600082821015610f3e57610f3e610f16565b500390565b634e487b7160e01b600052601260045260246000fd5b600082610f6857610f68610f43565b500690565b60008219821115610f8057610f80610f16565b500190565b6000816000190483118215151615610f9f57610f9f610f16565b500290565b634e487b7160e01b600052603260045260246000fd5b600082610fc957610fc9610f43565b50049056fea264697066735822122037767202f998a71461c6fd1f440560e015e745ebf87a689f7ca44aa0f1f791e664736f6c634300080c0033`), }, { - // commit: https://github.com/ironbeer/oasys-genesis-contract/blob/667bec346eb31b476e0757bdfbbc0caf7564e6fa/contracts/StakeManager.sol + // commit: https://github.com/ironbeer/oasys-genesis-contract/blob/4b5025986137ce4453b7e585bfa7bb6ad2a05e25/contracts/StakeManager.sol contract: stakeManager, - code: mustDecodeCode(`0x6080604052600436106102675760003560e01c806374e2b63c11610144578063cf5c13db116100b6578063e1aca3411161007a578063e1aca34114610850578063f3621e4314610870578063f65a5ed214610890578063f8d6b1ab146108b0578063fa52c7d8146108d0578063ff3d3f601461093f57600080fd5b8063cf5c13db1461074e578063d0051adf1461076e578063d1f18ee11461079f578063dbd61d87146107f7578063df93c8421461081757600080fd5b80639168ae72116101085780639168ae72146106785780639c508219146106ae578063a6a41f44146106ce578063ac7475ed146106ee578063ad71bd361461070e578063cbc0fac61461072e57600080fd5b806374e2b63c146105c75780637b520aa8146105ec5780637befa74f1461062257806388325234146106355780639043150b1461067057600080fd5b80632ee462b3116101dd578063485cc955116101a1578063485cc955146104e65780635c4fc4c5146105065780635d94ccf6146105365780635efc766e146105565780636b2b336914610576578063724319911461059657600080fd5b80632ee462b31461043757806333f32d7814610457578063428e85621461047757806345367f231461049757806346dfce7b146104b757600080fd5b8063195afea11161022f578063195afea11461032b5780631c1b4f3a1461034b5780632168e8b41461036b57806322226367146103995780632b42ed8c146103ce5780632b47da52146103ff57600080fd5b806302fb4d851461026c5780630ddda63c1461028e578063158ef93e146102ae5780631903cf16146102dd578063190b9257146102fd575b600080fd5b34801561027857600080fd5b5061028c610287366004614cc8565b61095f565b005b34801561029a57600080fd5b5061028c6102a9366004614cf4565b610b65565b3480156102ba57600080fd5b506000546102c89060ff1681565b60405190151581526020015b60405180910390f35b3480156102e957600080fd5b5061028c6102f8366004614d9f565b610d70565b34801561030957600080fd5b5061031d610318366004614cf4565b610f69565b6040519081526020016102d4565b34801561033757600080fd5b5061031d610346366004614cc8565b610f8a565b34801561035757600080fd5b5061031d610366366004614cf4565b610fc1565b34801561037757600080fd5b5061038b610386366004614e49565b610fd1565b6040516102d4929190614eaf565b3480156103a557600080fd5b506103b96103b4366004614cc8565b6110b7565b604080519283526020830191909152016102d4565b3480156103da57600080fd5b506103ee6103e9366004614ed1565b611185565b6040516102d4959493929190614f3c565b34801561040b57600080fd5b5060015461041f906001600160a01b031681565b6040516001600160a01b0390911681526020016102d4565b34801561044357600080fd5b5061031d610452366004614cc8565b6114d2565b34801561046357600080fd5b5061031d610472366004614f9c565b611585565b34801561048357600080fd5b5061028c610492366004614d9f565b61174b565b3480156104a357600080fd5b5061031d6104b2366004614cf4565b611944565b3480156104c357600080fd5b506104d76104d2366004614ed1565b6119da565b6040516102d49392919061503b565b3480156104f257600080fd5b5061028c610501366004615071565b611c37565b34801561051257600080fd5b50610526610521366004614cc8565b611cb6565b6040516102d494939291906150e2565b34801561054257600080fd5b5061028c610551366004614cf4565b611d82565b34801561056257600080fd5b5061041f610571366004614cf4565b611e8c565b34801561058257600080fd5b5061028c61059136600461510d565b611eb6565b3480156105a257600080fd5b506105b66105b136600461512a565b611faf565b6040516102d4959493929190615188565b3480156105d357600080fd5b5060005461041f9061010090046001600160a01b031681565b3480156105f857600080fd5b5061041f61060736600461510d565b6006602052600090815260409020546001600160a01b031681565b61028c6106303660046151d5565b61204f565b34801561064157600080fd5b5061065561065036600461510d565b61221a565b604080519384526020840192909252908201526060016102d4565b61028c61229a565b34801561068457600080fd5b5061041f61069336600461510d565b6007602052600090815260409020546001600160a01b031681565b3480156106ba57600080fd5b5061031d6106c9366004614cc8565b6122cf565b3480156106da57600080fd5b5060095461041f906001600160a01b031681565b3480156106fa57600080fd5b5061028c61070936600461510d565b6123ab565b34801561071a57600080fd5b5061038b610729366004614e49565b6124b1565b34801561073a57600080fd5b5061028c610749366004614cc8565b61258f565b34801561075a57600080fd5b5061028c610769366004614cc8565b612637565b34801561077a57600080fd5b5061078e61078936600461521a565b612836565b6040516102d495949392919061524f565b3480156107ab57600080fd5b506107bf6107ba366004614cc8565b612aee565b604080516001600160a01b0390961686529315156020860152911515928401929092529015156060830152608082015260a0016102d4565b34801561080357600080fd5b5061031d6108123660046152b8565b612c68565b34801561082357600080fd5b5061031d61083236600461510d565b6001600160a01b031660009081526007602052604090206006015490565b34801561085c57600080fd5b5061028c61086b3660046151d5565b612cae565b34801561087c57600080fd5b5061028c61088b3660046152b8565b612cc7565b34801561089c57600080fd5b5061041f6108ab366004614cf4565b612dd3565b3480156108bc57600080fd5b5061028c6108cb36600461510d565b612de3565b3480156108dc57600080fd5b506109196108eb36600461510d565b6004602052600090815260409020805460018201546006909201546001600160a01b03918216929091169083565b604080516001600160a01b039485168152939092166020840152908201526060016102d4565b34801561094b57600080fd5b5061028c61095a3660046151d5565b612e45565b6001600160a01b0380831660009081526006602090815260408083205484168084526004909252909120549091166109aa576040516372898ae960e11b815260040160405180910390fd5b3341146109ca57604051631cf4735960e01b815260040160405180910390fd5b6001600160a01b038084166000908152600660209081526040808320548416835260049182905280832083548251633fa4f24560e01b815292519195610add946101009092041692633fa4f2459281830192610120928290030181865afa158015610a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5d91906152e8565b600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad49190615363565b84919087613185565b82546040519192506001600160a01b0316907f1647efd0ce9727dc31dc201c9d8d35ac687f7370adcacbd454afc6485ddabfda90600090a28015610b5e5781546040518281526001600160a01b03909116907feb7d7a49847ec491969db21a0e31b234565a9923145a2d1b56a75c9e95825802906020015b60405180910390a25b5050505050565b336000818152600460205260409020546001600160a01b0316610b9b576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316610bd15760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c489190615391565b15610c6657604051631e59ccd960e01b815260040160405180910390fd5b60008054338252600460205260408220610c8e9161010090046001600160a01b031686613264565b905080610cae57604051637bc90c0560e11b815260040160405180910390fd5b610d323333600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a9190615363565b600085613284565b604051818152339081907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba1043836906020015b60405180910390a350505050565b6001600160a01b03828116600090815260046020526040902080548492163314801590610daa575060018101546001600160a01b03163314155b15610dc857604051630101292160e31b815260040160405180910390fd5b6001600160a01b03808516600090815260046020526040902054859116610e02576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e799190615391565b15610e9757604051631e59ccd960e01b815260040160405180910390fd5b610f30600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f119190615363565b6001600160a01b03871660009081526004602052604090209086613399565b846001600160a01b03167fc11dfc9c24621433bb10587dc4bbae26a33a4aff53914e0d4c9fddf224a8cb7d85604051610b5591906153ac565b60028181548110610f7957600080fd5b600091825260209091200154905081565b600080546001600160a01b038481168352600460205260408320610fb792909161010090910416846133ab565b5090505b92915050565b60038181548110610f7957600080fd5b60606000610fe5848460058054905061353f565b9093509050826001600160401b0381111561100257611002614d0d565b60405190808252806020026020018201604052801561102b578160200160208202803683370190505b50915060005b838110156110af57600561104582876153d5565b81548110611055576110556153ed565b9060005260206000200160009054906101000a90046001600160a01b0316838281518110611085576110856153ed565b6001600160a01b0390921660209283029190910190910152806110a781615403565b915050611031565b509250929050565b60008061117a6000841161114157600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113c9190615363565b611143565b835b6001600160a01b038616600090815260046020908152604080832093835260098401825280832054600a9094019091529020549091565b909590945092505050565b6001600160a01b03841660009081526007602052604081206060918291829182918861122757600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112229190615363565b611229565b885b985061123b888860058054905061353f565b9097509150866001600160401b0381111561125857611258614d0d565b604051908082528060200260200182016040528015611281578160200160208202803683370190505b509550866001600160401b0381111561129c5761129c614d0d565b6040519080825280602002602001820160405280156112c5578160200160208202803683370190505b509450866001600160401b038111156112e0576112e0614d0d565b604051908082528060200260200182016040528015611309578160200160208202803683370190505b509350866001600160401b0381111561132457611324614d0d565b60405190808252806020026020018201604052801561134d578160200160208202803683370190505b50925060005b878110156114c5576005611367828b6153d5565b81548110611377576113776153ed565b9060005260206000200160009054906101000a90046001600160a01b03168782815181106113a7576113a76153ed565b60200260200101906001600160a01b031690816001600160a01b0316815250506113f88782815181106113dc576113dc6153ed565b602002602001015160008c85613577909392919063ffffffff16565b86828151811061140a5761140a6153ed565b60200260200101818152505061144787828151811061142b5761142b6153ed565b602002602001015160018c85613577909392919063ffffffff16565b858281518110611459576114596153ed565b60200260200101818152505061149687828151811061147a5761147a6153ed565b602002602001015160028c85613577909392919063ffffffff16565b8482815181106114a8576114a86153ed565b6020908102919091010152806114bd81615403565b915050611353565b5050945094509450945094565b600080821161155757600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561152e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115529190615363565b611559565b815b6001600160a01b038416600090815260046020526040902090925061157e9083613636565b9392505050565b600080600183600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116029190615363565b61160c919061541e565b611616919061541e565b845190915060005b84811015611742576116316001846153d5565b6000805460405163fcbb371b60e01b81526004810184905292955090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015611685573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a991906152e8565b905060005b8381101561172d57600061170a8387600460008d87815181106116d3576116d36153ed565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206136499092919063ffffffff16565b50905061171781886153d5565b965050808061172590615403565b9150506116ae565b5050808061173a90615403565b91505061161e565b50505092915050565b6001600160a01b03828116600090815260046020526040902080548492163314801590611785575060018101546001600160a01b03163314155b156117a357604051630101292160e31b815260040160405180910390fd5b6001600160a01b038085166000908152600460205260409020548591166117dd576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015611830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118549190615391565b1561187257604051631e59ccd960e01b815260040160405180910390fd5b61190b600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ec9190615363565b6001600160a01b038716600090815260046020526040902090866137b8565b846001600160a01b03167f0ad9bf1b8c026a174a2f30954417002a6ea00c9b08c1b8846c7951c687be809585604051610b5591906153ac565b60008082116119c957600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c49190615363565b6119cb565b815b9150610fbb60026003846137c5565b6001600160a01b0384166000908152600460205260408120606091829186611a7857600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a739190615363565b611a7a565b865b9650611a8e8686836007018054905061353f565b9095509150846001600160401b03811115611aab57611aab614d0d565b604051908082528060200260200182016040528015611ad4578160200160208202803683370190505b509350846001600160401b03811115611aef57611aef614d0d565b604051908082528060200260200182016040528015611b18578160200160208202803683370190505b50925060005b85811015611c2b576000600781848201611b38858c6153d5565b81548110611b4857611b486153ed565b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190208054885191935090911690879084908110611b8e57611b8e6153ed565b6001600160a01b0392831660209182029290920101528354611bb59183911660028c613577565b8354611bce9083906001600160a01b031660018d613577565b8454611be79084906001600160a01b031660008e613577565b611bf191906153d5565b611bfb91906153d5565b858381518110611c0d57611c0d6153ed565b60209081029190910101525080611c2381615403565b915050611b1e565b50509450945094915050565b334114611c5757604051631cf4735960e01b815260040160405180910390fd5b60005460ff1615611c7a5760405162dc149f60e41b815260040160405180910390fd5b6000805460016001600160a81b03199091166101006001600160a01b039586160217811790915580546001600160a01b03191691909216179055565b6001600160a01b03821660009081526007602052604081206006018054829182918291829187908110611ceb57611ceb6153ed565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115611d1e57611d1e6150aa565b6002811115611d2f57611d2f6150aa565b81526020016001820154815260200160028201548152505090508060000151816020015182604001518360400151600014158015611d71575083604001514210155b929a91995097509095509350505050565b336000818152600760205260409020546001600160a01b0316611db85760405163cf83d93d60e01b815260040160405180910390fd5b336000908152600760205260408120600601805484908110611ddc57611ddc6153ed565b9060005260206000209060030201905060008160020154905080421015611e16576040516303cb96db60e21b815260040160405180910390fd5b80611e3457604051630c8d9eab60e31b815260040160405180910390fd5b6000600283015560405184815233907fbf5f92dc2b945251eadf78c2ca629ae64053d979bfbc43a7b17a463707906bf99060200160405180910390a281546001830154611e869160ff169033906138de565b50505050565b60058181548110611e9c57600080fd5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b0381811660009081526006602052604090205433911615611ef15760405163055ee1f160e31b815260040160405180910390fd5b6001600160a01b0381166000908152600460205260409020611f1390836139fd565b60058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b038381166001600160a01b03199283168117909355841660009081526006602090815260409182902080549093168417909255519182527fd5828184f48f65962d10eac907318df85953d4e3542a0f09b5932ee3fe398bdd910160405180910390a15050565b600954604051632d73a02f60e01b81526004810185905260248101849052604481018390526060918291829182916000916001600160a01b031690632d73a02f90606401600060405180830381865afa158015612010573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120389190810190615561565b959e949d50909b5099509297509095505050505050565b6001600160a01b03808416600090815260046020526040902054849116612089576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121009190615391565b1561211e57604051631e59ccd960e01b815260040160405180910390fd5b8161213c57604051637bc90c0560e11b815260040160405180910390fd5b612147833384613a3f565b6121d53385600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561219f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c39190615363565b6121ce9060016153d5565b8686613284565b836001600160a01b0316336001600160a01b03167f8fc656e319452025372383dc27d933046d412b8253de50a10739eeaa59862be68585604051610d62929190615660565b6001600160a01b03808216600090815260076020526040812081549192839283929161224f9183916101009091041684613ae0565b60005490945061227090829061010090046001600160a01b03166001613ae0565b60005490935061229190829061010090046001600160a01b03166002613ae0565b93959294505050565b6040513481527f1de49774d094a85fc1bbbd16e8d09a865fb848218f41e2da4369f528c42ee42e9060200160405180910390a1565b6001600160a01b038083166000818152600660209081526040808320548516835260049091528120600181015491939092911614612311576000915050610fbb565b6000831161239557600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561236c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123909190615363565b612397565b825b92506123a38184613636565b949350505050565b336000818152600460205260409020546001600160a01b03166123e1576040516372898ae960e11b815260040160405180910390fd5b6001600160a01b038281166000908152600660205260409020543391161561241c5760405163055ee1f160e31b815260040160405180910390fd5b6001600160a01b03808216600090815260046020526040902060018101549091166124478286613d06565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916888616908117909155825194861685529084019290925290917f758820d0b14a01c1fa60b8d2bbef25ed1b6a5af4802e5dec3f08679255ba8bf39101610b55565b606060006124c5848460088054905061353f565b9093509050826001600160401b038111156124e2576124e2614d0d565b60405190808252806020026020018201604052801561250b578160200160208202803683370190505b50915060005b838110156110af57600861252582876153d5565b81548110612535576125356153ed565b9060005260206000200160009054906101000a90046001600160a01b0316838281518110612565576125656153ed565b6001600160a01b03909216602092830291909101909101528061258781615403565b915050612511565b336000818152600460205260409020546001600160a01b03166125c5576040516372898ae960e11b815260040160405180910390fd5b600080543382526004602052604082206125ed9161010090046001600160a01b031685613264565b60405181815290915033907f882d5671e5b36af50883197c33d48ba56ce337589958e871ba82fb0a54adf3e89060200160405180910390a28015611e8657611e86600033836138de565b6001600160a01b03808316600090815260046020526040902054839116612671576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166126a75760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271e9190615391565b1561273c57604051631e59ccd960e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420612777939092610100909104169087613d80565b90508061279757604051637bc90c0560e11b815260040160405180910390fd5b6127ef3386600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d06573d6000803e3d6000fd5b6040518181526001600160a01b0386169033907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba10438369060200160405180910390a35050505050565b6001600160a01b03831660009081526007602052604081206006810154606092839283928392919061286b908990899061353f565b9097509150866001600160401b0381111561288857612888614d0d565b6040519080825280602002602001820160405280156128b1578160200160208202803683370190505b509550866001600160401b038111156128cc576128cc614d0d565b6040519080825280602002602001820160405280156128f5578160200160208202803683370190505b509450866001600160401b0381111561291057612910614d0d565b604051908082528060200260200182016040528015612939578160200160208202803683370190505b509350866001600160401b0381111561295457612954614d0d565b60405190808252806020026020018201604052801561297d578160200160208202803683370190505b50925060005b87811015612ae15760006006830161299b838c6153d5565b815481106129ab576129ab6153ed565b6000918252602090912060408051606081019091526003909202018054829060ff1660028111156129de576129de6150aa565b60028111156129ef576129ef6150aa565b81526020016001820154815260200160028201548152505090508060000151888381518110612a2057612a206153ed565b60200260200101906002811115612a3957612a396150aa565b90816002811115612a4c57612a4c6150aa565b815250508060200151878381518110612a6757612a676153ed565b6020026020010181815250508060400151868381518110612a8a57612a8a6153ed565b6020908102919091010152604081015115801590612aac575080604001514210155b858381518110612abe57612abe6153ed565b911515602092830291909101909101525080612ad981615403565b915050612983565b5050939792965093509350565b60008080808085612b7357600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b709190615363565b95505b6001600160a01b03878116600090815260046020908152604080832060018101548b855260028201909352922054921696509060ff1660008881526003830160205260409020549015955060ff169350612bcd8188613636565b9150848015612bda575083155b8015612c5b575060005460405163fcbb371b60e01b8152600481018990526101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015612c2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5391906152e8565b60c001518210155b9250509295509295909350565b600080546001600160a01b038481168352600460209081526040808520888416865260079092528420612ca5939092610100909104169085613db9565b50949350505050565b604051634ee5a1b960e01b815260040160405180910390fd5b6001600160a01b03808316600090815260046020526040902054839116612d01576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316612d375760405163cf83d93d60e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420612d72939092610100909104169087613d80565b604080516001600160a01b03881681526020810183905291925033917f2ef606d064225d24c1514dc94907c134faee1237445c2f63f410cce0852b2054910160405180910390a28015612dcb57612dcb600033836138de565b505050505050565b60088181548110611e9c57600080fd5b336000818152600760205260409020546001600160a01b0316612e195760405163cf83d93d60e01b815260040160405180910390fd5b6000805433825260076020526040909120612e419161010090046001600160a01b0316613fc7565b5050565b6001600160a01b03808416600090815260046020526040902054849116612e7f576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316612eb55760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f2c9190615391565b15612f4a57604051631e59ccd960e01b815260040160405180910390fd5b33600090815260076020908152604080832083546001600160a01b038a81168652600490945291909320612f88928492610100900416908888613feb565b935083612fa857604051637bc90c0560e11b815260040160405180910390fd5b806006016040518060600160405280876002811115612fc957612fc96150aa565b815260208101879052604001612fe242620d2f006153d5565b9052815460018181018455600093845260209093208251600390920201805492939092839160ff1990911690836002811115613020576130206150aa565b0217905550602082015181600101556040820151816002015550506130cc6003600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613093573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b79190615363565b6130c29060016153d5565b6002919087614121565b50600954604051635692619d60e11b81526001600160a01b0388811660048301529091169063ad24c33a90602401600060405180830381600087803b15801561311457600080fd5b505af1158015613128573d6000803e3d6000fd5b50505060068201546001600160a01b038816915033907fb649014faa7a0e23357e091fb8a67a128c33dc9480f846f7e41cb3a6c9d806109061316c9060019061541e565b60405190815260200160405180910390a3505050505050565b60008281526009850160205260408120546131ae57600083815260098601602052604090208290555b6000838152600a860160205260408120546131ca9060016153d5565b6000858152600a88016020526040902081905560e0860151909150811080159061321657506003860160006132008660016153d5565b815260208101919091526040016000205460ff16155b15612ca55761010085015161322b90856153d5565b91505b81841015612ca5578361324081615403565b60008181526003890160205260409020805460ff19166001179055945061322e9050565b60008060006132748686866133ab565b6006880155925050509392505050565b6001600160a01b03808616600090815260076020526040902080549091166132fd5780546001600160a01b0387166001600160a01b031991821681178355600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180549092161790555b6001600160a01b0385166000908152600460205260409020613324908290869086866141fc565b6133326002600386856142c4565b600954604051635692619d60e11b81526001600160a01b0387811660048301529091169063ad24c33a90602401600060405180830381600087803b15801561337957600080fd5b505af115801561338d573d6000803e3d6000fd5b50505050505050505050565b6133a683838360006143aa565b505050565b6000808460060154905060006001856001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341b9190615363565b613425919061541e565b905083158061343c57508061343a83866153d5565b115b1561344e5761344b828261541e565b93505b60005b84811015613535576134646001846153d5565b60405163fcbb371b60e01b8152600481018290529093506000906001600160a01b0388169063fcbb371b9060240161012060405180830381865afa1580156134b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d491906152e8565b905060006134e3898387613649565b509050806134f2575050613523565b60a0820151613502575050613523565b613514818360a0015160646019614430565b61351e90876153d5565b955050505b8061352d81615403565b915050613451565b5050935093915050565b6000808261354d85876153d5565b1061355f5761355c858461541e565b93505b8361356a81876153d5565b915091505b935093915050565b600061362d856002016000856002811115613594576135946150aa565b60028111156135a5576135a56150aa565b81526020019081526020016000206000866001600160a01b03166001600160a01b03168152602001908152602001600020838760010160008760028111156135ef576135ef6150aa565b6002811115613600576136006150aa565b8152602080820192909252604090810160009081206001600160a01b038b168252909252902091906137c5565b95945050505050565b600061157e6004840160058501846137c5565b6000818152600284016020526040812054819060ff168061367a5750600083815260038601602052604090205460ff165b1561368a5750600090508061356f565b6136948584613636565b9050604983106136d4578360c001518110156136b3576000915061356f565b629896806136c382610a3461567b565b6136cd919061569a565b915061376d565b806136e45750600090508061356f565b6136f06019600a615798565b61370185608001516064601961445c565b61370b908361567b565b613715919061569a565b915081613725576000915061356f565b6137488460600151856040015161373c919061567b565b6301e13380601961445c565b613752908361567b565b91506137606019600a615798565b61376a908361569a565b91505b6000838152600a8601602052604090205480156137af5760008481526009870160205260409020546137ab846137a3848461541e565b836019614430565b9350505b50935093915050565b6133a683838360016143aa565b82546000908015806137f3575082856000815481106137e6576137e66153ed565b9060005260206000200154115b1561380257600091505061157e565b828561380f60018461541e565b8154811061381f5761381f6153ed565b90600052602060002001541161385e578361383b60018361541e565b8154811061384b5761384b6153ed565b906000526020600020015491505061157e565b6001811180156138945750828561387660028461541e565b81548110613886576138866153ed565b906000526020600020015411155b156138a5578361383b60028361541e565b60006138b48685600085614498565b90508481815481106138c8576138c86153ed565b9060005260206000200154925050509392505050565b6000808460028111156138f3576138f36150aa565b1415613952576040516001600160a01b038416908390600081818185875af1925050503d8060008114613942576040519150601f19603f3d011682016040523d82523d6000602084013e613947565b606091505b5050809150506139d4565b61395b84614540565b60405163a9059cbb60e01b81526001600160a01b03858116600483015260248201859052919091169063a9059cbb906044015b6020604051808303816000875af11580156139ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139d19190615391565b90505b80611e865783604051630db5347560e11b81526004016139f491906157a4565b60405180910390fd5b81546001600160a01b031615613a2557604051621d934160e11b815260040160405180910390fd5b81546001600160a01b03191633178255612e418282613d06565b6000836002811115613a5357613a536150aa565b1415613a79578034146133a657604051630fe5b06560e11b815260040160405180910390fd5b3415613a985760405163a745ac8560e01b815260040160405180910390fd5b6000613aa384614540565b6040516323b872dd60e01b81526001600160a01b0385811660048301523060248301526044820185905291909116906323b872dd9060640161398e565b600080846003016000846002811115613afb57613afb6150aa565b6002811115613b0c57613b0c6150aa565b8152602081019190915260400160002054905080613b2e57600091505061157e565b6000846001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b929190615363565b90506000613ba160018461541e565b9050600081118015613c04575081876003016000876002811115613bc757613bc76150aa565b6002811115613bd857613bd86150aa565b81526020019081526020016000208281548110613bf757613bf76153ed565b9060005260206000200154115b15613c175780613c13816157b2565b9150505b81876003016000876002811115613c3057613c306150aa565b6002811115613c4157613c416150aa565b81526020019081526020016000208281548110613c6057613c606153ed565b90600052602060002001541115613c7d576000935050505061157e565b6000805b828111613cfa57886004016000886002811115613ca057613ca06150aa565b6002811115613cb157613cb16150aa565b81526020019081526020016000208181548110613cd057613cd06153ed565b906000526020600020015482613ce691906153d5565b915080613cf281615403565b915050613c81565b50979650505050505050565b6001600160a01b038116613d2d57604051637138356f60e01b815260040160405180910390fd5b81546001600160a01b0382811691161415613d5b5760405163e037058f60e01b815260040160405180910390fd5b60019190910180546001600160a01b0319166001600160a01b03909216919091179055565b6000806000613d9187878787613db9565b86546001600160a01b0316600090815260058a01602052604090205592505050949350505050565b81546001600160a01b039081166000908152600586016020908152604080832054815163900cf0cf60e01b81529151939490938593600193928a169263900cf0cf92600480830193928290030181865afa158015613e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3f9190615363565b613e49919061541e565b9050831580613e60575080613e5e83866153d5565b115b15613e7257613e6f828261541e565b93505b60005b84811015613fbc57613e886001846153d5565b8654909350600090613ea7908a906001600160a01b0316600287613577565b8754613ec0908b906001600160a01b0316600188613577565b8854613ed9908c906001600160a01b0316600089613577565b613ee391906153d5565b613eed91906153d5565b905080613efa5750613faa565b600080613f788a6001600160a01b031663fcbb371b886040518263ffffffff1660e01b8152600401613f2e91815260200190565b61012060405180830381865afa158015613f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f7091906152e8565b8a90886145ab565b915091508160001415613f8d57505050613faa565b613f9a8284836019614430565b613fa490886153d5565b96505050505b80613fb481615403565b915050613e75565b505094509492505050565b613fd3828260016145fc565b613fdf828260026145fc565b612e41828260006145fc565b6000614107866002016000856002811115614008576140086150aa565b6002811115614019576140196150aa565b81526020808201929092526040908101600090812088546001600160a01b03908116835290845290829020825163900cf0cf60e01b815292519093918a169263900cf0cf9260048083019391928290030181865afa15801561407f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140a39190615363565b6140ae9060016153d5565b848960010160008860028111156140c7576140c76150aa565b60028111156140d8576140d86150aa565b8152602080820192909252604090810160009081208b546001600160a01b031682529092529020929190614121565b9150816141165750600061362d565b612ca5848684614922565b835460009080158061415857508561413a60018361541e565b8154811061414a5761414a6153ed565b906000526020600020015484105b1561417657604051630eae4c9760e01b815260040160405180910390fd5b60006141838787876149a2565b90506000868281548110614199576141996153ed565b90600052602060002001549050808511156141b457806141b6565b845b945084156141f057848783815481106141d1576141d16153ed565b9060005260206000200160008282546141ea919061541e565b90915550505b50929695505050505050565b6142ab856002016000846002811115614217576142176150aa565b6002811115614228576142286150aa565b81526020808201929092526040908101600090812087546001600160a01b031682529092528120908690849060018a019087600281111561426b5761426b6150aa565b600281111561427c5761427c6150aa565b8152602080820192909252604090810160009081208a546001600160a01b0316825290925290209291906142c4565b8454610b5e90849086906001600160a01b031684614bb2565b83546001811180156142fb5750846142dd60018361541e565b815481106142ed576142ed6153ed565b906000526020600020015483105b801561432c57508461430e60028361541e565b8154811061431e5761431e6153ed565b906000526020600020015483105b1561434a57604051630eae4c9760e01b815260040160405180910390fd5b60006143578686866149a2565b8654925090505b81811015612dcb5782858281548110614379576143796153ed565b90600052602060002001600082825461439291906153d5565b909155508190506143a281615403565b91505061435e565b815160005b81811015612dcb5760008482815181106143cb576143cb6153ed565b6020026020010151905085811180156143fb5750600081815260028801602052604090205460ff16151584151514155b1561441d5760008181526002880160205260409020805460ff19168515151790555b508061442881615403565b9150506143af565b600061443d82600a615798565b61444885858561445c565b614452908761567b565b61362d919061569a565b60008061446a8360016153d5565b61447590600a615798565b61447f908661567b565b9050600a61448d858361569a565b6144529060056153d5565b6000818314156144b4576144ad60018361541e565b90506123a3565b600060026144c284866153d5565b6144cc919061569a565b9050848682815481106144e1576144e16153ed565b90600052602060002001541115614506576144fe86868684614498565b9150506123a3565b84868281548110614519576145196153ed565b9060005260206000200154101561362d576144fe868661453a8460016153d5565b86614498565b60006001826002811115614556576145566150aa565b141561456a57506001602960991b01919050565b600282600281111561457e5761457e6150aa565b141561459257506002602960991b01919050565b604051638698bf3760e01b815260040160405180910390fd5b6000806145b9858585613649565b9092509050816145cc576000915061356f565b60a08401511561356f576145e8828560a0015160646019614430565b6145f2908361541e565b9150935093915050565b6000614609848484613ae0565b9050806146165750505050565b6000846003016000846002811115614630576146306150aa565b6002811115614641576146416150aa565b8152602001908152602001600020805490509050836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146b79190615363565b8560030160008560028111156146cf576146cf6150aa565b60028111156146e0576146e06150aa565b81526020019081526020016000206001836146fb919061541e565b8154811061470b5761470b6153ed565b9060005260206000200154116147a657846003016000846002811115614733576147336150aa565b6002811115614744576147446150aa565b8152602001908152602001600020600061475e9190614c32565b846004016000846002811115614776576147766150aa565b6002811115614787576147876150aa565b815260200190815260200160002060006147a19190614c32565b61490b565b60405180602001604052808660030160008660028111156147c9576147c96150aa565b60028111156147da576147da6150aa565b81526020019081526020016000206001846147f5919061541e565b81548110614805576148056153ed565b906000526020600020015481525085600301600085600281111561482b5761482b6150aa565b600281111561483c5761483c6150aa565b81526020810191909152604001600020614857916001614c53565b50604051806020016040528086600401600086600281111561487b5761487b6150aa565b600281111561488c5761488c6150aa565b81526020019081526020016000206001846148a7919061541e565b815481106148b7576148b76153ed565b90600052602060002001548152508560040160008560028111156148dd576148dd6150aa565b60028111156148ee576148ee6150aa565b81526020810191909152604001600020614909916001614c53565b505b8454610b5e9084906001600160a01b0316846138de565b611e8683600501836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061498b9190615363565b6149969060016153d5565b60048601919084614121565b8254600090806149dd57505082546001818101855560008581526020808220909301849055845491820185558481529182200181905561157e565b60006149ea60018361541e565b90506000868281548110614a0057614a006153ed565b9060005260206000200154905080851415614a1f5750915061157e9050565b80851115614a875786546001810188556000888152602090200185905585548690819084908110614a5257614a526153ed565b6000918252602080832090910154835460018181018655948452919092200155614a7d9083906153d5565b935050505061157e565b600082118015614abc575086614a9e60018461541e565b81548110614aae57614aae6153ed565b906000526020600020015485145b15614acc57614a7d60018361541e565b86878381548110614adf57614adf6153ed565b6000918252602080832090910154835460018101855593835291209091015585548690819084908110614b1457614b146153ed565b6000918252602080832090910154835460018101855593835291209091015586548590889084908110614b4957614b496153ed565b6000918252602090912001558115614b875785614b6760018461541e565b81548110614b7757614b776153ed565b9060005260206000200154614b8a565b60005b868381548110614b9c57614b9c6153ed565b60009182526020909120015550915061157e9050565b6001600160a01b038216600090815260088501602052604090205460ff16614c20576001600160a01b038216600081815260088601602090815260408220805460ff191660019081179091556007880180549182018155835291200180546001600160a01b03191690911790555b611e86600485016005860185846142c4565b5080546000825590600052602060002090810190614c509190614c9e565b50565b828054828255906000526020600020908101928215614c8e579160200282015b82811115614c8e578251825591602001919060010190614c73565b50614c9a929150614c9e565b5090565b5b80821115614c9a5760008155600101614c9f565b6001600160a01b0381168114614c5057600080fd5b60008060408385031215614cdb57600080fd5b8235614ce681614cb3565b946020939093013593505050565b600060208284031215614d0657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715614d4657614d46614d0d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614d7457614d74614d0d565b604052919050565b60006001600160401b03821115614d9557614d95614d0d565b5060051b60200190565b60008060408385031215614db257600080fd5b8235614dbd81614cb3565b91506020838101356001600160401b03811115614dd957600080fd5b8401601f81018613614dea57600080fd5b8035614dfd614df882614d7c565b614d4c565b81815260059190911b82018301908381019088831115614e1c57600080fd5b928401925b82841015614e3a57833582529284019290840190614e21565b80955050505050509250929050565b60008060408385031215614e5c57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015614ea45781516001600160a01b031687529582019590820190600101614e7f565b509495945050505050565b604081526000614ec26040830185614e6b565b90508260208301529392505050565b60008060008060808587031215614ee757600080fd5b8435614ef281614cb3565b966020860135965060408601359560600135945092505050565b600081518084526020808501945080840160005b83811015614ea457815187529582019590820190600101614f20565b60a081526000614f4f60a0830188614e6b565b8281036020840152614f618188614f0c565b90508281036040840152614f758187614f0c565b90508281036060840152614f898186614f0c565b9150508260808301529695505050505050565b60008060408385031215614faf57600080fd5b82356001600160401b03811115614fc557600080fd5b8301601f81018513614fd657600080fd5b80356020614fe6614df883614d7c565b82815260059290921b8301810191818101908884111561500557600080fd5b938201935b8385101561502c57843561501d81614cb3565b8252938201939082019061500a565b98969091013596505050505050565b60608152600061504e6060830186614e6b565b82810360208401526150608186614f0c565b915050826040830152949350505050565b6000806040838503121561508457600080fd5b823561508f81614cb3565b9150602083013561509f81614cb3565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b600381106150de57634e487b7160e01b600052602160045260246000fd5b9052565b608081016150f082876150c0565b846020830152836040830152821515606083015295945050505050565b60006020828403121561511f57600080fd5b813561157e81614cb3565b60008060006060848603121561513f57600080fd5b505081359360208301359350604090920135919050565b600081518084526020808501945080840160005b83811015614ea457815115158752958201959082019060010161516a565b60a08152600061519b60a0830188614e6b565b82810360208401526151ad8188614e6b565b905082810360408401526151c18187614f0c565b90508281036060840152614f898186615156565b6000806000606084860312156151ea57600080fd5b83356151f581614cb3565b925060208401356003811061520957600080fd5b929592945050506040919091013590565b60008060006060848603121561522f57600080fd5b833561523a81614cb3565b95602085013595506040909401359392505050565b60a0808252865190820181905260009060209060c0840190828a01845b8281101561528f5761527f8483516150c0565b928401929084019060010161526c565b505050838103828501526152a38189614f0c565b91505082810360408401526151c18187614f0c565b6000806000606084860312156152cd57600080fd5b83356152d881614cb3565b9250602084013561520981614cb3565b600061012082840312156152fb57600080fd5b615303614d23565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b60006020828403121561537557600080fd5b5051919050565b8051801515811461538c57600080fd5b919050565b6000602082840312156153a357600080fd5b61157e8261537c565b60208152600061157e6020830184614f0c565b634e487b7160e01b600052601160045260246000fd5b600082198211156153e8576153e86153bf565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415615417576154176153bf565b5060010190565b600082821015615430576154306153bf565b500390565b600082601f83011261544657600080fd5b81516020615456614df883614d7c565b82815260059290921b8401810191818101908684111561547557600080fd5b8286015b8481101561549957805161548c81614cb3565b8352918301918301615479565b509695505050505050565b600082601f8301126154b557600080fd5b815160206154c5614df883614d7c565b82815260059290921b840181019181810190868411156154e457600080fd5b8286015b84811015615499576154f98161537c565b83529183019183016154e8565b600082601f83011261551757600080fd5b81516020615527614df883614d7c565b82815260059290921b8401810191818101908684111561554657600080fd5b8286015b84811015615499578051835291830191830161554a565b600080600080600080600060e0888a03121561557c57600080fd5b87516001600160401b038082111561559357600080fd5b61559f8b838c01615435565b985060208a01519150808211156155b557600080fd5b6155c18b838c01615435565b975060408a01519150808211156155d757600080fd5b6155e38b838c016154a4565b965060608a01519150808211156155f957600080fd5b6156058b838c016154a4565b955060808a015191508082111561561b57600080fd5b6156278b838c01615506565b945060a08a015191508082111561563d57600080fd5b5061564a8a828b016154a4565b92505060c0880151905092959891949750929550565b6040810161566e82856150c0565b8260208301529392505050565b6000816000190483118215151615615695576156956153bf565b500290565b6000826156b757634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156110af5781600019048211156156dd576156dd6153bf565b808516156156ea57918102915b93841c93908002906156c1565b60008261570657506001610fbb565b8161571357506000610fbb565b816001811461572957600281146157335761574f565b6001915050610fbb565b60ff841115615744576157446153bf565b50506001821b610fbb565b5060208310610133831016604e8410600b8410161715615772575081810a610fbb565b61577c83836156bc565b8060001904821115615790576157906153bf565b029392505050565b600061157e83836156f7565b60208101610fbb82846150c0565b6000816157c1576157c16153bf565b50600019019056fea26469706673582212206415b47e81e259b9abcfba166ca2b9fec49587fc3c072e6d3c720c3fcb31ccee64736f6c634300080c0033`), + code: mustDecodeCode(`0x6080604052600436106102675760003560e01c806374e2b63c11610144578063cf5c13db116100b6578063e1aca3411161007a578063e1aca34114610850578063f3621e4314610870578063f65a5ed214610890578063f8d6b1ab146108b0578063fa52c7d8146108d0578063ff3d3f601461093f57600080fd5b8063cf5c13db1461074e578063d0051adf1461076e578063d1f18ee11461079f578063dbd61d87146107f7578063df93c8421461081757600080fd5b80639168ae72116101085780639168ae72146106785780639c508219146106ae578063a6a41f44146106ce578063ac7475ed146106ee578063ad71bd361461070e578063cbc0fac61461072e57600080fd5b806374e2b63c146105c75780637b520aa8146105ec5780637befa74f1461062257806388325234146106355780639043150b1461067057600080fd5b80632ee462b3116101dd578063485cc955116101a1578063485cc955146104e65780635c4fc4c5146105065780635d94ccf6146105365780635efc766e146105565780636b2b336914610576578063724319911461059657600080fd5b80632ee462b31461043757806333f32d7814610457578063428e85621461047757806345367f231461049757806346dfce7b146104b757600080fd5b8063195afea11161022f578063195afea11461032b5780631c1b4f3a1461034b5780632168e8b41461036b57806322226367146103995780632b42ed8c146103ce5780632b47da52146103ff57600080fd5b806302fb4d851461026c5780630ddda63c1461028e578063158ef93e146102ae5780631903cf16146102dd578063190b9257146102fd575b600080fd5b34801561027857600080fd5b5061028c610287366004614cc8565b61095f565b005b34801561029a57600080fd5b5061028c6102a9366004614cf4565b610b65565b3480156102ba57600080fd5b506000546102c89060ff1681565b60405190151581526020015b60405180910390f35b3480156102e957600080fd5b5061028c6102f8366004614d9f565b610d70565b34801561030957600080fd5b5061031d610318366004614cf4565b610f69565b6040519081526020016102d4565b34801561033757600080fd5b5061031d610346366004614cc8565b610f8a565b34801561035757600080fd5b5061031d610366366004614cf4565b610fc1565b34801561037757600080fd5b5061038b610386366004614e49565b610fd1565b6040516102d4929190614eaf565b3480156103a557600080fd5b506103b96103b4366004614cc8565b6110b7565b604080519283526020830191909152016102d4565b3480156103da57600080fd5b506103ee6103e9366004614ed1565b611185565b6040516102d4959493929190614f3c565b34801561040b57600080fd5b5060015461041f906001600160a01b031681565b6040516001600160a01b0390911681526020016102d4565b34801561044357600080fd5b5061031d610452366004614cc8565b6114d2565b34801561046357600080fd5b5061031d610472366004614f9c565b611585565b34801561048357600080fd5b5061028c610492366004614d9f565b61174b565b3480156104a357600080fd5b5061031d6104b2366004614cf4565b611944565b3480156104c357600080fd5b506104d76104d2366004614ed1565b6119da565b6040516102d49392919061503b565b3480156104f257600080fd5b5061028c610501366004615071565b611c37565b34801561051257600080fd5b50610526610521366004614cc8565b611cb6565b6040516102d494939291906150e2565b34801561054257600080fd5b5061028c610551366004614cf4565b611d82565b34801561056257600080fd5b5061041f610571366004614cf4565b611e8c565b34801561058257600080fd5b5061028c61059136600461510d565b611eb6565b3480156105a257600080fd5b506105b66105b136600461512a565b611faf565b6040516102d4959493929190615188565b3480156105d357600080fd5b5060005461041f9061010090046001600160a01b031681565b3480156105f857600080fd5b5061041f61060736600461510d565b6006602052600090815260409020546001600160a01b031681565b61028c6106303660046151d5565b61204f565b34801561064157600080fd5b5061065561065036600461510d565b61221a565b604080519384526020840192909252908201526060016102d4565b61028c61229a565b34801561068457600080fd5b5061041f61069336600461510d565b6007602052600090815260409020546001600160a01b031681565b3480156106ba57600080fd5b5061031d6106c9366004614cc8565b6122cf565b3480156106da57600080fd5b5060095461041f906001600160a01b031681565b3480156106fa57600080fd5b5061028c61070936600461510d565b6123ab565b34801561071a57600080fd5b5061038b610729366004614e49565b6124b1565b34801561073a57600080fd5b5061028c610749366004614cc8565b61258f565b34801561075a57600080fd5b5061028c610769366004614cc8565b612637565b34801561077a57600080fd5b5061078e61078936600461521a565b612836565b6040516102d495949392919061524f565b3480156107ab57600080fd5b506107bf6107ba366004614cc8565b612aee565b604080516001600160a01b0390961686529315156020860152911515928401929092529015156060830152608082015260a0016102d4565b34801561080357600080fd5b5061031d6108123660046152b8565b612c68565b34801561082357600080fd5b5061031d61083236600461510d565b6001600160a01b031660009081526007602052604090206006015490565b34801561085c57600080fd5b5061028c61086b3660046151d5565b612cae565b34801561087c57600080fd5b5061028c61088b3660046152b8565b612cc7565b34801561089c57600080fd5b5061041f6108ab366004614cf4565b612dd3565b3480156108bc57600080fd5b5061028c6108cb36600461510d565b612de3565b3480156108dc57600080fd5b506109196108eb36600461510d565b6004602052600090815260409020805460018201546006909201546001600160a01b03918216929091169083565b604080516001600160a01b039485168152939092166020840152908201526060016102d4565b34801561094b57600080fd5b5061028c61095a3660046151d5565b612e45565b6001600160a01b0380831660009081526006602090815260408083205484168084526004909252909120549091166109aa576040516372898ae960e11b815260040160405180910390fd5b3341146109ca57604051631cf4735960e01b815260040160405180910390fd5b6001600160a01b038084166000908152600660209081526040808320548416835260049182905280832083548251633fa4f24560e01b815292519195610add946101009092041692633fa4f2459281830192610120928290030181865afa158015610a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5d91906152e8565b600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad49190615363565b84919087613185565b82546040519192506001600160a01b0316907f1647efd0ce9727dc31dc201c9d8d35ac687f7370adcacbd454afc6485ddabfda90600090a28015610b5e5781546040518281526001600160a01b03909116907feb7d7a49847ec491969db21a0e31b234565a9923145a2d1b56a75c9e95825802906020015b60405180910390a25b5050505050565b336000818152600460205260409020546001600160a01b0316610b9b576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316610bd15760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c489190615391565b15610c6657604051631e59ccd960e01b815260040160405180910390fd5b60008054338252600460205260408220610c8e9161010090046001600160a01b031686613264565b905080610cae57604051637bc90c0560e11b815260040160405180910390fd5b610d323333600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a9190615363565b600085613284565b604051818152339081907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba1043836906020015b60405180910390a350505050565b6001600160a01b03828116600090815260046020526040902080548492163314801590610daa575060018101546001600160a01b03163314155b15610dc857604051630101292160e31b815260040160405180910390fd5b6001600160a01b03808516600090815260046020526040902054859116610e02576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e799190615391565b15610e9757604051631e59ccd960e01b815260040160405180910390fd5b610f30600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f119190615363565b6001600160a01b03871660009081526004602052604090209086613399565b846001600160a01b03167fc11dfc9c24621433bb10587dc4bbae26a33a4aff53914e0d4c9fddf224a8cb7d85604051610b5591906153ac565b60028181548110610f7957600080fd5b600091825260209091200154905081565b600080546001600160a01b038481168352600460205260408320610fb792909161010090910416846133ab565b5090505b92915050565b60038181548110610f7957600080fd5b60606000610fe5848460058054905061353f565b9093509050826001600160401b0381111561100257611002614d0d565b60405190808252806020026020018201604052801561102b578160200160208202803683370190505b50915060005b838110156110af57600561104582876153d5565b81548110611055576110556153ed565b9060005260206000200160009054906101000a90046001600160a01b0316838281518110611085576110856153ed565b6001600160a01b0390921660209283029190910190910152806110a781615403565b915050611031565b509250929050565b60008061117a6000841161114157600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113c9190615363565b611143565b835b6001600160a01b038616600090815260046020908152604080832093835260098401825280832054600a9094019091529020549091565b909590945092505050565b6001600160a01b03841660009081526007602052604081206060918291829182918861122757600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112229190615363565b611229565b885b985061123b888860058054905061353f565b9097509150866001600160401b0381111561125857611258614d0d565b604051908082528060200260200182016040528015611281578160200160208202803683370190505b509550866001600160401b0381111561129c5761129c614d0d565b6040519080825280602002602001820160405280156112c5578160200160208202803683370190505b509450866001600160401b038111156112e0576112e0614d0d565b604051908082528060200260200182016040528015611309578160200160208202803683370190505b509350866001600160401b0381111561132457611324614d0d565b60405190808252806020026020018201604052801561134d578160200160208202803683370190505b50925060005b878110156114c5576005611367828b6153d5565b81548110611377576113776153ed565b9060005260206000200160009054906101000a90046001600160a01b03168782815181106113a7576113a76153ed565b60200260200101906001600160a01b031690816001600160a01b0316815250506113f88782815181106113dc576113dc6153ed565b602002602001015160008c85613577909392919063ffffffff16565b86828151811061140a5761140a6153ed565b60200260200101818152505061144787828151811061142b5761142b6153ed565b602002602001015160018c85613577909392919063ffffffff16565b858281518110611459576114596153ed565b60200260200101818152505061149687828151811061147a5761147a6153ed565b602002602001015160028c85613577909392919063ffffffff16565b8482815181106114a8576114a86153ed565b6020908102919091010152806114bd81615403565b915050611353565b5050945094509450945094565b600080821161155757600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561152e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115529190615363565b611559565b815b6001600160a01b038416600090815260046020526040902090925061157e9083613636565b9392505050565b600080600183600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116029190615363565b61160c919061541e565b611616919061541e565b845190915060005b84811015611742576116316001846153d5565b6000805460405163fcbb371b60e01b81526004810184905292955090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015611685573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a991906152e8565b905060005b8381101561172d57600061170a8387600460008d87815181106116d3576116d36153ed565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206136499092919063ffffffff16565b50905061171781886153d5565b965050808061172590615403565b9150506116ae565b5050808061173a90615403565b91505061161e565b50505092915050565b6001600160a01b03828116600090815260046020526040902080548492163314801590611785575060018101546001600160a01b03163314155b156117a357604051630101292160e31b815260040160405180910390fd5b6001600160a01b038085166000908152600460205260409020548591166117dd576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015611830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118549190615391565b1561187257604051631e59ccd960e01b815260040160405180910390fd5b61190b600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ec9190615363565b6001600160a01b038716600090815260046020526040902090866137b8565b846001600160a01b03167f0ad9bf1b8c026a174a2f30954417002a6ea00c9b08c1b8846c7951c687be809585604051610b5591906153ac565b60008082116119c957600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c49190615363565b6119cb565b815b9150610fbb60026003846137c5565b6001600160a01b0384166000908152600460205260408120606091829186611a7857600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a739190615363565b611a7a565b865b9650611a8e8686836007018054905061353f565b9095509150846001600160401b03811115611aab57611aab614d0d565b604051908082528060200260200182016040528015611ad4578160200160208202803683370190505b509350846001600160401b03811115611aef57611aef614d0d565b604051908082528060200260200182016040528015611b18578160200160208202803683370190505b50925060005b85811015611c2b576000600781848201611b38858c6153d5565b81548110611b4857611b486153ed565b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190208054885191935090911690879084908110611b8e57611b8e6153ed565b6001600160a01b0392831660209182029290920101528354611bb59183911660028c613577565b8354611bce9083906001600160a01b031660018d613577565b8454611be79084906001600160a01b031660008e613577565b611bf191906153d5565b611bfb91906153d5565b858381518110611c0d57611c0d6153ed565b60209081029190910101525080611c2381615403565b915050611b1e565b50509450945094915050565b334114611c5757604051631cf4735960e01b815260040160405180910390fd5b60005460ff1615611c7a5760405162dc149f60e41b815260040160405180910390fd5b6000805460016001600160a81b03199091166101006001600160a01b039586160217811790915580546001600160a01b03191691909216179055565b6001600160a01b03821660009081526007602052604081206006018054829182918291829187908110611ceb57611ceb6153ed565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115611d1e57611d1e6150aa565b6002811115611d2f57611d2f6150aa565b81526020016001820154815260200160028201548152505090508060000151816020015182604001518360400151600014158015611d71575083604001514210155b929a91995097509095509350505050565b336000818152600760205260409020546001600160a01b0316611db85760405163cf83d93d60e01b815260040160405180910390fd5b336000908152600760205260408120600601805484908110611ddc57611ddc6153ed565b9060005260206000209060030201905060008160020154905080421015611e16576040516303cb96db60e21b815260040160405180910390fd5b80611e3457604051630c8d9eab60e31b815260040160405180910390fd5b6000600283015560405184815233907fbf5f92dc2b945251eadf78c2ca629ae64053d979bfbc43a7b17a463707906bf99060200160405180910390a281546001830154611e869160ff169033906138de565b50505050565b60058181548110611e9c57600080fd5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b0381811660009081526006602052604090205433911615611ef15760405163055ee1f160e31b815260040160405180910390fd5b6001600160a01b0381166000908152600460205260409020611f1390836139fd565b60058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b038381166001600160a01b03199283168117909355841660009081526006602090815260409182902080549093168417909255519182527fd5828184f48f65962d10eac907318df85953d4e3542a0f09b5932ee3fe398bdd910160405180910390a15050565b600954604051632d73a02f60e01b81526004810185905260248101849052604481018390526060918291829182916000916001600160a01b031690632d73a02f90606401600060405180830381865afa158015612010573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120389190810190615561565b959e949d50909b5099509297509095505050505050565b6001600160a01b03808416600090815260046020526040902054849116612089576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121009190615391565b1561211e57604051631e59ccd960e01b815260040160405180910390fd5b8161213c57604051637bc90c0560e11b815260040160405180910390fd5b612147833384613a3f565b6121d53385600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561219f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c39190615363565b6121ce9060016153d5565b8686613284565b836001600160a01b0316336001600160a01b03167f8fc656e319452025372383dc27d933046d412b8253de50a10739eeaa59862be68585604051610d62929190615660565b6001600160a01b03808216600090815260076020526040812081549192839283929161224f9183916101009091041684613ae0565b60005490945061227090829061010090046001600160a01b03166001613ae0565b60005490935061229190829061010090046001600160a01b03166002613ae0565b93959294505050565b6040513481527f1de49774d094a85fc1bbbd16e8d09a865fb848218f41e2da4369f528c42ee42e9060200160405180910390a1565b6001600160a01b038083166000818152600660209081526040808320548516835260049091528120600181015491939092911614612311576000915050610fbb565b6000831161239557600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561236c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123909190615363565b612397565b825b92506123a38184613636565b949350505050565b336000818152600460205260409020546001600160a01b03166123e1576040516372898ae960e11b815260040160405180910390fd5b6001600160a01b038281166000908152600660205260409020543391161561241c5760405163055ee1f160e31b815260040160405180910390fd5b6001600160a01b03808216600090815260046020526040902060018101549091166124478286613d06565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916888616908117909155825194861685529084019290925290917f758820d0b14a01c1fa60b8d2bbef25ed1b6a5af4802e5dec3f08679255ba8bf39101610b55565b606060006124c5848460088054905061353f565b9093509050826001600160401b038111156124e2576124e2614d0d565b60405190808252806020026020018201604052801561250b578160200160208202803683370190505b50915060005b838110156110af57600861252582876153d5565b81548110612535576125356153ed565b9060005260206000200160009054906101000a90046001600160a01b0316838281518110612565576125656153ed565b6001600160a01b03909216602092830291909101909101528061258781615403565b915050612511565b336000818152600460205260409020546001600160a01b03166125c5576040516372898ae960e11b815260040160405180910390fd5b600080543382526004602052604082206125ed9161010090046001600160a01b031685613264565b60405181815290915033907f882d5671e5b36af50883197c33d48ba56ce337589958e871ba82fb0a54adf3e89060200160405180910390a28015611e8657611e86600033836138de565b6001600160a01b03808316600090815260046020526040902054839116612671576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166126a75760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271e9190615391565b1561273c57604051631e59ccd960e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420612777939092610100909104169087613d80565b90508061279757604051637bc90c0560e11b815260040160405180910390fd5b6127ef3386600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d06573d6000803e3d6000fd5b6040518181526001600160a01b0386169033907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba10438369060200160405180910390a35050505050565b6001600160a01b03831660009081526007602052604081206006810154606092839283928392919061286b908990899061353f565b9097509150866001600160401b0381111561288857612888614d0d565b6040519080825280602002602001820160405280156128b1578160200160208202803683370190505b509550866001600160401b038111156128cc576128cc614d0d565b6040519080825280602002602001820160405280156128f5578160200160208202803683370190505b509450866001600160401b0381111561291057612910614d0d565b604051908082528060200260200182016040528015612939578160200160208202803683370190505b509350866001600160401b0381111561295457612954614d0d565b60405190808252806020026020018201604052801561297d578160200160208202803683370190505b50925060005b87811015612ae15760006006830161299b838c6153d5565b815481106129ab576129ab6153ed565b6000918252602090912060408051606081019091526003909202018054829060ff1660028111156129de576129de6150aa565b60028111156129ef576129ef6150aa565b81526020016001820154815260200160028201548152505090508060000151888381518110612a2057612a206153ed565b60200260200101906002811115612a3957612a396150aa565b90816002811115612a4c57612a4c6150aa565b815250508060200151878381518110612a6757612a676153ed565b6020026020010181815250508060400151868381518110612a8a57612a8a6153ed565b6020908102919091010152604081015115801590612aac575080604001514210155b858381518110612abe57612abe6153ed565b911515602092830291909101909101525080612ad981615403565b915050612983565b5050939792965093509350565b60008080808085612b7357600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b709190615363565b95505b6001600160a01b03878116600090815260046020908152604080832060018101548b855260028201909352922054921696509060ff1660008881526003830160205260409020549015955060ff169350612bcd8188613636565b9150848015612bda575083155b8015612c5b575060005460405163fcbb371b60e01b8152600481018990526101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015612c2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5391906152e8565b60c001518210155b9250509295509295909350565b600080546001600160a01b038481168352600460209081526040808520888416865260079092528420612ca5939092610100909104169085613db9565b50949350505050565b604051634ee5a1b960e01b815260040160405180910390fd5b6001600160a01b03808316600090815260046020526040902054839116612d01576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316612d375760405163cf83d93d60e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420612d72939092610100909104169087613d80565b604080516001600160a01b03881681526020810183905291925033917f2ef606d064225d24c1514dc94907c134faee1237445c2f63f410cce0852b2054910160405180910390a28015612dcb57612dcb600033836138de565b505050505050565b60088181548110611e9c57600080fd5b336000818152600760205260409020546001600160a01b0316612e195760405163cf83d93d60e01b815260040160405180910390fd5b6000805433825260076020526040909120612e419161010090046001600160a01b0316613fc7565b5050565b6001600160a01b03808416600090815260046020526040902054849116612e7f576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316612eb55760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f2c9190615391565b15612f4a57604051631e59ccd960e01b815260040160405180910390fd5b33600090815260076020908152604080832083546001600160a01b038a81168652600490945291909320612f88928492610100900416908888613feb565b935083612fa857604051637bc90c0560e11b815260040160405180910390fd5b806006016040518060600160405280876002811115612fc957612fc96150aa565b815260208101879052604001612fe242620d2f006153d5565b9052815460018181018455600093845260209093208251600390920201805492939092839160ff1990911690836002811115613020576130206150aa565b0217905550602082015181600101556040820151816002015550506130cc6003600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613093573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b79190615363565b6130c29060016153d5565b6002919087614121565b50600954604051635692619d60e11b81526001600160a01b0388811660048301529091169063ad24c33a90602401600060405180830381600087803b15801561311457600080fd5b505af1158015613128573d6000803e3d6000fd5b50505060068201546001600160a01b038816915033907fb649014faa7a0e23357e091fb8a67a128c33dc9480f846f7e41cb3a6c9d806109061316c9060019061541e565b60405190815260200160405180910390a3505050505050565b60008281526009850160205260408120546131ae57600083815260098601602052604090208290555b6000838152600a860160205260408120546131ca9060016153d5565b6000858152600a88016020526040902081905560e0860151909150811080159061321657506003860160006132008660016153d5565b815260208101919091526040016000205460ff16155b15612ca55761010085015161322b90856153d5565b91505b81841015612ca5578361324081615403565b60008181526003890160205260409020805460ff19166001179055945061322e9050565b60008060006132748686866133ab565b6006880155925050509392505050565b6001600160a01b03808616600090815260076020526040902080549091166132fd5780546001600160a01b0387166001600160a01b031991821681178355600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180549092161790555b6001600160a01b0385166000908152600460205260409020613324908290869086866141fc565b6133326002600386856142c4565b600954604051635692619d60e11b81526001600160a01b0387811660048301529091169063ad24c33a90602401600060405180830381600087803b15801561337957600080fd5b505af115801561338d573d6000803e3d6000fd5b50505050505050505050565b6133a683838360006143aa565b505050565b6000808460060154905060006001856001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341b9190615363565b613425919061541e565b905083158061343c57508061343a83866153d5565b115b1561344e5761344b828261541e565b93505b60005b84811015613535576134646001846153d5565b60405163fcbb371b60e01b8152600481018290529093506000906001600160a01b0388169063fcbb371b9060240161012060405180830381865afa1580156134b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d491906152e8565b905060006134e3898387613649565b509050806134f2575050613523565b60a0820151613502575050613523565b613514818360a0015160646019614430565b61351e90876153d5565b955050505b8061352d81615403565b915050613451565b5050935093915050565b6000808261354d85876153d5565b1061355f5761355c858461541e565b93505b8361356a81876153d5565b915091505b935093915050565b600061362d856002016000856002811115613594576135946150aa565b60028111156135a5576135a56150aa565b81526020019081526020016000206000866001600160a01b03166001600160a01b03168152602001908152602001600020838760010160008760028111156135ef576135ef6150aa565b6002811115613600576136006150aa565b8152602080820192909252604090810160009081206001600160a01b038b168252909252902091906137c5565b95945050505050565b600061157e6004840160058501846137c5565b6000818152600284016020526040812054819060ff168061367a5750600083815260038601602052604090205460ff165b1561368a5750600090508061356f565b6136948584613636565b9050604983106136d4578360c001518110156136b3576000915061356f565b629896806136c382610a3461567b565b6136cd919061569a565b915061376d565b806136e45750600090508061356f565b6136f06019600a615798565b61370185608001516064601961445c565b61370b908361567b565b613715919061569a565b915081613725576000915061356f565b6137488460600151856040015161373c919061567b565b6301e13380601961445c565b613752908361567b565b91506137606019600a615798565b61376a908361569a565b91505b6000838152600a8601602052604090205480156137af5760008481526009870160205260409020546137ab846137a3848461541e565b836019614430565b9350505b50935093915050565b6133a683838360016143aa565b82546000908015806137f3575082856000815481106137e6576137e66153ed565b9060005260206000200154115b1561380257600091505061157e565b828561380f60018461541e565b8154811061381f5761381f6153ed565b90600052602060002001541161385e578361383b60018361541e565b8154811061384b5761384b6153ed565b906000526020600020015491505061157e565b6001811180156138945750828561387660028461541e565b81548110613886576138866153ed565b906000526020600020015411155b156138a5578361383b60028361541e565b60006138b48685600085614498565b90508481815481106138c8576138c86153ed565b9060005260206000200154925050509392505050565b6000808460028111156138f3576138f36150aa565b1415613952576040516001600160a01b038416908390600081818185875af1925050503d8060008114613942576040519150601f19603f3d011682016040523d82523d6000602084013e613947565b606091505b5050809150506139d4565b61395b84614540565b60405163a9059cbb60e01b81526001600160a01b03858116600483015260248201859052919091169063a9059cbb906044015b6020604051808303816000875af11580156139ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139d19190615391565b90505b80611e865783604051630db5347560e11b81526004016139f491906157a4565b60405180910390fd5b81546001600160a01b031615613a2557604051621d934160e11b815260040160405180910390fd5b81546001600160a01b03191633178255612e418282613d06565b6000836002811115613a5357613a536150aa565b1415613a79578034146133a657604051630fe5b06560e11b815260040160405180910390fd5b3415613a985760405163a745ac8560e01b815260040160405180910390fd5b6000613aa384614540565b6040516323b872dd60e01b81526001600160a01b0385811660048301523060248301526044820185905291909116906323b872dd9060640161398e565b600080846003016000846002811115613afb57613afb6150aa565b6002811115613b0c57613b0c6150aa565b8152602081019190915260400160002054905080613b2e57600091505061157e565b6000846001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b929190615363565b90506000613ba160018461541e565b9050600081118015613c04575081876003016000876002811115613bc757613bc76150aa565b6002811115613bd857613bd86150aa565b81526020019081526020016000208281548110613bf757613bf76153ed565b9060005260206000200154115b15613c175780613c13816157b2565b9150505b81876003016000876002811115613c3057613c306150aa565b6002811115613c4157613c416150aa565b81526020019081526020016000208281548110613c6057613c606153ed565b90600052602060002001541115613c7d576000935050505061157e565b6000805b828111613cfa57886004016000886002811115613ca057613ca06150aa565b6002811115613cb157613cb16150aa565b81526020019081526020016000208181548110613cd057613cd06153ed565b906000526020600020015482613ce691906153d5565b915080613cf281615403565b915050613c81565b50979650505050505050565b6001600160a01b038116613d2d57604051637138356f60e01b815260040160405180910390fd5b81546001600160a01b0382811691161415613d5b5760405163e037058f60e01b815260040160405180910390fd5b60019190910180546001600160a01b0319166001600160a01b03909216919091179055565b6000806000613d9187878787613db9565b86546001600160a01b0316600090815260058a01602052604090205592505050949350505050565b81546001600160a01b039081166000908152600586016020908152604080832054815163900cf0cf60e01b81529151939490938593600193928a169263900cf0cf92600480830193928290030181865afa158015613e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3f9190615363565b613e49919061541e565b9050831580613e60575080613e5e83866153d5565b115b15613e7257613e6f828261541e565b93505b60005b84811015613fbc57613e886001846153d5565b8654909350600090613ea7908a906001600160a01b0316600287613577565b8754613ec0908b906001600160a01b0316600188613577565b8854613ed9908c906001600160a01b0316600089613577565b613ee391906153d5565b613eed91906153d5565b905080613efa5750613faa565b600080613f788a6001600160a01b031663fcbb371b886040518263ffffffff1660e01b8152600401613f2e91815260200190565b61012060405180830381865afa158015613f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f7091906152e8565b8a90886145ab565b915091508160001415613f8d57505050613faa565b613f9a8284836019614430565b613fa490886153d5565b96505050505b80613fb481615403565b915050613e75565b505094509492505050565b613fd3828260016145fc565b613fdf828260026145fc565b612e41828260006145fc565b6000614107866002016000856002811115614008576140086150aa565b6002811115614019576140196150aa565b81526020808201929092526040908101600090812088546001600160a01b03908116835290845290829020825163900cf0cf60e01b815292519093918a169263900cf0cf9260048083019391928290030181865afa15801561407f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140a39190615363565b6140ae9060016153d5565b848960010160008860028111156140c7576140c76150aa565b60028111156140d8576140d86150aa565b8152602080820192909252604090810160009081208b546001600160a01b031682529092529020929190614121565b9150816141165750600061362d565b612ca5848684614922565b835460009080158061415857508561413a60018361541e565b8154811061414a5761414a6153ed565b906000526020600020015484105b1561417657604051630eae4c9760e01b815260040160405180910390fd5b60006141838787876149a2565b90506000868281548110614199576141996153ed565b90600052602060002001549050808511156141b457806141b6565b845b945084156141f057848783815481106141d1576141d16153ed565b9060005260206000200160008282546141ea919061541e565b90915550505b50929695505050505050565b6142ab856002016000846002811115614217576142176150aa565b6002811115614228576142286150aa565b81526020808201929092526040908101600090812087546001600160a01b031682529092528120908690849060018a019087600281111561426b5761426b6150aa565b600281111561427c5761427c6150aa565b8152602080820192909252604090810160009081208a546001600160a01b0316825290925290209291906142c4565b8454610b5e90849086906001600160a01b031684614bb2565b83546001811180156142fb5750846142dd60018361541e565b815481106142ed576142ed6153ed565b906000526020600020015483105b801561432c57508461430e60028361541e565b8154811061431e5761431e6153ed565b906000526020600020015483105b1561434a57604051630eae4c9760e01b815260040160405180910390fd5b60006143578686866149a2565b8654925090505b81811015612dcb5782858281548110614379576143796153ed565b90600052602060002001600082825461439291906153d5565b909155508190506143a281615403565b91505061435e565b815160005b81811015612dcb5760008482815181106143cb576143cb6153ed565b6020026020010151905085811180156143fb5750600081815260028801602052604090205460ff16151584151514155b1561441d5760008181526002880160205260409020805460ff19168515151790555b508061442881615403565b9150506143af565b600061443d82600a615798565b61444885858561445c565b614452908761567b565b61362d919061569a565b60008061446a8360016153d5565b61447590600a615798565b61447f908661567b565b9050600a61448d858361569a565b6144529060056153d5565b6000818314156144b4576144ad60018361541e565b90506123a3565b600060026144c284866153d5565b6144cc919061569a565b9050848682815481106144e1576144e16153ed565b90600052602060002001541115614506576144fe86868684614498565b9150506123a3565b84868281548110614519576145196153ed565b9060005260206000200154101561362d576144fe868661453a8460016153d5565b86614498565b60006001826002811115614556576145566150aa565b141561456a57506001602960991b01919050565b600282600281111561457e5761457e6150aa565b141561459257506002602960991b01919050565b604051638698bf3760e01b815260040160405180910390fd5b6000806145b9858585613649565b9092509050816145cc576000915061356f565b60a08401511561356f576145e8828560a0015160646019614430565b6145f2908361541e565b9150935093915050565b6000614609848484613ae0565b9050806146165750505050565b6000846003016000846002811115614630576146306150aa565b6002811115614641576146416150aa565b8152602001908152602001600020805490509050836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146b79190615363565b8560030160008560028111156146cf576146cf6150aa565b60028111156146e0576146e06150aa565b81526020019081526020016000206001836146fb919061541e565b8154811061470b5761470b6153ed565b9060005260206000200154116147a657846003016000846002811115614733576147336150aa565b6002811115614744576147446150aa565b8152602001908152602001600020600061475e9190614c32565b846004016000846002811115614776576147766150aa565b6002811115614787576147876150aa565b815260200190815260200160002060006147a19190614c32565b61490b565b60405180602001604052808660030160008660028111156147c9576147c96150aa565b60028111156147da576147da6150aa565b81526020019081526020016000206001846147f5919061541e565b81548110614805576148056153ed565b906000526020600020015481525085600301600085600281111561482b5761482b6150aa565b600281111561483c5761483c6150aa565b81526020810191909152604001600020614857916001614c53565b50604051806020016040528086600401600086600281111561487b5761487b6150aa565b600281111561488c5761488c6150aa565b81526020019081526020016000206001846148a7919061541e565b815481106148b7576148b76153ed565b90600052602060002001548152508560040160008560028111156148dd576148dd6150aa565b60028111156148ee576148ee6150aa565b81526020810191909152604001600020614909916001614c53565b505b8454610b5e9084906001600160a01b0316846138de565b611e8683600501836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061498b9190615363565b6149969060016153d5565b60048601919084614121565b8254600090806149dd57505082546001818101855560008581526020808220909301849055845491820185558481529182200181905561157e565b60006149ea60018361541e565b90506000868281548110614a0057614a006153ed565b9060005260206000200154905080851415614a1f5750915061157e9050565b80851115614a875786546001810188556000888152602090200185905585548690819084908110614a5257614a526153ed565b6000918252602080832090910154835460018181018655948452919092200155614a7d9083906153d5565b935050505061157e565b600082118015614abc575086614a9e60018461541e565b81548110614aae57614aae6153ed565b906000526020600020015485145b15614acc57614a7d60018361541e565b86878381548110614adf57614adf6153ed565b6000918252602080832090910154835460018101855593835291209091015585548690819084908110614b1457614b146153ed565b6000918252602080832090910154835460018101855593835291209091015586548590889084908110614b4957614b496153ed565b6000918252602090912001558115614b875785614b6760018461541e565b81548110614b7757614b776153ed565b9060005260206000200154614b8a565b60005b868381548110614b9c57614b9c6153ed565b60009182526020909120015550915061157e9050565b6001600160a01b038216600090815260088501602052604090205460ff16614c20576001600160a01b038216600081815260088601602090815260408220805460ff191660019081179091556007880180549182018155835291200180546001600160a01b03191690911790555b611e86600485016005860185846142c4565b5080546000825590600052602060002090810190614c509190614c9e565b50565b828054828255906000526020600020908101928215614c8e579160200282015b82811115614c8e578251825591602001919060010190614c73565b50614c9a929150614c9e565b5090565b5b80821115614c9a5760008155600101614c9f565b6001600160a01b0381168114614c5057600080fd5b60008060408385031215614cdb57600080fd5b8235614ce681614cb3565b946020939093013593505050565b600060208284031215614d0657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715614d4657614d46614d0d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614d7457614d74614d0d565b604052919050565b60006001600160401b03821115614d9557614d95614d0d565b5060051b60200190565b60008060408385031215614db257600080fd5b8235614dbd81614cb3565b91506020838101356001600160401b03811115614dd957600080fd5b8401601f81018613614dea57600080fd5b8035614dfd614df882614d7c565b614d4c565b81815260059190911b82018301908381019088831115614e1c57600080fd5b928401925b82841015614e3a57833582529284019290840190614e21565b80955050505050509250929050565b60008060408385031215614e5c57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015614ea45781516001600160a01b031687529582019590820190600101614e7f565b509495945050505050565b604081526000614ec26040830185614e6b565b90508260208301529392505050565b60008060008060808587031215614ee757600080fd5b8435614ef281614cb3565b966020860135965060408601359560600135945092505050565b600081518084526020808501945080840160005b83811015614ea457815187529582019590820190600101614f20565b60a081526000614f4f60a0830188614e6b565b8281036020840152614f618188614f0c565b90508281036040840152614f758187614f0c565b90508281036060840152614f898186614f0c565b9150508260808301529695505050505050565b60008060408385031215614faf57600080fd5b82356001600160401b03811115614fc557600080fd5b8301601f81018513614fd657600080fd5b80356020614fe6614df883614d7c565b82815260059290921b8301810191818101908884111561500557600080fd5b938201935b8385101561502c57843561501d81614cb3565b8252938201939082019061500a565b98969091013596505050505050565b60608152600061504e6060830186614e6b565b82810360208401526150608186614f0c565b915050826040830152949350505050565b6000806040838503121561508457600080fd5b823561508f81614cb3565b9150602083013561509f81614cb3565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b600381106150de57634e487b7160e01b600052602160045260246000fd5b9052565b608081016150f082876150c0565b846020830152836040830152821515606083015295945050505050565b60006020828403121561511f57600080fd5b813561157e81614cb3565b60008060006060848603121561513f57600080fd5b505081359360208301359350604090920135919050565b600081518084526020808501945080840160005b83811015614ea457815115158752958201959082019060010161516a565b60a08152600061519b60a0830188614e6b565b82810360208401526151ad8188614e6b565b905082810360408401526151c18187614f0c565b90508281036060840152614f898186615156565b6000806000606084860312156151ea57600080fd5b83356151f581614cb3565b925060208401356003811061520957600080fd5b929592945050506040919091013590565b60008060006060848603121561522f57600080fd5b833561523a81614cb3565b95602085013595506040909401359392505050565b60a0808252865190820181905260009060209060c0840190828a01845b8281101561528f5761527f8483516150c0565b928401929084019060010161526c565b505050838103828501526152a38189614f0c565b91505082810360408401526151c18187614f0c565b6000806000606084860312156152cd57600080fd5b83356152d881614cb3565b9250602084013561520981614cb3565b600061012082840312156152fb57600080fd5b615303614d23565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b60006020828403121561537557600080fd5b5051919050565b8051801515811461538c57600080fd5b919050565b6000602082840312156153a357600080fd5b61157e8261537c565b60208152600061157e6020830184614f0c565b634e487b7160e01b600052601160045260246000fd5b600082198211156153e8576153e86153bf565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415615417576154176153bf565b5060010190565b600082821015615430576154306153bf565b500390565b600082601f83011261544657600080fd5b81516020615456614df883614d7c565b82815260059290921b8401810191818101908684111561547557600080fd5b8286015b8481101561549957805161548c81614cb3565b8352918301918301615479565b509695505050505050565b600082601f8301126154b557600080fd5b815160206154c5614df883614d7c565b82815260059290921b840181019181810190868411156154e457600080fd5b8286015b84811015615499576154f98161537c565b83529183019183016154e8565b600082601f83011261551757600080fd5b81516020615527614df883614d7c565b82815260059290921b8401810191818101908684111561554657600080fd5b8286015b84811015615499578051835291830191830161554a565b600080600080600080600060e0888a03121561557c57600080fd5b87516001600160401b038082111561559357600080fd5b61559f8b838c01615435565b985060208a01519150808211156155b557600080fd5b6155c18b838c01615435565b975060408a01519150808211156155d757600080fd5b6155e38b838c016154a4565b965060608a01519150808211156155f957600080fd5b6156058b838c016154a4565b955060808a015191508082111561561b57600080fd5b6156278b838c01615506565b945060a08a015191508082111561563d57600080fd5b5061564a8a828b016154a4565b92505060c0880151905092959891949750929550565b6040810161566e82856150c0565b8260208301529392505050565b6000816000190483118215151615615695576156956153bf565b500290565b6000826156b757634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156110af5781600019048211156156dd576156dd6153bf565b808516156156ea57918102915b93841c93908002906156c1565b60008261570657506001610fbb565b8161571357506000610fbb565b816001811461572957600281146157335761574f565b6001915050610fbb565b60ff841115615744576157446153bf565b50506001821b610fbb565b5060208310610133831016604e8410600b8410161715615772575081810a610fbb565b61577c83836156bc565b8060001904821115615790576157906153bf565b029392505050565b600061157e83836156f7565b60208101610fbb82846150c0565b6000816157c1576157c16153bf565b50600019019056fea26469706673582212207b2d1662d7b769f464a304e533739d8f086e3da7b8bcf2076988a8e3798afe7264736f6c634300080c0033`), }, } diff --git a/contracts/oasys/oasys_test.go b/contracts/oasys/oasys_test.go index 5fce7d8bd..c4f9be7fe 100644 --- a/contracts/oasys/oasys_test.go +++ b/contracts/oasys/oasys_test.go @@ -1050,12 +1050,12 @@ func _deployments10(genesisHash common.Hash, contracts wantContracts) { func _deployments11(genesisHash common.Hash, contracts wantContracts) { contracts["0x0000000000000000000000000000000000001000"] = &wantContract{ name: "Environment", - codeHash: "34cf69fefaeeaa6fec9a43b903615dcb", + codeHash: "b5179d9d111d56ec8a1a865780cf5e91", storage: map[string]string{}, } // StakeManager - contracts["0x0000000000000000000000000000000000001001"].codeHash = "a9eed94b67ff9b3784c44004542ec88a" + contracts["0x0000000000000000000000000000000000001001"].codeHash = "ea125544d254ee6a1129efb7d8a54a8e" } func TestDeploy(t *testing.T) { From 81a49e98c764776877232cdd37c5d0b0fa3a892a Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Fri, 16 Aug 2024 20:00:08 +0900 Subject: [PATCH 17/29] Reverted consensus changes and Reverted environment value to onchain calls --- consensus/oasys/contract.go | 121 +++++++-- consensus/oasys/contract_test.go | 313 ++++++++-------------- consensus/oasys/environment_value.go | 155 ----------- consensus/oasys/environment_value_test.go | 206 -------------- consensus/oasys/oasys.go | 103 ++++--- consensus/oasys/scheduler.go | 6 +- consensus/oasys/scheduler_test.go | 12 +- consensus/oasys/snapshot.go | 41 +-- 8 files changed, 311 insertions(+), 646 deletions(-) delete mode 100644 consensus/oasys/environment_value.go delete mode 100644 consensus/oasys/environment_value_test.go diff --git a/consensus/oasys/contract.go b/consensus/oasys/contract.go index a952cb489..ae5c790cb 100644 --- a/consensus/oasys/contract.go +++ b/consensus/oasys/contract.go @@ -150,6 +150,54 @@ func (c chainContext) GetHeader(hash common.Hash, number uint64) *types.Header { return c.Chain.GetHeader(hash, number) } +// environmentValue +type environmentValue struct { + // Block and epoch to which this setting applies + StartBlock *big.Int + StartEpoch *big.Int + // Block generation interval(by seconds) + BlockPeriod *big.Int + // Number of blocks in epoch + EpochPeriod *big.Int + // Annual rate of staking reward + RewardRate *big.Int + // Validator commission rate + CommissionRate *big.Int + // Amount of tokens required to become a validator + ValidatorThreshold *big.Int + // Number of not sealed to jailing the validator + JailThreshold *big.Int + // Number of epochs to jailing the validator + JailPeriod *big.Int +} + +func (p *environmentValue) IsEpoch(number uint64) bool { + return (number-p.StartBlock.Uint64())%p.EpochPeriod.Uint64() == 0 +} + +func (p *environmentValue) Epoch(number uint64) uint64 { + return p.StartEpoch.Uint64() + (number-p.StartBlock.Uint64())/p.EpochPeriod.Uint64() +} + +func (p *environmentValue) GetFirstBlock(number uint64) uint64 { + elapsedEpoch := p.Epoch(number) - p.StartEpoch.Uint64() + return p.StartBlock.Uint64() + elapsedEpoch*p.EpochPeriod.Uint64() +} + +func (p *environmentValue) Copy() *environmentValue { + return &environmentValue{ + StartBlock: new(big.Int).Set(p.StartBlock), + StartEpoch: new(big.Int).Set(p.StartEpoch), + BlockPeriod: new(big.Int).Set(p.BlockPeriod), + EpochPeriod: new(big.Int).Set(p.EpochPeriod), + RewardRate: new(big.Int).Set(p.RewardRate), + CommissionRate: new(big.Int).Set(p.CommissionRate), + ValidatorThreshold: new(big.Int).Set(p.ValidatorThreshold), + JailThreshold: new(big.Int).Set(p.JailThreshold), + JailPeriod: new(big.Int).Set(p.JailPeriod), + } +} + // nextValidators type nextValidators struct { Owners []common.Address @@ -180,6 +228,20 @@ func (p *nextValidators) Exists(validator common.Address) bool { return false } +func getInitialEnvironment(config *params.OasysConfig) *environmentValue { + return &environmentValue{ + StartBlock: common.Big0, + StartEpoch: common.Big1, + BlockPeriod: big.NewInt(int64(config.Period)), + EpochPeriod: big.NewInt(int64(config.Epoch)), + RewardRate: big.NewInt(10), + CommissionRate: big.NewInt(10), + ValidatorThreshold: new(big.Int).Mul(big.NewInt(params.Ether), big.NewInt(10_000_000)), + JailThreshold: big.NewInt(500), + JailPeriod: big.NewInt(2), + } +} + // callmsg type callmsg struct { ethereum.CallMsg @@ -241,8 +303,7 @@ func (c *Oasys) initializeSystemContracts( if !environment.verifyCode(state) { return errors.New("invalid contract code: Environment") } - initialEnv, _ := getEnvironmentValue(c.chainConfig, 0) - data, err := environment.abi.Pack("initialize", initialEnv) + data, err := environment.abi.Pack("initialize", getInitialEnvironment(c.config)) if err != nil { return err } @@ -269,26 +330,6 @@ func (c *Oasys) initializeSystemContracts( return nil } -// Transact the `Environment.updateValue` method. -func (c *Oasys) updateEnvironmentValue( - newValue *environmentValue, - state *state.StateDB, - header *types.Header, - cx core.ChainContext, - txs *[]*types.Transaction, - receipts *[]*types.Receipt, - systemTxs *[]*types.Transaction, - usedGas *uint64, - mining bool, -) error { - data, err := environment.abi.Pack("updateValue", newValue) - if err != nil { - return err - } - msg := getMessage(header.Coinbase, environment.address, data, common.Big0) - return c.applyTransaction(msg, state, header, cx, txs, receipts, systemTxs, usedGas, mining) -} - // Transact the `StakeManager.slash` method. func (c *Oasys) slash( validator common.Address, @@ -569,6 +610,42 @@ func getRewards(ethAPI blockchainAPI, hash common.Hash) (*big.Int, error) { return result, nil } +// Call the `Environment.nextValue` method. +func getNextEnvironmentValue(ethAPI blockchainAPI, hash common.Hash) (*environmentValue, error) { + method := "nextValue" + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + data, err := environment.abi.Pack(method) + if err != nil { + return nil, err + } + + hexData := (hexutil.Bytes)(data) + blockNrOrHash := rpc.BlockNumberOrHashWithHash(hash, false) + rbytes, err := ethAPI.Call( + ctx, + ethapi.TransactionArgs{ + To: &environment.address, + Data: &hexData, + }, + &blockNrOrHash, + nil, + nil, + ) + if err != nil { + return nil, err + } + + var recv struct{ Result environmentValue } + if err := environment.abi.UnpackIntoInterface(&recv, method, rbytes); err != nil { + return nil, err + } + + return &recv.Result, nil +} + func (c *Oasys) applyTransaction( msg callmsg, state *state.StateDB, diff --git a/consensus/oasys/contract_test.go b/consensus/oasys/contract_test.go index e6de46e9f..cb4a36375 100644 --- a/consensus/oasys/contract_test.go +++ b/consensus/oasys/contract_test.go @@ -63,48 +63,11 @@ func TestInitializeSystemContracts(t *testing.T) { t.Error("Block.GasUsed is zero") } - envInitialized := env.statedb.GetState(_environmentAddress, common.HexToHash("0x00")).Big().Uint64() - envStartBlock := env.statedb.GetState(_environmentAddress, common.HexToHash("0x02")).Big().Uint64() - envStartEpoch := env.statedb.GetState(_environmentAddress, common.HexToHash("0x03")).Big().Uint64() - envBlockPeriod := env.statedb.GetState(_environmentAddress, common.HexToHash("0x04")).Big().Uint64() - envEpochPeriod := env.statedb.GetState(_environmentAddress, common.HexToHash("0x05")).Big().Uint64() - envRewardRate := env.statedb.GetState(_environmentAddress, common.HexToHash("0x06")).Big().Uint64() - envCommissionRate := env.statedb.GetState(_environmentAddress, common.HexToHash("0x07")).Big().Uint64() - envValidatorThreshold := env.statedb.GetState(_environmentAddress, common.HexToHash("0x08")) - envJailThreshold := env.statedb.GetState(_environmentAddress, common.HexToHash("0x09")).Big().Uint64() - envJailPeriod := env.statedb.GetState(_environmentAddress, common.HexToHash("0x0a")).Big().Uint64() - if envInitialized != 1 { - t.Errorf("Environment.initialize: want=1 got=%d", envInitialized) - } - if envStartBlock != 0 { - t.Errorf("Environment.startBlock: want=0 got=%d", envStartBlock) - } - if envStartEpoch != 1 { - t.Errorf("Environment.startEpoch: want=1 got=%d", envStartEpoch) - } - if envBlockPeriod != 15 { - t.Errorf("Environment.blockPeriod: want=15 got=%d", envBlockPeriod) - } - if envEpochPeriod != 5760 { - t.Errorf("Environment.epochPeriod: want=5760 got=%d", envEpochPeriod) - } - if envRewardRate != 10 { - t.Errorf("Environment.rewardRate: want=10 got=%d", envRewardRate) - } - if envCommissionRate != 10 { - t.Errorf("Environment.commissionRate: want=10 got=%d", envCommissionRate) - } - if new(big.Int).Div(envValidatorThreshold.Big(), big.NewInt(params.Ether)).Uint64() != 10000000 { - t.Errorf("Environment.validatorThreshold: want=10000000000000000000000000 got=%d", envValidatorThreshold) - } - if envJailThreshold != 500 { - t.Errorf("Environment.jailThreshold: want=500 got=%d", envJailThreshold) - } - if envJailPeriod != 2 { - t.Errorf("Environment.jailPeriod: want=2 got=%d", envJailPeriod) - } - + environmentInitialized := env.statedb.GetState(_environmentAddress, common.HexToHash("0x00")) stakeManagerInitialized := env.statedb.GetState(_stakeManagerAddress, common.HexToHash("0x00")) + if environmentInitialized.Big().Uint64() != 1 { + t.Errorf("Environment.initialize not called") + } if stakeManagerInitialized.Big().Uint64() != 1 { t.Errorf("StakeManager.initialize not called") } @@ -131,113 +94,6 @@ func TestInitializeSystemContracts(t *testing.T) { } } -func TestUpdateEnvironmentValue(t *testing.T) { - wallets, accounts, err := makeWallets(1) - if err != nil { - t.Fatalf("failed to create test wallets: %v", err) - } - - env, err := makeEnv(*wallets[0], *accounts[0]) - if err != nil { - t.Fatalf("failed to create test env: %v", err) - } - - header := &types.Header{ - Number: big.NewInt(50), - Coinbase: accounts[0].Address, - Difficulty: diffInTurn, - } - cx := env.chain - txs := make([]*types.Transaction, 0) - receipts := make([]*types.Receipt, 0) - systemTxs := make([]*types.Transaction, 0) - usedGas := uint64(0) - mining := true - - err = env.engine.updateEnvironmentValue(&environmentValue{ - StartBlock: big.NewInt(10), - StartEpoch: big.NewInt(11), - BlockPeriod: big.NewInt(12), - EpochPeriod: big.NewInt(13), - RewardRate: big.NewInt(14), - CommissionRate: big.NewInt(15), - ValidatorThreshold: big.NewInt(16), - JailThreshold: big.NewInt(17), - JailPeriod: big.NewInt(18), - }, env.statedb, header, cx, &txs, &receipts, &systemTxs, &usedGas, mining) - - if err != nil { - t.Fatalf("failed to call updateValue method: %v", err) - } - if len(receipts) != 1 { - t.Errorf("len(receipts), got %v, want 1", len(receipts)) - } - if usedGas == 0 { - t.Error("Block.GasUsed is zero") - } - - envUpdated := env.statedb.GetState(_environmentAddress, common.HexToHash("0x01")).Big().Uint64() - envStartBlock := env.statedb.GetState(_environmentAddress, common.HexToHash("0x02")).Big().Uint64() - envStartEpoch := env.statedb.GetState(_environmentAddress, common.HexToHash("0x03")).Big().Uint64() - envBlockPeriod := env.statedb.GetState(_environmentAddress, common.HexToHash("0x04")).Big().Uint64() - envEpochPeriod := env.statedb.GetState(_environmentAddress, common.HexToHash("0x05")).Big().Uint64() - envRewardRate := env.statedb.GetState(_environmentAddress, common.HexToHash("0x06")).Big().Uint64() - envCommissionRate := env.statedb.GetState(_environmentAddress, common.HexToHash("0x07")).Big().Uint64() - envValidatorThreshold := env.statedb.GetState(_environmentAddress, common.HexToHash("0x08")).Big().Uint64() - envJailThreshold := env.statedb.GetState(_environmentAddress, common.HexToHash("0x09")).Big().Uint64() - envJailPeriod := env.statedb.GetState(_environmentAddress, common.HexToHash("0x0a")).Big().Uint64() - if envUpdated != 1 { - t.Errorf("Environment.updated: want=1 got=%d", envUpdated) - } - if envStartBlock != 10 { - t.Errorf("Environment.startBlock: want=1 got=%d", envStartBlock) - } - if envStartEpoch != 11 { - t.Errorf("Environment.startEpoch: want=2 got=%d", envStartEpoch) - } - if envBlockPeriod != 12 { - t.Errorf("Environment.blockPeriod: want=3 got=%d", envBlockPeriod) - } - if envEpochPeriod != 13 { - t.Errorf("Environment.epochPeriod: want=4 got=%d", envEpochPeriod) - } - if envRewardRate != 14 { - t.Errorf("Environment.rewardRate: want=5 got=%d", envRewardRate) - } - if envCommissionRate != 15 { - t.Errorf("Environment.commissionRate: want=6 got=%d", envCommissionRate) - } - if envValidatorThreshold != 16 { - t.Errorf("Environment.validatorThreshold: want=7 got=%d", envValidatorThreshold) - } - if envJailThreshold != 17 { - t.Errorf("Environment.jailThreshold: want=8 got=%d", envJailThreshold) - } - if envJailPeriod != 18 { - t.Errorf("Environment.jailPeriod: want=9 got=%d", envJailPeriod) - } - - receipt := receipts[0] - if receipt.TxHash == (common.Hash{0x00}) { - t.Error("receipt.TxHash is empty") - } - if receipt.GasUsed == 0 { - t.Error("receipt.GasUsed is zero") - } - if len(receipt.Logs) != 1 { - t.Errorf("len(receipt.Logs), got %v, want 1", len(receipt.Logs)) - } - if receipt.Bloom == (types.Bloom{}) { - t.Error("receipt.Bloom is empty") - } - if receipt.BlockNumber.Uint64() != 50 { - t.Errorf("receipt.BlockNumber, got %v, want 50", receipt.BlockNumber) - } - if env.statedb.GetNonce(env.engine.signer) != 1 { - t.Errorf("account nonce value, got %v, want 1", env.statedb.GetNonce(env.engine.signer)) - } -} - func TestSlash(t *testing.T) { wallets, accounts, err := makeWallets(1) if err != nil { @@ -286,6 +142,9 @@ func TestSlash(t *testing.T) { if receipt.GasUsed == 0 { t.Error("receipt.GasUsed is zero") } + if len(receipt.Logs) != 1 { + t.Errorf("len(receipt.Logs), got %v, want 1", len(receipt.Logs)) + } if receipt.Bloom == (types.Bloom{}) { t.Error("receipt.Bloom is empty") } @@ -458,6 +317,84 @@ func TestGetRewards(t *testing.T) { } } +func TestGetNextEnvironmentValue(t *testing.T) { + want := &environmentValue{ + StartBlock: common.Big0, + StartEpoch: common.Big1, + BlockPeriod: big.NewInt(3), + EpochPeriod: big.NewInt(20), + RewardRate: big.NewInt(10), + CommissionRate: big.NewInt(15), + ValidatorThreshold: new(big.Int).Mul(big.NewInt(params.Ether), big.NewInt(10_000_000)), + JailThreshold: big.NewInt(500), + JailPeriod: big.NewInt(2), + } + + uint256Ty, _ := abi.NewType("uint256", "", nil) + arguments := abi.Arguments{ + {Type: uint256Ty}, + {Type: uint256Ty}, + {Type: uint256Ty}, + {Type: uint256Ty}, + {Type: uint256Ty}, + {Type: uint256Ty}, + {Type: uint256Ty}, + {Type: uint256Ty}, + {Type: uint256Ty}, + } + + rbyte, _ := arguments.Pack( + want.StartBlock, + want.StartEpoch, + want.BlockPeriod, + want.EpochPeriod, + want.RewardRate, + want.CommissionRate, + want.ValidatorThreshold, + want.JailThreshold, + want.JailPeriod, + ) + + ethapi := &testBlockchainAPI{rbytes: map[common.Address][][]byte{environment.address: {rbyte}}} + got, _ := getNextEnvironmentValue(ethapi, common.Hash{}) + + if got.StartBlock.Cmp(want.StartBlock) != 0 { + t.Errorf("StartBlock, got %v, want: %v", got.StartBlock, want.StartBlock) + } + + if got.StartEpoch.Cmp(want.StartEpoch) != 0 { + t.Errorf("StartEpoch, got %v, want: %v", got.StartEpoch, want.StartEpoch) + } + + if got.BlockPeriod.Cmp(want.BlockPeriod) != 0 { + t.Errorf("BlockPeriod, got %v, want: %v", got.BlockPeriod, want.BlockPeriod) + } + + if got.EpochPeriod.Cmp(want.EpochPeriod) != 0 { + t.Errorf("EpochPeriod, got %v, want: %v", got.EpochPeriod, want.EpochPeriod) + } + + if got.RewardRate.Cmp(want.RewardRate) != 0 { + t.Errorf("RewardRate, got %v, want: %v", got.RewardRate, want.RewardRate) + } + + if got.CommissionRate.Cmp(want.CommissionRate) != 0 { + t.Errorf("CommissionRate, got %v, want: %v", got.CommissionRate, want.CommissionRate) + } + + if got.ValidatorThreshold.Cmp(want.ValidatorThreshold) != 0 { + t.Errorf("ValidatorThreshold, got %v, want: %v", got.ValidatorThreshold, want.ValidatorThreshold) + } + + if got.JailThreshold.Cmp(want.JailThreshold) != 0 { + t.Errorf("JailThreshold, got %v, want: %v", got.JailThreshold, want.JailThreshold) + } + + if got.JailPeriod.Cmp(want.JailPeriod) != 0 { + t.Errorf("JailPeriod, got %v, want: %v", got.JailPeriod, want.JailPeriod) + } +} + var _ blockchainAPI = (*testBlockchainAPI)(nil) type testBlockchainAPI struct { @@ -519,7 +456,7 @@ func makeEnv(wallet accounts.Wallet, account accounts.Account) (*testEnv, error) var ( db = rawdb.NewMemoryDatabase() chainConfig = ¶ms.ChainConfig{ - ChainID: big.NewInt(248), + ChainID: big.NewInt(12345), HomesteadBlock: common.Big0, EIP150Block: common.Big0, EIP155Block: common.Big0, @@ -532,8 +469,8 @@ func makeEnv(wallet accounts.Wallet, account accounts.Account) (*testEnv, error) BerlinBlock: common.Big0, LondonBlock: common.Big0, Oasys: ¶ms.OasysConfig{ - Period: 15, - Epoch: 5760, + Period: 0, + Epoch: 100, }, } genspec = &core.Genesis{ @@ -549,63 +486,29 @@ func makeEnv(wallet accounts.Wallet, account accounts.Account) (*testEnv, error) pragma solidity ^0.8.2; contract Environment { - struct EnvironmentValue { - uint256 startBlock; - uint256 startEpoch; - uint256 blockPeriod; - uint256 epochPeriod; - uint256 rewardRate; + struct EnvironmentValue { + uint256 startBlock; + uint256 startEpoch; + uint256 blockPeriod; + uint256 epochPeriod; + uint256 rewardRate; uint256 commissionRate; - uint256 validatorThreshold; - uint256 jailThreshold; - uint256 jailPeriod; - } - - event Initialized(); - event Updated(); - - address public initialized; - address public updated; - address public startBlock; - address public startEpoch; - address public blockPeriod; - address public epochPeriod; - address public rewardRate; - address public commissionRate; - address public validatorThreshold; - address public jailThreshold; - address public jailPeriod; - - function initialize(EnvironmentValue memory initialValue) external { - initialized = address(1); - _set(initialValue); - emit Initialized(); - } - - function updateValue(EnvironmentValue memory newValue) external { - updated = address(1); - _set(newValue); - emit Updated(); - } - - function _set(EnvironmentValue memory val) internal { - startBlock = _conv(val.startBlock); - startEpoch = _conv(val.startEpoch); - blockPeriod = _conv(val.blockPeriod); - epochPeriod = _conv(val.epochPeriod); - rewardRate = _conv(val.rewardRate); - commissionRate = _conv(val.commissionRate); - validatorThreshold = _conv(val.validatorThreshold); - jailThreshold = _conv(val.jailThreshold); - jailPeriod = _conv(val.jailPeriod); - } - - function _conv(uint256 val) internal pure returns (address) { - return address(uint160(val)); - } + uint256 validatorThreshold; + uint256 jailThreshold; + uint256 jailPeriod; + } + + event Initialized(); + + address public initialized; + + function initialize(Environment.EnvironmentValue memory initialValue) external { + initialized = address(1); + emit Initialized(); + } } */ - Code: common.FromHex("0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c80637b0a47ee1161008c578063af0dfd3e11610066578063af0dfd3e1461019d578063b5b7a184146101b0578063bd4eff19146101c3578063de833b50146101d657600080fd5b80637b0a47ee146101645780637b2aab0314610177578063a2c8b1771461018a57600080fd5b806308a54356146100d4578063158ef93e146100e957806348cd4cb1146101185780634fd101d71461012b5780635ea1d6f81461013e578063660f5c1714610151575b600080fd5b6100e76100e2366004610372565b6101e9565b005b6000546100fc906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6002546100fc906001600160a01b031681565b6008546100fc906001600160a01b031681565b6007546100fc906001600160a01b031681565b600a546100fc906001600160a01b031681565b6006546100fc906001600160a01b031681565b6001546100fc906001600160a01b031681565b6003546100fc906001600160a01b031681565b6004546100fc906001600160a01b031681565b6005546100fc906001600160a01b031681565b6100e76101d1366004610372565b610231565b6009546100fc906001600160a01b031681565b600080546001600160a01b031916600117905561020581610278565b6040517f5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c890600090a150565b600180546001600160a01b0319168117905561024c81610278565b6040517ff2e795d4a33ae9a0d3282888375b8ae781ea4de1cbf101ac96150aa95ccff0b490600090a150565b8051600280546001600160a01b03199081166001600160a01b0393841617909155602083015160038054831691841691909117905560408301516004805483169184169190911790556060830151600580548316918416919091179055608083015160068054831691841691909117905560a083015160078054831691841691909117905560c083015160088054831691841691909117905560e083015160098054831691841691909117905561010090920151600a80549093169116179055565b604051610120810167ffffffffffffffff8111828210171561036c57634e487b7160e01b600052604160045260246000fd5b60405290565b6000610120828403121561038557600080fd5b61038d61033a565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c082015260e083013560e0820152610100808401358183015250809150509291505056fea2646970667358221220b3a402d60729e72e8f9f0637840b4c292983cb008e033e7489e294fa7d9ab98b64736f6c634300080c0033"), + Code: common.FromHex("0x608060405234801561001057600080fd5b50600436106100365760003560e01c806308a543561461003b578063158ef93e14610050575b600080fd5b61004e6100493660046100f4565b61007f565b005b600054610063906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b600080546001600160a01b03191660011781556040517f5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c89190a150565b604051610120810167ffffffffffffffff811182821017156100ee57634e487b7160e01b600052604160045260246000fd5b60405290565b6000610120828403121561010757600080fd5b61010f6100bc565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c082015260e083013560e0820152610100808401358183015250809150509291505056fea264697066735822122041f32989a5b45778808b251b74c621d5d19de8c37be0b731a89cb63b775dd07b64736f6c634300080c0033"), Balance: common.Big0, }, _stakeManagerAddress: { diff --git a/consensus/oasys/environment_value.go b/consensus/oasys/environment_value.go deleted file mode 100644 index 86886aa85..000000000 --- a/consensus/oasys/environment_value.go +++ /dev/null @@ -1,155 +0,0 @@ -package oasys - -import ( - "math/big" - "sync" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/params" -) - -// environmentValue is a representation of `Environment.EnvironmentValue`. -// https://github.com/oasysgames/oasys-genesis-contract/blob/3b87148/contracts/IEnvironment.sol#L13-L31 -type environmentValue struct { - // Block and epoch to which this setting applies - StartBlock *big.Int - StartEpoch *big.Int - // Block generation interval(by seconds) - BlockPeriod *big.Int - // Number of blocks in epoch - EpochPeriod *big.Int - // Annual rate of staking reward - RewardRate *big.Int - // Validator commission rate - CommissionRate *big.Int - // Amount of tokens required to become a validator - ValidatorThreshold *big.Int - // Number of not sealed to jailing the validator - JailThreshold *big.Int - // Number of epochs to jailing the validator - JailPeriod *big.Int -} - -// Safely copy all values and return a new pointer. -func (p *environmentValue) Copy() *environmentValue { - return &environmentValue{ - StartBlock: new(big.Int).Set(p.StartBlock), - StartEpoch: new(big.Int).Set(p.StartEpoch), - BlockPeriod: new(big.Int).Set(p.BlockPeriod), - EpochPeriod: new(big.Int).Set(p.EpochPeriod), - RewardRate: new(big.Int).Set(p.RewardRate), - CommissionRate: new(big.Int).Set(p.CommissionRate), - ValidatorThreshold: new(big.Int).Set(p.ValidatorThreshold), - JailThreshold: new(big.Int).Set(p.JailThreshold), - JailPeriod: new(big.Int).Set(p.JailPeriod), - } -} - -// Calculate epoch number from the given block number. -func (p *environmentValue) Epoch(number uint64) uint64 { - return p.StartEpoch.Uint64() + (number-p.StartBlock.Uint64())/p.EpochPeriod.Uint64() -} - -// Calculate the block number where the next environment should start based on this environment. -func (p *environmentValue) NewValueStartBlock(newValue *environmentValue) uint64 { - return p.StartBlock.Uint64() + - (newValue.StartEpoch.Uint64()-p.StartEpoch.Uint64())*p.EpochPeriod.Uint64() -} - -// Returns whether this environment can be applied to the given block number. -func (p *environmentValue) Started(number uint64) bool { - return number >= p.StartBlock.Uint64() -} - -// Determine if the given block number is the start block of the corresponding epoch. -func (p *environmentValue) IsEpochStartBlock(number uint64) bool { - return (number-p.StartBlock.Uint64())%p.EpochPeriod.Uint64() == 0 -} - -// Calculate the start block number of the corresponding epoch from the given block number. -func (p *environmentValue) EpochStartBlock(number uint64) uint64 { - elapsedEpoch := p.Epoch(number) - p.StartEpoch.Uint64() - return p.StartBlock.Uint64() + elapsedEpoch*p.EpochPeriod.Uint64() -} - -// Determine if the given block number is suitable for deploying a new environment. -func (p *environmentValue) ShouldUpdate(newValue *environmentValue, number uint64) bool { - if p.StartEpoch.Cmp(newValue.StartEpoch) == 0 { - return false // skip if same value - } - if p.Epoch(number)+1 != newValue.StartEpoch.Uint64() { - return false // skip if not the previous epoch - } - // check if it is in the middle of the previous epoch - return (number - p.EpochStartBlock(number)) == p.EpochPeriod.Uint64()/2 -} - -// Returns the environment value to be used under the given block -// and the environment value that is pending application next. -// Must not process consensus using the value of `next`. The value -// returned by `next` is the new value that should be updated with -// the `Environment.updateValue(...)` contract method -// if `curr.ShouldUpdate(next, number)` returns true. -var getEnvironmentValue = func() func(cfg *params.ChainConfig, number uint64) (curr, next *environmentValue) { - updates := []func(cfg *params.ChainConfig, env *environmentValue){ - // Genesis - func(cfg *params.ChainConfig, env *environmentValue) { - env.StartBlock = common.Big0 - env.StartEpoch = common.Big1 - env.BlockPeriod = big.NewInt(int64(cfg.Oasys.Period)) - env.EpochPeriod = big.NewInt(int64(cfg.Oasys.Epoch)) - env.RewardRate = big.NewInt(10) - env.CommissionRate = big.NewInt(10) - env.ValidatorThreshold = new(big.Int).Mul(big.NewInt(params.Ether), big.NewInt(10_000_000)) - env.JailThreshold = big.NewInt(500) - env.JailPeriod = big.NewInt(2) - }, - - // Sep 2024 - func(cfg *params.ChainConfig, env *environmentValue) { - env.StartEpoch = cfg.OasysShortenedBlockTimeStartEpoch() - - if cfg.ChainID.Cmp(params.OasysMainnetChainConfig.ChainID) == 0 || - cfg.ChainID.Cmp(params.OasysTestnetChainConfig.ChainID) == 0 { - env.BlockPeriod = big.NewInt(6) - env.EpochPeriod = big.NewInt(14400) - } - }, - } - - var ( - mu sync.Mutex - cache []*environmentValue - ) - return func(cfg *params.ChainConfig, number uint64) (curr *environmentValue, next *environmentValue) { - mu.Lock() - defer mu.Unlock() - - if len(cache) > 0 { - curr = cache[0] - } else { - curr = &environmentValue{} - cache = append(cache, curr) - updates[0](cfg, curr) - } - - for i, update := range updates[1:] { - if len(cache) > i+1 { - next = cache[i+1] - } else { - next = curr.Copy() - cache = append(cache, next) - - update(cfg, next) - next.StartBlock = new(big.Int).SetUint64(curr.NewValueStartBlock(next)) - } - - if !next.Started(number) { - break - } - curr = next - } - - return curr, next - } -}() diff --git a/consensus/oasys/environment_value_test.go b/consensus/oasys/environment_value_test.go deleted file mode 100644 index 800922c64..000000000 --- a/consensus/oasys/environment_value_test.go +++ /dev/null @@ -1,206 +0,0 @@ -package oasys - -import ( - "math/big" - "testing" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/params" -) - -func TestEnvironmentValue(t *testing.T) { - env := &environmentValue{ - StartBlock: common.Big0, - StartEpoch: common.Big1, - BlockPeriod: big.NewInt(15), - EpochPeriod: big.NewInt(5760), - RewardRate: big.NewInt(10), - CommissionRate: big.NewInt(10), - ValidatorThreshold: new(big.Int).Mul(big.NewInt(params.Ether), big.NewInt(10_000_000)), - JailThreshold: big.NewInt(500), - JailPeriod: big.NewInt(2), - } - - newVal := env.Copy() - newVal.StartEpoch = big.NewInt(3) - newVal.StartBlock = new(big.Int).SetUint64(env.NewValueStartBlock(newVal)) - - // epoch 1 - for i, number := range []uint64{0, 1, 2, 5757, 5758, 5759} { - if got := env.Epoch(number); got != 1 { - t.Errorf("Epoch(%d): want=1 got=%d", number, got) - } - if got := env.NewValueStartBlock(newVal); got != 11520 { - t.Errorf("NewValueStartBlock(%d): want=11520 got=%d", number, got) - } - if got := env.Started(number); !got { - t.Errorf("Started(%d): should be true", number) - } - if got := env.IsEpochStartBlock(number); (i == 0 && !got) || (i != 0 && got) { - t.Errorf("IsEpochStartBlock(%d): should be %v", number, !got) - } - if got := env.EpochStartBlock(number); got != 0 { - t.Errorf("EpochStartBlock(%d): want=0 got=%d", number, got) - } - if got := env.ShouldUpdate(newVal, number); got { - t.Errorf("ShouldUpdate(newVal, %d): should be false", number) - } - if got := env.ShouldUpdate(env, number); got { - t.Errorf("ShouldUpdate(newVal, %d): should be false", number) - } - - if got := newVal.Started(number); got { - t.Errorf("Started(%d): should be false", number) - } - } - // epoch 2 - for i, number := range []uint64{5760, 5761, 5762, 11517, 11518, 11519} { - if got := env.Epoch(number); got != 2 { - t.Errorf("Epoch(%d): want=2 got=%d", number, got) - } - if got := env.NewValueStartBlock(newVal); got != 11520 { - t.Errorf("NewValueStartBlock(%d): want=11520 got=%d", number, got) - } - if got := env.Started(number); !got { - t.Errorf("Started(%d): should be true", number) - } - if got := env.IsEpochStartBlock(number); (i == 0 && !got) || (i != 0 && got) { - t.Errorf("IsEpochStartBlock(%d): should be %v", number, !got) - } - if got := env.EpochStartBlock(number); got != 5760 { - t.Errorf("EpochStartBlock(%d): want=5760 got=%d", number, got) - } - if got := env.ShouldUpdate(newVal, number); (number == 8640 && !got) || (number != 8640 && got) { - t.Errorf("ShouldUpdate(newVal, %d): should be false", number) - } - if got := env.ShouldUpdate(env, number); got { - t.Errorf("ShouldUpdate(newVal, %d): should be false", number) - } - - if got := newVal.Started(number); got { - t.Errorf("Started(%d): should be false", number) - } - } - // epoch 3 - for i, number := range []uint64{11520, 11521, 11522, 17277, 17278, 17279} { - if got := env.Epoch(number); got != 3 { - t.Errorf("Epoch(%d): want=3 got=%d", number, got) - } - if got := env.NewValueStartBlock(newVal); got != 11520 { - t.Errorf("NewValueStartBlock(%d): want=11520 got=%d", number, got) - } - if got := env.Started(number); !got { - t.Errorf("Started(%d): should be true", number) - } - if got := env.IsEpochStartBlock(number); (i == 0 && !got) || (i != 0 && got) { - t.Errorf("IsEpochStartBlock(%d): should be %v", number, !got) - } - if got := env.EpochStartBlock(number); got != 11520 { - t.Errorf("EpochStartBlock(%d): want=11520 got=%d", number, got) - } - if got := env.ShouldUpdate(newVal, number); got { - t.Errorf("ShouldUpdate(newVal, %d): should be false", number) - } - - if got := newVal.Epoch(number); got != 3 { - t.Errorf("Epoch(%d): want=3 got=%d", number, got) - } - if got := newVal.Started(number); !got { - t.Errorf("Started(%d): should be true", number) - } - if got := newVal.IsEpochStartBlock(number); (i == 0 && !got) || (i != 0 && got) { - t.Errorf("IsEpochStartBlock(%d): should be %v", number, !got) - } - if got := newVal.EpochStartBlock(number); got != 11520 { - t.Errorf("EpochStartBlock(%d): want=11520 got=%d", number, got) - } - } -} - -func TestGetEnvironmentValue(t *testing.T) { - compare := func(number uint64, got, want *environmentValue) { - if got.StartBlock.Cmp(want.StartBlock) != 0 { - t.Errorf("StartBlock: number=%d want=%d got=%d", - number, want.StartBlock, got.StartBlock) - } - if got.StartEpoch.Cmp(want.StartEpoch) != 0 { - t.Errorf("StartEpoch: number=%d want=%d got=%d", - number, want.StartEpoch, got.StartEpoch) - } - if got.BlockPeriod.Cmp(want.BlockPeriod) != 0 { - t.Errorf("BlockPeriod: number=%d want=%d got=%d", - number, want.BlockPeriod, got.BlockPeriod) - } - if got.EpochPeriod.Cmp(want.EpochPeriod) != 0 { - t.Errorf("EpochPeriod: number=%d want=%d got=%d", - number, want.EpochPeriod, got.EpochPeriod) - } - if got.RewardRate.Cmp(want.RewardRate) != 0 { - t.Errorf("RewardRate: number=%d want=%d got=%d", - number, want.RewardRate, got.RewardRate) - } - if got.CommissionRate.Cmp(want.CommissionRate) != 0 { - t.Errorf("CommissionRate: number=%d want=%d got=%d", - number, want.CommissionRate, got.CommissionRate) - } - if got.ValidatorThreshold.Cmp(want.ValidatorThreshold) != 0 { - t.Errorf("ValidatorThreshold: number=%d want=%d got=%d", - number, want.ValidatorThreshold, got.ValidatorThreshold) - } - if got.JailThreshold.Cmp(want.JailThreshold) != 0 { - t.Errorf("JailThreshold: number=%d want=%d got=%d", - number, want.JailThreshold, got.JailThreshold) - } - if got.JailPeriod.Cmp(want.JailPeriod) != 0 { - t.Errorf("JailPeriod: number=%d want=%d got=%d", - number, want.JailPeriod, got.JailPeriod) - } - } - - want0 := &environmentValue{ - StartBlock: common.Big0, - StartEpoch: common.Big1, - BlockPeriod: big.NewInt(15), - EpochPeriod: big.NewInt(5760), - RewardRate: big.NewInt(10), - CommissionRate: big.NewInt(10), - ValidatorThreshold: new(big.Int).Mul(big.NewInt(params.Ether), big.NewInt(10_000_000)), - JailThreshold: big.NewInt(500), - JailPeriod: big.NewInt(2), - } - want1 := &environmentValue{ - StartBlock: big.NewInt(5748480), - StartEpoch: big.NewInt(999), - BlockPeriod: big.NewInt(6), - EpochPeriod: big.NewInt(14400), - RewardRate: big.NewInt(10), - CommissionRate: big.NewInt(10), - ValidatorThreshold: new(big.Int).Mul(big.NewInt(params.Ether), big.NewInt(10_000_000)), - JailThreshold: big.NewInt(500), - JailPeriod: big.NewInt(2), - } - - cases := []struct { - numbers []uint64 - wantCurr, wantNext *environmentValue - }{ - // epoch 1 - {[]uint64{0, 1, 5758, 5759}, want0, want1}, - // epoch 2 - {[]uint64{5760, 5761, 11518, 11519}, want0, want1}, - // epoch 998 - {[]uint64{5742720, 5742721, 5748478, 5748479}, want0, want1}, - // epoch 999 - {[]uint64{5748480, 5748481, 5754238, 5754239}, want1, want1}, - // epoch 1000 - {[]uint64{5754240, 5754241, 5759998, 5759999}, want1, want1}, - } - - for _, c := range cases { - for _, number := range c.numbers { - gotCurr, gotNext := getEnvironmentValue(params.OasysMainnetChainConfig, number) - compare(number, gotCurr, c.wantCurr) - compare(number, gotNext, c.wantNext) - } - } -} diff --git a/consensus/oasys/oasys.go b/consensus/oasys/oasys.go index 72df663c4..1cb13d6d1 100644 --- a/consensus/oasys/oasys.go +++ b/consensus/oasys/oasys.go @@ -259,9 +259,12 @@ func (c *Oasys) verifyHeader(chain consensus.ChainHeaderReader, header *types.He return errMissingSignature } // Ensure that the extra-data contains a validator list on checkpoint, but none otherwise - env, _ := getEnvironmentValue(c.chainConfig, number) + env, err := c.environment(chain, header, parents) + if err != nil { + return err + } validatorBytes := len(header.Extra) - extraVanity - extraSeal - if env.IsEpochStartBlock(number) { + if env.IsEpoch(number) { if err := c.verifyExtraHeaderLengthInEpoch(header.Number, validatorBytes); err != nil { return err } @@ -331,7 +334,7 @@ func (c *Oasys) verifyCascadingFields(chain consensus.ChainHeaderReader, header validators []common.Address stakes []*big.Int ) - if number > 0 && env.IsEpochStartBlock(number) { + if number > 0 && env.IsEpoch(number) { // TODO: Extract the validators from header extra data // Now the keccak256 hash of the validators is stored in the extra data. // To avoid ethapi call, we need to store each validator's address and stake amount. @@ -415,7 +418,7 @@ func (c *Oasys) snapshot(chain consensus.ChainHeaderReader, number uint64, hash return nil, err } - snap = newSnapshot(c.chainConfig, c.signatures, c.ethAPI, number, hash, validators) + snap = newSnapshot(c.chainConfig, c.signatures, c.ethAPI, number, hash, validators, getInitialEnvironment(c.config)) if err := snap.store(c.db); err != nil { return nil, err } @@ -518,7 +521,10 @@ func (c *Oasys) Prepare(chain consensus.ChainHeaderReader, header *types.Header) // Mix digest is reserved for now, set to empty header.MixDigest = common.Hash{} - env, _ := getEnvironmentValue(c.chainConfig, number) + env, err := c.environment(chain, header, nil) + if err != nil { + return err + } // Ensure the extra data has all its components if len(header.Extra) < extraVanity { @@ -530,7 +536,7 @@ func (c *Oasys) Prepare(chain consensus.ChainHeaderReader, header *types.Header) validators []common.Address stakes []*big.Int ) - if number > 0 && env.IsEpochStartBlock(number) { + if number > 0 && env.IsEpoch(number) { result, err := getNextValidators(c.chainConfig, c.ethAPI, header.ParentHash, env.Epoch(number), number) if err != nil { log.Error("Failed to get validators", "in", "Prepare", "hash", header.ParentHash, "number", number, "err", err) @@ -584,7 +590,6 @@ func (c *Oasys) Finalize(chain consensus.ChainHeaderReader, header *types.Header hash := header.Hash() number := header.Number.Uint64() - env, nextEnv := getEnvironmentValue(c.chainConfig, number) cx := chainContext{Chain: chain, oasys: c} if number == 1 { @@ -593,22 +598,18 @@ func (c *Oasys) Finalize(chain consensus.ChainHeaderReader, header *types.Header log.Error("Failed to initialize system contracts", "in", "Finalize", "hash", hash, "number", number, "err", err) return err } - log.Info("Initialized system contracts", "in", "Finalize", "hash", hash, "number", number) } - if nextEnv != nil && env.ShouldUpdate(nextEnv, number) { - err := c.updateEnvironmentValue(nextEnv, state, header, cx, txs, receipts, systemTxs, usedGas, false) - if err != nil { - log.Error("Failed to update environment value", "in", "Finalize", "hash", hash, "number", number, "err", err) - return err - } - log.Info("Updated environment value", "in", "Finalize", "hash", hash, "number", number) + + env, err := c.environment(chain, header, nil) + if err != nil { + return err } var ( validators []common.Address stakes []*big.Int ) - if env.IsEpochStartBlock(number) { + if env.IsEpoch(number) { result, err := getNextValidators(c.chainConfig, c.ethAPI, header.ParentHash, env.Epoch(number), number) if err != nil { log.Error("Failed to get validators", "in", "Finalize", "hash", header.ParentHash, "number", number, "err", err) @@ -633,7 +634,7 @@ func (c *Oasys) Finalize(chain consensus.ChainHeaderReader, header *types.Header return err } - if env.IsEpochStartBlock(number) { + if env.IsEpoch(number) { // If the block is a epoch block, verify the validator list or hash actual := header.Extra[extraVanity : len(header.Extra)-extraSeal] if err := c.verifyExtraHeaderValueInEpoch(header.Number, actual, validators); err != nil { @@ -680,7 +681,6 @@ func (c *Oasys) FinalizeAndAssemble(chain consensus.ChainHeaderReader, header *t hash := header.Hash() number := header.Number.Uint64() - env, nextEnv := getEnvironmentValue(c.chainConfig, number) cx := chainContext{Chain: chain, oasys: c} if number == 1 { @@ -689,22 +689,18 @@ func (c *Oasys) FinalizeAndAssemble(chain consensus.ChainHeaderReader, header *t log.Error("Failed to initialize system contracts", "in", "FinalizeAndAssemble", "hash", hash, "err", err) return nil, nil, err } - log.Info("Initialized system contracts", "in", "FinalizeAndAssemble", "hash", hash, "number", number) } - if nextEnv != nil && env.ShouldUpdate(nextEnv, number) { - err := c.updateEnvironmentValue(nextEnv, state, header, cx, &txs, &receipts, nil, &header.GasUsed, true) - if err != nil { - log.Error("Failed to update environment value", "in", "FinalizeAndAssemble", "hash", hash, "err", err) - return nil, nil, err - } - log.Info("Updated environment value", "in", "FinalizeAndAssemble", "hash", hash, "number", number) + + env, err := c.environment(chain, header, nil) + if err != nil { + return nil, nil, err } var ( validators []common.Address stakes []*big.Int ) - if env.IsEpochStartBlock(number) { + if env.IsEpoch(number) { result, err := getNextValidators(c.chainConfig, c.ethAPI, header.ParentHash, env.Epoch(number), number) if err != nil { log.Error("Failed to get validators", "in", "FinalizeAndAssemble", "hash", header.ParentHash, "number", number, "err", err) @@ -776,11 +772,14 @@ func (c *Oasys) Seal(chain consensus.ChainHeaderReader, block *types.Block, resu validator, signFn := c.signer, c.signFn c.lock.RUnlock() - env, _ := getEnvironmentValue(c.chainConfig, number) + env, err := c.environment(chain, header, nil) + if err != nil { + return err + } // Bail out if we're unauthorized to sign a block var exists bool - if number > 0 && env.IsEpochStartBlock(number) { + if number > 0 && env.IsEpoch(number) { result, err := getNextValidators(c.chainConfig, c.ethAPI, header.ParentHash, env.Epoch(number), number) if err != nil { log.Error("Failed to get validators", "in", "Seal", "hash", header.ParentHash, "number", number, "err", err) @@ -830,13 +829,17 @@ func (c *Oasys) Seal(chain consensus.ChainHeaderReader, block *types.Block, resu // that a new block should have: func (c *Oasys) CalcDifficulty(chain consensus.ChainHeaderReader, time uint64, parent *types.Header) *big.Int { number := parent.Number.Uint64() - env, _ := getEnvironmentValue(c.chainConfig, number) + + env, err := c.environment(chain, parent, nil) + if err != nil { + return nil + } var ( validators []common.Address stakes []*big.Int ) - if env.IsEpochStartBlock(number) { + if env.IsEpoch(number) { result, err := getNextValidators(c.chainConfig, c.ethAPI, parent.Hash(), env.Epoch(number), number) if err != nil { log.Error("Failed to get validators", "in", "Seal", "hash", parent.Hash(), "number", number, "err", err) @@ -987,7 +990,7 @@ func encodeSigHeader(w io.Writer, header *types.Header) { } func (c *Oasys) addBalanceToStakeManager(state *state.StateDB, hash common.Hash, number uint64, env *environmentValue) error { - if !env.IsEpochStartBlock(number) || env.Epoch(number) < 3 || env.Epoch(number) > 60 { + if !env.IsEpoch(number) || env.Epoch(number) < 3 || env.Epoch(number) > 60 { return nil } @@ -1009,6 +1012,40 @@ func (c *Oasys) addBalanceToStakeManager(state *state.StateDB, hash common.Hash, return nil } +func (c *Oasys) environment(chain consensus.ChainHeaderReader, header *types.Header, parents []*types.Header) (*environmentValue, error) { + number := header.Number.Uint64() + if number < c.config.Epoch { + return getInitialEnvironment(c.config), nil + } + + snap, err := c.snapshot(chain, number-1, header.ParentHash, parents) + if err != nil { + return nil, err + } + + var env *environmentValue + if number%snap.Environment.EpochPeriod.Uint64() == 0 { + if env, err = getNextEnvironmentValue(c.ethAPI, header.ParentHash); err != nil { + log.Error("Failed to get environment value", "in", "environment", "hash", header.ParentHash, "number", number, "err", err) + return nil, err + } + } else { + env = snap.Environment + } + + if env.BlockPeriod.Cmp(common.Big0) == 0 { + return nil, errors.New("invalid block period") + } + if env.EpochPeriod.Cmp(common.Big0) == 0 { + return nil, errors.New("invalid epoch period") + } + if env.ValidatorThreshold.Cmp(common.Big0) == 0 { + return nil, errors.New("invalid validator threshold") + } + + return env, nil +} + func (c *Oasys) scheduler(chain consensus.ChainHeaderReader, header *types.Header, env *environmentValue, validators []common.Address, stakes []*big.Int) (*scheduler, error) { number := header.Number.Uint64() @@ -1039,7 +1076,7 @@ func (c *Oasys) scheduler(chain consensus.ChainHeaderReader, header *types.Heade seed = seedHash.Big().Int64() } - created := newScheduler(env, env.EpochStartBlock(number), + created := newScheduler(env, env.GetFirstBlock(number), newWeightedChooser(validators, stakes, seed)) schedulerCache.Add(seedHash, created) return created, nil diff --git a/consensus/oasys/scheduler.go b/consensus/oasys/scheduler.go index 795472fe4..830a5550b 100644 --- a/consensus/oasys/scheduler.go +++ b/consensus/oasys/scheduler.go @@ -93,7 +93,7 @@ func (s *scheduler) schedules() []*common.Address { } func (s *scheduler) expect(number uint64) *common.Address { - return s.schedules()[number-s.env.EpochStartBlock(number)] + return s.schedules()[number-s.env.GetFirstBlock(number)] } func (s *scheduler) difficulty(number uint64, validator common.Address, ext bool) *big.Int { @@ -133,7 +133,7 @@ func (s *scheduler) turn(number uint64, validator common.Address) (uint64, error s.turns.Add(number, turns) } - for bpos := number - s.env.EpochStartBlock(number); ; bpos++ { + for bpos := number - s.env.GetFirstBlock(number); ; bpos++ { if turn, ok := turns[s.ptrmap[validator]]; ok { return turn, nil } @@ -266,7 +266,7 @@ func getPrevEpochLastBlockHash( ) (common.Hash, error) { var ( number = header.Number.Uint64() - epochStart = env.EpochStartBlock(number) + epochStart = env.GetFirstBlock(number) parent = header.ParentHash ) for ; number > epochStart; number-- { diff --git a/consensus/oasys/scheduler_test.go b/consensus/oasys/scheduler_test.go index 10c5c357f..a1e540623 100644 --- a/consensus/oasys/scheduler_test.go +++ b/consensus/oasys/scheduler_test.go @@ -125,8 +125,8 @@ func TestBackOffTimes(t *testing.T) { } for _, s := range wantSchedules { - chooser := newWeightedChooser(validators, stakes, int64(env.EpochStartBlock(s.block))) - scheduler := newScheduler(env, env.EpochStartBlock(s.block), chooser) + chooser := newWeightedChooser(validators, stakes, int64(env.GetFirstBlock(s.block))) + scheduler := newScheduler(env, env.GetFirstBlock(s.block), chooser) for i, validator := range validators { want := uint64(s.turns[i]) if want > 0 { @@ -149,8 +149,8 @@ func TestExpect(t *testing.T) { } for _, s := range wantSchedules { - chooser := newWeightedChooser(validators, stakes, int64(env.EpochStartBlock(s.block))) - scheduler := newScheduler(env, env.EpochStartBlock(s.block), chooser) + chooser := newWeightedChooser(validators, stakes, int64(env.GetFirstBlock(s.block))) + scheduler := newScheduler(env, env.GetFirstBlock(s.block), chooser) var want common.Address for i, validator := range validators { @@ -175,8 +175,8 @@ func TestDifficulty(t *testing.T) { } for _, s := range wantSchedules { - chooser := newWeightedChooser(validators, stakes, int64(env.EpochStartBlock(s.block))) - scheduler := newScheduler(env, env.EpochStartBlock(s.block), chooser) + chooser := newWeightedChooser(validators, stakes, int64(env.GetFirstBlock(s.block))) + scheduler := newScheduler(env, env.GetFirstBlock(s.block), chooser) for i, validator := range validators { want1 := diffNoTurn.Uint64() diff --git a/consensus/oasys/snapshot.go b/consensus/oasys/snapshot.go index 3144b9016..4ec7cb116 100644 --- a/consensus/oasys/snapshot.go +++ b/consensus/oasys/snapshot.go @@ -26,6 +26,8 @@ type Snapshot struct { Number uint64 `json:"number"` // Block number where the snapshot was created Hash common.Hash `json:"hash"` // Block hash where the snapshot was created Validators map[common.Address]*big.Int `json:"validators"` // Set of authorized validators and stakes at this moment + + Environment *environmentValue `json:"environment"` } // validatorsAscending implements the sort interface to allow sorting a list of addresses @@ -39,14 +41,15 @@ func (s validatorsAscending) Swap(i, j int) { s[i], s[j] = s[j], s[i] } // method does not initialize the set of recent validators, so only ever use if for // the genesis block. func newSnapshot(config *params.ChainConfig, sigcache *lru.ARCCache, ethAPI *ethapi.BlockChainAPI, - number uint64, hash common.Hash, validators []common.Address) *Snapshot { + number uint64, hash common.Hash, validators []common.Address, environment *environmentValue) *Snapshot { snap := &Snapshot{ - config: config, - sigcache: sigcache, - ethAPI: ethAPI, - Number: number, - Hash: hash, - Validators: make(map[common.Address]*big.Int), + config: config, + sigcache: sigcache, + ethAPI: ethAPI, + Number: number, + Hash: hash, + Validators: make(map[common.Address]*big.Int), + Environment: environment.Copy(), } for _, address := range validators { snap.Validators[address] = new(big.Int).Set(common.Big0) @@ -84,12 +87,13 @@ func (s *Snapshot) store(db ethdb.Database) error { // copy creates a deep copy of the snapshot, though not the individual votes. func (s *Snapshot) copy() *Snapshot { cpy := &Snapshot{ - config: s.config, - sigcache: s.sigcache, - ethAPI: s.ethAPI, - Number: s.Number, - Hash: s.Hash, - Validators: make(map[common.Address]*big.Int), + config: s.config, + sigcache: s.sigcache, + ethAPI: s.ethAPI, + Number: s.Number, + Hash: s.Hash, + Validators: make(map[common.Address]*big.Int), + Environment: s.Environment.Copy(), } for address, stake := range s.Validators { cpy.Validators[address] = new(big.Int).Set(stake) @@ -118,7 +122,6 @@ func (s *Snapshot) apply(headers []*types.Header, chain consensus.ChainHeaderRea for _, header := range headers { number := header.Number.Uint64() - env, _ := getEnvironmentValue(s.config, number) validator, err := ecrecover(header, s.sigcache) if err != nil { @@ -126,13 +129,19 @@ func (s *Snapshot) apply(headers []*types.Header, chain consensus.ChainHeaderRea } var exists bool - if number > 0 && env.IsEpochStartBlock(number) { - nextValidator, err := getNextValidators(s.config, s.ethAPI, header.ParentHash, env.Epoch(number), number) + if number > 0 && number%snap.Environment.EpochPeriod.Uint64() == 0 { + nextValidator, err := getNextValidators(s.config, s.ethAPI, header.ParentHash, snap.Environment.Epoch(number), number) if err != nil { log.Error("Failed to get validators", "in", "Snapshot.apply", "hash", header.ParentHash, "number", number, "err", err) return nil, err } + nextEnv, err := getNextEnvironmentValue(s.ethAPI, header.ParentHash) + if err != nil { + log.Error("Failed to get environment value", "in", "Snapshot.apply", "hash", header.ParentHash, "number", number, "err", err) + return nil, err + } + snap.Environment = nextEnv.Copy() snap.Validators = map[common.Address]*big.Int{} for i, address := range nextValidator.Operators { snap.Validators[address] = nextValidator.Stakes[i] From 332be112033fd5ef5b923ffdf6d7524b0d11a414 Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Mon, 19 Aug 2024 10:09:37 +0900 Subject: [PATCH 18/29] Spliting deployment settings --- contracts/oasys/deployments.go | 884 ++----------------------------- contracts/oasys/deployments0.go | 243 +++++++++ contracts/oasys/deployments1.go | 14 + contracts/oasys/deployments10.go | 62 +++ contracts/oasys/deployments11.go | 14 + contracts/oasys/deployments2.go | 188 +++++++ contracts/oasys/deployments3.go | 38 ++ contracts/oasys/deployments4.go | 37 ++ contracts/oasys/deployments5.go | 9 + contracts/oasys/deployments6.go | 14 + contracts/oasys/deployments7.go | 49 ++ contracts/oasys/deployments8.go | 44 ++ contracts/oasys/deployments9.go | 119 +++++ 13 files changed, 873 insertions(+), 842 deletions(-) create mode 100644 contracts/oasys/deployments0.go create mode 100644 contracts/oasys/deployments1.go create mode 100644 contracts/oasys/deployments10.go create mode 100644 contracts/oasys/deployments11.go create mode 100644 contracts/oasys/deployments2.go create mode 100644 contracts/oasys/deployments3.go create mode 100644 contracts/oasys/deployments4.go create mode 100644 contracts/oasys/deployments5.go create mode 100644 contracts/oasys/deployments6.go create mode 100644 contracts/oasys/deployments7.go create mode 100644 contracts/oasys/deployments8.go create mode 100644 contracts/oasys/deployments9.go diff --git a/contracts/oasys/deployments.go b/contracts/oasys/deployments.go index e6ae88c30..9da8cf67e 100644 --- a/contracts/oasys/deployments.go +++ b/contracts/oasys/deployments.go @@ -3,855 +3,55 @@ package oasys import ( "encoding/hex" "fmt" - "math/big" "strings" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" ) -var ( - deployments0 = []*deployment{ - { - contract: wrappedOAS, - // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/1a5673f5d69108ada2e7d825b9033ac6f668f71a/contracts/token/WOAS.sol - code: mustDecodeCode( - "0x6080604052600436106100dc5760003560e01c8063395093511161007f578063a457c2d711610059578063a457c2d714610244578063a9059cbb14610264578063d0e30db014610284578063dd62ed3e1461028c57600080fd5b806339509351146101d957806370a08231146101f957806395d89b411461022f57600080fd5b806318160ddd116100bb57806318160ddd1461015e57806323b872dd1461017d5780632e1a7d4d1461019d578063313ce567146101bd57600080fd5b8062f714ce146100e157806306fdde0314610103578063095ea7b31461012e575b600080fd5b3480156100ed57600080fd5b506101016100fc366004610c71565b6102d2565b005b34801561010f57600080fd5b506101186102e0565b6040516101259190610c9d565b60405180910390f35b34801561013a57600080fd5b5061014e610149366004610cf2565b610372565b6040519015158152602001610125565b34801561016a57600080fd5b506002545b604051908152602001610125565b34801561018957600080fd5b5061014e610198366004610d1c565b61038a565b3480156101a957600080fd5b506101016101b8366004610d58565b6103ae565b3480156101c957600080fd5b5060405160128152602001610125565b3480156101e557600080fd5b5061014e6101f4366004610cf2565b6103bb565b34801561020557600080fd5b5061016f610214366004610d71565b6001600160a01b031660009081526020819052604090205490565b34801561023b57600080fd5b506101186103fa565b34801561025057600080fd5b5061014e61025f366004610cf2565b610409565b34801561027057600080fd5b5061014e61027f366004610cf2565b6104a0565b6101016104ae565b34801561029857600080fd5b5061016f6102a7366004610d93565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102dc8282610530565b5050565b6060600380546102ef90610dbd565b80601f016020809104026020016040519081016040528092919081815260200182805461031b90610dbd565b80156103685780601f1061033d57610100808354040283529160200191610368565b820191906000526020600020905b81548152906001019060200180831161034b57829003601f168201915b5050505050905090565b6000336103808185856106ab565b5060019392505050565b6000336103988582856107d0565b6103a3858585610862565b506001949350505050565b6103b88133610530565b50565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061038090829086906103f5908790610e0e565b6106ab565b6060600480546102ef90610dbd565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156104935760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6103a382868684036106ab565b600033610380818585610862565b600034116104ef5760405162461bcd60e51b815260206004820152600e60248201526d3b30b63ab29034b9903d32b9379760911b604482015260640161048a565b6104f93334610a30565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600082116105725760405162461bcd60e51b815260206004820152600f60248201526e30b6b7bab73a1034b9903d32b9379760891b604482015260640161048a565b336000908152602081905260409020548211156105bf5760405162461bcd60e51b815260206004820152600b60248201526a1bdd995c88185b5bdd5b9d60aa1b604482015260640161048a565b6105c93383610b0f565b6000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114610616576040519150601f19603f3d011682016040523d82523d6000602084013e61061b565b606091505b50509050806106635760405162461bcd60e51b815260206004820152601460248201527327a0a9903a3930b739b332b9103330b4b632b21760611b604482015260640161048a565b816001600160a01b03167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b658460405161069e91815260200190565b60405180910390a2505050565b6001600160a01b03831661070d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161048a565b6001600160a01b03821661076e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161048a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461085c578181101561084f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161048a565b61085c84848484036106ab565b50505050565b6001600160a01b0383166108c65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161048a565b6001600160a01b0382166109285760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161048a565b6001600160a01b038316600090815260208190526040902054818110156109a05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161048a565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906109d7908490610e0e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a2391815260200190565b60405180910390a361085c565b6001600160a01b038216610a865760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161048a565b8060026000828254610a989190610e0e565b90915550506001600160a01b03821660009081526020819052604081208054839290610ac5908490610e0e565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038216610b6f5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161048a565b6001600160a01b03821660009081526020819052604090205481811015610be35760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161048a565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610c12908490610e26565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016107c3565b80356001600160a01b0381168114610c6c57600080fd5b919050565b60008060408385031215610c8457600080fd5b82359150610c9460208401610c55565b90509250929050565b600060208083528351808285015260005b81811015610cca57858101830151858201604001528201610cae565b81811115610cdc576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215610d0557600080fd5b610d0e83610c55565b946020939093013593505050565b600080600060608486031215610d3157600080fd5b610d3a84610c55565b9250610d4860208501610c55565b9150604084013590509250925092565b600060208284031215610d6a57600080fd5b5035919050565b600060208284031215610d8357600080fd5b610d8c82610c55565b9392505050565b60008060408385031215610da657600080fd5b610daf83610c55565b9150610c9460208401610c55565b600181811c90821680610dd157607f821691505b60208210811415610df257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610e2157610e21610df8565b500190565b600082821015610e3857610e38610df8565b50039056fea26469706673582212201386e735025cbb0cf1805fd55167774354486301f58ae37b970d23e4b244557864736f6c634300080c0033", - ), - storage: storage{ - // string private _name - "0x03": "Wrapped OAS", - // string private _symbol - "0x04": "WOAS", - }, - }, - { - contract: stakableOAS, - // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/6da1ef708fd80fb58ee07f7802091e1da0e4dad3/contracts/token/SOAS.sol - code: mustDecodeCode( - "0x6080604052600436106101145760003560e01c80636dec93f1116100a057806395d89b411161006457806395d89b4114610328578063a457c2d71461033d578063a9059cbb1461035d578063d97830b11461037d578063dd62ed3e1461041a57600080fd5b80636dec93f11461025c57806370a082311461027c578063775ad527146102b25780637de6b1db146102d257806392de7482146102f257600080fd5b8063313ce567116100e7578063313ce567146101b3578063379607f5146101cf57806339509351146101f1578063546cec3e1461021157806364b55bed1461022457600080fd5b806306fdde0314610119578063095ea7b31461014457806318160ddd1461017457806323b872dd14610193575b600080fd5b34801561012557600080fd5b5061012e610460565b60405161013b9190611497565b60405180910390f35b34801561015057600080fd5b5061016461015f366004611508565b6104f2565b604051901515815260200161013b565b34801561018057600080fd5b506002545b60405190815260200161013b565b34801561019f57600080fd5b506101646101ae366004611532565b61050c565b3480156101bf57600080fd5b506040516012815260200161013b565b3480156101db57600080fd5b506101ef6101ea36600461156e565b610530565b005b3480156101fd57600080fd5b5061016461020c366004611508565b61069c565b6101ef61021f36600461159e565b6106db565b34801561023057600080fd5b5061024461023f36600461156e565b61092f565b6040516001600160a01b03909116815260200161013b565b34801561026857600080fd5b506101856102773660046115e1565b610959565b34801561028857600080fd5b506101856102973660046115e1565b6001600160a01b031660009081526020819052604090205490565b3480156102be57600080fd5b506101ef6102cd3660046115fc565b610a57565b3480156102de57600080fd5b506101ef6102ed36600461156e565b610b27565b3480156102fe57600080fd5b5061024461030d3660046115e1565b6007602052600090815260409020546001600160a01b031681565b34801561033457600080fd5b5061012e610c68565b34801561034957600080fd5b50610164610358366004611508565b610c77565b34801561036957600080fd5b50610164610378366004611508565b610d0e565b34801561038957600080fd5b506103dd6103983660046115e1565b6006602052600090815260409020805460018201546002830154600390930154919290916001600160401b0380831692600160401b900416906001600160a01b031685565b6040805195865260208601949094526001600160401b03928316938501939093521660608301526001600160a01b0316608082015260a00161013b565b34801561042657600080fd5b506101856104353660046115fc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60606003805461046f9061162f565b80601f016020809104026020016040519081016040528092919081815260200182805461049b9061162f565b80156104e85780601f106104bd576101008083540402835291602001916104e8565b820191906000526020600020905b8154815290600101906020018083116104cb57829003601f168201915b5050505050905090565b600033610500818585610d1c565b60019150505b92915050565b60003361051a858285610e41565b610525858585610ed3565b506001949350505050565b8061054e57604051637bc90c0560e11b815260040160405180910390fd5b336000818152600760208181526040808420546001600160a01b03168085526006835290842060018101549585529290915290929061058c90610959565b6105969190611680565b9050808311156105b9576040516377dfdf2160e01b815260040160405180910390fd5b828260010160008282546105cd9190611697565b909155506105dd905033846110ac565b604051600090339085908381818185875af1925050503d806000811461061f576040519150601f19603f3d011682016040523d82523d6000602084013e610624565b606091505b5050905080610646576040516312171d8360e31b815260040160405180910390fd5b336000908152600760209081526040918290205491518681526001600160a01b03909216917f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4910160405180910390a250505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061050090829086906106d6908790611697565b610d1c565b6001600160a01b03831615806107505750610750600580548060200260200160405190810160405280929190818152602001828054801561074557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610727575b5050505050846111fe565b1561076e5760405163ac6b05f560e01b815260040160405180910390fd5b6001600160a01b0383811660009081526007602052604090205416156107a757604051630fb356f360e21b815260040160405180910390fd5b42826001600160401b03161115806107d15750806001600160401b0316826001600160401b031610155b156107ef57604051636385801560e11b815260040160405180910390fd5b3461080d57604051637bc90c0560e11b815260040160405180910390fd5b6108178334611264565b6040805160a08101825234808252600060208084018281526001600160401b038089168688019081528882166060880190815233608089019081526001600160a01b038d8116808952600688528b89209a518b55955160018b0155925160028a01805493518616600160401b026fffffffffffffffffffffffffffffffff19909416919095161791909117909255905160039096018054969091166001600160a01b031996871617905560079091529084902080549093168117909255915190917fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb916109229190869086909283526001600160401b03918216602084015216604082015260600190565b60405180910390a2505050565b6005818154811061093f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b038082166000908152600660209081526040808320815160a081018352815480825260018301549482019490945260028201546001600160401b0380821694830194909452600160401b900490921660608301526003015490931660808401529091906109d05750600092915050565b80604001516001600160401b03164210156109ee5750600092915050565b600081604001518260600151610a0491906116af565b6001600160401b031682604001516001600160401b031642610a269190611680565b8351610a3291906116d7565b610a3c91906116f6565b8251909150811115610a5057505192915050565b9392505050565b6001600160a01b03828116600090815260066020526040902060030154163314610a945760405163d8d5894f60e01b815260040160405180910390fd5b6001600160a01b038181166000908152600760205260409020541615610acd57604051630fb356f360e21b815260040160405180910390fd5b6001600160a01b0381811660008181526007602052604080822080546001600160a01b0319169487169485179055519192917fdc5d0ac53741544fef2e2ae9b2c8006a9e56f9708377f300d8e825f8d411617d9190a35050565b80610b4557604051637bc90c0560e11b815260040160405180910390fd5b336000908152600760209081526040808320546001600160a01b031683526006909152902060018101548154610b7b9190611680565b821115610b9b576040516377dfdf2160e01b815260040160405180910390fd5b610ba533836110ac565b60038101546040516000916001600160a01b03169084908381818185875af1925050503d8060008114610bf4576040519150601f19603f3d011682016040523d82523d6000602084013e610bf9565b606091505b5050905080610c1b576040516312171d8360e31b815260040160405180910390fd5b336000908152600760209081526040918290205491518581526001600160a01b03909216917f443630e54cc5dd8826c25d7467193a3b7a0a67b4ed73c14fb477e8e7eed3fd489101610922565b60606004805461046f9061162f565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610d015760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6105258286868403610d1c565b600033610500818585610ed3565b6001600160a01b038316610d7e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cf8565b6001600160a01b038216610ddf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cf8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610ecd5781811015610ec05760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610cf8565b610ecd8484848403610d1c565b50505050565b6001600160a01b038316610f375760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cf8565b6001600160a01b038216610f995760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cf8565b610fa483838361134f565b6001600160a01b0383166000908152602081905260409020548181101561101c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610cf8565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611053908490611697565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161109f91815260200190565b60405180910390a3610ecd565b6001600160a01b03821661110c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610cf8565b6111188260008361134f565b6001600160a01b0382166000908152602081905260409020548181101561118c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610cf8565b6001600160a01b03831660009081526020819052604081208383039055600280548492906111bb908490611680565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610e34565b6000805b835181101561125a57826001600160a01b031684828151811061122757611227611718565b60200260200101516001600160a01b03161415611248576001915050610506565b806112528161172e565b915050611202565b5060009392505050565b6001600160a01b0382166112ba5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610cf8565b6112c66000838361134f565b80600260008282546112d89190611697565b90915550506001600160a01b03821660009081526020819052604081208054839290611305908490611697565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038316158061136c57506001600160a01b038216155b1561137657505050565b6113d86005805480602002602001604051908101604052809291908181526020018280548015610745576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610727575050505050846111fe565b806114425750611442600580548060200260200160405190810160405280929190818152602001828054801561143757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611419575b5050505050836111fe565b1561144c57505050565b6001600160a01b0380831660009081526007602052604080822054868416835291205482169116141561147e57505050565b6040516325cdf54f60e21b815260040160405180910390fd5b600060208083528351808285015260005b818110156114c4578581018301518582016040015282016114a8565b818111156114d6576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461150357600080fd5b919050565b6000806040838503121561151b57600080fd5b611524836114ec565b946020939093013593505050565b60008060006060848603121561154757600080fd5b611550846114ec565b925061155e602085016114ec565b9150604084013590509250925092565b60006020828403121561158057600080fd5b5035919050565b80356001600160401b038116811461150357600080fd5b6000806000606084860312156115b357600080fd5b6115bc846114ec565b92506115ca60208501611587565b91506115d860408501611587565b90509250925092565b6000602082840312156115f357600080fd5b610a50826114ec565b6000806040838503121561160f57600080fd5b611618836114ec565b9150611626602084016114ec565b90509250929050565b600181811c9082168061164357607f821691505b6020821081141561166457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156116925761169261166a565b500390565b600082198211156116aa576116aa61166a565b500190565b60006001600160401b03838116908316818110156116cf576116cf61166a565b039392505050565b60008160001904831182151516156116f1576116f161166a565b500290565b60008261171357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006000198214156117425761174261166a565b506001019056fea2646970667358221220f21d097e602c55de21338fa3788df67cbc61610d671043339c5528343e0b804364736f6c634300080c0033", - ), - storage: storage{ - // string private _name - "0x03": "Stakable OAS", - // string private _symbol - "0x04": "SOAS", - // address[] public allowedAddresses - "0x05": array{ - StakeManagerAddress, - l1BuildDeposit.address, - }, - }, - }, - { - contract: l1StandardERC20Factory, - // commit: https://github.com/oasysgames/oasys-optimism/blob/1386e7b9ea4e0dd7d67370991a0471c54b9a6888/packages/contracts/contracts/oasys/L1/token/L1StandardERC20Factory.sol - code: mustDecodeCode( - "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80630b6ec17814610030575b600080fd5b61004361003e3660046101c2565b610045565b005b6000338383604051610056906100db565b610062939291906102a0565b604051809103906000f08015801561007e573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff16826040516100a691906102eb565b604051908190038120907fd714a43f627528ad95fc3dcf6c453cf595be2f4d75c58c4273f17208ed899f4490600090a3505050565b6124338061030883390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261012857600080fd5b813567ffffffffffffffff80821115610143576101436100e8565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610189576101896100e8565b816040528381528660208588010111156101a257600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156101d557600080fd5b823567ffffffffffffffff808211156101ed57600080fd5b6101f986838701610117565b9350602085013591508082111561020f57600080fd5b5061021c85828601610117565b9150509250929050565b60005b83811015610241578181015183820152602001610229565b83811115610250576000848401525b50505050565b6000815180845261026e816020860160208601610226565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006102cf6060830185610256565b82810360408401526102e18185610256565b9695505050505050565b600082516102fd818460208701610226565b919091019291505056fe60806040523480156200001157600080fd5b5060405162002433380380620024338339810160408190526200003491620003b6565b8151829082906200004d90600590602085019062000243565b5080516200006390600690602084019062000243565b50506007805460ff19169055506200007d600084620000de565b620000a97f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a684620000de565b620000d57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a84620000de565b5050506200047d565b620000f582826200012160201b62000abd1760201c565b60008281526001602090815260409091206200011c91839062000ac762000131821b17901c565b505050565b6200012d828262000151565b5050565b600062000148836001600160a01b038416620001f1565b90505b92915050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166200012d576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001ad3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008181526001830160205260408120546200023a575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200014b565b5060006200014b565b828054620002519062000440565b90600052602060002090601f016020900481019282620002755760008555620002c0565b82601f106200029057805160ff1916838001178555620002c0565b82800160010185558215620002c0579182015b82811115620002c0578251825591602001919060010190620002a3565b50620002ce929150620002d2565b5090565b5b80821115620002ce5760008155600101620002d3565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200031157600080fd5b81516001600160401b03808211156200032e576200032e620002e9565b604051601f8301601f19908116603f01168101908282118183101715620003595762000359620002e9565b816040528381526020925086838588010111156200037657600080fd5b600091505b838210156200039a57858201830151818301840152908201906200037b565b83821115620003ac5760008385830101525b9695505050505050565b600080600060608486031215620003cc57600080fd5b83516001600160a01b0381168114620003e457600080fd5b60208501519093506001600160401b03808211156200040257600080fd5b6200041087838801620002ff565b935060408601519150808211156200042757600080fd5b506200043686828701620002ff565b9150509250925092565b600181811c908216806200045557607f821691505b602082108114156200047757634e487b7160e01b600052602260045260246000fd5b50919050565b611fa6806200048d6000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063a457c2d711610097578063d539139311610071578063d5391393146103fa578063d547741f14610421578063dd62ed3e14610434578063e63ab1e91461047a57600080fd5b8063a457c2d7146103c1578063a9059cbb146103d4578063ca15c873146103e757600080fd5b80639010d07c116100d35780639010d07c1461033557806391d148541461036d57806395d89b41146103b1578063a217fddf146103b957600080fd5b806370a08231146102e457806379cc67901461031a5780638456cb591461032d57600080fd5b8063313ce567116101665780633f4ba83a116101405780633f4ba83a146102ab57806340c10f19146102b357806342966c68146102c65780635c975abb146102d957600080fd5b8063313ce5671461027657806336568abe14610285578063395093511461029857600080fd5b806318160ddd116101a257806318160ddd1461021957806323b872dd1461022b578063248a9ca31461023e5780632f2ff15d1461026157600080fd5b806301ffc9a7146101c957806306fdde03146101f1578063095ea7b314610206575b600080fd5b6101dc6101d7366004611b44565b6104a1565b60405190151581526020015b60405180910390f35b6101f96104fd565b6040516101e89190611bb2565b6101dc610214366004611c2c565b61058f565b6004545b6040519081526020016101e8565b6101dc610239366004611c56565b6105a5565b61021d61024c366004611c92565b60009081526020819052604090206001015490565b61027461026f366004611cab565b610676565b005b604051601281526020016101e8565b610274610293366004611cab565b61069d565b6101dc6102a6366004611c2c565b6106bf565b610274610708565b6102746102c1366004611c2c565b6107ae565b6102746102d4366004611c92565b610858565b60075460ff166101dc565b61021d6102f2366004611cd7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b610274610328366004611c2c565b610865565b6102746108ff565b610348610343366004611cf2565b6109a3565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b6101dc61037b366004611cab565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f96109c2565b61021d600081565b6101dc6103cf366004611c2c565b6109d1565b6101dc6103e2366004611c2c565b610a8f565b61021d6103f5366004611c92565b610a9c565b61021d7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61027461042f366004611cab565b610ab3565b61021d610442366004611d14565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020908152604080832093909416825291909152205490565b61021d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f0000000000000000000000000000000000000000000000000000000014806104f757506104f782610ae9565b92915050565b60606005805461050c90611d3e565b80601f016020809104026020016040519081016040528092919081815260200182805461053890611d3e565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b5050505050905090565b600061059c338484610b80565b50600192915050565b60006105b2848484610cff565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602090815260408083203384529091529020548281101561065e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61066b8533858403610b80565b506001949350505050565b6106808282610f71565b60008281526001602052604090206106989082610ac7565b505050565b6106a78282610f97565b6000828152600160205260409020610698908261102c565b33600081815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161059c918590610703908690611dc1565b610b80565b6107327f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a3361037b565b6107a45760405162461bcd60e51b815260206004820152603960248201527f45524332305072657365744d696e7465725061757365723a206d75737420686160448201527f76652070617573657220726f6c6520746f20756e7061757365000000000000006064820152608401610655565b6107ac61104e565b565b6107d87f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a63361037b565b61084a5760405162461bcd60e51b815260206004820152603660248201527f45524332305072657365744d696e7465725061757365723a206d75737420686160448201527f7665206d696e74657220726f6c6520746f206d696e74000000000000000000006064820152608401610655565b6108548282611115565b5050565b6108623382611227565b50565b60006108718333610442565b9050818110156108e85760405162461bcd60e51b8152602060048201526024808201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760448201527f616e6365000000000000000000000000000000000000000000000000000000006064820152608401610655565b6108f58333848403610b80565b6106988383611227565b6109297f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a3361037b565b61099b5760405162461bcd60e51b815260206004820152603760248201527f45524332305072657365744d696e7465725061757365723a206d75737420686160448201527f76652070617573657220726f6c6520746f2070617573650000000000000000006064820152608401610655565b6107ac6113ec565b60008281526001602052604081206109bb9083611492565b9392505050565b60606006805461050c90611d3e565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205482811015610a785760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610655565b610a853385858403610b80565b5060019392505050565b600061059c338484610cff565b60008181526001602052604081206104f79061149e565b6106a782826114a8565b61085482826114ce565b60006109bb8373ffffffffffffffffffffffffffffffffffffffff84166115be565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104f757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146104f7565b73ffffffffffffffffffffffffffffffffffffffff8316610c085760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610655565b73ffffffffffffffffffffffffffffffffffffffff8216610c915760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610655565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d885760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610655565b73ffffffffffffffffffffffffffffffffffffffff8216610e115760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610655565b610e1c83838361160d565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602052604090205481811015610eb85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610655565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260026020526040808220858503905591851681529081208054849290610efc908490611dc1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f6291815260200190565b60405180910390a35b50505050565b600082815260208190526040902060010154610f8d8133611618565b61069883836114ce565b73ffffffffffffffffffffffffffffffffffffffff811633146110225760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610655565b61085482826116ce565b60006109bb8373ffffffffffffffffffffffffffffffffffffffff8416611785565b60075460ff166110a05760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610655565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff82166111785760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610655565b6111846000838361160d565b80600460008282546111969190611dc1565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040812080548392906111d0908490611dc1565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166112b05760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610655565b6112bc8260008361160d565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054818110156113585760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610655565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600260205260408120838303905560048054849290611394908490611dd9565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b60075460ff161561143f5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610655565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110eb3390565b60006109bb8383611878565b60006104f7825490565b6000828152602081905260409020600101546114c48133611618565b61069883836116ce565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166108545760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556115603390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000818152600183016020526040812054611605575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556104f7565b5060006104f7565b6106988383836118a2565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166108545761166e8173ffffffffffffffffffffffffffffffffffffffff16601461191b565b61167983602061191b565b60405160200161168a929190611df0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262461bcd60e51b825261065591600401611bb2565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156108545760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000818152600183016020526040812054801561186e5760006117a9600183611dd9565b85549091506000906117bd90600190611dd9565b90508181146118225760008660000182815481106117dd576117dd611e71565b906000526020600020015490508087600001848154811061180057611800611e71565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061183357611833611ea0565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506104f7565b60009150506104f7565b600082600001828154811061188f5761188f611e71565b9060005260206000200154905092915050565b60075460ff16156106985760405162461bcd60e51b815260206004820152602a60248201527f45524332305061757361626c653a20746f6b656e207472616e7366657220776860448201527f696c6520706175736564000000000000000000000000000000000000000000006064820152608401610655565b6060600061192a836002611ecf565b611935906002611dc1565b67ffffffffffffffff81111561194d5761194d611f0c565b6040519080825280601f01601f191660200182016040528015611977576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106119ae576119ae611e71565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611a1157611a11611e71565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000611a4d846002611ecf565b611a58906001611dc1565b90505b6001811115611af5577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611a9957611a99611e71565b1a60f81b828281518110611aaf57611aaf611e71565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93611aee81611f3b565b9050611a5b565b5083156109bb5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610655565b600060208284031215611b5657600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146109bb57600080fd5b60005b83811015611ba1578181015183820152602001611b89565b83811115610f6b5750506000910152565b6020815260008251806020840152611bd1816040850160208701611b86565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611c2757600080fd5b919050565b60008060408385031215611c3f57600080fd5b611c4883611c03565b946020939093013593505050565b600080600060608486031215611c6b57600080fd5b611c7484611c03565b9250611c8260208501611c03565b9150604084013590509250925092565b600060208284031215611ca457600080fd5b5035919050565b60008060408385031215611cbe57600080fd5b82359150611cce60208401611c03565b90509250929050565b600060208284031215611ce957600080fd5b6109bb82611c03565b60008060408385031215611d0557600080fd5b50508035926020909101359150565b60008060408385031215611d2757600080fd5b611d3083611c03565b9150611cce60208401611c03565b600181811c90821680611d5257607f821691505b60208210811415611d8c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611dd457611dd4611d92565b500190565b600082821015611deb57611deb611d92565b500390565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611e28816017850160208801611b86565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351611e65816028840160208801611b86565b01602801949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611f0757611f07611d92565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081611f4a57611f4a611d92565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea2646970667358221220279d5b6f44263b9c7a2fd8e5a6715f8168357d04499c7b1fed9172c006be848864736f6c63430008090033a2646970667358221220ac8d6c619affd4c59d71b416b87e6e7e116b5c247a3eae1b78fa4a14dbacc26964736f6c63430008090033", - ), - }, - { - contract: l1StandardERC721Factory, - // commit: https://github.com/oasysgames/oasys-optimism/blob/1386e7b9ea4e0dd7d67370991a0471c54b9a6888/packages/contracts/contracts/oasys/L1/token/L1StandardERC721Factory.sol - code: mustDecodeCode( - "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c4af445814610030575b600080fd5b61004361003e3660046101c6565b610045565b005b600033848484604051610057906100de565b61006494939291906102c8565b604051809103906000f080158015610080573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff16836040516100a89190610328565b604051908190038120907fbda470470721b5a2c56d61dc0aa9496dd02d39170f9dff803c35efbab673652290600090a350505050565b61316e806200034583390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261012c57600080fd5b813567ffffffffffffffff80821115610147576101476100ec565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561018d5761018d6100ec565b816040528381528660208588010111156101a657600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156101db57600080fd5b833567ffffffffffffffff808211156101f357600080fd5b6101ff8783880161011b565b9450602086013591508082111561021557600080fd5b6102218783880161011b565b9350604086013591508082111561023757600080fd5b506102448682870161011b565b9150509250925092565b60005b83811015610269578181015183820152602001610251565b83811115610278576000848401525b50505050565b6000815180845261029681602086016020860161024e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff851681526080602082015260006102f7608083018661027e565b8281036040840152610309818661027e565b9050828103606084015261031d818561027e565b979650505050505050565b6000825161033a81846020870161024e565b919091019291505056fe60806040523480156200001157600080fd5b506040516200316e3803806200316e8339810160408190526200003491620003cd565b8251839083906200004d9060029060208501906200025a565b508051620000639060039060208401906200025a565b5050600c805460ff191690555080516200008590600d9060208401906200025a565b5062000093600085620000f5565b620000bf7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a685620000f5565b620000eb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a85620000f5565b50505050620004bc565b6200010c82826200013860201b62000fb91760201c565b60008281526001602090815260409091206200013391839062000fc362000148821b17901c565b505050565b62000144828262000168565b5050565b60006200015f836001600160a01b03841662000208565b90505b92915050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000144576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001c43390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000818152600183016020526040812054620002515750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000162565b50600062000162565b82805462000268906200047f565b90600052602060002090601f0160209004810192826200028c5760008555620002d7565b82601f10620002a757805160ff1916838001178555620002d7565b82800160010185558215620002d7579182015b82811115620002d7578251825591602001919060010190620002ba565b50620002e5929150620002e9565b5090565b5b80821115620002e55760008155600101620002ea565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200032857600080fd5b81516001600160401b038082111562000345576200034562000300565b604051601f8301601f19908116603f0116810190828211818310171562000370576200037062000300565b816040528381526020925086838588010111156200038d57600080fd5b600091505b83821015620003b1578582018301518183018401529082019062000392565b83821115620003c35760008385830101525b9695505050505050565b60008060008060808587031215620003e457600080fd5b84516001600160a01b0381168114620003fc57600080fd5b60208601519094506001600160401b03808211156200041a57600080fd5b620004288883890162000316565b945060408701519150808211156200043f57600080fd5b6200044d8883890162000316565b935060608701519150808211156200046457600080fd5b50620004738782880162000316565b91505092959194509250565b600181811c908216806200049457607f821691505b60208210811415620004b657634e487b7160e01b600052602260045260246000fd5b50919050565b612ca280620004cc6000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80636352211e1161010f578063b88d4fde116100a2578063d539139311610071578063d53913931461041b578063d547741f14610442578063e63ab1e914610455578063e985e9c51461047c57600080fd5b8063b88d4fde146103cf578063c87b56dd146103e2578063ca15c873146103f5578063d35e29d71461040857600080fd5b806391d14854116100de57806391d148541461037557806395d89b41146103ac578063a217fddf146103b4578063a22cb465146103bc57600080fd5b80636352211e1461033457806370a08231146103475780638456cb591461035a5780639010d07c1461036257600080fd5b80632f2ff15d1161018757806342842e0e1161015657806342842e0e146102f057806342966c68146103035780634f6ccce7146103165780635c975abb1461032957600080fd5b80632f2ff15d146102af5780632f745c59146102c257806336568abe146102d55780633f4ba83a146102e857600080fd5b8063095ea7b3116101c3578063095ea7b31461025257806318160ddd1461026757806323b872dd14610279578063248a9ca31461028c57600080fd5b806301ffc9a7146101ea57806306fdde0314610212578063081812fc14610227575b600080fd5b6101fd6101f83660046125e3565b6104b8565b60405190151581526020015b60405180910390f35b61021a6104c9565b6040516102099190612676565b61023a610235366004612689565b61055b565b6040516001600160a01b039091168152602001610209565b6102656102603660046126be565b610606565b005b600a545b604051908152602001610209565b6102656102873660046126e8565b610738565b61026b61029a366004612689565b60009081526020819052604090206001015490565b6102656102bd366004612724565b6107c0565b61026b6102d03660046126be565b6107e2565b6102656102e3366004612724565b61088a565b6102656108ac565b6102656102fe3660046126e8565b610952565b610265610311366004612689565b61096d565b61026b610324366004612689565b6109f4565b600c5460ff166101fd565b61023a610342366004612689565b610a98565b61026b610355366004612750565b610b23565b610265610bbd565b61023a61037036600461276b565b610c61565b6101fd610383366004612724565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61021a610c80565b61026b600081565b6102656103ca36600461278d565b610c8f565b6102656103dd3660046127f8565b610d72565b61021a6103f0366004612689565b610e00565b61026b610403366004612689565b610ee8565b6102656104163660046128f2565b610eff565b61026b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610265610450366004612724565b610faf565b61026b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6101fd61048a366004612927565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b60006104c382610fd8565b92915050565b6060600280546104d890612951565b80601f016020809104026020016040519081016040528092919081815260200182805461050490612951565b80156105515780601f1061052657610100808354040283529160200191610551565b820191906000526020600020905b81548152906001019060200180831161053457829003601f168201915b5050505050905090565b6000818152600460205260408120546001600160a01b03166105ea5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061061182610a98565b9050806001600160a01b0316836001600160a01b0316141561069b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084016105e1565b336001600160a01b03821614806106b757506106b7813361048a565b6107295760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016105e1565b610733838361102e565b505050565b610743335b826110b4565b6107b55760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016105e1565b6107338383836111bc565b6107ca82826113ac565b60008281526001602052604090206107339082610fc3565b60006107ed83610b23565b82106108615760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e647300000000000000000000000000000000000000000060648201526084016105e1565b506001600160a01b03919091166000908152600860209081526040808320938352929052205490565b61089482826113d2565b6000828152600160205260409020610733908261145a565b6108d67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33610383565b6109485760405162461bcd60e51b815260206004820152603260248201527f4c315374616e646172644552433732313a206d7573742068617665207061757360448201527f657220726f6c6520746f20756e7061757365000000000000000000000000000060648201526084016105e1565b61095061146f565b565b61073383838360405180602001604052806000815250610d72565b6109763361073d565b6109e85760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f7665640000000000000000000000000000000060648201526084016105e1565b6109f181611529565b50565b60006109ff600a5490565b8210610a735760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e6473000000000000000000000000000000000000000060648201526084016105e1565b600a8281548110610a8657610a866129a5565b90600052602060002001549050919050565b6000818152600460205260408120546001600160a01b0316806104c35760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e000000000000000000000000000000000000000000000060648201526084016105e1565b60006001600160a01b038216610ba15760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f20616464726573730000000000000000000000000000000000000000000060648201526084016105e1565b506001600160a01b031660009081526005602052604090205490565b610be77f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33610383565b610c595760405162461bcd60e51b815260206004820152603060248201527f4c315374616e646172644552433732313a206d7573742068617665207061757360448201527f657220726f6c6520746f2070617573650000000000000000000000000000000060648201526084016105e1565b6109506115e8565b6000828152600160205260408120610c79908361168e565b9392505050565b6060600380546104d890612951565b6001600160a01b038216331415610ce85760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105e1565b3360008181526007602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610d7c33836110b4565b610dee5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016105e1565b610dfa8484848461169a565b50505050565b6000818152600460205260409020546060906001600160a01b0316610e8d5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e000000000000000000000000000000000060648201526084016105e1565b6000610e97611723565b90506000815111610eb75760405180602001604052806000815250610c79565b80610ec184611732565b604051602001610ed29291906129d4565b6040516020818303038152906040529392505050565b60008181526001602052604081206104c390611864565b610f297f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633610383565b610f9b5760405162461bcd60e51b815260206004820152602f60248201527f4c315374616e646172644552433732313a206d7573742068617665206d696e7460448201527f657220726f6c6520746f206d696e74000000000000000000000000000000000060648201526084016105e1565b610fab828263ffffffff1661186e565b5050565b61089482826119d4565b610fab82826119fa565b6000610c79836001600160a01b038416611ab6565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806104c357506104c382611b05565b600081815260066020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416908117909155819061107b82610a98565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600460205260408120546001600160a01b031661113e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016105e1565b600061114983610a98565b9050806001600160a01b0316846001600160a01b031614806111845750836001600160a01b03166111798461055b565b6001600160a01b0316145b806111b457506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166111cf82610a98565b6001600160a01b03161461124b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e000000000000000000000000000000000000000000000060648201526084016105e1565b6001600160a01b0382166112c65760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016105e1565b6112d1838383611ba7565b6112dc60008261102e565b6001600160a01b0383166000908152600560205260408120805460019290611305908490612a32565b90915550506001600160a01b0382166000908152600560205260408120805460019290611333908490612a49565b909155505060008181526004602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000828152602081905260409020600101546113c88133611bb2565b61073383836119fa565b6001600160a01b03811633146114505760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016105e1565b610fab8282611c4e565b6000610c79836001600160a01b038416611ceb565b600c5460ff166114c15760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016105e1565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600061153482610a98565b905061154281600084611ba7565b61154d60008361102e565b6001600160a01b0381166000908152600560205260408120805460019290611576908490612a32565b909155505060008281526004602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600c5460ff161561163b5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016105e1565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861150c3390565b6000610c798383611dde565b6116a58484846111bc565b6116b184848484611e08565b610dfa5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016105e1565b6060600d80546104d890612951565b60608161177257505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561179c578061178681612a61565b91506117959050600a83612ac9565b9150611776565b60008167ffffffffffffffff8111156117b7576117b76127c9565b6040519080825280601f01601f1916602001820160405280156117e1576020820181803683370190505b5090505b84156111b4576117f6600183612a32565b9150611803600a86612add565b61180e906030612a49565b60f81b818381518110611823576118236129a5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061185d600a86612ac9565b94506117e5565b60006104c3825490565b6001600160a01b0382166118c45760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105e1565b6000818152600460205260409020546001600160a01b0316156119295760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105e1565b61193560008383611ba7565b6001600160a01b038216600090815260056020526040812080546001929061195e908490612a49565b909155505060008181526004602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000828152602081905260409020600101546119f08133611bb2565b6107338383611c4e565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610fab576000828152602081815260408083206001600160a01b0385168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611a723390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000818152600183016020526040812054611afd575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556104c3565b5060006104c3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480611b9857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806104c357506104c382611fd3565b610733838383612029565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610fab57611bee816001600160a01b031660146120ad565b611bf98360206120ad565b604051602001611c0a929190612af1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262461bcd60e51b82526105e191600401612676565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1615610fab576000828152602081815260408083206001600160a01b038516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008181526001830160205260408120548015611dd4576000611d0f600183612a32565b8554909150600090611d2390600190612a32565b9050818114611d88576000866000018281548110611d4357611d436129a5565b9060005260206000200154905080876000018481548110611d6657611d666129a5565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611d9957611d99612b72565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506104c3565b60009150506104c3565b6000826000018281548110611df557611df56129a5565b9060005260206000200154905092915050565b60006001600160a01b0384163b15611fc8576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290611e65903390899088908890600401612ba1565b602060405180830381600087803b158015611e7f57600080fd5b505af1925050508015611ecd575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611eca91810190612bdd565b60015b611f7d573d808015611efb576040519150601f19603f3d011682016040523d82523d6000602084013e611f00565b606091505b508051611f755760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016105e1565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490506111b4565b506001949350505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f0000000000000000000000000000000000000000000000000000000014806104c357506104c3826122d6565b61203483838361236d565b600c5460ff16156107335760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201527f68696c652070617573656400000000000000000000000000000000000000000060648201526084016105e1565b606060006120bc836002612bfa565b6120c7906002612a49565b67ffffffffffffffff8111156120df576120df6127c9565b6040519080825280601f01601f191660200182016040528015612109576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612140576121406129a5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106121a3576121a36129a5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006121df846002612bfa565b6121ea906001612a49565b90505b6001811115612287577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061222b5761222b6129a5565b1a60f81b828281518110612241576122416129a5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c9361228081612c37565b90506121ed565b508315610c795760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016105e1565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104c357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146104c3565b6001600160a01b0383166123c8576123c381600a80546000838152600b60205260408120829055600182018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80155565b6123eb565b816001600160a01b0316836001600160a01b0316146123eb576123eb8382612425565b6001600160a01b03821661240257610733816124c2565b826001600160a01b0316826001600160a01b031614610733576107338282612571565b6000600161243284610b23565b61243c9190612a32565b60008381526009602052604090205490915080821461248f576001600160a01b03841660009081526008602090815260408083208584528252808320548484528184208190558352600990915290208190555b5060009182526009602090815260408084208490556001600160a01b039094168352600881528383209183525290812055565b600a546000906124d490600190612a32565b6000838152600b6020526040812054600a80549394509092849081106124fc576124fc6129a5565b9060005260206000200154905080600a838154811061251d5761251d6129a5565b6000918252602080832090910192909255828152600b9091526040808220849055858252812055600a80548061255557612555612b72565b6001900381819060005260206000200160009055905550505050565b600061257c83610b23565b6001600160a01b039093166000908152600860209081526040808320868452825280832085905593825260099052919091209190915550565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146109f157600080fd5b6000602082840312156125f557600080fd5b8135610c79816125b5565b60005b8381101561261b578181015183820152602001612603565b83811115610dfa5750506000910152565b60008151808452612644816020860160208601612600565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610c79602083018461262c565b60006020828403121561269b57600080fd5b5035919050565b80356001600160a01b03811681146126b957600080fd5b919050565b600080604083850312156126d157600080fd5b6126da836126a2565b946020939093013593505050565b6000806000606084860312156126fd57600080fd5b612706846126a2565b9250612714602085016126a2565b9150604084013590509250925092565b6000806040838503121561273757600080fd5b82359150612747602084016126a2565b90509250929050565b60006020828403121561276257600080fd5b610c79826126a2565b6000806040838503121561277e57600080fd5b50508035926020909101359150565b600080604083850312156127a057600080fd5b6127a9836126a2565b9150602083013580151581146127be57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000806080858703121561280e57600080fd5b612817856126a2565b9350612825602086016126a2565b925060408501359150606085013567ffffffffffffffff8082111561284957600080fd5b818701915087601f83011261285d57600080fd5b81358181111561286f5761286f6127c9565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156128b5576128b56127c9565b816040528281528a60208487010111156128ce57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561290557600080fd5b61290e836126a2565b9150602083013563ffffffff811681146127be57600080fd5b6000806040838503121561293a57600080fd5b612943836126a2565b9150612747602084016126a2565b600181811c9082168061296557607f821691505b6020821081141561299f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600083516129e6818460208801612600565b8351908301906129fa818360208801612600565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612a4457612a44612a03565b500390565b60008219821115612a5c57612a5c612a03565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612a9357612a93612a03565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612ad857612ad8612a9a565b500490565b600082612aec57612aec612a9a565b500690565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612b29816017850160208801612600565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351612b66816028840160208801612600565b01602801949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006001600160a01b03808716835280861660208401525083604083015260806060830152612bd3608083018461262c565b9695505050505050565b600060208284031215612bef57600080fd5b8151610c79816125b5565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c3257612c32612a03565b500290565b600081612c4657612c46612a03565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea26469706673582212200bcacce717a531f5447904ba237f25df82679c2bb4d6411537ea678c1245a59b64736f6c63430008090033a26469706673582212205635b6b0f1feb1896524fbca96231ccea89d8ba1c74757babe25ae65f48af29f64736f6c63430008090033", - ), - }, - { - contract: l1BuildParam, - // commit: https://github.com/oasysgames/oasys-optimism/blob/1386e7b9ea4e0dd7d67370991a0471c54b9a6888/packages/contracts/contracts/oasys/L1/build/L1BuildParam.sol - code: mustDecodeCode( - "0x608060405234801561001057600080fd5b50600436106100c95760003560e01c80638d38c6c111610081578063e46020a11161005b578063e46020a11461013e578063e654b1fb14610147578063f066ab8a1461015057600080fd5b80638d38c6c114610124578063ca6573fb1461012d578063ccf987c81461013557600080fd5b806333f67e6a116100b257806333f67e6a146100fe57806335f7317c146101075780635f3d8cf91461010f57600080fd5b80630d1eb646146100ce57806332f51723146100e9575b600080fd5b6100d6610163565b6040519081526020015b60405180910390f35b6100f1610181565b6040516100e091906103dd565b6100d660045481565b6100f161020f565b61012261011d36600461047f565b61021c565b005b6100d660005481565b6100d66102ae565b6100d660015481565b6100d660035481565b6100d660025481565b61012261015e36600461047f565b6102bf565b6000600660405161017491906105a2565b6040518091039020905090565b6005805461018e9061054e565b80601f01602080910402602001604051908101604052809291908181526020018280546101ba9061054e565b80156102075780601f106101dc57610100808354040283529160200191610207565b820191906000526020600020905b8154815290600101906020018083116101ea57829003601f168201915b505050505081565b6006805461018e9061054e565b600580546102299061054e565b159050610297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f74686520636f64652068617320616c7265616479206265656e2073657400000060448201526064015b60405180910390fd5b80516102aa906005906020840190610344565b5050565b6000600560405161017491906105a2565b600680546102cc9061054e565b159050610335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f74686520636f64652068617320616c7265616479206265656e20736574000000604482015260640161028e565b80516102aa9060069060208401905b8280546103509061054e565b90600052602060002090601f01602090048101928261037257600085556103b8565b82601f1061038b57805160ff19168380011785556103b8565b828001600101855582156103b8579182015b828111156103b857825182559160200191906001019061039d565b506103c49291506103c8565b5090565b5b808211156103c457600081556001016103c9565b600060208083528351808285015260005b8181101561040a578581018301518582016040015282016103ee565b8181111561041c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561049157600080fd5b813567ffffffffffffffff808211156104a957600080fd5b818401915084601f8301126104bd57600080fd5b8135818111156104cf576104cf610450565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561051557610515610450565b8160405282815287602084870101111561052e57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600181811c9082168061056257607f821691505b6020821081141561059c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080835481600182811c9150808316806105be57607f831692505b60208084108214156105f7577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b81801561060b576001811461063a57610667565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650610667565b60008a81526020902060005b8681101561065f5781548b820152908501908301610646565b505084890196505b50949897505050505050505056fea264697066735822122098ada51d0593017691b400941339ca317312a35e536abc51d007c2120a0044a864736f6c63430008090033", - ), - storage: storage{ - // uint256 public maxTransactionGasLimit - "0x00": big.NewInt(15_000_000), - // uint256 public l2GasDiscountDivisor - "0x01": big.NewInt(32), - // uint256 public enqueueGasCost - "0x02": big.NewInt(60_000), - // uint256 public fraudProofWindow - "0x03": big.NewInt(604_800), - // uint256 public sequencerPublishWindow - "0x04": big.NewInt(12_592_000), - // bytes public l1StandardBridgeCode, commit: https://github.com/oasysgames/oasys-optimism/blob/28313096a0cc758c3d4fbdc29a2078a5ef78cb70/packages/contracts/contracts/L1/messaging/L1StandardBridge.sol - "0x05": "0x6080604052600436106100c05760003560e01c80638b4c40b0116100745780639a2ac6d51161004e5780639a2ac6d514610288578063a9f9e6751461029b578063b1a1a882146102bb57600080fd5b80638b4c40b0146101375780638f601f661461021557806391c49bf81461025b57600080fd5b8063485cc955116100a5578063485cc955146101b557806358a997f6146101d5578063838b2520146101f557600080fd5b80631532ec341461013e5780633cb747bf1461015e57600080fd5b3661013957333b156101195760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f41000000000000000000000000000000000060448201526064015b60405180910390fd5b610137333362030d40604051806020016040528060008152506102ce565b005b600080fd5b34801561014a57600080fd5b50610137610159366004611357565b61041a565b34801561016a57600080fd5b5060005461018b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101c157600080fd5b506101376101d03660046113ca565b610790565b3480156101e157600080fd5b506101376101f036600461141c565b61086f565b34801561020157600080fd5b5061013761021036600461149f565b6108d6565b34801561022157600080fd5b5061024d6102303660046113ca565b600260209081526000928352604080842090915290825290205481565b6040519081526020016101ac565b34801561026757600080fd5b5060015461018b9073ffffffffffffffffffffffffffffffffffffffff1681565b610137610296366004611535565b6108ef565b3480156102a757600080fd5b506101376102b6366004611598565b610937565b6101376102c9366004611611565b610c59565b600063662a633a60e01b600073deaddeaddeaddeaddeaddeaddeaddeaddead000087873487604051602401610308969594939291906116da565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001549091506103ac9073ffffffffffffffffffffffffffffffffffffffff168483610cef565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23348560405161040b929190611735565b60405180910390a35050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1661045260005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104f25760405162461bcd60e51b815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e746963617465640000000000000000000000000000000000006064820152608401610110565b8073ffffffffffffffffffffffffffffffffffffffff1661052860005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b815260040160206040518083038186803b15801561056d57600080fd5b505afa158015610581573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a5919061174e565b73ffffffffffffffffffffffffffffffffffffffff161461062e5760405162461bcd60e51b815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d657373616765000000000000000000000000000000006064820152608401610110565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8716908690604051610665919061176b565b60006040518083038185875af1925050503d80600081146106a2576040519150601f19603f3d011682016040523d82523d6000602084013e6106a7565b606091505b505090508061071e5760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527f20455448207472616e73666572206661696c65640000000000000000000000006064820152608401610110565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e63187878760405161077f939291906117d0565b60405180910390a350505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff161561081c5760405162461bcd60e51b815260206004820152602660248201527f436f6e74726163742068617320616c7265616479206265656e20696e6974696160448201527f6c697a65642e00000000000000000000000000000000000000000000000000006064820152608401610110565b6000805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560018054929093169116179055565b333b156108be5760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f4100000000000000000000000000000000006044820152606401610110565b6108ce8686333388888888610d77565b505050505050565b6108e68787338888888888610d77565b50505050505050565b61093133858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506102ce92505050565b50505050565b60015473ffffffffffffffffffffffffffffffffffffffff1661096f60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a0f5760405162461bcd60e51b815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e746963617465640000000000000000000000000000000000006064820152608401610110565b8073ffffffffffffffffffffffffffffffffffffffff16610a4560005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b815260040160206040518083038186803b158015610a8a57600080fd5b505afa158015610a9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac2919061174e565b73ffffffffffffffffffffffffffffffffffffffff1614610b4b5760405162461bcd60e51b815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d657373616765000000000000000000000000000000006064820152608401610110565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b1683529290522054610b89908590611822565b73ffffffffffffffffffffffffffffffffffffffff808a166000818152600260209081526040808320948d1683529390529190912091909155610bcd908686610f27565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b388888888604051610c479493929190611839565b60405180910390a45050505050505050565b333b15610ca85760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f4100000000000000000000000000000000006044820152606401610110565b610cea33338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506102ce92505050565b505050565b6000546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b90610d4990869085908790600401611879565b600060405180830381600087803b158015610d6357600080fd5b505af11580156108e6573d6000803e3d6000fd5b610d9973ffffffffffffffffffffffffffffffffffffffff8916873087610ffb565b600063662a633a60e01b89898989898888604051602401610dc097969594939291906118be565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600154909150610e649073ffffffffffffffffffffffffffffffffffffffff168583610cef565b73ffffffffffffffffffffffffffffffffffffffff808a166000908152600260209081526040808320938c1683529290522054610ea290869061191b565b73ffffffffffffffffffffffffffffffffffffffff808b1660008181526002602090815260408083208e86168085529252918290209490945551918a1692917f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039690610f14908b908b908a908a90611839565b60405180910390a4505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610cea9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611059565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526109319085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401610f79565b60006110bb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661114b9092919063ffffffff16565b805190915015610cea57808060200190518101906110d99190611933565b610cea5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610110565b606061115a8484600085611164565b90505b9392505050565b6060824710156111dc5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610110565b843b61122a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610110565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611253919061176b565b60006040518083038185875af1925050503d8060008114611290576040519150601f19603f3d011682016040523d82523d6000602084013e611295565b606091505b50915091506112a58282866112b0565b979650505050505050565b606083156112bf57508161115d565b8251156112cf5782518084602001fd5b8160405162461bcd60e51b81526004016101109190611955565b73ffffffffffffffffffffffffffffffffffffffff8116811461130b57600080fd5b50565b60008083601f84011261132057600080fd5b50813567ffffffffffffffff81111561133857600080fd5b60208301915083602082850101111561135057600080fd5b9250929050565b60008060008060006080868803121561136f57600080fd5b853561137a816112e9565b9450602086013561138a816112e9565b935060408601359250606086013567ffffffffffffffff8111156113ad57600080fd5b6113b98882890161130e565b969995985093965092949392505050565b600080604083850312156113dd57600080fd5b82356113e8816112e9565b915060208301356113f8816112e9565b809150509250929050565b803563ffffffff8116811461141757600080fd5b919050565b60008060008060008060a0878903121561143557600080fd5b8635611440816112e9565b95506020870135611450816112e9565b94506040870135935061146560608801611403565b9250608087013567ffffffffffffffff81111561148157600080fd5b61148d89828a0161130e565b979a9699509497509295939492505050565b600080600080600080600060c0888a0312156114ba57600080fd5b87356114c5816112e9565b965060208801356114d5816112e9565b955060408801356114e5816112e9565b9450606088013593506114fa60808901611403565b925060a088013567ffffffffffffffff81111561151657600080fd5b6115228a828b0161130e565b989b979a50959850939692959293505050565b6000806000806060858703121561154b57600080fd5b8435611556816112e9565b935061156460208601611403565b9250604085013567ffffffffffffffff81111561158057600080fd5b61158c8782880161130e565b95989497509550505050565b600080600080600080600060c0888a0312156115b357600080fd5b87356115be816112e9565b965060208801356115ce816112e9565b955060408801356115de816112e9565b945060608801356115ee816112e9565b93506080880135925060a088013567ffffffffffffffff81111561151657600080fd5b60008060006040848603121561162657600080fd5b61162f84611403565b9250602084013567ffffffffffffffff81111561164b57600080fd5b6116578682870161130e565b9497909650939450505050565b60005b8381101561167f578181015183820152602001611667565b838111156109315750506000910152565b600081518084526116a8816020860160208601611664565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a083015261172960c0830184611690565b98975050505050505050565b82815260406020820152600061115a6040830184611690565b60006020828403121561176057600080fd5b815161115d816112e9565b6000825161177d818460208701611664565b9190910192915050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8381526040602082015260006117ea604083018486611787565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611834576118346117f3565b500390565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015260606040820152600061186f606083018486611787565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006118a86060830185611690565b905063ffffffff83166040830152949350505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261190e60c083018486611787565b9998505050505050505050565b6000821982111561192e5761192e6117f3565b500190565b60006020828403121561194557600080fd5b8151801515811461115d57600080fd5b60208152600061115d602083018461169056fea2646970667358221220ab0015e7cee64db6dc95e6eb0899ae4017c78ab54ebce874e3b018a7bc88850364736f6c63430008090033", - // bytes public l1ERC721BridgeCode, commit: https://github.com/oasysgames/oasys-optimism/blob/1e4bd056e8b1088d28d0125a89b4a2822c064bc0/packages/contracts/contracts/oasys/L1/messaging/L1ERC721Bridge.sol - "0x06": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c80638f45e477116100505780638f45e477146100e8578063c1bcfa4f146100fb578063dbfc9c3f1461010e57600080fd5b806330389967146100775780633cb747bf1461008c578063485cc955146100d5575b600080fd5b61008a6100853660046108f7565b61012e565b005b6000546100ac9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61008a6100e336600461097a565b6101b4565b61008a6100f63660046109b3565b610287565b61008a610109366004610a4b565b6105e9565b6001546100ac9073ffffffffffffffffffffffffffffffffffffffff1681565b333b1561019c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4163636f756e74206e6f7420454f41000000000000000000000000000000000060448201526064015b60405180910390fd5b6101ac8686333388888888610602565b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1615610234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e697469616c697a65206f6e6c79206f6e63650000000000000000000000006044820152606401610193565b6000805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560018054929093169116179055565b60015473ffffffffffffffffffffffffffffffffffffffff166102bf60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e746963617465640000000000000000000000000000000000006064820152608401610193565b8073ffffffffffffffffffffffffffffffffffffffff166103af60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b815260040160206040518083038186803b1580156103f457600080fd5b505afa158015610408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042c9190610ac2565b73ffffffffffffffffffffffffffffffffffffffff16146104cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d657373616765000000000000000000000000000000006064820152608401610193565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8681166024830152604482018690528916906323b872dd90606401600060405180830381600087803b15801561054557600080fd5b505af1158015610559573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f7fb3671da6a9a3c4b54a15e06575a4fa57d6264ad848930a6ea490e03e7514c1888888886040516105d79493929190610b2f565b60405180910390a45050505050505050565b6105f98787338888888888610602565b50505050505050565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152306024830152604482018690528916906323b872dd90606401600060405180830381600087803b15801561067857600080fd5b505af115801561068c573d6000803e3d6000fd5b50505050600063662a633a60e01b898989898988886040516024016106b79796959493929190610b6f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260015490915061075b9073ffffffffffffffffffffffffffffffffffffffff1685836107e8565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fd660bea642cb3af692ff947912f15e82ec86ad0796523ba971c5f369a6f989c5898988886040516107d59493929190610b2f565b60405180910390a4505050505050505050565b6000546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b9061084290869085908790600401610bcc565b600060405180830381600087803b15801561085c57600080fd5b505af11580156105f9573d6000803e3d6000fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461089257600080fd5b50565b803563ffffffff811681146108a957600080fd5b919050565b60008083601f8401126108c057600080fd5b50813567ffffffffffffffff8111156108d857600080fd5b6020830191508360208285010111156108f057600080fd5b9250929050565b60008060008060008060a0878903121561091057600080fd5b863561091b81610870565b9550602087013561092b81610870565b94506040870135935061094060608801610895565b9250608087013567ffffffffffffffff81111561095c57600080fd5b61096889828a016108ae565b979a9699509497509295939492505050565b6000806040838503121561098d57600080fd5b823561099881610870565b915060208301356109a881610870565b809150509250929050565b600080600080600080600060c0888a0312156109ce57600080fd5b87356109d981610870565b965060208801356109e981610870565b955060408801356109f981610870565b94506060880135610a0981610870565b93506080880135925060a088013567ffffffffffffffff811115610a2c57600080fd5b610a388a828b016108ae565b989b979a50959850939692959293505050565b600080600080600080600060c0888a031215610a6657600080fd5b8735610a7181610870565b96506020880135610a8181610870565b95506040880135610a9181610870565b945060608801359350610aa660808901610895565b925060a088013567ffffffffffffffff811115610a2c57600080fd5b600060208284031215610ad457600080fd5b8151610adf81610870565b9392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000610b65606083018486610ae6565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a0830152610bbf60c083018486610ae6565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815260006020606081840152845180606085015260005b81811015610c1657868101830151858201608001528201610bfa565b81811115610c28576000608083870101525b5063ffffffff9490941660408401525050601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016016080019291505056fea2646970667358221220f73507ccec51c3b566074a4e2360e8d06d794b8fdd194ace99d5c7c228a73b4664736f6c63430008090033", - }, - }, - { - contract: l1BuildDeposit, - // commit: https://github.com/oasysgames/oasys-optimism/blob/20eff6890c0b64dc9e8a1e36f347c4d561a1e411/packages/contracts/contracts/oasys/L1/build/L1BuildDeposit.sol - code: mustDecodeCode( - "0x6080604052600436106100e85760003560e01c80636504eff61161008a578063f340fa0111610059578063f340fa0114610310578063f3701da214610323578063f3fef3a314610343578063f45b1b3a1461036357600080fd5b80636504eff61461026a5780636c5928bf14610297578063c4d66de8146102ad578063c76474db146102cd57600080fd5b806338613690116100c657806338613690146101c257806344004cc11461021457806348b9ef40146102345780635e5f2e261461024a57600080fd5b8063061be895146100ed57806319b189ff146101435780631cad5a40146101a0575b600080fd5b3480156100f957600080fd5b50610130610108366004611214565b73ffffffffffffffffffffffffffffffffffffffff1660009081526007602052604090205490565b6040519081526020015b60405180910390f35b34801561014f57600080fd5b5061013061015e366004611236565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526006602090815260408083209584168352948152848220939092168152919052205490565b3480156101ac57600080fd5b506101c06101bb366004611279565b610383565b005b3480156101ce57600080fd5b506003546101ef9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013a565b34801561022057600080fd5b506101c061022f366004611279565b6105b8565b34801561024057600080fd5b5061013060005481565b34801561025657600080fd5b506101ef6102653660046112b5565b6107d5565b34801561027657600080fd5b506002546101ef9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102a357600080fd5b5061013060015481565b3480156102b957600080fd5b506101c06102c8366004611214565b61080c565b3480156102d957600080fd5b506101306102e8366004611214565b73ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205490565b6101c061031e366004611214565b6108b9565b34801561032f57600080fd5b506101c061033e366004611214565b610929565b34801561034f57600080fd5b506101c061035e3660046112ce565b610ada565b34801561036f57600080fd5b5061013061037e3660046112f8565b610bfa565b6103f460048054806020026020016040519081016040528092919081815260200182805480156103e957602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103be575b505050505083610c53565b6104455760405162461bcd60e51b815260206004820152601160248201527f4552433230206e6f7420616c6c6f77656400000000000000000000000000000060448201526064015b60405180910390fd5b3361045284828585610cd7565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015230602483015260448201849052600091908516906323b872dd90606401602060405180830381600087803b1580156104cc57600080fd5b505af11580156104e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610504919061132b565b9050806105535760405162461bcd60e51b815260206004820152601560248201527f4552433230207472616e73666572206661696c65640000000000000000000000604482015260640161043c565b6040805173ffffffffffffffffffffffffffffffffffffffff84811682528681166020830152918101859052908616907f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a96906060015b60405180910390a25050505050565b61062760048054806020026020016040519081016040528092919081815260200182805480156103e95760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103be57505050505083610c53565b6106735760405162461bcd60e51b815260206004820152601160248201527f4552433230206e6f7420616c6c6f776564000000000000000000000000000000604482015260640161043c565b3361068084828585610f8d565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152602482018490526000919085169063a9059cbb90604401602060405180830381600087803b1580156106f457600080fd5b505af1158015610708573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072c919061132b565b90508061077b5760405162461bcd60e51b815260206004820152601560248201527f4552433230207472616e73666572206661696c65640000000000000000000000604482015260640161043c565b6040805173ffffffffffffffffffffffffffffffffffffffff84811682528681166020830152918101859052908616907f342e7ff505a8a0364cd0dc2ff195c315e43bce86b204846ecd36913e117b109e906060016105a9565b600481815481106107e557600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60035473ffffffffffffffffffffffffffffffffffffffff16156108725760405162461bcd60e51b815260206004820152601460248201527f696e697469616c697a65206f6e6c79206f6e6365000000000000000000000000604482015260640161043c565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b33346108c88383600084610cd7565b6040805173ffffffffffffffffffffffffffffffffffffffff848116825260006020830152918101839052908416907f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a969060600160405180910390a2505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146109905760405162461bcd60e51b815260206004820152601d60248201527f6f6e6c79204c314275696c644167656e742063616e2063616c6c206d65000000604482015260640161043c565b6000805473ffffffffffffffffffffffffffffffffffffffff8316825260056020526040909120541015610a065760405162461bcd60e51b815260206004820152601760248201527f6465706f73697420616d6f756e742073686f7274616765000000000000000000604482015260640161043c565b73ffffffffffffffffffffffffffffffffffffffff811660009081526007602052604090205415610a795760405162461bcd60e51b815260206004820152601860248201527f616c7265616479206275696c74206279206275696c6465720000000000000000604482015260640161043c565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260076020908152604091829020439081905591519182527fd8406a18b0c7572d0adae5f0a479d5d802035e2c506e9353b092d25997f61a62910160405180910390a250565b33610ae88382600085610f8d565b60008173ffffffffffffffffffffffffffffffffffffffff168360405160006040518083038185875af1925050503d8060008114610b42576040519150601f19603f3d011682016040523d82523d6000602084013e610b47565b606091505b5050905080610b985760405162461bcd60e51b815260206004820152601360248201527f4f4153207472616e73666572206661696c656400000000000000000000000000604482015260640161043c565b6040805173ffffffffffffffffffffffffffffffffffffffff848116825260006020830152918101859052908516907f342e7ff505a8a0364cd0dc2ff195c315e43bce86b204846ecd36913e117b109e9060600160405180910390a250505050565b73ffffffffffffffffffffffffffffffffffffffff82811660009081527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f860209081526040808320938516835292905220545b92915050565b8151600090815b81811015610ccc578373ffffffffffffffffffffffffffffffffffffffff16858281518110610c8b57610c8b61134d565b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415610cba57600192505050610c4d565b80610cc4816113ab565b915050610c5a565b506000949350505050565b73ffffffffffffffffffffffffffffffffffffffff8416610d3a5760405162461bcd60e51b815260206004820152601760248201527f6275696c646572206973207a65726f2061646472657373000000000000000000604482015260640161043c565b6002546040517f322433e300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529091169063322433e39060240160206040518083038186803b158015610da557600080fd5b505afa158015610db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddd919061132b565b610e295760405162461bcd60e51b815260206004820152601360248201527f6275696c646572206e6f7420616c6c6f77656400000000000000000000000000604482015260640161043c565b60008111610e795760405162461bcd60e51b815260206004820152600e60248201527f616d6f756e74206973207a65726f000000000000000000000000000000000000604482015260640161043c565b6000805473ffffffffffffffffffffffffffffffffffffffff861682526005602052604090912054610eac9083906113e4565b1115610efa5760405162461bcd60e51b815260206004820152601360248201527f6f766572206465706f73697420616d6f756e7400000000000000000000000000604482015260640161043c565b73ffffffffffffffffffffffffffffffffffffffff841660009081526005602052604081208054839290610f2f9084906113e4565b909155505073ffffffffffffffffffffffffffffffffffffffff80831660009081526006602090815260408083208885168452825280832093871683529290529081208054839290610f829084906113e4565b909155505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416610ff05760405162461bcd60e51b815260206004820152601760248201527f6275696c646572206973207a65726f2061646472657373000000000000000000604482015260640161043c565b600081116110405760405162461bcd60e51b815260206004820152600e60248201527f616d6f756e74206973207a65726f000000000000000000000000000000000000604482015260640161043c565b73ffffffffffffffffffffffffffffffffffffffff841660009081526007602052604090205480158061107f5750436001548261107d91906113e4565b105b6110cb5760405162461bcd60e51b815260206004820152600c60248201527f7768696c65206c6f636b65640000000000000000000000000000000000000000604482015260640161043c565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260066020908152604080832089851684528252808320938816835292905220548211156111575760405162461bcd60e51b815260206004820152601c60248201527f796f7572206465706f73697420616d6f756e742073686f727461676500000000604482015260640161043c565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600560205260408120805484929061118c9084906113fc565b909155505073ffffffffffffffffffffffffffffffffffffffff808416600090815260066020908152604080832089851684528252808320938816835292905290812080548492906111df9084906113fc565b90915550505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461120f57600080fd5b919050565b60006020828403121561122657600080fd5b61122f826111eb565b9392505050565b60008060006060848603121561124b57600080fd5b611254846111eb565b9250611262602085016111eb565b9150611270604085016111eb565b90509250925092565b60008060006060848603121561128e57600080fd5b611297846111eb565b92506112a5602085016111eb565b9150604084013590509250925092565b6000602082840312156112c757600080fd5b5035919050565b600080604083850312156112e157600080fd5b6112ea836111eb565b946020939093013593505050565b6000806040838503121561130b57600080fd5b611314836111eb565b9150611322602084016111eb565b90509250929050565b60006020828403121561133d57600080fd5b8151801515811461122f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156113dd576113dd61137c565b5060010190565b600082198211156113f7576113f761137c565b500190565b60008282101561140e5761140e61137c565b50039056fea264697066735822122011b3bee93ce381ab6cf15b1e65cba7ca0fdc5d2e0628152f1e7674ffcc3f3f6d64736f6c63430008090033", - ), - storage: storage{ - // uint256 public requiredAmount - "0x00": genesismap{ - params.OasysMainnetGenesisHash: new( - big.Int, - ).Mul(big.NewInt(params.Ether), big.NewInt(1_000_000)), - defaultGenesisHash: big.NewInt(params.GWei), - }, - // uint256 public lockedBlock - "0x01": genesismap{ - params.OasysMainnetGenesisHash: big.NewInt(1_036_800), - defaultGenesisHash: common.Big1, - }, - // address public allowlistAddress - "0x02": l1BuildAllowList.address, - // address public agentAddress - "0x03": l1BuildAgent.address, - // address[] public allowedTokens - "0x04": array{ - stakableOAS.address, - }, - }, - }, - { - contract: l1BuildAgent, - // commit: https://github.com/oasysgames/oasys-optimism/blob/20eff6890c0b64dc9e8a1e36f347c4d561a1e411/packages/contracts/contracts/oasys/L1/build/L1BuildAgent.sol - code: mustDecodeCode( - "0x608060405234801561001057600080fd5b50600436106100df5760003560e01c806365c11a6c1161008c5780639f05c9ea116100665780639f05c9ea14610222578063a708ca6b14610242578063b61f370e14610255578063c86fc4c91461027557600080fd5b806365c11a6c146101cf57806366ed9d1b146101ef57806385c89dad1461020f57600080fd5b8063408d2693116100bd578063408d2693146101565780634dbbce2a1461018c57806364f57cb3146101ad57600080fd5b80630d5242f7146100e45780631ee5c97d1461012157806328f833b714610136575b600080fd5b6100f76100f23660046110b3565b610288565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013461012f3660046111b5565b6103b3565b005b6000546100f79073ffffffffffffffffffffffffffffffffffffffff1681565b6100f76101643660046111f1565b60009081526005602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b61019f61019a3660046111f1565b6107a1565b60405161011892919061125b565b6101c06101bb366004611346565b6108fe565b60405161011893929190611368565b6004546100f79073ffffffffffffffffffffffffffffffffffffffff1681565b6003546100f79073ffffffffffffffffffffffffffffffffffffffff1681565b61013461021d3660046113c8565b610ab0565b6001546100f79073ffffffffffffffffffffffffffffffffffffffff1681565b610134610250366004611426565b610c6f565b6002546100f79073ffffffffffffffffffffffffffffffffffffffff1681565b610134610283366004611473565b610d99565b805160208083019190912060008481526006909252604082208054835b8181101561034557838382815481106102c0576102c06114e0565b906000526020600020016040516102d79190611563565b60405180910390201415610333576000878152600760205260409020805482908110610305576103056114e0565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1694506103ad9350505050565b8061033d81611665565b9150506102a5565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f7420666f756e64000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b92915050565b60008381526005602052604090205473ffffffffffffffffffffffffffffffffffffffff161561043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f616c7265616479206275696c740000000000000000000000000000000000000060448201526064016103a4565b6000546040517ff3701da200000000000000000000000000000000000000000000000000000000815233600482018190529173ffffffffffffffffffffffffffffffffffffffff169063f3701da290602401600060405180830381600087803b1580156104ab57600080fd5b505af11580156104bf573d6000803e3d6000fd5b50506001546040517f1ee5c97d0000000000000000000000000000000000000000000000000000000081526004810188905273ffffffffffffffffffffffffffffffffffffffff878116602483015286811660448301529091169250631ee5c97d9150606401600060405180830381600087803b15801561053f57600080fd5b505af1158015610553573d6000803e3d6000fd5b50506002546040517f7ef7cca20000000000000000000000000000000000000000000000000000000081526004810188905273ffffffffffffffffffffffffffffffffffffffff85811660248301529091169250637ef7cca29150604401600060405180830381600087803b1580156105cb57600080fd5b505af11580156105df573d6000803e3d6000fd5b50506003546040517f7ef7cca20000000000000000000000000000000000000000000000000000000081526004810188905273ffffffffffffffffffffffffffffffffffffffff85811660248301529091169250637ef7cca29150604401600060405180830381600087803b15801561065757600080fd5b505af115801561066b573d6000803e3d6000fd5b5050600480546040517f7ef7cca200000000000000000000000000000000000000000000000000000000815291820188905273ffffffffffffffffffffffffffffffffffffffff8581166024840152169250637ef7cca29150604401600060405180830381600087803b1580156106e157600080fd5b505af11580156106f5573d6000803e3d6000fd5b50506008805460018082019092557ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff959095169490941790935550506009805491820181556000527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01929092555050565b60008181526006602090815260408083206007835281842081548351818602810186019094528084526060958695939492938592919084015b828210156108865783829060005260206000200180546107f99061150f565b80601f01602080910402602001604051908101604052809291908181526020018280546108259061150f565b80156108725780601f1061084757610100808354040283529160200191610872565b820191906000526020600020905b81548152906001019060200180831161085557829003601f168201915b5050505050815260200190600101906107da565b505050509150808054806020026020016040519081016040528092919081815260200182805480156108ee57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116108c3575b5050505050905091509150915091565b600854606090819060009080610914868861169e565b106109265761092386826116b6565b94505b60008567ffffffffffffffff81111561094157610941611084565b60405190808252806020026020018201604052801561096a578160200160208202803683370190505b50905060008667ffffffffffffffff81111561098857610988611084565b6040519080825280602002602001820160405280156109b1578160200160208202803683370190505b50905060005b87811015610a935760086109cb828b61169e565b815481106109db576109db6114e0565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838281518110610a1857610a186114e0565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526009610a49828b61169e565b81548110610a5957610a596114e0565b9060005260206000200154828281518110610a7657610a766114e0565b602090810291909101015280610a8b81611665565b9150506109b7565b508181610aa0898b61169e565b9550955095505050509250925092565b60035473ffffffffffffffffffffffffffffffffffffffff163314610b31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f6f6e6c7920746865204c314275696c6453746570332063616e2063616c6c000060448201526064016103a4565b610b71856040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000081525086610f52565b610b94856040518060600160405280602181526020016116ef6021913985610f52565b610bd4856040518060400160405280601b81526020017f50726f78795f5f4f564d5f4c315374616e64617264427269646765000000000081525084610f52565b610c14856040518060400160405280601981526020017f50726f78795f5f4f564d5f4c314552433732314272696467650000000000000081525083610f52565b610c68856040518060400160405280601681526020017f4c3243726f7373446f6d61696e4d657373656e67657200000000000000000000815250734200000000000000000000000000000000000007610f52565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff163314610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f6f6e6c7920746865204c314275696c6453746570322063616e2063616c6c000060448201526064016103a4565b610d30846040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e00000000000000000000000081525085610f52565b610d53846040518060600160405280602181526020016116ce6021913984610f52565b610d93846040518060400160405280600b81526020017f426f6e644d616e6167657200000000000000000000000000000000000000000081525083610f52565b50505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610e1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f6f6e6c7920746865204c314275696c6453746570312063616e2063616c6c000060448201526064016103a4565b60008681526005602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790558151808301909252600d82527f4f564d5f53657175656e6365720000000000000000000000000000000000000090820152610ea790879086610f52565b610ee7866040518060400160405280600c81526020017f4f564d5f50726f706f736572000000000000000000000000000000000000000081525085610f52565b610f27866040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e0000000000000081525084610f52565b610f4a866040518060600160405280602181526020016117106021913983610f52565b505050505050565b600083815260066020908152604082208054600181018255908352918190208451610f84939190910191850190610feb565b50600092835260076020908152604084208054600181018255908552932090920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915550565b828054610ff79061150f565b90600052602060002090601f016020900481019282611019576000855561105f565b82601f1061103257805160ff191683800117855561105f565b8280016001018555821561105f579182015b8281111561105f578251825591602001919060010190611044565b5061106b92915061106f565b5090565b5b8082111561106b5760008155600101611070565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156110c657600080fd5b82359150602083013567ffffffffffffffff808211156110e557600080fd5b818501915085601f8301126110f957600080fd5b81358181111561110b5761110b611084565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561115157611151611084565b8160405282815288602084870101111561116a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111b057600080fd5b919050565b6000806000606084860312156111ca57600080fd5b833592506111da6020850161118c565b91506111e86040850161118c565b90509250925092565b60006020828403121561120357600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561125057815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161121e565b509495945050505050565b6000604082016040835280855180835260608501915060608160051b860101925060208088016000805b84811015611326577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089880301865282518051808952835b818110156112d8578281018701518a820188015286016112bd565b818111156112e8578487838c0101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01697909701840196509483019491830191600101611285565b5050508584038187015250505061133d818561120a565b95945050505050565b6000806040838503121561135957600080fd5b50508035926020909101359150565b60608152600061137b606083018661120a565b82810360208481019190915285518083528682019282019060005b818110156113b257845183529383019391830191600101611396565b5050809350505050826040830152949350505050565b600080600080600060a086880312156113e057600080fd5b853594506113f06020870161118c565b93506113fe6040870161118c565b925061140c6060870161118c565b915061141a6080870161118c565b90509295509295909350565b6000806000806080858703121561143c57600080fd5b8435935061144c6020860161118c565b925061145a6040860161118c565b91506114686060860161118c565b905092959194509250565b60008060008060008060c0878903121561148c57600080fd5b8635955061149c6020880161118c565b94506114aa6040880161118c565b93506114b86060880161118c565b92506114c66080880161118c565b91506114d460a0880161118c565b90509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600181811c9082168061152357607f821691505b6020821081141561155d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080835481600182811c91508083168061157f57607f831692505b60208084108214156115b8577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b8180156115cc57600181146115fb57611628565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650611628565b60008a81526020902060005b868110156116205781548b820152908501908301611607565b505084890196505b509498975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561169757611697611636565b5060010190565b600082198211156116b1576116b1611636565b500190565b6000828210156116c8576116c8611636565b50039056fe436861696e53746f72616765436f6e7461696e65722d5343432d6261746368657350726f78795f5f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572436861696e53746f72616765436f6e7461696e65722d4354432d62617463686573a2646970667358221220ab0eb7ccd74838d120afcdb9fba90c434a3bdd67aed793705e4dcf3a00c1350a64736f6c63430008090033", - ), - storage: storage{ - // address public depositAddress - "0x00": l1BuildDeposit.address, - // address public step1Address - "0x01": l1BuildStep1.address, - // address public step2Address - "0x02": l1BuildStep2.address, - // address public step3Address - "0x03": l1BuildStep3.address, - // address public step4Address - "0x04": l1BuildStep4.address, - }, - }, - { - contract: l1BuildStep1, - // commit: https://github.com/oasysgames/oasys-optimism/blob/20eff6890c0b64dc9e8a1e36f347c4d561a1e411/packages/contracts/contracts/oasys/L1/build/L1BuildStep1.sol - code: mustDecodeCode( - "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806303305d32146100515780631ee5c97d1461009a57806338613690146100af578063485cc955146100cf575b600080fd5b6001546100719073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100ad6100a836600461077f565b6100e2565b005b6000546100719073ffffffffffffffffffffffffffffffffffffffff1681565b6100ad6100dd3660046107c1565b61063e565b60005473ffffffffffffffffffffffffffffffffffffffff163314610168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f6f6e6c7920746865204c314275696c644167656e742063616e2063616c6c000060448201526064015b60405180910390fd5b600060405161017690610733565b604051809103906000f080158015610192573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff1663f2fde38b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166365c11a6c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561021757600080fd5b505afa15801561022b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061024f91906107fa565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b1580156102b557600080fd5b505af11580156102c9573d6000803e3d6000fd5b50505050600081600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d38c6c16040518163ffffffff1660e01b815260040160206040518083038186803b15801561033857600080fd5b505afa15801561034c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610370919061081e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ccf987c86040518163ffffffff1660e01b815260040160206040518083038186803b1580156103d857600080fd5b505afa1580156103ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610410919061081e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e654b1fb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561047857600080fd5b505afa15801561048c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b0919061081e565b6040516104bc90610740565b73ffffffffffffffffffffffffffffffffffffffff9094168452602084019290925260408301526060820152608001604051809103906000f080158015610507573d6000803e3d6000fd5b5090506000826040516105199061074d565b73ffffffffffffffffffffffffffffffffffffffff90911681526040602082018190526019908201527f43616e6f6e6963616c5472616e73616374696f6e436861696e000000000000006060820152608001604051809103906000f080158015610587573d6000803e3d6000fd5b506000546040517fc86fc4c90000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff868116602483015288811660448301528781166064830152858116608483015280841660a483015292935091169063c86fc4c99060c401600060405180830381600087803b15801561061e57600080fd5b505af1158015610632573d6000803e3d6000fd5b50505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1615801561067a575060015473ffffffffffffffffffffffffffffffffffffffff16155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e697469616c697a65206f6e6c79206f6e6365000000000000000000000000604482015260640161015f565b6000805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560018054929093169116179055565b6107808061083883390190565b611a9880610fb883390190565b6111b380612a5083390190565b73ffffffffffffffffffffffffffffffffffffffff8116811461077c57600080fd5b50565b60008060006060848603121561079457600080fd5b8335925060208401356107a68161075a565b915060408401356107b68161075a565b809150509250925092565b600080604083850312156107d457600080fd5b82356107df8161075a565b915060208301356107ef8161075a565b809150509250929050565b60006020828403121561080c57600080fd5b81516108178161075a565b9392505050565b60006020828403121561083057600080fd5b505191905056fe608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107028061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80639b2ea4bd116100505780639b2ea4bd146100b9578063bf40fac1146100cc578063f2fde38b146100df57600080fd5b8063715018a61461006c5780638da5cb5b14610076575b600080fd5b6100746100f2565b005b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100746100c73660046105e4565b610184565b6100906100da366004610632565b6102d0565b6100746100ed36600461066f565b61030c565b60005473ffffffffffffffffffffffffffffffffffffffff163314610178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610182600061043c565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610205576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161016f565b6000610210836104b1565b60008181526001602052604090819020805473ffffffffffffffffffffffffffffffffffffffff8681167fffffffffffffffffffffffff000000000000000000000000000000000000000083161790925591519293501690610273908590610691565b6040805191829003822073ffffffffffffffffffffffffffffffffffffffff808716845284166020840152917f9416a153a346f93d95f94b064ae3f148b6460473c6e82b3f9fc2521b873fcd6c910160405180910390a250505050565b6000600160006102df846104b1565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff1692915050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461038d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161016f565b73ffffffffffffffffffffffffffffffffffffffff8116610430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161016f565b6104398161043c565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000816040516020016104c49190610691565b604051602081830303815290604052805190602001209050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261052157600080fd5b813567ffffffffffffffff8082111561053c5761053c6104e1565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610582576105826104e1565b8160405283815286602085880101111561059b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b600080604083850312156105f757600080fd5b823567ffffffffffffffff81111561060e57600080fd5b61061a85828601610510565b925050610629602084016105bb565b90509250929050565b60006020828403121561064457600080fd5b813567ffffffffffffffff81111561065b57600080fd5b61066784828501610510565b949350505050565b60006020828403121561068157600080fd5b61068a826105bb565b9392505050565b6000825160005b818110156106b25760208186018101518583015201610698565b818111156106c1576000828501525b50919091019291505056fea2646970667358221220882d6a267e1fbcc015c1726b422a6847e08c6be7e987e8b5ec1f7e85aa5095bb64736f6c63430008090033608060405234801561001057600080fd5b5060405162001a9838038062001a9883398101604081905261003191610072565b600080546001600160a01b0319166001600160a01b03861617905560048390556002829055600181905561006581836100bd565b600355506100ea92505050565b6000806000806080858703121561008857600080fd5b84516001600160a01b038116811461009f57600080fd5b60208601516040870151606090970151919890975090945092505050565b60008160001904831182151516156100e557634e487b7160e01b600052601160045260246000fd5b500290565b61199e80620000fa6000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c8063876ed5cb116100cd578063d0f8934411610081578063e654b1fb11610066578063e654b1fb146102c0578063edcc4a45146102c9578063f722b41a146102dc57600080fd5b8063d0f89344146102b0578063e561dddc146102b857600080fd5b8063b8f77005116100b2578063b8f7700514610297578063ccf987c81461029f578063cfdf677e146102a857600080fd5b8063876ed5cb146102855780638d38c6c11461028e57600080fd5b80635ae6256d1161012457806378f4b2f21161010957806378f4b2f2146102645780637a167a8a1461026e5780637aa63a861461027d57600080fd5b80635ae6256d146102475780636fee07e01461024f57600080fd5b80632a7f18be116101555780632a7f18be146101d25780633789977014610216578063461a44781461023457600080fd5b80630b3dfa9714610171578063299ca4781461018d575b600080fd5b61017a60035481565b6040519081526020015b60405180910390f35b6000546101ad9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610184565b6101e56101e03660046113e5565b6102e4565b604080518251815260208084015164ffffffffff908116918301919091529282015190921690820152606001610184565b61021e610362565b60405164ffffffffff9091168152602001610184565b6101ad6102423660046114c1565b610376565b61021e610423565b61026261025d366004611537565b610437565b005b61017a620186a081565b60055464ffffffffff1661021e565b61017a610899565b61017a61c35081565b61017a60045481565b60065461021e565b61017a60025481565b6101ad6108b4565b6102626108dc565b61017a610df8565b61017a60015481565b6102626102d73660046115a4565b610e7f565b61021e611016565b604080516060810182526000808252602082018190529181019190915260068281548110610314576103146115c6565b6000918252602091829020604080516060810182526002909302909101805483526001015464ffffffffff808216948401949094526501000000000090049092169181019190915292915050565b60008061036d611032565b50949350505050565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac1906103cd908590600401611660565b60206040518083038186803b1580156103e557600080fd5b505afa1580156103f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041d919061167a565b92915050565b60008061042e611032565b95945050505050565b61c350815111156104cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f5472616e73616374696f6e20646174612073697a652065786365656473206d6160448201527f78696d756d20666f7220726f6c6c7570207472616e73616374696f6e2e00000060648201526084015b60405180910390fd5b600454821115610561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f5472616e73616374696f6e20676173206c696d69742065786365656473206d6160448201527f78696d756d20666f7220726f6c6c7570207472616e73616374696f6e2e00000060648201526084016104c6565b620186a08210156105f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f5472616e73616374696f6e20676173206c696d697420746f6f206c6f7720746f60448201527f20656e71756575652e000000000000000000000000000000000000000000000060648201526084016104c6565b6003548211156106dc5760006002546003548461061191906116c6565b61061b91906116dd565b905060005a90508181116106b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e73756666696369656e742067617320666f72204c322072617465206c696d60448201527f6974696e67206275726e2e00000000000000000000000000000000000000000060648201526084016104c6565b60005b825a6106c090846116c6565b10156106d857806106d081611718565b9150506106b4565b5050505b6000333214156106ed575033610706565b5033731111000000000000000000000000000000001111015b60008185858560405160200161071f9493929190611751565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060608401835280845264ffffffffff42811692850192835243811693850193845260068054600181810183556000838152975160029092027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f81019290925594517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d4090910180549651841665010000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090971691909316179490941790559154919350610825916116c6565b9050808673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f4b388aecf9fa6cc92253704e5975a6129a4f735bdbd99567df4ed0094ee4ceb58888426040516108899392919061179a565b60405180910390a4505050505050565b6000806108a4611032565b50505064ffffffffff1692915050565b60006108d760405180606001604052806021815260200161194860219139610376565b905090565b60043560d81c60093560e890811c90600c35901c6108f8610899565b8364ffffffffff161461098d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f41637475616c20626174636820737461727420696e64657820646f6573206e6f60448201527f74206d6174636820657870656374656420737461727420696e6465782e00000060648201526084016104c6565b6109cb6040518060400160405280600d81526020017f4f564d5f53657175656e63657200000000000000000000000000000000000000815250610376565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f46756e6374696f6e2063616e206f6e6c792062652063616c6c6564206279207460448201527f68652053657175656e6365722e0000000000000000000000000000000000000060648201526084016104c6565b6000610a9762ffffff831660106117c3565b610aa290600f611800565b905064ffffffffff8116361015610b3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4e6f7420656e6f756768204261746368436f6e74657874732070726f7669646560448201527f642e00000000000000000000000000000000000000000000000000000000000060648201526084016104c6565b6005546040805160808101825260008082526020820181905291810182905260608101829052909164ffffffffff169060005b8562ffffff168163ffffffff161015610bcc576000610b928263ffffffff166110ed565b8051909350839150610ba49086611818565b9450826020015184610bb69190611840565b9350508080610bc490611860565b915050610b6e565b5060065464ffffffffff83161115610c8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f417474656d7074656420746f20617070656e64206d6f726520656c656d656e7460448201527f73207468616e2061726520617661696c61626c6520696e20746865207175657560648201527f652e000000000000000000000000000000000000000000000000000000000000608482015260a4016104c6565b6000610c9d8462ffffff8916611884565b63ffffffff169050600080836020015160001415610cc657505060408201516060830151610d37565b60006006610cd56001886118a9565b64ffffffffff1681548110610cec57610cec6115c6565b6000918252602091829020604080516060810182526002909302909101805483526001015464ffffffffff808216948401859052650100000000009091041691018190529093509150505b610d5b610d456001436116c6565b408a62ffffff168564ffffffffff168585611174565b7f602f1aeac0ca2e7a13e281a9ef0ad7838542712ce16780fa2ecffd351f05f899610d8684876118a9565b84610d8f610899565b6040805164ffffffffff94851681529390921660208401529082015260600160405180910390a15050600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000001664ffffffffff949094169390931790925550505050505050565b6000610e026108b4565b73ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b158015610e4757600080fd5b505afa158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d791906118c7565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ee557600080fd5b505afa158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d919061167a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f6e6c792063616c6c61626c6520627920746865204275726e2041646d696e2e60448201526064016104c6565b60018190556002829055610fc581836117c3565b60038190556002546001546040805192835260208301919091528101919091527fc6ed75e96b8b18b71edc1a6e82a9d677f8268c774a262c624eeb2cf0a8b3e07e9060600160405180910390a15050565b6005546006546000916108d79164ffffffffff909116906118a9565b60008060008060006110426108b4565b73ffffffffffffffffffffffffffffffffffffffff1663ccf8f9696040518163ffffffff1660e01b815260040160206040518083038186803b15801561108757600080fd5b505afa15801561109b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bf91906118e0565b64ffffffffff602882901c811697605083901c82169750607883901c8216965060a09290921c169350915050565b6111186040518060800160405280600081526020016000815260200160008152602001600081525090565b60006111256010846117c3565b61113090600f611800565b60408051608081018252823560e890811c82526003840135901c6020820152600683013560d890811c92820192909252600b90920135901c60608201529392505050565b600061117e6108b4565b905060008061118b611032565b50509150915060006040518060a001604052808573ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b1580156111e457600080fd5b505afa1580156111f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121c91906118c7565b81526020018a81526020018981526020018464ffffffffff16815260200160405180602001604052806000815250815250905080600001517f127186556e7be68c7e31263195225b4de02820707889540969f62c05cf73525e82602001518360400151846060015185608001516040516112999493929190611922565b60405180910390a260006112ac8261139f565b905060006112e78360400151866112c39190611840565b6112cd8b87611840565b602890811b9190911760508b901b1760788a901b17901b90565b6040517f2015276c000000000000000000000000000000000000000000000000000000008152600481018490527fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000008216602482015290915073ffffffffffffffffffffffffffffffffffffffff871690632015276c90604401600060405180830381600087803b15801561137a57600080fd5b505af115801561138e573d6000803e3d6000fd5b505050505050505050505050505050565b600081602001518260400151836060015184608001516040516020016113c89493929190611922565b604051602081830303815290604052805190602001209050919050565b6000602082840312156113f757600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115611448576114486113fe565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561148e5761148e6113fe565b816040528093508581528686860111156114a757600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156114d357600080fd5b813567ffffffffffffffff8111156114ea57600080fd5b8201601f810184136114fb57600080fd5b61150a8482356020840161142d565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461153457600080fd5b50565b60008060006060848603121561154c57600080fd5b833561155781611512565b925060208401359150604084013567ffffffffffffffff81111561157a57600080fd5b8401601f8101861361158b57600080fd5b61159a8682356020840161142d565b9150509250925092565b600080604083850312156115b757600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815180845260005b8181101561161b576020818501810151868301820152016115ff565b8181111561162d576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061167360208301846115f5565b9392505050565b60006020828403121561168c57600080fd5b815161167381611512565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156116d8576116d8611697565b500390565b600082611713577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561174a5761174a611697565b5060010190565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261179060808301846115f5565b9695505050505050565b8381526060602082015260006117b360608301856115f5565b9050826040830152949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156117fb576117fb611697565b500290565b6000821982111561181357611813611697565b500190565b600063ffffffff80831681851680830382111561183757611837611697565b01949350505050565b600064ffffffffff80831681851680830382111561183757611837611697565b600063ffffffff8083168181141561187a5761187a611697565b6001019392505050565b600063ffffffff838116908316818110156118a1576118a1611697565b039392505050565b600064ffffffffff838116908316818110156118a1576118a1611697565b6000602082840312156118d957600080fd5b5051919050565b6000602082840312156118f257600080fd5b81517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000008116811461167357600080fd5b84815283602082015282604082015260806060820152600061179060808301846115f556fe436861696e53746f72616765436f6e7461696e65722d4354432d62617463686573a2646970667358221220c8d6d671bb1ae3bd0434364664f960f2eb1e1515f336e3260e4ce79fceb2110764736f6c6343000809003360806040523480156200001157600080fd5b50604051620011b3380380620011b3833981016040819052620000349162000129565b600080546001600160a01b0319166001600160a01b0384161790558051620000649060019060208401906200006d565b50505062000266565b8280546200007b9062000229565b90600052602060002090601f0160209004810192826200009f5760008555620000ea565b82601f10620000ba57805160ff1916838001178555620000ea565b82800160010185558215620000ea579182015b82811115620000ea578251825591602001919060010190620000cd565b50620000f8929150620000fc565b5090565b5b80821115620000f85760008155600101620000fd565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156200013d57600080fd5b82516001600160a01b03811681146200015557600080fd5b602084810151919350906001600160401b03808211156200017557600080fd5b818601915086601f8301126200018a57600080fd5b8151818111156200019f576200019f62000113565b604051601f8201601f19908116603f01168101908382118183101715620001ca57620001ca62000113565b816040528281528986848701011115620001e357600080fd5b600093505b82841015620002075784840186015181850187015292850192620001e8565b82841115620002195760008684830101525b8096505050505050509250929050565b600181811c908216806200023e57607f821691505b602082108114156200026057634e487b7160e01b600052602260045260246000fd5b50919050565b610f3d80620002766000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063461a4478116100815780639507d39a1161005b5780639507d39a146101a4578063b298e36b146101b7578063ccf8f969146101ca57600080fd5b8063461a4478146101695780634651d91e1461017c5780638da5cb5b1461018f57600080fd5b80632015276c116100b25780632015276c146100fe57806329061de214610111578063299ca4781461012457600080fd5b8063167fd681146100ce5780631f7b6d32146100e3575b600080fd5b6100e16100dc366004610c59565b6101e9565b005b6100eb61034d565b6040519081526020015b60405180910390f35b6100e161010c366004610c59565b610365565b6100e161011f366004610c85565b61043d565b6000546101449073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f5565b610144610177366004610cd6565b610517565b6100e161018a366004610da5565b6105c4565b61019761069b565b6040516100f59190610dbe565b6100eb6101b2366004610da5565b610729565b6100e16101c5366004610da5565b61073d565b6101d2610814565b60405164ffffffffff1990911681526020016100f5565b61027c600180546101f990610e31565b80601f016020809104026020016040519081016040528092919081815260200182805461022590610e31565b80156102725780601f1061024757610100808354040283529160200191610272565b820191906000526020600020905b81548152906001019060200180831161025557829003601f168201915b5050505050610517565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461033d57604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f436861696e53746f72616765436f6e7461696e65723a2046756e6374696f6e2060448201527f63616e206f6e6c792062652063616c6c656420627920746865206f776e65722e60648201526084015b60405180910390fd5b61034960028383610825565b5050565b6000610359600261090c565b64ffffffffff16905090565b610375600180546101f990610e31565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461043157604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f436861696e53746f72616765436f6e7461696e65723a2046756e6374696f6e2060448201527f63616e206f6e6c792062652063616c6c656420627920746865206f776e65722e6064820152608401610334565b61034960028383610957565b61044d600180546101f990610e31565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461050957604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f436861696e53746f72616765436f6e7461696e65723a2046756e6374696f6e2060448201527f63616e206f6e6c792062652063616c6c656420627920746865206f776e65722e6064820152608401610334565b6105146002826109e6565b50565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061056e908590600401610dbe565b60206040518083038186803b15801561058657600080fd5b505afa15801561059a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105be9190610e85565b92915050565b6105d4600180546101f990610e31565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461069057604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f436861696e53746f72616765436f6e7461696e65723a2046756e6374696f6e2060448201527f63616e206f6e6c792062652063616c6c656420627920746865206f776e65722e6064820152608401610334565b610514600282610a47565b600180546106a890610e31565b80601f01602080910402602001604051908101604052809291908181526020018280546106d490610e31565b80156107215780601f106106f657610100808354040283529160200191610721565b820191906000526020600020905b81548152906001019060200180831161070457829003601f168201915b505050505081565b60006105be600264ffffffffff8416610aa4565b61074d600180546101f990610e31565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461080957604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f436861696e53746f72616765436f6e7461696e65723a2046756e6374696f6e2060448201527f63616e206f6e6c792062652063616c6c656420627920746865206f776e65722e6064820152608401610334565b610514600282610b73565b60006108206002610bd0565b905090565b600061086784604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b9050806000015164ffffffffff168364ffffffffff16106108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f496e646578206f7574206f6620626f756e64732e0000000000000000000000006044820152606401610334565b64ffffffffff8316815264ffffffffff19821660208201526109068482610c1e565b50505050565b60008061094f83604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b519392505050565b600061099984604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b805164ffffffffff16600090815260018601602052604090208490558051909150816109c482610ebb565b64ffffffffff1690525064ffffffffff19821660208201526109068482610c1e565b6000610a2883604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b64ffffffffff19831660208201529050610a428382610c1e565b505050565b6000610a8983604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b9050610a42828260200151856108259092919063ffffffff16565b600080610ae784604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b805190915064ffffffffff168310610b5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f496e646578206f7574206f6620626f756e64732e0000000000000000000000006044820152606401610334565b50506000908152600191909101602052604090205490565b6000610bb583604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b9050610a42828260200151856109579092919063ffffffff16565b600080610c1383604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b602001519392505050565b8051602082015183548183179291908314610c37578285555b5050505050565b803564ffffffffff1981168114610c5457600080fd5b919050565b60008060408385031215610c6c57600080fd5b82359150610c7c60208401610c3e565b90509250929050565b600060208284031215610c9757600080fd5b610ca082610c3e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215610ce857600080fd5b813567ffffffffffffffff80821115610d0057600080fd5b818401915084601f830112610d1457600080fd5b813581811115610d2657610d26610ca7565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610d6c57610d6c610ca7565b81604052828152876020848701011115610d8557600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215610db757600080fd5b5035919050565b600060208083528351808285015260005b81811015610deb57858101830151858201604001528201610dcf565b81811115610dfd576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600181811c90821680610e4557607f821691505b60208210811415610e7f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215610e9757600080fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610ca057600080fd5b600064ffffffffff80831681811415610efd577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600101939250505056fea2646970667358221220e1995ee56c4c5e67de41c56ad510b16704727d3ab1fa5bb2e3c62b0bd7c0597564736f6c63430008090033a264697066735822122059a7be2a1ee54361ae8529c3d6353990f73b26048af4e6e13ced7655aceddeb664736f6c63430008090033", - ), - storage: storage{ - // address public agentAddress - "0x00": l1BuildAgent.address, - // address public paramAddress - "0x01": l1BuildParam.address, - }, - }, - { - contract: l1BuildStep2, - // commit: https://github.com/oasysgames/oasys-optimism/blob/20eff6890c0b64dc9e8a1e36f347c4d561a1e411/packages/contracts/contracts/oasys/L1/build/L1BuildStep2.sol - code: mustDecodeCode( - "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806303305d3214610051578063386136901461009a578063485cc955146100ba5780637ef7cca2146100cf575b600080fd5b6001546100719073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6000546100719073ffffffffffffffffffffffffffffffffffffffff1681565b6100cd6100c8366004610655565b6100e2565b005b6100cd6100dd36600461068e565b6101dc565b60005473ffffffffffffffffffffffffffffffffffffffff1615801561011e575060015473ffffffffffffffffffffffffffffffffffffffff16155b610189576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e697469616c697a65206f6e6c79206f6e636500000000000000000000000060448201526064015b60405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560018054929093169116179055565b60005473ffffffffffffffffffffffffffffffffffffffff16331461025d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f6f6e6c7920746865204c314275696c644167656e742063616e2063616c6c00006044820152606401610180565b600080546040517f408d26930000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff9091169063408d26939060240160206040518083038186803b1580156102c857600080fd5b505afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030091906106b3565b9050600081600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e46020a16040518163ffffffff1660e01b815260040160206040518083038186803b15801561036d57600080fd5b505afa158015610381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a591906106d7565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166333f67e6a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561040d57600080fd5b505afa158015610421573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044591906106d7565b60405161045190610609565b73ffffffffffffffffffffffffffffffffffffffff909316835260208301919091526040820152606001604051809103906000f080158015610497573d6000803e3d6000fd5b5090506000826040516104a990610616565b73ffffffffffffffffffffffffffffffffffffffff90911681526040602082018190526014908201527f5374617465436f6d6d69746d656e74436861696e0000000000000000000000006060820152608001604051809103906000f080158015610517573d6000803e3d6000fd5b50905060008360405161052990610623565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015610562573d6000803e3d6000fd5b506000546040517fa708ca6b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff86811660248301528581166044830152808416606483015292935091169063a708ca6b90608401600060405180830381600087803b1580156105e957600080fd5b505af11580156105fd573d6000803e3d6000fd5b50505050505050505050565b6123ea806106f183390190565b6111b380612adb83390190565b61048880613c8e83390190565b73ffffffffffffffffffffffffffffffffffffffff8116811461065257600080fd5b50565b6000806040838503121561066857600080fd5b823561067381610630565b9150602083013561068381610630565b809150509250929050565b600080604083850312156106a157600080fd5b82359150602083013561068381610630565b6000602082840312156106c557600080fd5b81516106d081610630565b9392505050565b6000602082840312156106e957600080fd5b505191905056fe608060405234801561001057600080fd5b50604051620023ea380380620023ea8339810160408190526100319161005d565b600080546001600160a01b0319166001600160a01b0394909416939093179092556001556002556100a0565b60008060006060848603121561007257600080fd5b83516001600160a01b038116811461008957600080fd5b602085015160409095015190969495509392505050565b61233a80620000b06000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80639418bddd11610097578063cfdf677e11610066578063cfdf677e146101f8578063e0c2b41814610200578063e561dddc14610213578063fc7e9c6f1461021b57600080fd5b80639418bddd146101b65780639594dd64146101c9578063b8e189ac146101dc578063c17b291b146101ef57600080fd5b80637aa63a86116100d35780637aa63a861461017a5780637ad168a01461019057806381eb62ef146101985780638ca5cbb9146101a157600080fd5b8063299ca478146100fa578063461a4478146101445780634d69ee5714610157575b600080fd5b60005461011a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61011a610152366004611d47565b610224565b61016a610165366004611eb9565b6102d1565b604051901515815260200161013b565b6101826103a0565b60405190815260200161013b565b6101826103b9565b61018260025481565b6101b46101af366004611f76565b6103d2565b005b61016a6101c4366004611fbb565b6107ac565b6101b46101d7366004611fbb565b61086b565b6101b46101ea366004611fbb565b6109e6565b61018260015481565b61011a610ba2565b6101b461020e366004611fbb565b610bca565b610182610d1f565b61018260035481565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061027b90859060040161205b565b60206040518083038186803b15801561029357600080fd5b505afa1580156102a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102cb9190612090565b92915050565b60006102dc83610da6565b61032d5760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e000000000000000000000060448201526064015b60405180910390fd5b61034a836020015185846000015185602001518760400151610e68565b6103965760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420696e636c7573696f6e2070726f6f662e00000000000000006044820152606401610324565b5060019392505050565b6000806103ab6110d6565b5064ffffffffff1692915050565b6000806103c46110d6565b64ffffffffff169392505050565b6103da6103a0565b811461044e5760405162461bcd60e51b815260206004820152603d60248201527f41637475616c20626174636820737461727420696e64657820646f6573206e6f60448201527f74206d6174636820657870656374656420737461727420696e6465782e0000006064820152608401610324565b61048c6040518060400160405280600b81526020017f426f6e644d616e61676572000000000000000000000000000000000000000000815250610224565b6040517f02ad4d2a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff91909116906302ad4d2a9060240160206040518083038186803b1580156104f357600080fd5b505afa158015610507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052b91906120ad565b61059d5760405162461bcd60e51b815260206004820152602f60248201527f50726f706f73657220646f6573206e6f74206861766520656e6f75676820636f60448201527f6c6c61746572616c20706f7374656400000000000000000000000000000000006064820152608401610324565b60008251116106145760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74207375626d697420616e20656d7074792073746174652062617460448201527f63682e00000000000000000000000000000000000000000000000000000000006064820152608401610324565b6106526040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610224565b73ffffffffffffffffffffffffffffffffffffffff16637aa63a866040518163ffffffff1660e01b815260040160206040518083038186803b15801561069757600080fd5b505afa1580156106ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cf91906120cf565b82516106d96103a0565b6106e39190612117565b111561077d5760405162461bcd60e51b815260206004820152604960248201527f4e756d626572206f6620737461746520726f6f74732063616e6e6f742065786360448201527f65656420746865206e756d626572206f662063616e6f6e6963616c207472616e60648201527f73616374696f6e732e0000000000000000000000000000000000000000000000608482015260a401610324565b60408051426020820152338183015281518082038301815260609091019091526107a890839061117a565b5050565b6000600354826000015110156107c457506000919050565b600082608001518060200190518101906107de919061212f565b509050806108545760405162461bcd60e51b815260206004820152602560248201527f4261746368206865616465722074696d657374616d702063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610324565b42600154826108639190612117565b119392505050565b33735200000000000000000000000000000000000014146108ce5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206d6573736167652073656e6465722e0000000000000000006044820152606401610324565b6108d781610da6565b6109235760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e00000000000000000000006044820152606401610324565b61092c816107ac565b6109a0576040805162461bcd60e51b81526020600482015260248101919091527f537461746520626174636865732063616e206f6e6c792062652064656c65746560448201527f642077697468696e207468652066726175642070726f6f662077696e646f772e6064820152608401610324565b6109a98161141d565b80516020808301516040519081527f1723478079cff2362bd8896c78c4c8bee974428fc01131b52d79078349af3e1091015b60405180910390a250565b610a246040518060400160405280601181526020017f4f564d5f46726175645665726966696572000000000000000000000000000000815250610224565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ac45760405162461bcd60e51b815260206004820152603b60248201527f537461746520626174636865732063616e206f6e6c792062652064656c65746560448201527f6420627920746865204f564d5f467261756456657269666965722e00000000006064820152608401610324565b610acd81610da6565b610b195760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e00000000000000000000006044820152606401610324565b610b22816107ac565b610b96576040805162461bcd60e51b81526020600482015260248101919091527f537461746520626174636865732063616e206f6e6c792062652064656c65746560448201527f642077697468696e207468652066726175642070726f6f662077696e646f772e6064820152608401610324565b610b9f8161141d565b50565b6000610bc56040518060600160405280602181526020016122e460219139610224565b905090565b3373520000000000000000000000000000000000001414610c2d5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206d6573736167652073656e6465722e0000000000000000006044820152606401610324565b610c3681610da6565b610c825760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e00000000000000000000006044820152606401610324565b600354815114610cd45760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420626174636820696e6465782e0000000000000000000000006044820152606401610324565b60038054906000610ce48361215f565b909155505080516020808301516040519081527fc032f530357a4853a125c129880b7801f1f30fb46fdd0e2f3bbc6e053199dca991016109db565b6000610d29610ba2565b73ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6e57600080fd5b505afa158015610d82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc591906120cf565b6000610db0610ba2565b82516040517f9507d39a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9290921691639507d39a91610e089160040190815260200190565b60206040518083038186803b158015610e2057600080fd5b505afa158015610e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5891906120cf565b610e6183611643565b1492915050565b6000808211610edf5760405162461bcd60e51b815260206004820152603760248201527f4c69625f4d65726b6c65547265653a20546f74616c206c6561766573206d757360448201527f742062652067726561746572207468616e207a65726f2e0000000000000000006064820152608401610324565b818410610f535760405162461bcd60e51b8152602060048201526024808201527f4c69625f4d65726b6c65547265653a20496e646578206f7574206f6620626f7560448201527f6e64732e000000000000000000000000000000000000000000000000000000006064820152608401610324565b610f5c82611689565b835114610ff75760405162461bcd60e51b815260206004820152604d60248201527f4c69625f4d65726b6c65547265653a20546f74616c207369626c696e6773206460448201527f6f6573206e6f7420636f72726563746c7920636f72726573706f6e6420746f2060648201527f746f74616c206c65617665732e00000000000000000000000000000000000000608482015260a401610324565b8460005b84518110156110c95785600116600114156110625784818151811061102257611022612198565b602002602001015182604051602001611045929190918252602082015260400190565b6040516020818303038152906040528051906020012091506110b0565b8185828151811061107557611075612198565b6020026020010151604051602001611097929190918252602082015260400190565b6040516020818303038152906040528051906020012091505b60019590951c94806110c18161215f565b915050610ffb565b5090951495945050505050565b60008060006110e3610ba2565b73ffffffffffffffffffffffffffffffffffffffff1663ccf8f9696040518163ffffffff1660e01b815260040160206040518083038186803b15801561112857600080fd5b505afa15801561113c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116091906121c7565b64ffffffffff602882901c169460509190911c9350915050565b60006111ba6040518060400160405280600c81526020017f4f564d5f50726f706f7365720000000000000000000000000000000000000000815250610224565b90506000806111c76110d6565b90925090503373ffffffffffffffffffffffffffffffffffffffff841614156111f15750426112a0565b426002548264ffffffffff166112079190612117565b106112a05760405162461bcd60e51b815260206004820152604360248201527f43616e6e6f74207075626c69736820737461746520726f6f747320776974686960448201527f6e207468652073657175656e636572207075626c69636174696f6e2077696e6460648201527f6f772e0000000000000000000000000000000000000000000000000000000000608482015260a401610324565b60006040518060a001604052806112b5610d1f565b81526020016112c38861176f565b8152602001875181526020018464ffffffffff16815260200186815250905080600001517f16be4c5129a4e03cf3350262e181dc02ddfb4a6008d925368c0899fcd97ca9c5826020015183604001518460600151856080015160405161132c9493929190612209565b60405180910390a261133c610ba2565b73ffffffffffffffffffffffffffffffffffffffff16632015276c61136083611643565b611385846040015185606001516113779190612117565b602887811b91909117901b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092527fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000166024820152604401600060405180830381600087803b1580156113fd57600080fd5b505af1158015611411573d6000803e3d6000fd5b50505050505050505050565b611425610ba2565b73ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b15801561146a57600080fd5b505afa15801561147e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a291906120cf565b8151106114f15760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420626174636820696e6465782e0000000000000000000000006044820152606401610324565b6114fa81610da6565b6115465760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e00000000000000000000006044820152606401610324565b61154e610ba2565b8151606083015173ffffffffffffffffffffffffffffffffffffffff929092169163167fd681919060281b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092527fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000166024820152604401600060405180830381600087803b1580156115f157600080fd5b505af1158015611605573d6000803e3d6000fd5b5050505080600001517f8747b69ce8fdb31c3b9b0a67bd8049ad8c1a69ea417b69b12174068abd9cbd6482602001516040516109db91815260200190565b6000816020015182604001518360600151846080015160405160200161166c9493929190612209565b604051602081830303815290604052805190602001209050919050565b60008082116117005760405162461bcd60e51b815260206004820152603060248201527f4c69625f4d65726b6c65547265653a2043616e6e6f7420636f6d70757465206360448201527f65696c286c6f675f3229206f6620302e000000000000000000000000000000006064820152608401610324565b816001141561171157506000919050565b81600060805b6001811061174f578061172d600180831b612238565b901b831615611747576117408183612117565b92811c9291505b60011c611717565b506001811b841461176857611765600182612117565b90505b9392505050565b6000808251116117e75760405162461bcd60e51b815260206004820152603460248201527f4c69625f4d65726b6c65547265653a204d7573742070726f766964652061742060448201527f6c65617374206f6e65206c65616620686173682e0000000000000000000000006064820152608401610324565b815160011415611813578160008151811061180457611804612198565b60200260200101519050919050565b60408051610200810182527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56381527f633dc4d7da7256660a892f8f1604a44b5432649cc8ec5cb3ced4c4e6ac94dd1d60208201527f890740a8eb06ce9be422cb8da5cdafc2b58c0a5e24036c578de2a433c828ff7d818301527f3b8ec09e026fdc305365dfc94e189a81b38c7597b3d941c279f042e8206e0bd86060808301919091527fecd50eee38e386bd62be9bedb990706951b65fe053bd9d8a521af753d139e2da60808301527fdefff6d330bb5403f63b14f33b578274160de3a50df4efecf0e0db73bcdd3da560a08301527f617bdd11f7c0a11f49db22f629387a12da7596f9d1704d7465177c63d88ec7d760c08301527f292c23a9aa1d8bea7e2435e555a4a60e379a5a35f3f452bae60121073fb6eead60e08301527fe1cea92ed99acdcb045a6726b2f87107e8a61620a232cf4d7d5b5766b3952e106101008301527f7ad66c0a68c72cb89e4fb4303841966e4062a76ab97451e3b9fb526a5ceb7f826101208301527fe026cc5a4aed3c22a58cbd3d2ac754c9352c5436f638042dca99034e836365166101408301527f3d04cffd8b46a874edf5cfae63077de85f849a660426697b06a829c70dd1409c6101608301527fad676aa337a485e4728a0b240d92b3ef7b3c372d06d189322bfd5f61f1e7203e6101808301527fa2fca4a49658f9fab7aa63289c91b7c7b6c832a6d0e69334ff5b0a3483d09dab6101a08301527f4ebfd9cd7bca2505f7bef59cc1c12ecc708fff26ae4af19abe852afe9e20c8626101c08301527f2def10d13dd169f550f578bda343d9717a138562e0093b380a1120789d53cf106101e083015282518381529081018352909160009190602082018180368337505085519192506000918291508180805b6001841115611c2957611ac460028561227e565b9150611ad1600285612292565b600114905060005b82811015611b7d578a611aed8260026122a6565b81518110611afd57611afd612198565b602002602001015196508a816002611b1591906122a6565b611b20906001612117565b81518110611b3057611b30612198565b6020026020010151955086602089015285604089015287805190602001208b8281518110611b6057611b60612198565b602090810291909101015280611b758161215f565b915050611ad9565b508015611bf95789611b90600186612238565b81518110611ba057611ba0612198565b60200260200101519550878360108110611bbc57611bbc612198565b602002015160001b945085602088015284604088015286805190602001208a8381518110611bec57611bec612198565b6020026020010181815250505b80611c05576000611c08565b60015b611c159060ff1683612117565b935082611c218161215f565b935050611ab0565b89600081518110611c3c57611c3c612198565b602002602001015198505050505050505050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611cc957611cc9611c53565b604052919050565b600067ffffffffffffffff831115611ceb57611ceb611c53565b611d1c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601611c82565b9050828152838383011115611d3057600080fd5b828260208301376000602084830101529392505050565b600060208284031215611d5957600080fd5b813567ffffffffffffffff811115611d7057600080fd5b8201601f81018413611d8157600080fd5b611d9084823560208401611cd1565b949350505050565b600060a08284031215611daa57600080fd5b60405160a0810167ffffffffffffffff8282108183111715611dce57611dce611c53565b81604052829350843583526020850135602084015260408501356040840152606085013560608401526080850135915080821115611e0b57600080fd5b508301601f81018513611e1d57600080fd5b611e2c85823560208401611cd1565b6080830152505092915050565b600082601f830112611e4a57600080fd5b8135602067ffffffffffffffff821115611e6657611e66611c53565b8160051b611e75828201611c82565b9283528481018201928281019087851115611e8f57600080fd5b83870192505b84831015611eae57823582529183019190830190611e95565b979650505050505050565b600080600060608486031215611ece57600080fd5b83359250602084013567ffffffffffffffff80821115611eed57600080fd5b611ef987838801611d98565b93506040860135915080821115611f0f57600080fd5b9085019060408288031215611f2357600080fd5b604051604081018181108382111715611f3e57611f3e611c53565b60405282358152602083013582811115611f5757600080fd5b611f6389828601611e39565b6020830152508093505050509250925092565b60008060408385031215611f8957600080fd5b823567ffffffffffffffff811115611fa057600080fd5b611fac85828601611e39565b95602094909401359450505050565b600060208284031215611fcd57600080fd5b813567ffffffffffffffff811115611fe457600080fd5b611d9084828501611d98565b6000815180845260005b8181101561201657602081850181015186830182015201611ffa565b81811115612028576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006117686020830184611ff0565b73ffffffffffffffffffffffffffffffffffffffff81168114610b9f57600080fd5b6000602082840312156120a257600080fd5b81516117688161206e565b6000602082840312156120bf57600080fd5b8151801515811461176857600080fd5b6000602082840312156120e157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561212a5761212a6120e8565b500190565b6000806040838503121561214257600080fd5b8251915060208301516121548161206e565b809150509250929050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612191576121916120e8565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156121d957600080fd5b81517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000008116811461176857600080fd5b84815283602082015282604082015260806060820152600061222e6080830184611ff0565b9695505050505050565b60008282101561224a5761224a6120e8565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261228d5761228d61224f565b500490565b6000826122a1576122a161224f565b500690565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156122de576122de6120e8565b50029056fe436861696e53746f72616765436f6e7461696e65722d5343432d62617463686573a264697066735822122060a057bdd3794e10fb5160d3519c4bc1d6ee67b68a543739f166ac503884e1da64736f6c6343000809003360806040523480156200001157600080fd5b50604051620011b3380380620011b3833981016040819052620000349162000129565b600080546001600160a01b0319166001600160a01b0384161790558051620000649060019060208401906200006d565b50505062000266565b8280546200007b9062000229565b90600052602060002090601f0160209004810192826200009f5760008555620000ea565b82601f10620000ba57805160ff1916838001178555620000ea565b82800160010185558215620000ea579182015b82811115620000ea578251825591602001919060010190620000cd565b50620000f8929150620000fc565b5090565b5b80821115620000f85760008155600101620000fd565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156200013d57600080fd5b82516001600160a01b03811681146200015557600080fd5b602084810151919350906001600160401b03808211156200017557600080fd5b818601915086601f8301126200018a57600080fd5b8151818111156200019f576200019f62000113565b604051601f8201601f19908116603f01168101908382118183101715620001ca57620001ca62000113565b816040528281528986848701011115620001e357600080fd5b600093505b82841015620002075784840186015181850187015292850192620001e8565b82841115620002195760008684830101525b8096505050505050509250929050565b600181811c908216806200023e57607f821691505b602082108114156200026057634e487b7160e01b600052602260045260246000fd5b50919050565b610f3d80620002766000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063461a4478116100815780639507d39a1161005b5780639507d39a146101a4578063b298e36b146101b7578063ccf8f969146101ca57600080fd5b8063461a4478146101695780634651d91e1461017c5780638da5cb5b1461018f57600080fd5b80632015276c116100b25780632015276c146100fe57806329061de214610111578063299ca4781461012457600080fd5b8063167fd681146100ce5780631f7b6d32146100e3575b600080fd5b6100e16100dc366004610c59565b6101e9565b005b6100eb61034d565b6040519081526020015b60405180910390f35b6100e161010c366004610c59565b610365565b6100e161011f366004610c85565b61043d565b6000546101449073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f5565b610144610177366004610cd6565b610517565b6100e161018a366004610da5565b6105c4565b61019761069b565b6040516100f59190610dbe565b6100eb6101b2366004610da5565b610729565b6100e16101c5366004610da5565b61073d565b6101d2610814565b60405164ffffffffff1990911681526020016100f5565b61027c600180546101f990610e31565b80601f016020809104026020016040519081016040528092919081815260200182805461022590610e31565b80156102725780601f1061024757610100808354040283529160200191610272565b820191906000526020600020905b81548152906001019060200180831161025557829003601f168201915b5050505050610517565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461033d57604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f436861696e53746f72616765436f6e7461696e65723a2046756e6374696f6e2060448201527f63616e206f6e6c792062652063616c6c656420627920746865206f776e65722e60648201526084015b60405180910390fd5b61034960028383610825565b5050565b6000610359600261090c565b64ffffffffff16905090565b610375600180546101f990610e31565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461043157604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f436861696e53746f72616765436f6e7461696e65723a2046756e6374696f6e2060448201527f63616e206f6e6c792062652063616c6c656420627920746865206f776e65722e6064820152608401610334565b61034960028383610957565b61044d600180546101f990610e31565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461050957604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f436861696e53746f72616765436f6e7461696e65723a2046756e6374696f6e2060448201527f63616e206f6e6c792062652063616c6c656420627920746865206f776e65722e6064820152608401610334565b6105146002826109e6565b50565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061056e908590600401610dbe565b60206040518083038186803b15801561058657600080fd5b505afa15801561059a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105be9190610e85565b92915050565b6105d4600180546101f990610e31565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461069057604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f436861696e53746f72616765436f6e7461696e65723a2046756e6374696f6e2060448201527f63616e206f6e6c792062652063616c6c656420627920746865206f776e65722e6064820152608401610334565b610514600282610a47565b600180546106a890610e31565b80601f01602080910402602001604051908101604052809291908181526020018280546106d490610e31565b80156107215780601f106106f657610100808354040283529160200191610721565b820191906000526020600020905b81548152906001019060200180831161070457829003601f168201915b505050505081565b60006105be600264ffffffffff8416610aa4565b61074d600180546101f990610e31565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461080957604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f436861696e53746f72616765436f6e7461696e65723a2046756e6374696f6e2060448201527f63616e206f6e6c792062652063616c6c656420627920746865206f776e65722e6064820152608401610334565b610514600282610b73565b60006108206002610bd0565b905090565b600061086784604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b9050806000015164ffffffffff168364ffffffffff16106108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f496e646578206f7574206f6620626f756e64732e0000000000000000000000006044820152606401610334565b64ffffffffff8316815264ffffffffff19821660208201526109068482610c1e565b50505050565b60008061094f83604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b519392505050565b600061099984604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b805164ffffffffff16600090815260018601602052604090208490558051909150816109c482610ebb565b64ffffffffff1690525064ffffffffff19821660208201526109068482610c1e565b6000610a2883604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b64ffffffffff19831660208201529050610a428382610c1e565b505050565b6000610a8983604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b9050610a42828260200151856108259092919063ffffffff16565b600080610ae784604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b805190915064ffffffffff168310610b5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f496e646578206f7574206f6620626f756e64732e0000000000000000000000006044820152606401610334565b50506000908152600191909101602052604090205490565b6000610bb583604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b9050610a42828260200151856109579092919063ffffffff16565b600080610c1383604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b602001519392505050565b8051602082015183548183179291908314610c37578285555b5050505050565b803564ffffffffff1981168114610c5457600080fd5b919050565b60008060408385031215610c6c57600080fd5b82359150610c7c60208401610c3e565b90509250929050565b600060208284031215610c9757600080fd5b610ca082610c3e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215610ce857600080fd5b813567ffffffffffffffff80821115610d0057600080fd5b818401915084601f830112610d1457600080fd5b813581811115610d2657610d26610ca7565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610d6c57610d6c610ca7565b81604052828152876020848701011115610d8557600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215610db757600080fd5b5035919050565b600060208083528351808285015260005b81811015610deb57858101830151858201604001528201610dcf565b81811115610dfd576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600181811c90821680610e4557607f821691505b60208210811415610e7f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215610e9757600080fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610ca057600080fd5b600064ffffffffff80831681811415610efd577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600101939250505056fea2646970667358221220e1995ee56c4c5e67de41c56ad510b16704727d3ab1fa5bb2e3c62b0bd7c0597564736f6c63430008090033608060405234801561001057600080fd5b5060405161048838038061048883398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6103f5806100936000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806302ad4d2a14610046578063299ca4781461006e578063461a4478146100b3575b600080fd5b61005961005436600461020d565b6100c6565b60405190151581526020015b60405180910390f35b60005461008e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610065565b61008e6100c1366004610260565b61013b565b60006101066040518060400160405280600c81526020017f4f564d5f50726f706f736572000000000000000000000000000000000000000081525061013b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061019290859060040161032f565b60206040518083038186803b1580156101aa57600080fd5b505afa1580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e291906103a2565b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461020a57600080fd5b50565b60006020828403121561021f57600080fd5b813561022a816101e8565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561027257600080fd5b813567ffffffffffffffff8082111561028a57600080fd5b818401915084601f83011261029e57600080fd5b8135818111156102b0576102b0610231565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156102f6576102f6610231565b8160405282815287602084870101111561030f57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208083528351808285015260005b8181101561035c57858101830151858201604001528201610340565b8181111561036e576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156103b457600080fd5b815161022a816101e856fea264697066735822122087d4cb97cd5a4456c2b8ab23d1374b6ac6874a5b854a207714f5b3768ca6d73a64736f6c63430008090033a2646970667358221220f5173b5ea49b9d5111e99aa41a43574a2abd8b1dc6eb9e489267e65cd729e8b764736f6c63430008090033", - ), - storage: storage{ - // address public agentAddress - "0x00": l1BuildAgent.address, - // address public paramAddress - "0x01": l1BuildParam.address, - }, - }, - { - contract: l1BuildStep3, - // commit: https://github.com/oasysgames/oasys-optimism/blob/20eff6890c0b64dc9e8a1e36f347c4d561a1e411/packages/contracts/contracts/oasys/L1/build/L1BuildStep3.sol - code: mustDecodeCode( - "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806338613690146100465780637ef7cca21461008f578063c4d66de8146100a4575b600080fd5b6000546100669073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100a261009d366004610725565b6100b7565b005b6100a26100b2366004610755565b610612565b60005473ffffffffffffffffffffffffffffffffffffffff16331461013d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f6f6e6c7920746865204c314275696c644167656e742063616e2063616c6c000060448201526064015b60405180910390fd5b600080546040517f408d26930000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff9091169063408d26939060240160206040518083038186803b1580156101a857600080fd5b505afa1580156101bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e09190610779565b905060006040516101f0906106d9565b604051809103906000f08015801561020c573d6000803e3d6000fd5b506040517fc4d66de800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529192509082169063c4d66de890602401600060405180830381600087803b15801561027a57600080fd5b505af115801561028e573d6000803e3d6000fd5b50506040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528416925063f2fde38b9150602401600060405180830381600087803b1580156102fb57600080fd5b505af115801561030f573d6000803e3d6000fd5b50505050600082604051610322906106e6565b73ffffffffffffffffffffffffffffffffffffffff9091168152604060208201819052601a908201527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000006060820152608001604051809103906000f080158015610390573d6000803e3d6000fd5b50905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166365c11a6c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156103fc57600080fd5b505afa158015610410573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104349190610779565b604051610440906106f3565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015610479573d6000803e3d6000fd5b50905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166365c11a6c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104e557600080fd5b505afa1580156104f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051d9190610779565b604051610529906106f3565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015610562573d6000803e3d6000fd5b506000546040517f85c89dad000000000000000000000000000000000000000000000000000000008152600481018a905273ffffffffffffffffffffffffffffffffffffffff87811660248301528681166044830152858116606483015280841660848301529293509116906385c89dad9060a401600060405180830381600087803b1580156105f157600080fd5b505af1158015610605573d6000803e3d6000fd5b5050505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1615610692576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e697469616c697a65206f6e6c79206f6e63650000000000000000000000006044820152606401610134565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b613c988061079783390190565b6105b58061442f83390190565b610a5d806149e483390190565b73ffffffffffffffffffffffffffffffffffffffff8116811461072257600080fd5b50565b6000806040838503121561073857600080fd5b82359150602083013561074a81610700565b809150509250929050565b60006020828403121561076757600080fd5b813561077281610700565b9392505050565b60006020828403121561078b57600080fd5b81516107728161070056fe608060405260cc80546001600160a01b03191661dead17905534801561002457600080fd5b50600080546001600160a01b0319169055613c54806100446000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c8063715018a6116100b2578063b1b1b20911610081578063c6b94ab011610066578063c6b94ab014610275578063d7fd19dd14610298578063f2fde38b146102ab57600080fd5b8063b1b1b2091461023f578063c4d66de81461026257600080fd5b8063715018a6146101fe57806381ada46c146102065780638456cb59146102195780638da5cb5b1461022157600080fd5b8063461a4478116100ee578063461a4478146101c55780635c975abb146101d85780636e296e45146101e35780636f1c8d47146101eb57600080fd5b80630ecf2eea1461012057806321d800ec14610135578063299ca4781461016d5780633dbb202b146101b2575b600080fd5b61013361012e36600461311d565b6102be565b005b61015861014336600461311d565b60ca6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b60005461018d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610164565b6101336101c0366004613295565b61036d565b61018d6101d33660046132f5565b6104b5565b60655460ff16610158565b61018d610562565b6101336101f9366004613346565b6105ec565b6101336107d3565b61013361021436600461311d565b610846565b6101336108ed565b60335473ffffffffffffffffffffffffffffffffffffffff1661018d565b61015861024d36600461311d565b60cb6020526000908152604090205460ff1681565b6101336102703660046133d2565b61095c565b61015861028336600461311d565b60c96020526000908152604090205460ff1681565b6101336102a6366004613538565b610ba9565b6101336102b93660046133d2565b611078565b60335473ffffffffffffffffffffffffffffffffffffffff16331461032a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b600081815260c96020526040808220805460ff191660011790555182917ff52508d5339edf0d7e5060a416df98db067af561bdc60872d29c0439eaa13a0291a250565b60006103ad6040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e000000000000008152506104b5565b905060008173ffffffffffffffffffffffffffffffffffffffff1663b8f770056040518163ffffffff1660e01b815260040160206040518083038186803b1580156103f757600080fd5b505afa15801561040b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042f9190613686565b905060006104468633878564ffffffffff16611174565b905061045983828663ffffffff166111ef565b8573ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a338785886040516104a594939291906136fd565b60405180910390a2505050505050565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061050c908590600401613750565b60206040518083038186803b15801561052457600080fd5b505afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c9190613763565b92915050565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff1661dead14156105cf5760405162461bcd60e51b815260206004820152601f60248201527f78446f6d61696e4d65737361676553656e646572206973206e6f7420736574006044820152606401610321565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b600061062c6040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e000000000000008152506104b5565b6040517f2a7f18be0000000000000000000000000000000000000000000000000000000081526004810186905290915060009073ffffffffffffffffffffffffffffffffffffffff831690632a7f18be9060240160606040518083038186803b15801561069857600080fd5b505afa1580156106ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d09190613780565b905060006106e089898989611174565b905060007311110000000000000000000000000000000011113001734200000000000000000000000000000000000007878460405160200161072594939291906137e5565b604051602081830303815290604052805190602001209050826000015181146107b65760405162461bcd60e51b815260206004820152602760248201527f50726f7669646564206d65737361676520686173206e6f74206265656e20656e60448201527f7175657565642e000000000000000000000000000000000000000000000000006064820152608401610321565b6107c784838763ffffffff166111ef565b50505050505050505050565b60335473ffffffffffffffffffffffffffffffffffffffff16331461083a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610321565b6108446000611290565b565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108ad5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610321565b600081815260c96020526040808220805460ff191690555182917f52c8a2680a9f4cc0ad0bf88f32096eadbebf0646ea611d93a0ce6a29a024040591a250565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109545760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610321565b610844611307565b6000547501000000000000000000000000000000000000000000900460ff16806109a1575060005474010000000000000000000000000000000000000000900460ff16155b610a135760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610321565b6000547501000000000000000000000000000000000000000000900460ff16158015610a7a57600080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff1675010100000000000000000000000000000000000000001790555b60005473ffffffffffffffffffffffffffffffffffffffff1615610b065760405162461bcd60e51b815260206004820152602a60248201527f4c3143726f7373446f6d61696e4d657373656e67657220616c7265616479206960448201527f6e7469616c697a65642e000000000000000000000000000000000000000000006064820152608401610321565b6000805473ffffffffffffffffffffffffffffffffffffffff84167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560cc805490911661dead179055610b5e6113b9565b610b66611508565b610b6e61162f565b610b76611788565b8015610ba557600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1690555b5050565b60026097541415610bfc5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610321565b600260975560655460ff1615610c545760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610321565b6000610c6286868686611174565b9050610c6e81836118dc565b1515600114610ce55760405162461bcd60e51b815260206004820152602760248201527f50726f7669646564206d65737361676520636f756c64206e6f7420626520766560448201527f7269666965642e000000000000000000000000000000000000000000000000006064820152608401610321565b8051602080830191909120600081815260cb90925260409091205460ff1615610d765760405162461bcd60e51b815260206004820152602b60248201527f50726f7669646564206d6573736167652068617320616c72656164792062656560448201527f6e2072656365697665642e0000000000000000000000000000000000000000006064820152608401610321565b600081815260c9602052604090205460ff1615610dfb5760405162461bcd60e51b815260206004820152602260248201527f50726f7669646564206d65737361676520686173206265656e20626c6f636b6560448201527f642e0000000000000000000000000000000000000000000000000000000000006064820152608401610321565b610e396040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e000000000000008152506104b5565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161415610eda5760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f742073656e64204c322d3e4c31206d6573736167657320746f204c60448201527f312073797374656d20636f6e7472616374732e000000000000000000000000006064820152608401610321565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff88811691909117909155604051600091891690610f3390889061382a565b6000604051808303816000865af19150503d8060008114610f70576040519150601f19603f3d011682016040523d82523d6000602084013e610f75565b606091505b505060cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080151560011415610ff557600082815260cb6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2611021565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f90600090a25b600083334360405160200161103893929190613846565b60408051601f198184030181529181528151602092830120600090815260ca9092529020805460ff19166001908117909155609755505050505050505050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146110df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610321565b73ffffffffffffffffffffffffffffffffffffffff81166111685760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610321565b61117181611290565b50565b60608484848460405160240161118d9493929190613898565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6040517f6fee07e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636fee07e0906112599073420000000000000000000000000000000000000790859087906004016138e2565b600060405180830381600087803b15801561127357600080fd5b505af1158015611287573d6000803e3d6000fd5b50505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60655460ff161561135a5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610321565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861138f3390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6000547501000000000000000000000000000000000000000000900460ff16806113fe575060005474010000000000000000000000000000000000000000900460ff16155b6114705760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610321565b6000547501000000000000000000000000000000000000000000900460ff161580156114d757600080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff1675010100000000000000000000000000000000000000001790555b801561117157600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16905550565b6000547501000000000000000000000000000000000000000000900460ff168061154d575060005474010000000000000000000000000000000000000000900460ff16155b6115bf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610321565b6000547501000000000000000000000000000000000000000000900460ff1615801561162657600080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff1675010100000000000000000000000000000000000000001790555b6114d733611290565b6000547501000000000000000000000000000000000000000000900460ff1680611674575060005474010000000000000000000000000000000000000000900460ff16155b6116e65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610321565b6000547501000000000000000000000000000000000000000000900460ff1615801561174d57600080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff1675010100000000000000000000000000000000000000001790555b6065805460ff19169055801561117157600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16905550565b6000547501000000000000000000000000000000000000000000900460ff16806117cd575060005474010000000000000000000000000000000000000000900460ff16155b61183f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610321565b6000547501000000000000000000000000000000000000000000900460ff161580156118a657600080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff1675010100000000000000000000000000000000000000001790555b6001609755801561117157600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16905550565b60006118e7826118ff565b80156118f857506118f88383611aa1565b9392505050565b6000806119406040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e0000000000000000000000008152506104b5565b60208401516040517f9418bddd00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff831691639418bddd9161199891600401613954565b60206040518083038186803b1580156119b057600080fd5b505afa1580156119c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e89190613967565b1580156118f857508251602084015160408086015190517f4d69ee5700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851693634d69ee5793611a51939192909190600401613989565b60206040518083038186803b158015611a6957600080fd5b505afa158015611a7d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f89190613967565b60008083734200000000000000000000000000000000000007604051602001611acb929190613a01565b60408051601f1981840301815282825280516020918201209083015260009082015260600160408051601f198184030181529082905280516020918201207f42000000000000000000000000000000000000000000000000000000000000009183019190915291506000908190611b5b9060340160408051601f1981840301815291905260608701518751611c85565b9092509050600182151514611bfe5760405162461bcd60e51b815260206004820152604d60248201527f4d6573736167652070617373696e67207072656465706c6f7920686173206e6f60448201527f74206265656e20696e697469616c697a6564206f7220696e76616c696420707260648201527f6f6f662070726f76696465642e00000000000000000000000000000000000000608482015260a401610321565b6000611c0982611cae565b9050611c7a84604051602001611c2191815260200190565b60408051601f19818403018152908290527f010000000000000000000000000000000000000000000000000000000000000060208301529060210160405160208183030381529060405288608001518460400151611d72565b979650505050505050565b600060606000611c9486611d96565b9050611ca1818686611dc8565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290611cdb83611ea3565b90506040518060800160405280611d0b83600081518110611cfe57611cfe613a4b565b6020026020010151611ed6565b8152602001611d2683600181518110611cfe57611cfe613a4b565b8152602001611d4e83600281518110611d4157611d41613a4b565b6020026020010151611edd565b8152602001611d6983600381518110611d4157611d41613a4b565b90529392505050565b600080611d7e86611d96565b9050611d8c81868686611fdf565b9695505050505050565b60608180519060200120604051602001611db291815260200190565b6040516020818303038152906040529050919050565b600060606000611dd785612015565b90506000806000611de9848a89612110565b81519295509093509150158080611dfd5750815b611e495760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e0000000000006044820152606401610321565b600081611e655760405180602001604052806000815250611e91565b611e9186611e74600188613aa9565b81518110611e8457611e84613a4b565b60200260200101516125ab565b919b919a509098505050505050505050565b60408051808201825260008082526020918201528151808301909252825182528083019082015260609061055c906125d5565b600061055c825b6000602182600001511115611f345760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e0000000000006044820152606401610321565b6000806000611f42856127d4565b919450925090506000816001811115611f5d57611f5d613ac0565b14611faa5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e0000000000006044820152606401610321565b6000838660200151611fbc9190613aef565b80519091506020841015611d8c5760208490036101000a90049695505050505050565b6000806000611fef878686611dc8565b91509150818015611c7a5750805160208083019190912087519188019190912014611c7a565b6060600061202283611ea3565b90506000815167ffffffffffffffff81111561204057612040613158565b60405190808252806020026020018201604052801561208557816020015b604080518082019091526060808252602082015281526020019060019003908161205e5790505b50905060005b82518110156121085760006120b88483815181106120ab576120ab613a4b565b6020026020010151612b25565b905060405180604001604052808281526020016120d483611ea3565b8152508383815181106120e9576120e9613a4b565b602002602001018190525050808061210090613b07565b91505061208b565b509392505050565b6000606081808061212087612bb5565b90506000869050600080612147604051806040016040528060608152602001606081525090565b60005b8c51811015612567578c818151811061216557612165613a4b565b60200260200101519150828461217b9190613aef565b9350612188600188613aef565b9650836121ec578151805160209091012085146121e75760405162461bcd60e51b815260206004820152601160248201527f496e76616c696420726f6f7420686173680000000000000000000000000000006044820152606401610321565b6122a9565b81515160201161224e578151805160209091012085146121e75760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c206861736800000000006044820152606401610321565b8461225c8360000151612d38565b146122a95760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f646520686173680000000000006044820152606401610321565b6122b560106001613aef565b826020015151141561232e5785518414156122cf57612567565b60008685815181106122e3576122e3613a4b565b602001015160f81c60f81b60f81c9050600083602001518260ff168151811061230e5761230e613a4b565b6020026020010151905061232181612d60565b9650600194505050612555565b6002826020015151141561250d57600061234783612d96565b905060008160008151811061235e5761235e613a4b565b016020015160f81c90506000612375600283613b6f565b612380906002613b91565b90506000612391848360ff16612dba565b9050600061239f8b8a612dba565b905060006123ad8383612df0565b905060ff8516600214806123c4575060ff85166003145b1561241a578083511480156123d95750808251145b156123eb576123e8818b613aef565b99505b507f80000000000000000000000000000000000000000000000000000000000000009950612567945050505050565b60ff8516158061242d575060ff85166001145b1561249f578251811461246957507f80000000000000000000000000000000000000000000000000000000000000009950612567945050505050565b612490886020015160018151811061248357612483613a4b565b6020026020010151612d60565b9a509750612555945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e2060448201527f70726566697800000000000000000000000000000000000000000000000000006064820152608401610321565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e0000006044820152606401610321565b8061255f81613b07565b91505061214a565b507f80000000000000000000000000000000000000000000000000000000000000008414866125968786612dba565b909e909d50909b509950505050505050505050565b6020810151805160609161055c916125c590600190613aa9565b815181106120ab576120ab613a4b565b60606000806125e3846127d4565b919350909150600190508160018111156125ff576125ff613ac0565b1461264c5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c50206c6973742076616c75652e0000000000000000006044820152606401610321565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816126655790505090506000835b86518110156127c957602082106127115760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201527f7374206c656e6774682e000000000000000000000000000000000000000000006064820152608401610321565b60008061274e6040518060400160405280858c600001516127329190613aa9565b8152602001858c602001516127479190613aef565b90526127d4565b50915091506040518060400160405280838361276a9190613aef565b8152602001848b6020015161277f9190613aef565b81525085858151811061279457612794613a4b565b60209081029190910101526127aa600185613aef565b93506127b68183613aef565b6127c09084613aef565b92505050612692565b508152949350505050565b60008060008084600001511161282c5760405162461bcd60e51b815260206004820152601860248201527f524c50206974656d2063616e6e6f74206265206e756c6c2e00000000000000006044820152606401610321565b6020840151805160001a607f8111612851576000600160009450945094505050612b1e565b60b781116128cd576000612866608083613aa9565b9050808760000151116128bb5760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420524c502073686f727420737472696e672e000000000000006044820152606401610321565b60019550935060009250612b1e915050565b60bf81116129bc5760006128e260b783613aa9565b9050808760000151116129375760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e006044820152606401610321565b600183015160208290036101000a90046129518183613aef565b8851116129a05760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c50206c6f6e6720737472696e672e00000000000000006044820152606401610321565b6129ab826001613aef565b9650945060009350612b1e92505050565b60f78111612a375760006129d160c083613aa9565b905080876000015111612a265760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c502073686f7274206c6973742e0000000000000000006044820152606401610321565b600195509350849250612b1e915050565b6000612a4460f783613aa9565b905080876000015111612a995760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e0000006044820152606401610321565b600183015160208290036101000a9004612ab38183613aef565b885111612b025760405162461bcd60e51b815260206004820152601660248201527f496e76616c696420524c50206c6f6e67206c6973742e000000000000000000006044820152606401610321565b612b0d826001613aef565b9650945060019350612b1e92505050565b9193909250565b60606000806000612b35856127d4565b919450925090506000816001811115612b5057612b50613ac0565b14612b9d5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c502062797465732076616c75652e00000000000000006044820152606401610321565b612bac85602001518484612e9c565b95945050505050565b6060600082516002612bc79190613bb4565b67ffffffffffffffff811115612bdf57612bdf613158565b6040519080825280601f01601f191660200182016040528015612c09576020820181803683370190505b50905060005b8351811015612d31576004848281518110612c2c57612c2c613a4b565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c82612c61836002613bb4565b81518110612c7157612c71613a4b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506010848281518110612cb457612cb4613a4b565b0160200151612cc6919060f81c613b6f565b60f81b82612cd5836002613bb4565b612ce0906001613aef565b81518110612cf057612cf0613a4b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080612d2981613b07565b915050612c0f565b5092915050565b6000602082511015612d4c57506020015190565b8180602001905181019061055c9190613bf1565b60006060602083600001511015612d8157612d7a83612f7b565b9050612d8d565b612d8a83612b25565b90505b6118f881612d38565b606061055c612db583602001516000815181106120ab576120ab613a4b565b612bb5565b606082518210612dd9575060408051602081019091526000815261055c565b6118f88383848651612deb9190613aa9565b612f86565b6000805b808451118015612e045750808351115b8015612e855750828181518110612e1d57612e1d613a4b565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110612e5c57612e5c613a4b565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156118f85780612e9481613b07565b915050612df4565b606060008267ffffffffffffffff811115612eb957612eb9613158565b6040519080825280601f01601f191660200182016040528015612ee3576020820181803683370190505b509050805160001415612ef75790506118f8565b6000612f038587613aef565b90506020820160005b612f17602087613c0a565b811015612f4e5782518252612f2d602084613aef565b9250612f3a602083613aef565b915080612f4681613b07565b915050612f0c565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b606061055c82613107565b606081612f9481601f613aef565b1015612fe25760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610321565b82612fed8382613aef565b101561303b5760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610321565b6130458284613aef565b845110156130955760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610321565b6060821580156130b457604051915060008252602082016040526130fe565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156130ed5780518352602092830192016130d5565b5050858452601f01601f1916604052505b50949350505050565b606061055c826020015160008460000151612e9c565b60006020828403121561312f57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461117157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156131aa576131aa613158565b60405290565b60405160a0810167ffffffffffffffff811182821017156131aa576131aa613158565b604051601f8201601f1916810167ffffffffffffffff811182821017156131fc576131fc613158565b604052919050565b600067ffffffffffffffff83111561321e5761321e613158565b6132316020601f19601f860116016131d3565b905082815283838301111561324557600080fd5b828260208301376000602084830101529392505050565b600082601f83011261326d57600080fd5b6118f883833560208501613204565b803563ffffffff8116811461329057600080fd5b919050565b6000806000606084860312156132aa57600080fd5b83356132b581613136565b9250602084013567ffffffffffffffff8111156132d157600080fd5b6132dd8682870161325c565b9250506132ec6040850161327c565b90509250925092565b60006020828403121561330757600080fd5b813567ffffffffffffffff81111561331e57600080fd5b8201601f8101841361332f57600080fd5b61333e84823560208401613204565b949350505050565b60008060008060008060c0878903121561335f57600080fd5b863561336a81613136565b9550602087013561337a81613136565b9450604087013567ffffffffffffffff81111561339657600080fd5b6133a289828a0161325c565b945050606087013592506133b86080880161327c565b91506133c660a0880161327c565b90509295509295509295565b6000602082840312156133e457600080fd5b81356118f881613136565b600060a0828403121561340157600080fd5b60405160a0810167ffffffffffffffff828210818311171561342557613425613158565b8160405282935084358352602085013560208401526040850135604084015260608501356060840152608085013591508082111561346257600080fd5b5061346f8582860161325c565b6080830152505092915050565b60006040828403121561348e57600080fd5b613496613187565b90508135815260208083013567ffffffffffffffff808211156134b857600080fd5b818501915085601f8301126134cc57600080fd5b8135818111156134de576134de613158565b8060051b91506134ef8483016131d3565b818152918301840191848101908884111561350957600080fd5b938501935b838510156135275784358252938501939085019061350e565b808688015250505050505092915050565b600080600080600060a0868803121561355057600080fd5b853561355b81613136565b9450602086013561356b81613136565b9350604086013567ffffffffffffffff8082111561358857600080fd5b61359489838a0161325c565b94506060880135935060808801359150808211156135b157600080fd5b9087019060a0828a0312156135c557600080fd5b6135cd6131b0565b823581526020830135828111156135e357600080fd5b6135ef8b8286016133ef565b60208301525060408301358281111561360757600080fd5b6136138b82860161347c565b60408301525060608301358281111561362b57600080fd5b6136378b82860161325c565b60608301525060808301358281111561364f57600080fd5b61365b8b82860161325c565b6080830152508093505050509295509295909350565b805164ffffffffff8116811461329057600080fd5b60006020828403121561369857600080fd5b6118f882613671565b60005b838110156136bc5781810151838201526020016136a4565b838111156136cb576000848401525b50505050565b600081518084526136e98160208601602086016136a1565b601f01601f19169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8516815260806020820152600061372c60808301866136d1565b905064ffffffffff8416604083015263ffffffff8316606083015295945050505050565b6020815260006118f860208301846136d1565b60006020828403121561377557600080fd5b81516118f881613136565b60006060828403121561379257600080fd5b6040516060810181811067ffffffffffffffff821117156137b5576137b5613158565b604052825181526137c860208401613671565b60208201526137d960408401613671565b60408201529392505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525063ffffffff8416604083015260806060830152611d8c60808301846136d1565b6000825161383c8184602087016136a1565b9190910192915050565b600084516138588184602089016136a1565b60609490941b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001691909301908152601481019190915260340192915050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526138d160808301856136d1565b905082606083015295945050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612bac60608301846136d1565b805182526020810151602083015260408101516040830152606081015160608301526000608082015160a0608085015261333e60a08501826136d1565b6020815260006118f86020830184613917565b60006020828403121561397957600080fd5b815180151581146118f857600080fd5b838152600060206060818401526139a36060840186613917565b83810360408501526040810185518252828601516040848401528181518084526060850191508583019450600093505b808410156139f357845182529385019360019390930192908501906139d3565b509998505050505050505050565b60008351613a138184602088016136a1565b60609390931b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190920190815260140192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015613abb57613abb613a7a565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60008219821115613b0257613b02613a7a565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b3957613b39613a7a565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060ff831680613b8257613b82613b40565b8060ff84160691505092915050565b600060ff821660ff841680821015613bab57613bab613a7a565b90039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bec57613bec613a7a565b500290565b600060208284031215613c0357600080fd5b5051919050565b600082613c1957613c19613b40565b50049056fea2646970667358221220feab407f2c49fed8e1c5d2a57f14dd17236e44c665f11870bb505fc3d545335164736f6c63430008090033608060405234801561001057600080fd5b506040516105b53803806105b583398101604081905261002f91610125565b30600090815260016020908152604080832080546001600160a01b0319166001600160a01b038716179055828252909120825161006e92840190610076565b505050610252565b82805461008290610217565b90600052602060002090601f0160209004810192826100a457600085556100ea565b82601f106100bd57805160ff19168380011785556100ea565b828001600101855582156100ea579182015b828111156100ea5782518255916020019190600101906100cf565b506100f69291506100fa565b5090565b5b808211156100f657600081556001016100fb565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561013857600080fd5b82516001600160a01b038116811461014f57600080fd5b602084810151919350906001600160401b038082111561016e57600080fd5b818601915086601f83011261018257600080fd5b8151818111156101945761019461010f565b604051601f8201601f19908116603f011681019083821181831017156101bc576101bc61010f565b8160405282815289868487010111156101d457600080fd5b600093505b828410156101f657848401860151818501870152928501926101d9565b828411156102075760008684830101525b8096505050505050509250929050565b600181811c9082168061022b57607f821691505b6020821081141561024c57634e487b7160e01b600052602260045260246000fd5b50919050565b610354806102616000396000f3fe608060408181523060009081526001602090815282822054908290529181207fbf40fac1000000000000000000000000000000000000000000000000000000009093529173ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061006d9060846101f2565b60206040518083038186803b15801561008557600080fd5b505afa158015610099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100bd91906102d1565b905073ffffffffffffffffffffffffffffffffffffffff8116610166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5461726765742061646472657373206d75737420626520696e697469616c697a60448201527f65642e0000000000000000000000000000000000000000000000000000000000606482015260840160405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff1660003660405161019192919061030e565b600060405180830381855af49150503d80600081146101cc576040519150601f19603f3d011682016040523d82523d6000602084013e6101d1565b606091505b509092509050600182151514156101ea57805160208201f35b805160208201fd5b600060208083526000845481600182811c91508083168061021457607f831692505b85831081141561024b577f4e487b710000000000000000000000000000000000000000000000000000000085526022600452602485fd5b8786018381526020018180156102685760018114610297576102c2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616825287820196506102c2565b60008b81526020902060005b868110156102bc578154848201529085019089016102a3565b83019750505b50949998505050505050505050565b6000602082840312156102e357600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461030757600080fd5b9392505050565b818382376000910190815291905056fea2646970667358221220d66a7dad92a7f7528f41181719174e1d244423b8bb730d2884645c76cfa0944064736f6c63430008090033608060405234801561001057600080fd5b50604051610a5d380380610a5d83398101604081905261002f9161005d565b610057817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b5061008d565b60006020828403121561006f57600080fd5b81516001600160a01b038116811461008657600080fd5b9392505050565b6109c18061009c6000396000f3fe60806040526004361061005a5760003560e01c8063893d20e811610043578063893d20e8146100a45780639b0b0fda146100e2578063aaf10f42146101025761005a565b806313af4035146100645780636c5d4ad014610084575b610062610117565b005b34801561007057600080fd5b5061006261007f366004610792565b6103ba565b34801561009057600080fd5b5061006261009f3660046107fe565b61044b565b3480156100b057600080fd5b506100b9610601565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100ee57600080fd5b506100626100fd3660046108cd565b610698565b34801561010e57600080fd5b506100b9610706565b60006101417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb7947262000000000000000000000000000000000000000000000000000000001790529051919250600091829173ffffffffffffffffffffffffffffffffffffffff8516916101c3919061092a565b600060405180830381855afa9150503d80600081146101fe576040519150601f19603f3d011682016040523d82523d6000602084013e610203565b606091505b5091509150818015610216575080516020145b156102c8576000818060200190518101906102319190610936565b905080156102c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c314368756753706c61736850726f78793a2073797374656d2069732063757260448201527f72656e746c79206265696e67207570677261646564000000000000000000000060648201526084015b60405180910390fd5b505b60006102f27f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4c314368756753706c61736850726f78793a20696d706c656d656e746174696f60448201527f6e206973206e6f7420736574207965740000000000000000000000000000000060648201526084016102bd565b3660008037600080366000845af43d6000803e806103b4573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610413575033155b1561044357610440817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b50565b610440610117565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806104a4575033155b156104435760006104d37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b9050803f8251602084012014156104e8575050565b60405160009061051e907f600d380380600d6000396000f30000000000000000000000000000000000000090859060200161094f565b604051602081830303815290604052905060008151602083016000f084516020860120909150813f146105d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f4c314368756753706c61736850726f78793a20636f646520776173206e6f742060448201527f636f72726563746c79206465706c6f7965642e0000000000000000000000000060648201526084016102bd565b6105fb817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b50505050565b600061062b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610662575033155b1561068d57507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610695610117565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806106f1575033155b156106fa579055565b610702610117565b5050565b60006107307fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610767575033155b1561068d57507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000602082840312156107a457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146107c857600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561081057600080fd5b813567ffffffffffffffff8082111561082857600080fd5b818401915084601f83011261083c57600080fd5b81358181111561084e5761084e6107cf565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610894576108946107cf565b816040528281528760208487010111156108ad57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080604083850312156108e057600080fd5b50508035926020909101359150565b6000815160005b8181101561091057602081850181015186830152016108f6565b8181111561091f576000828601525b509290920192915050565b60006107c882846108ef565b60006020828403121561094857600080fd5b5051919050565b7fffffffffffffffffffffffffff00000000000000000000000000000000000000831681526000610983600d8301846108ef565b94935050505056fea2646970667358221220aea34fd8cdcf3a9cced029d5f7b1e628f42ad1514501878e0040df2afddb6e7164736f6c63430008090033a26469706673582212200c92deadd8d06b4b4e16219fa1a2fc7ff041d68509e7bcf5945e67176145ff2764736f6c63430008090033", - ), - storage: storage{ - // address public agentAddress - "0x00": l1BuildAgent.address, - }, - }, - { - contract: l1BuildStep4, - // commit: https://github.com/oasysgames/oasys-optimism/blob/20eff6890c0b64dc9e8a1e36f347c4d561a1e411/packages/contracts/contracts/oasys/L1/build/L1BuildStep4.sol - code: mustDecodeCode( - "0x60806040523480156200001157600080fd5b5060043610620000525760003560e01c806303305d3214620000575780633861369014620000a1578063485cc95514620000c25780637ef7cca214620000db575b600080fd5b600154620000789073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b600054620000789073ffffffffffffffffffffffffffffffffffffffff1681565b620000d9620000d336600462000eda565b620000f2565b005b620000d9620000ec36600462000f18565b620001ee565b60005473ffffffffffffffffffffffffffffffffffffffff161580156200012f575060015473ffffffffffffffffffffffffffffffffffffffff16155b6200019b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e697469616c697a65206f6e6c79206f6e636500000000000000000000000060448201526064015b60405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560018054929093169116179055565b60005473ffffffffffffffffffffffffffffffffffffffff16331462000271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f6f6e6c7920746865204c314275696c644167656e742063616e2063616c6c0000604482015260640162000192565b600080546040517f408d26930000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff9091169063408d26939060240160206040518083038186803b158015620002dd57600080fd5b505afa158015620002f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000318919062000f40565b6000546040517f4dbbce2a000000000000000000000000000000000000000000000000000000008152600481018690529192508291606091829173ffffffffffffffffffffffffffffffffffffffff90911690634dbbce2a9060240160006040518083038186803b1580156200038d57600080fd5b505afa158015620003a2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003cc9190810190620010f9565b8092508193505050600083868484604051620003e89062000e98565b620003f7949392919062001277565b604051809103906000f08015801562000414573d6000803e3d6000fd5b506040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192509085169063f2fde38b90602401600060405180830381600087803b1580156200048357600080fd5b505af115801562000498573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663bc3a429b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620004e557600080fd5b505af1158015620004fa573d6000803e3d6000fd5b50506040517fbf40fac100000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f50726f78795f5f4f564d5f4c3143726f7373446f6d61696e4d657373656e676560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526000925073ffffffffffffffffffffffffffffffffffffffff8716915063bf40fac19060840160206040518083038186803b158015620005bb57600080fd5b505afa158015620005d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005f6919062000f40565b6040517fc4d66de800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152919250829182169063c4d66de890602401600060405180830381600087803b1580156200066557600080fd5b505af11580156200067a573d6000803e3d6000fd5b50506040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811660048301528416925063f2fde38b9150602401600060405180830381600087803b158015620006e857600080fd5b505af1158015620006fd573d6000803e3d6000fd5b50506040517fbf40fac100000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50726f78795f5f4f564d5f4c315374616e64617264427269646765000000000060448201526000925073ffffffffffffffffffffffffffffffffffffffff8916915063bf40fac19060640160206040518083038186803b1580156200079857600080fd5b505afa158015620007ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007d3919062000f40565b905060008190506000818b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca6573fb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200084757600080fd5b505afa1580156200085c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200088291906200133a565b60405160009073ffffffffffffffffffffffffffffffffffffffff8a169060019073420000000000000000000000000000000000001090620008c49062000ea6565b73ffffffffffffffffffffffffffffffffffffffff978816815296909516602087015260408601939093526060850191909152608084015260a083015260c082015260e001604051809103906000f08015801562000926573d6000803e3d6000fd5b506040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8083166004830152919250908316906313af403590602401600060405180830381600087803b1580156200099557600080fd5b505af1158015620009aa573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16630bf56f21600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166332f517236040518163ffffffff1660e01b815260040160006040518083038186803b15801562000a3357600080fd5b505afa15801562000a48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a72919081019062001354565b6040518263ffffffff1660e01b815260040162000a909190620013aa565b600060405180830381600087803b15801562000aab57600080fd5b505af115801562000ac0573d6000803e3d6000fd5b50506040517fbf40fac100000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f50726f78795f5f4f564d5f4c314552433732314272696467650000000000000060448201526000925073ffffffffffffffffffffffffffffffffffffffff8c16915063bf40fac19060640160206040518083038186803b15801562000b5b57600080fd5b505afa15801562000b70573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b96919062000f40565b905060008190506000818e600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d1eb6466040518163ffffffff1660e01b815260040160206040518083038186803b15801562000c0a57600080fd5b505afa15801562000c1f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4591906200133a565b60405160009073ffffffffffffffffffffffffffffffffffffffff8d16906001907362000000000000000000000000000000000000019062000c879062000ea6565b73ffffffffffffffffffffffffffffffffffffffff978816815296909516602087015260408601939093526060850191909152608084015260a083015260c082015260e001604051809103906000f08015801562000ce9573d6000803e3d6000fd5b506040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8083166004830152919250908316906313af403590602401600060405180830381600087803b15801562000d5857600080fd5b505af115801562000d6d573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16630bf56f21600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166335f7317c6040518163ffffffff1660e01b815260040160006040518083038186803b15801562000df657600080fd5b505afa15801562000e0b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000e35919081019062001354565b6040518263ffffffff1660e01b815260040162000e539190620013aa565b600060405180830381600087803b15801562000e6e57600080fd5b505af115801562000e83573d6000803e3d6000fd5b50505050505050505050505050505050505050565b610d5e80620013c083390190565b610883806200211e83390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462000ed757600080fd5b50565b6000806040838503121562000eee57600080fd5b823562000efb8162000eb4565b9150602083013562000f0d8162000eb4565b809150509250929050565b6000806040838503121562000f2c57600080fd5b82359150602083013562000f0d8162000eb4565b60006020828403121562000f5357600080fd5b815162000f608162000eb4565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562000fc25762000fc262000f67565b604052919050565b600067ffffffffffffffff82111562000fe75762000fe762000f67565b5060051b60200190565b60005b838110156200100e57818101518382015260200162000ff4565b838111156200101e576000848401525b50505050565b600067ffffffffffffffff83111562001041576200104162000f67565b620010566020601f19601f8601160162000f96565b90508281528383830111156200106b57600080fd5b62000f6083602083018462000ff1565b600082601f8301126200108d57600080fd5b81516020620010a6620010a08362000fca565b62000f96565b82815260059290921b84018101918181019086841115620010c657600080fd5b8286015b84811015620010ee578051620010e08162000eb4565b8352918301918301620010ca565b509695505050505050565b60008060408084860312156200110e57600080fd5b835167ffffffffffffffff808211156200112757600080fd5b818601915086601f8301126200113c57600080fd5b815160206200114f620010a08362000fca565b82815260059290921b8401810191818101908a8411156200116f57600080fd5b8286015b84811015620011c1578051868111156200118d5760008081fd5b8701603f81018d13620011a05760008081fd5b620011b28d868301518b840162001024565b84525091830191830162001173565b5091890151919750909450505080831115620011dc57600080fd5b5050620011ec858286016200107b565b9150509250929050565b600081518084526200121081602086016020860162000ff1565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b838110156200126c57815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010162001238565b509495945050505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff808816845260208188168186015260806040860152829150865180845260a08601925060a08160051b870101935081880160005b8281101562001316577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6088870301855262001303868351620011f6565b95509383019390830190600101620012c6565b505050505082810360608401526200132f818562001224565b979650505050505050565b6000602082840312156200134d57600080fd5b5051919050565b6000602082840312156200136757600080fd5b815167ffffffffffffffff8111156200137f57600080fd5b8201601f810184136200139157600080fd5b620013a28482516020840162001024565b949350505050565b60208152600062000f606020830184620011f656fe60806040523480156200001157600080fd5b5060405162000d5e38038062000d5e83398101604081905262000034916200037a565b600080546001600160a01b038087166001600160a01b03199283161790925560018054928616929091169190911790558051825114620000ee5760405162461bcd60e51b815260206004820152604560248201527f416464726573734469637461746f723a204d7573742070726f7669646520616e60448201527f20657175616c206e756d626572206f66206e616d657320616e6420616464726560648201526439b9b2b99760d91b608482015260a40160405180910390fd5b60005b8251811015620001c357600260405180604001604052808584815181106200011d576200011d62000505565b602002602001015181526020018484815181106200013f576200013f62000505565b6020908102919091018101516001600160a01b0316909152825460018101845560009384529281902082518051939460020290910192620001849284920190620001ce565b5060209190910151600190910180546001600160a01b0319166001600160a01b0390921691909117905580620001ba816200051b565b915050620000f1565b505050505062000582565b828054620001dc9062000545565b90600052602060002090601f0160209004810192826200020057600085556200024b565b82601f106200021b57805160ff19168380011785556200024b565b828001600101855582156200024b579182015b828111156200024b5782518255916020019190600101906200022e565b50620002599291506200025d565b5090565b5b808211156200025957600081556001016200025e565b6001600160a01b03811681146200028a57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620002ce57620002ce6200028d565b604052919050565b60006001600160401b03821115620002f257620002f26200028d565b5060051b60200190565b600082601f8301126200030e57600080fd5b81516020620003276200032183620002d6565b620002a3565b82815260059290921b840181019181810190868411156200034757600080fd5b8286015b848110156200036f578051620003618162000274565b83529183019183016200034b565b509695505050505050565b600080600080608085870312156200039157600080fd5b84516200039e8162000274565b80945050602080860151620003b38162000274565b60408701519094506001600160401b0380821115620003d157600080fd5b818801915088601f830112620003e657600080fd5b8151620003f76200032182620002d6565b81815260059190911b8301840190848101908b8311156200041757600080fd5b8585015b83811015620004ce57805185811115620004355760008081fd5b8601603f81018e13620004485760008081fd5b87810151868111156200045f576200045f6200028d565b62000473601f8201601f19168a01620002a3565b8181528f60408385010111156200048a5760008081fd5b60005b82811015620004ab57838101604001518282018c01528a016200048d565b82811115620004bd5760008b84840101525b50855250509186019186016200041b565b5060608b01519097509450505080831115620004e957600080fd5b5050620004f987828801620002fc565b91505092959194509250565b634e487b7160e01b600052603260045260246000fd5b60006000198214156200053e57634e487b7160e01b600052601160045260246000fd5b5060010190565b600181811c908216806200055a57607f821691505b602082108114156200057c57634e487b7160e01b600052602260045260246000fd5b50919050565b6107cc80620005926000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80633ccad6fc116100505780633ccad6fc146100c0578063481c6a75146100d5578063bc3a429b146100f557600080fd5b806317ad94ec1461006c578063297d1a34146100b6575b600080fd5b60015461008c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100be6100fd565b005b6100c8610232565b6040516100ad91906104af565b60005461008c9073ffffffffffffffffffffffffffffffffffffffff1681565b6100be610343565b60015473ffffffffffffffffffffffffffffffffffffffff1633146101a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f416464726573734469637461746f723a206f6e6c792063616c6c61626c65206260448201527f792066696e616c4f776e65720000000000000000000000000000000000000000606482015260840160405180910390fd5b6000546001546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063f2fde38b906024015b600060405180830381600087803b15801561021857600080fd5b505af115801561022c573d6000803e3d6000fd5b50505050565b60606002805480602002602001604051908101604052809291908181526020016000905b8282101561033a5783829060005260206000209060020201604051806040016040529081600082018054610289906105ae565b80601f01602080910402602001604051908101604052809291908181526020018280546102b5906105ae565b80156103025780601f106102d757610100808354040283529160200191610302565b820191906000526020600020905b8154815290600101906020018083116102e557829003601f168201915b505050918352505060019182015473ffffffffffffffffffffffffffffffffffffffff16602091820152918352929092019101610256565b50505050905090565b60005b600254811015610454576000546002805473ffffffffffffffffffffffffffffffffffffffff90921691639b2ea4bd91908490811061038757610387610602565b9060005260206000209060020201600001600284815481106103ab576103ab610602565b60009182526020909120600160029092020101546040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815261040f929173ffffffffffffffffffffffffffffffffffffffff1690600401610631565b600060405180830381600087803b15801561042957600080fd5b505af115801561043d573d6000803e3d6000fd5b50505050808061044c90610736565b915050610346565b506000546001546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063f2fde38b906024016101fe565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101561059f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08a8503018652825180518886528051808a880152845b81811015610532578281018c0151888201606001528b01610516565b8181111561054357856060838a0101525b50918a015173ffffffffffffffffffffffffffffffffffffffff16868b01525095880195601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690930160600192918701916001016104d7565b50919998505050505050505050565b600181811c908216806105c257607f821691505b602082108114156105fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60408152600080845481600182811c91508083168061065157607f831692505b602080841082141561068a577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b60408801849052606088018280156106a957600181146106d857610703565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00871682528282019750610703565b60008c81526020902060005b878110156106fd578154848201529086019084016106e4565b83019850505b50508596506107298189018a73ffffffffffffffffffffffffffffffffffffffff169052565b5050505050509392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561078f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212207993fbd341ec4f9e20c9ca42c43294b14f2a103fa8da10fc05d197e3abc8766164736f6c6343000809003360806040526000805460ff1916600117905534801561001d57600080fd5b5060405161088338038061088383398101604081905261003c916100a8565b60008054610100600160a81b0319166101006001600160a01b03998a1602179055600180546001600160a01b031916969097169590951790955560029290925560035560045560059190915560065561010f565b6001600160a01b03811681146100a557600080fd5b50565b600080600080600080600060e0888a0312156100c357600080fd5b87516100ce81610090565b60208901519097506100df81610090565b604089015160608a015160808b015160a08c015160c0909c01519a9d939c50919a90999198509650945092505050565b6107658061011e6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c8063708518de11610076578063a3b2d8a51161005b578063a3b2d8a51461015c578063b794726214610165578063d4b839921461018257600080fd5b8063708518de1461014a578063907023dd1461015357600080fd5b806318edaaf2116100a757806318edaaf214610122578063297d1a34146101395780635307023b1461014157600080fd5b80630bf56f21146100c357806317ad94ec146100d8575b600080fd5b6100d66100d13660046105ed565b6101a7565b005b6001546100f89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61012b60025481565b604051908152602001610119565b6100d6610489565b61012b60045481565b61012b60035481565b61012b60065481565b61012b60055481565b6000546101729060ff1681565b6040519015158152602001610119565b6000546100f890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6002548151602083012014610243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4368756753706c6173684469637461746f723a20496e636f727265637420636f60448201527f646520686173682e00000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000546040517f6c5d4ad000000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690636c5d4ad09061029d9084906004016106bc565b600060405180830381600087803b1580156102b757600080fd5b505af11580156102cb573d6000803e3d6000fd5b5050600054600354600480546040517f9b0b0fda00000000000000000000000000000000000000000000000000000000815291820192909252602481019190915261010090910473ffffffffffffffffffffffffffffffffffffffff169250639b0b0fda9150604401600060405180830381600087803b15801561034e57600080fd5b505af1158015610362573d6000803e3d6000fd5b50506000546005546006546040517f9b0b0fda0000000000000000000000000000000000000000000000000000000081526004810192909252602482015261010090910473ffffffffffffffffffffffffffffffffffffffff169250639b0b0fda9150604401600060405180830381600087803b1580156103e257600080fd5b505af11580156103f6573d6000803e3d6000fd5b50506000546001546040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526101009092041692506313af40359150602401600060405180830381600087803b15801561046e57600080fd5b505af1158015610482573d6000803e3d6000fd5b5050505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4368756753706c6173684469637461746f723a206f6e6c792063616c6c61626c60448201527f652062792066696e616c4f776e65720000000000000000000000000000000000606482015260840161023a565b6000546001546040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261010090920416906313af403590602401600060405180830381600087803b1580156105a457600080fd5b505af11580156105b8573d6000803e3d6000fd5b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156105ff57600080fd5b813567ffffffffffffffff8082111561061757600080fd5b818401915084601f83011261062b57600080fd5b81358181111561063d5761063d6105be565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610683576106836105be565b8160405282815287602084870101111561069c57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208083528351808285015260005b818110156106e9578581018301518582016040015282016106cd565b818111156106fb576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea2646970667358221220d6996ebde67a73563bf52d2b5545adec064534b2fcd91ec70e83fc1ef951152464736f6c63430008090033a2646970667358221220951845e890ab9203b30da702a3968c462c24b850de19dab1f4d34df732ef8e3a64736f6c63430008090033", - ), - storage: storage{ - // address public agentAddress - "0x00": l1BuildAgent.address, - // address public paramAddress - "0x01": l1BuildParam.address, - }, - }, - { - contract: l1BuildAllowList, - // commit: https://github.com/oasysgames/oasys-optimism/blob/28313096a0cc758c3d4fbdc29a2078a5ef78cb70/packages/contracts/contracts/oasys/libraries/Allowlist.sol - code: mustDecodeCode( - "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063715018a61161005b578063715018a6146100d25780638da5cb5b146100da578063c5eff3d014610102578063f2fde38b1461011757600080fd5b8063322433e31461008257806338eada1c146100aa5780634ba79dfe146100bf575b600080fd5b610095610090366004610a53565b61012a565b60405190151581526020015b60405180910390f35b6100bd6100b8366004610a53565b6101e7565b005b6100bd6100cd366004610a53565b6103ed565b6100bd61072e565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a1565b61010a6107bb565b6040516100a19190610a90565b6100bd610125366004610a53565b61082a565b60008061014c60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16141561017057506001919050565b6101e160018054806020026020016040519081016040528092919081815260200182805480156101d657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116101ab575b50505050508361095a565b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102de60018054806020026020016040519081016040528092919081815260200182805480156102d357602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116102a8575b50505050508261095a565b15610345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f616c7265616479206164646564000000000000000000000000000000000000006044820152606401610264565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f28f54e0b69489ad5fd27625e6fcff58faff5da96f8a077d08bb09af25bb41d549060200160405180910390a150565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610264565b6104dd60018054806020026020016040519081016040528092919081815260200182805480156102d35760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116102a85750505050508261095a565b610543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f61646472657373206e6f7420666f756e640000000000000000000000000000006044820152606401610264565b6001546000805b610555600184610b19565b81101561067357811580156105b357508373ffffffffffffffffffffffffffffffffffffffff166001828154811061058f5761058f610b30565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16145b156105bd57600191505b81156106615760016105cf8282610b5f565b815481106105df576105df610b30565b6000918252602090912001546001805473ffffffffffffffffffffffffffffffffffffffff909216918390811061061857610618610b30565b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8061066b81610b77565b91505061054a565b50600180548061068557610685610bb0565b60008281526020908190207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908301810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590910190915560405173ffffffffffffffffffffffffffffffffffffffff851681527f458680f79aa9de0ae06344287a3bd8ec6179faa05252e9af81ae734d6b4dc6ba910160405180910390a1505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610264565b6107b960006109de565b565b6060600180548060200260200160405190810160405280929190818152602001828054801561082057602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116107f5575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610264565b73ffffffffffffffffffffffffffffffffffffffff811661094e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610264565b610957816109de565b50565b8151600090815b818110156109d3578373ffffffffffffffffffffffffffffffffffffffff1685828151811061099257610992610b30565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156109c1576001925050506101e1565b806109cb81610b77565b915050610961565b506000949350505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610a6557600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610a8957600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610ade57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610aac565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015610b2b57610b2b610aea565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115610b7257610b72610aea565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610ba957610ba9610aea565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212201785ecf5877acc9d1f9db6528041816518f95e4f871e44d00797031028d66a8064736f6c63430008090033", - ), - storage: storage{ - // address private _owner - "0x00": genesismap{ - params.OasysMainnetGenesisHash: mainnetGenesisWalletAddress, - }, - }, - }, - { - contract: nsuiteGnosisSafe, - code: mustDecodeCode( - "0x6080604052600436106101dc5760003560e01c8063affed0e011610102578063e19a9dd911610095578063f08a032311610064578063f08a032314611647578063f698da2514611698578063f8dc5dd9146116c3578063ffa1ad741461173e57610231565b8063e19a9dd91461139b578063e318b52b146113ec578063e75235b81461147d578063e86637db146114a857610231565b8063cc2f8452116100d1578063cc2f8452146110e8578063d4d9bdcd146111b5578063d8d11f78146111f0578063e009cfde1461132a57610231565b8063affed0e014610d94578063b4faba0914610dbf578063b63e800d14610ea7578063c4ca3a9c1461101757610231565b80635624b25b1161017a5780636a761202116101495780636a761202146109945780637d83297414610b50578063934f3a1114610bbf578063a0e67e2b14610d2857610231565b80635624b25b146107fb5780635ae6bd37146108b9578063610b592514610908578063694e80c31461095957610231565b80632f54bf6e116101b65780632f54bf6e146104d35780633408e4701461053a578063468721a7146105655780635229073f1461067a57610231565b80630d582f131461029e57806312fb68e0146102f95780632d9ad53d1461046c57610231565b36610231573373ffffffffffffffffffffffffffffffffffffffff167f3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d346040518082815260200191505060405180910390a2005b34801561023d57600080fd5b5060007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b905080548061027257600080f35b36600080373360601b365260008060143601600080855af13d6000803e80610299573d6000fd5b3d6000f35b3480156102aa57600080fd5b506102f7600480360360408110156102c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117ce565b005b34801561030557600080fd5b5061046a6004803603608081101561031c57600080fd5b81019080803590602001909291908035906020019064010000000081111561034357600080fd5b82018360208201111561035557600080fd5b8035906020019184600183028401116401000000008311171561037757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103da57600080fd5b8201836020820111156103ec57600080fd5b8035906020019184600183028401116401000000008311171561040e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611bbe565b005b34801561047857600080fd5b506104bb6004803603602081101561048f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612546565b60405180821515815260200191505060405180910390f35b3480156104df57600080fd5b50610522600480360360208110156104f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612618565b60405180821515815260200191505060405180910390f35b34801561054657600080fd5b5061054f6126ea565b6040518082815260200191505060405180910390f35b34801561057157600080fd5b506106626004803603608081101561058857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156105cf57600080fd5b8201836020820111156105e157600080fd5b8035906020019184600183028401116401000000008311171561060357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506126f7565b60405180821515815260200191505060405180910390f35b34801561068657600080fd5b506107776004803603608081101561069d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156106e457600080fd5b8201836020820111156106f657600080fd5b8035906020019184600183028401116401000000008311171561071857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506128dd565b60405180831515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107bf5780820151818401526020810190506107a4565b50505050905090810190601f1680156107ec5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561080757600080fd5b5061083e6004803603604081101561081e57600080fd5b810190808035906020019092919080359060200190929190505050612913565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561087e578082015181840152602081019050610863565b50505050905090810190601f1680156108ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108c557600080fd5b506108f2600480360360208110156108dc57600080fd5b810190808035906020019092919050505061299a565b6040518082815260200191505060405180910390f35b34801561091457600080fd5b506109576004803603602081101561092b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129b2565b005b34801561096557600080fd5b506109926004803603602081101561097c57600080fd5b8101908080359060200190929190505050612d44565b005b610b3860048036036101408110156109ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109f257600080fd5b820183602082011115610a0457600080fd5b80359060200191846001830284011164010000000083111715610a2657600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610ab257600080fd5b820183602082011115610ac457600080fd5b80359060200191846001830284011164010000000083111715610ae657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612e7e565b60405180821515815260200191505060405180910390f35b348015610b5c57600080fd5b50610ba960048036036040811015610b7357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506133bb565b6040518082815260200191505060405180910390f35b348015610bcb57600080fd5b50610d2660048036036060811015610be257600080fd5b810190808035906020019092919080359060200190640100000000811115610c0957600080fd5b820183602082011115610c1b57600080fd5b80359060200191846001830284011164010000000083111715610c3d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ca057600080fd5b820183602082011115610cb257600080fd5b80359060200191846001830284011164010000000083111715610cd457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506133e0565b005b348015610d3457600080fd5b50610d3d61346f565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d80578082015181840152602081019050610d65565b505050509050019250505060405180910390f35b348015610da057600080fd5b50610da9613618565b6040518082815260200191505060405180910390f35b348015610dcb57600080fd5b50610ea560048036036040811015610de257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610e1f57600080fd5b820183602082011115610e3157600080fd5b80359060200191846001830284011164010000000083111715610e5357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061361e565b005b348015610eb357600080fd5b506110156004803603610100811015610ecb57600080fd5b8101908080359060200190640100000000811115610ee857600080fd5b820183602082011115610efa57600080fd5b80359060200191846020830284011164010000000083111715610f1c57600080fd5b909192939192939080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610f6757600080fd5b820183602082011115610f7957600080fd5b80359060200191846001830284011164010000000083111715610f9b57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613640565b005b34801561102357600080fd5b506110d26004803603608081101561103a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561108157600080fd5b82018360208201111561109357600080fd5b803590602001918460018302840111640100000000831117156110b557600080fd5b9091929391929390803560ff1690602001909291905050506137fe565b6040518082815260200191505060405180910390f35b3480156110f457600080fd5b506111416004803603604081101561110b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613926565b60405180806020018373ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019060200280838360005b838110156111a0578082015181840152602081019050611185565b50505050905001935050505060405180910390f35b3480156111c157600080fd5b506111ee600480360360208110156111d857600080fd5b8101908080359060200190929190505050613b18565b005b3480156111fc57600080fd5b50611314600480360361014081101561121457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561125b57600080fd5b82018360208201111561126d57600080fd5b8035906020019184600183028401116401000000008311171561128f57600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613cb7565b6040518082815260200191505060405180910390f35b34801561133657600080fd5b506113996004803603604081101561134d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ce4565b005b3480156113a757600080fd5b506113ea600480360360208110156113be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614075565b005b3480156113f857600080fd5b5061147b6004803603606081101561140f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506140f9565b005b34801561148957600080fd5b5061149261476b565b6040518082815260200191505060405180910390f35b3480156114b457600080fd5b506115cc60048036036101408110156114cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561151357600080fd5b82018360208201111561152557600080fd5b8035906020019184600183028401116401000000008311171561154757600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614775565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561160c5780820151818401526020810190506115f1565b50505050905090810190601f1680156116395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561165357600080fd5b506116966004803603602081101561166a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061491d565b005b3480156116a457600080fd5b506116ad61497e565b6040518082815260200191505060405180910390f35b3480156116cf57600080fd5b5061173c600480360360608110156116e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506149fc565b005b34801561174a57600080fd5b50611753614e2f565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611793578082015181840152602081019050611778565b50505050905090810190601f1680156117c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6117d6614e68565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156118405750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561187857503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600081548092919060010191905055507f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2682604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414611bba57611bb981612d44565b5b5050565b611bd2604182614f0b90919063ffffffff16565b82511015611c48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808060008060008060008091505b8882101561253857611c6a8a83614f45565b80955081965082975050505060008560ff161415612073578360001c9650611c9c60418a614f0b90919063ffffffff16565b8360001c1015611d14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8951611d2d60208560001c614f7490919063ffffffff16565b1115611da1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006020848c01015190508a51611dd782611dc960208860001c614f7490919063ffffffff16565b614f7490919063ffffffff16565b1115611e4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60606020858d010190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168973ffffffffffffffffffffffffffffffffffffffff166320c13b0b8f846040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611eed578082015181840152602081019050611ed2565b50505050905090810190601f168015611f1a5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611f53578082015181840152602081019050611f38565b50505050905090810190601f168015611f805780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b158015611f9f57600080fd5b505afa158015611fb3573d6000803e3d6000fd5b505050506040513d6020811015611fc957600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461206c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b50506122b8565b60018560ff161415612187578360001c96508673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061211057506000600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e81526020019081526020016000205414155b612182576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6122b7565b601e8560ff16111561224f5760018c60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012060048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561223e573d6000803e3d6000fd5b5050506020604051035196506122b6565b60018c86868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156122a9573d6000803e3d6000fd5b5050506020604051035196505b5b5b600173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141580156122fa57506122f987612618565b5b156123075786955061244e565b600061231161346f565b905060019650600091505b805182101561244c57600081838151811061233357fe5b60200260200101519050600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612378575061243f565b6000813b90506000811415801561242d57508173ffffffffffffffffffffffffffffffffffffffff16632f54bf6e8b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156123f157600080fd5b505afa158015612405573d6000803e3d6000fd5b505050506040513d602081101561241b57600080fd5b81019080805190602001909291905050505b1561243c57819850505061244c565b50505b818060010192505061231c565b505b8773ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161180156124b65750600173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b612528576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323600000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8597508180600101925050611c58565b505050505050505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600173ffffffffffffffffffffffffffffffffffffffff16141580156126115750600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156126e35750600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000804690508091505090565b6000600173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156127c25750600073ffffffffffffffffffffffffffffffffffffffff16600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b612834576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612841858585855a614f93565b90508015612891573373ffffffffffffffffffffffffffffffffffffffff167f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb860405160405180910390a26128d5565b3373ffffffffffffffffffffffffffffffffffffffff167facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37560405160405180910390a25b949350505050565b600060606128ed868686866126f7565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060006020830267ffffffffffffffff8111801561293157600080fd5b506040519080825280601f01601f1916602001820160405280156129645781602001600182028036833780820191505090505b50905060005b8381101561298f5780850154806020830260208501015250808060010191505061296a565b508091505092915050565b60076020528060005260406000206000915090505481565b6129ba614e68565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015612a245750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b612a96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b97576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b612d4c614e68565b600354811115612dc4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001811015612e3b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806004819055507f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c936004546040518082815260200191505060405180910390a150565b6000806000612e988e8e8e8e8e8e8e8e8e8e600554614775565b905060056000815480929190600101919050555080805190602001209150612ec18282866133e0565b506000612ecc614fdf565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146130b2578073ffffffffffffffffffffffffffffffffffffffff166375f0bb528f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b8152600401808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115612f6f57fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018473ffffffffffffffffffffffffffffffffffffffff16815260200183810383528d8d82818152602001925080828437600081840152601f19601f820116905080830192505050838103825285818151815260200191508051906020019080838360005b83811015613041578082015181840152602081019050613026565b50505050905090810190601f16801561306e5780820380516001836020036101000a031916815260200191505b509e505050505050505050505050505050600060405180830381600087803b15801561309957600080fd5b505af11580156130ad573d6000803e3d6000fd5b505050505b6101f46130d96109c48b01603f60408d02816130ca57fe5b0461501090919063ffffffff16565b015a101561314f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60005a90506131b88f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e60008d146131ad578e6131b3565b6109c45a035b614f93565b93506131cd5a8261502a90919063ffffffff16565b905083806131dc575060008a14155b806131e8575060008814155b61325a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008089111561327457613271828b8b8b8b61504a565b90505b84156132be577f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e8482604051808381526020018281526020019250505060405180910390a16132fe565b7f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d238482604051808381526020018281526020019250505060405180910390a15b5050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146133aa578073ffffffffffffffffffffffffffffffffffffffff16639327136883856040518363ffffffff1660e01b815260040180838152602001821515815260200192505050600060405180830381600087803b15801561339157600080fd5b505af11580156133a5573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b600060045490506000811161345d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61346984848484611bbe565b50505050565b6060600060035467ffffffffffffffff8111801561348c57600080fd5b506040519080825280602002602001820160405280156134bb5781602001602082028036833780820191505090505b50905060008060026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461360f578083838151811061356657fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508180600101925050613525565b82935050505090565b60055481565b600080825160208401855af4806000523d6020523d600060403e60403d016000fd5b61368b8a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505089615250565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146136c9576136c884615750565b5b6137178787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061577f565b60008211156137315761372f8260006001868561504a565b505b3373ffffffffffffffffffffffffffffffffffffffff167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a88b8b8b8b8960405180806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281038252878782818152602001925060200280828437600081840152601f19601f820116905080830192505050965050505050505060405180910390a250505050505050505050565b6000805a9050613855878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050865a614f93565b61385e57600080fd5b60005a8203905080604051602001808281526020019150506040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156138eb5780820151818401526020810190506138d0565b50505050905090810190601f1680156139185780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b606060008267ffffffffffffffff8111801561394157600080fd5b506040519080825280602002602001820160405280156139705781602001602082028036833780820191505090505b509150600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613a435750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015613a4e57508482105b15613b095780848381518110613a6057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081806001019250506139d9565b80925081845250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff16600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613c1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16817ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c60405160405180910390a350565b6000613ccc8c8c8c8c8c8c8c8c8c8c8c614775565b8051906020012090509b9a5050505050505050505050565b613cec614e68565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613d565750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b613dc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613ec8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b61407d614e68565b60007f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b90508181557f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa282604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b614101614e68565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561416b5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156141a357503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b614215576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614316576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156143805750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6143f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146144f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a17f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b6000600454905090565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d860001b8d8d8d8d60405180838380828437808301925050509250505060405180910390208c8c8c8c8c8c8c604051602001808c81526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189815260200188600181111561480657fe5b81526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019b505050505050505050505050604051602081830303815290604052805190602001209050601960f81b600160f81b61489261497e565b8360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018381526020018281526020019450505050506040516020818303038152906040529150509b9a5050505050505050505050565b614925614e68565b61492e81615750565b7f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921860001b6149ac6126ea565b30604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405160208183030381529060405280519060200120905090565b614a04614e68565b806001600354031015614a7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015614ae95750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b614b5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614c5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008154809291906001900391905055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414614e2a57614e2981612d44565b5b505050565b6040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614f09576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b565b600080831415614f1e5760009050614f3f565b6000828402905082848281614f2f57fe5b0414614f3a57600080fd5b809150505b92915050565b60008060008360410260208101860151925060408101860151915060ff60418201870151169350509250925092565b600080828401905083811015614f8957600080fd5b8091505092915050565b6000600180811115614fa157fe5b836001811115614fad57fe5b1415614fc6576000808551602087018986f49050614fd6565b600080855160208701888a87f190505b95945050505050565b6000807f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b9050805491505090565b6000818310156150205781615022565b825b905092915050565b60008282111561503957600080fd5b600082840390508091505092915050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146150875782615089565b325b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156151a1576150f33a86106150d0573a6150d2565b855b6150e5888a614f7490919063ffffffff16565b614f0b90919063ffffffff16565b91508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505061519c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b615246565b6151c6856151b8888a614f7490919063ffffffff16565b614f0b90919063ffffffff16565b91506151d38482846159ba565b615245576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5095945050505050565b6000600454146152c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b815181111561533f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60018110156153b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006001905060005b83518110156156bc5760008482815181106153d657fe5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561544a5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561548257503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156154ba57508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b61552c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461562d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508092505080806001019150506153bf565b506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550825160038190555081600481905550505050565b60007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b90508181555050565b600073ffffffffffffffffffffffffffffffffffffffff1660016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614615881576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001806000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146159b6576159438260008360015a614f93565b6159b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5050565b60008063a9059cbb8484604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050602060008251602084016000896127105a03f13d60008114615a615760208114615a695760009350615a74565b819350615a74565b600051158215171593505b505050939250505056fea264697066735822122038be17aeeb4bf95ff3f3ebc2eeec00436c94fcdc1f5b1a723c10c64b3f14ce7d64736f6c63430007060033", - ), - storage: storage{ - // uint256 internal threshold - "0x04": common.Big1, - }, - }, - { - contract: nsuiteGnosisSafeProxyFactory, - code: mustDecodeCode( - "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c806361b69abd1161006657806361b69abd146103bb57806368fa8134146104c0578063addacc0f14610504578063c999117614610587578063d18af54d146105cb5761009e565b80630a2eb301146100a35780631688f0b9146100fd5780632500510e1461020c57806353e5d935146102d9578063543b36931461035c575b600080fd5b6100e5600480360360208110156100b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106fa565b60405180821515815260200191505060405180910390f35b6101e06004803603606081101561011357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561015057600080fd5b82018360208201111561016257600080fd5b8035906020019184600183028401116401000000008311171561018457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291905050506107cb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102ad6004803603606081101561022257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561025f57600080fd5b82018360208201111561027157600080fd5b8035906020019184600183028401116401000000008311171561029357600080fd5b9091929391929390803590602001909291905050506108ed565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102e1610a1a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610321578082015181840152602081019050610306565b50505050905090810190601f16801561034e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610364610a45565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156103a757808201518184015260208101905061038c565b505050509050019250505060405180910390f35b610494600480360360408110156103d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561040e57600080fd5b82018360208201111561042057600080fd5b8035906020019184600183028401116401000000008311171561044257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610bec565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610502600480360360208110156104d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610cd1565b005b61050c611291565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561054c578082015181840152602081019050610531565b50505050905090810190601f1680156105795780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105c96004803603602081101561059d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112bc565b005b6106ce600480360360808110156105e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561061e57600080fd5b82018360208201111561063057600080fd5b8035906020019184600183028401116401000000008311171561065257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116cf565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156107c45750600073ffffffffffffffffffffffffffffffffffffffff166000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b60006107d6336106fa565b610848576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f475331303030310000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6108538484846118fa565b905060008351111561087b5760008060008551602087016000865af1141561087a57600080fd5b5b7f4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e2358185604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a19392505050565b600061093e8585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050846118fa565b905080604051602001808273ffffffffffffffffffffffffffffffffffffffff1660601b81526014019150506040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156109df5780820151818401526020810190506109c4565b50505050905090810190601f168015610a0c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b606060405180602001610a2c90611a8e565b6020820181038252601f19601f82011660405250905090565b6060600060015467ffffffffffffffff81118015610a6257600080fd5b50604051908082528060200260200182016040528015610a915781602001602082028036833780820191505090505b509050600080806000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610be35780838381518110610b3b57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508180600101925050610afa565b82935050505090565b600082604051610bfb90611a8e565b808273ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f080158015610c37573d6000803e3d6000fd5b509050600082511115610c605760008060008451602086016000865af11415610c5f57600080fd5b5b7f4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e2358184604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a192915050565b610cda336106fa565b610d4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f475331303030310000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600180540311610dc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f475331303030340000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015610e305750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b610ea2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f475331303030320000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600190505b6000808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508173ffffffffffffffffffffffffffffffffffffffff166000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015610fd15750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b610ea9578173ffffffffffffffffffffffffffffffffffffffff166000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f475331303030350000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160008154809291906001900391905055507f7b309bf0232684e703b0a791653cc857835761a0365ccade0e2aa66ef02ca53082604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b6060604051806020016112a390611a9b565b6020820181038252601f19601f82011660405250905090565b6112c5336106fa565b611337576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f475331303030310000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156113a15750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b611413576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f475331303030320000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611513576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f475331303030330000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600080600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600080600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600081548092919060010191905055507f1d37cb7b1c6fd2a757acce811a604fac9c4a3d2e453faff6a1358e126ba8d2dc81604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60006116da336106fa565b61174c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f475331303030310000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008383604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1660601b8152601401925050506040516020818303038152906040528051906020012060001c90506117a68686836107cb565b9150600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146118f1578273ffffffffffffffffffffffffffffffffffffffff16631e52b518838888886040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561188957808201518184015260208101905061186e565b50505050905090810190601f1680156118b65780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156118d857600080fd5b505af11580156118ec573d6000803e3d6000fd5b505050505b50949350505050565b600080826040516020018082815260200191505060405160208183030381529060405280519060200120905060006040518060200161193890611a8e565b6020820181038252601f19601f820116604052508673ffffffffffffffffffffffffffffffffffffffff166040516020018083805190602001908083835b602083106119995780518252602082019150602081019050602083039250611976565b6001836020036101000a038019825116818451168082178552505050505050905001828152602001925050506040516020818303038152906040529050818151826020016000f59250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a85576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f437265617465322063616c6c206661696c65640000000000000000000000000081525060200191505060405180910390fd5b50509392505050565b6101e680611aa883390190565b60ab80611c8e8339019056fe608060405234801561001057600080fd5b506040516101e63803806101e68339818101604052602081101561003357600080fd5b8101908080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156100ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806101c46022913960400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060ab806101196000396000f3fe608060405273ffffffffffffffffffffffffffffffffffffffff600054167fa619486e0000000000000000000000000000000000000000000000000000000060003514156050578060005260206000f35b3660008037600080366000845af43d6000803e60008114156070573d6000fd5b3d6000f3fea2646970667358221220d1429297349653a4918076d650332de1a1068c5f3e07c5c82360c277770b955264736f6c63430007060033496e76616c69642073696e676c65746f6e20616464726573732070726f7669646564608060405273ffffffffffffffffffffffffffffffffffffffff600054167fa619486e0000000000000000000000000000000000000000000000000000000060003514156050578060005260206000f35b3660008037600080366000845af43d6000803e60008114156070573d6000fd5b3d6000f3fea2646970667358221220d1429297349653a4918076d650332de1a1068c5f3e07c5c82360c277770b955264736f6c63430007060033a2646970667358221220b348b7b9a93d312ee0be5dfa6ad57baedea8278324f92f89631c8bdcd6efcd5364736f6c63430007060033", - ), - storage: storage{ - // mapping(address => address) internal administrators - "0x00": genesismap{ - params.OasysMainnetGenesisHash: mapping{ - keyFn: addressKeyFn, - values: map[string]interface{}{ - "0x0000000000000000000000000000000000000001": "0x2273e9bD041d1405cB3f9DCa42fafC9358b07f79", - "0x2273e9bD041d1405cB3f9DCa42fafC9358b07f79": "0x0000000000000000000000000000000000000001", - }, - }, - defaultGenesisHash: mapping{ - keyFn: addressKeyFn, - values: map[string]interface{}{ - "0x0000000000000000000000000000000000000001": "0x377b21b3D7d6F9B1dBf00176f96cCf4CABD100d2", - "0x377b21b3D7d6F9B1dBf00176f96cCf4CABD100d2": "0x0000000000000000000000000000000000000001", - }, - }, - }, - // uint256 internal administratorCount - "0x01": common.Big1, - }, - }, - { - contract: nsuiteCompatibilityFallbackHandler, - code: mustDecodeCode( - "0x608060405234801561001057600080fd5b50600436106100ce5760003560e01c80636ac247841161008c578063bc197c8111610066578063bc197c81146107bb578063bd61951d14610951578063f23a6e6114610a63578063ffa1ad7414610b63576100ce565b80636ac24784146105ea578063a3f4df7e146106d9578063b2494df31461075c576100ce565b806223de29146100d357806301ffc9a71461020b5780630a1028c41461026e578063150b7a021461033d5780631626ba7e1461043357806320c13b0b146104e9575b600080fd5b610209600480360360c08110156100e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561017057600080fd5b82018360208201111561018257600080fd5b803590602001918460018302840111640100000000831117156101a457600080fd5b9091929391929390803590602001906401000000008111156101c557600080fd5b8201836020820111156101d757600080fd5b803590602001918460018302840111640100000000831117156101f957600080fd5b9091929391929390505050610be6565b005b6102566004803603602081101561022157600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bf0565b60405180821515815260200191505060405180910390f35b6103276004803603602081101561028457600080fd5b81019080803590602001906401000000008111156102a157600080fd5b8201836020820111156102b357600080fd5b803590602001918460018302840111640100000000831117156102d557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610d2a565b6040518082815260200191505060405180910390f35b6103fe6004803603608081101561035357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156103ba57600080fd5b8201836020820111156103cc57600080fd5b803590602001918460018302840111640100000000831117156103ee57600080fd5b9091929391929390505050610d3d565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6104b46004803603604081101561044957600080fd5b81019080803590602001909291908035906020019064010000000081111561047057600080fd5b82018360208201111561048257600080fd5b803590602001918460018302840111640100000000831117156104a457600080fd5b9091929391929390505050610d52565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6105b5600480360360408110156104ff57600080fd5b810190808035906020019064010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184600183028401116401000000008311171561055057600080fd5b90919293919293908035906020019064010000000081111561057157600080fd5b82018360208201111561058357600080fd5b803590602001918460018302840111640100000000831117156105a557600080fd5b9091929391929390505050610f0a565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6106c36004803603604081101561060057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561063d57600080fd5b82018360208201111561064f57600080fd5b8035906020019184600183028401116401000000008311171561067157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061115b565b6040518082815260200191505060405180910390f35b6106e16112cd565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610721578082015181840152602081019050610706565b50505050905090810190601f16801561074e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610764611306565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156107a757808201518184015260208101905061078c565b505050509050019250505060405180910390f35b61091c600480360360a08110156107d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561082e57600080fd5b82018360208201111561084057600080fd5b8035906020019184602083028401116401000000008311171561086257600080fd5b90919293919293908035906020019064010000000081111561088357600080fd5b82018360208201111561089557600080fd5b803590602001918460208302840111640100000000831117156108b757600080fd5b9091929391929390803590602001906401000000008111156108d857600080fd5b8201836020820111156108ea57600080fd5b8035906020019184600183028401116401000000008311171561090c57600080fd5b909192939192939050505061146d565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6109e86004803603604081101561096757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156109a457600080fd5b8201836020820111156109b657600080fd5b803590602001918460018302840111640100000000831117156109d857600080fd5b9091929391929390505050611485565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a28578082015181840152602081019050610a0d565b50505050905090810190601f168015610a555780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b2e600480360360a0811015610a7957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610aea57600080fd5b820183602082011115610afc57600080fd5b80359060200191846001830284011164010000000083111715610b1e57600080fd5b90919293919293905050506114ef565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b610b6b611505565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bab578082015181840152602081019050610b90565b50505050905090810190601f168015610bd85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b5050505050505050565b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cbb57507f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d2357507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000610d36338361115b565b9050919050565b600063150b7a0260e01b905095945050505050565b60008033905060008173ffffffffffffffffffffffffffffffffffffffff166320c13b0b876040516020018082815260200191505060405160208183030381529060405287876040518463ffffffff1660e01b8152600401808060200180602001838103835286818151815260200191508051906020019080838360005b83811015610deb578082015181840152602081019050610dd0565b50505050905090810190601f168015610e185780820380516001836020036101000a031916815260200191505b508381038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060206040518083038186803b158015610e6357600080fd5b505afa158015610e77573d6000803e3d6000fd5b505050506040513d6020811015610e8d57600080fd5b810190808051906020019092919050505090506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610ef657600060e01b610eff565b631626ba7e60e01b5b925050509392505050565b6000803390506000610f608288888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061115b565b905060008585905014156110755760008273ffffffffffffffffffffffffffffffffffffffff16635ae6bd37836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610fc157600080fd5b505afa158015610fd5573d6000803e3d6000fd5b505050506040513d6020811015610feb57600080fd5b81019080805190602001909291905050501415611070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f48617368206e6f7420617070726f76656400000000000000000000000000000081525060200191505060405180910390fd5b611147565b8173ffffffffffffffffffffffffffffffffffffffff1663934f3a1182898989896040518663ffffffff1660e01b81526004018086815260200180602001806020018381038352878782818152602001925080828437600081840152601f19601f8201169050808301925050508381038252858582818152602001925080828437600081840152601f19601f82011690508083019250505097505050505050505060006040518083038186803b15801561112e57600080fd5b505afa158015611142573d6000803e3d6000fd5b505050505b6320c13b0b60e01b92505050949350505050565b6000807f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca60001b83805190602001206040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050601960f81b600160f81b8573ffffffffffffffffffffffffffffffffffffffff1663f698da256040518163ffffffff1660e01b815260040160206040518083038186803b15801561120957600080fd5b505afa15801561121d573d6000803e3d6000fd5b505050506040513d602081101561123357600080fd5b81019080805190602001909291905050508360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018381526020018281526020019450505050506040516020818303038152906040528051906020012091505092915050565b6040518060400160405280601881526020017f44656661756c742043616c6c6261636b2048616e646c6572000000000000000081525081565b6060600033905060008173ffffffffffffffffffffffffffffffffffffffff1663cc2f84526001600a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060006040518083038186803b15801561138057600080fd5b505afa158015611394573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060408110156113be57600080fd5b81019080805160405193929190846401000000008211156113de57600080fd5b838201915060208201858111156113f457600080fd5b825186602082028301116401000000008211171561141157600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561144857808201518184015260208101905061142d565b5050505090500160405260200180519060200190929190505050509050809250505090565b600063bc197c8160e01b905098975050505050505050565b60606040517fb4faba09000000000000000000000000000000000000000000000000000000008152600436036004808301376020600036836000335af15060203d036040519250808301604052806020843e6000516114e657825160208401fd5b50509392505050565b600063f23a6e6160e01b90509695505050505050565b6040518060400160405280600581526020017f312e302e300000000000000000000000000000000000000000000000000000008152508156fea2646970667358221220c442b2d533954457d3b4b55cb2485c7bc35c09b825c575be1b86282f7fdc559f64736f6c63430007060033", - ), - }, - { - contract: sccVerifier, - code: mustDecodeCode( - "0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063d17f1fb11461003b578063dea2619d14610050575b600080fd5b61004e610049366004610c9e565b610063565b005b61004e61005e366004610c9e565b610152565b6100708383600084610234565b6040517f9594dd6400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690639594dd64906100c2908590600401610dd5565b600060405180830381600087803b1580156100dc57600080fd5b505af11580156100f0573d6000803e3d6000fd5b5050505081600001518373ffffffffffffffffffffffffffffffffffffffff167f2d6c30e420d4abe074221e2e344cec3bd0f565a2e09435a3d9d738f69332a6dd846020015160405161014591815260200190565b60405180910390a3505050565b61015f8383600184610234565b6040517fe0c2b41800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063e0c2b418906101b1908590600401610dd5565b600060405180830381600087803b1580156101cb57600080fd5b505af11580156101df573d6000803e3d6000fd5b5050505081600001518373ffffffffffffffffffffffffffffffffffffffff167f4785b50466d5e0124a77ed43985b62f3b454caff4b6cfc6aa94ab02c5e5df1f5846020015160405161014591815260200190565b8251602080850151604080514681850152606089901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016818301526054810194909452607484019190915284151560f81b6094840152805160758185030181526095909301905281519101206000906102ae90836102c0565b90506102b9816105aa565b5050505050565b6060815167ffffffffffffffff8111156102dc576102dc610aca565b604051908082528060200260200182016040528015610305578160200160208202803683370190505b506040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101859052909150600090605c016040516020818303038152906040528051906020012090506000805b84518110156105a157600085828151811061037857610378610e20565b6020026020010151905060008061038f86846108d5565b909250905060018160048111156103a8576103a8610e4f565b14156103eb57826040517ff31b6ee50000000000000000000000000000000000000000000000000000000081526004016103e29190610e7e565b60405180910390fd5b60028160048111156103ff576103ff610e4f565b141561043957826040517ff31b6ee50000000000000000000000000000000000000000000000000000000081526004016103e29190610ed0565b600381600481111561044d5761044d610e4f565b141561048757826040517ff31b6ee50000000000000000000000000000000000000000000000000000000081526004016103e29190610f22565b600481600481111561049b5761049b610e4f565b14156104d557826040517ff31b6ee50000000000000000000000000000000000000000000000000000000081526004016103e29190610f9a565b8473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1611610552576040517f3d1fd1b000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016103e2565b8187858151811061056557610565610e20565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015250925081905061059981611041565b91505061035b565b50505092915050565b8051611001906000805b828110156107d55760008582815181106105d0576105d0610e20565b60209081029190910101516040517f7b520aa800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8083166004830152919250600091871690637b520aa89060240160206040518083038186803b15801561064857600080fd5b505afa15801561065c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610680919061107a565b6040517fd1f18ee100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808316600483015260006024830181905292935082919089169063d1f18ee19060440160a06040518083038186803b1580156106f657600080fd5b505afa15801561070a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072e91906110b3565b945050505091508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146107b2576040517f5b73c50400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016103e2565b6107bc8187611113565b95505050505080806107cd90611041565b9150506105b4565b506040517f45367f230000000000000000000000000000000000000000000000000000000081526000600482018190529060649073ffffffffffffffffffffffffffffffffffffffff8616906345367f239060240160206040518083038186803b15801561084257600080fd5b505afa158015610856573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087a919061112b565b6108849190611144565b61088f90603361117f565b9050808210156102b9576040517f09b3dd4a00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016103e2565b60008082516041141561090c5760208301516040840151606085015160001a61090087828585610945565b9450945050505061093e565b825160401415610936576020830151604084015161092b868383610a5d565b93509350505061093e565b506000905060025b9250929050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561097c5750600090506003610a54565b8460ff16601b1415801561099457508460ff16601c14155b156109a55750600090506004610a54565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156109f9573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116610a4d57600060019250925050610a54565b9150600090505b94509492505050565b6000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831660ff84901c601b01610a9787828885610945565b935093505050935093915050565b73ffffffffffffffffffffffffffffffffffffffff81168114610ac757600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715610b1c57610b1c610aca565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610b6957610b69610aca565b604052919050565b600082601f830112610b8257600080fd5b813567ffffffffffffffff811115610b9c57610b9c610aca565b610bcd60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610b22565b818152846020838601011115610be257600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610c1057600080fd5b8135602067ffffffffffffffff80831115610c2d57610c2d610aca565b8260051b610c3c838201610b22565b9384528581018301938381019088861115610c5657600080fd5b84880192505b85831015610c9257823584811115610c745760008081fd5b610c828a87838c0101610b71565b8352509184019190840190610c5c565b98975050505050505050565b600080600060608486031215610cb357600080fd5b8335610cbe81610aa5565b9250602084013567ffffffffffffffff80821115610cdb57600080fd5b9085019060a08288031215610cef57600080fd5b610cf7610af9565b82358152602083013560208201526040830135604082015260608301356060820152608083013582811115610d2b57600080fd5b610d3789828601610b71565b60808301525093506040860135915080821115610d5357600080fd5b50610d6086828701610bff565b9150509250925092565b6000815180845260005b81811015610d9057602081850181015186830182015201610d74565b81811115610da2576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152815160208201526020820151604082015260408201516060820152606082015160808201526000608083015160a080840152610e1860c0840182610d6a565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b604081526000610e916040830184610d6a565b8281036020840152601881527f45434453413a20696e76616c6964207369676e6174757265000000000000000060208201526040810191505092915050565b604081526000610ee36040830184610d6a565b8281036020840152601f81527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060208201526040810191505092915050565b604081526000610f356040830184610d6a565b8281036020840152602281527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60208201527f756500000000000000000000000000000000000000000000000000000000000060408201526060810191505092915050565b604081526000610fad6040830184610d6a565b8281036020840152602281527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60208201527f756500000000000000000000000000000000000000000000000000000000000060408201526060810191505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561107357611073611012565b5060010190565b60006020828403121561108c57600080fd5b815161109781610aa5565b9392505050565b805180151581146110ae57600080fd5b919050565b600080600080600060a086880312156110cb57600080fd5b85516110d681610aa5565b94506110e46020870161109e565b93506110f26040870161109e565b92506111006060870161109e565b9150608086015190509295509295909350565b6000821982111561112657611126611012565b500190565b60006020828403121561113d57600080fd5b5051919050565b60008261117a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111b7576111b7611012565b50029056fea26469706673582212209fac11dd98c868fd9ffa7b08d18830bba06fb4094fceab962bb92cab205636c164736f6c63430008090033", - ), - }, - } - - deployments1 = []*deployment{ - { - contract: wrappedOAS, - // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/031c8a0598fc6f88435e5be804e754d083c3eb67/contracts/token/WOAS.sol - code: mustDecodeCode("0x6080604052600436106100f25760003560e01c806370a082311161008a578063d0e30db011610059578063d0e30db01461029a578063dd62ed3e146102a2578063f94a138b146102e8578063ffc3a7691461030857600080fd5b806370a082311461020f57806395d89b4114610245578063a457c2d71461025a578063a9059cbb1461027a57600080fd5b806323b872dd116100c657806323b872dd146101935780632e1a7d4d146101b3578063313ce567146101d357806339509351146101ef57600080fd5b8062f714ce146100f757806306fdde0314610119578063095ea7b31461014457806318160ddd14610174575b600080fd5b34801561010357600080fd5b50610117610112366004610e6f565b610328565b005b34801561012557600080fd5b5061012e610336565b60405161013b9190610e9b565b60405180910390f35b34801561015057600080fd5b5061016461015f366004610ef0565b6103c8565b604051901515815260200161013b565b34801561018057600080fd5b506002545b60405190815260200161013b565b34801561019f57600080fd5b506101646101ae366004610f1a565b6103e0565b3480156101bf57600080fd5b506101176101ce366004610f56565b610404565b3480156101df57600080fd5b506040516012815260200161013b565b3480156101fb57600080fd5b5061016461020a366004610ef0565b610411565b34801561021b57600080fd5b5061018561022a366004610f6f565b6001600160a01b031660009081526020819052604090205490565b34801561025157600080fd5b5061012e610450565b34801561026657600080fd5b50610164610275366004610ef0565b61045f565b34801561028657600080fd5b50610164610295366004610ef0565b6104f6565b610117610504565b3480156102ae57600080fd5b506101856102bd366004610f91565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156102f457600080fd5b506101646103033660046110f3565b610586565b34801561031457600080fd5b5061016461032336600461117b565b61066f565b610332828261072e565b5050565b606060038054610345906111df565b80601f0160208091040260200160405190810160405280929190818152602001828054610371906111df565b80156103be5780601f10610393576101008083540402835291602001916103be565b820191906000526020600020905b8154815290600101906020018083116103a157829003601f168201915b5050505050905090565b6000336103d68185856108a9565b5060019392505050565b6000336103ee8582856109ce565b6103f9858585610a60565b506001949350505050565b61040e813361072e565b50565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091906103d6908290869061044b908790611230565b6108a9565b606060048054610345906111df565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156104e95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6103f982868684036108a9565b6000336103d6818585610a60565b600034116105455760405162461bcd60e51b815260206004820152600e60248201526d3b30b63ab29034b9903d32b9379760911b60448201526064016104e0565b61054f3334610c2e565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b60008251845114801561059a575081518351145b6105fa5760405162461bcd60e51b815260206004820152602b60248201527f574f41533a2062756c6b207472616e7366657246726f6d2061726773206d757360448201526a7420626520657175616c7360a81b60648201526084016104e0565b60005b84518110156103f95761065c85828151811061061b5761061b611248565b602002602001015185838151811061063557610635611248565b602002602001015185848151811061064f5761064f611248565b60200260200101516103e0565b50806106678161125e565b9150506105fd565b600081518351146106d25760405162461bcd60e51b815260206004820152602760248201527f574f41533a2062756c6b207472616e736665722061726773206d75737420626560448201526620657175616c7360c81b60648201526084016104e0565b3360005b84518110156103f95761071c828683815181106106f5576106f5611248565b602002602001015186848151811061070f5761070f611248565b6020026020010151610a60565b806107268161125e565b9150506106d6565b600082116107705760405162461bcd60e51b815260206004820152600f60248201526e30b6b7bab73a1034b9903d32b9379760891b60448201526064016104e0565b336000908152602081905260409020548211156107bd5760405162461bcd60e51b815260206004820152600b60248201526a1bdd995c88185b5bdd5b9d60aa1b60448201526064016104e0565b6107c73383610d0d565b6000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114610814576040519150601f19603f3d011682016040523d82523d6000602084013e610819565b606091505b50509050806108615760405162461bcd60e51b815260206004820152601460248201527327a0a9903a3930b739b332b9103330b4b632b21760611b60448201526064016104e0565b816001600160a01b03167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b658460405161089c91815260200190565b60405180910390a2505050565b6001600160a01b03831661090b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104e0565b6001600160a01b03821661096c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104e0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610a5a5781811015610a4d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104e0565b610a5a84848484036108a9565b50505050565b6001600160a01b038316610ac45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104e0565b6001600160a01b038216610b265760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104e0565b6001600160a01b03831660009081526020819052604090205481811015610b9e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104e0565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610bd5908490611230565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c2191815260200190565b60405180910390a3610a5a565b6001600160a01b038216610c845760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104e0565b8060026000828254610c969190611230565b90915550506001600160a01b03821660009081526020819052604081208054839290610cc3908490611230565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038216610d6d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104e0565b6001600160a01b03821660009081526020819052604090205481811015610de15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104e0565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610e10908490611279565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109c1565b80356001600160a01b0381168114610e6a57600080fd5b919050565b60008060408385031215610e8257600080fd5b82359150610e9260208401610e53565b90509250929050565b600060208083528351808285015260005b81811015610ec857858101830151858201604001528201610eac565b81811115610eda576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215610f0357600080fd5b610f0c83610e53565b946020939093013593505050565b600080600060608486031215610f2f57600080fd5b610f3884610e53565b9250610f4660208501610e53565b9150604084013590509250925092565b600060208284031215610f6857600080fd5b5035919050565b600060208284031215610f8157600080fd5b610f8a82610e53565b9392505050565b60008060408385031215610fa457600080fd5b610fad83610e53565b9150610e9260208401610e53565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610ffa57610ffa610fbb565b604052919050565b600067ffffffffffffffff82111561101c5761101c610fbb565b5060051b60200190565b600082601f83011261103757600080fd5b8135602061104c61104783611002565b610fd1565b82815260059290921b8401810191818101908684111561106b57600080fd5b8286015b8481101561108d5761108081610e53565b835291830191830161106f565b509695505050505050565b600082601f8301126110a957600080fd5b813560206110b961104783611002565b82815260059290921b840181019181810190868411156110d857600080fd5b8286015b8481101561108d57803583529183019183016110dc565b60008060006060848603121561110857600080fd5b833567ffffffffffffffff8082111561112057600080fd5b61112c87838801611026565b9450602086013591508082111561114257600080fd5b61114e87838801611026565b9350604086013591508082111561116457600080fd5b5061117186828701611098565b9150509250925092565b6000806040838503121561118e57600080fd5b823567ffffffffffffffff808211156111a657600080fd5b6111b286838701611026565b935060208501359150808211156111c857600080fd5b506111d585828601611098565b9150509250929050565b600181811c908216806111f357607f821691505b6020821081141561121457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156112435761124361121a565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156112725761127261121a565b5060010190565b60008282101561128b5761128b61121a565b50039056fea26469706673582212205d1f5233387daece3b2968a83b7cd384cae4d4841cd290dc7ca0817609fd9c5c64736f6c634300080c0033"), - }, - { - contract: stakableOAS, - // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/031c8a0598fc6f88435e5be804e754d083c3eb67/contracts/token/SOAS.sol - code: mustDecodeCode("0x6080604052600436106101355760003560e01c806370a08231116100ab578063a457c2d71161006f578063a457c2d71461037e578063a9059cbb1461039e578063d97830b1146103be578063dd62ed3e1461045b578063f94a138b146104a1578063ffc3a769146104c157600080fd5b806370a08231146102bd578063775ad527146102f35780637de6b1db1461031357806392de74821461033357806395d89b411461036957600080fd5b8063313ce567116100fd578063313ce567146101f6578063379607f5146102125780633950935114610232578063546cec3e1461025257806364b55bed146102655780636dec93f11461029d57600080fd5b806306fdde031461013a578063095ea7b31461016557806318160ddd1461019557806323b872dd146101b45780632e87d48c146101d4575b600080fd5b34801561014657600080fd5b5061014f6104e1565b60405161015c9190611758565b60405180910390f35b34801561017157600080fd5b506101856101803660046117c9565b610573565b604051901515815260200161015c565b3480156101a157600080fd5b506002545b60405190815260200161015c565b3480156101c057600080fd5b506101856101cf3660046117f3565b61058d565b3480156101e057600080fd5b506101f46101ef36600461190a565b6105b1565b005b34801561020257600080fd5b506040516012815260200161015c565b34801561021e57600080fd5b506101f461022d366004611957565b610634565b34801561023e57600080fd5b5061018561024d3660046117c9565b6107a0565b6101f4610260366004611987565b6107df565b34801561027157600080fd5b50610285610280366004611957565b610a33565b6040516001600160a01b03909116815260200161015c565b3480156102a957600080fd5b506101a66102b83660046119ca565b610a5d565b3480156102c957600080fd5b506101a66102d83660046119ca565b6001600160a01b031660009081526020819052604090205490565b3480156102ff57600080fd5b506101f461030e3660046119e5565b610b5b565b34801561031f57600080fd5b506101f461032e366004611957565b610ba6565b34801561033f57600080fd5b5061028561034e3660046119ca565b6007602052600090815260409020546001600160a01b031681565b34801561037557600080fd5b5061014f610ce7565b34801561038a57600080fd5b506101856103993660046117c9565b610cf6565b3480156103aa57600080fd5b506101856103b93660046117c9565b610d8d565b3480156103ca57600080fd5b5061041e6103d93660046119ca565b6006602052600090815260409020805460018201546002830154600390930154919290916001600160401b0380831692600160401b900416906001600160a01b031685565b6040805195865260208601949094526001600160401b03928316938501939093521660608301526001600160a01b0316608082015260a00161015c565b34801561046757600080fd5b506101a66104763660046119e5565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156104ad57600080fd5b506101856104bc366004611a73565b610d9b565b3480156104cd57600080fd5b506101856104dc366004611afa565b610e84565b6060600380546104f090611b53565b80601f016020809104026020016040519081016040528092919081815260200182805461051c90611b53565b80156105695780601f1061053e57610100808354040283529160200191610569565b820191906000526020600020905b81548152906001019060200180831161054c57829003601f168201915b5050505050905090565b600033610581818585610f43565b60019150505b92915050565b60003361059b858285611067565b6105a68585856110f9565b506001949350505050565b6001600160a01b038281166000908152600660205260409020600301541633146105ee5760405163d8d5894f60e01b815260040160405180910390fd5b60005b815181101561062f5761061d8383838151811061061057610610611b8e565b60200260200101516112d2565b8061062781611bba565b9150506105f1565b505050565b8061065257604051637bc90c0560e11b815260040160405180910390fd5b336000818152600760208181526040808420546001600160a01b03168085526006835290842060018101549585529290915290929061069090610a5d565b61069a9190611bd5565b9050808311156106bd576040516377dfdf2160e01b815260040160405180910390fd5b828260010160008282546106d19190611bec565b909155506106e190503384611365565b604051600090339085908381818185875af1925050503d8060008114610723576040519150601f19603f3d011682016040523d82523d6000602084013e610728565b606091505b505090508061074a576040516312171d8360e31b815260040160405180910390fd5b336000908152600760209081526040918290205491518681526001600160a01b03909216917f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4910160405180910390a250505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061058190829086906107da908790611bec565b610f43565b6001600160a01b03831615806108545750610854600580548060200260200160405190810160405280929190818152602001828054801561084957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161082b575b5050505050846114bf565b156108725760405163ac6b05f560e01b815260040160405180910390fd5b6001600160a01b0383811660009081526007602052604090205416156108ab57604051630fb356f360e21b815260040160405180910390fd5b42826001600160401b03161115806108d55750806001600160401b0316826001600160401b031610155b156108f357604051636385801560e11b815260040160405180910390fd5b3461091157604051637bc90c0560e11b815260040160405180910390fd5b61091b8334611525565b6040805160a08101825234808252600060208084018281526001600160401b038089168688019081528882166060880190815233608089019081526001600160a01b038d8116808952600688528b89209a518b55955160018b0155925160028a01805493518616600160401b026fffffffffffffffffffffffffffffffff19909416919095161791909117909255905160039096018054969091166001600160a01b031996871617905560079091529084902080549093168117909255915190917fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb91610a269190869086909283526001600160401b03918216602084015216604082015260600190565b60405180910390a2505050565b60058181548110610a4357600080fd5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b038082166000908152600660209081526040808320815160a081018352815480825260018301549482019490945260028201546001600160401b0380821694830194909452600160401b90049092166060830152600301549093166080840152909190610ad45750600092915050565b80604001516001600160401b0316421015610af25750600092915050565b600081604001518260600151610b089190611c04565b6001600160401b031682604001516001600160401b031642610b2a9190611bd5565b8351610b369190611c2c565b610b409190611c4b565b8251909150811115610b5457505192915050565b9392505050565b6001600160a01b03828116600090815260066020526040902060030154163314610b985760405163d8d5894f60e01b815260040160405180910390fd5b610ba282826112d2565b5050565b80610bc457604051637bc90c0560e11b815260040160405180910390fd5b336000908152600760209081526040808320546001600160a01b031683526006909152902060018101548154610bfa9190611bd5565b821115610c1a576040516377dfdf2160e01b815260040160405180910390fd5b610c243383611365565b60038101546040516000916001600160a01b03169084908381818185875af1925050503d8060008114610c73576040519150601f19603f3d011682016040523d82523d6000602084013e610c78565b606091505b5050905080610c9a576040516312171d8360e31b815260040160405180910390fd5b336000908152600760209081526040918290205491518581526001600160a01b03909216917f443630e54cc5dd8826c25d7467193a3b7a0a67b4ed73c14fb477e8e7eed3fd489101610a26565b6060600480546104f090611b53565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610d805760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6105a68286868403610f43565b6000336105818185856110f9565b600082518451148015610daf575081518351145b610e0f5760405162461bcd60e51b815260206004820152602b60248201527f534f41533a2062756c6b207472616e7366657246726f6d2061726773206d757360448201526a7420626520657175616c7360a81b6064820152608401610d77565b60005b84518110156105a657610e71858281518110610e3057610e30611b8e565b6020026020010151858381518110610e4a57610e4a611b8e565b6020026020010151858481518110610e6457610e64611b8e565b602002602001015161058d565b5080610e7c81611bba565b915050610e12565b60008151835114610ee75760405162461bcd60e51b815260206004820152602760248201527f534f41533a2062756c6b207472616e736665722061726773206d75737420626560448201526620657175616c7360c81b6064820152608401610d77565b3360005b84518110156105a657610f3182868381518110610f0a57610f0a611b8e565b6020026020010151868481518110610f2457610f24611b8e565b60200260200101516110f9565b80610f3b81611bba565b915050610eeb565b6001600160a01b038316610fa55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d77565b6001600160a01b0382166110065760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d77565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146110f357818110156110e65760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610d77565b6110f38484848403610f43565b50505050565b6001600160a01b03831661115d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d77565b6001600160a01b0382166111bf5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d77565b6111ca838383611610565b6001600160a01b038316600090815260208190526040902054818110156112425760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d77565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611279908490611bec565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112c591815260200190565b60405180910390a36110f3565b6001600160a01b03818116600090815260076020526040902054161561130b57604051630fb356f360e21b815260040160405180910390fd5b6001600160a01b0381811660008181526007602052604080822080546001600160a01b0319169487169485179055519192917fdc5d0ac53741544fef2e2ae9b2c8006a9e56f9708377f300d8e825f8d411617d9190a35050565b6001600160a01b0382166113c55760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610d77565b6113d182600083611610565b6001600160a01b038216600090815260208190526040902054818110156114455760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610d77565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611474908490611bd5565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6000805b835181101561151b57826001600160a01b03168482815181106114e8576114e8611b8e565b60200260200101516001600160a01b03161415611509576001915050610587565b8061151381611bba565b9150506114c3565b5060009392505050565b6001600160a01b03821661157b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610d77565b61158760008383611610565b80600260008282546115999190611bec565b90915550506001600160a01b038216600090815260208190526040812080548392906115c6908490611bec565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038316158061162d57506001600160a01b038216155b1561163757505050565b6116996005805480602002602001604051908101604052809291908181526020018280548015610849576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161082b575050505050846114bf565b80611703575061170360058054806020026020016040519081016040528092919081815260200182805480156116f857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116116da575b5050505050836114bf565b1561170d57505050565b6001600160a01b0380831660009081526007602052604080822054868416835291205482169116141561173f57505050565b6040516325cdf54f60e21b815260040160405180910390fd5b600060208083528351808285015260005b8181101561178557858101830151858201604001528201611769565b81811115611797576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b03811681146117c457600080fd5b919050565b600080604083850312156117dc57600080fd5b6117e5836117ad565b946020939093013593505050565b60008060006060848603121561180857600080fd5b611811846117ad565b925061181f602085016117ad565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561186d5761186d61182f565b604052919050565b60006001600160401b0382111561188e5761188e61182f565b5060051b60200190565b600082601f8301126118a957600080fd5b813560206118be6118b983611875565b611845565b82815260059290921b840181019181810190868411156118dd57600080fd5b8286015b848110156118ff576118f2816117ad565b83529183019183016118e1565b509695505050505050565b6000806040838503121561191d57600080fd5b611926836117ad565b915060208301356001600160401b0381111561194157600080fd5b61194d85828601611898565b9150509250929050565b60006020828403121561196957600080fd5b5035919050565b80356001600160401b03811681146117c457600080fd5b60008060006060848603121561199c57600080fd5b6119a5846117ad565b92506119b360208501611970565b91506119c160408501611970565b90509250925092565b6000602082840312156119dc57600080fd5b610b54826117ad565b600080604083850312156119f857600080fd5b611a01836117ad565b9150611a0f602084016117ad565b90509250929050565b600082601f830112611a2957600080fd5b81356020611a396118b983611875565b82815260059290921b84018101918181019086841115611a5857600080fd5b8286015b848110156118ff5780358352918301918301611a5c565b600080600060608486031215611a8857600080fd5b83356001600160401b0380821115611a9f57600080fd5b611aab87838801611898565b94506020860135915080821115611ac157600080fd5b611acd87838801611898565b93506040860135915080821115611ae357600080fd5b50611af086828701611a18565b9150509250925092565b60008060408385031215611b0d57600080fd5b82356001600160401b0380821115611b2457600080fd5b611b3086838701611898565b93506020850135915080821115611b4657600080fd5b5061194d85828601611a18565b600181811c90821680611b6757607f821691505b60208210811415611b8857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611bce57611bce611ba4565b5060010190565b600082821015611be757611be7611ba4565b500390565b60008219821115611bff57611bff611ba4565b500190565b60006001600160401b0383811690831681811015611c2457611c24611ba4565b039392505050565b6000816000190483118215151615611c4657611c46611ba4565b500290565b600082611c6857634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220028b793c926803692d49bd19d341046b43de3cc651a5bc2229afa9d2b0d94a8d64736f6c634300080c0033"), - }, - } - - deployments2 = []*deployment{ - { - contract: cBridgeBridge, - // commit: https://github.com/oasysgames/oasys-ecosystem-contract/blob/b9d43020001d9c8ae5d8a0e571726e378314ce9b/contracts/cBridge/liquidity-bridge/Bridge.sol - code: mustDecodeCode( - "0x6080604052600436106103545760003560e01c806382dc1ec4116101c6578063ba2cb25c116100f7578063e43581b811610095578063f20c922a1161006f578063f20c922a14610a6b578063f2fde38b14610a8b578063f832138314610aab578063f8b30d7d14610ad857600080fd5b8063e43581b814610a0b578063e999e5f414610a2b578063eecdac8814610a4b57600080fd5b8063d0790da9116100d1578063d0790da914610980578063e026049c14610996578063e09ab428146109ab578063e3eece26146109db57600080fd5b8063ba2cb25c14610913578063ccde517a14610933578063cdd1b25d1461096057600080fd5b80639ff9001a11610164578063a7bdf45a1161013e578063a7bdf45a14610836578063adc0d57f14610856578063b1c94d94146108d0578063b5f2bc47146108e657600080fd5b80639ff9001a146107d6578063a21a9280146107f6578063a5977fbb1461081657600080fd5b806389e39127116101a057806389e391271461074a5780638da5cb5b146107825780639b14d4c6146107a05780639e25fc5c146107b657600080fd5b806382dc1ec4146106f55780638456cb5914610715578063878fe1ce1461072a57600080fd5b806348234126116102a0578063618ee0551161023e5780636b2c0f55116102185780636b2c0f551461067d5780636ef8d66d1461069d5780637044c89e146106b257806380f51c12146106c557600080fd5b8063618ee0551461061a57806365a114f114610647578063682dbc221461065d57600080fd5b8063566887001161027a578063566887001461059f57806357d775f8146105bf5780635c975abb146105d557806360216b00146105ed57600080fd5b8063482341261461053257806352532faa1461055257806354eea7961461057f57600080fd5b80633c64f04b1161030d5780633f4ba83a116102e75780633f4ba83a146104a5578063457bfa2f146104ba57806346fbf68e146104f257806347b16c6c1461051257600080fd5b80633c64f04b146104325780633d572107146104725780633f2e5fc31461049257600080fd5b8063089927411461036057806317bdbae51461038257806325c38b9f146103a25780632fd1b0a4146103b7578063370fb47b146103ee5780633c4a25d01461041257600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061038061037b366004613f99565b610b05565b005b34801561038e57600080fd5b5061038061039d366004613f99565b610c57565b3480156103ae57600080fd5b50610380610d99565b3480156103c357600080fd5b506017546103d49063ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b3480156103fa57600080fd5b5061040460025481565b6040519081526020016103e5565b34801561041e57600080fd5b5061038061042d366004614020565b610e1a565b34801561043e57600080fd5b5061046261044d36600461403b565b60146020526000908152604090205460ff1681565b60405190151581526020016103e5565b34801561047e57600080fd5b5061038061048d36600461403b565b610e5f565b6103806104a036600461407f565b610ec0565b3480156104b157600080fd5b50610380611068565b3480156104c657600080fd5b506013546104da906001600160a01b031681565b6040516001600160a01b0390911681526020016103e5565b3480156104fe57600080fd5b5061046261050d366004614020565b6110be565b34801561051e57600080fd5b5061038061052d366004613f99565b6110dc565b34801561053e57600080fd5b5061038061054d3660046140dd565b61121e565b34801561055e57600080fd5b5061040461056d366004614020565b600e6020526000908152604090205481565b34801561058b57600080fd5b5061038061059a36600461403b565b61125f565b3480156105ab57600080fd5b506103806105ba3660046140f8565b6112b9565b3480156105cb57600080fd5b5061040460095481565b3480156105e157600080fd5b5060065460ff16610462565b3480156105f957600080fd5b50610404610608366004614020565b600a6020526000908152604090205481565b34801561062657600080fd5b50610404610635366004614020565b60166020526000908152604090205481565b34801561065357600080fd5b5061040460035481565b34801561066957600080fd5b50610380610678366004614138565b6113e6565b34801561068957600080fd5b50610380610698366004614020565b6114d2565b3480156106a957600080fd5b50610380611514565b6103806106c036600461403b565b61151d565b3480156106d157600080fd5b506104626106e0366004614020565b60076020526000908152604090205460ff1681565b34801561070157600080fd5b50610380610710366004614020565b611730565b34801561072157600080fd5b50610380611772565b34801561073657600080fd5b50610380610745366004613f99565b6117c6565b34801561075657600080fd5b5060105461076a906001600160401b031681565b6040516001600160401b0390911681526020016103e5565b34801561078e57600080fd5b506000546001600160a01b03166104da565b3480156107ac57600080fd5b5061040460045481565b3480156107c257600080fd5b506103806107d136600461403b565b611908565b3480156107e257600080fd5b506103806107f1366004614020565b611938565b34801561080257600080fd5b50610380610811366004614265565b611993565b34801561082257600080fd5b50610380610831366004614353565b611c7f565b34801561084257600080fd5b50610380610851366004613f99565b611d29565b34801561086257600080fd5b506108a561087136600461403b565b600d6020526000908152604090208054600182015460028301546003909301546001600160a01b0392831693919092169184565b604080516001600160a01b0395861681529490931660208501529183015260608201526080016103e5565b3480156108dc57600080fd5b50610404600f5481565b3480156108f257600080fd5b50610404610901366004614020565b600b6020526000908152604090205481565b34801561091f57600080fd5b5061038061092e3660046143c0565b611dc2565b34801561093f57600080fd5b5061040461094e366004614020565b60116020526000908152604090205481565b34801561096c57600080fd5b5061038061097b366004614265565b611f03565b34801561098c57600080fd5b5061040460015481565b3480156109a257600080fd5b506103806121c7565b3480156109b757600080fd5b506104626109c636600461403b565b60126020526000908152604090205460ff1681565b3480156109e757600080fd5b506104626109f6366004614020565b60086020526000908152604090205460ff1681565b348015610a1757600080fd5b50610462610a26366004614020565b6121d0565b348015610a3757600080fd5b50610380610a46366004613f99565b6121ee565b348015610a5757600080fd5b50610380610a66366004614020565b612330565b348015610a7757600080fd5b50610380610a8636600461403b565b612372565b348015610a9757600080fd5b50610380610aa6366004614020565b61240d565b348015610ab757600080fd5b50610404610ac6366004614020565b600c6020526000908152604090205481565b348015610ae457600080fd5b50610404610af3366004614020565b60156020526000908152604090205481565b610b0e336121d0565b610b335760405162461bcd60e51b8152600401610b2a906144bf565b60405180910390fd5b828114610b525760405162461bcd60e51b8152600401610b2a906144ef565b60005b83811015610c5057828282818110610b6f57610b6f614518565b9050602002013560156000878785818110610b8c57610b8c614518565b9050602002016020810190610ba19190614020565b6001600160a01b031681526020810191909152604001600020557f8b59d386e660418a48d742213ad5ce7c4dd51ae81f30e4e2c387f17d907010c9858583818110610bee57610bee614518565b9050602002016020810190610c039190614020565b848484818110610c1557610c15614518565b604080516001600160a01b0390951685526020918202939093013590840152500160405180910390a180610c4881614544565b915050610b55565b5050505050565b610c60336121d0565b610c7c5760405162461bcd60e51b8152600401610b2a906144bf565b828114610c9b5760405162461bcd60e51b8152600401610b2a906144ef565b60005b83811015610c5057828282818110610cb857610cb8614518565b90506020020135600e6000878785818110610cd557610cd5614518565b9050602002016020810190610cea9190614020565b6001600160a01b031681526020810191909152604001600020557fceaad6533bfb481492fb3e08ef19297f46611b8fa9de5ef4cf8dc23a56ad09ce858583818110610d3757610d37614518565b9050602002016020810190610d4c9190614020565b848484818110610d5e57610d5e614518565b604080516001600160a01b0390951685526020918202939093013590840152500160405180910390a180610d9181614544565b915050610c9e565b33610dac6000546001600160a01b031690565b6001600160a01b031614610dd25760405162461bcd60e51b8152600401610b2a9061455f565b600454610ddf9042614594565b60038190556040519081527f68e825132f7d4bc837dea2d64ac9fc19912bf0224b67f9317d8f1a917f5304a1906020015b60405180910390a1565b33610e2d6000546001600160a01b031690565b6001600160a01b031614610e535760405162461bcd60e51b8152600401610b2a9061455f565b610e5c816124b4565b50565b610e68336121d0565b610e845760405162461bcd60e51b8152600401610b2a906144bf565b600f8190556040518181527fc0a39f234199b125fb93713c4d067bdcebbf691087f87b79c0feb92b156ba8b6906020015b60405180910390a150565b60026005541415610ee35760405162461bcd60e51b8152600401610b2a906145ac565b6002600555610ef061255e565b833414610f315760405162461bcd60e51b815260206004820152600f60248201526e082dadeeadce840dad2e6dac2e8c6d608b1b6044820152606401610b2a565b6013546001600160a01b0316610f7f5760405162461bcd60e51b815260206004820152601360248201527213985d1a5d99481ddc985c081b9bdd081cd95d606a1b6044820152606401610b2a565b601354600090610f9d9087906001600160a01b0316878787876125a4565b9050601360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0866040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fef57600080fd5b505af1158015611003573d6000803e3d6000fd5b50506013546040517f89d8051e597ab4178a863a5190407b98abfeff406aa8db90c59af76612e58f019450611053935085925033918b916001600160a01b03909116908b908b908b908b906145e3565b60405180910390a15050600160055550505050565b611071336110be565b6110b45760405162461bcd60e51b815260206004820152601460248201527321b0b63632b91034b9903737ba103830bab9b2b960611b6044820152606401610b2a565b6110bc61279b565b565b6001600160a01b031660009081526007602052604090205460ff1690565b6110e5336121d0565b6111015760405162461bcd60e51b8152600401610b2a906144bf565b8281146111205760405162461bcd60e51b8152600401610b2a906144ef565b60005b83811015610c505782828281811061113d5761113d614518565b90506020020135600b600087878581811061115a5761115a614518565b905060200201602081019061116f9190614020565b6001600160a01b031681526020810191909152604001600020557f608e49c22994f20b5d3496dca088b88dfd81b4a3e8cc3809ea1e10a320107e898585838181106111bc576111bc614518565b90506020020160208101906111d19190614020565b8484848181106111e3576111e3614518565b604080516001600160a01b0390951685526020918202939093013590840152500160405180910390a18061121681614544565b915050611123565b611227336121d0565b6112435760405162461bcd60e51b8152600401610b2a906144bf565b6017805463ffffffff191663ffffffff92909216919091179055565b611268336121d0565b6112845760405162461bcd60e51b8152600401610b2a906144bf565b60098190556040518181527f2664fec2ff76486ac58ed087310855b648b15b9d19f3de8529e95f7c46b7d6b390602001610eb5565b600260055414156112dc5760405162461bcd60e51b8152600401610b2a906145ac565b60026005556112e961255e565b6001600160a01b03821660009081526011602052604090205481116113205760405162461bcd60e51b8152600401610b2a90614636565b601080546001919060009061133f9084906001600160401b0316614660565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550611383333083856001600160a01b03166127e8909392919063ffffffff16565b601054604080516001600160401b0390921682523360208301526001600160a01b0384168282015260608201839052517fd5d28426c3248963b1719df49aa4c665120372e02c8249bbea03d019c39ce7649181900360800190a150506001600555565b6000848484846040516020016113ff94939291906146f7565b60405160208183030381529060405280519060200120905080600154146114685760405162461bcd60e51b815260206004820152601860248201527f4d69736d617463682063757272656e74207369676e65727300000000000000006044820152606401610b2a565b87516020808a0191909120604080517f19457468657265756d205369676e6564204d6573736167653a0a33320000000081850152603c8082019390935281518082039093018352605c01905280519101206114c890888888888888612853565b5050505050505050565b336114e56000546001600160a01b031690565b6001600160a01b03161461150b5760405162461bcd60e51b8152600401610b2a9061455f565b610e5c81612b35565b6110bc33612b35565b600260055414156115405760405162461bcd60e51b8152600401610b2a906145ac565b600260055561154d61255e565b80341461158e5760405162461bcd60e51b815260206004820152600f60248201526e082dadeeadce840dad2e6dac2e8c6d608b1b6044820152606401610b2a565b6013546001600160a01b03166115dc5760405162461bcd60e51b815260206004820152601360248201527213985d1a5d99481ddc985c081b9bdd081cd95d606a1b6044820152606401610b2a565b6013546001600160a01b031660009081526011602052604090205481116116155760405162461bcd60e51b8152600401610b2a90614636565b60108054600191906000906116349084906001600160401b0316614660565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550601360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156116a857600080fd5b505af11580156116bc573d6000803e3d6000fd5b5050601054601354604080516001600160401b0390931683523360208401526001600160a01b0390911690820152606081018590527fd5d28426c3248963b1719df49aa4c665120372e02c8249bbea03d019c39ce764935060800191506117209050565b60405180910390a1506001600555565b336117436000546001600160a01b031690565b6001600160a01b0316146117695760405162461bcd60e51b8152600401610b2a9061455f565b610e5c81612bd3565b61177b336110be565b6117be5760405162461bcd60e51b815260206004820152601460248201527321b0b63632b91034b9903737ba103830bab9b2b960611b6044820152606401610b2a565b6110bc612c7d565b6117cf336121d0565b6117eb5760405162461bcd60e51b8152600401610b2a906144bf565b82811461180a5760405162461bcd60e51b8152600401610b2a906144ef565b60005b83811015610c505782828281811061182757611827614518565b905060200201356016600087878581811061184457611844614518565b90506020020160208101906118599190614020565b6001600160a01b031681526020810191909152604001600020557f4f12d1a5bfb3ccd3719255d4d299d808d50cdca9a0a5c2b3a5aaa7edde73052c8585838181106118a6576118a6614518565b90506020020160208101906118bb9190614020565b8484848181106118cd576118cd614518565b604080516001600160a01b0390951685526020918202939093013590840152500160405180910390a18061190081614544565b91505061180d565b61191061255e565b600061191b82612cba565b9050611934816000015182602001518360400151612e7f565b5050565b3361194b6000546001600160a01b031690565b6001600160a01b0316146119715760405162461bcd60e51b8152600401610b2a9061455f565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b61199b61255e565b600046306040516020016119da92919091825260601b6001600160601b03191660208201526a57697468647261774d736760a81b6034820152603f0190565b604051602081830303815290604052805190602001209050611a24818a8a604051602001611a0a93929190614718565b6040516020818303038152906040528888888888886113e6565b6000611a658a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612fb492505050565b9050600081600001518260200151836040015184606001518560800151604051602001611ad995949392919060c095861b6001600160c01b031990811682529490951b9093166008850152606091821b6001600160601b03199081166010860152911b166024830152603882015260580190565b60408051601f1981840301815291815281516020928301206000818152601290935291205490915060ff1615611b515760405162461bcd60e51b815260206004820152601a60248201527f776974686472617720616c7265616479207375636365656465640000000000006044820152606401610b2a565b6000818152601260205260409020805460ff1916600117905560608201516080830151611b7e9190613112565b60608201516001600160a01b03166000908152600e60205260409020548015801590611bad5750808360800151115b15611bcf57611bca8284604001518560600151866080015161321f565b611be6565b611be6836040015184606001518560800151612e7f565b7f48a1ab26f3aa7b62bb6b6e8eed182f292b84eb7b006c0254386b268af20774be8284602001518560400151866060015187608001518860a00151604051611c69969594939291909586526001600160401b039490941660208601526001600160a01b03928316604086015291166060840152608083015260a082015260c00190565b60405180910390a1505050505050505050505050565b60026005541415611ca25760405162461bcd60e51b8152600401610b2a906145ac565b6002600555611caf61255e565b6000611cbf8787878787876125a4565b9050611cd66001600160a01b0387163330886127e8565b7f89d8051e597ab4178a863a5190407b98abfeff406aa8db90c59af76612e58f018133898989898989604051611d139897969594939291906145e3565b60405180910390a1505060016005555050505050565b33611d3c6000546001600160a01b031690565b6001600160a01b031614611d625760405162461bcd60e51b8152600401610b2a9061455f565b6003544211611daa5760405162461bcd60e51b81526020600482015260146024820152736e6f742072656163682072657365742074696d6560601b6044820152606401610b2a565b600019600355611dbc84848484613332565b50505050565b6002548b11611e135760405162461bcd60e51b815260206004820152601e60248201527f547269676765722074696d65206973206e6f7420696e6372656173696e6700006044820152606401610b2a565b611e1f42610e10614594565b8b10611e6d5760405162461bcd60e51b815260206004820152601960248201527f547269676765722074696d6520697320746f6f206c61726765000000000000006044820152606401610b2a565b60004630604051602001611eae92919091825260601b6001600160601b03191660208201526c5570646174655369676e65727360981b603482015260410190565b604051602081830303815290604052805190602001209050611ee4818d8d8d8d8d604051602001611a0a96959493929190614732565b611ef08b8b8b8b613332565b5050506002989098555050505050505050565b611f0b61255e565b60004630604051602001611f4492919091825260601b6001600160601b03191660208201526452656c617960d81b603482015260390190565b604051602081830303815290604052805190602001209050611f74818a8a604051602001611a0a93929190614718565b6000611fb58a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134a092505050565b8051602080830151604080850151606080870151608088015160a089015160c0808b015187519a861b6001600160601b03199081168c8c015298861b891660348c01529590941b9096166048890152605c880191909152811b6001600160c01b0319908116607c88015293901b9092166084850152608c808501929092528051808503909201825260ac909301835280519082012060008181526014909252919020549192509060ff161561209e5760405162461bcd60e51b815260206004820152600f60248201526e7472616e736665722065786973747360881b6044820152606401610b2a565b60008181526014602052604090819020805460ff1916600117905582015160608301516120cb9190613112565b6040808301516001600160a01b03166000908152600e602052205480158015906120f85750808360600151115b1561211a576121158284602001518560400151866060015161321f565b612131565b612131836020015184604001518560600151612e7f565b7f79fa08de5149d912dce8e5e8da7a7c17ccdf23dd5d3bfe196802e6eb86347c7c82846000015185602001518660400151876060015188608001518960c00151604051611c6997969594939291909687526001600160a01b039586166020880152938516604087015291909316606085015260808401929092526001600160401b039190911660a083015260c082015260e00190565b6110bc33613616565b6001600160a01b031660009081526008602052604090205460ff1690565b6121f7336121d0565b6122135760405162461bcd60e51b8152600401610b2a906144bf565b8281146122325760405162461bcd60e51b8152600401610b2a906144ef565b60005b83811015610c505782828281811061224f5761224f614518565b905060200201356011600087878581811061226c5761226c614518565b90506020020160208101906122819190614020565b6001600160a01b031681526020810191909152604001600020557fc56b0d14c4940515800d94ebbd0f3f5d8cc58ba1109c12536bd993b72e466e4f8585838181106122ce576122ce614518565b90506020020160208101906122e39190614020565b8484848181106122f5576122f5614518565b604080516001600160a01b0390951685526020918202939093013590840152500160405180910390a18061232881614544565b915050612235565b336123436000546001600160a01b031690565b6001600160a01b0316146123695760405162461bcd60e51b8152600401610b2a9061455f565b610e5c81613616565b336123856000546001600160a01b031690565b6001600160a01b0316146123ab5760405162461bcd60e51b8152600401610b2a9061455f565b60045481116124085760405162461bcd60e51b815260206004820152602360248201527f6e6f7469636520706572696f642063616e206f6e6c7920626520696e637265616044820152621cd95960ea1b6064820152608401610b2a565b600455565b336124206000546001600160a01b031690565b6001600160a01b0316146124465760405162461bcd60e51b8152600401610b2a9061455f565b6001600160a01b0381166124ab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b2a565b610e5c816136bc565b6124bd816121d0565b1561250a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920676f7665726e6f7200000000006044820152606401610b2a565b6001600160a01b038116600081815260086020908152604091829020805460ff1916600117905590519182527fdc5a48d79e2e147530ff63ecdbed5a5a66adb9d5cf339384d5d076da197c40b59101610eb5565b60065460ff16156110bc5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610b2a565b6001600160a01b03851660009081526015602052604081205485116125db5760405162461bcd60e51b8152600401610b2a90614636565b6001600160a01b038616600090815260166020526040902054158061261857506001600160a01b0386166000908152601660205260409020548511155b6126575760405162461bcd60e51b815260206004820152601060248201526f616d6f756e7420746f6f206c6172676560801b6044820152606401610b2a565b60175463ffffffff908116908316116126ab5760405162461bcd60e51b81526020600482015260166024820152751b585e081cdb1a5c1c1859d9481d1bdbc81cdb585b1b60521b6044820152606401610b2a565b6040516001600160601b031933606090811b8216602084015289811b8216603484015288901b166048820152605c81018690526001600160c01b031960c086811b8216607c84015285811b8216608484015246901b16608c82015260009060940160408051601f1981840301815291815281516020928301206000818152601490935291205490915060ff16156127765760405162461bcd60e51b815260206004820152600f60248201526e7472616e736665722065786973747360881b6044820152606401610b2a565b6000818152601460205260409020805460ff1916600117905590509695505050505050565b6127a361370c565b6006805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b039091168152602001610e10565b6040516001600160a01b0380851660248301528316604482015260648101829052611dbc9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613755565b8281146128725760405162461bcd60e51b8152600401610b2a9061475a565b6000805b848110156128b65783838281811061289057612890614518565b90506020020135826128a29190614594565b9150806128ae81614544565b915050612876565b50600060036128c683600261479d565b6128d091906147bc565b6128db906001614594565b905060008080805b8a811015612aee5760006129668d8d8481811061290257612902614518565b905060200281019061291491906147de565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508f61382790919063ffffffff16565b9050836001600160a01b0316816001600160a01b0316116129c95760405162461bcd60e51b815260206004820152601e60248201527f7369676e657273206e6f7420696e20617363656e64696e67206f7264657200006044820152606401610b2a565b8093505b8a8a848181106129df576129df614518565b90506020020160208101906129f49190614020565b6001600160a01b0316816001600160a01b03161115612a6157612a18600184614594565b9250898310612a5c5760405162461bcd60e51b815260206004820152601060248201526f1cda59db995c881b9bdd08199bdd5b9960821b6044820152606401610b2a565b6129cd565b8a8a84818110612a7357612a73614518565b9050602002016020810190612a889190614020565b6001600160a01b0316816001600160a01b03161415612ac857888884818110612ab357612ab3614518565b9050602002013585612ac59190614594565b94505b858510612adb5750505050505050612b2c565b5080612ae681614544565b9150506128e3565b5060405162461bcd60e51b81526020600482015260126024820152711c5d5bdc9d5b481b9bdd081c995858da195960721b6044820152606401610b2a565b50505050505050565b612b3e816110be565b612b825760405162461bcd60e51b815260206004820152601560248201527420b1b1b7bab73a1034b9903737ba103830bab9b2b960591b6044820152606401610b2a565b6001600160a01b038116600081815260076020908152604091829020805460ff1916905590519182527fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e9101610eb5565b612bdc816110be565b15612c295760405162461bcd60e51b815260206004820152601960248201527f4163636f756e7420697320616c726561647920706175736572000000000000006044820152606401610b2a565b6001600160a01b038116600081815260076020908152604091829020805460ff1916600117905590519182527f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f89101610eb5565b612c8561255e565b6006805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586127d03390565b6040805160808101825260008082526020820181905291810182905260608101919091526000828152600d6020908152604091829020825160808101845281546001600160a01b0390811682526001830154169281019290925260028101549282019290925260039091015460608201819052612d795760405162461bcd60e51b815260206004820152601a60248201527f64656c61796564207472616e73666572206e6f742065786973740000000000006044820152606401610b2a565b600f548160600151612d8b9190614594565b4211612dd95760405162461bcd60e51b815260206004820152601d60248201527f64656c61796564207472616e73666572207374696c6c206c6f636b65640000006044820152606401610b2a565b6000838152600d6020908152604080832080546001600160a01b03199081168255600182018054909116905560028101849055600301929092558251908301518383015192517f3b40e5089937425d14cdd96947e5661868357e224af59bd8b24a4b8a330d442693612e7193889390929091909384526001600160a01b03928316602085015291166040830152606082015260800190565b60405180910390a192915050565b6013546001600160a01b0383811691161415612f9b57601354604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b158015612edb57600080fd5b505af1158015612eef573d6000803e3d6000fd5b505050506000836001600160a01b03168261c35090604051600060405180830381858888f193505050503d8060008114612f45576040519150601f19603f3d011682016040523d82523d6000602084013e612f4a565b606091505b5050905080611dbc5760405162461bcd60e51b815260206004820152601b60248201527f6661696c656420746f2073656e64206e617469766520746f6b656e00000000006044820152606401610b2a565b612faf6001600160a01b038316848361384b565b505050565b6040805160c08101825260008082526020808301829052828401829052606083018290526080830182905260a0830182905283518085019094528184528301849052909190805b6020830151518351101561310a576130128361387b565b9092509050816001141561303957613029836138b5565b6001600160401b03168452612ffb565b816002141561305e5761304b836138b5565b6001600160401b03166020850152612ffb565b816003141561308b5761307861307384613937565b6139f3565b6001600160a01b03166040850152612ffb565b81600414156130b3576130a061307384613937565b6001600160a01b03166060850152612ffb565b81600514156130d7576130cd6130c884613937565b613a04565b6080850152612ffb565b81600614156130fb576130f16130ec84613937565b613a3b565b60a0850152612ffb565b6131058382613a53565b612ffb565b505050919050565b60095461311d575050565b6001600160a01b0382166000908152600b60205260409020548061314057505050565b6001600160a01b0383166000908152600a60205260408120546009549091429161316a81846147bc565b613174919061479d565b6001600160a01b0387166000908152600c602052604090205490915081111561319f578492506131ac565b6131a98584614594565b92505b838311156131f15760405162461bcd60e51b81526020600482015260126024820152710766f6c756d652065786365656473206361760741b6044820152606401610b2a565b506001600160a01b039094166000908152600a6020908152604080832093909355600c905220929092555050565b6000848152600d60205260409020600301541561327e5760405162461bcd60e51b815260206004820152601f60248201527f64656c61796564207472616e7366657220616c726561647920657869737473006044820152606401610b2a565b604080516080810182526001600160a01b0380861682528481166020808401918252838501868152426060860190815260008b8152600d90935291869020945185549085166001600160a01b031991821617865592516001860180549190951693169290921790925551600283015551600390910155517fcbcfffe5102114216a85d3aceb14ad4b81a3935b1b5c468fadf3889eb9c5dce6906133249086815260200190565b60405180910390a150505050565b8281146133515760405162461bcd60e51b8152600401610b2a9061475a565b6000805b8481101561342a57816001600160a01b031686868381811061337957613379614518565b905060200201602081019061338e9190614020565b6001600160a01b0316116133ef5760405162461bcd60e51b815260206004820152602260248201527f4e6577207369676e657273206e6f7420696e20617363656e64696e67206f726460448201526132b960f11b6064820152608401610b2a565b85858281811061340157613401614518565b90506020020160208101906134169190614020565b91508061342281614544565b915050613355565b508484848460405160200161344294939291906146f7565b60408051601f198184030181529082905280516020909101206001557ff126123539a68393c55697f617e7d1148e371988daed246c2f41da99965a23f890613491908790879087908790614824565b60405180910390a15050505050565b6040805160e08101825260008082526020808301829052828401829052606083018290526080830182905260a0830182905260c0830182905283518085019094528184528301849052909190805b6020830151518351101561310a576135058361387b565b9092509050816001141561352f5761351f61307384613937565b6001600160a01b031684526134ee565b81600214156135575761354461307384613937565b6001600160a01b031660208501526134ee565b816003141561357f5761356c61307384613937565b6001600160a01b031660408501526134ee565b816004141561359e576135946130c884613937565b60608501526134ee565b81600514156135c3576135b0836138b5565b6001600160401b031660808501526134ee565b81600614156135e8576135d5836138b5565b6001600160401b031660a08501526134ee565b8160071415613607576135fd6130ec84613937565b60c08501526134ee565b6136118382613a53565b6134ee565b61361f816121d0565b61366b5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f7420676f7665726e6f720000000000000000006044820152606401610b2a565b6001600160a01b038116600081815260086020908152604091829020805460ff1916905590519182527f1ebe834e73d60a5fec822c1e1727d34bc79f2ad977ed504581cc1822fe20fb5b9101610eb5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60065460ff166110bc5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610b2a565b60006137aa826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613ac59092919063ffffffff16565b805190915015612faf57808060200190518101906137c891906148a6565b612faf5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b2a565b60008060006138368585613ade565b9150915061384381613b24565b509392505050565b6040516001600160a01b038316602482015260448101829052612faf90849063a9059cbb60e01b9060640161281c565b6000806000613889846138b5565b90506138966008826147bc565b92508060071660058111156138ad576138ad6148c8565b915050915091565b602080820151825181019091015160009182805b600a8110156139315783811a91506138e281600761479d565b82607f16901b85179450816080166000141561391f57613903816001614594565b86518790613912908390614594565b9052509395945050505050565b8061392981614544565b9150506138c9565b50600080fd5b60606000613944836138b5565b905060008184600001516139589190614594565b905083602001515181111561396c57600080fd5b816001600160401b0381111561398457613984614122565b6040519080825280601f01601f1916602001820160405280156139ae576020820181803683370190505b50602080860151865192955091818601919083010160005b858110156139e85781810151838201526139e1602082614594565b90506139c6565b505050935250919050565b60006139fe82613cdf565b92915050565b6000602082511115613a1557600080fd5b6020820151905081516020613a2a91906148de565b613a3590600861479d565b1c919050565b60008151602014613a4b57600080fd5b506020015190565b6000816005811115613a6757613a676148c8565b1415613a7657612faf826138b5565b6002816005811115613a8a57613a8a6148c8565b141561035b576000613a9b836138b5565b90508083600001818151613aaf9190614594565b90525060208301515183511115612faf57600080fd5b6060613ad48484600085613cfe565b90505b9392505050565b600080825160411415613b155760208301516040840151606085015160001a613b0987828585613e2f565b94509450505050613b1d565b506000905060025b9250929050565b6000816004811115613b3857613b386148c8565b1415613b415750565b6001816004811115613b5557613b556148c8565b1415613ba35760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610b2a565b6002816004811115613bb757613bb76148c8565b1415613c055760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b2a565b6003816004811115613c1957613c196148c8565b1415613c725760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b2a565b6004816004811115613c8657613c866148c8565b1415610e5c5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610b2a565b60008151601414613cef57600080fd5b5060200151600160601b900490565b606082471015613d5f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610b2a565b6001600160a01b0385163b613db65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b2a565b600080866001600160a01b03168587604051613dd29190614921565b60006040518083038185875af1925050503d8060008114613e0f576040519150601f19603f3d011682016040523d82523d6000602084013e613e14565b606091505b5091509150613e24828286613f1c565b979650505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613e665750600090506003613f13565b8460ff16601b14158015613e7e57508460ff16601c14155b15613e8f5750600090506004613f13565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613ee3573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613f0c57600060019250925050613f13565b9150600090505b94509492505050565b60608315613f2b575081613ad7565b825115613f3b5782518084602001fd5b8160405162461bcd60e51b8152600401610b2a919061493d565b60008083601f840112613f6757600080fd5b5081356001600160401b03811115613f7e57600080fd5b6020830191508360208260051b8501011115613b1d57600080fd5b60008060008060408587031215613faf57600080fd5b84356001600160401b0380821115613fc657600080fd5b613fd288838901613f55565b90965094506020870135915080821115613feb57600080fd5b50613ff887828801613f55565b95989497509550505050565b80356001600160a01b038116811461401b57600080fd5b919050565b60006020828403121561403257600080fd5b613ad782614004565b60006020828403121561404d57600080fd5b5035919050565b80356001600160401b038116811461401b57600080fd5b803563ffffffff8116811461401b57600080fd5b600080600080600060a0868803121561409757600080fd5b6140a086614004565b9450602086013593506140b560408701614054565b92506140c360608701614054565b91506140d16080870161406b565b90509295509295909350565b6000602082840312156140ef57600080fd5b613ad78261406b565b6000806040838503121561410b57600080fd5b61411483614004565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060006080888a03121561415357600080fd5b87356001600160401b038082111561416a57600080fd5b818a0191508a601f83011261417e57600080fd5b81358181111561419057614190614122565b604051601f8201601f19908116603f011681019083821181831017156141b8576141b8614122565b816040528281528d60208487010111156141d157600080fd5b82602086016020830137600094508460208483010152809b5050505060208a0135818111156141fe578283fd5b61420a8c828d01613f55565b90995097505060408a013581811115614221578283fd5b61422d8c828d01613f55565b90975095505060608a013581811115614244578283fd5b6142508c828d01613f55565b9a9d999c50979a509598949794955050505050565b6000806000806000806000806080898b03121561428157600080fd5b88356001600160401b038082111561429857600080fd5b818b0191508b601f8301126142ac57600080fd5b8135818111156142bb57600080fd5b8c60208285010111156142cd57600080fd5b60209283019a509850908a013590808211156142e857600080fd5b6142f48c838d01613f55565b909850965060408b013591508082111561430d57600080fd5b6143198c838d01613f55565b909650945060608b013591508082111561433257600080fd5b5061433f8b828c01613f55565b999c989b5096995094979396929594505050565b60008060008060008060c0878903121561436c57600080fd5b61437587614004565b955061438360208801614004565b94506040870135935061439860608801614054565b92506143a660808801614054565b91506143b460a0880161406b565b90509295509295509295565b600080600080600080600080600080600060c08c8e0312156143e157600080fd5b8b359a506001600160401b038060208e013511156143fe57600080fd5b61440e8e60208f01358f01613f55565b909b50995060408d013581101561442457600080fd5b6144348e60408f01358f01613f55565b909950975060608d013581101561444a57600080fd5b61445a8e60608f01358f01613f55565b909750955060808d013581101561447057600080fd5b6144808e60808f01358f01613f55565b909550935060a08d013581101561449657600080fd5b506144a78d60a08e01358e01613f55565b81935080925050509295989b509295989b9093969950565b60208082526016908201527521b0b63632b91034b9903737ba1033b7bb32b93737b960511b604082015260600190565b6020808252600f908201526e0d8cadccee8d040dad2e6dac2e8c6d608b1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156145585761455861452e565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156145a7576145a761452e565b500190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b9788526001600160a01b039687166020890152948616604088015292909416606086015260808501526001600160401b0392831660a085015290911660c083015263ffffffff1660e08201526101000190565b60208082526010908201526f185b5bdd5b9d081d1bdbc81cdb585b1b60821b604082015260600190565b60006001600160401b038083168185168083038211156146825761468261452e565b01949350505050565b60008160005b848110156146c0576001600160a01b036146aa83614004565b1686526020958601959190910190600101614691565b5093949350505050565b60006001600160fb1b038311156146e057600080fd5b8260051b8083863760009401938452509192915050565b600061470e61470783878961468b565b84866146ca565b9695505050505050565b838152818360208301376000910160200190815292915050565b868152856020820152600061474e61470760408401878961468b565b98975050505050505050565b60208082526023908201527f7369676e65727320616e6420706f77657273206c656e677468206e6f74206d616040820152620e8c6d60eb1b606082015260800190565b60008160001904831182151516156147b7576147b761452e565b500290565b6000826147d957634e487b7160e01b600052601260045260246000fd5b500490565b6000808335601e198436030181126147f557600080fd5b8301803591506001600160401b0382111561480f57600080fd5b602001915036819003821315613b1d57600080fd5b6040808252810184905260008560608301825b87811015614865576001600160a01b0361485084614004565b16825260209283019290910190600101614837565b5083810360208501528481526001600160fb1b0385111561488557600080fd5b8460051b915081866020830137600091016020019081529695505050505050565b6000602082840312156148b857600080fd5b81518015158114613ad757600080fd5b634e487b7160e01b600052602160045260246000fd5b6000828210156148f0576148f061452e565b500390565b60005b838110156149105781810151838201526020016148f8565b83811115611dbc5750506000910152565b600082516149338184602087016148f5565b9190910192915050565b602081526000825180602084015261495c8160408501602087016148f5565b601f01601f1916919091016040019291505056fea264697066735822122039b1bf809550003760acf5cb486792849d86e742d763f636b43a1a0f3589197b64736f6c63430008090033", - ), - storage: storage{ - // Pool > Signers > Ownable : address private _owner - "0x00": genesismap{ - params.OasysMainnetGenesisHash: "0x1b9dFC56e38b0F92448659C114e2347Bd803911c", - defaultGenesisHash: "0x58b529F9084D7eAA598EB3477Fe36064C5B7bbC1", - }, - // Pool > ReentrancyGuard : uint256 private _status - "0x05": "0x1", - // Pool > Pauser : mapping(address => bool) public pausers - "0x07": genesismap{ - params.OasysMainnetGenesisHash: mapping{ - keyFn: addressKeyFn, - values: map[string]interface{}{ - "0x1b9dFC56e38b0F92448659C114e2347Bd803911c": "0x1", - "0xDfE4F07D1F36B8d559b25082460a4f6A72531de2": "0x1", - "0x34dFa1226F8b3E36FE597B34eEa809a2B5c0bBf9": "0x1", - "0x9F6B03Cb6d8AB8239cF1045Ab28B9Df43dfCC823": "0x1", - "0x2FB8783C14A71C08bFC1dE8Fc3D715Dd93039BF2": "0x1", - "0x1a0aEc0fC48F1B5cc538BE74A90E340b278189e4": "0x1", - }, - }, - defaultGenesisHash: mapping{ - keyFn: addressKeyFn, - values: map[string]interface{}{ - "0x58b529F9084D7eAA598EB3477Fe36064C5B7bbC1": "0x1", - }, - }, - }, - // Pool > VolumeControl > Governor : mapping(address => bool) public governors - "0x08": genesismap{ - params.OasysMainnetGenesisHash: mapping{ - keyFn: addressKeyFn, - values: map[string]interface{}{ - "0x1b9dFC56e38b0F92448659C114e2347Bd803911c": "0x1", - "0x34dFa1226F8b3E36FE597B34eEa809a2B5c0bBf9": "0x1", - "0x9F6B03Cb6d8AB8239cF1045Ab28B9Df43dfCC823": "0x1", - "0x8e9174ed59eA4b81E70d0aE0DE13242e2329106c": "0x1", - }, - }, - defaultGenesisHash: mapping{ - keyFn: addressKeyFn, - values: map[string]interface{}{ - "0x58b529F9084D7eAA598EB3477Fe36064C5B7bbC1": "0x1", - }, - }, - }, - }, - }, - { - contract: cBridgeOriginalTokenVaultV2, - // commit: https://github.com/oasysgames/oasys-ecosystem-contract/blob/b9d43020001d9c8ae5d8a0e571726e378314ce9b/contracts/cBridge/pegged-bridge/OriginalTokenVaultV2.sol - code: mustDecodeCode( - "0x6080604052600436106102285760003560e01c80636b2c0f5511610123578063adc0d57f116100ab578063e3eece261161006f578063e3eece26146106f7578063e43581b814610727578063eecdac8814610747578063f2fde38b14610767578063f83213831461078757600080fd5b8063adc0d57f1461060a578063b1c94d9414610684578063b5f2bc471461069a578063ccf2683b146106c7578063e026049c146106e257600080fd5b80638456cb59116100f25780638456cb59146105775780638da5cb5b1461058c5780639e25fc5c146105aa5780639ff9001a146105ca578063a21a9280146105ea57600080fd5b80636b2c0f55146104f25780636ef8d66d1461051257806380f51c121461052757806382dc1ec41461055757600080fd5b8063402d267d116101b157806354eea7961161017557806354eea7961461045057806357d775f8146104705780635c975abb146104865780635ec2fa26146104a557806360216b00146104c557600080fd5b8063402d267d1461037e578063457bfa2f146103ab57806346fbf68e146103e357806347b16c6c1461040357806352532faa1461042357600080fd5b8063303b6442116101f8578063303b6442146102dc5780633c29f839146102fc5780633c4a25d0146103295780633d572107146103495780633f4ba83a1461036957600080fd5b8062a95fd71461023457806301e647251461025a57806317bdbae51461029a57806323463624146102bc57600080fd5b3661022f57005b600080fd5b61024761024236600461289e565b6107b4565b6040519081526020015b60405180910390f35b34801561026657600080fd5b5061028a6102753660046128eb565b600b6020526000908152604090205460ff1681565b6040519015158152602001610251565b3480156102a657600080fd5b506102ba6102b5366004612950565b61098e565b005b3480156102c857600080fd5b506102476102d73660046129bc565b610ad7565b3480156102e857600080fd5b506102ba6102f7366004612950565b610bb1565b34801561030857600080fd5b50610247610317366004612a1a565b600c6020526000908152604090205481565b34801561033557600080fd5b506102ba610344366004612a1a565b610cf3565b34801561035557600080fd5b506102ba6103643660046128eb565b610d38565b34801561037557600080fd5b506102ba610d99565b34801561038a57600080fd5b50610247610399366004612a1a565b600d6020526000908152604090205481565b3480156103b757600080fd5b50600e546103cb906001600160a01b031681565b6040516001600160a01b039091168152602001610251565b3480156103ef57600080fd5b5061028a6103fe366004612a1a565b610def565b34801561040f57600080fd5b506102ba61041e366004612950565b610e0d565b34801561042f57600080fd5b5061024761043e366004612a1a565b60096020526000908152604090205481565b34801561045c57600080fd5b506102ba61046b3660046128eb565b610f4f565b34801561047c57600080fd5b5061024760045481565b34801561049257600080fd5b50600154600160a01b900460ff1661028a565b3480156104b157600080fd5b506102ba6104c0366004612950565b610fa9565b3480156104d157600080fd5b506102476104e0366004612a1a565b60056020526000908152604090205481565b3480156104fe57600080fd5b506102ba61050d366004612a1a565b6110eb565b34801561051e57600080fd5b506102ba61112d565b34801561053357600080fd5b5061028a610542366004612a1a565b60026020526000908152604090205460ff1681565b34801561056357600080fd5b506102ba610572366004612a1a565b611136565b34801561058357600080fd5b506102ba611178565b34801561059857600080fd5b506001546001600160a01b03166103cb565b3480156105b657600080fd5b506102ba6105c53660046128eb565b6111cc565b3480156105d657600080fd5b506102ba6105e5366004612a1a565b6111fc565b3480156105f657600080fd5b50610247610605366004612a35565b611257565b34801561061657600080fd5b506106596106253660046128eb565b60086020526000908152604090208054600182015460028301546003909301546001600160a01b0392831693919092169184565b604080516001600160a01b039586168152949093166020850152918301526060820152608001610251565b34801561069057600080fd5b50610247600a5481565b3480156106a657600080fd5b506102476106b5366004612a1a565b60066020526000908152604090205481565b3480156106d357600080fd5b506103cb6015602960991b0181565b3480156106ee57600080fd5b506102ba611592565b34801561070357600080fd5b5061028a610712366004612a1a565b60036020526000908152604090205460ff1681565b34801561073357600080fd5b5061028a610742366004612a1a565b61159b565b34801561075357600080fd5b506102ba610762366004612a1a565b6115b9565b34801561077357600080fd5b506102ba610782366004612a1a565b6115fb565b34801561079357600080fd5b506102476107a2366004612a1a565b60076020526000908152604090205481565b60006002600054141561080e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260005561081b6116a2565b84341461085c5760405162461bcd60e51b815260206004820152600f60248201526e082dadeeadce840dad2e6dac2e8c6d608b1b6044820152606401610805565b600e546001600160a01b03166108aa5760405162461bcd60e51b815260206004820152601360248201527213985d1a5d99481ddc985c081b9bdd081cd95d606a1b6044820152606401610805565b600e546000906108c6906001600160a01b0316878787876116ef565b9050600e60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0876040518263ffffffff1660e01b81526004016000604051808303818588803b15801561091857600080fd5b505af115801561092c573d6000803e3d6000fd5b5050600e546040517f28d226819e371600e26624ebc4a9a3947117ee2760209f816c789d3a99bf481b9450610978935085925033916001600160a01b0316908b908b908b908b90612b24565b60405180910390a1600160005595945050505050565b6109973361159b565b6109b35760405162461bcd60e51b815260040161080590612b6b565b8281146109d25760405162461bcd60e51b815260040161080590612b9b565b60005b83811015610ad0578282828181106109ef576109ef612bc4565b9050602002013560096000878785818110610a0c57610a0c612bc4565b9050602002016020810190610a219190612a1a565b6001600160a01b031681526020810191909152604001600020557fceaad6533bfb481492fb3e08ef19297f46611b8fa9de5ef4cf8dc23a56ad09ce858583818110610a6e57610a6e612bc4565b9050602002016020810190610a839190612a1a565b848484818110610a9557610a95612bc4565b604080516001600160a01b0390951685526020918202939093013590840152500160405180910390a180610ac881612bf0565b9150506109d5565b5050505050565b600060026000541415610b2c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610805565b6002600055610b396116a2565b6000610b4887878787876116ef565b9050610b5f6001600160a01b0388163330896118bc565b7f28d226819e371600e26624ebc4a9a3947117ee2760209f816c789d3a99bf481b81338989898989604051610b9a9796959493929190612b24565b60405180910390a160016000559695505050505050565b610bba3361159b565b610bd65760405162461bcd60e51b815260040161080590612b6b565b828114610bf55760405162461bcd60e51b815260040161080590612b9b565b60005b83811015610ad057828282818110610c1257610c12612bc4565b90506020020135600d6000878785818110610c2f57610c2f612bc4565b9050602002016020810190610c449190612a1a565b6001600160a01b031681526020810191909152604001600020557f0e5d348f9737ccc8b4cf0eea0ccf3670af071af8bea5d64664f10e700c08de72858583818110610c9157610c91612bc4565b9050602002016020810190610ca69190612a1a565b848484818110610cb857610cb8612bc4565b604080516001600160a01b0390951685526020918202939093013590840152500160405180910390a180610ceb81612bf0565b915050610bf8565b33610d066001546001600160a01b031690565b6001600160a01b031614610d2c5760405162461bcd60e51b815260040161080590612c0b565b610d358161192d565b50565b610d413361159b565b610d5d5760405162461bcd60e51b815260040161080590612b6b565b600a8190556040518181527fc0a39f234199b125fb93713c4d067bdcebbf691087f87b79c0feb92b156ba8b6906020015b60405180910390a150565b610da233610def565b610de55760405162461bcd60e51b815260206004820152601460248201527321b0b63632b91034b9903737ba103830bab9b2b960611b6044820152606401610805565b610ded6119d7565b565b6001600160a01b031660009081526002602052604090205460ff1690565b610e163361159b565b610e325760405162461bcd60e51b815260040161080590612b6b565b828114610e515760405162461bcd60e51b815260040161080590612b9b565b60005b83811015610ad057828282818110610e6e57610e6e612bc4565b9050602002013560066000878785818110610e8b57610e8b612bc4565b9050602002016020810190610ea09190612a1a565b6001600160a01b031681526020810191909152604001600020557f608e49c22994f20b5d3496dca088b88dfd81b4a3e8cc3809ea1e10a320107e89858583818110610eed57610eed612bc4565b9050602002016020810190610f029190612a1a565b848484818110610f1457610f14612bc4565b604080516001600160a01b0390951685526020918202939093013590840152500160405180910390a180610f4781612bf0565b915050610e54565b610f583361159b565b610f745760405162461bcd60e51b815260040161080590612b6b565b60048190556040518181527f2664fec2ff76486ac58ed087310855b648b15b9d19f3de8529e95f7c46b7d6b390602001610d8e565b610fb23361159b565b610fce5760405162461bcd60e51b815260040161080590612b6b565b828114610fed5760405162461bcd60e51b815260040161080590612b9b565b60005b83811015610ad05782828281811061100a5761100a612bc4565b90506020020135600c600087878581811061102757611027612bc4565b905060200201602081019061103c9190612a1a565b6001600160a01b031681526020810191909152604001600020557f0f48d517989455cd80ed52427e80553e66f9b69fd5cee8e26bd1a1f9c364fba685858381811061108957611089612bc4565b905060200201602081019061109e9190612a1a565b8484848181106110b0576110b0612bc4565b604080516001600160a01b0390951685526020918202939093013590840152500160405180910390a1806110e381612bf0565b915050610ff0565b336110fe6001546001600160a01b031690565b6001600160a01b0316146111245760405162461bcd60e51b815260040161080590612c0b565b610d3581611a2c565b610ded33611a2c565b336111496001546001600160a01b031690565b6001600160a01b03161461116f5760405162461bcd60e51b815260040161080590612c0b565b610d3581611aca565b61118133610def565b6111c45760405162461bcd60e51b815260206004820152601460248201527321b0b63632b91034b9903737ba103830bab9b2b960611b6044820152606401610805565b610ded611b74565b6111d46116a2565b60006111df82611bb7565b90506111f8816000015182602001518360400151611d7c565b5050565b3361120f6001546001600160a01b031690565b6001600160a01b0316146112355760405162461bcd60e51b815260040161080590612c0b565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b60006112616116a2565b6000463060405160200161129d92919091825260601b6001600160601b031916602082015267576974686472617760c01b6034820152603c0190565b6040516020818303038152906040528051906020012090506015602960991b016001600160a01b031663682dbc22828c8c6040516020016112e093929190612c40565b6040516020818303038152906040528a8a8a8a8a8a6040518863ffffffff1660e01b81526004016113179796959493929190612d58565b60006040518083038186803b15801561132f57600080fd5b505afa158015611343573d6000803e3d6000fd5b5050505060006113888b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eb192505050565b6020818101518251604080850151606080870151608088015160a089015185516001600160601b031998851b8916818b015296841b88166034880152604887019490945290821b861660688601526001600160c01b031960c09190911b16607c850152608484019190915230901b90921660a48201528151808203609801815260b890910182528051908301206000818152600b9093529120549192509060ff16156114665760405162461bcd60e51b815260206004820152600d60248201526c7265636f72642065786973747360981b6044820152606401610805565b6000818152600b602052604090819020805460ff191660011790558251908301516114919190612013565b81516001600160a01b031660009081526009602052604090205480158015906114bd5750808360400151115b156114df576114da82846020015185600001518660400151612120565b6114f6565b6114f6836020015184600001518560400151611d7c565b602080840151845160408087015160808089015160a0808b01516060808d015187518d81526001600160a01b039a8b169b81019b909b52978916968a01969096529488019390935267ffffffffffffffff16908601528401521660c08201527f296a629c5265cb4e5319803d016902eb70a9079b89655fe2b7737821ed88beeb9060e00160405180910390a1509b9a5050505050505050505050565b610ded33612233565b6001600160a01b031660009081526003602052604090205460ff1690565b336115cc6001546001600160a01b031690565b6001600160a01b0316146115f25760405162461bcd60e51b815260040161080590612c0b565b610d3581612233565b3361160e6001546001600160a01b031690565b6001600160a01b0316146116345760405162461bcd60e51b815260040161080590612c0b565b6001600160a01b0381166116995760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610805565b610d35816122d9565b600154600160a01b900460ff1615610ded5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610805565b6001600160a01b0385166000908152600c602052604081205485116117495760405162461bcd60e51b815260206004820152601060248201526f185b5bdd5b9d081d1bdbc81cdb585b1b60821b6044820152606401610805565b6001600160a01b0386166000908152600d6020526040902054158061178657506001600160a01b0386166000908152600d60205260409020548511155b6117c55760405162461bcd60e51b815260206004820152601060248201526f616d6f756e7420746f6f206c6172676560801b6044820152606401610805565b6040516001600160601b031933606090811b8216602084015288811b82166034840152604883018890526001600160c01b031960c088811b8216606886015287831b8416607086015286811b8216608486015246901b16608c84015230901b16609482015260009060a80160408051601f1981840301815291815281516020928301206000818152600b90935291205490915060ff16156118985760405162461bcd60e51b815260206004820152600d60248201526c7265636f72642065786973747360981b6044820152606401610805565b6000818152600b60205260409020805460ff19166001179055905095945050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526119279085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261232b565b50505050565b6119368161159b565b156119835760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920676f7665726e6f7200000000006044820152606401610805565b6001600160a01b038116600081815260036020908152604091829020805460ff1916600117905590519182527fdc5a48d79e2e147530ff63ecdbed5a5a66adb9d5cf339384d5d076da197c40b59101610d8e565b6119df6123fd565b6001805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b611a3581610def565b611a795760405162461bcd60e51b815260206004820152601560248201527420b1b1b7bab73a1034b9903737ba103830bab9b2b960591b6044820152606401610805565b6001600160a01b038116600081815260026020908152604091829020805460ff1916905590519182527fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e9101610d8e565b611ad381610def565b15611b205760405162461bcd60e51b815260206004820152601960248201527f4163636f756e7420697320616c726561647920706175736572000000000000006044820152606401610805565b6001600160a01b038116600081815260026020908152604091829020805460ff1916600117905590519182527f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f89101610d8e565b611b7c6116a2565b6001805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a0f3390565b604080516080810182526000808252602082018190529181018290526060810191909152600082815260086020908152604091829020825160808101845281546001600160a01b0390811682526001830154169281019290925260028101549282019290925260039091015460608201819052611c765760405162461bcd60e51b815260206004820152601a60248201527f64656c61796564207472616e73666572206e6f742065786973740000000000006044820152606401610805565b600a548160600151611c889190612e38565b4211611cd65760405162461bcd60e51b815260206004820152601d60248201527f64656c61796564207472616e73666572207374696c6c206c6f636b65640000006044820152606401610805565b600083815260086020908152604080832080546001600160a01b03199081168255600182018054909116905560028101849055600301929092558251908301518383015192517f3b40e5089937425d14cdd96947e5661868357e224af59bd8b24a4b8a330d442693611d6e93889390929091909384526001600160a01b03928316602085015291166040830152606082015260800190565b60405180910390a192915050565b600e546001600160a01b0383811691161415611e9857600e54604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b158015611dd857600080fd5b505af1158015611dec573d6000803e3d6000fd5b505050506000836001600160a01b03168261c35090604051600060405180830381858888f193505050503d8060008114611e42576040519150601f19603f3d011682016040523d82523d6000602084013e611e47565b606091505b50509050806119275760405162461bcd60e51b815260206004820152601b60248201527f6661696c656420746f2073656e64206e617469766520746f6b656e00000000006044820152606401610805565b611eac6001600160a01b038316848361244d565b505050565b6040805160c08101825260008082526020808301829052828401829052606083018290526080830182905260a0830182905283518085019094528184528301849052909190805b6020830151518351101561200b57611f0f8361247d565b90925090508160011415611f3e57611f2e611f29846124b7565b612574565b6001600160a01b03168452611ef8565b8160021415611f6657611f53611f29846124b7565b6001600160a01b03166020850152611ef8565b8160031415611f8a57611f80611f7b846124b7565b612585565b6040850152611ef8565b8160041415611fb257611f9f611f29846124b7565b6001600160a01b03166060850152611ef8565b8160051415611fd857611fc4836125bc565b67ffffffffffffffff166080850152611ef8565b8160061415611ffc57611ff2611fed846124b7565b61263e565b60a0850152611ef8565b6120068382612656565b611ef8565b505050919050565b60045461201e575050565b6001600160a01b0382166000908152600660205260409020548061204157505050565b6001600160a01b0383166000908152600560205260408120546004549091429161206b8184612e50565b6120759190612e72565b6001600160a01b0387166000908152600760205260409020549091508111156120a0578492506120ad565b6120aa8584612e38565b92505b838311156120f25760405162461bcd60e51b81526020600482015260126024820152710766f6c756d652065786365656473206361760741b6044820152606401610805565b506001600160a01b039094166000908152600560209081526040808320939093556007905220929092555050565b6000848152600860205260409020600301541561217f5760405162461bcd60e51b815260206004820152601f60248201527f64656c61796564207472616e7366657220616c726561647920657869737473006044820152606401610805565b604080516080810182526001600160a01b0380861682528481166020808401918252838501868152426060860190815260008b8152600890935291869020945185549085166001600160a01b031991821617865592516001860180549190951693169290921790925551600283015551600390910155517fcbcfffe5102114216a85d3aceb14ad4b81a3935b1b5c468fadf3889eb9c5dce6906122259086815260200190565b60405180910390a150505050565b61223c8161159b565b6122885760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f7420676f7665726e6f720000000000000000006044820152606401610805565b6001600160a01b038116600081815260036020908152604091829020805460ff1916905590519182527f1ebe834e73d60a5fec822c1e1727d34bc79f2ad977ed504581cc1822fe20fb5b9101610d8e565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000612380826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166126c89092919063ffffffff16565b805190915015611eac578080602001905181019061239e9190612e91565b611eac5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610805565b600154600160a01b900460ff16610ded5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610805565b6040516001600160a01b038316602482015260448101829052611eac90849063a9059cbb60e01b906064016118f0565b600080600061248b846125bc565b9050612498600882612e50565b92508060071660058111156124af576124af612eb3565b915050915091565b606060006124c4836125bc565b905060008184600001516124d89190612e38565b90508360200151518111156124ec57600080fd5b8167ffffffffffffffff81111561250557612505612ec9565b6040519080825280601f01601f19166020018201604052801561252f576020820181803683370190505b50602080860151865192955091818601919083010160005b85811015612569578181015183820152612562602082612e38565b9050612547565b505050935250919050565b600061257f826126e1565b92915050565b600060208251111561259657600080fd5b60208201519050815160206125ab9190612edf565b6125b6906008612e72565b1c919050565b602080820151825181019091015160009182805b600a8110156126385783811a91506125e9816007612e72565b82607f16901b8517945081608016600014156126265761260a816001612e38565b86518790612619908390612e38565b9052509395945050505050565b8061263081612bf0565b9150506125d0565b50600080fd5b6000815160201461264e57600080fd5b506020015190565b600081600581111561266a5761266a612eb3565b141561267957611eac826125bc565b600281600581111561268d5761268d612eb3565b141561022f57600061269e836125bc565b905080836000018181516126b29190612e38565b90525060208301515183511115611eac57600080fd5b60606126d78484600085612700565b90505b9392505050565b600081516014146126f157600080fd5b5060200151600160601b900490565b6060824710156127615760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610805565b6001600160a01b0385163b6127b85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610805565b600080866001600160a01b031685876040516127d49190612ef6565b60006040518083038185875af1925050503d8060008114612811576040519150601f19603f3d011682016040523d82523d6000602084013e612816565b606091505b5091509150612826828286612831565b979650505050505050565b606083156128405750816126da565b8251156128505782518084602001fd5b8160405162461bcd60e51b81526004016108059190612f12565b803567ffffffffffffffff8116811461288257600080fd5b919050565b80356001600160a01b038116811461288257600080fd5b600080600080608085870312156128b457600080fd5b843593506128c46020860161286a565b92506128d260408601612887565b91506128e06060860161286a565b905092959194509250565b6000602082840312156128fd57600080fd5b5035919050565b60008083601f84011261291657600080fd5b50813567ffffffffffffffff81111561292e57600080fd5b6020830191508360208260051b850101111561294957600080fd5b9250929050565b6000806000806040858703121561296657600080fd5b843567ffffffffffffffff8082111561297e57600080fd5b61298a88838901612904565b909650945060208701359150808211156129a357600080fd5b506129b087828801612904565b95989497509550505050565b600080600080600060a086880312156129d457600080fd5b6129dd86612887565b9450602086013593506129f26040870161286a565b9250612a0060608701612887565b9150612a0e6080870161286a565b90509295509295909350565b600060208284031215612a2c57600080fd5b6126da82612887565b6000806000806000806000806080898b031215612a5157600080fd5b883567ffffffffffffffff80821115612a6957600080fd5b818b0191508b601f830112612a7d57600080fd5b813581811115612a8c57600080fd5b8c6020828501011115612a9e57600080fd5b60209283019a509850908a01359080821115612ab957600080fd5b612ac58c838d01612904565b909850965060408b0135915080821115612ade57600080fd5b612aea8c838d01612904565b909650945060608b0135915080821115612b0357600080fd5b50612b108b828c01612904565b999c989b5096995094979396929594505050565b9687526001600160a01b0395861660208801529385166040870152606086019290925267ffffffffffffffff9081166080860152921660a08401521660c082015260e00190565b60208082526016908201527521b0b63632b91034b9903737ba1033b7bb32b93737b960511b604082015260600190565b6020808252600f908201526e0d8cadccee8d040dad2e6dac2e8c6d608b1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415612c0457612c04612bda565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b838152818360208301376000910160200190815292915050565b60005b83811015612c75578181015183820152602001612c5d565b838111156119275750506000910152565b60008151808452612c9e816020860160208601612c5a565b601f01601f19169290920160200192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8183526000602080850194508260005b85811015612d17576001600160a01b03612d0483612887565b1687529582019590820190600101612ceb565b509495945050505050565b81835260006001600160fb1b03831115612d3b57600080fd5b8260051b8083602087013760009401602001938452509192915050565b608081526000612d6b608083018a612c86565b82810360208401528088825260208201905060208960051b8301018a60005b8b811015612dfe57848303601f190184528135368e9003601e19018112612db057600080fd5b8d01803567ffffffffffffffff811115612dc957600080fd5b8036038f1315612dd857600080fd5b612de6858260208501612cb2565b60209687019690955093909301925050600101612d8a565b50508481036040860152612e1381898b612cdb565b925050508281036060840152612e2a818587612d22565b9a9950505050505050505050565b60008219821115612e4b57612e4b612bda565b500190565b600082612e6d57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612e8c57612e8c612bda565b500290565b600060208284031215612ea357600080fd5b815180151581146126da57600080fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600082821015612ef157612ef1612bda565b500390565b60008251612f08818460208701612c5a565b9190910192915050565b6020815260006126da6020830184612c8656fea2646970667358221220047b131bf301e8fc1ffeef548dc7c60ff9971acd709931d12ae9db5a0f34a54d64736f6c63430008090033", - ), - storage: storage{ - // ReentrancyGuard : uint256 private _status - "0x00": "0x1", - // Pauser > Ownable : address private _owner - // Pauser > Pausable : bool private _paused - "0x01": genesismap{ - params.OasysMainnetGenesisHash: "0x0000000000000000000000001b9dFC56e38b0F92448659C114e2347Bd803911c", - defaultGenesisHash: "0x00000000000000000000000058b529F9084D7eAA598EB3477Fe36064C5B7bbC1", - }, - // Pauser : mapping(address => bool) public pausers - "0x02": genesismap{ - params.OasysMainnetGenesisHash: mapping{ - keyFn: addressKeyFn, - values: map[string]interface{}{ - "0x1b9dFC56e38b0F92448659C114e2347Bd803911c": "0x1", - "0xDfE4F07D1F36B8d559b25082460a4f6A72531de2": "0x1", - "0x34dFa1226F8b3E36FE597B34eEa809a2B5c0bBf9": "0x1", - "0x9F6B03Cb6d8AB8239cF1045Ab28B9Df43dfCC823": "0x1", - "0x2FB8783C14A71C08bFC1dE8Fc3D715Dd93039BF2": "0x1", - "0x1a0aEc0fC48F1B5cc538BE74A90E340b278189e4": "0x1", - }, - }, - defaultGenesisHash: mapping{ - keyFn: addressKeyFn, - values: map[string]interface{}{ - "0x58b529F9084D7eAA598EB3477Fe36064C5B7bbC1": "0x1", - }, - }, - }, - // VolumeControl > Governor : mapping(address => bool) public governors - "0x03": genesismap{ - params.OasysMainnetGenesisHash: mapping{ - keyFn: addressKeyFn, - values: map[string]interface{}{ - "0x1b9dFC56e38b0F92448659C114e2347Bd803911c": "0x1", - "0x34dFa1226F8b3E36FE597B34eEa809a2B5c0bBf9": "0x1", - "0x9F6B03Cb6d8AB8239cF1045Ab28B9Df43dfCC823": "0x1", - "0x8e9174ed59eA4b81E70d0aE0DE13242e2329106c": "0x1", - }, - }, - defaultGenesisHash: mapping{ - keyFn: addressKeyFn, - values: map[string]interface{}{ - "0x58b529F9084D7eAA598EB3477Fe36064C5B7bbC1": "0x1", - }, - }, - }, - }, - }, - { - contract: cBridgePeggedTokenBridgeV2, - // commit: https://github.com/oasysgames/oasys-ecosystem-contract/blob/b9d43020001d9c8ae5d8a0e571726e378314ce9b/contracts/cBridge/pegged-bridge/PeggedTokenBridgeV2.sol - code: mustDecodeCode( - "0x608060405234801561001057600080fd5b50600436106102485760003560e01c806382dc1ec41161013b578063bf4816f0116100b8578063eecdac881161007c578063eecdac88146105af578063f2fde38b146105c2578063f8321383146105d5578063f8734302146105f5578063f9a8ea081461060857600080fd5b8063bf4816f014610550578063ccf2683b14610563578063e026049c14610571578063e3eece2614610579578063e43581b81461059c57600080fd5b8063a0029301116100ff578063a002930114610494578063adc0d57f146104a7578063b1c94d9414610514578063b4d8cedc1461051d578063b5f2bc471461053057600080fd5b806382dc1ec41461042e5780638456cb59146104415780638da5cb5b146104495780639e25fc5c1461046e5780639e422c331461048157600080fd5b806352532faa116101c95780636b2c0f551161018d5780636b2c0f55146103bd5780636ef8d66d146103d057806379fcd8ee146103d85780637f856013146103eb57806380f51c121461040b57600080fd5b806352532faa1461034f57806354eea7961461036f57806357d775f8146103825780635c975abb1461038b57806360216b001461039d57600080fd5b80633d572107116102105780633d572107146102ee5780633f4ba83a1461030157806346fbf68e1461030957806347b16c6c1461031c578063497bf3b21461032f57600080fd5b806301e647251461024d57806315d0975c1461028557806317bdbae51461029a578063274cee31146102ad5780633c4a25d0146102db575b600080fd5b61027061025b366004612374565b600a6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6102986102933660046123a9565b61061b565b005b6102986102a836600461241f565b6106e1565b6102cd6102bb36600461248b565b600b6020526000908152604090205481565b60405190815260200161027c565b6102986102e936600461248b565b61081e565b6102986102fc366004612374565b610863565b6102986108c4565b61027061031736600461248b565b61091a565b61029861032a36600461241f565b610938565b6102cd61033d36600461248b565b600d6020526000908152604090205481565b6102cd61035d36600461248b565b60086020526000908152604090205481565b61029861037d366004612374565b610a6e565b6102cd60035481565b600054600160a01b900460ff16610270565b6102cd6103ab36600461248b565b60046020526000908152604090205481565b6102986103cb36600461248b565b610ac8565b610298610b0a565b6102986103e63660046123a9565b610b13565b6102cd6103f936600461248b565b600c6020526000908152604090205481565b61027061041936600461248b565b60016020526000908152604090205460ff1681565b61029861043c36600461248b565b610b74565b610298610bb6565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161027c565b61029861047c366004612374565b610c0a565b6102cd61048f3660046124c5565b610c8e565b6102cd6104a23660046124c5565b610d15565b6104e96104b5366004612374565b60076020526000908152604090208054600182015460028301546003909301546001600160a01b0392831693919092169184565b604080516001600160a01b03958616815294909316602085015291830152606082015260800161027c565b6102cd60095481565b61029861052b3660046123a9565b610d5f565b6102cd61053e36600461248b565b60056020526000908152604090205481565b61029861055e36600461241f565b610de5565b6104566015602960991b0181565b610298610f1b565b61027061058736600461248b565b60026020526000908152604090205460ff1681565b6102706105aa36600461248b565b610f24565b6102986105bd36600461248b565b610f42565b6102986105d036600461248b565b610f84565b6102cd6105e336600461248b565b60066020526000908152604090205481565b6102cd610603366004612523565b61102b565b61029861061636600461241f565b6113fa565b3361062e6000546001600160a01b031690565b6001600160a01b03161461065d5760405162461bcd60e51b815260040161065490612612565b60405180910390fd5b6001600160a01b0382166000908152600b60205260408120805483929061068590849061265d565b90915550506001600160a01b0382166000908152600b6020526040908190205490517feb2f7272b55acd6dea98f5742868e8d2221ad82acb36b2d0cdd00150290e9499916106d591859190612674565b60405180910390a15050565b6106ea33610f24565b6107065760405162461bcd60e51b81526004016106549061268d565b8281146107255760405162461bcd60e51b8152600401610654906126bd565b60005b8381101561081757828282818110610742576107426126e6565b905060200201356008600087878581811061075f5761075f6126e6565b9050602002016020810190610774919061248b565b6001600160a01b031681526020810191909152604001600020557fceaad6533bfb481492fb3e08ef19297f46611b8fa9de5ef4cf8dc23a56ad09ce8585838181106107c1576107c16126e6565b90506020020160208101906107d6919061248b565b8484848181106107e8576107e86126e6565b905060200201356040516107fd929190612674565b60405180910390a18061080f816126fc565b915050610728565b5050505050565b336108316000546001600160a01b031690565b6001600160a01b0316146108575760405162461bcd60e51b815260040161065490612612565b61086081611530565b50565b61086c33610f24565b6108885760405162461bcd60e51b81526004016106549061268d565b60098190556040518181527fc0a39f234199b125fb93713c4d067bdcebbf691087f87b79c0feb92b156ba8b6906020015b60405180910390a150565b6108cd3361091a565b6109105760405162461bcd60e51b815260206004820152601460248201527321b0b63632b91034b9903737ba103830bab9b2b960611b6044820152606401610654565b6109186115da565b565b6001600160a01b031660009081526001602052604090205460ff1690565b61094133610f24565b61095d5760405162461bcd60e51b81526004016106549061268d565b82811461097c5760405162461bcd60e51b8152600401610654906126bd565b60005b8381101561081757828282818110610999576109996126e6565b90506020020135600560008787858181106109b6576109b66126e6565b90506020020160208101906109cb919061248b565b6001600160a01b031681526020810191909152604001600020557f608e49c22994f20b5d3496dca088b88dfd81b4a3e8cc3809ea1e10a320107e89858583818110610a1857610a186126e6565b9050602002016020810190610a2d919061248b565b848484818110610a3f57610a3f6126e6565b90506020020135604051610a54929190612674565b60405180910390a180610a66816126fc565b91505061097f565b610a7733610f24565b610a935760405162461bcd60e51b81526004016106549061268d565b60038190556040518181527f2664fec2ff76486ac58ed087310855b648b15b9d19f3de8529e95f7c46b7d6b3906020016108b9565b33610adb6000546001600160a01b031690565b6001600160a01b031614610b015760405162461bcd60e51b815260040161065490612612565b6108608161162f565b6109183361162f565b33610b266000546001600160a01b031690565b6001600160a01b031614610b4c5760405162461bcd60e51b815260040161065490612612565b6001600160a01b0382166000908152600b602052604081208054839290610685908490612717565b33610b876000546001600160a01b031690565b6001600160a01b031614610bad5760405162461bcd60e51b815260040161065490612612565b610860816116cd565b610bbf3361091a565b610c025760405162461bcd60e51b815260206004820152601460248201527321b0b63632b91034b9903737ba103830bab9b2b960611b6044820152606401610654565b610918611778565b610c126117bb565b6000610c1d82611808565b6020810151815160408084015190516340c10f1960e01b81529394506001600160a01b03909216926340c10f1992610c589291600401612674565b600060405180830381600087803b158015610c7257600080fd5b505af1158015610c86573d6000803e3d6000fd5b505050505050565b6000610c986117bb565b6000610ca787878787876119cd565b60405163079cc67960e41b81529091506001600160a01b038816906379cc679090610cd89033908a90600401612674565b600060405180830381600087803b158015610cf257600080fd5b505af1158015610d06573d6000803e3d6000fd5b50929998505050505050505050565b6000610d1f6117bb565b6000610d2e87878787876119cd565b604051632770a7eb60e21b81529091506001600160a01b03881690639dc29fac90610cd89033908a90600401612674565b33610d726000546001600160a01b031690565b6001600160a01b031614610d985760405162461bcd60e51b815260040161065490612612565b6001600160a01b0382166000908152600b602052604090819020829055517feb2f7272b55acd6dea98f5742868e8d2221ad82acb36b2d0cdd00150290e9499906106d59084908490612674565b610dee33610f24565b610e0a5760405162461bcd60e51b81526004016106549061268d565b828114610e295760405162461bcd60e51b8152600401610654906126bd565b60005b8381101561081757828282818110610e4657610e466126e6565b90506020020135600c6000878785818110610e6357610e636126e6565b9050602002016020810190610e78919061248b565b6001600160a01b031681526020810191909152604001600020557f3796cd0b17a8734f8da819920625598e9a18be490f686725282e5383f1d06683858583818110610ec557610ec56126e6565b9050602002016020810190610eda919061248b565b848484818110610eec57610eec6126e6565b90506020020135604051610f01929190612674565b60405180910390a180610f13816126fc565b915050610e2c565b61091833611c3d565b6001600160a01b031660009081526002602052604090205460ff1690565b33610f556000546001600160a01b031690565b6001600160a01b031614610f7b5760405162461bcd60e51b815260040161065490612612565b61086081611c3d565b33610f976000546001600160a01b031690565b6001600160a01b031614610fbd5760405162461bcd60e51b815260040161065490612612565b6001600160a01b0381166110225760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610654565b61086081611ce3565b60006110356117bb565b6000463060405160200161106d92919091825260601b6001600160601b031916602082015263135a5b9d60e21b603482015260380190565b6040516020818303038152906040528051906020012090506015602960991b016001600160a01b031663682dbc22828c8c6040516020016110b09392919061272f565b6040516020818303038152906040528a8a8a8a8a8a6040518863ffffffff1660e01b81526004016110e79796959493929190612884565b60006040518083038186803b1580156110ff57600080fd5b505afa158015611113573d6000803e3d6000fd5b5050505060006111588b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d3392505050565b6020818101518251604080850151606080870151608088015160a089015185516001600160601b031998851b8916818b015296841b88166034880152604887019490945290821b861660688601526001600160c01b031960c09190911b16607c850152608484019190915230901b90921660a48201528151808203609801815260b890910182528051908301206000818152600a9093529120549192509060ff16156112365760405162461bcd60e51b815260206004820152600d60248201526c7265636f72642065786973747360981b6044820152606401610654565b6000818152600a602052604090819020805460ff191660011790558251908301516112619190611e95565b81516001600160a01b0316600090815260086020526040902054801580159061128d5750808360400151115b156112af576112aa82846020015185600001518660400151611fa2565b61131b565b8251602084015160408086015190516340c10f1960e01b81526001600160a01b03909316926340c10f19926112e8929091600401612674565b600060405180830381600087803b15801561130257600080fd5b505af1158015611316573d6000803e3d6000fd5b505050505b60408084015184516001600160a01b03166000908152600b60205291822080549192909161134a908490612717565b925050819055507f5bc84ecccfced5bb04bfc7f3efcdbe7f5cd21949ef146811b4d1967fe41f777a8284600001518560200151866040015187608001518860a0015189606001516040516113e297969594939291909687526001600160a01b0395861660208801529385166040870152606086019290925267ffffffffffffffff16608085015260a08401521660c082015260e00190565b60405180910390a1509b9a5050505050505050505050565b61140333610f24565b61141f5760405162461bcd60e51b81526004016106549061268d565b82811461143e5760405162461bcd60e51b8152600401610654906126bd565b60005b838110156108175782828281811061145b5761145b6126e6565b90506020020135600d6000878785818110611478576114786126e6565b905060200201602081019061148d919061248b565b6001600160a01b031681526020810191909152604001600020557fa3181379f6db47d9037efc6b6e8e3efe8c55ddb090b4f0512c152f97c4e47da58585838181106114da576114da6126e6565b90506020020160208101906114ef919061248b565b848484818110611501576115016126e6565b90506020020135604051611516929190612674565b60405180910390a180611528816126fc565b915050611441565b61153981610f24565b156115865760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920676f7665726e6f7200000000006044820152606401610654565b6001600160a01b038116600081815260026020908152604091829020805460ff1916600117905590519182527fdc5a48d79e2e147530ff63ecdbed5a5a66adb9d5cf339384d5d076da197c40b591016108b9565b6115e26120b5565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6116388161091a565b61167c5760405162461bcd60e51b815260206004820152601560248201527420b1b1b7bab73a1034b9903737ba103830bab9b2b960591b6044820152606401610654565b6001600160a01b038116600081815260016020908152604091829020805460ff1916905590519182527fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e91016108b9565b6116d68161091a565b156117235760405162461bcd60e51b815260206004820152601960248201527f4163636f756e7420697320616c726561647920706175736572000000000000006044820152606401610654565b6001600160a01b038116600081815260016020818152604092839020805460ff191690921790915590519182527f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f891016108b9565b6117806117bb565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116123390565b600054600160a01b900460ff16156109185760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610654565b604080516080810182526000808252602082018190529181018290526060810191909152600082815260076020908152604091829020825160808101845281546001600160a01b03908116825260018301541692810192909252600281015492820192909252600390910154606082018190526118c75760405162461bcd60e51b815260206004820152601a60248201527f64656c61796564207472616e73666572206e6f742065786973740000000000006044820152606401610654565b60095481606001516118d99190612717565b42116119275760405162461bcd60e51b815260206004820152601d60248201527f64656c61796564207472616e73666572207374696c6c206c6f636b65640000006044820152606401610654565b600083815260076020908152604080832080546001600160a01b03199081168255600182018054909116905560028101849055600301929092558251908301518383015192517f3b40e5089937425d14cdd96947e5661868357e224af59bd8b24a4b8a330d4426936119bf93889390929091909384526001600160a01b03928316602085015291166040830152606082015260800190565b60405180910390a192915050565b6001600160a01b0385166000908152600c60205260408120548511611a275760405162461bcd60e51b815260206004820152601060248201526f185b5bdd5b9d081d1bdbc81cdb585b1b60821b6044820152606401610654565b6001600160a01b0386166000908152600d60205260409020541580611a6457506001600160a01b0386166000908152600d60205260409020548511155b611aa35760405162461bcd60e51b815260206004820152601060248201526f616d6f756e7420746f6f206c6172676560801b6044820152606401610654565b6001600160a01b0386166000908152600b602052604081208054879290611acb90849061265d565b90915550506040516001600160601b031933606090811b8216602084015288811b82166034840152604883018890526001600160c01b031960c088811b8216606886015287831b8416607086015286811b8216608486015246901b16608c84015230901b16609482015260009060a80160408051601f1981840301815291815281516020928301206000818152600a90935291205490915060ff1615611ba35760405162461bcd60e51b815260206004820152600d60248201526c7265636f72642065786973747360981b6044820152606401610654565b6000818152600a6020908152604091829020805460ff1916600117905581518381526001600160a01b038a81169282019290925233928101929092526060820188905267ffffffffffffffff878116608084015290861660a0830152841660c08201527f6298d7b58f235730b3b399dc5c282f15dae8b022e5fbbf89cee21fd83c8810a39060e00160405180910390a19695505050505050565b611c4681610f24565b611c925760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f7420676f7665726e6f720000000000000000006044820152606401610654565b6001600160a01b038116600081815260026020908152604091829020805460ff1916905590519182527f1ebe834e73d60a5fec822c1e1727d34bc79f2ad977ed504581cc1822fe20fb5b91016108b9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805160c08101825260008082526020808301829052828401829052606083018290526080830182905260a0830182905283518085019094528184528301849052909190805b60208301515183511015611e8d57611d9183612105565b90925090508160011415611dc057611db0611dab8461213f565b6121fc565b6001600160a01b03168452611d7a565b8160021415611de857611dd5611dab8461213f565b6001600160a01b03166020850152611d7a565b8160031415611e0c57611e02611dfd8461213f565b61220d565b6040850152611d7a565b8160041415611e3457611e21611dab8461213f565b6001600160a01b03166060850152611d7a565b8160051415611e5a57611e4683612244565b67ffffffffffffffff166080850152611d7a565b8160061415611e7e57611e74611e6f8461213f565b6122c6565b60a0850152611d7a565b611e8883826122de565b611d7a565b505050919050565b600354611ea0575050565b6001600160a01b03821660009081526005602052604090205480611ec357505050565b6001600160a01b03831660009081526004602052604081205460035490914291611eed8184612920565b611ef79190612942565b6001600160a01b038716600090815260066020526040902054909150811115611f2257849250611f2f565b611f2c8584612717565b92505b83831115611f745760405162461bcd60e51b81526020600482015260126024820152710766f6c756d652065786365656473206361760741b6044820152606401610654565b506001600160a01b039094166000908152600460209081526040808320939093556006905220929092555050565b600084815260076020526040902060030154156120015760405162461bcd60e51b815260206004820152601f60248201527f64656c61796564207472616e7366657220616c726561647920657869737473006044820152606401610654565b604080516080810182526001600160a01b0380861682528481166020808401918252838501868152426060860190815260008b8152600790935291869020945185549085166001600160a01b031991821617865592516001860180549190951693169290921790925551600283015551600390910155517fcbcfffe5102114216a85d3aceb14ad4b81a3935b1b5c468fadf3889eb9c5dce6906120a79086815260200190565b60405180910390a150505050565b600054600160a01b900460ff166109185760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610654565b600080600061211384612244565b9050612120600882612920565b925080600716600581111561213757612137612961565b915050915091565b6060600061214c83612244565b905060008184600001516121609190612717565b905083602001515181111561217457600080fd5b8167ffffffffffffffff81111561218d5761218d612977565b6040519080825280601f01601f1916602001820160405280156121b7576020820181803683370190505b50602080860151865192955091818601919083010160005b858110156121f15781810151838201526121ea602082612717565b90506121cf565b505050935250919050565b600061220782612355565b92915050565b600060208251111561221e57600080fd5b6020820151905081516020612233919061265d565b61223e906008612942565b1c919050565b602080820151825181019091015160009182805b600a8110156122c05783811a9150612271816007612942565b82607f16901b8517945081608016600014156122ae57612292816001612717565b865187906122a1908390612717565b9052509395945050505050565b806122b8816126fc565b915050612258565b50600080fd5b600081516020146122d657600080fd5b506020015190565b60008160058111156122f2576122f2612961565b14156123065761230182612244565b505050565b600281600581111561231a5761231a612961565b141561024857600061232b83612244565b9050808360000181815161233f9190612717565b9052506020830151518351111561230157600080fd5b6000815160141461236557600080fd5b5060200151600160601b900490565b60006020828403121561238657600080fd5b5035919050565b80356001600160a01b03811681146123a457600080fd5b919050565b600080604083850312156123bc57600080fd5b6123c58361238d565b946020939093013593505050565b60008083601f8401126123e557600080fd5b50813567ffffffffffffffff8111156123fd57600080fd5b6020830191508360208260051b850101111561241857600080fd5b9250929050565b6000806000806040858703121561243557600080fd5b843567ffffffffffffffff8082111561244d57600080fd5b612459888389016123d3565b9096509450602087013591508082111561247257600080fd5b5061247f878288016123d3565b95989497509550505050565b60006020828403121561249d57600080fd5b6124a68261238d565b9392505050565b803567ffffffffffffffff811681146123a457600080fd5b600080600080600060a086880312156124dd57600080fd5b6124e68661238d565b9450602086013593506124fb604087016124ad565b92506125096060870161238d565b9150612517608087016124ad565b90509295509295909350565b6000806000806000806000806080898b03121561253f57600080fd5b883567ffffffffffffffff8082111561255757600080fd5b818b0191508b601f83011261256b57600080fd5b81358181111561257a57600080fd5b8c602082850101111561258c57600080fd5b60209283019a509850908a013590808211156125a757600080fd5b6125b38c838d016123d3565b909850965060408b01359150808211156125cc57600080fd5b6125d88c838d016123d3565b909650945060608b01359150808211156125f157600080fd5b506125fe8b828c016123d3565b999c989b5096995094979396929594505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008282101561266f5761266f612647565b500390565b6001600160a01b03929092168252602082015260400190565b60208082526016908201527521b0b63632b91034b9903737ba1033b7bb32b93737b960511b604082015260600190565b6020808252600f908201526e0d8cadccee8d040dad2e6dac2e8c6d608b1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060001982141561271057612710612647565b5060010190565b6000821982111561272a5761272a612647565b500190565b838152818360208301376000910160200190815292915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008383855260208086019550808560051b8301018460005b878110156127fa57848303601f19018952813536889003601e190181126127b157600080fd5b8701803567ffffffffffffffff8111156127ca57600080fd5b8036038913156127d957600080fd5b6127e68582888501612749565b9a86019a945050509083019060010161278b565b5090979650505050505050565b8183526000602080850194508260005b85811015612843576001600160a01b036128308361238d565b1687529582019590820190600101612817565b509495945050505050565b81835260006001600160fb1b0383111561286757600080fd5b8260051b8083602087013760009401602001938452509192915050565b608081526000885180608084015260005b818110156128b2576020818c0181015160a0868401015201612895565b818111156128c457600060a083860101525b50601f01601f1916820182810360a090810160208501526128e8908201898b612772565b905082810360408401526128fd818789612807565b9050828103606084015261291281858761284e565b9a9950505050505050505050565b60008261293d57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561295c5761295c612647565b500290565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220157bc23bb40f3223871d6fe78d9253a69341e2d15d82656cbee6ecd06c0296eb64736f6c63430008090033", - ), - storage: storage{ - // Pauser > Ownable : address private _owner - // Pauser > Pausable : bool private _paused - "0x00": genesismap{ - params.OasysMainnetGenesisHash: "0x0000000000000000000000001b9dFC56e38b0F92448659C114e2347Bd803911c", - defaultGenesisHash: "0x00000000000000000000000058b529F9084D7eAA598EB3477Fe36064C5B7bbC1", - }, - // Pauser : mapping(address => bool) public pausers - "0x01": genesismap{ - params.OasysMainnetGenesisHash: mapping{ - keyFn: addressKeyFn, - values: map[string]interface{}{ - "0x1b9dFC56e38b0F92448659C114e2347Bd803911c": "0x1", - "0xDfE4F07D1F36B8d559b25082460a4f6A72531de2": "0x1", - "0x34dFa1226F8b3E36FE597B34eEa809a2B5c0bBf9": "0x1", - "0x9F6B03Cb6d8AB8239cF1045Ab28B9Df43dfCC823": "0x1", - "0x2FB8783C14A71C08bFC1dE8Fc3D715Dd93039BF2": "0x1", - "0x1a0aEc0fC48F1B5cc538BE74A90E340b278189e4": "0x1", - }, - }, - defaultGenesisHash: mapping{ - keyFn: addressKeyFn, - values: map[string]interface{}{ - "0x58b529F9084D7eAA598EB3477Fe36064C5B7bbC1": "0x1", - }, - }, - }, - // VolumeControl > Governor : mapping(address => bool) public governors - "0x02": genesismap{ - params.OasysMainnetGenesisHash: mapping{ - keyFn: addressKeyFn, - values: map[string]interface{}{ - "0x1b9dFC56e38b0F92448659C114e2347Bd803911c": "0x1", - "0x34dFa1226F8b3E36FE597B34eEa809a2B5c0bBf9": "0x1", - "0x9F6B03Cb6d8AB8239cF1045Ab28B9Df43dfCC823": "0x1", - "0x8e9174ed59eA4b81E70d0aE0DE13242e2329106c": "0x1", - }, - }, - defaultGenesisHash: mapping{ - keyFn: addressKeyFn, - values: map[string]interface{}{ - "0x58b529F9084D7eAA598EB3477Fe36064C5B7bbC1": "0x1", - }, - }, - }, - }, - }, - { - contract: tealswapFactory, - // commit: https://github.com/oasysgames/oasys-ecosystem-contract/blob/b9d43020001d9c8ae5d8a0e571726e378314ce9b/contracts/Tealswap/core/TealswapFactory.sol - code: mustDecodeCode( - "0x60806040523480156200001157600080fd5b5060043610620000b75760003560e01c8063590308a5116200007a578063590308a514620001435780636fc4e0e7146200015a578063a2e74af61462000171578063c9c653961462000188578063e6a43905146200019f578063f46901ed14620001d657600080fd5b8063017e7e5814620000bc578063094b741514620000ed5780631e3dd18b14620001015780633c4a37401462000118578063574f2ba31462000131575b600080fd5b600054620000d0906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b600154620000d0906001600160a01b031681565b620000d062000112366004620007b9565b620001ed565b6200012f62000129366004620007f0565b62000218565b005b600354604051908152602001620000e4565b6200012f62000154366004620007f0565b620002c9565b6200012f6200016b36600462000828565b62000354565b6200012f620001823660046200086f565b6200040a565b620000d062000199366004620007f0565b62000459565b620000d0620001b0366004620007f0565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6200012f620001e73660046200086f565b6200075c565b60038181548110620001fe57600080fd5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b031633146200024e5760405162461bcd60e51b8152600401620002459062000894565b60405180910390fd5b6001600160a01b0380831660009081526002602090815260408083208585168452909152808220548151631fa5d41d60e11b81529151931692633f4ba83a9260048084019391929182900301818387803b158015620002ac57600080fd5b505af1158015620002c1573d6000803e3d6000fd5b505050505050565b6001546001600160a01b03163314620002f65760405162461bcd60e51b8152600401620002459062000894565b6001600160a01b0380831660009081526002602090815260408083208585168452909152808220548151638456cb5960e01b81529151931692638456cb599260048084019391929182900301818387803b158015620002ac57600080fd5b6001546001600160a01b03163314620003815760405162461bcd60e51b8152600401620002459062000894565b6001600160a01b03848116600090815260026020908152604080832087851684529091529081902054905163e3ca2d6560e01b8152600481018590526024810184905291169063e3ca2d6590604401600060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b5050505050505050565b6001546001600160a01b03163314620004375760405162461bcd60e51b8152600401620002459062000894565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b03161415620004bf5760405162461bcd60e51b815260206004820152601d60248201527f5465616c737761703a204944454e544943414c5f414444524553534553000000604482015260640162000245565b600080836001600160a01b0316856001600160a01b031610620004e4578385620004e7565b84845b90925090506001600160a01b0382166200053d5760405162461bcd60e51b81526020600482015260166024820152755465616c737761703a205a45524f5f4144445245535360501b604482015260640162000245565b6001600160a01b03828116600090815260026020908152604080832085851684529091529020541615620005ac5760405162461bcd60e51b81526020600482015260156024820152745465616c737761703a20504149525f45584953545360581b604482015260640162000245565b600060405180602001620005c090620007ab565b601f1982820381018352601f9091011660408190526bffffffffffffffffffffffff19606086811b8216602084015285901b166034820152909150600090604801604051602081830303815290604052805190602001209050808251602084016000f560405163485cc95560e01b81526001600160a01b03868116600483015285811660248301529196509086169063485cc95590604401600060405180830381600087803b1580156200067357600080fd5b505af115801562000688573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526002602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9095018054909716841790965592548351928352908201527f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9910160405180910390a35050505092915050565b6001546001600160a01b03163314620007895760405162461bcd60e51b8152600401620002459062000894565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b612e3880620008c283390190565b600060208284031215620007cc57600080fd5b5035919050565b80356001600160a01b0381168114620007eb57600080fd5b919050565b600080604083850312156200080457600080fd5b6200080f83620007d3565b91506200081f60208401620007d3565b90509250929050565b600080600080608085870312156200083f57600080fd5b6200084a85620007d3565b93506200085a60208601620007d3565b93969395505050506040820135916060013590565b6000602082840312156200088257600080fd5b6200088d82620007d3565b9392505050565b6020808252601390820152722a32b0b639bbb0b81d102327a92124a22222a760691b60408201526060019056fe60c0604052601060808190526f2628102a27a5a2a72096aa27a5a2a72160811b60a09081526200003391600091906200011e565b506001600d553480156200004657600080fd5b50620000516200006d565b600680546001600160a81b0319166101003302179055620002a5565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516200009f919062000201565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160408051601f198184030181529190528051602090910120600455565b8280546200012c90620001c4565b90600052602060002090601f0160209004810192826200015057600085556200019b565b82601f106200016b57805160ff19168380011785556200019b565b828001600101855582156200019b579182015b828111156200019b5782518255916020019190600101906200017e565b50620001a9929150620001ad565b5090565b5b80821115620001a95760008155600101620001ae565b600181811c90821680620001d957607f821691505b60208210811415620001fb57634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c9150808316806200021e57607f831692505b60208084108214156200023f57634e487b7160e01b86526022600452602486fd5b818015620002565760018114620002685762000297565b60ff1986168952848901965062000297565b60008a81526020902060005b868110156200028f5781548b82015290850190830162000274565b505084890196505b509498975050505050505050565b612b8380620002b56000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80636a6278421161011a578063ba9a7a56116100ad578063d505accf1161007c578063d505accf14610489578063dd62ed3e1461049c578063e3ca2d65146104c7578063fd615558146104da578063fff6cae9146104e357600080fd5b8063ba9a7a5614610442578063bc25cf771461044b578063c45a01551461045e578063d21220a71461047657600080fd5b80638456cb59116100e95780638456cb59146103d957806389afcb44146103e157806395d89b4114610409578063a9059cbb1461042f57600080fd5b80636a6278421461037d57806370a08231146103905780637464fc3d146103b05780637ecebe00146103b957600080fd5b806324a9d8531161019d5780633f4ba83a1161016c5780633f4ba83a14610345578063485cc9551461034d5780635909c0d5146103605780635a3d5493146103695780635c975abb1461037257600080fd5b806324a9d853146102f257806330adf81f146102fb578063313ce567146103225780633644e5151461033c57600080fd5b80630dfe1681116101d95780630dfe16811461029557806313966db5146102c057806318160ddd146102c857806323b872dd146102df57600080fd5b8063022c0d9f1461020b57806306fdde03146102205780630902f1ac1461023e578063095ea7b314610272575b600080fd5b61021e6102193660046124cb565b6104eb565b005b610228610a1f565b6040516102359190612591565b60405180910390f35b610246610aad565b604080516001600160701b03948516815293909216602084015263ffffffff1690820152606001610235565b6102856102803660046125c4565b610ad7565b6040519015158152602001610235565b6007546102a8906001600160a01b031681565b6040516001600160a01b039091168152602001610235565b61021e610aed565b6102d160015481565b604051908152602001610235565b6102856102ed3660046125f0565b610c7e565b6102d1600e5481565b6102d17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b61032a601281565b60405160ff9091168152602001610235565b6102d160045481565b61021e610cf8565b61021e61035b366004612631565b610d31565b6102d1600a5481565b6102d1600b5481565b60065460ff16610285565b6102d161038b36600461266a565b610ec1565b6102d161039e36600461266a565b60026020526000908152604090205481565b6102d1600c5481565b6102d16103c736600461266a565b60056020526000908152604090205481565b61021e6111b1565b6103f46103ef36600461266a565b6111e8565b60408051928352602083019190915201610235565b6102286040518060400160405280600781526020016605445414c2d4c560cc1b81525081565b61028561043d3660046125c4565b611590565b6102d16103e881565b61021e61045936600461266a565b61159d565b6006546102a89061010090046001600160a01b031681565b6008546102a8906001600160a01b031681565b61021e610497366004612687565b6116c7565b6102d16104aa366004612631565b600360209081526000928352604080842090915290825290205481565b61021e6104d53660046126fe565b6118da565b6102d1600f5481565b61021e6119a3565b6104f3611aed565b600d5460011461051e5760405162461bcd60e51b815260040161051590612720565b60405180910390fd5b6000600d55841515806105315750600084115b6105895760405162461bcd60e51b8152602060048201526024808201527f5465616c737761703a20494e53554646494349454e545f4f55545055545f414d60448201526313d5539560e21b6064820152608401610515565b600080610594610aad565b5091509150816001600160701b0316871080156105b95750806001600160701b031686105b6106055760405162461bcd60e51b815260206004820181905260248201527f5465616c737761703a20494e53554646494349454e545f4c49515549444954596044820152606401610515565b60075460085460009182916001600160a01b039182169190811690891682148015906106435750806001600160a01b0316896001600160a01b031614155b6106865760405162461bcd60e51b81526020600482015260146024820152735465616c737761703a20494e56414c49445f544f60601b6044820152606401610515565b8a1561069757610697828a8d611b33565b89156106a8576106a8818a8c611b33565b861561071457604051627d5ea360e31b81526001600160a01b038a16906303eaf518906106e19033908f908f908e908e9060040161274a565b600060405180830381600087803b1580156106fb57600080fd5b505af115801561070f573d6000803e3d6000fd5b505050505b6040516370a0823160e01b81523060048201526001600160a01b038316906370a082319060240160206040518083038186803b15801561075357600080fd5b505afa158015610767573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078b9190612796565b6040516370a0823160e01b81523060048201529094506001600160a01b038216906370a082319060240160206040518083038186803b1580156107cd57600080fd5b505afa1580156107e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108059190612796565b92505050600089856001600160701b031661082091906127c5565b831161082d57600061084a565b6108408a6001600160701b0387166127c5565b61084a90846127c5565b905060006108618a6001600160701b0387166127c5565b831161086e57600061088b565b6108818a6001600160701b0387166127c5565b61088b90846127c5565b9050600082118061089c5750600081115b6108f45760405162461bcd60e51b815260206004820152602360248201527f5465616c737761703a20494e53554646494349454e545f494e5055545f414d4f60448201526215539560ea1b6064820152608401610515565b600e54600061090382856127dc565b61090f876127106127dc565b61091991906127c5565b9050600061092783856127dc565b610933876127106127dc565b61093d91906127c5565b90506109556001600160701b03808a16908b166127dc565b610963906305f5e1006127dc565b61096d82846127dc565b10156109a95760405162461bcd60e51b815260206004820152600b60248201526a5465616c737761703a204b60a81b6044820152606401610515565b5050506109b884848888611c7e565b60408051838152602081018390529081018c9052606081018b90526001600160a01b038a169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a350506001600d55505050505050505050565b60008054610a2c906127fb565b80601f0160208091040260200160405190810160405280929190818152602001828054610a58906127fb565b8015610aa55780601f10610a7a57610100808354040283529160200191610aa5565b820191906000526020600020905b815481529060010190602001808311610a8857829003601f168201915b505050505081565b6009546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610ae4338484611e45565b50600192915050565b610af5611aed565b600d54600114610b175760405162461bcd60e51b815260040161051590612720565b6000600d81905580610b27610aad565b506007546040516370a0823160e01b81523060048201529294509092506000916001600160a01b03909116906370a082319060240160206040518083038186803b158015610b7457600080fd5b505afa158015610b88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bac9190612796565b6008546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a082319060240160206040518083038186803b158015610bf557600080fd5b505afa158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d9190612796565b90506000610c3b8585611ea7565b9050610c4983838787611c7e565b8015610c7257600954610c6e906001600160701b03600160701b8204811691166127dc565b600c555b50506001600d55505050565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610ce3576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610cdd9084906127c5565b90915550505b610cee848484612011565b5060019392505050565b60065461010090046001600160a01b03163314610d275760405162461bcd60e51b815260040161051590612830565b610d2f6120b9565b565b60065461010090046001600160a01b03163314610d605760405162461bcd60e51b815260040161051590612830565b600780546001600160a01b038085166001600160a01b0319928316811790935560088054918516919092161790556019600f556064600e55604080516395d89b4160e01b815290516395d89b4191600480820192600092909190829003018186803b158015610dce57600080fd5b505afa158015610de2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e0a9190810190612873565b816001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015610e4357600080fd5b505afa158015610e57573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e7f9190810190612873565b604051602001610e90929190612920565b60405160208183030381529060405260009080519060200190610eb492919061241a565b50610ebd61210b565b5050565b6000610ecb611aed565b600d54600114610eed5760405162461bcd60e51b815260040161051590612720565b6000600d81905580610efd610aad565b506007546040516370a0823160e01b81523060048201529294509092506000916001600160a01b03909116906370a082319060240160206040518083038186803b158015610f4a57600080fd5b505afa158015610f5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f829190612796565b6008546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a082319060240160206040518083038186803b158015610fcb57600080fd5b505afa158015610fdf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110039190612796565b9050600061101a6001600160701b038616846127c5565b905060006110316001600160701b038616846127c5565b9050600061103f8787611ea7565b6001549091508061107d576103e861105f61105a85876127dc565b6121ba565b61106991906127c5565b985061107860006103e861222a565b6110c4565b6110c16001600160701b03891661109483876127dc565b61109e9190612981565b6001600160701b0389166110b284876127dc565b6110bc9190612981565b6122bc565b98505b600089116111245760405162461bcd60e51b815260206004820152602760248201527f5465616c737761703a20494e53554646494349454e545f4c495155494449545960448201526617d3525395115160ca1b6064820152608401610515565b61112e8a8a61222a565b61113a86868a8a611c7e565b81156111635760095461115f906001600160701b03600160701b8204811691166127dc565b600c555b604080518581526020810185905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a250506001600d5550949695505050505050565b60065461010090046001600160a01b031633146111e05760405162461bcd60e51b815260040161051590612830565b610d2f6122d4565b6000806111f3611aed565b600d546001146112155760405162461bcd60e51b815260040161051590612720565b6000600d81905580611225610aad565b506007546008546040516370a0823160e01b81523060048201529395509193506001600160a01b039081169291169060009083906370a082319060240160206040518083038186803b15801561127a57600080fd5b505afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b29190612796565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a082319060240160206040518083038186803b1580156112f757600080fd5b505afa15801561130b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132f9190612796565b3060009081526002602052604081205491925061134c8888611ea7565b6001549091508061135d86856127dc565b6113679190612981565b9a508061137485856127dc565b61137e9190612981565b995060008b118015611390575060008a115b6113ec5760405162461bcd60e51b815260206004820152602760248201527f5465616c737761703a20494e53554646494349454e545f4c495155494449545960448201526617d0955493915160ca1b6064820152608401610515565b6113f63084612311565b611401878d8d611b33565b61140c868d8c611b33565b6040516370a0823160e01b81523060048201526001600160a01b038816906370a082319060240160206040518083038186803b15801561144b57600080fd5b505afa15801561145f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114839190612796565b6040516370a0823160e01b81523060048201529095506001600160a01b038716906370a082319060240160206040518083038186803b1580156114c557600080fd5b505afa1580156114d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fd9190612796565b935061150b85858b8b611c7e565b811561153457600954611530906001600160701b03600160701b8204811691166127dc565b600c555b604080518c8152602081018c90526001600160a01b038e169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505050505050506001600d81905550915091565b6000610ae4338484612011565b6115a5611aed565b600d546001146115c75760405162461bcd60e51b815260040161051590612720565b6000600d556007546008546009546040516370a0823160e01b81523060048201526001600160a01b03938416939092169161167591849186916001600160701b03169083906370a08231906024015b60206040518083038186803b15801561162e57600080fd5b505afa158015611642573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116669190612796565b61167091906127c5565b611b33565b6009546040516370a0823160e01b81523060048201526116bd9183918691600160701b90046001600160701b0316906001600160a01b038416906370a0823190602401611616565b50506001600d5550565b4284101561170b5760405162461bcd60e51b81526020600482015260116024820152701519585b1cddd85c0e8811561412549151607a1b6044820152606401610515565b6004546001600160a01b038816600090815260056020526040812080549192917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b91908761175e83612995565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e001604051602081830303815290604052805190602001206040516020016117d792919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015611842573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906118785750886001600160a01b0316816001600160a01b0316145b6118c45760405162461bcd60e51b815260206004820152601b60248201527f5465616c737761703a20494e56414c49445f5349474e415455524500000000006044820152606401610515565b6118cf898989611e45565b505050505050505050565b60065461010090046001600160a01b031633146119095760405162461bcd60e51b815260040161051590612830565b61271082106119475760405162461bcd60e51b815260206004820152600a6024820152694261642066656542707360b01b6044820152606401610515565b600081116119905760405162461bcd60e51b81526020600482015260166024820152752130b210383937ba37b1b7b62332b2a234bb34b232b960511b6044820152606401610515565b611998610aed565b600e91909155600f55565b6119ab611aed565b600d546001146119cd5760405162461bcd60e51b815260040161051590612720565b6000600d556007546040516370a0823160e01b8152306004820152611ae6916001600160a01b0316906370a082319060240160206040518083038186803b158015611a1757600080fd5b505afa158015611a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4f9190612796565b6008546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015611a9257600080fd5b505afa158015611aa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aca9190612796565b6009546001600160701b0380821691600160701b900416611c7e565b6001600d55565b60065460ff1615610d2f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610515565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b17905291516000928392871691611bbf91906129b0565b6000604051808303816000865af19150503d8060008114611bfc576040519150601f19603f3d011682016040523d82523d6000602084013e611c01565b606091505b5091509150818015611c2b575080511580611c2b575080806020019051810190611c2b91906129cc565b611c775760405162461bcd60e51b815260206004820152601960248201527f5465616c737761703a205452414e534645525f4641494c4544000000000000006044820152606401610515565b5050505050565b6001600160701b038411801590611c9c57506001600160701b038311155b611cdd5760405162461bcd60e51b81526020600482015260126024820152715465616c737761703a204f564552464c4f5760701b6044820152606401610515565b6000611cee640100000000426129ee565b600954909150600090611d0e90600160e01b900463ffffffff1683612a02565b905060008163ffffffff16118015611d2e57506001600160701b03841615155b8015611d4257506001600160701b03831615155b15611dad578063ffffffff16611d6a85611d5b8661239d565b6001600160e01b0316906123bc565b600a80546001600160e01b03929092169290920201905563ffffffff8116611d9584611d5b8761239d565b600b80546001600160e01b0392909216929092020190555b6009805463ffffffff8416600160e01b026001600160e01b036001600160701b03898116600160701b9081026001600160e01b03199095168c83161794909417918216831794859055604080519382169282169290921783529290930490911660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a1505050505050565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600080600660019054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611ef857600080fd5b505afa158015611f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f309190612a27565b90506001600160a01b03811615801590611f4c57506000600f54115b600c549092508215611ffd578015611ff8576000611f7961105a6001600160701b038088169089166127dc565b90506000611f86836121ba565b905080821115611ff5576000611f9c82846127c5565b600154611fa991906127dc565b90506000826001600f54611fbd91906127c5565b611fc790866127dc565b611fd19190612a44565b90506000611fdf8284612981565b90508015611ff157611ff1878261222a565b5050505b50505b612009565b8015612009576000600c555b505092915050565b6001600160a01b0383166000908152600260205260409020546120359082906127c5565b6001600160a01b038085166000908152600260205260408082209390935590841681522054612065908290612a44565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e9a9085815260200190565b6120c16123d1565b6006805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600060405161213b9190612a5c565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160408051601f198184030181529190528051602090910120600455565b6000600382111561221b57508060006121d4600283612981565b6121df906001612a44565b90505b81811015612215579050806002816121fa8186612981565b6122049190612a44565b61220e9190612981565b90506121e2565b50919050565b8115612225575060015b919050565b806001546122389190612a44565b6001556001600160a01b03821660009081526002602052604090205461225f908290612a44565b6001600160a01b0383166000818152600260205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122b09085815260200190565b60405180910390a35050565b60008183106122cb57816122cd565b825b9392505050565b6122dc611aed565b6006805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586120ee3390565b6001600160a01b0382166000908152600260205260409020546123359082906127c5565b6001600160a01b03831660009081526002602052604090205560015461235c9082906127c5565b6001556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016122b0565b60006123b6600160701b6001600160701b038416612af8565b92915050565b60006122cd6001600160701b03831684612b27565b60065460ff16610d2f5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610515565b828054612426906127fb565b90600052602060002090601f016020900481019282612448576000855561248e565b82601f1061246157805160ff191683800117855561248e565b8280016001018555821561248e579182015b8281111561248e578251825591602001919060010190612473565b5061249a92915061249e565b5090565b5b8082111561249a576000815560010161249f565b6001600160a01b03811681146124c857600080fd5b50565b6000806000806000608086880312156124e357600080fd5b853594506020860135935060408601356124fc816124b3565b9250606086013567ffffffffffffffff8082111561251957600080fd5b818801915088601f83011261252d57600080fd5b81358181111561253c57600080fd5b89602082850101111561254e57600080fd5b9699959850939650602001949392505050565b60005b8381101561257c578181015183820152602001612564565b8381111561258b576000848401525b50505050565b60208152600082518060208401526125b0816040850160208701612561565b601f01601f19169190910160400192915050565b600080604083850312156125d757600080fd5b82356125e2816124b3565b946020939093013593505050565b60008060006060848603121561260557600080fd5b8335612610816124b3565b92506020840135612620816124b3565b929592945050506040919091013590565b6000806040838503121561264457600080fd5b823561264f816124b3565b9150602083013561265f816124b3565b809150509250929050565b60006020828403121561267c57600080fd5b81356122cd816124b3565b600080600080600080600060e0888a0312156126a257600080fd5b87356126ad816124b3565b965060208801356126bd816124b3565b95506040880135945060608801359350608088013560ff811681146126e157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561271157600080fd5b50508035926020909101359150565b60208082526010908201526f1519585b1cddd85c0e881313d0d2d15160821b604082015260600190565b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b6000602082840312156127a857600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156127d7576127d76127af565b500390565b60008160001904831182151516156127f6576127f66127af565b500290565b600181811c9082168061280f57607f821691505b6020821081141561221557634e487b7160e01b600052602260045260246000fd5b6020808252601390820152722a32b0b639bbb0b81d102327a92124a22222a760691b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561288557600080fd5b815167ffffffffffffffff8082111561289d57600080fd5b818401915084601f8301126128b157600080fd5b8151818111156128c3576128c361285d565b604051601f8201601f19908116603f011681019083821181831017156128eb576128eb61285d565b8160405282815287602084870101111561290457600080fd5b612915836020830160208801612561565b979650505050505050565b6202628160ed1b81526000835161293e816003850160208801612561565b602d60f81b600391840191820152835161295f816004840160208801612561565b01600401949350505050565b634e487b7160e01b600052601260045260246000fd5b6000826129905761299061296b565b500490565b60006000198214156129a9576129a96127af565b5060010190565b600082516129c2818460208701612561565b9190910192915050565b6000602082840312156129de57600080fd5b815180151581146122cd57600080fd5b6000826129fd576129fd61296b565b500690565b600063ffffffff83811690831681811015612a1f57612a1f6127af565b039392505050565b600060208284031215612a3957600080fd5b81516122cd816124b3565b60008219821115612a5757612a576127af565b500190565b600080835481600182811c915080831680612a7857607f831692505b6020808410821415612a9857634e487b7160e01b86526022600452602486fd5b818015612aac5760018114612abd57612aea565b60ff19861689528489019650612aea565b60008a81526020902060005b86811015612ae25781548b820152908501908301612ac9565b505084890196505b509498975050505050505050565b60006001600160e01b0382811684821681151582840482111615612b1e57612b1e6127af565b02949350505050565b60006001600160e01b0383811680612b4157612b4161296b565b9216919091049291505056fea2646970667358221220c6fe8cd8d8615c38fae7ac95e9f68715c1ad88dcacb1d3bd4259e5b8f1d405d264736f6c63430008090033a2646970667358221220a4f4a6326e5debc223b765200558a8120957c35a78e79a9b519cbe207994d44a64736f6c63430008090033", - ), - storage: storage{ - // address public override feeToSetter - "0x01": genesismap{ - params.OasysMainnetGenesisHash: "0x732508dA924f04a3895152fA4FE3dE176aC763A7", - }, - }, - }, - { - contract: tealswapRouter, - // commit: https://github.com/oasysgames/oasys-ecosystem-contract/blob/b9d43020001d9c8ae5d8a0e571726e378314ce9b/contracts/Tealswap/periphery/TealswapRouter.sol - code: mustDecodeCode( - "0x6080604052600436106101855760003560e01c806396ed28f9116100d1578063c45a01551161008a578063ded9382a11610064578063ded9382a14610490578063e8e33700146104b0578063f305d719146104eb578063fb3bdb41146104fe57600080fd5b8063c45a015514610435578063d06ca61f14610450578063d52bb6f41461047057600080fd5b806396ed28f91461036f578063ad5c4648146103a7578063ad615dec146103c2578063af2979eb146103e2578063b6f9de9514610402578063baa2abde1461041557600080fd5b806352707d8c1161013e5780635c11d795116101185780635c11d795146102fc578063791ac9471461031c5780637ff36ab51461033c5780638803dbee1461034f57600080fd5b806352707d8c1461028e578063571fd012146102bc5780635b0d5984146102dc57600080fd5b806302751cec146101a757806318cbafe5146101e15780631f00ca741461020e5780632195995c1461022e57806338ed17391461024e5780634a25d94a1461026e57600080fd5b366101a257336001602960991b01146101a0576101a0613501565b005b600080fd5b3480156101b357600080fd5b506101c76101c236600461353f565b610511565b604080519283526020830191909152015b60405180910390f35b3480156101ed57600080fd5b506102016101fc3660046135e2565b6105d2565b6040516101d89190613655565b34801561021a57600080fd5b506102016102293660046136af565b610894565b34801561023a57600080fd5b506101c761024936600461379f565b6108af565b34801561025a57600080fd5b506102016102693660046135e2565b61096f565b34801561027a57600080fd5b506102016102893660046135e2565b610a74565b34801561029a57600080fd5b506102ae6102a9366004613849565b610b77565b6040519081526020016101d8565b3480156102c857600080fd5b506102ae6102d7366004613849565b610b8e565b3480156102e857600080fd5b506102ae6102f736600461387b565b610b9c565b34801561030857600080fd5b506101a06103173660046135e2565b610c57565b34801561032857600080fd5b506101a06103373660046135e2565b610ebf565b61020161034a366004613911565b61108f565b34801561035b57600080fd5b5061020161036a3660046135e2565b61132f565b34801561037b57600080fd5b5061038f61038a366004613978565b6113d3565b6040516001600160a01b0390911681526020016101d8565b3480156103b357600080fd5b5061038f6001602960991b0181565b3480156103ce57600080fd5b506102ae6103dd3660046139b1565b61145c565b3480156103ee57600080fd5b506102ae6103fd36600461353f565b611471565b6101a0610410366004613911565b611594565b34801561042157600080fd5b506101c76104303660046139dd565b61187a565b34801561044157600080fd5b5061038f6018602960991b0181565b34801561045c57600080fd5b5061020161046b3660046136af565b611a47565b34801561047c57600080fd5b506101c761048b366004613978565b611a5b565b34801561049c57600080fd5b506101c76104ab36600461387b565b611a7c565b3480156104bc57600080fd5b506104d06104cb366004613a4f565b611b3d565b604080519384526020840192909252908201526060016101d8565b6104d06104f936600461353f565b611c31565b61020161050c366004613911565b611e2f565b600080824281101561053e5760405162461bcd60e51b815260040161053590613acb565b60405180910390fd5b610554896001602960991b018a8a8a308a61187a565b9093509150610564898685612105565b604051632e1a7d4d60e01b8152600481018390526001602960991b0190632e1a7d4d90602401600060405180830381600087803b1580156105a457600080fd5b505af11580156105b8573d6000803e3d6000fd5b505050506105c68583612236565b50965096945050505050565b606081428110156105f55760405162461bcd60e51b815260040161053590613acb565b6001602960991b01868661060a600182613b18565b81811061061957610619613b2f565b905060200201602081019061062e9190613b45565b6001600160a01b0316146106545760405162461bcd60e51b815260040161053590613b62565b6106996018602960991b018988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061231592505050565b91508682600184516106ab9190613b18565b815181106106bb576106bb613b2f565b602002602001015110156106e15760405162461bcd60e51b815260040161053590613b99565b61078d868660008181106106f7576106f7613b2f565b905060200201602081019061070c9190613b45565b3361076d6018602960991b018a8a600081811061072b5761072b613b2f565b90506020020160208101906107409190613b45565b8b8b600181811061075357610753613b2f565b90506020020160208101906107689190613b45565b61253a565b8560008151811061078057610780613b2f565b6020026020010151612613565b6107cc82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250612751915050565b6001602960991b016001600160a01b0316632e1a7d4d83600185516107f19190613b18565b8151811061080157610801613b2f565b60200260200101516040518263ffffffff1660e01b815260040161082791815260200190565b600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b5050505061088984836001855161086c9190613b18565b8151811061087c5761087c613b2f565b6020026020010151612236565b509695505050505050565b60606108a86018602960991b01848461290a565b9392505050565b60008060006108c66018602960991b018f8f61253a565b90506000876108d5578c6108d9565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90610914903390309086908f908e908e908e90600401613be3565b600060405180830381600087803b15801561092e57600080fd5b505af1158015610942573d6000803e3d6000fd5b505050506109558f8f8f8f8f8f8f61187a565b809450819550505050509b509b9950505050505050505050565b606081428110156109925760405162461bcd60e51b815260040161053590613acb565b6109d76018602960991b018988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061231592505050565b91508682600184516109e99190613b18565b815181106109f9576109f9613b2f565b60200260200101511015610a1f5760405162461bcd60e51b815260040161053590613b99565b610a35868660008181106106f7576106f7613b2f565b61088982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612751915050565b60608142811015610a975760405162461bcd60e51b815260040161053590613acb565b6001602960991b018686610aac600182613b18565b818110610abb57610abb613b2f565b9050602002016020810190610ad09190613b45565b6001600160a01b031614610af65760405162461bcd60e51b815260040161053590613b62565b610b3b6018602960991b018988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061290a92505050565b91508682600081518110610b5157610b51613b2f565b602002602001015111156106e15760405162461bcd60e51b815260040161053590613c24565b6000610b8585858585612b08565b95945050505050565b6000610b8585858585612bf1565b600080610bb86018602960991b018d6001602960991b0161253a565b9050600086610bc7578b610bcb565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90610c06903390309086908e908d908d908d90600401613be3565b600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b50505050610c468d8d8d8d8d8d611471565b9d9c50505050505050505050505050565b8042811015610c785760405162461bcd60e51b815260040161053590613acb565b610cf085856000818110610c8e57610c8e613b2f565b9050602002016020810190610ca39190613b45565b33610cea6018602960991b0189896000818110610cc257610cc2613b2f565b9050602002016020810190610cd79190613b45565b8a8a600181811061075357610753613b2f565b8a612613565b60008585610cff600182613b18565b818110610d0e57610d0e613b2f565b9050602002016020810190610d239190613b45565b6040516370a0823160e01b81526001600160a01b03868116600483015291909116906370a082319060240160206040518083038186803b158015610d6657600080fd5b505afa158015610d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9e9190613c6a565b9050610dde868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250612ce0915050565b86818787610ded600182613b18565b818110610dfc57610dfc613b2f565b9050602002016020810190610e119190613b45565b6040516370a0823160e01b81526001600160a01b03888116600483015291909116906370a08231906024015b60206040518083038186803b158015610e5557600080fd5b505afa158015610e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8d9190613c6a565b610e979190613b18565b1015610eb55760405162461bcd60e51b815260040161053590613b99565b5050505050505050565b8042811015610ee05760405162461bcd60e51b815260040161053590613acb565b6001602960991b018585610ef5600182613b18565b818110610f0457610f04613b2f565b9050602002016020810190610f199190613b45565b6001600160a01b031614610f3f5760405162461bcd60e51b815260040161053590613b62565b610f5585856000818110610c8e57610c8e613b2f565b610f93858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250612ce0915050565b6040516370a0823160e01b81523060048201526000906001602960991b01906370a082319060240160206040518083038186803b158015610fd357600080fd5b505afa158015610fe7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100b9190613c6a565b90508681101561102d5760405162461bcd60e51b815260040161053590613b99565b604051632e1a7d4d60e01b8152600481018290526001602960991b0190632e1a7d4d90602401600060405180830381600087803b15801561106d57600080fd5b505af1158015611081573d6000803e3d6000fd5b50505050610eb58482612236565b606081428110156110b25760405162461bcd60e51b815260040161053590613acb565b6001602960991b0186866000816110cb576110cb613b2f565b90506020020160208101906110e09190613b45565b6001600160a01b0316146111065760405162461bcd60e51b815260040161053590613b62565b61114b6018602960991b013488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061231592505050565b915086826001845161115d9190613b18565b8151811061116d5761116d613b2f565b602002602001015110156111935760405162461bcd60e51b815260040161053590613b99565b6001602960991b016001600160a01b031663d0e30db0836000815181106111bc576111bc613b2f565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156111ef57600080fd5b505af1158015611203573d6000803e3d6000fd5b50505050506001602960991b016001600160a01b031663a9059cbb61123c6018602960991b0189896000818110610cc257610cc2613b2f565b8460008151811061124f5761124f613b2f565b60200260200101516040518363ffffffff1660e01b81526004016112889291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b1580156112a257600080fd5b505af11580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da9190613c83565b6112e6576112e6613501565b61132582878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612751915050565b5095945050505050565b606081428110156113525760405162461bcd60e51b815260040161053590613acb565b6113976018602960991b018988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061290a92505050565b915086826000815181106113ad576113ad613b2f565b60200260200101511115610a1f5760405162461bcd60e51b815260040161053590613c24565b60405163e6a4390560e01b81526001600160a01b038084166004830152821660248201526000906018602960991b019063e6a439059060440160206040518083038186803b15801561142457600080fd5b505afa158015611438573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a89190613ca0565b6000611469848484613017565b949350505050565b600081428110156114945760405162461bcd60e51b815260040161053590613acb565b6114aa886001602960991b01898989308961187a565b6040516370a0823160e01b81523060048201529093506115329150899086906001600160a01b038316906370a082319060240160206040518083038186803b1580156114f557600080fd5b505afa158015611509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152d9190613c6a565b612105565b604051632e1a7d4d60e01b8152600481018390526001602960991b0190632e1a7d4d90602401600060405180830381600087803b15801561157257600080fd5b505af1158015611586573d6000803e3d6000fd5b505050506108898483612236565b80428110156115b55760405162461bcd60e51b815260040161053590613acb565b6001602960991b0185856000816115ce576115ce613b2f565b90506020020160208101906115e39190613b45565b6001600160a01b0316146116095760405162461bcd60e51b815260040161053590613b62565b60003490506001602960991b016001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561165057600080fd5b505af1158015611664573d6000803e3d6000fd5b50505050506001602960991b016001600160a01b031663a9059cbb61169d6018602960991b0189896000818110610cc257610cc2613b2f565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b1580156116e557600080fd5b505af11580156116f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171d9190613c83565b61172957611729613501565b60008686611738600182613b18565b81811061174757611747613b2f565b905060200201602081019061175c9190613b45565b6040516370a0823160e01b81526001600160a01b03878116600483015291909116906370a082319060240160206040518083038186803b15801561179f57600080fd5b505afa1580156117b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d79190613c6a565b9050611817878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612ce0915050565b87818888611826600182613b18565b81811061183557611835613b2f565b905060200201602081019061184a9190613b45565b6040516370a0823160e01b81526001600160a01b03898116600483015291909116906370a0823190602401610e3d565b600080824281101561189e5760405162461bcd60e51b815260040161053590613acb565b60006118b26018602960991b018c8c61253a565b6040516323b872dd60e01b81523360048201526001600160a01b03821660248201819052604482018c90529192506323b872dd90606401602060405180830381600087803b15801561190357600080fd5b505af1158015611917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193b9190613c83565b5060405163226bf2d160e21b81526001600160a01b03878116600483015260009182918416906389afcb44906024016040805180830381600087803b15801561198357600080fd5b505af1158015611997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bb9190613cbd565b9150915060006119cb8e8e6130b5565b509050806001600160a01b03168e6001600160a01b0316146119ee5781836119f1565b82825b90975095508a871015611a165760405162461bcd60e51b815260040161053590613ce1565b89861015611a365760405162461bcd60e51b815260040161053590613d26565b505050505097509795505050505050565b60606108a86018602960991b018484612315565b600080611a706018602960991b0185856131a4565b915091505b9250929050565b6000806000611a9a6018602960991b018e6001602960991b0161253a565b9050600087611aa9578c611aad565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90611ae8903390309086908f908e908e908e90600401613be3565b600060405180830381600087803b158015611b0257600080fd5b505af1158015611b16573d6000803e3d6000fd5b50505050611b288e8e8e8e8e8e610511565b909f909e509c50505050505050505050505050565b60008060008342811015611b635760405162461bcd60e51b815260040161053590613acb565b611b718c8c8c8c8c8c6131ec565b90945092506000611b8a6018602960991b018e8e61253a565b9050611b988d338388612613565b611ba48c338387612613565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b158015611be757600080fd5b505af1158015611bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1f9190613c6a565b92505050985098509895505050505050565b60008060008342811015611c575760405162461bcd60e51b815260040161053590613acb565b611c6c8a6001602960991b018b348c8c6131ec565b90945092506000611c8c6018602960991b018c6001602960991b0161253a565b9050611c9a8b338388612613565b6001602960991b016001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015611cdc57600080fd5b505af1158015611cf0573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b0385166004820152602481018890526001602960991b01935063a9059cbb92506044019050602060405180830381600087803b158015611d4557600080fd5b505af1158015611d59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7d9190613c83565b611d8957611d89613501565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b158015611dcc57600080fd5b505af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e049190613c6a565b925083341115611e2157611e2133611e1c8634613b18565b612236565b505096509650969350505050565b60608142811015611e525760405162461bcd60e51b815260040161053590613acb565b6001602960991b018686600081611e6b57611e6b613b2f565b9050602002016020810190611e809190613b45565b6001600160a01b031614611ea65760405162461bcd60e51b815260040161053590613b62565b611eeb6018602960991b018888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061290a92505050565b91503482600081518110611f0157611f01613b2f565b60200260200101511115611f275760405162461bcd60e51b815260040161053590613c24565b6001602960991b016001600160a01b031663d0e30db083600081518110611f5057611f50613b2f565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611f8357600080fd5b505af1158015611f97573d6000803e3d6000fd5b50505050506001602960991b016001600160a01b031663a9059cbb611fd06018602960991b0189896000818110610cc257610cc2613b2f565b84600081518110611fe357611fe3613b2f565b60200260200101516040518363ffffffff1660e01b815260040161201c9291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561203657600080fd5b505af115801561204a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206e9190613c83565b61207a5761207a613501565b6120b982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612751915050565b816000815181106120cc576120cc613b2f565b60200260200101513411156113255761132533836000815181106120f2576120f2613b2f565b602002602001015134611e1c9190613b18565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916121619190613d97565b6000604051808303816000865af19150503d806000811461219e576040519150601f19603f3d011682016040523d82523d6000602084013e6121a3565b606091505b50915091508180156121cd5750805115806121cd5750808060200190518101906121cd9190613c83565b61222f5760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b6064820152608401610535565b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040516122609190613d97565b60006040518083038185875af1925050503d806000811461229d576040519150601f19603f3d011682016040523d82523d6000602084013e6122a2565b606091505b50509050806123105760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527308115512081d1c985b9cd9995c8819985a5b195960621b6064820152608401610535565b505050565b60606002825110156123695760405162461bcd60e51b815260206004820152601d60248201527f5465616c737761704c6962726172793a20494e56414c49445f504154480000006044820152606401610535565b815167ffffffffffffffff81111561238357612383613699565b6040519080825280602002602001820160405280156123ac578160200160208202803683370190505b50905082816000815181106123c3576123c3613b2f565b60200260200101818152505060005b600183516123e09190613b18565b8110156125325760006124318483815181106123fe576123fe613b2f565b6020026020010151858460016124149190613db3565b8151811061242457612424613b2f565b60200260200101516130b5565b509050600061247f8786858151811061244c5761244c613b2f565b6020026020010151878660016124629190613db3565b8151811061247257612472613b2f565b602002602001015161253a565b90506000806124bc83856001600160a01b03168988815181106124a4576124a4613b2f565b60200260200101516001600160a01b031614156133de565b9150915060006124cb84613488565b90506124f28787815181106124e2576124e2613b2f565b6020026020010151848484612b08565b876124fe886001613db3565b8151811061250e5761250e613b2f565b6020026020010181815250505050505050808061252a90613dcb565b9150506123d2565b509392505050565b600080600061254985856130b5565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016125f19291906001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527f9690b3663a0ea0887f1b44a4a80a71bb6a9c3bbab71f1777cb5a31e95ffdb5e1603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916126779190613d97565b6000604051808303816000865af19150503d80600081146126b4576040519150601f19603f3d011682016040523d82523d6000602084013e6126b9565b606091505b50915091508180156126e35750805115806126e35750808060200190518101906126e39190613c83565b6127495760405162461bcd60e51b815260206004820152603160248201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472604482015270185b9cd9995c919c9bdb4819985a5b1959607a1b6064820152608401610535565b505050505050565b60005b600183516127629190613b18565b8110156129045760008084838151811061277e5761277e613b2f565b6020026020010151858460016127949190613db3565b815181106127a4576127a4613b2f565b60200260200101519150915060006127bc83836130b5565b5090506000876127cd866001613db3565b815181106127dd576127dd613b2f565b60200260200101519050600080836001600160a01b0316866001600160a01b03161461280b5782600061280f565b6000835b91509150600060028a516128239190613b18565b881061282f5788612847565b6128476018602960991b01878c6124628c6002613db3565b905061285b6018602960991b01888861253a565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015612898576020820181803683370190505b506040518563ffffffff1660e01b81526004016128b89493929190613de6565b600060405180830381600087803b1580156128d257600080fd5b505af11580156128e6573d6000803e3d6000fd5b505050505050505050505080806128fc90613dcb565b915050612754565b50505050565b606060028251101561295e5760405162461bcd60e51b815260206004820152601d60248201527f5465616c737761704c6962726172793a20494e56414c49445f504154480000006044820152606401610535565b815167ffffffffffffffff81111561297857612978613699565b6040519080825280602002602001820160405280156129a1578160200160208202803683370190505b5090508281600183516129b49190613b18565b815181106129c4576129c4613b2f565b6020026020010181815250506000600183516129e09190613b18565b90505b8015612532576000612a24846129fa600185613b18565b81518110612a0a57612a0a613b2f565b602002602001015185848151811061242457612424613b2f565b5090506000612a638786612a39600187613b18565b81518110612a4957612a49613b2f565b602002602001015187868151811061247257612472613b2f565b9050600080612a92836001600160a01b03861689612a8260018a613b18565b815181106124a4576124a4613b2f565b915091506000612aa184613488565b9050612ac8878781518110612ab857612ab8613b2f565b6020026020010151848484612bf1565b87612ad4600189613b18565b81518110612ae457612ae4613b2f565b60200260200101818152505050505050508080612b0090613e36565b9150506129e3565b6000808511612b6c5760405162461bcd60e51b815260206004820152602a60248201527f5465616c737761704c6962726172793a20494e53554646494349454e545f494e60448201526914155517d05353d5539560b21b6064820152608401610535565b600084118015612b7c5750600083115b612b985760405162461bcd60e51b815260040161053590613e4d565b6000612ba683612710613b18565b612bb09087613e94565b90506000612bbe8583613e94565b9050600082612bcf88612710613e94565b612bd99190613db3565b9050612be58183613eb3565b98975050505050505050565b6000808511612c565760405162461bcd60e51b815260206004820152602b60248201527f5465616c737761704c6962726172793a20494e53554646494349454e545f4f5560448201526a1514155517d05353d5539560aa1b6064820152608401610535565b600084118015612c665750600083115b612c825760405162461bcd60e51b815260040161053590613e4d565b6000612c8e8686613e94565b612c9a90612710613e94565b90506000612caa84612710613b18565b612cb48887613b18565b612cbe9190613e94565b9050612cca8183613eb3565b612cd5906001613db3565b979650505050505050565b60005b60018351612cf19190613b18565b81101561231057600080848381518110612d0d57612d0d613b2f565b602002602001015185846001612d239190613db3565b81518110612d3357612d33613b2f565b6020026020010151915091506000612d4b83836130b5565b5090506000612d626018602960991b01858561253a565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612da357600080fd5b505afa158015612db7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddb9190613eec565b506001600160701b031691506001600160701b03169150600080876001600160a01b03168a6001600160a01b031614612e15578284612e18565b83835b6040516370a0823160e01b81526001600160a01b038a8116600483015292945090925083918c16906370a082319060240160206040518083038186803b158015612e6157600080fd5b505afa158015612e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e999190613c6a565b612ea39190613b18565b9550612f218683838a6001600160a01b03166324a9d8536040518163ffffffff1660e01b815260040160206040518083038186803b158015612ee457600080fd5b505afa158015612ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1c9190613c6a565b612b08565b945050505050600080856001600160a01b0316886001600160a01b031614612f4b57826000612f4f565b6000835b91509150600060028c51612f639190613b18565b8a10612f6f578a612f87565b612f876018602960991b01898e6124628e6002613db3565b6040805160008152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f90612fc99086908690869060248101613de6565b600060405180830381600087803b158015612fe357600080fd5b505af1158015612ff7573d6000803e3d6000fd5b50505050505050505050505050808061300f90613dcb565b915050612ce3565b60008084116130745760405162461bcd60e51b8152602060048201526024808201527f5465616c737761704c6962726172793a20494e53554646494349454e545f414d60448201526313d5539560e21b6064820152608401610535565b6000831180156130845750600082115b6130a05760405162461bcd60e51b815260040161053590613e4d565b826130ab8386613e94565b6114699190613eb3565b600080826001600160a01b0316846001600160a01b031614156131265760405162461bcd60e51b8152602060048201526024808201527f5465616c737761704c6962726172793a204944454e544943414c5f41444452456044820152635353455360e01b6064820152608401610535565b826001600160a01b0316846001600160a01b031610613146578284613149565b83835b90925090506001600160a01b038216611a755760405162461bcd60e51b815260206004820152601d60248201527f5465616c737761704c6962726172793a205a45524f5f414444524553530000006044820152606401610535565b60008060006131b385856130b5565b5090506131df6131c487878761253a565b826001600160a01b0316876001600160a01b031614156133de565b9250925050935093915050565b60405163e6a4390560e01b81526001600160a01b03808816600483015286166024820152600090819081906018602960991b019063e6a439059060440160206040518083038186803b15801561324157600080fd5b505afa158015613255573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132799190613ca0565b6001600160a01b03161415613312576040516364e329cb60e11b81526001600160a01b03808a166004830152881660248201526018602960991b019063c9c6539690604401602060405180830381600087803b1580156132d857600080fd5b505af11580156132ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133109190613ca0565b505b6000806133276018602960991b018b8b6131a4565b91509150816000148015613339575080155b15613349578793508692506133d1565b6000613356898484613017565b905087811161338a578581101561337f5760405162461bcd60e51b815260040161053590613d26565b8894509250826133cf565b6000613397898486613017565b9050898111156133a9576133a9613501565b878110156133c95760405162461bcd60e51b815260040161053590613ce1565b94508793505b505b5050965096945050505050565b600080600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561341d57600080fd5b505afa158015613431573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134559190613eec565b506001600160701b031691506001600160701b031691508461347857818161347b565b80825b9097909650945050505050565b6000816001600160a01b03166324a9d8536040518163ffffffff1660e01b815260040160206040518083038186803b1580156134c357600080fd5b505afa1580156134d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fb9190613c6a565b92915050565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b038116811461352c57600080fd5b50565b803561353a81613517565b919050565b60008060008060008060c0878903121561355857600080fd5b863561356381613517565b9550602087013594506040870135935060608701359250608087013561358881613517565b8092505060a087013590509295509295509295565b60008083601f8401126135af57600080fd5b50813567ffffffffffffffff8111156135c757600080fd5b6020830191508360208260051b8501011115611a7557600080fd5b60008060008060008060a087890312156135fb57600080fd5b8635955060208701359450604087013567ffffffffffffffff81111561362057600080fd5b61362c89828a0161359d565b909550935050606087013561364081613517565b80925050608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b8181101561368d57835183529284019291840191600101613671565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156136c257600080fd5b8235915060208084013567ffffffffffffffff808211156136e257600080fd5b818601915086601f8301126136f657600080fd5b81358181111561370857613708613699565b8060051b604051601f19603f8301168101818110858211171561372d5761372d613699565b60405291825284820192508381018501918983111561374b57600080fd5b938501935b82851015613770576137618561352f565b84529385019392850192613750565b8096505050505050509250929050565b801515811461352c57600080fd5b803560ff8116811461353a57600080fd5b60008060008060008060008060008060006101608c8e0312156137c157600080fd5b8b356137cc81613517565b9a5060208c01356137dc81613517565b995060408c0135985060608c0135975060808c0135965060a08c013561380181613517565b955060c08c0135945060e08c013561381881613780565b93506138276101008d0161378e565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806000806080858703121561385f57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000806000806000806000806101408b8d03121561389b57600080fd5b8a356138a681613517565b995060208b0135985060408b0135975060608b0135965060808b01356138cb81613517565b955060a08b0135945060c08b01356138e281613780565b93506138f060e08c0161378e565b92506101008b013591506101208b013590509295989b9194979a5092959850565b60008060008060006080868803121561392957600080fd5b85359450602086013567ffffffffffffffff81111561394757600080fd5b6139538882890161359d565b909550935050604086013561396781613517565b949793965091946060013592915050565b6000806040838503121561398b57600080fd5b823561399681613517565b915060208301356139a681613517565b809150509250929050565b6000806000606084860312156139c657600080fd5b505081359360208301359350604090920135919050565b600080600080600080600060e0888a0312156139f857600080fd5b8735613a0381613517565b96506020880135613a1381613517565b955060408801359450606088013593506080880135925060a0880135613a3881613517565b8092505060c0880135905092959891949750929550565b600080600080600080600080610100898b031215613a6c57600080fd5b8835613a7781613517565b97506020890135613a8781613517565b965060408901359550606089013594506080890135935060a0890135925060c0890135613ab381613517565b8092505060e089013590509295985092959890939650565b60208082526017908201527f5465616c73776170526f757465723a2045585049524544000000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082821015613b2a57613b2a613b02565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613b5757600080fd5b81356108a881613517565b6020808252601c908201527f5465616c73776170526f757465723a20494e56414c49445f5041544800000000604082015260600190565b6020808252602a908201527f5465616c73776170526f757465723a20494e53554646494349454e545f4f555460408201526914155517d05353d5539560b21b606082015260800190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b60208082526026908201527f5465616c73776170526f757465723a204558434553534956455f494e5055545f604082015265105353d5539560d21b606082015260800190565b600060208284031215613c7c57600080fd5b5051919050565b600060208284031215613c9557600080fd5b81516108a881613780565b600060208284031215613cb257600080fd5b81516108a881613517565b60008060408385031215613cd057600080fd5b505080516020909101519092909150565b60208082526025908201527f5465616c73776170526f757465723a20494e53554646494349454e545f415f416040820152641353d5539560da1b606082015260800190565b60208082526025908201527f5465616c73776170526f757465723a20494e53554646494349454e545f425f416040820152641353d5539560da1b606082015260800190565b60005b83811015613d86578181015183820152602001613d6e565b838111156129045750506000910152565b60008251613da9818460208701613d6b565b9190910192915050565b60008219821115613dc657613dc6613b02565b500190565b6000600019821415613ddf57613ddf613b02565b5060010190565b84815283602082015260018060a01b03831660408201526080606082015260008251806080840152613e1f8160a0850160208701613d6b565b601f01601f19169190910160a00195945050505050565b600081613e4557613e45613b02565b506000190190565b60208082526027908201527f5465616c737761704c6962726172793a20494e53554646494349454e545f4c496040820152665155494449545960c81b606082015260800190565b6000816000190483118215151615613eae57613eae613b02565b500290565b600082613ed057634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160701b038116811461353a57600080fd5b600080600060608486031215613f0157600080fd5b613f0a84613ed5565b9250613f1860208501613ed5565b9150604084015163ffffffff81168114613f3157600080fd5b80915050925092509256fea2646970667358221220cc16c8b9a19a0e06f0102a856465a2a73129decb1ba04f1a765069c25f1f093c64736f6c63430008090033", - ), - }, - } - - deployments3 = []*deployment{ - { - contract: tealswapFactory, - storage: storage{ - // address public override feeToSetter - "0x01": "0x732508dA924f04a3895152fA4FE3dE176aC763A7", - }, - }, - { - contract: tofunftMarketNG, - // commit: https://github.com/oasysgames/oasys-ecosystem-contract/blob/1008faa1c5e939a3bd87f6b732368b3ec060c12f/contracts/tofuNFT/MarketNG.sol - code: mustDecodeCode( - "0x6080604052600436106103855760003560e01c80638704f2a3116101d1578063c477be2011610102578063ee98ce91116100a0578063f2fde38b1161006f578063f2fde38b14610a1e578063f460590b14610a3e578063f4a33e0d14610a5e578063f5116bc914610a7e57600080fd5b8063ee98ce91146109b0578063f0954160146109e9578063f0d250ba146105c0578063f23a6e61146109fe57600080fd5b8063e1784a02116100dc578063e1784a02146105c0578063e7d4a99914610970578063e91274f314610990578063eb3742611461066157600080fd5b8063c477be20146104ed578063cd78ba0114610879578063d9548e531461093d57600080fd5b8063afd76a0b1161016f578063ba84775911610149578063ba84775914610806578063bc197c8114610819578063bdf52b4514610839578063c1c30e801461085957600080fd5b8063afd76a0b146107b5578063b4533aad146107d5578063b50a2a55146105c057600080fd5b806390c2b10e116101ab57806390c2b10e146104d85780639e57feb514610749578063a80d33fb1461075e578063ac5e2cb11461079557600080fd5b80638704f2a3146106f55780638da5cb5b1461072b5780638f18439e146104ed57600080fd5b806354134876116102b65780637234d8f21161025457806380bc688f1161022357806380bc688f146106ab57806381787a85146106cb5780638456cb59146106e0578063853ca41a146104d857600080fd5b80637234d8f214610661578063740db280146104ed578063781dc70a146106765780637ae1ace01461069657600080fd5b80635fd34298116102905780635fd34298146105f45780636acc65db14610621578063708d4d3514610636578063715018a61461064c57600080fd5b806354134876146105aa5780635a4e5a15146105c05780635c975abb146105d557600080fd5b80631bb03ca9116103235780632bcd27df116102fd5780632bcd27df146105025780633ed9ffb7146105325780633f4ba83a146105625780633fc8cef31461057757600080fd5b80631bb03ca9146104c357806324f8515b146104d857806325593ac2146104ed57600080fd5b80630ad486281161035f5780630ad486281461040d57806311f0794c1461042d578063150b7a02146104545780631b01e72c1461048d57600080fd5b8063015af8ee1461039157806301ffc9a7146103b35780630873c6ec146103e857600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103b16103ac366004614546565b610ab3565b005b3480156103bf57600080fd5b506103d36103ce366004614568565b610af2565b60405190151581526020015b60405180910390f35b3480156103f457600080fd5b506103ff620f424081565b6040519081526020016103df565b34801561041957600080fd5b506103d3610428366004614592565b610b29565b34801561043957600080fd5b50610442600481565b60405160ff90911681526020016103df565b34801561046057600080fd5b5061047461046f366004614611565b610b84565b6040516001600160e01b031990911681526020016103df565b34801561049957600080fd5b506103d36104a8366004614592565b60009081526002602052604090206006015460ff1660011490565b3480156104cf57600080fd5b50610442600681565b3480156104e457600080fd5b50610442600081565b3480156104f957600080fd5b50610442600181565b34801561050e57600080fd5b506103d361051d366004614683565b60066020526000908152604090205460ff1681565b34801561053e57600080fd5b506103d361054d366004614592565b60036020526000908152604090205460ff1681565b34801561056e57600080fd5b506103b1610bc4565b34801561058357600080fd5b506105926001602960991b0181565b6040516001600160a01b0390911681526020016103df565b3480156105b657600080fd5b506103ff60085481565b3480156105cc57600080fd5b50610442600281565b3480156105e157600080fd5b50600154600160a01b900460ff166103d3565b34801561060057600080fd5b506103ff61060f366004614592565b60056020526000908152604090205481565b34801561062d57600080fd5b50610442600881565b34801561064257600080fd5b506103ff60075481565b34801561065857600080fd5b506103b1610bd6565b34801561066d57600080fd5b50610442600381565b34801561068257600080fd5b506103d361069136600461479f565b610be8565b3480156106a257600080fd5b50610442600981565b3480156106b757600080fd5b506103b16106c63660046147f9565b610c68565b3480156106d757600080fd5b50610442600781565b3480156106ec57600080fd5b506103b1610c80565b34801561070157600080fd5b506103d3610710366004614592565b60009081526002602052604090206006015460ff1660031490565b34801561073757600080fd5b506001546001600160a01b0316610592565b34801561075557600080fd5b50610442600581565b34801561076a57600080fd5b506103d3610779366004614592565b60009081526002602081905260409091206006015460ff161490565b3480156107a157600080fd5b506103d36107b0366004614854565b610c90565b3480156107c157600080fd5b506103b16107d036600461491d565b610ccf565b3480156107e157600080fd5b506107f56107f0366004614546565b610db1565b6040516103df9594939291906149c4565b6103b1610814366004614a13565b610e82565b34801561082557600080fd5b50610474610834366004614b17565b6116af565b34801561084557600080fd5b506103d3610854366004614592565b6116e9565b34801561086557600080fd5b506103b1610874366004614bd5565b611706565b34801561088557600080fd5b506108ec610894366004614592565b600260208190526000918252604090912080546001820154928201546003830154600484015460058501546006909501546001600160a01b039485169685169593909416939192909160ff8082169161010090041688565b604080516001600160a01b03998a168152978916602089015295909716948601949094526060850192909252608084015260a083015260ff90811660c083015290911660e0820152610100016103df565b34801561094957600080fd5b506103d3610958366004614592565b60009081526002602052604090206005015442101590565b34801561097c57600080fd5b506103b161098b366004614c24565b611774565b34801561099c57600080fd5b506103b16109ab366004614c54565b6118b8565b3480156109bc57600080fd5b506103d36109cb366004614592565b600090815260026020526040902060060154610100900460ff161590565b3480156109f557600080fd5b50610442600a81565b348015610a0a57600080fd5b50610474610a19366004614d26565b611b7d565b348015610a2a57600080fd5b506103b1610a39366004614683565b611bb5565b348015610a4a57600080fd5b506103b1610a59366004614d8f565b611c2e565b348015610a6a57600080fd5b506103d3610a79366004614dbd565b611ccc565b348015610a8a57600080fd5b506103d3610a99366004614592565b60009081526002602052604090206006015460ff16151590565b610abb61206f565b600881905560078290556040517f6c06ac894de6b71964f14d152b6674a4465a9b5d3f9cf9f216b8e7ea6146751990600090a15050565b60006001600160e01b03198216630a85bd0160e11b1480610b2357506001600160e01b03198216630271189760e51b145b92915050565b60008181526002602052604081206006015460ff166003145b8015610b655750600082815260026020526040902060060154610100900460ff16155b8015610b23575050600090815260026020526040902060050154421090565b60095460009060ff16610bb25760405162461bcd60e51b8152600401610ba990614de2565b60405180910390fd5b50630a85bd0160e11b95945050505050565b610bcc61206f565b610bd46120c9565b565b610bde61206f565b610bd4600061211e565b6000816001600160a01b0316610c54610c4e856040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b86612170565b6001600160a01b03161490505b9392505050565b610c7061206f565b610c7b828483612194565b505050565b610c8861206f565b610bd46122aa565b600060ff8216600314801590610caa575060ff8216600514155b8015610cba575060ff8216600414155b8015610b23575060ff82166006141592915050565b60026000541415610cf25760405162461bcd60e51b8152600401610ba990614e19565b6002600055610cff6122ed565b60005b8151811015610da7576000828281518110610d1f57610d1f614e50565b6020026020010151905080600001516001600160a01b03166342842e0e338684602001516040518463ffffffff1660e01b8152600401610d6193929190614e66565b600060405180830381600087803b158015610d7b57600080fd5b505af1158015610d8f573d6000803e3d6000fd5b50505050508080610d9f90614ea0565b915050610d02565b5050600160005550565b60046020818152600093845260408085209091529183529120805460018201546002830154600384015494840180546001600160a01b03909416959294919360ff90931692610dff90614ebb565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2b90614ebb565b8015610e785780601f10610e4d57610100808354040283529160200191610e78565b820191906000526020600020905b815481529060010190602001808311610e5b57829003601f168201915b5050505050905085565b60026000541415610ea55760405162461bcd60e51b8152600401610ba990614e19565b6002600055610eb26122ed565b42856040013511610f055760405162461bcd60e51b815260206004820152601c60248201527f7472616e73616374696f6e20646561646c696e652072656163686564000000006044820152606401610ba9565b60066000610f196040880160208901614683565b6001600160a01b0316815260208101919091526040016000205460ff16610f7a5760405162461bcd60e51b81526020600482015260156024820152743ab735b737bbb71036b0b935b2ba1039b4b3b732b960591b6044820152606401610ba9565b610f92610f8d60c0870160a08801614854565b61233a565b61100582828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604051610fdc9250899150602001615113565b604051602081830303815290604052805190602001208760200160208101906106919190614683565b6110495760405162461bcd60e51b815260206004820152601560248201527437b33332b91039b4b3b730ba3ab9329032b93937b960591b6044820152606401610ba9565b61105c6107b060c0870160a08801614854565b1561117c57600086604051602001611074919061522d565b60408051601f19818403018152919052805160208201209091508635146110dd5760405162461bcd60e51b815260206004820152601d60248201527f696e74656e74696f6e206861736820646f6573206e6f74206d617463680000006044820152606401610ba9565b61112e85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250508451602080870191909120925061069191508b018b614683565b61117a5760405162461bcd60e51b815260206004820152601960248201527f696e74656e74696f6e207369676e6174757265206572726f72000000000000006044820152606401610ba9565b505b600161118e60c0870160a08801614854565b60ff161415611275576111af6111aa60e0870160c08801614683565b61238c565b60016111c160e0880160c08901614854565b60ff16146112115760405162461bcd60e51b815260206004820152601f60248201527f696e74656e742e6b696e642073686f756c64206265204b494e445f53454c4c006044820152606401610ba9565b61127060808601356112266020890189614683565b61123360208a018a6152cc565b61124360608c0160408d01614683565b60608c013560808d013561125d60e08e0160c08f01614683565b61126b6101408f018f615315565b6123d3565b6116a2565b600261128760c0870160a08801614854565b60ff161415611364576112a36111aa60e0870160c08801614683565b60026112b560e0880160c08901614854565b60ff16146113055760405162461bcd60e51b815260206004820152601e60248201527f696e74656e742e6b696e642073686f756c64206265204b494e445f42555900006044820152606401610ba9565b611270608086013561131a6020890189614683565b61132a60e0890160c08a01614683565b61133760208b018b6152cc565b61134760608d0160408e01614683565b60608d013560808e013561135f6101408f018f615315565b6126cd565b600361137660c0870160a08801614854565b60ff1614156113da576113926111aa60e0870160c08801614683565b61127060808601356113aa60e0880160c08901614683565b6113bb610100890160e08a01614683565b6101008901356113cf6101608b018b6152cc565b8b6101800135612983565b60046113ec60c0870160a08801614854565b60ff161415611433576114086111aa60e0870160c08801614683565b611270608086013561142060e0880160c08901614683565b61142e610140890189615315565b612c87565b600561144560c0870160a08801614854565b60ff16141561145b576112708560800135612e5c565b600661146d60c0870160a08801614854565b60ff161415611483576112708560800135612f56565b600761149560c0870160a08801614854565b60ff16141561157b576114b16111aa60e0870160c08801614683565b60036114c360e0880160c08901614854565b60ff161461151e5760405162461bcd60e51b815260206004820152602260248201527f696e74656e742e6b696e642073686f756c64206265204b494e445f415543544960448201526127a760f11b6064820152608401610ba9565b61127060808601356115336020890189614683565b61154060208a018a6152cc565b61155060608c0160408d01614683565b60608c013560808d013561156a60e08e0160c08f01614683565b8d61010001358e6101200135613167565b600861158d60c0870160a08801614854565b60ff1614156115b15761127060808601356115ac610140880188615315565b6137e4565b60096115c360c0870160a08801614854565b60ff16141561166d576115df6111aa60e0870160c08801614683565b6115ec6020870187614683565b6001600160a01b031661160560e0870160c08801614683565b6001600160a01b0316146116525760405162461bcd60e51b81526020600482015260146024820152731bdb9b1e481cd95b1b195c8818d85b8818d85b1b60621b6044820152606401610ba9565b6112706080860135611668610140880188615315565b613840565b60405162461bcd60e51b815260206004820152600a602482015269696d706f737369626c6560b01b6044820152606401610ba9565b5050600160005550505050565b60095460009060ff166116d45760405162461bcd60e51b8152600401610ba990614de2565b5063bc197c8160e01b98975050505050505050565b600081815260026020819052604082206006015460ff1614610b42565b600260005414156117295760405162461bcd60e51b8152600401610ba990614e19565b60026000556117366122ed565b60005b81811015610da75761176283838381811061175657611756614e50565b9050602002013561396f565b8061176c81614ea0565b915050611739565b61177c61206f565b61179b8260009081526002602052604090206006015460ff1660031490565b6117d55760405162461bcd60e51b815260206004820152600b60248201526a3737ba1030bab1ba34b7b760a91b6044820152606401610ba9565b600082815260026020526040902060060154610100900460ff16156118275760405162461bcd60e51b81526020600482015260086024820152673737ba1037b832b760c11b6044820152606401610ba9565b60008281526002602052604090208161185457805461185490849030906001600160a01b031660006139f4565b60028101546001820154600483015461187a926001600160a01b03908116921690612194565b60068101805461ff0019166102001790556040518390600080516020615848833981519152906118ab9084906153b2565b60405180910390a2505050565b600260005414156118db5760405162461bcd60e51b8152600401610ba990614e19565b60026000556118e86122ed565b4282604001511161192e5760405162461bcd60e51b815260206004820152601060248201526f191958591b1a5b99481c995858da195960821b6044820152606401610ba9565b6119638183604051602001611943919061546d565b604051602081830303815290604052805190602001208460200151610be8565b6119a15760405162461bcd60e51b815260206004820152600f60248201526e39b4b3b730ba3ab9329032b93937b960891b6044820152606401610ba9565b60005b826080015151811015611a6c57826080015181815181106119c7576119c7614e50565b6020026020010151600001516001600160a01b03166342842e0e338560200151866080015185815181106119fd576119fd614e50565b6020026020010151602001516040518463ffffffff1660e01b8152600401611a2793929190614e66565b600060405180830381600087803b158015611a4157600080fd5b505af1158015611a55573d6000803e3d6000fd5b505050508080611a6490614ea0565b9150506119a4565b5060005b826060015151811015611b385782606001518181518110611a9357611a93614e50565b6020026020010151600001516001600160a01b03166342842e0e84602001513386606001518581518110611ac957611ac9614e50565b6020026020010151602001516040518463ffffffff1660e01b8152600401611af393929190614e66565b600060405180830381600087803b158015611b0d57600080fd5b505af1158015611b21573d6000803e3d6000fd5b505050508080611b3090614ea0565b915050611a70565b507f92060d15ec9a14885865b744d2efb1fff3cab53411058a530f51d480288a864c828233604051611b6c93929190615480565b60405180910390a150506001600055565b60095460009060ff16611ba25760405162461bcd60e51b8152600401610ba990614de2565b5063f23a6e6160e01b9695505050505050565b611bbd61206f565b6001600160a01b038116611c225760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ba9565b611c2b8161211e565b50565b611c3661206f565b8015611c61576001600160a01b0382166000908152600660205260409020805460ff19169055611c85565b6001600160a01b0382166000908152600660205260409020805460ff191660011790555b604080516001600160a01b038416815282151560208201527f90d56af4745c314d9b45054b55dc973378c558c1ad1554bccc70d39aa63a2cc5910160405180910390a15050565b60008281526002602052604081206006015460ff16611d1c5760405162461bcd60e51b815260206004820152600c60248201526b6e6f20696e76656e746f727960a01b6044820152606401610ba9565b60005b6000848152600560205260409020548110156120655760008481526004602090815260408083208484529091529020600381015460ff16611d5f57612052565b600381015460ff1660011415611f3c57805460018201546040516331a9108f60e11b81526001600160a01b03928316928716918391636352211e91611daa9160040190815260200190565b60206040518083038186803b158015611dc257600080fd5b505afa158015611dd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfa91906154be565b6001600160a01b0316148015611f205750600182015460405163020604bf60e21b815230916001600160a01b0384169163081812fc91611e409160040190815260200190565b60206040518083038186803b158015611e5857600080fd5b505afa158015611e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9091906154be565b6001600160a01b03161480611f20575060405163e985e9c560e01b81526001600160a01b03868116600483015230602483015282169063e985e9c5906044015b60206040518083038186803b158015611ee857600080fd5b505afa158015611efc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2091906154db565b15611f2a57611f36565b60009350505050610b23565b50612052565b600381015460ff166002141561201657805460028201546001830154604051627eeac760e11b81526001600160a01b0388811660048301526024820192909252921691829062fdd58e9060440160206040518083038186803b158015611fa157600080fd5b505afa158015611fb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd991906154f8565b10158015611f20575060405163e985e9c560e01b81526001600160a01b03868116600483015230602483015282169063e985e9c590604401611ed0565b60405162461bcd60e51b81526020600482015260116024820152703ab739bab83837b93a32b2103a37b5b2b760791b6044820152606401610ba9565b508061205d81614ea0565b915050611d1f565b5060019392505050565b6001546001600160a01b03163314610bd45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ba9565b6120d1613bed565b6001805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080600061217f8585613c3d565b9150915061218c81613c83565b509392505050565b8061219e57505050565b6001600160a01b0382166121f45760405162461bcd60e51b815260206004820152601d60248201527f63616e6e6f74207472616e7366657220746f20616464726573732830290000006044820152606401610ba9565b6001600160a01b03831661229657604051632e1a7d4d60e01b8152600481018290526001602960991b0190632e1a7d4d90602401600060405180830381600087803b15801561224257600080fd5b505af1158015612256573d6000803e3d6000fd5b50506040516001600160a01b038516925083156108fc02915083906000818181858888f19350505050158015612290573d6000803e3d6000fd5b50505050565b610c7b6001600160a01b0384168383613e3e565b6122b26122ed565b6001805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121013390565b600154600160a01b900460ff1615610bd45760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610ba9565b60ff81161580159061234f5750600a60ff8216105b611c2b5760405162461bcd60e51b815260206004820152600e60248201526d696e76616c6964206f70636f646560901b6044820152606401610ba9565b6001600160a01b0381163314611c2b5760405162461bcd60e51b815260206004820152600c60248201526b3bb937b7339039b2b73232b960a11b6044820152606401610ba9565b60008981526002602052604090206006015460ff16156124245760405162461bcd60e51b815260206004820152600c60248201526b191d5c1b1a58d85d19481a5960a21b6044820152606401610ba9565b42831161246c5760405162461bcd60e51b81526020600482015260166024820152751cd95b1b081a185cc8185b1c9958591e48195b99195960521b6044820152606401610ba9565b612477898888613ea1565b61248489898460016139f4565b6001600160a01b038516612511573484146124b15760405162461bcd60e51b8152600401610ba990615511565b6001602960991b016001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156124f357600080fd5b505af1158015612507573d6000803e3d6000fd5b5050505050612526565b6125266001600160a01b038616833087613f53565b604051806101000160405280896001600160a01b03168152602001836001600160a01b03168152602001866001600160a01b03168152602001858152602001858152602001848152602001600160ff168152602001600160ff16815250600260008b815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff021916908360ff16021790555060e08201518160060160016101000a81548160ff021916908360ff16021790555090505088600080516020615848833981519152600260008c81526020019081526020016000206040516126b091906153b2565b60405180910390a26126c28982613f74565b505050505050505050565b60008981526002602052604090206006015460ff161561272f5760405162461bcd60e51b815260206004820152601860248201527f696e76656e746f727920616c72656164792065786973747300000000000000006044820152606401610ba9565b4282116127765760405162461bcd60e51b8152602060048201526015602482015274189d5e481a185cc8185b1c9958591e48195b991959605a1b6044820152606401610ba9565b6001600160a01b0384166127cc5760405162461bcd60e51b815260206004820152601760248201527f63616e6e6f7420757365206e617469766520746f6b656e0000000000000000006044820152606401610ba9565b6127d7898787613ea1565b6127e489888a60016139f4565b6127f96001600160a01b038516893086613f53565b604051806101000160405280886001600160a01b03168152602001896001600160a01b03168152602001856001600160a01b03168152602001848152602001848152602001838152602001600260ff168152602001600160ff16815250600260008b815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff021916908360ff16021790555060e08201518160060160016101000a81548160ff021916908360ff16021790555090505088600080516020615848833981519152600260008c81526020019081526020016000206040516126b091906153b2565b60008781526002602052604090206006015460ff16156129e55760405162461bcd60e51b815260206004820152601a60248201527f696e76656e746f7279496420616c7265616479206578697374730000000000006044820152606401610ba9565b428111612a3e5760405162461bcd60e51b815260206004820152602160248201527f646561646c696e65206d7573742062652067726561746572207468616e206e6f6044820152607760f81b6064820152608401610ba9565b612a49878484613ea1565b6001600160a01b038516612ad657348414612a765760405162461bcd60e51b8152600401610ba990615511565b6001602960991b016001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ab857600080fd5b505af1158015612acc573d6000803e3d6000fd5b5050505050612aeb565b612aeb6001600160a01b038616873087613f53565b60405180610100016040528060006001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b03168152602001858152602001858152602001828152602001600260ff168152602001600060ff168152506002600089815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff021916908360ff16021790555060e08201518160060160016101000a81548160ff021916908360ff16021790555090505086600080516020615848833981519152600260008a8152602001908152602001600020604051612c7691906153b2565b60405180910390a250505050505050565b60008381526002602081905260409091206006015460ff1614612ce05760405162461bcd60e51b81526020600482015260116024820152701a5908191bd95cc81b9bdd08195e1a5cdd607a1b6044820152606401610ba9565b60008381526002602052604090206006810154610100900460ff1615612d335760405162461bcd60e51b81526020600482015260086024820152673737ba1037b832b760c11b6044820152606401610ba9565b612d3d8484611ccc565b612d7f5760405162461bcd60e51b8152602060048201526013602482015272189d5b991b19481b9bdd08185c1c1c9bdd9959606a1b6044820152606401610ba9565b6000848152600260205260409020600501544210612dd35760405162461bcd60e51b8152602060048201526011602482015270189d5e481bd999995c88195e1c1a5c9959607a1b6044820152606401610ba9565b60068101805461ff00191661010017905580546001600160a01b038085166001600160a01b0319909216919091178255600182810154612e1a9287928792909116906139f4565b8360008051602061584883398151915260026000878152602001908152602001600020604051612e4a91906153b2565b60405180910390a26122908483613f74565b60008181526002602081905260409091206006015460ff16148015612e985750600081815260026020526040902060060154610100900460ff16155b612ed35760405162461bcd60e51b815260206004820152600c60248201526b6e6f74206f70656e2062757960a01b6044820152606401610ba9565b600081815260026020819052604090912060068101805461ff0019166102001790559081015460018201546004830154612f1a926001600160a01b03908116921690612194565b8160008051602061584883398151915260026000858152602001908152602001600020604051612f4a91906153b2565b60405180910390a25050565b33612f778260009081526002602081905260409091206006015460ff161490565b8015612f9a5750600082815260026020526040902060060154610100900460ff16155b612fd55760405162461bcd60e51b815260206004820152600c60248201526b6e6f74206f70656e2062757960a01b6044820152606401610ba9565b60005b6000838152600560205260409020548110156131595760008381526004602090815260408083208484529091529020600381015460ff16600114156130fe57805460018201546040516331a9108f60e11b81526001600160a01b03928316928616918391636352211e916130529160040190815260200190565b60206040518083038186803b15801561306a57600080fd5b505afa15801561307e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a291906154be565b6001600160a01b0316146130f85760405162461bcd60e51b815260206004820152601960248201527f63616c6c657220646f6573206e6f74206f776e20746f6b656e000000000000006044820152606401610ba9565b50613146565b60405162461bcd60e51b815260206004820152601b60248201527f63616e6e6f742072656a656374206e6f6e2d37323120746f6b656e00000000006044820152606401610ba9565b508061315181614ea0565b915050612fd8565b5061316382612e5c565b5050565b6009805460ff19166001179055620f424081106131c65760405162461bcd60e51b815260206004820152601760248201527f696e63656e746976655261746520746f6f206c617267650000000000000000006044820152606401610ba9565b6001600160a01b038616613253573482146131f35760405162461bcd60e51b8152600401610ba990615511565b6001602960991b016001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561323557600080fd5b505af1158015613249573d6000803e3d6000fd5b5050505050613268565b6132686001600160a01b038716843085613f53565b6132878a60009081526002602052604090206006015460ff1660031490565b1561350b5760008a815260026020526040902080546001600160a01b038b81169116146132ee5760405162461bcd60e51b81526020600482015260156024820152740e6cad8d8cae440c8decae640dcdee840dac2e8c6d605b1b6044820152606401610ba9565b6006810154610100900460ff161561333b5760405162461bcd60e51b815260206004820152601060248201526f30bab1ba34b7b7103737ba1037b832b760811b6044820152606401610ba9565b4281600501541161337e5760405162461bcd60e51b815260206004820152600d60248201526c185d58dd1a5bdb88195b991959609a1b6044820152606401610ba9565b620f42406007548260030154613394919061553d565b61339e919061555c565b81600301546133ad919061557e565b8310156133f05760405162461bcd60e51b815260206004820152601160248201527062696420707269636520746f6f206c6f7760781b6044820152606401610ba9565b6000620f4240613400848661553d565b61340a919061555c565b60018301546004840154919250613437918a916001600160a01b03169061343290859061557e565b612194565b600182015460048301548d917fa48bcf3362c21033397c03b92fb367d1962ba13b5bde0dfe491f9d88abb59e3f916001600160a01b039091169061347c90859061557e565b604080516001600160a01b03909316835260208301919091520160405180910390a26001820180546001600160a01b0319166001600160a01b038716179055600382018490556134cc8185615596565b600483015560058201546008546134e3904261557e565b10613504576008548260050160008282546134fe919061557e565b90915550505b5050613796565b60008a81526002602052604090206006015460ff161561356d5760405162461bcd60e51b815260206004820152601860248201527f696e76656e746f7279206973206e6f742061756374696f6e00000000000000006044820152606401610ba9565b848210156135bd5760405162461bcd60e51b815260206004820152601a60248201527f626964206c6f776572207468616e2073746172742070726963650000000000006044820152606401610ba9565b4284116135fc5760405162461bcd60e51b815260206004820152600d60248201526c185d58dd1a5bdb88195b991959609a1b6044820152606401610ba9565b6008548490819061360d904261557e565b106136225760085461361f908261557e565b90505b6040518061010001604052808b6001600160a01b03168152602001856001600160a01b03168152602001886001600160a01b03168152602001848152602001848152602001828152602001600360ff168152602001600060ff16815250600260008d815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff021916908360ff16021790555060e08201518160060160016101000a81548160ff021916908360ff1602179055509050506137878b8a8a613ea1565b6137948b8b3060006139f4565b505b89600080516020615848833981519152600260008d81526020019081526020016000206040516137c691906153b2565b60405180910390a250506009805460ff191690555050505050505050565b600082815260026020526040902060050154421161383a5760405162461bcd60e51b815260206004820152601360248201527261756374696f6e207374696c6c20676f696e6760681b6044820152606401610ba9565b61316382825b61385f8260009081526002602052604090206006015460ff1660031490565b6138a45760405162461bcd60e51b8152602060048201526016602482015275185d58dd1a5bdb88191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610ba9565b600082815260026020526040902060060154610100900460ff16156138fe5760405162461bcd60e51b815260206004820152601060248201526f30bab1ba34b7b7103737ba1037b832b760811b6044820152606401610ba9565b6000828152600260205260409081902060068101805461ff001916610100179055905183906000805160206158488339815191529061393e9084906153b2565b60405180910390a260018082015461396591859130916001600160a01b03909116906139f4565b610c7b8383613f74565b600081815260026020526040902060018101546001600160a01b03163314806139a957506000828152600260205260409020600501544210155b6139eb5760405162461bcd60e51b815260206004820152601360248201527231b0b63632b91034b9903737ba10313abcb2b960691b6044820152606401610ba9565b61316382612e5c565b600084815260056020526040812054905b81811015613be55760008681526004602090815260408083208484529091529020600381015460ff16613b1c578315613b17576001600160a01b03851615801590613a5957506001600160a01b0385163014155b613ab15760405162461bcd60e51b8152602060048201526024808201527f6d696e74207461726765742063616e6e6f74206265207a65726f206f72206d616044820152631c9ad95d60e21b6064820152608401610ba9565b805460405163b510391f60e01b81526001600160a01b039091169063b510391f90613ae4908890600480870191016155ad565b600060405180830381600087803b158015613afe57600080fd5b505af1158015613b12573d6000803e3d6000fd5b505050505b613bd2565b600381015460ff1660011415613b625780546001820154604051632142170760e11b81526001600160a01b03909216916342842e0e91613ae4918a918a91600401614e66565b600381015460ff166002141561201657805460018201546002830154604051637921219560e11b81526001600160a01b038a8116600483015289811660248301526044820193909352606481019190915260a06084820152600060a482015291169063f242432a9060c401613ae4565b5080613bdd81614ea0565b915050613a05565b505050505050565b600154600160a01b900460ff16610bd45760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610ba9565b600080825160411415613c745760208301516040840151606085015160001a613c688782858561412c565b94509450505050613c7c565b506000905060025b9250929050565b6000816004811115613c9757613c97615642565b1415613ca05750565b6001816004811115613cb457613cb4615642565b1415613d025760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610ba9565b6002816004811115613d1657613d16615642565b1415613d645760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610ba9565b6003816004811115613d7857613d78615642565b1415613dd15760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610ba9565b6004816004811115613de557613de5615642565b1415611c2b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610ba9565b6040516001600160a01b038316602482015260448101829052610c7b90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614219565b80613edd5760405162461bcd60e51b815260206004820152600c60248201526b656d7074792062756e646c6560a01b6044820152606401610ba9565b60008381526005602052604081208290555b8181101561229057828282818110613f0957613f09614e50565b9050602002810190613f1b9190615658565b60008581526004602090815260408083208584529091529020613f3e8282615774565b50819050613f4b81614ea0565b915050613eef565b612290846323b872dd60e01b858585604051602401613e6a93929190614e66565b6000828152600260205260409020600681015460ff1615158015613fa457506006810154610100900460ff166001145b613ff05760405162461bcd60e51b815260206004820152601b60248201527f6e6f20696e76656e746f7279206f72207374617465206572726f7200000000006044820152606401610ba9565b61400383613ffe84806152cc565b6142eb565b60038101546000620f424061401c60208601358461553d565b614026919061555c565b90506000620f424061403c60408701358561553d565b614046919061555c565b90506000620f424061405c60608801358661553d565b614066919061555c565b90506000818385886004015461407c9190615596565b6140869190615596565b6140909190615596565b600287015487549192506140b1916001600160a01b03918216911683612194565b600286015460018701546140d2916001600160a01b03908116911684612194565b60028601546140fa906001600160a01b03166140f460a08a0160808b01614683565b86612194565b6002860154614122906001600160a01b031661411c60c08a0160a08b01614683565b85612194565b5050505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156141635750600090506003614210565b8460ff16601b1415801561417b57508460ff16601c14155b1561418c5750600090506004614210565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156141e0573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661420957600060019250925050614210565b9150600090505b94509492505050565b600061426e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166143c59092919063ffffffff16565b805190915015610c7b578080602001905181019061428c91906154db565b610c7b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610ba9565b60005b8181101561229057600083838381811061430a5761430a614e50565b60209081029290920135600081815260039093526040909220549192505060ff161561436f5760405162461bcd60e51b815260206004820152601460248201527318dbdd5c1bdb88185b1c9958591e481cdc195b9d60621b6044820152606401610ba9565b600081815260036020526040808220805460ff1916600117905551829187917f6aa71aa6b7aa6036ace4e4ceefbab7d89c4afb7fcfa1a3680499d7b37d32c82f9190a350806143bd81614ea0565b9150506142ee565b60606143d484846000856143dc565b949350505050565b60608247101561443d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610ba9565b6001600160a01b0385163b6144945760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ba9565b600080866001600160a01b031685876040516144b09190615822565b60006040518083038185875af1925050503d80600081146144ed576040519150601f19603f3d011682016040523d82523d6000602084013e6144f2565b606091505b509150915061450282828661450d565b979650505050505050565b6060831561451c575081610c61565b82511561452c5782518084602001fd5b8160405162461bcd60e51b8152600401610ba99190615834565b6000806040838503121561455957600080fd5b50508035926020909101359150565b60006020828403121561457a57600080fd5b81356001600160e01b031981168114610c6157600080fd5b6000602082840312156145a457600080fd5b5035919050565b6001600160a01b0381168114611c2b57600080fd5b80356145cb816145ab565b919050565b60008083601f8401126145e257600080fd5b5081356001600160401b038111156145f957600080fd5b602083019150836020828501011115613c7c57600080fd5b60008060008060006080868803121561462957600080fd5b8535614634816145ab565b94506020860135614644816145ab565b93506040860135925060608601356001600160401b0381111561466657600080fd5b614672888289016145d0565b969995985093965092949392505050565b60006020828403121561469557600080fd5b8135610c61816145ab565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156146d8576146d86146a0565b60405290565b60405160a081016001600160401b03811182821017156146d8576146d86146a0565b604051601f8201601f191681016001600160401b0381118282101715614728576147286146a0565b604052919050565b600082601f83011261474157600080fd5b81356001600160401b0381111561475a5761475a6146a0565b61476d601f8201601f1916602001614700565b81815284602083860101111561478257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000606084860312156147b457600080fd5b83356001600160401b038111156147ca57600080fd5b6147d686828701614730565b9350506020840135915060408401356147ee816145ab565b809150509250925092565b60008060006060848603121561480e57600080fd5b8335614819816145ab565b92506020840135614829816145ab565b929592945050506040919091013590565b60ff81168114611c2b57600080fd5b80356145cb8161483a565b60006020828403121561486657600080fd5b8135610c618161483a565b600082601f83011261488257600080fd5b813560206001600160401b0382111561489d5761489d6146a0565b6148ab818360051b01614700565b82815260069290921b840181019181810190868411156148ca57600080fd5b8286015b8481101561491257604081890312156148e75760008081fd5b6148ef6146b6565b81356148fa816145ab565b815281850135858201528352918301916040016148ce565b509695505050505050565b6000806040838503121561493057600080fd5b823561493b816145ab565b915060208301356001600160401b0381111561495657600080fd5b61496285828601614871565b9150509250929050565b60005b8381101561498757818101518382015260200161496f565b838111156122905750506000910152565b600081518084526149b081602086016020860161496c565b601f01601f19169290920160200192915050565b60018060a01b038616815284602082015283604082015260ff8316606082015260a06080820152600061450260a0830184614998565b60006101a08284031215614a0d57600080fd5b50919050565b60008060008060008060808789031215614a2c57600080fd5b86356001600160401b0380821115614a4357600080fd5b9088019060e0828b031215614a5757600080fd5b90965060208801359080821115614a6d57600080fd5b614a798a838b016149fa565b96506040890135915080821115614a8f57600080fd5b614a9b8a838b016145d0565b90965094506060890135915080821115614ab457600080fd5b50614ac189828a016145d0565b979a9699509497509295939492505050565b60008083601f840112614ae557600080fd5b5081356001600160401b03811115614afc57600080fd5b6020830191508360208260051b8501011115613c7c57600080fd5b60008060008060008060008060a0898b031215614b3357600080fd5b8835614b3e816145ab565b97506020890135614b4e816145ab565b965060408901356001600160401b0380821115614b6a57600080fd5b614b768c838d01614ad3565b909850965060608b0135915080821115614b8f57600080fd5b614b9b8c838d01614ad3565b909650945060808b0135915080821115614bb457600080fd5b50614bc18b828c016145d0565b999c989b5096995094979396929594505050565b60008060208385031215614be857600080fd5b82356001600160401b03811115614bfe57600080fd5b614c0a85828601614ad3565b90969095509350505050565b8015158114611c2b57600080fd5b60008060408385031215614c3757600080fd5b823591506020830135614c4981614c16565b809150509250929050565b60008060408385031215614c6757600080fd5b82356001600160401b0380821115614c7e57600080fd5b9084019060a08287031215614c9257600080fd5b614c9a6146de565b823581526020830135614cac816145ab565b602082015260408381013590820152606083013582811115614ccd57600080fd5b614cd988828601614871565b606083015250608083013582811115614cf157600080fd5b614cfd88828601614871565b60808301525093506020850135915080821115614d1957600080fd5b5061496285828601614730565b60008060008060008060a08789031215614d3f57600080fd5b8635614d4a816145ab565b95506020870135614d5a816145ab565b9450604087013593506060870135925060808701356001600160401b03811115614d8357600080fd5b614ac189828a016145d0565b60008060408385031215614da257600080fd5b8235614dad816145ab565b91506020830135614c4981614c16565b60008060408385031215614dd057600080fd5b823591506020830135614c49816145ab565b6020808252601f908201527f63616e206e6f74207472616e7366657220746f6b656e206469726563746c7900604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b600052601160045260246000fd5b6000600019821415614eb457614eb4614e8a565b5060010190565b600181811c90821680614ecf57607f821691505b60208210811415614a0d57634e487b7160e01b600052602260045260246000fd5b6000823560be19833603018112614f0657600080fd5b90910192915050565b6000808335601e19843603018112614f2657600080fd5b83016020810192503590506001600160401b03811115614f4557600080fd5b8060051b3603831315613c7c57600080fd5b6000614f638283614f0f565b60c080865285018190526001600160fb1b03811115614f8157600080fd5b60051b808260e087013760e081860101915050600081526020830135602085015260408301356040850152606083013560608501526080830135614fc4816145ab565b6001600160a01b03166080850152614fde60a084016145c0565b6001600160a01b03811660a0860152509392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b81835260006020808501808196508560051b810191508460005b878110156151065782840389528135609e1988360301811261505957600080fd5b870160a08135615068816145ab565b6001600160a01b031686528187013587870152604080830135908701526060808301356150948161483a565b60ff169087015260808281013536849003601e190181126150b457600080fd5b830180356001600160401b038111156150cc57600080fd5b8036038513156150db57600080fd5b83838a01526150ef848a01828c8501614ff5565b9d8a019d9850505093870193505050600101615038565b5091979650505050505050565b6020815281356020820152600061512c602084016145c0565b6001600160a01b0381166040840152506040830135606083015260608301356080830152608083013560a083015261516660a08401614849565b60ff811660c08401525061517c60c084016145c0565b6001600160a01b03811660e08401525061519860e084016145c0565b6101006151af818501836001600160a01b03169052565b610120915080850135828501525061014081850135818501526151d481860186614ef0565b9150506101a061016081818601526151f06101c0860184614f57565b92506151fe81870187614f0f565b9150610180601f19878603018188015261521985848461501e565b970135959092019490945250929392505050565b602081526000823561523e816145ab565b60018060a01b03808216602085015261525a6020860186614f0f565b925060e060408601526152726101008601848361501e565b9250506040850135615283816145ab565b8181166060860152505060608401356080840152608084013560a084015260a084013560c084015260c08401356152b98161483a565b60ff1660e0939093019290925250919050565b6000808335601e198436030181126152e357600080fd5b8301803591506001600160401b038211156152fd57600080fd5b6020019150600581901b3603821315613c7c57600080fd5b6000823560be1983360301811261532b57600080fd5b9190910192915050565b6153578261534a83546001600160a01b031690565b6001600160a01b03169052565b60018101546001600160a01b03908116602084015260028201541660408301526003810154606083015260048101546080830152600581015460a08301526006015460ff80821660c084015260089190911c1660e090910152565b6101008101610b238284615335565b600081518084526020808501945080840160005b8381101561540557815180516001600160a01b0316885283015183880152604090960195908201906001016153d5565b509495945050505050565b8051825260018060a01b036020820151166020830152604081015160408301526000606082015160a0606085015261544b60a08501826153c1565b90506080830151848203608086015261546482826153c1565b95945050505050565b602081526000610c616020830184615410565b6060815260006154936060830186615410565b82810360208401526154a58186614998565b91505060018060a01b0383166040830152949350505050565b6000602082840312156154d057600080fd5b8151610c61816145ab565b6000602082840312156154ed57600080fd5b8151610c6181614c16565b60006020828403121561550a57600080fd5b5051919050565b6020808252601290820152717072696365203d3d206d73672e76616c756560701b604082015260600190565b600081600019048311821515161561555757615557614e8a565b500290565b60008261557957634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561559157615591614e8a565b500190565b6000828210156155a8576155a8614e8a565b500390565b60018060a01b038316815260006020604081840152600084546155cf81614ebb565b80604087015260606001808416600081146155f1576001811461560557615633565b60ff19851689840152608089019550615633565b896000528660002060005b8581101561562b5781548b8201860152908301908801615610565b8a0184019650505b50939998505050505050505050565b634e487b7160e01b600052602160045260246000fd5b60008235609e1983360301811261532b57600080fd5b601f821115610c7b57600081815260208120601f850160051c810160208610156156955750805b601f850160051c820191505b81811015613be5578281556001016156a1565b6001600160401b038311156156cb576156cb6146a0565b6156df836156d98354614ebb565b8361566e565b6000601f84116001811461571357600085156156fb5750838201355b600019600387901b1c1916600186901b17835561576d565b600083815260209020601f19861690835b828110156157445786850135825560209485019460019092019101615724565b50868210156157615760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b813561577f816145ab565b81546001600160a01b0319166001600160a01b039190911617815560208201356001820155604082013560028201556003810160608301356157c08161483a565b815460ff191660ff91909116179055608082013536839003601e190181126157e757600080fd5b820180356001600160401b038111156157ff57600080fd5b60208201915080360382131561581457600080fd5b6122908183600486016156b4565b6000825161532b81846020870161496c565b602081526000610c61602083018461499856fe5beea7b3b87c573953fec05007114d17712e5775d364acc106d8da9e74849033a26469706673582212200b12bde3d8b5f1b5206191653f706969ba31b3859922a2251cd03b4762366abc64736f6c63430008090033", - ), - storage: storage{ - // ReentrancyGuard : uint256 private _status - "0x00": "0x1", - // Ownable : address private _owner - "0x01": "0x079a889eB69013d451EcF45377258948116e2b3e", - }, - }, - { - contract: multicall, - // commit: https://github.com/oasysgames/oasys-ecosystem-contract/blob/b9d43020001d9c8ae5d8a0e571726e378314ce9b/contracts/makerdao/Multicall.sol - code: mustDecodeCode( - "0x608060405234801561001057600080fd5b50600436106100885760003560e01c806372425d9d1161005b57806372425d9d146100e657806386d516e8146100ec578063a8b0574e146100f2578063ee82ac5e1461010057600080fd5b80630f28c97d1461008d578063252dba42146100a257806327e86d6e146100c35780634d2301cc146100cb575b600080fd5b425b6040519081526020015b60405180910390f35b6100b56100b03660046102f1565b610112565b60405161009992919061047f565b61008f610252565b61008f6100d9366004610501565b6001600160a01b03163190565b4461008f565b4561008f565b604051418152602001610099565b61008f61010e366004610523565b4090565b8051439060609067ffffffffffffffff81111561013157610131610265565b60405190808252806020026020018201604052801561016457816020015b606081526020019060019003908161014f5790505b50905060005b835181101561024c576000808583815181106101885761018861053c565b6020026020010151600001516001600160a01b03168684815181106101af576101af61053c565b6020026020010151602001516040516101c89190610552565b6000604051808303816000865af19150503d8060008114610205576040519150601f19603f3d011682016040523d82523d6000602084013e61020a565b606091505b50915091508161021957600080fd5b8084848151811061022c5761022c61053c565b60200260200101819052505050808061024490610584565b91505061016a565b50915091565b600061025f60014361059f565b40905090565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561029e5761029e610265565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156102cd576102cd610265565b604052919050565b80356001600160a01b03811681146102ec57600080fd5b919050565b6000602080838503121561030457600080fd5b823567ffffffffffffffff8082111561031c57600080fd5b818501915085601f83011261033057600080fd5b81358181111561034257610342610265565b8060051b6103518582016102a4565b918252838101850191858101908984111561036b57600080fd5b86860192505b83831015610442578235858111156103895760008081fd5b86016040601f19828d0381018213156103a25760008081fd5b6103aa61027b565b6103b58b85016102d5565b815282840135898111156103c95760008081fd5b8085019450508d603f8501126103df5760008081fd5b8a840135898111156103f3576103f3610265565b6104038c84601f840116016102a4565b92508083528e8482870101111561041a5760008081fd5b808486018d85013760009083018c0152808b0191909152845250509186019190860190610371565b9998505050505050505050565b60005b8381101561046a578181015183820152602001610452565b83811115610479576000848401525b50505050565b600060408201848352602060408185015281855180845260608601915060608160051b870101935082870160005b828110156104f357878603605f19018452815180518088526104d481888a0189850161044f565b601f01601f1916969096018501955092840192908401906001016104ad565b509398975050505050505050565b60006020828403121561051357600080fd5b61051c826102d5565b9392505050565b60006020828403121561053557600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b6000825161056481846020870161044f565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b60006000198214156105985761059861056e565b5060010190565b6000828210156105b1576105b161056e565b50039056fea26469706673582212208de8f38e3d3ba940d25e5a11f4e48a1ce427d474288742e0c5d088cc2c690c9764736f6c63430008090033", - ), - }, - { - contract: multicall2, - // commit: https://github.com/oasysgames/oasys-ecosystem-contract/blob/b9d43020001d9c8ae5d8a0e571726e378314ce9b/contracts/makerdao/Multicall2.sol - code: mustDecodeCode( - "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806372425d9d1161007157806372425d9d1461013a57806386d516e814610140578063a8b0574e14610146578063bce38bd714610154578063c3077fa914610174578063ee82ac5e1461018757600080fd5b80630f28c97d146100b9578063252dba42146100ce57806327e86d6e146100ef578063399542e9146100f757806342cbb15c146101195780634d2301cc1461011f575b600080fd5b425b6040519081526020015b60405180910390f35b6100e16100dc3660046106ea565b610199565b6040516100c5929190610783565b6100bb610321565b61010a6101053660046107ed565b610334565b6040516100c5939291906108aa565b436100bb565b6100bb61012d3660046108d2565b6001600160a01b03163190565b446100bb565b456100bb565b6040514181526020016100c5565b6101676101623660046107ed565b61034c565b6040516100c591906108f4565b61010a6101823660046106ea565b610506565b6100bb610195366004610907565b4090565b8051439060609067ffffffffffffffff8111156101b8576101b8610523565b6040519080825280602002602001820160405280156101eb57816020015b60608152602001906001900390816101d65790505b50905060005b835181101561031b5760008085838151811061020f5761020f610920565b6020026020010151600001516001600160a01b031686848151811061023657610236610920565b60200260200101516020015160405161024f9190610936565b6000604051808303816000865af19150503d806000811461028c576040519150601f19603f3d011682016040523d82523d6000602084013e610291565b606091505b5091509150816102e85760405162461bcd60e51b815260206004820181905260248201527f4d756c746963616c6c206167677265676174653a2063616c6c206661696c656460448201526064015b60405180910390fd5b808484815181106102fb576102fb610920565b60200260200101819052505050808061031390610968565b9150506101f1565b50915091565b600061032e600143610983565b40905090565b4380406060610343858561034c565b90509250925092565b6060815167ffffffffffffffff81111561036857610368610523565b6040519080825280602002602001820160405280156103ae57816020015b6040805180820190915260008152606060208201528152602001906001900390816103865790505b50905060005b82518110156104ff576000808483815181106103d2576103d2610920565b6020026020010151600001516001600160a01b03168584815181106103f9576103f9610920565b6020026020010151602001516040516104129190610936565b6000604051808303816000865af19150503d806000811461044f576040519150601f19603f3d011682016040523d82523d6000602084013e610454565b606091505b509150915085156104b657816104b65760405162461bcd60e51b815260206004820152602160248201527f4d756c746963616c6c32206167677265676174653a2063616c6c206661696c656044820152601960fa1b60648201526084016102df565b60405180604001604052808315158152602001828152508484815181106104df576104df610920565b6020026020010181905250505080806104f790610968565b9150506103b4565b5092915050565b6000806060610516600185610334565b9196909550909350915050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561055c5761055c610523565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561058b5761058b610523565b604052919050565b80356001600160a01b03811681146105aa57600080fd5b919050565b6000601f83818401126105c157600080fd5b8235602067ffffffffffffffff808311156105de576105de610523565b8260051b6105ed838201610562565b938452868101830193838101908986111561060757600080fd5b84890192505b858310156106dd578235848111156106255760008081fd5b89016040601f19828d03810182131561063e5760008081fd5b610646610539565b610651898501610593565b815282840135888111156106655760008081fd5b8085019450508d603f85011261067b5760008081fd5b888401358881111561068f5761068f610523565b61069e8a848e84011601610562565b92508083528e848287010111156106b55760008081fd5b808486018b85013760009083018a01528089019190915284525050918401919084019061060d565b9998505050505050505050565b6000602082840312156106fc57600080fd5b813567ffffffffffffffff81111561071357600080fd5b61071f848285016105af565b949350505050565b60005b8381101561074257818101518382015260200161072a565b83811115610751576000848401525b50505050565b6000815180845261076f816020860160208601610727565b601f01601f19169290920160200192915050565b600060408201848352602060408185015281855180845260608601915060608160051b870101935082870160005b828110156107df57605f198887030184526107cd868351610757565b955092840192908401906001016107b1565b509398975050505050505050565b6000806040838503121561080057600080fd5b8235801515811461081057600080fd5b9150602083013567ffffffffffffffff81111561082c57600080fd5b610838858286016105af565b9150509250929050565b6000815180845260208085019450848260051b860182860160005b8581101561089d5783830389528151805115158452850151604086850181905261088981860183610757565b9a87019a945050509084019060010161085d565b5090979650505050505050565b8381528260208201526060604082015260006108c96060830184610842565b95945050505050565b6000602082840312156108e457600080fd5b6108ed82610593565b9392505050565b6020815260006108ed6020830184610842565b60006020828403121561091957600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b60008251610948818460208701610727565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b600060001982141561097c5761097c610952565b5060010190565b60008282101561099557610995610952565b50039056fea2646970667358221220d6e6de3466f8d67fbc495bf6e5b50a558b6c659aa91c02374d57fd4ff42dccd964736f6c63430008090033", - ), - }, - } - - deployments4 = []*deployment{ - { - contract: stakeManager, - // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/2e5de435195ac05e208ce95d654a998cbe0fb3a1/contracts/StakeManager.sol - code: mustDecodeCode("0x6080604052600436106101f95760003560e01c8063724319911161010d578063ad71bd36116100a0578063e1aca3411161006f578063e1aca34114610688578063f3621e43146106a8578063f65a5ed2146106c8578063f8d6b1ab146106e8578063fa52c7d81461070857600080fd5b8063ad71bd36146105d0578063cbc0fac6146105f0578063d1f18ee114610610578063dbd61d871461066857600080fd5b806388325234116100dc57806388325234146105375780639043150b146105725780639168ae721461057a578063ac7475ed146105b057600080fd5b8063724319911461049857806374e2b63c146104c95780637b520aa8146104ee5780637befa74f1461052457600080fd5b80632b42ed8c1161019057806345367f231161015f57806345367f23146103e957806346dfce7b14610409578063485cc955146104385780635efc766e146104585780636b2b33691461047857600080fd5b80632b42ed8c146103405780632b47da521461037157806333f32d78146103a9578063428e8562146103c957600080fd5b8063195afea1116101cc578063195afea11461029d5780631c1b4f3a146102bd5780632168e8b4146102dd578063222263671461030b57600080fd5b806302fb4d85146101fe578063158ef93e146102205780631903cf161461024f578063190b92571461026f575b600080fd5b34801561020a57600080fd5b5061021e610219366004614408565b610777565b005b34801561022c57600080fd5b5060005461023a9060ff1681565b60405190151581526020015b60405180910390f35b34801561025b57600080fd5b5061021e61026a3660046144c6565b61097d565b34801561027b57600080fd5b5061028f61028a366004614570565b610b76565b604051908152602001610246565b3480156102a957600080fd5b5061028f6102b8366004614408565b610b97565b3480156102c957600080fd5b5061028f6102d8366004614570565b610bce565b3480156102e957600080fd5b506102fd6102f8366004614589565b610bde565b6040516102469291906145ef565b34801561031757600080fd5b5061032b610326366004614408565b610cc4565b60408051928352602083019190915201610246565b34801561034c57600080fd5b5061036061035b366004614611565b610d92565b60405161024695949392919061467c565b34801561037d57600080fd5b50600154610391906001600160a01b031681565b6040516001600160a01b039091168152602001610246565b3480156103b557600080fd5b5061028f6103c43660046146dc565b6110df565b3480156103d557600080fd5b5061021e6103e43660046144c6565b61129e565b3480156103f557600080fd5b5061028f610404366004614570565b611497565b34801561041557600080fd5b50610429610424366004614611565b61152d565b6040516102469392919061477b565b34801561044457600080fd5b5061021e6104533660046147b1565b61178a565b34801561046457600080fd5b50610391610473366004614570565b611809565b34801561048457600080fd5b5061021e6104933660046147ea565b611833565b3480156104a457600080fd5b506104b86104b3366004614807565b61197b565b604051610246959493929190614833565b3480156104d557600080fd5b506000546103919061010090046001600160a01b031681565b3480156104fa57600080fd5b506103916105093660046147ea565b6006602052600090815260409020546001600160a01b031681565b61021e6105323660046148bc565b611d37565b34801561054357600080fd5b506105576105523660046147ea565b611faf565b60408051938452602084019290925290820152606001610246565b61021e61202f565b34801561058657600080fd5b506103916105953660046147ea565b6007602052600090815260409020546001600160a01b031681565b3480156105bc57600080fd5b5061021e6105cb3660046147ea565b612064565b3480156105dc57600080fd5b506102fd6105eb366004614589565b61212b565b3480156105fc57600080fd5b5061021e61060b366004614408565b612209565b34801561061c57600080fd5b5061063061062b366004614408565b6122bb565b604080516001600160a01b0390961686529315156020860152911515928401929092529015156060830152608082015260a001610246565b34801561067457600080fd5b5061028f610683366004614901565b61244b565b34801561069457600080fd5b5061021e6106a33660046148bc565b612493565b3480156106b457600080fd5b5061021e6106c3366004614901565b6126cd565b3480156106d457600080fd5b506103916106e3366004614570565b6127d0565b3480156106f457600080fd5b5061021e6107033660046147ea565b6127e0565b34801561071457600080fd5b506107516107233660046147ea565b6004602052600090815260409020805460018201546006909201546001600160a01b03918216929091169083565b604080516001600160a01b03948516815293909216602084015290820152606001610246565b6001600160a01b0380831660009081526006602090815260408083205484168084526004909252909120549091166107c2576040516372898ae960e11b815260040160405180910390fd5b3341146107e257604051631cf4735960e01b815260040160405180910390fd5b6001600160a01b038084166000908152600660209081526040808320548416835260049182905280832083548251633fa4f24560e01b8152925191956108f5946101009092041692633fa4f2459281830192610120928290030181865afa158015610851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108759190614931565b600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ec91906149ac565b8491908761284a565b82546040519192506001600160a01b0316907f1647efd0ce9727dc31dc201c9d8d35ac687f7370adcacbd454afc6485ddabfda90600090a280156109765781546040518281526001600160a01b03909116907feb7d7a49847ec491969db21a0e31b234565a9923145a2d1b56a75c9e95825802906020015b60405180910390a25b5050505050565b6001600160a01b038281166000908152600460205260409020805484921633148015906109b7575060018101546001600160a01b03163314155b156109d557604051630101292160e31b815260040160405180910390fd5b6001600160a01b03808516600090815260046020526040902054859116610a0f576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8691906149c5565b15610aa457604051631e59ccd960e01b815260040160405180910390fd5b610b3d600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610afa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1e91906149ac565b6001600160a01b03871660009081526004602052604090209086612932565b846001600160a01b03167fc11dfc9c24621433bb10587dc4bbae26a33a4aff53914e0d4c9fddf224a8cb7d8560405161096d91906149e7565b60028181548110610b8657600080fd5b600091825260209091200154905081565b600080546001600160a01b038481168352600460205260408320610bc49290916101009091041684612944565b5090505b92915050565b60038181548110610b8657600080fd5b60606000610bf28484600580549050612ad7565b9093509050826001600160401b03811115610c0f57610c0f614434565b604051908082528060200260200182016040528015610c38578160200160208202803683370190505b50915060005b83811015610cbc576005610c528287614a10565b81548110610c6257610c62614a28565b9060005260206000200160009054906101000a90046001600160a01b0316838281518110610c9257610c92614a28565b6001600160a01b039092166020928302919091019091015280610cb481614a3e565b915050610c3e565b509250929050565b600080610d8760008411610d4e57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906149ac565b610d50565b835b6001600160a01b038616600090815260046020908152604080832093835260098401825280832054600a9094019091529020549091565b909590945092505050565b6001600160a01b038416600090815260076020526040812060609182918291829188610e3457600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2f91906149ac565b610e36565b885b9850610e488888600580549050612ad7565b9097509150866001600160401b03811115610e6557610e65614434565b604051908082528060200260200182016040528015610e8e578160200160208202803683370190505b509550866001600160401b03811115610ea957610ea9614434565b604051908082528060200260200182016040528015610ed2578160200160208202803683370190505b509450866001600160401b03811115610eed57610eed614434565b604051908082528060200260200182016040528015610f16578160200160208202803683370190505b509350866001600160401b03811115610f3157610f31614434565b604051908082528060200260200182016040528015610f5a578160200160208202803683370190505b50925060005b878110156110d2576005610f74828b614a10565b81548110610f8457610f84614a28565b9060005260206000200160009054906101000a90046001600160a01b0316878281518110610fb457610fb4614a28565b60200260200101906001600160a01b031690816001600160a01b031681525050611005878281518110610fe957610fe9614a28565b602002602001015160008c85612b0e909392919063ffffffff16565b86828151811061101757611017614a28565b60200260200101818152505061105487828151811061103857611038614a28565b602002602001015160018c85612b0e909392919063ffffffff16565b85828151811061106657611066614a28565b6020026020010181815250506110a387828151811061108757611087614a28565b602002602001015160028c85612b0e909392919063ffffffff16565b8482815181106110b5576110b5614a28565b6020908102919091010152806110ca81614a3e565b915050610f60565b5050945094509450945094565b600080600183600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c91906149ac565b6111669190614a59565b6111709190614a59565b845190915060005b848110156112955761118b600184614a10565b6000805460405163fcbb371b60e01b81526004810184905292955090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa1580156111df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112039190614931565b905060005b83811015611280576112628286600460008c868151811061122b5761122b614a28565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020612bcf9092919063ffffffff16565b61126c9087614a10565b95508061127881614a3e565b915050611208565b5050808061128d90614a3e565b915050611178565b50505092915050565b6001600160a01b038281166000908152600460205260409020805484921633148015906112d8575060018101546001600160a01b03163314155b156112f657604051630101292160e31b815260040160405180910390fd5b6001600160a01b03808516600090815260046020526040902054859116611330576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015611383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a791906149c5565b156113c557604051631e59ccd960e01b815260040160405180910390fd5b61145e600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561141b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143f91906149ac565b6001600160a01b03871660009081526004602052604090209086612d01565b846001600160a01b03167f0ad9bf1b8c026a174a2f30954417002a6ea00c9b08c1b8846c7951c687be80958560405161096d91906149e7565b600080821161151c57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151791906149ac565b61151e565b815b9150610bc86002600384612d0e565b6001600160a01b03841660009081526004602052604081206060918291866115cb57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c691906149ac565b6115cd565b865b96506115e186868360070180549050612ad7565b9095509150846001600160401b038111156115fe576115fe614434565b604051908082528060200260200182016040528015611627578160200160208202803683370190505b509350846001600160401b0381111561164257611642614434565b60405190808252806020026020018201604052801561166b578160200160208202803683370190505b50925060005b8581101561177e57600060078184820161168b858c614a10565b8154811061169b5761169b614a28565b60009182526020808320909101546001600160a01b039081168452908301939093526040909101902080548851919350909116908790849081106116e1576116e1614a28565b6001600160a01b03928316602091820292909201015283546117089183911660028c612b0e565b83546117219083906001600160a01b031660018d612b0e565b845461173a9084906001600160a01b031660008e612b0e565b6117449190614a10565b61174e9190614a10565b85838151811061176057611760614a28565b6020908102919091010152508061177681614a3e565b915050611671565b50509450945094915050565b3341146117aa57604051631cf4735960e01b815260040160405180910390fd5b60005460ff16156117cd5760405162dc149f60e41b815260040160405180910390fd5b6000805460016001600160a81b03199091166101006001600160a01b039586160217811790915580546001600160a01b03191691909216179055565b6005818154811061181957600080fd5b6000918252602090912001546001600160a01b0316905081565b60015460405163322433e360e01b81523360048201819052916001600160a01b03169063322433e390602401602060405180830381865afa15801561187c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a091906149c5565b6118bd5760405163423057c560e11b815260040160405180910390fd5b6001600160a01b03811660009081526004602052604090206118df9083612de0565b60058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b038381166001600160a01b03199283168117909355841660009081526006602090815260409182902080549093168417909255519182527fd5828184f48f65962d10eac907318df85953d4e3542a0f09b5932ee3fe398bdd910160405180910390a15050565b606080606080600080600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fb91906149ac565b905060008911611a0b5780611a0d565b885b6000805460405163fcbb371b60e01b815260048101849052929b5090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015611a61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a859190614931565b9050611a978989600580549050612ad7565b9098509250876001600160401b03811115611ab457611ab4614434565b604051908082528060200260200182016040528015611add578160200160208202803683370190505b509650876001600160401b03811115611af857611af8614434565b604051908082528060200260200182016040528015611b21578160200160208202803683370190505b509550876001600160401b03811115611b3c57611b3c614434565b604051908082528060200260200182016040528015611b65578160200160208202803683370190505b509450876001600160401b03811115611b8057611b80614434565b604051908082528060200260200182016040528015611ba9578160200160208202803683370190505b50935060005b88811015611d295760006004816005611bc8858f614a10565b81548110611bd857611bd8614a28565b60009182526020808320909101546001600160a01b039081168452908301939093526040909101902080548b51919350909116908a9084908110611c1e57611c1e614a28565b6001600160a01b03928316602091820292909201015260018201548951911690899084908110611c5057611c50614a28565b6001600160a01b0390921660209283029190910190910152611c72818d612e22565b878381518110611c8457611c84614a28565b6020908102919091010152611cad818d6000908152600291909101602052604090205460ff1690565b158015611ccb575060008c815260038201602052604090205460ff16155b8015611cf457508260c00151878381518110611ce957611ce9614a28565b602002602001015110155b868381518110611d0657611d06614a28565b911515602092830291909101909101525080611d2181614a3e565b915050611baf565b505050939792965093509350565b6001600160a01b03808416600090815260046020526040902054849116611d71576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de891906149c5565b15611e0657604051631e59ccd960e01b815260040160405180910390fd5b81611e2457604051637bc90c0560e11b815260040160405180910390fd5b611eb56003600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea091906149ac565b611eab906001614a10565b6002919085612e35565b611ec0833384612e86565b33600090815260076020526040902080546001600160a01b0316611f2c578054336001600160a01b031991821681178355600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180549092161790555b600080546001600160a01b03878116835260046020526040909220611f5b928492610100900416908787612f97565b846001600160a01b0316336001600160a01b03167f8fc656e319452025372383dc27d933046d412b8253de50a10739eeaa59862be68686604051611fa0929190614aa8565b60405180910390a35050505050565b6001600160a01b038082166000908152600760205260408120815491928392839291611fe491839161010090910416846130ca565b60005490945061200590829061010090046001600160a01b031660016130ca565b60005490935061202690829061010090046001600160a01b031660026130ca565b93959294505050565b6040513481527f1de49774d094a85fc1bbbd16e8d09a865fb848218f41e2da4369f528c42ee42e9060200160405180910390a1565b336000818152600460205260409020546001600160a01b031661209a576040516372898ae960e11b815260040160405180910390fd5b33600081815260046020526040902060018101546001600160a01b03166120c182866132f0565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916888616908117909155825194861685529084019290925290917f758820d0b14a01c1fa60b8d2bbef25ed1b6a5af4802e5dec3f08679255ba8bf3910161096d565b6060600061213f8484600880549050612ad7565b9093509050826001600160401b0381111561215c5761215c614434565b604051908082528060200260200182016040528015612185578160200160208202803683370190505b50915060005b83811015610cbc57600861219f8287614a10565b815481106121af576121af614a28565b9060005260206000200160009054906101000a90046001600160a01b03168382815181106121df576121df614a28565b6001600160a01b03909216602092830291909101909101528061220181614a3e565b91505061218b565b6001600160a01b03808316600090815260046020526040902054839116612243576040516372898ae960e11b815260040160405180910390fd5b600080546001600160a01b038581168352600460205260408320612270929091610100909104168561336a565b9050836001600160a01b03167f882d5671e5b36af50883197c33d48ba56ce337589958e871ba82fb0a54adf3e8826040516122ad91815260200190565b60405180910390a250505050565b600080600080600080600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233b91906149ac565b90506000871161234b578061234d565b865b6000805460405163fcbb371b60e01b81526004810184905292995090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa1580156123a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c59190614931565b6001600160a01b038a1660009081526004602090815260408083208c8452600281018352818420546003820190935292205460ff91821615995016965090915061240f818a612e22565b935086801561241c575085155b801561242c57508160c001518410155b6001909101546001600160a01b03169750935050509295509295909350565b600080546001600160a01b0384811683526004602090815260408085208884168652600790925284206124889390926101009091041690856133a4565b5090505b9392505050565b6001600160a01b038084166000908152600460205260409020548491166124cd576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166125035760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015612556573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257a91906149c5565b1561259857604051631e59ccd960e01b815260040160405180910390fd5b826125b657604051637bc90c0560e11b815260040160405180910390fd5b6126476003600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561260e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263291906149ac565b61263d906001614a10565b60029190866135ae565b50600080546001600160a01b03878116835260046020908152604080852033865260079092529093206126869390926101009004909116908787613647565b9250846001600160a01b0316336001600160a01b03167ff2812c3df2511a467cbe777b1ee98b1ddb9918bb0f09568a269d2fb58233cb528686604051611fa0929190614aa8565b6001600160a01b03808316600090815260046020526040902054839116612707576040516372898ae960e11b815260040160405180910390fd5b6001600160a01b038085166000908152600760205260409020548591166127415760405163cf83d93d60e01b815260040160405180910390fd5b600080546001600160a01b0386811683526004602090815260408085208a841686526007909252842061277e93909261010090910416908761383f565b604080516001600160a01b03888116825260208201849052929350918816917f2ef606d064225d24c1514dc94907c134faee1237445c2f63f410cce0852b2054910160405180910390a2505050505050565b6008818154811061181957600080fd5b6001600160a01b0380821660009081526007602052604090205482911661281a5760405163cf83d93d60e01b815260040160405180910390fd5b600080546001600160a01b03848116835260076020526040909220612846929091610100900416613891565b5050565b600082815260098501602052604081205461287357600083815260098601602052604090208290555b6000838152600a8601602052604081205461288f906001614a10565b6000858152600a88016020526040902081905560e086015190915081108015906128db57506003860160006128c5866001614a10565b815260208101919091526040016000205460ff16155b15612929576101008501516128f09085614a10565b91505b81841015612929578361290581614a3e565b60008181526003890160205260409020805460ff1916600117905594506128f39050565b50949350505050565b61293f83838360006138b5565b505050565b6000808460060154905060006001856001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b491906149ac565b6129be9190614a59565b90508315806129d55750806129d38386614a10565b115b156129e7576129e48282614a59565b93505b60005b84811015612acd576129fd600184614a10565b60405163fcbb371b60e01b8152600481018290529093506000906001600160a01b0388169063fcbb371b9060240161012060405180830381865afa158015612a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6d9190614931565b90506000612a7c898387612bcf565b905080612a8a575050612abb565b60a0820151612a9a575050612abb565b612aac818360a0015160646019613943565b612ab69087614a10565b955050505b80612ac581614a3e565b9150506129ea565b5050935093915050565b60008082612ae58587614a10565b10612af757612af48584614a59565b93505b83612b028187614a10565b91509150935093915050565b6000612bc4856002016000856002811115612b2b57612b2b614a70565b6002811115612b3c57612b3c614a70565b81526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002083876001016000876002811115612b8657612b86614a70565b6002811115612b9757612b97614a70565b8152602080820192909252604090810160009081206001600160a01b038b16825290925290209190612d0e565b90505b949350505050565b600081815260028401602052604081205460ff1680612bfe5750600082815260038501602052604090205460ff165b15612c0b5750600061248c565b6000612c178584612e22565b905080612c2857600091505061248c565b6000612c366019600a614b9f565b612c4786608001516064601961396f565b612c519084614bab565b612c5b9190614bca565b905080612c6d5760009250505061248c565b612c9085606001518660400151612c849190614bab565b6301e13380601961396f565b612c9a9082614bab565b9050612ca86019600a614b9f565b612cb29082614bca565b6000858152600a880160205260409020549091508015612cf7576000858152600988016020526040902054612cf383612ceb8484614a59565b836019613943565b9250505b5095945050505050565b61293f83838360016138b5565b8254600090801580612d3c57508285600081548110612d2f57612d2f614a28565b9060005260206000200154115b15612d4b57600091505061248c565b8285612d58600184614a59565b81548110612d6857612d68614a28565b906000526020600020015411612da75783612d84600183614a59565b81548110612d9457612d94614a28565b906000526020600020015491505061248c565b6000612db686856000856139b5565b9050848181548110612dca57612dca614a28565b9060005260206000200154925050509392505050565b81546001600160a01b031615612e0857604051621d934160e11b815260040160405180910390fd5b81546001600160a01b0319163317825561284682826132f0565b600061248c600484016005850184612d0e565b612e40848484613a5d565b835481908490612e5290600190614a59565b81548110612e6257612e62614a28565b906000526020600020016000828254612e7b9190614a10565b909155505050505050565b6000836002811115612e9a57612e9a614a70565b1415612ec05780341461293f57604051630fe5b06560e11b815260040160405180910390fd5b3415612edf5760405163a745ac8560e01b815260040160405180910390fd5b6000612eea84613b15565b6040516323b872dd60e01b81526001600160a01b0385811660048301523060248301526044820185905291909116906323b872dd906064015b6020604051808303816000875af1158015612f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6691906149c5565b905080612f915783604051630db5347560e11b8152600401612f889190614bec565b60405180910390fd5b50505050565b6130b1856002016000846002811115612fb257612fb2614a70565b6002811115612fc357612fc3614a70565b81526020808201929092526040908101600090812087546001600160a01b03908116835290845290829020825163900cf0cf60e01b8152925190939189169263900cf0cf9260048083019391928290030181865afa158015613029573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304d91906149ac565b613058906001614a10565b8388600101600087600281111561307157613071614a70565b600281111561308257613082614a70565b8152602080820192909252604090810160009081208a546001600160a01b031682529092529020929190612e35565b845461097690849086906001600160a01b031684613b80565b6000808460030160008460028111156130e5576130e5614a70565b60028111156130f6576130f6614a70565b815260208101919091526040016000205490508061311857600091505061248c565b6000846001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613158573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317c91906149ac565b9050600061318b600184614a59565b90506000811180156131ee5750818760030160008760028111156131b1576131b1614a70565b60028111156131c2576131c2614a70565b815260200190815260200160002082815481106131e1576131e1614a28565b9060005260206000200154115b1561320157806131fd81614bfa565b9150505b8187600301600087600281111561321a5761321a614a70565b600281111561322b5761322b614a70565b8152602001908152602001600020828154811061324a5761324a614a28565b90600052602060002001541115613267576000935050505061248c565b6000805b8281116132e45788600401600088600281111561328a5761328a614a70565b600281111561329b5761329b614a70565b815260200190815260200160002081815481106132ba576132ba614a28565b9060005260206000200154826132d09190614a10565b9150806132dc81614a3e565b91505061326b565b50979650505050505050565b6001600160a01b03811661331757604051637138356f60e01b815260040160405180910390fd5b81546001600160a01b03828116911614156133455760405163e037058f60e01b815260040160405180910390fd5b60019190910180546001600160a01b0319166001600160a01b03909216919091179055565b600080600061337a868686612944565b6006880181905590925090508115612488578554612488906000906001600160a01b031684613c6e565b81546001600160a01b039081166000908152600586016020908152604080832054815163900cf0cf60e01b81529151939490938593600193928a169263900cf0cf92600480830193928290030181865afa158015613406573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061342a91906149ac565b6134349190614a59565b905083158061344b5750806134498386614a10565b115b1561345d5761345a8282614a59565b93505b60005b848110156135a357613473600184614a10565b8654909350600090613492908a906001600160a01b0316600287612b0e565b87546134ab908b906001600160a01b0316600188612b0e565b88546134c4908c906001600160a01b0316600089612b0e565b6134ce9190614a10565b6134d89190614a10565b9050806134e55750613591565b60405163fcbb371b60e01b81526004810185905260009061355e906001600160a01b038b169063fcbb371b9060240161012060405180830381865afa158015613532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135569190614931565b899087613d42565b90508061356c575050613591565b613582818361357b8b89612e22565b6019613943565b61358c9087614a10565b955050505b8061359b81614a3e565b915050613460565b505094509492505050565b60006135bb858585613a5d565b84546000856135cb600184614a59565b815481106135db576135db614a28565b90600052602060002001549050808411156135f657806135f8565b835b9350831561363c57838661360d600185614a59565b8154811061361d5761361d614a28565b9060005260206000200160008282546136369190614a59565b90915550505b509195945050505050565b600080856001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ac91906149ac565b85549091506000906136ca9089906001600160a01b03168785612b0e565b86549091506000906136f2908a906001600160a01b0316886136ed876001614a10565b612b0e565b90506137ab89600201600088600281111561370f5761370f614a70565b600281111561372057613720614a70565b8152602080820192909252604090810160009081208b546001600160a01b031682529092529020613752856001614a10565b878c60010160008b600281111561376b5761376b614a70565b600281111561377c5761377c614a70565b8152602080820192909252604090810160009081208e546001600160a01b0316825290925290209291906135ae565b9450846137be5760009350505050613836565b6137c9878987613d8d565b846000838311156137fe576137de8484614a59565b90508087106137ed57806137ef565b865b90506137fb8183614a59565b91505b8115613810576138108b8b8a85613e0d565b801561382d578a5461382d9089906001600160a01b031683613c6e565b86955050505050505b95945050505050565b6000806000613850878787876133a4565b86546001600160a01b0316600090815260058a016020526040902081905590925090508115612cf7578654612cf7906000906001600160a01b031684613c6e565b61389d8282600161404c565b6138a98282600261404c565b6128468282600061404c565b815160005b8181101561393b5760008482815181106138d6576138d6614a28565b6020026020010151905085811180156139065750600081815260028801602052604090205460ff16151584151514155b156139285760008181526002880160205260409020805460ff19168515151790555b508061393381614a3e565b9150506138ba565b505050505050565b600061395082600a614b9f565b61395b85858561396f565b6139659087614bab565b612bc49190614bca565b60008061397d836001614a10565b61398890600a614b9f565b6139929086614bab565b9050600a6139a08583614bca565b6139ab906005614a10565b6138369190614bca565b6000818314156139d1576139ca600183614a59565b9050612bc7565b600060026139df8486614a10565b6139e99190614bca565b9050848682815481106139fe576139fe614a28565b90600052602060002001541115613a2357613a1b868686846139b5565b915050612bc7565b84868281548110613a3657613a36614a28565b90600052602060002001541015612bc457613a1b8686613a57846001614a10565b866139b5565b825480613a8757508254600181810185556000948552602085209091019190915581540181559052565b600084613a95600184614a59565b81548110613aa557613aa5614a28565b906000526020600020015490508281146109765784546001818101875560008781526020902090910184905584908190613adf9085614a59565b81548110613aef57613aef614a28565b600091825260208083209091015483546001810185559383529120909101555050505050565b60006001826002811115613b2b57613b2b614a70565b1415613b3f57506001602960991b01919050565b6002826002811115613b5357613b53614a70565b1415613b6757506002602960991b01919050565b604051638698bf3760e01b815260040160405180910390fd5b6001600160a01b038216600090815260088501602052604090205460ff16613bee576001600160a01b038216600081815260088601602090815260408220805460ff191660019081179091556007880180549182018155835291200180546001600160a01b03191690911790555b612f9184600501846001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c5791906149ac565b613c62906001614a10565b60048701919084612e35565b600080846002811115613c8357613c83614a70565b1415613ce2576040516001600160a01b038416908390600081818185875af1925050503d8060008114613cd2576040519150601f19603f3d011682016040523d82523d6000602084013e613cd7565b606091505b505080915050613d22565b613ceb84613b15565b60405163a9059cbb60e01b81526001600160a01b03858116600483015260248201859052919091169063a9059cbb90604401612f23565b80612f915783604051630db5347560e11b8152600401612f889190614bec565b600080613d50858585612bcf565b905080613d6157600091505061248c565b60a0840151613d7157905061248c565b613d83818560a0015160646019613943565b6138369082614a59565b612f9183600501836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613df691906149ac565b613e01906001614a10565b600486019190846135ae565b6000836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e7191906149ac565b613e7c906001614a10565b90506000856003016000856002811115613e9857613e98614a70565b6002811115613ea957613ea9614a70565b81526020810191909152604001600020549050801580613f27575081866003016000866002811115613edd57613edd614a70565b6002811115613eee57613eee614a70565b8152602001908152602001600020600183613f099190614a59565b81548110613f1957613f19614a28565b906000526020600020015414155b15613fd157856003016000856002811115613f4457613f44614a70565b6002811115613f5557613f55614a70565b8152602080820192909252604001600090812080546001810182559082529181209091018390556004870190856002811115613f9357613f93614a70565b6002811115613fa457613fa4614a70565b8152602080820192909252604001600090812080546001810182559082529190200183905550612f919050565b82866004016000866002811115613fea57613fea614a70565b6002811115613ffb57613ffb614a70565b81526020019081526020016000206001836140169190614a59565b8154811061402657614026614a28565b90600052602060002001600082825461403f9190614a10565b9091555050505050505050565b60006140598484846130ca565b9050806140665750505050565b600084600301600084600281111561408057614080614a70565b600281111561409157614091614a70565b8152602001908152602001600020805490509050836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061410791906149ac565b85600301600085600281111561411f5761411f614a70565b600281111561413057614130614a70565b815260200190815260200160002060018361414b9190614a59565b8154811061415b5761415b614a28565b9060005260206000200154116141f65784600301600084600281111561418357614183614a70565b600281111561419457614194614a70565b815260200190815260200160002060006141ae9190614372565b8460040160008460028111156141c6576141c6614a70565b60028111156141d7576141d7614a70565b815260200190815260200160002060006141f19190614372565b61435b565b604051806020016040528086600301600086600281111561421957614219614a70565b600281111561422a5761422a614a70565b81526020019081526020016000206001846142459190614a59565b8154811061425557614255614a28565b906000526020600020015481525085600301600085600281111561427b5761427b614a70565b600281111561428c5761428c614a70565b815260208101919091526040016000206142a7916001614393565b5060405180602001604052808660040160008660028111156142cb576142cb614a70565b60028111156142dc576142dc614a70565b81526020019081526020016000206001846142f79190614a59565b8154811061430757614307614a28565b906000526020600020015481525085600401600085600281111561432d5761432d614a70565b600281111561433e5761433e614a70565b81526020810191909152604001600020614359916001614393565b505b84546109769084906001600160a01b031684613c6e565b508054600082559060005260206000209081019061439091906143de565b50565b8280548282559060005260206000209081019282156143ce579160200282015b828111156143ce5782518255916020019190600101906143b3565b506143da9291506143de565b5090565b5b808211156143da57600081556001016143df565b6001600160a01b038116811461439057600080fd5b6000806040838503121561441b57600080fd5b8235614426816143f3565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b038111828210171561446d5761446d614434565b60405290565b604051601f8201601f191681016001600160401b038111828210171561449b5761449b614434565b604052919050565b60006001600160401b038211156144bc576144bc614434565b5060051b60200190565b600080604083850312156144d957600080fd5b82356144e4816143f3565b91506020838101356001600160401b0381111561450057600080fd5b8401601f8101861361451157600080fd5b803561452461451f826144a3565b614473565b81815260059190911b8201830190838101908883111561454357600080fd5b928401925b8284101561456157833582529284019290840190614548565b80955050505050509250929050565b60006020828403121561458257600080fd5b5035919050565b6000806040838503121561459c57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b838110156145e45781516001600160a01b0316875295820195908201906001016145bf565b509495945050505050565b60408152600061460260408301856145ab565b90508260208301529392505050565b6000806000806080858703121561462757600080fd5b8435614632816143f3565b966020860135965060408601359560600135945092505050565b600081518084526020808501945080840160005b838110156145e457815187529582019590820190600101614660565b60a08152600061468f60a08301886145ab565b82810360208401526146a1818861464c565b905082810360408401526146b5818761464c565b905082810360608401526146c9818661464c565b9150508260808301529695505050505050565b600080604083850312156146ef57600080fd5b82356001600160401b0381111561470557600080fd5b8301601f8101851361471657600080fd5b8035602061472661451f836144a3565b82815260059290921b8301810191818101908884111561474557600080fd5b938201935b8385101561476c57843561475d816143f3565b8252938201939082019061474a565b98969091013596505050505050565b60608152600061478e60608301866145ab565b82810360208401526147a0818661464c565b915050826040830152949350505050565b600080604083850312156147c457600080fd5b82356147cf816143f3565b915060208301356147df816143f3565b809150509250929050565b6000602082840312156147fc57600080fd5b813561248c816143f3565b60008060006060848603121561481c57600080fd5b505081359360208301359350604090920135919050565b60a08152600061484660a08301886145ab565b60208382038185015261485982896145ab565b9150838203604085015261486d828861464c565b8481036060860152865180825282880193509082019060005b818110156148a4578451151583529383019391830191600101614886565b50508093505050508260808301529695505050505050565b6000806000606084860312156148d157600080fd5b83356148dc816143f3565b92506020840135600381106148f057600080fd5b929592945050506040919091013590565b60008060006060848603121561491657600080fd5b8335614921816143f3565b925060208401356148f0816143f3565b6000610120828403121561494457600080fd5b61494c61444a565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b6000602082840312156149be57600080fd5b5051919050565b6000602082840312156149d757600080fd5b8151801515811461248c57600080fd5b60208152600061248c602083018461464c565b634e487b7160e01b600052601160045260246000fd5b60008219821115614a2357614a236149fa565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415614a5257614a526149fa565b5060010190565b600082821015614a6b57614a6b6149fa565b500390565b634e487b7160e01b600052602160045260246000fd5b60038110614aa457634e487b7160e01b600052602160045260246000fd5b9052565b60408101614ab68285614a86565b8260208301529392505050565b600181815b80851115610cbc578160001904821115614ae457614ae46149fa565b80851615614af157918102915b93841c9390800290614ac8565b600082614b0d57506001610bc8565b81614b1a57506000610bc8565b8160018114614b305760028114614b3a57614b56565b6001915050610bc8565b60ff841115614b4b57614b4b6149fa565b50506001821b610bc8565b5060208310610133831016604e8410600b8410161715614b79575081810a610bc8565b614b838383614ac3565b8060001904821115614b9757614b976149fa565b029392505050565b600061248c8383614afe565b6000816000190483118215151615614bc557614bc56149fa565b500290565b600082614be757634e487b7160e01b600052601260045260246000fd5b500490565b60208101610bc88284614a86565b600081614c0957614c096149fa565b50600019019056fea26469706673582212205f926883f5ba045108b667c46a75c1d10523ca1f0a147c50e9da04438be700d764736f6c634300080c0033"), - }, - { - contract: lockedOAS, - // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/2e5de435195ac05e208ce95d654a998cbe0fb3a1/contracts/token/LOAS.sol - code: mustDecodeCode("0x60806040526004361061012a5760003560e01c806370a08231116100ab578063a457c2d71161006f578063a457c2d714610353578063a9059cbb14610373578063d97830b114610393578063dd62ed3e14610430578063f94a138b14610476578063ffc3a7691461049657600080fd5b806370a082311461027a578063775ad527146102b05780637de6b1db146102d057806392de7482146102f057806395d89b411461033e57600080fd5b8063313ce567116100f2578063313ce567146101eb578063379607f5146102075780633950935114610227578063546cec3e146102475780636dec93f11461025a57600080fd5b806306fdde031461012f578063095ea7b31461015a57806318160ddd1461018a57806323b872dd146101a95780632e87d48c146101c9575b600080fd5b34801561013b57600080fd5b506101446104b6565b6040516101519190611559565b60405180910390f35b34801561016657600080fd5b5061017a6101753660046115ca565b610548565b6040519015158152602001610151565b34801561019657600080fd5b506002545b604051908152602001610151565b3480156101b557600080fd5b5061017a6101c43660046115f4565b610560565b3480156101d557600080fd5b506101e96101e436600461170b565b610584565b005b3480156101f757600080fd5b5060405160128152602001610151565b34801561021357600080fd5b506101e9610222366004611758565b610607565b34801561023357600080fd5b5061017a6102423660046115ca565b610773565b6101e9610255366004611788565b6107b2565b34801561026657600080fd5b5061019b6102753660046117cb565b61099a565b34801561028657600080fd5b5061019b6102953660046117cb565b6001600160a01b031660009081526020819052604090205490565b3480156102bc57600080fd5b506101e96102cb3660046117e6565b610a98565b3480156102dc57600080fd5b506101e96102eb366004611758565b610ae3565b3480156102fc57600080fd5b5061032661030b3660046117cb565b6006602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610151565b34801561034a57600080fd5b50610144610c24565b34801561035f57600080fd5b5061017a61036e3660046115ca565b610c33565b34801561037f57600080fd5b5061017a61038e3660046115ca565b610cca565b34801561039f57600080fd5b506103f36103ae3660046117cb565b6005602052600090815260409020805460018201546002830154600390930154919290916001600160401b0380831692600160401b900416906001600160a01b031685565b6040805195865260208601949094526001600160401b03928316938501939093521660608301526001600160a01b0316608082015260a001610151565b34801561043c57600080fd5b5061019b61044b3660046117e6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561048257600080fd5b5061017a610491366004611874565b610cd8565b3480156104a257600080fd5b5061017a6104b13660046118fb565b610dc1565b6060600380546104c590611954565b80601f01602080910402602001604051908101604052809291908181526020018280546104f190611954565b801561053e5780601f106105135761010080835404028352916020019161053e565b820191906000526020600020905b81548152906001019060200180831161052157829003601f168201915b5050505050905090565b600033610556818585610e80565b5060019392505050565b60003361056e858285610fa4565b610579858585611036565b506001949350505050565b6001600160a01b038281166000908152600560205260409020600301541633146105c15760405163d8d5894f60e01b815260040160405180910390fd5b60005b8151811015610602576105f0838383815181106105e3576105e361198f565b602002602001015161120f565b806105fa816119bb565b9150506105c4565b505050565b8061062557604051637bc90c0560e11b815260040160405180910390fd5b336000818152600660208181526040808420546001600160a01b0316808552600583529084206001810154958552929091529092906106639061099a565b61066d91906119d6565b905080831115610690576040516377dfdf2160e01b815260040160405180910390fd5b828260010160008282546106a491906119ed565b909155506106b4905033846112a2565b604051600090339085908381818185875af1925050503d80600081146106f6576040519150601f19603f3d011682016040523d82523d6000602084013e6106fb565b606091505b505090508061071d576040516312171d8360e31b815260040160405180910390fd5b336000908152600660209081526040918290205491518681526001600160a01b03909216917f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4910160405180910390a250505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061055690829086906107ad9087906119ed565b610e80565b6001600160a01b0383166107d95760405163ac6b05f560e01b815260040160405180910390fd5b6001600160a01b03838116600090815260066020526040902054161561081257604051630fb356f360e21b815260040160405180910390fd5b42826001600160401b031611158061083c5750806001600160401b0316826001600160401b031610155b1561085a57604051636385801560e11b815260040160405180910390fd5b3461087857604051637bc90c0560e11b815260040160405180910390fd5b61088283346113fc565b6040805160a08101825234808252600060208084018281526001600160401b038089168688019081528882166060880190815233608089019081526001600160a01b038d8116808952600588528b89209a518b55955160018b0155925160028a01805493518616600160401b026fffffffffffffffffffffffffffffffff19909416919095161791909117909255905160039096018054969091166001600160a01b031996871617905560069091529084902080549093168117909255915190917fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb9161098d9190869086909283526001600160401b03918216602084015216604082015260600190565b60405180910390a2505050565b6001600160a01b038082166000908152600560209081526040808320815160a081018352815480825260018301549482019490945260028201546001600160401b0380821694830194909452600160401b90049092166060830152600301549093166080840152909190610a115750600092915050565b80604001516001600160401b0316421015610a2f5750600092915050565b600081604001518260600151610a459190611a05565b6001600160401b031682604001516001600160401b031642610a6791906119d6565b8351610a739190611a2d565b610a7d9190611a4c565b8251909150811115610a9157505192915050565b9392505050565b6001600160a01b03828116600090815260056020526040902060030154163314610ad55760405163d8d5894f60e01b815260040160405180910390fd5b610adf828261120f565b5050565b80610b0157604051637bc90c0560e11b815260040160405180910390fd5b336000908152600660209081526040808320546001600160a01b031683526005909152902060018101548154610b3791906119d6565b821115610b57576040516377dfdf2160e01b815260040160405180910390fd5b610b6133836112a2565b60038101546040516000916001600160a01b03169084908381818185875af1925050503d8060008114610bb0576040519150601f19603f3d011682016040523d82523d6000602084013e610bb5565b606091505b5050905080610bd7576040516312171d8360e31b815260040160405180910390fd5b336000908152600660209081526040918290205491518581526001600160a01b03909216917f443630e54cc5dd8826c25d7467193a3b7a0a67b4ed73c14fb477e8e7eed3fd48910161098d565b6060600480546104c590611954565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610cbd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6105798286868403610e80565b600033610556818585611036565b600082518451148015610cec575081518351145b610d4c5760405162461bcd60e51b815260206004820152602b60248201527f4c4f41533a2062756c6b207472616e7366657246726f6d2061726773206d757360448201526a7420626520657175616c7360a81b6064820152608401610cb4565b60005b845181101561057957610dae858281518110610d6d57610d6d61198f565b6020026020010151858381518110610d8757610d8761198f565b6020026020010151858481518110610da157610da161198f565b6020026020010151610560565b5080610db9816119bb565b915050610d4f565b60008151835114610e245760405162461bcd60e51b815260206004820152602760248201527f4c4f41533a2062756c6b207472616e736665722061726773206d75737420626560448201526620657175616c7360c81b6064820152608401610cb4565b3360005b845181101561057957610e6e82868381518110610e4757610e4761198f565b6020026020010151868481518110610e6157610e6161198f565b6020026020010151611036565b80610e78816119bb565b915050610e28565b6001600160a01b038316610ee25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cb4565b6001600160a01b038216610f435760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cb4565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461103057818110156110235760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610cb4565b6110308484848403610e80565b50505050565b6001600160a01b03831661109a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cb4565b6001600160a01b0382166110fc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cb4565b6111078383836114e7565b6001600160a01b0383166000908152602081905260409020548181101561117f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610cb4565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906111b69084906119ed565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161120291815260200190565b60405180910390a3611030565b6001600160a01b03818116600090815260066020526040902054161561124857604051630fb356f360e21b815260040160405180910390fd5b6001600160a01b0381811660008181526006602052604080822080546001600160a01b0319169487169485179055519192917fdc5d0ac53741544fef2e2ae9b2c8006a9e56f9708377f300d8e825f8d411617d9190a35050565b6001600160a01b0382166113025760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610cb4565b61130e826000836114e7565b6001600160a01b038216600090815260208190526040902054818110156113825760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610cb4565b6001600160a01b03831660009081526020819052604081208383039055600280548492906113b19084906119d6565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6001600160a01b0382166114525760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610cb4565b61145e600083836114e7565b806002600082825461147091906119ed565b90915550506001600160a01b0382166000908152602081905260408120805483929061149d9084906119ed565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038316158061150457506001600160a01b038216155b1561150e57505050565b6001600160a01b0380831660009081526006602052604080822054868416835291205482169116141561154057505050565b6040516325cdf54f60e21b815260040160405180910390fd5b600060208083528351808285015260005b818110156115865785810183015185820160400152820161156a565b81811115611598576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b03811681146115c557600080fd5b919050565b600080604083850312156115dd57600080fd5b6115e6836115ae565b946020939093013593505050565b60008060006060848603121561160957600080fd5b611612846115ae565b9250611620602085016115ae565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561166e5761166e611630565b604052919050565b60006001600160401b0382111561168f5761168f611630565b5060051b60200190565b600082601f8301126116aa57600080fd5b813560206116bf6116ba83611676565b611646565b82815260059290921b840181019181810190868411156116de57600080fd5b8286015b84811015611700576116f3816115ae565b83529183019183016116e2565b509695505050505050565b6000806040838503121561171e57600080fd5b611727836115ae565b915060208301356001600160401b0381111561174257600080fd5b61174e85828601611699565b9150509250929050565b60006020828403121561176a57600080fd5b5035919050565b80356001600160401b03811681146115c557600080fd5b60008060006060848603121561179d57600080fd5b6117a6846115ae565b92506117b460208501611771565b91506117c260408501611771565b90509250925092565b6000602082840312156117dd57600080fd5b610a91826115ae565b600080604083850312156117f957600080fd5b611802836115ae565b9150611810602084016115ae565b90509250929050565b600082601f83011261182a57600080fd5b8135602061183a6116ba83611676565b82815260059290921b8401810191818101908684111561185957600080fd5b8286015b84811015611700578035835291830191830161185d565b60008060006060848603121561188957600080fd5b83356001600160401b03808211156118a057600080fd5b6118ac87838801611699565b945060208601359150808211156118c257600080fd5b6118ce87838801611699565b935060408601359150808211156118e457600080fd5b506118f186828701611819565b9150509250925092565b6000806040838503121561190e57600080fd5b82356001600160401b038082111561192557600080fd5b61193186838701611699565b9350602085013591508082111561194757600080fd5b5061174e85828601611819565b600181811c9082168061196857607f821691505b6020821081141561198957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156119cf576119cf6119a5565b5060010190565b6000828210156119e8576119e86119a5565b500390565b60008219821115611a0057611a006119a5565b500190565b60006001600160401b0383811690831681811015611a2557611a256119a5565b039392505050565b6000816000190483118215151615611a4757611a476119a5565b500290565b600082611a6957634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122098acdeeec3a23c1e097c992e1292dc7bc53f7ef784a6acd433995fdce6ee1c1464736f6c634300080c0033"), - storage: storage{ - // string private _name - "0x03": "Locked OAS", - // string private _symbol - "0x04": "LOAS", - }, - }, - { - contract: l1StandardERC20Factory, - // commit: https://github.com/oasysgames/oasys-optimism/blob/b7cd941581f372f4677751aabdeb0ed9291eb0d9/packages/contracts/contracts/oasys/L1/token/L1StandardERC20.sol - code: mustDecodeCode("0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80630b6ec17814610030575b600080fd5b61004361003e3660046101c2565b610045565b005b6000338383604051610056906100db565b610062939291906102a0565b604051809103906000f08015801561007e573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff16826040516100a691906102eb565b604051908190038120907fd714a43f627528ad95fc3dcf6c453cf595be2f4d75c58c4273f17208ed899f4490600090a3505050565b612a2f8061030883390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261012857600080fd5b813567ffffffffffffffff80821115610143576101436100e8565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610189576101896100e8565b816040528381528660208588010111156101a257600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156101d557600080fd5b823567ffffffffffffffff808211156101ed57600080fd5b6101f986838701610117565b9350602085013591508082111561020f57600080fd5b5061021c85828601610117565b9150509250929050565b60005b83811015610241578181015183820152602001610229565b83811115610250576000848401525b50505050565b6000815180845261026e816020860160208601610226565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006102cf6060830185610256565b82810360408401526102e18185610256565b9695505050505050565b600082516102fd818460208701610226565b919091019291505056fe60806040523480156200001157600080fd5b5060405162002a2f38038062002a2f8339810160408190526200003491620003b6565b8151829082906200004d90600590602085019062000243565b5080516200006390600690602084019062000243565b50506007805460ff19169055506200007d600084620000de565b620000a97f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a684620000de565b620000d57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a84620000de565b5050506200047d565b620000f582826200012160201b62000e541760201c565b60008281526001602090815260409091206200011c91839062000e5e62000131821b17901c565b505050565b6200012d828262000151565b5050565b600062000148836001600160a01b038416620001f1565b90505b92915050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166200012d576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001ad3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008181526001830160205260408120546200023a575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200014b565b5060006200014b565b828054620002519062000440565b90600052602060002090601f016020900481019282620002755760008555620002c0565b82601f106200029057805160ff1916838001178555620002c0565b82800160010185558215620002c0579182015b82811115620002c0578251825591602001919060010190620002a3565b50620002ce929150620002d2565b5090565b5b80821115620002ce5760008155600101620002d3565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200031157600080fd5b81516001600160401b03808211156200032e576200032e620002e9565b604051601f8301601f19908116603f01168101908282118183101715620003595762000359620002e9565b816040528381526020925086838588010111156200037657600080fd5b600091505b838210156200039a57858201830151818301840152908201906200037b565b83821115620003ac5760008385830101525b9695505050505050565b600080600060608486031215620003cc57600080fd5b83516001600160a01b0381168114620003e457600080fd5b60208501519093506001600160401b03808211156200040257600080fd5b6200041087838801620002ff565b935060408601519150808211156200042757600080fd5b506200043686828701620002ff565b9150509250925092565b600181811c908216806200045557607f821691505b602082108114156200047757634e487b7160e01b600052602260045260246000fd5b50919050565b6125a2806200048d6000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806379cc67901161010f578063ca15c873116100a2578063e467f7e011610071578063e467f7e01461049b578063e63ab1e9146104ae578063f94a138b146104d5578063ffc3a769146104e857600080fd5b8063ca15c87314610408578063d53913931461041b578063d547741f14610442578063dd62ed3e1461045557600080fd5b806395d89b41116100de57806395d89b41146103d2578063a217fddf146103da578063a457c2d7146103e2578063a9059cbb146103f557600080fd5b806379cc67901461033b5780638456cb591461034e5780639010d07c1461035657806391d148541461038e57600080fd5b8063313ce5671161018757806340c10f191161015657806340c10f19146102d457806342966c68146102e75780635c975abb146102fa57806370a082311461030557600080fd5b8063313ce5671461029757806336568abe146102a657806339509351146102b95780633f4ba83a146102cc57600080fd5b806318160ddd116101c357806318160ddd1461023a57806323b872dd1461024c578063248a9ca31461025f5780632f2ff15d1461028257600080fd5b806301ffc9a7146101ea57806306fdde0314610212578063095ea7b314610227575b600080fd5b6101fd6101f8366004611edb565b6104fb565b60405190151581526020015b60405180910390f35b61021a610557565b6040516102099190611f49565b6101fd610235366004611fc3565b6105e9565b6004545b604051908152602001610209565b6101fd61025a366004611fed565b6105ff565b61023e61026d366004612029565b60009081526020819052604090206001015490565b610295610290366004612042565b6106d0565b005b60405160128152602001610209565b6102956102b4366004612042565b6106f7565b6101fd6102c7366004611fc3565b610719565b610295610762565b6102956102e2366004611fc3565b610808565b6102956102f5366004612029565b6108b2565b60075460ff166101fd565b61023e61031336600461206e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b610295610349366004611fc3565b6108bf565b610295610959565b610369610364366004612089565b6109fd565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610209565b6101fd61039c366004612042565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61021a610a1c565b61023e600081565b6101fd6103f0366004611fc3565b610a2b565b6101fd610403366004611fc3565b610ae9565b61023e610416366004612029565b610af6565b61023e7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610295610450366004612042565b610b0d565b61023e6104633660046120ab565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020908152604080832093909416825291909152205490565b6102956104a9366004612244565b610b17565b61023e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6101fd6104e33660046122a8565b610c84565b6101fd6104f6366004612244565b610d7f565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f000000000000000000000000000000000000000000000000000000001480610551575061055182610e80565b92915050565b60606005805461056690612330565b80601f016020809104026020016040519081016040528092919081815260200182805461059290612330565b80156105df5780601f106105b4576101008083540402835291602001916105df565b820191906000526020600020905b8154815290600101906020018083116105c257829003601f168201915b5050505050905090565b60006105f6338484610f17565b50600192915050565b600061060c848484611096565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360209081526040808320338452909152902054828110156106b85760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6106c58533858403610f17565b506001949350505050565b6106da8282611308565b60008281526001602052604090206106f29082610e5e565b505050565b610701828261132e565b60008281526001602052604090206106f290826113c3565b33600081815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105f691859061075d9086906123b3565b610f17565b61078c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a3361039c565b6107fe5760405162461bcd60e51b815260206004820152603160248201527f4c315374616e6461726445524332303a206d757374206861766520706175736560448201527f7220726f6c6520746f20756e706175736500000000000000000000000000000060648201526084016106af565b6108066113e5565b565b6108327f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a63361039c565b6108a45760405162461bcd60e51b815260206004820152602e60248201527f4c315374616e6461726445524332303a206d7573742068617665206d696e746560448201527f7220726f6c6520746f206d696e7400000000000000000000000000000000000060648201526084016106af565b6108ae82826114ac565b5050565b6108bc33826115be565b50565b60006108cb8333610463565b9050818110156109425760405162461bcd60e51b8152602060048201526024808201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760448201527f616e63650000000000000000000000000000000000000000000000000000000060648201526084016106af565b61094f8333848403610f17565b6106f283836115be565b6109837f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a3361039c565b6109f55760405162461bcd60e51b815260206004820152602f60248201527f4c315374616e6461726445524332303a206d757374206861766520706175736560448201527f7220726f6c6520746f207061757365000000000000000000000000000000000060648201526084016106af565b610806611783565b6000828152600160205260408120610a159083611829565b9392505050565b60606006805461056690612330565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205482811015610ad25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016106af565b610adf3385858403610f17565b5060019392505050565b60006105f6338484611096565b600081815260016020526040812061055190611835565b610701828261183f565b8051825114610b8e5760405162461bcd60e51b815260206004820152602e60248201527f4c315374616e6461726445524332303a2062756c6b206d696e7420617267732060448201527f6d75737420626520657175616c7300000000000000000000000000000000000060648201526084016106af565b610bb87f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a63361039c565b610c2a5760405162461bcd60e51b815260206004820152602e60248201527f4c315374616e6461726445524332303a206d7573742068617665206d696e746560448201527f7220726f6c6520746f206d696e7400000000000000000000000000000000000060648201526084016106af565b60005b82518110156106f257610c72838281518110610c4b57610c4b6123cb565b6020026020010151838381518110610c6557610c656123cb565b60200260200101516114ac565b80610c7c816123fa565b915050610c2d565b600082518451148015610c98575081518351145b610d0a5760405162461bcd60e51b815260206004820152603260248201527f4c315374616e6461726445524332303a2062756c6b207472616e73666572206160448201527f726773206d75737420626520657175616c73000000000000000000000000000060648201526084016106af565b60005b84518110156106c557610d6c858281518110610d2b57610d2b6123cb565b6020026020010151858381518110610d4557610d456123cb565b6020026020010151858481518110610d5f57610d5f6123cb565b60200260200101516105ff565b5080610d77816123fa565b915050610d0d565b60008151835114610df85760405162461bcd60e51b815260206004820152603260248201527f4c315374616e6461726445524332303a2062756c6b207472616e73666572206160448201527f726773206d75737420626520657175616c73000000000000000000000000000060648201526084016106af565b3360005b84518110156106c557610e4282868381518110610e1b57610e1b6123cb565b6020026020010151868481518110610e3557610e356123cb565b6020026020010151611096565b80610e4c816123fa565b915050610dfc565b6108ae8282611865565b6000610a158373ffffffffffffffffffffffffffffffffffffffff8416611955565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061055157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610551565b73ffffffffffffffffffffffffffffffffffffffff8316610f9f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106af565b73ffffffffffffffffffffffffffffffffffffffff82166110285760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016106af565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff831661111f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016106af565b73ffffffffffffffffffffffffffffffffffffffff82166111a85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016106af565b6111b38383836119a4565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600260205260409020548181101561124f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016106af565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600260205260408082208585039055918516815290812080548492906112939084906123b3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112f991815260200190565b60405180910390a35b50505050565b60008281526020819052604090206001015461132481336119af565b6106f28383611865565b73ffffffffffffffffffffffffffffffffffffffff811633146113b95760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016106af565b6108ae8282611a65565b6000610a158373ffffffffffffffffffffffffffffffffffffffff8416611b1c565b60075460ff166114375760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106af565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff821661150f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106af565b61151b600083836119a4565b806004600082825461152d91906123b3565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040812080548392906115679084906123b3565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166116475760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016106af565b611653826000836119a4565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054818110156116ef5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016106af565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040812083830390556004805484929061172b908490612433565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b60075460ff16156117d65760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106af565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586114823390565b6000610a158383611c0f565b6000610551825490565b60008281526020819052604090206001015461185b81336119af565b6106f28383611a65565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166108ae5760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118f73390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600081815260018301602052604081205461199c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610551565b506000610551565b6106f2838383611c39565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166108ae57611a058173ffffffffffffffffffffffffffffffffffffffff166014611cb2565b611a10836020611cb2565b604051602001611a2192919061244a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262461bcd60e51b82526106af91600401611f49565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156108ae5760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008181526001830160205260408120548015611c05576000611b40600183612433565b8554909150600090611b5490600190612433565b9050818114611bb9576000866000018281548110611b7457611b746123cb565b9060005260206000200154905080876000018481548110611b9757611b976123cb565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611bca57611bca6124cb565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610551565b6000915050610551565b6000826000018281548110611c2657611c266123cb565b9060005260206000200154905092915050565b60075460ff16156106f25760405162461bcd60e51b815260206004820152602a60248201527f45524332305061757361626c653a20746f6b656e207472616e7366657220776860448201527f696c65207061757365640000000000000000000000000000000000000000000060648201526084016106af565b60606000611cc18360026124fa565b611ccc9060026123b3565b67ffffffffffffffff811115611ce457611ce46120d5565b6040519080825280601f01601f191660200182016040528015611d0e576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611d4557611d456123cb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611da857611da86123cb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000611de48460026124fa565b611def9060016123b3565b90505b6001811115611e8c577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611e3057611e306123cb565b1a60f81b828281518110611e4657611e466123cb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93611e8581612537565b9050611df2565b508315610a155760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106af565b600060208284031215611eed57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610a1557600080fd5b60005b83811015611f38578181015183820152602001611f20565b838111156113025750506000910152565b6020815260008251806020840152611f68816040850160208701611f1d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fbe57600080fd5b919050565b60008060408385031215611fd657600080fd5b611fdf83611f9a565b946020939093013593505050565b60008060006060848603121561200257600080fd5b61200b84611f9a565b925061201960208501611f9a565b9150604084013590509250925092565b60006020828403121561203b57600080fd5b5035919050565b6000806040838503121561205557600080fd5b8235915061206560208401611f9a565b90509250929050565b60006020828403121561208057600080fd5b610a1582611f9a565b6000806040838503121561209c57600080fd5b50508035926020909101359150565b600080604083850312156120be57600080fd5b6120c783611f9a565b915061206560208401611f9a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561214b5761214b6120d5565b604052919050565b600067ffffffffffffffff82111561216d5761216d6120d5565b5060051b60200190565b600082601f83011261218857600080fd5b8135602061219d61219883612153565b612104565b82815260059290921b840181019181810190868411156121bc57600080fd5b8286015b848110156121de576121d181611f9a565b83529183019183016121c0565b509695505050505050565b600082601f8301126121fa57600080fd5b8135602061220a61219883612153565b82815260059290921b8401810191818101908684111561222957600080fd5b8286015b848110156121de578035835291830191830161222d565b6000806040838503121561225757600080fd5b823567ffffffffffffffff8082111561226f57600080fd5b61227b86838701612177565b9350602085013591508082111561229157600080fd5b5061229e858286016121e9565b9150509250929050565b6000806000606084860312156122bd57600080fd5b833567ffffffffffffffff808211156122d557600080fd5b6122e187838801612177565b945060208601359150808211156122f757600080fd5b61230387838801612177565b9350604086013591508082111561231957600080fd5b50612326868287016121e9565b9150509250925092565b600181811c9082168061234457607f821691505b6020821081141561237e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156123c6576123c6612384565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561242c5761242c612384565b5060010190565b60008282101561244557612445612384565b500390565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612482816017850160208801611f1d565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516124bf816028840160208801611f1d565b01602801949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561253257612532612384565b500290565b60008161254657612546612384565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea2646970667358221220ec545ac9887190495c294687b26d57b2c56e4c0e69049d9d3eb841ced00b0d9d64736f6c63430008090033a2646970667358221220780f31feb8cb831c155bad22eadde1376c52e08c7d33c1a8360fe6d9d56c34a264736f6c63430008090033"), - }, - { - contract: l1StandardERC721Factory, - // commit: https://github.com/oasysgames/oasys-optimism/blob/b7cd941581f372f4677751aabdeb0ed9291eb0d9/packages/contracts/contracts/oasys/L1/token/L1StandardERC721.sol - code: mustDecodeCode("0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c4af445814610030575b600080fd5b61004361003e3660046101c6565b610045565b005b600033848484604051610057906100de565b61006494939291906102c8565b604051809103906000f080158015610080573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff16836040516100a89190610328565b604051908190038120907fbda470470721b5a2c56d61dc0aa9496dd02d39170f9dff803c35efbab673652290600090a350505050565b6141d7806200034583390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261012c57600080fd5b813567ffffffffffffffff80821115610147576101476100ec565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561018d5761018d6100ec565b816040528381528660208588010111156101a657600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156101db57600080fd5b833567ffffffffffffffff808211156101f357600080fd5b6101ff8783880161011b565b9450602086013591508082111561021557600080fd5b6102218783880161011b565b9350604086013591508082111561023757600080fd5b506102448682870161011b565b9150509250925092565b60005b83811015610269578181015183820152602001610251565b83811115610278576000848401525b50505050565b6000815180845261029681602086016020860161024e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff851681526080602082015260006102f7608083018661027e565b8281036040840152610309818661027e565b9050828103606084015261031d818561027e565b979650505050505050565b6000825161033a81846020870161024e565b919091019291505056fe60806040523480156200001157600080fd5b50604051620041d7380380620041d783398101604081905262000034916200042a565b8251839083906200004d906002906020850190620002b7565b50805162000063906003906020840190620002b7565b5050600c805460ff191690555080516200008590600f906020840190620002b7565b506200009360008562000100565b620000bf7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a68562000100565b620000eb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8562000100565b620000f68462000143565b5050505062000519565b6200011782826200019560201b620016e01760201c565b60008281526001602090815260409091206200013e918390620016ea620001a5821b17901c565b505050565b600e80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620001a18282620001c5565b5050565b6000620001bc836001600160a01b03841662000265565b90505b92915050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620001a1576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002213390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000818152600183016020526040812054620002ae57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620001bf565b506000620001bf565b828054620002c590620004dc565b90600052602060002090601f016020900481019282620002e9576000855562000334565b82601f106200030457805160ff191683800117855562000334565b8280016001018555821562000334579182015b828111156200033457825182559160200191906001019062000317565b506200034292915062000346565b5090565b5b8082111562000342576000815560010162000347565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200038557600080fd5b81516001600160401b0380821115620003a257620003a26200035d565b604051601f8301601f19908116603f01168101908282118183101715620003cd57620003cd6200035d565b81604052838152602092508683858801011115620003ea57600080fd5b600091505b838210156200040e5785820183015181830184015290820190620003ef565b83821115620004205760008385830101525b9695505050505050565b600080600080608085870312156200044157600080fd5b84516001600160a01b03811681146200045957600080fd5b60208601519094506001600160401b03808211156200047757600080fd5b620004858883890162000373565b945060408701519150808211156200049c57600080fd5b620004aa8883890162000373565b93506060870151915080821115620004c157600080fd5b50620004d08782880162000373565b91505092959194509250565b600181811c90821680620004f157607f821691505b602082108114156200051357634e487b7160e01b600052602260045260246000fd5b50919050565b613cae80620005296000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c806370a082311161017b578063b88d4fde116100d8578063e467f7e01161008c578063e985e9c511610071578063e985e9c5146105e4578063f2fde38b14610620578063f94a138b1461063357600080fd5b8063e467f7e0146105aa578063e63ab1e9146105bd57600080fd5b8063ca15c873116100bd578063ca15c8731461055d578063d539139314610570578063d547741f1461059757600080fd5b8063b88d4fde14610537578063c87b56dd1461054a57600080fd5b806395d89b411161012f578063a22cb46511610114578063a22cb465146104fe578063aafb2d4414610511578063b4e0ebf41461052457600080fd5b806395d89b41146104ee578063a217fddf146104f657600080fd5b80638da5cb5b116101605780638da5cb5b146104915780639010d07c146104a457806391d14854146104b757600080fd5b806370a08231146104765780638456cb591461048957600080fd5b80632f745c591161022957806342966c68116101dd57806355f804b3116101c257806355f804b3146104455780635c975abb146104585780636352211e1461046357600080fd5b806342966c681461041f5780634f6ccce71461043257600080fd5b80633f4ba83a1161020e5780633f4ba83a146103f157806340c10f19146103f957806342842e0e1461040c57600080fd5b80632f745c59146103cb57806336568abe146103de57600080fd5b8063162094c41161028057806323b872dd1161026557806323b872dd14610382578063248a9ca3146103955780632f2ff15d146103b857600080fd5b8063162094c41461035d57806318160ddd1461037057600080fd5b806306fdde03116102b157806306fdde031461030a578063081812fc1461031f578063095ea7b31461034a57600080fd5b806301ffc9a7146102cd57806303b03434146102f5575b600080fd5b6102e06102db36600461319b565b610646565b60405190151581526020015b60405180910390f35b610308610303366004613343565b610657565b005b61031261075a565b6040516102ec9190613441565b61033261032d366004613454565b6107ec565b6040516001600160a01b0390911681526020016102ec565b61030861035836600461346d565b610892565b61030861036b366004613525565b6109c4565b600a545b6040519081526020016102ec565b61030861039036600461356c565b610a48565b6103746103a3366004613454565b60009081526020819052604090206001015490565b6103086103c63660046135a8565b610ad0565b6103746103d936600461346d565b610af2565b6103086103ec3660046135a8565b610b9a565b610308610bbc565b61030861040736600461346d565b610c3c565b61030861041a36600461356c565b610cbc565b61030861042d366004613454565b610cd7565b610374610440366004613454565b610d5e565b6103086104533660046135d4565b610e02565b600c5460ff166102e0565b610332610471366004613454565b610e6c565b610374610484366004613609565b610ef7565b610308610f91565b600e54610332906001600160a01b031681565b6103326104b2366004613624565b61100f565b6102e06104c53660046135a8565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61031261102e565b610374600081565b61030861050c366004613646565b61103d565b61030861051f366004613682565b611120565b610308610532366004613757565b611267565b610308610545366004613871565b61138d565b610312610558366004613454565b611415565b61037461056b366004613454565b611420565b6103747f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6103086105a53660046135a8565b611437565b6103086105b83660046138d9565b611441565b6103747f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102e06105f2366004613933565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b61030861062e366004613609565b611588565b610308610641366004613343565b6115e8565b6000610651826116ff565b92915050565b81518351148015610669575080518251145b6106e05760405162461bcd60e51b815260206004820152602560248201527f4c315374616e646172644552433732313a2061726773206d757374206265206560448201527f7175616c7300000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b60005b8351811015610754576107428482815181106107015761070161395d565b602002602001015184838151811061071b5761071b61395d565b60200260200101518484815181106107355761073561395d565b6020026020010151610cbc565b8061074c816139bb565b9150506106e3565b50505050565b606060028054610769906139f4565b80601f0160208091040260200160405190810160405280929190818152602001828054610795906139f4565b80156107e25780601f106107b7576101008083540402835291602001916107e2565b820191906000526020600020905b8154815290600101906020018083116107c557829003601f168201915b5050505050905090565b6000818152600460205260408120546001600160a01b03166108765760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016106d7565b506000908152600660205260409020546001600160a01b031690565b600061089d82610e6c565b9050806001600160a01b0316836001600160a01b031614156109275760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084016106d7565b336001600160a01b0382161480610943575061094381336105f2565b6109b55760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016106d7565b6109bf8383611755565b505050565b6109ee7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336104c5565b610a3a5760405162461bcd60e51b815260206004820152601e60248201527f4c315374616e646172644552433732313a20696e76616c696420726f6c65000060448201526064016106d7565b610a4482826117db565b5050565b610a53335b82611884565b610ac55760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016106d7565b6109bf83838361198c565b610ada8282611b7c565b60008281526001602052604090206109bf90826116ea565b6000610afd83610ef7565b8210610b715760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e647300000000000000000000000000000000000000000060648201526084016106d7565b506001600160a01b03919091166000908152600860209081526040808320938352929052205490565b610ba48282611ba2565b60008281526001602052604090206109bf9082611c2a565b610be67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a336104c5565b610c325760405162461bcd60e51b815260206004820152601e60248201527f4c315374616e646172644552433732313a20696e76616c696420726f6c65000060448201526064016106d7565b610c3a611c3f565b565b610c667f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336104c5565b610cb25760405162461bcd60e51b815260206004820152601e60248201527f4c315374616e646172644552433732313a20696e76616c696420726f6c65000060448201526064016106d7565b610a448282611cf9565b6109bf8383836040518060200160405280600081525061138d565b610ce033610a4d565b610d525760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f7665640000000000000000000000000000000060648201526084016106d7565b610d5b81611e5f565b50565b6000610d69600a5490565b8210610ddd5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e6473000000000000000000000000000000000000000060648201526084016106d7565b600a8281548110610df057610df061395d565b90600052602060002001549050919050565b610e0d6000336104c5565b610e595760405162461bcd60e51b815260206004820152601e60248201527f4c315374616e646172644552433732313a20696e76616c696420726f6c65000060448201526064016106d7565b8051610a4490600f90602084019061309e565b6000818152600460205260408120546001600160a01b0316806106515760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e000000000000000000000000000000000000000000000060648201526084016106d7565b60006001600160a01b038216610f755760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f20616464726573730000000000000000000000000000000000000000000060648201526084016106d7565b506001600160a01b031660009081526005602052604090205490565b610fbb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a336104c5565b6110075760405162461bcd60e51b815260206004820152601e60248201527f4c315374616e646172644552433732313a20696e76616c696420726f6c65000060448201526064016106d7565b610c3a611e68565b60008281526001602052604081206110279083611f0e565b9392505050565b606060038054610769906139f4565b6001600160a01b0382163314156110965760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106d7565b3360008181526007602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b80518251146111975760405162461bcd60e51b815260206004820152602560248201527f4c315374616e646172644552433732313a2061726773206d757374206265206560448201527f7175616c7300000000000000000000000000000000000000000000000000000060648201526084016106d7565b6111c17f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336104c5565b61120d5760405162461bcd60e51b815260206004820152601e60248201527f4c315374616e646172644552433732313a20696e76616c696420726f6c65000060448201526064016106d7565b60005b82518110156109bf5761125583828151811061122e5761122e61395d565b60200260200101518383815181106112485761124861395d565b60200260200101516117db565b8061125f816139bb565b915050611210565b82518451148015611279575081518351145b8015611286575080518251145b6112f85760405162461bcd60e51b815260206004820152602560248201527f4c315374616e646172644552433732313a2061726773206d757374206265206560448201527f7175616c7300000000000000000000000000000000000000000000000000000060648201526084016106d7565b60005b8451811015611386576113748582815181106113195761131961395d565b60200260200101518583815181106113335761133361395d565b602002602001015185848151811061134d5761134d61395d565b60200260200101518585815181106113675761136761395d565b602002602001015161138d565b8061137e816139bb565b9150506112fb565b5050505050565b6113973383611884565b6114095760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016106d7565b61075484848484611f1a565b606061065182611fa3565b600081815260016020526040812061065190612121565b610ba4828261212b565b80518251146114b85760405162461bcd60e51b815260206004820152602560248201527f4c315374616e646172644552433732313a2061726773206d757374206265206560448201527f7175616c7300000000000000000000000000000000000000000000000000000060648201526084016106d7565b6114e27f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336104c5565b61152e5760405162461bcd60e51b815260206004820152601e60248201527f4c315374616e646172644552433732313a20696e76616c696420726f6c65000060448201526064016106d7565b60005b82518110156109bf5761157683828151811061154f5761154f61395d565b60200260200101518383815181106115695761156961395d565b6020026020010151611cf9565b80611580816139bb565b915050611531565b6115936000336104c5565b6115df5760405162461bcd60e51b815260206004820152601e60248201527f4c315374616e646172644552433732313a20696e76616c696420726f6c65000060448201526064016106d7565b610d5b81612151565b815183511480156115fa575080518251145b61166c5760405162461bcd60e51b815260206004820152602560248201527f4c315374616e646172644552433732313a2061726773206d757374206265206560448201527f7175616c7300000000000000000000000000000000000000000000000000000060648201526084016106d7565b60005b8351811015610754576116ce84828151811061168d5761168d61395d565b60200260200101518483815181106116a7576116a761395d565b60200260200101518484815181106116c1576116c161395d565b6020026020010151610a48565b806116d8816139bb565b91505061166f565b610a4482826121bb565b6000611027836001600160a01b038416612277565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806106515750610651826122c6565b600081815260066020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03841690811790915581906117a282610e6c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000828152600460205260409020546001600160a01b03166118655760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201527f6578697374656e7420746f6b656e00000000000000000000000000000000000060648201526084016106d7565b6000828152600d6020908152604090912082516109bf9284019061309e565b6000818152600460205260408120546001600160a01b031661190e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016106d7565b600061191983610e6c565b9050806001600160a01b0316846001600160a01b031614806119545750836001600160a01b0316611949846107ec565b6001600160a01b0316145b8061198457506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661199f82610e6c565b6001600160a01b031614611a1b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e000000000000000000000000000000000000000000000060648201526084016106d7565b6001600160a01b038216611a965760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106d7565b611aa1838383612368565b611aac600082611755565b6001600160a01b0383166000908152600560205260408120805460019290611ad5908490613a48565b90915550506001600160a01b0382166000908152600560205260408120805460019290611b03908490613a5f565b909155505060008181526004602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600082815260208190526040902060010154611b988133612373565b6109bf83836121bb565b6001600160a01b0381163314611c205760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016106d7565b610a44828261240f565b6000611027836001600160a01b0384166124ac565b600c5460ff16611c915760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106d7565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038216611d4f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106d7565b6000818152600460205260409020546001600160a01b031615611db45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106d7565b611dc060008383612368565b6001600160a01b0382166000908152600560205260408120805460019290611de9908490613a5f565b909155505060008181526004602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b610d5b8161259f565b600c5460ff1615611ebb5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106d7565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611cdc3390565b600061102783836125df565b611f2584848461198c565b611f3184848484612609565b6107545760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016106d7565b6000818152600460205260409020546060906001600160a01b03166120305760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f722060448201527f6e6f6e6578697374656e7420746f6b656e00000000000000000000000000000060648201526084016106d7565b6000828152600d602052604081208054612049906139f4565b80601f0160208091040260200160405190810160405280929190818152602001828054612075906139f4565b80156120c25780601f10612097576101008083540402835291602001916120c2565b820191906000526020600020905b8154815290600101906020018083116120a557829003601f168201915b5050505050905060006120d36127d4565b90508051600014156120e6575092915050565b815115612118578082604051602001612100929190613a77565b60405160208183030381529060405292505050919050565b611984846127e3565b6000610651825490565b6000828152602081905260409020600101546121478133612373565b6109bf838361240f565b600e80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610a44576000828152602081815260408083206001600160a01b0385168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556122333390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008181526001830160205260408120546122be57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610651565b506000610651565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061235957507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806106515750610651826128cb565b6109bf838383612921565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610a44576123af816001600160a01b031660146129a5565b6123ba8360206129a5565b6040516020016123cb929190613aa6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262461bcd60e51b82526106d791600401613441565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1615610a44576000828152602081815260408083206001600160a01b038516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600081815260018301602052604081205480156125955760006124d0600183613a48565b85549091506000906124e490600190613a48565b90508181146125495760008660000182815481106125045761250461395d565b90600052602060002001549050808760000184815481106125275761252761395d565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061255a5761255a613b27565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610651565b6000915050610651565b6125a881612bce565b6000818152600d6020526040902080546125c1906139f4565b159050610d5b576000818152600d60205260408120610d5b91613122565b60008260000182815481106125f6576125f661395d565b9060005260206000200154905092915050565b60006001600160a01b0384163b156127c9576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290612666903390899088908890600401613b56565b602060405180830381600087803b15801561268057600080fd5b505af19250505080156126ce575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126cb91810190613b92565b60015b61277e573d8080156126fc576040519150601f19603f3d011682016040523d82523d6000602084013e612701565b606091505b5080516127765760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016106d7565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611984565b506001949350505050565b6060600f8054610769906139f4565b6000818152600460205260409020546060906001600160a01b03166128705760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e000000000000000000000000000000000060648201526084016106d7565b600061287a6127d4565b9050600081511161289a5760405180602001604052806000815250611027565b806128a484612c8d565b6040516020016128b5929190613a77565b6040516020818303038152906040529392505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f000000000000000000000000000000000000000000000000000000001480610651575061065182612dbf565b61292c838383612e56565b600c5460ff16156109bf5760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201527f68696c652070617573656400000000000000000000000000000000000000000060648201526084016106d7565b606060006129b4836002613baf565b6129bf906002613a5f565b67ffffffffffffffff8111156129d7576129d76131b8565b6040519080825280601f01601f191660200182016040528015612a01576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612a3857612a3861395d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612a9b57612a9b61395d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000612ad7846002613baf565b612ae2906001613a5f565b90505b6001811115612b7f577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612b2357612b2361395d565b1a60f81b828281518110612b3957612b3961395d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93612b7881613bec565b9050612ae5565b5083156110275760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106d7565b6000612bd982610e6c565b9050612be781600084612368565b612bf2600083611755565b6001600160a01b0381166000908152600560205260408120805460019290612c1b908490613a48565b909155505060008281526004602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b606081612ccd57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612cf75780612ce1816139bb565b9150612cf09050600a83613c50565b9150612cd1565b60008167ffffffffffffffff811115612d1257612d126131b8565b6040519080825280601f01601f191660200182016040528015612d3c576020820181803683370190505b5090505b841561198457612d51600183613a48565b9150612d5e600a86613c64565b612d69906030613a5f565b60f81b818381518110612d7e57612d7e61395d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612db8600a86613c50565b9450612d40565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061065157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610651565b6001600160a01b038316612eb157612eac81600a80546000838152600b60205260408120829055600182018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80155565b612ed4565b816001600160a01b0316836001600160a01b031614612ed457612ed48382612f0e565b6001600160a01b038216612eeb576109bf81612fab565b826001600160a01b0316826001600160a01b0316146109bf576109bf828261305a565b60006001612f1b84610ef7565b612f259190613a48565b600083815260096020526040902054909150808214612f78576001600160a01b03841660009081526008602090815260408083208584528252808320548484528184208190558352600990915290208190555b5060009182526009602090815260408084208490556001600160a01b039094168352600881528383209183525290812055565b600a54600090612fbd90600190613a48565b6000838152600b6020526040812054600a8054939450909284908110612fe557612fe561395d565b9060005260206000200154905080600a83815481106130065761300661395d565b6000918252602080832090910192909255828152600b9091526040808220849055858252812055600a80548061303e5761303e613b27565b6001900381819060005260206000200160009055905550505050565b600061306583610ef7565b6001600160a01b039093166000908152600860209081526040808320868452825280832085905593825260099052919091209190915550565b8280546130aa906139f4565b90600052602060002090601f0160209004810192826130cc5760008555613112565b82601f106130e557805160ff1916838001178555613112565b82800160010185558215613112579182015b828111156131125782518255916020019190600101906130f7565b5061311e929150613158565b5090565b50805461312e906139f4565b6000825580601f1061313e575050565b601f016020900490600052602060002090810190610d5b91905b5b8082111561311e5760008155600101613159565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610d5b57600080fd5b6000602082840312156131ad57600080fd5b81356110278161316d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561322e5761322e6131b8565b604052919050565b600067ffffffffffffffff821115613250576132506131b8565b5060051b60200190565b80356001600160a01b038116811461327157600080fd5b919050565b600082601f83011261328757600080fd5b8135602061329c61329783613236565b6131e7565b82815260059290921b840181019181810190868411156132bb57600080fd5b8286015b848110156132dd576132d08161325a565b83529183019183016132bf565b509695505050505050565b600082601f8301126132f957600080fd5b8135602061330961329783613236565b82815260059290921b8401810191818101908684111561332857600080fd5b8286015b848110156132dd578035835291830191830161332c565b60008060006060848603121561335857600080fd5b833567ffffffffffffffff8082111561337057600080fd5b61337c87838801613276565b9450602086013591508082111561339257600080fd5b61339e87838801613276565b935060408601359150808211156133b457600080fd5b506133c1868287016132e8565b9150509250925092565b60005b838110156133e65781810151838201526020016133ce565b838111156107545750506000910152565b6000815180845261340f8160208601602086016133cb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061102760208301846133f7565b60006020828403121561346657600080fd5b5035919050565b6000806040838503121561348057600080fd5b6134898361325a565b946020939093013593505050565b600082601f8301126134a857600080fd5b813567ffffffffffffffff8111156134c2576134c26131b8565b6134f360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016131e7565b81815284602083860101111561350857600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561353857600080fd5b82359150602083013567ffffffffffffffff81111561355657600080fd5b61356285828601613497565b9150509250929050565b60008060006060848603121561358157600080fd5b61358a8461325a565b92506135986020850161325a565b9150604084013590509250925092565b600080604083850312156135bb57600080fd5b823591506135cb6020840161325a565b90509250929050565b6000602082840312156135e657600080fd5b813567ffffffffffffffff8111156135fd57600080fd5b61198484828501613497565b60006020828403121561361b57600080fd5b6110278261325a565b6000806040838503121561363757600080fd5b50508035926020909101359150565b6000806040838503121561365957600080fd5b6136628361325a565b91506020830135801515811461367757600080fd5b809150509250929050565b6000806040838503121561369557600080fd5b823567ffffffffffffffff808211156136ad57600080fd5b6136b9868387016132e8565b93506020915081850135818111156136d057600080fd5b8501601f810187136136e157600080fd5b80356136ef61329782613236565b81815260059190911b8201840190848101908983111561370e57600080fd5b8584015b838110156137465780358681111561372a5760008081fd5b6137388c8983890101613497565b845250918601918601613712565b508096505050505050509250929050565b6000806000806080858703121561376d57600080fd5b843567ffffffffffffffff8082111561378557600080fd5b61379188838901613276565b95506020915081870135818111156137a857600080fd5b6137b489828a01613276565b9550506040870135818111156137c957600080fd5b6137d589828a016132e8565b9450506060870135818111156137ea57600080fd5b8701601f810189136137fb57600080fd5b803561380961329782613236565b81815260059190911b8201840190848101908b83111561382857600080fd5b8584015b83811015613860578035868111156138445760008081fd5b6138528e8983890101613497565b84525091860191860161382c565b50989b979a50959850505050505050565b6000806000806080858703121561388757600080fd5b6138908561325a565b935061389e6020860161325a565b925060408501359150606085013567ffffffffffffffff8111156138c157600080fd5b6138cd87828801613497565b91505092959194509250565b600080604083850312156138ec57600080fd5b823567ffffffffffffffff8082111561390457600080fd5b61391086838701613276565b9350602085013591508082111561392657600080fd5b50613562858286016132e8565b6000806040838503121561394657600080fd5b61394f8361325a565b91506135cb6020840161325a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139ed576139ed61398c565b5060010190565b600181811c90821680613a0857607f821691505b60208210811415613a42577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082821015613a5a57613a5a61398c565b500390565b60008219821115613a7257613a7261398c565b500190565b60008351613a898184602088016133cb565b835190830190613a9d8183602088016133cb565b01949350505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613ade8160178501602088016133cb565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351613b1b8160288401602088016133cb565b01602801949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006001600160a01b03808716835280861660208401525083604083015260806060830152613b8860808301846133f7565b9695505050505050565b600060208284031215613ba457600080fd5b81516110278161316d565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613be757613be761398c565b500290565b600081613bfb57613bfb61398c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082613c5f57613c5f613c21565b500490565b600082613c7357613c73613c21565b50069056fea2646970667358221220c820b4e1ce66127f656ca82e3d097696161e24564bfe76b1f003602207c192b864736f6c63430008090033a264697066735822122014cd4ecd8ae6746ba07e6e813e0e41d947bb8c2cae27c7dbadbe97ea6107406864736f6c63430008090033"), - }, - { - contract: tealswapRouter, - // commit: https://github.com/oasysgames/oasys-ecosystem-contract/blob/f346dc9ae3e6f65c4e026687455fdb2eeff47ee8/contracts/Tealswap/periphery/TealswapRouter.sol - code: mustDecodeCode( - "0x6080604052600436106101855760003560e01c806396ed28f9116100d1578063c45a01551161008a578063ded9382a11610064578063ded9382a14610490578063e8e33700146104b0578063f305d719146104eb578063fb3bdb41146104fe57600080fd5b8063c45a015514610435578063d06ca61f14610450578063d52bb6f41461047057600080fd5b806396ed28f91461036f578063ad5c4648146103a7578063ad615dec146103c2578063af2979eb146103e2578063b6f9de9514610402578063baa2abde1461041557600080fd5b806352707d8c1161013e5780635c11d795116101185780635c11d795146102fc578063791ac9471461031c5780637ff36ab51461033c5780638803dbee1461034f57600080fd5b806352707d8c1461028e578063571fd012146102bc5780635b0d5984146102dc57600080fd5b806302751cec146101a757806318cbafe5146101e15780631f00ca741461020e5780632195995c1461022e57806338ed17391461024e5780634a25d94a1461026e57600080fd5b366101a257336001602960991b01146101a0576101a0613501565b005b600080fd5b3480156101b357600080fd5b506101c76101c236600461353f565b610511565b604080519283526020830191909152015b60405180910390f35b3480156101ed57600080fd5b506102016101fc3660046135e2565b6105d2565b6040516101d89190613655565b34801561021a57600080fd5b506102016102293660046136af565b610894565b34801561023a57600080fd5b506101c761024936600461379f565b6108af565b34801561025a57600080fd5b506102016102693660046135e2565b61096f565b34801561027a57600080fd5b506102016102893660046135e2565b610a74565b34801561029a57600080fd5b506102ae6102a9366004613849565b610b77565b6040519081526020016101d8565b3480156102c857600080fd5b506102ae6102d7366004613849565b610b8e565b3480156102e857600080fd5b506102ae6102f736600461387b565b610b9c565b34801561030857600080fd5b506101a06103173660046135e2565b610c57565b34801561032857600080fd5b506101a06103373660046135e2565b610ebf565b61020161034a366004613911565b61108f565b34801561035b57600080fd5b5061020161036a3660046135e2565b61132f565b34801561037b57600080fd5b5061038f61038a366004613978565b6113d3565b6040516001600160a01b0390911681526020016101d8565b3480156103b357600080fd5b5061038f6001602960991b0181565b3480156103ce57600080fd5b506102ae6103dd3660046139b1565b61145c565b3480156103ee57600080fd5b506102ae6103fd36600461353f565b611471565b6101a0610410366004613911565b611594565b34801561042157600080fd5b506101c76104303660046139dd565b61187a565b34801561044157600080fd5b5061038f6018602960991b0181565b34801561045c57600080fd5b5061020161046b3660046136af565b611a47565b34801561047c57600080fd5b506101c761048b366004613978565b611a5b565b34801561049c57600080fd5b506101c76104ab36600461387b565b611a7c565b3480156104bc57600080fd5b506104d06104cb366004613a4f565b611b3d565b604080519384526020840192909252908201526060016101d8565b6104d06104f936600461353f565b611c31565b61020161050c366004613911565b611e2f565b600080824281101561053e5760405162461bcd60e51b815260040161053590613acb565b60405180910390fd5b610554896001602960991b018a8a8a308a61187a565b9093509150610564898685612105565b604051632e1a7d4d60e01b8152600481018390526001602960991b0190632e1a7d4d90602401600060405180830381600087803b1580156105a457600080fd5b505af11580156105b8573d6000803e3d6000fd5b505050506105c68583612236565b50965096945050505050565b606081428110156105f55760405162461bcd60e51b815260040161053590613acb565b6001602960991b01868661060a600182613b18565b81811061061957610619613b2f565b905060200201602081019061062e9190613b45565b6001600160a01b0316146106545760405162461bcd60e51b815260040161053590613b62565b6106996018602960991b018988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061231592505050565b91508682600184516106ab9190613b18565b815181106106bb576106bb613b2f565b602002602001015110156106e15760405162461bcd60e51b815260040161053590613b99565b61078d868660008181106106f7576106f7613b2f565b905060200201602081019061070c9190613b45565b3361076d6018602960991b018a8a600081811061072b5761072b613b2f565b90506020020160208101906107409190613b45565b8b8b600181811061075357610753613b2f565b90506020020160208101906107689190613b45565b61253a565b8560008151811061078057610780613b2f565b6020026020010151612613565b6107cc82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250612751915050565b6001602960991b016001600160a01b0316632e1a7d4d83600185516107f19190613b18565b8151811061080157610801613b2f565b60200260200101516040518263ffffffff1660e01b815260040161082791815260200190565b600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b5050505061088984836001855161086c9190613b18565b8151811061087c5761087c613b2f565b6020026020010151612236565b509695505050505050565b60606108a86018602960991b01848461290a565b9392505050565b60008060006108c66018602960991b018f8f61253a565b90506000876108d5578c6108d9565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90610914903390309086908f908e908e908e90600401613be3565b600060405180830381600087803b15801561092e57600080fd5b505af1158015610942573d6000803e3d6000fd5b505050506109558f8f8f8f8f8f8f61187a565b809450819550505050509b509b9950505050505050505050565b606081428110156109925760405162461bcd60e51b815260040161053590613acb565b6109d76018602960991b018988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061231592505050565b91508682600184516109e99190613b18565b815181106109f9576109f9613b2f565b60200260200101511015610a1f5760405162461bcd60e51b815260040161053590613b99565b610a35868660008181106106f7576106f7613b2f565b61088982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612751915050565b60608142811015610a975760405162461bcd60e51b815260040161053590613acb565b6001602960991b018686610aac600182613b18565b818110610abb57610abb613b2f565b9050602002016020810190610ad09190613b45565b6001600160a01b031614610af65760405162461bcd60e51b815260040161053590613b62565b610b3b6018602960991b018988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061290a92505050565b91508682600081518110610b5157610b51613b2f565b602002602001015111156106e15760405162461bcd60e51b815260040161053590613c24565b6000610b8585858585612b08565b95945050505050565b6000610b8585858585612bf1565b600080610bb86018602960991b018d6001602960991b0161253a565b9050600086610bc7578b610bcb565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90610c06903390309086908e908d908d908d90600401613be3565b600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b50505050610c468d8d8d8d8d8d611471565b9d9c50505050505050505050505050565b8042811015610c785760405162461bcd60e51b815260040161053590613acb565b610cf085856000818110610c8e57610c8e613b2f565b9050602002016020810190610ca39190613b45565b33610cea6018602960991b0189896000818110610cc257610cc2613b2f565b9050602002016020810190610cd79190613b45565b8a8a600181811061075357610753613b2f565b8a612613565b60008585610cff600182613b18565b818110610d0e57610d0e613b2f565b9050602002016020810190610d239190613b45565b6040516370a0823160e01b81526001600160a01b03868116600483015291909116906370a082319060240160206040518083038186803b158015610d6657600080fd5b505afa158015610d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9e9190613c6a565b9050610dde868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250612ce0915050565b86818787610ded600182613b18565b818110610dfc57610dfc613b2f565b9050602002016020810190610e119190613b45565b6040516370a0823160e01b81526001600160a01b03888116600483015291909116906370a08231906024015b60206040518083038186803b158015610e5557600080fd5b505afa158015610e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8d9190613c6a565b610e979190613b18565b1015610eb55760405162461bcd60e51b815260040161053590613b99565b5050505050505050565b8042811015610ee05760405162461bcd60e51b815260040161053590613acb565b6001602960991b018585610ef5600182613b18565b818110610f0457610f04613b2f565b9050602002016020810190610f199190613b45565b6001600160a01b031614610f3f5760405162461bcd60e51b815260040161053590613b62565b610f5585856000818110610c8e57610c8e613b2f565b610f93858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250612ce0915050565b6040516370a0823160e01b81523060048201526000906001602960991b01906370a082319060240160206040518083038186803b158015610fd357600080fd5b505afa158015610fe7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100b9190613c6a565b90508681101561102d5760405162461bcd60e51b815260040161053590613b99565b604051632e1a7d4d60e01b8152600481018290526001602960991b0190632e1a7d4d90602401600060405180830381600087803b15801561106d57600080fd5b505af1158015611081573d6000803e3d6000fd5b50505050610eb58482612236565b606081428110156110b25760405162461bcd60e51b815260040161053590613acb565b6001602960991b0186866000816110cb576110cb613b2f565b90506020020160208101906110e09190613b45565b6001600160a01b0316146111065760405162461bcd60e51b815260040161053590613b62565b61114b6018602960991b013488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061231592505050565b915086826001845161115d9190613b18565b8151811061116d5761116d613b2f565b602002602001015110156111935760405162461bcd60e51b815260040161053590613b99565b6001602960991b016001600160a01b031663d0e30db0836000815181106111bc576111bc613b2f565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156111ef57600080fd5b505af1158015611203573d6000803e3d6000fd5b50505050506001602960991b016001600160a01b031663a9059cbb61123c6018602960991b0189896000818110610cc257610cc2613b2f565b8460008151811061124f5761124f613b2f565b60200260200101516040518363ffffffff1660e01b81526004016112889291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b1580156112a257600080fd5b505af11580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da9190613c83565b6112e6576112e6613501565b61132582878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612751915050565b5095945050505050565b606081428110156113525760405162461bcd60e51b815260040161053590613acb565b6113976018602960991b018988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061290a92505050565b915086826000815181106113ad576113ad613b2f565b60200260200101511115610a1f5760405162461bcd60e51b815260040161053590613c24565b60405163e6a4390560e01b81526001600160a01b038084166004830152821660248201526000906018602960991b019063e6a439059060440160206040518083038186803b15801561142457600080fd5b505afa158015611438573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a89190613ca0565b6000611469848484613017565b949350505050565b600081428110156114945760405162461bcd60e51b815260040161053590613acb565b6114aa886001602960991b01898989308961187a565b6040516370a0823160e01b81523060048201529093506115329150899086906001600160a01b038316906370a082319060240160206040518083038186803b1580156114f557600080fd5b505afa158015611509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152d9190613c6a565b612105565b604051632e1a7d4d60e01b8152600481018390526001602960991b0190632e1a7d4d90602401600060405180830381600087803b15801561157257600080fd5b505af1158015611586573d6000803e3d6000fd5b505050506108898483612236565b80428110156115b55760405162461bcd60e51b815260040161053590613acb565b6001602960991b0185856000816115ce576115ce613b2f565b90506020020160208101906115e39190613b45565b6001600160a01b0316146116095760405162461bcd60e51b815260040161053590613b62565b60003490506001602960991b016001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561165057600080fd5b505af1158015611664573d6000803e3d6000fd5b50505050506001602960991b016001600160a01b031663a9059cbb61169d6018602960991b0189896000818110610cc257610cc2613b2f565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b1580156116e557600080fd5b505af11580156116f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171d9190613c83565b61172957611729613501565b60008686611738600182613b18565b81811061174757611747613b2f565b905060200201602081019061175c9190613b45565b6040516370a0823160e01b81526001600160a01b03878116600483015291909116906370a082319060240160206040518083038186803b15801561179f57600080fd5b505afa1580156117b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d79190613c6a565b9050611817878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612ce0915050565b87818888611826600182613b18565b81811061183557611835613b2f565b905060200201602081019061184a9190613b45565b6040516370a0823160e01b81526001600160a01b03898116600483015291909116906370a0823190602401610e3d565b600080824281101561189e5760405162461bcd60e51b815260040161053590613acb565b60006118b26018602960991b018c8c61253a565b6040516323b872dd60e01b81523360048201526001600160a01b03821660248201819052604482018c90529192506323b872dd90606401602060405180830381600087803b15801561190357600080fd5b505af1158015611917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193b9190613c83565b5060405163226bf2d160e21b81526001600160a01b03878116600483015260009182918416906389afcb44906024016040805180830381600087803b15801561198357600080fd5b505af1158015611997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bb9190613cbd565b9150915060006119cb8e8e6130b5565b509050806001600160a01b03168e6001600160a01b0316146119ee5781836119f1565b82825b90975095508a871015611a165760405162461bcd60e51b815260040161053590613ce1565b89861015611a365760405162461bcd60e51b815260040161053590613d26565b505050505097509795505050505050565b60606108a86018602960991b018484612315565b600080611a706018602960991b0185856131a4565b915091505b9250929050565b6000806000611a9a6018602960991b018e6001602960991b0161253a565b9050600087611aa9578c611aad565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90611ae8903390309086908f908e908e908e90600401613be3565b600060405180830381600087803b158015611b0257600080fd5b505af1158015611b16573d6000803e3d6000fd5b50505050611b288e8e8e8e8e8e610511565b909f909e509c50505050505050505050505050565b60008060008342811015611b635760405162461bcd60e51b815260040161053590613acb565b611b718c8c8c8c8c8c6131ec565b90945092506000611b8a6018602960991b018e8e61253a565b9050611b988d338388612613565b611ba48c338387612613565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b158015611be757600080fd5b505af1158015611bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1f9190613c6a565b92505050985098509895505050505050565b60008060008342811015611c575760405162461bcd60e51b815260040161053590613acb565b611c6c8a6001602960991b018b348c8c6131ec565b90945092506000611c8c6018602960991b018c6001602960991b0161253a565b9050611c9a8b338388612613565b6001602960991b016001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015611cdc57600080fd5b505af1158015611cf0573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b0385166004820152602481018890526001602960991b01935063a9059cbb92506044019050602060405180830381600087803b158015611d4557600080fd5b505af1158015611d59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7d9190613c83565b611d8957611d89613501565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b158015611dcc57600080fd5b505af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e049190613c6a565b925083341115611e2157611e2133611e1c8634613b18565b612236565b505096509650969350505050565b60608142811015611e525760405162461bcd60e51b815260040161053590613acb565b6001602960991b018686600081611e6b57611e6b613b2f565b9050602002016020810190611e809190613b45565b6001600160a01b031614611ea65760405162461bcd60e51b815260040161053590613b62565b611eeb6018602960991b018888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061290a92505050565b91503482600081518110611f0157611f01613b2f565b60200260200101511115611f275760405162461bcd60e51b815260040161053590613c24565b6001602960991b016001600160a01b031663d0e30db083600081518110611f5057611f50613b2f565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611f8357600080fd5b505af1158015611f97573d6000803e3d6000fd5b50505050506001602960991b016001600160a01b031663a9059cbb611fd06018602960991b0189896000818110610cc257610cc2613b2f565b84600081518110611fe357611fe3613b2f565b60200260200101516040518363ffffffff1660e01b815260040161201c9291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561203657600080fd5b505af115801561204a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206e9190613c83565b61207a5761207a613501565b6120b982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612751915050565b816000815181106120cc576120cc613b2f565b60200260200101513411156113255761132533836000815181106120f2576120f2613b2f565b602002602001015134611e1c9190613b18565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916121619190613d97565b6000604051808303816000865af19150503d806000811461219e576040519150601f19603f3d011682016040523d82523d6000602084013e6121a3565b606091505b50915091508180156121cd5750805115806121cd5750808060200190518101906121cd9190613c83565b61222f5760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b6064820152608401610535565b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040516122609190613d97565b60006040518083038185875af1925050503d806000811461229d576040519150601f19603f3d011682016040523d82523d6000602084013e6122a2565b606091505b50509050806123105760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527308115512081d1c985b9cd9995c8819985a5b195960621b6064820152608401610535565b505050565b60606002825110156123695760405162461bcd60e51b815260206004820152601d60248201527f5465616c737761704c6962726172793a20494e56414c49445f504154480000006044820152606401610535565b815167ffffffffffffffff81111561238357612383613699565b6040519080825280602002602001820160405280156123ac578160200160208202803683370190505b50905082816000815181106123c3576123c3613b2f565b60200260200101818152505060005b600183516123e09190613b18565b8110156125325760006124318483815181106123fe576123fe613b2f565b6020026020010151858460016124149190613db3565b8151811061242457612424613b2f565b60200260200101516130b5565b509050600061247f8786858151811061244c5761244c613b2f565b6020026020010151878660016124629190613db3565b8151811061247257612472613b2f565b602002602001015161253a565b90506000806124bc83856001600160a01b03168988815181106124a4576124a4613b2f565b60200260200101516001600160a01b031614156133de565b9150915060006124cb84613488565b90506124f28787815181106124e2576124e2613b2f565b6020026020010151848484612b08565b876124fe886001613db3565b8151811061250e5761250e613b2f565b6020026020010181815250505050505050808061252a90613dcb565b9150506123d2565b509392505050565b600080600061254985856130b5565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016125f19291906001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527f4c617d0b01ec3bdb54c1da74a5e8c2a1a6197da15cfaab3f15b42ef728438fe1603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916126779190613d97565b6000604051808303816000865af19150503d80600081146126b4576040519150601f19603f3d011682016040523d82523d6000602084013e6126b9565b606091505b50915091508180156126e35750805115806126e35750808060200190518101906126e39190613c83565b6127495760405162461bcd60e51b815260206004820152603160248201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472604482015270185b9cd9995c919c9bdb4819985a5b1959607a1b6064820152608401610535565b505050505050565b60005b600183516127629190613b18565b8110156129045760008084838151811061277e5761277e613b2f565b6020026020010151858460016127949190613db3565b815181106127a4576127a4613b2f565b60200260200101519150915060006127bc83836130b5565b5090506000876127cd866001613db3565b815181106127dd576127dd613b2f565b60200260200101519050600080836001600160a01b0316866001600160a01b03161461280b5782600061280f565b6000835b91509150600060028a516128239190613b18565b881061282f5788612847565b6128476018602960991b01878c6124628c6002613db3565b905061285b6018602960991b01888861253a565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015612898576020820181803683370190505b506040518563ffffffff1660e01b81526004016128b89493929190613de6565b600060405180830381600087803b1580156128d257600080fd5b505af11580156128e6573d6000803e3d6000fd5b505050505050505050505080806128fc90613dcb565b915050612754565b50505050565b606060028251101561295e5760405162461bcd60e51b815260206004820152601d60248201527f5465616c737761704c6962726172793a20494e56414c49445f504154480000006044820152606401610535565b815167ffffffffffffffff81111561297857612978613699565b6040519080825280602002602001820160405280156129a1578160200160208202803683370190505b5090508281600183516129b49190613b18565b815181106129c4576129c4613b2f565b6020026020010181815250506000600183516129e09190613b18565b90505b8015612532576000612a24846129fa600185613b18565b81518110612a0a57612a0a613b2f565b602002602001015185848151811061242457612424613b2f565b5090506000612a638786612a39600187613b18565b81518110612a4957612a49613b2f565b602002602001015187868151811061247257612472613b2f565b9050600080612a92836001600160a01b03861689612a8260018a613b18565b815181106124a4576124a4613b2f565b915091506000612aa184613488565b9050612ac8878781518110612ab857612ab8613b2f565b6020026020010151848484612bf1565b87612ad4600189613b18565b81518110612ae457612ae4613b2f565b60200260200101818152505050505050508080612b0090613e36565b9150506129e3565b6000808511612b6c5760405162461bcd60e51b815260206004820152602a60248201527f5465616c737761704c6962726172793a20494e53554646494349454e545f494e60448201526914155517d05353d5539560b21b6064820152608401610535565b600084118015612b7c5750600083115b612b985760405162461bcd60e51b815260040161053590613e4d565b6000612ba683612710613b18565b612bb09087613e94565b90506000612bbe8583613e94565b9050600082612bcf88612710613e94565b612bd99190613db3565b9050612be58183613eb3565b98975050505050505050565b6000808511612c565760405162461bcd60e51b815260206004820152602b60248201527f5465616c737761704c6962726172793a20494e53554646494349454e545f4f5560448201526a1514155517d05353d5539560aa1b6064820152608401610535565b600084118015612c665750600083115b612c825760405162461bcd60e51b815260040161053590613e4d565b6000612c8e8686613e94565b612c9a90612710613e94565b90506000612caa84612710613b18565b612cb48887613b18565b612cbe9190613e94565b9050612cca8183613eb3565b612cd5906001613db3565b979650505050505050565b60005b60018351612cf19190613b18565b81101561231057600080848381518110612d0d57612d0d613b2f565b602002602001015185846001612d239190613db3565b81518110612d3357612d33613b2f565b6020026020010151915091506000612d4b83836130b5565b5090506000612d626018602960991b01858561253a565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612da357600080fd5b505afa158015612db7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddb9190613eec565b506001600160701b031691506001600160701b03169150600080876001600160a01b03168a6001600160a01b031614612e15578284612e18565b83835b6040516370a0823160e01b81526001600160a01b038a8116600483015292945090925083918c16906370a082319060240160206040518083038186803b158015612e6157600080fd5b505afa158015612e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e999190613c6a565b612ea39190613b18565b9550612f218683838a6001600160a01b03166324a9d8536040518163ffffffff1660e01b815260040160206040518083038186803b158015612ee457600080fd5b505afa158015612ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1c9190613c6a565b612b08565b945050505050600080856001600160a01b0316886001600160a01b031614612f4b57826000612f4f565b6000835b91509150600060028c51612f639190613b18565b8a10612f6f578a612f87565b612f876018602960991b01898e6124628e6002613db3565b6040805160008152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f90612fc99086908690869060248101613de6565b600060405180830381600087803b158015612fe357600080fd5b505af1158015612ff7573d6000803e3d6000fd5b50505050505050505050505050808061300f90613dcb565b915050612ce3565b60008084116130745760405162461bcd60e51b8152602060048201526024808201527f5465616c737761704c6962726172793a20494e53554646494349454e545f414d60448201526313d5539560e21b6064820152608401610535565b6000831180156130845750600082115b6130a05760405162461bcd60e51b815260040161053590613e4d565b826130ab8386613e94565b6114699190613eb3565b600080826001600160a01b0316846001600160a01b031614156131265760405162461bcd60e51b8152602060048201526024808201527f5465616c737761704c6962726172793a204944454e544943414c5f41444452456044820152635353455360e01b6064820152608401610535565b826001600160a01b0316846001600160a01b031610613146578284613149565b83835b90925090506001600160a01b038216611a755760405162461bcd60e51b815260206004820152601d60248201527f5465616c737761704c6962726172793a205a45524f5f414444524553530000006044820152606401610535565b60008060006131b385856130b5565b5090506131df6131c487878761253a565b826001600160a01b0316876001600160a01b031614156133de565b9250925050935093915050565b60405163e6a4390560e01b81526001600160a01b03808816600483015286166024820152600090819081906018602960991b019063e6a439059060440160206040518083038186803b15801561324157600080fd5b505afa158015613255573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132799190613ca0565b6001600160a01b03161415613312576040516364e329cb60e11b81526001600160a01b03808a166004830152881660248201526018602960991b019063c9c6539690604401602060405180830381600087803b1580156132d857600080fd5b505af11580156132ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133109190613ca0565b505b6000806133276018602960991b018b8b6131a4565b91509150816000148015613339575080155b15613349578793508692506133d1565b6000613356898484613017565b905087811161338a578581101561337f5760405162461bcd60e51b815260040161053590613d26565b8894509250826133cf565b6000613397898486613017565b9050898111156133a9576133a9613501565b878110156133c95760405162461bcd60e51b815260040161053590613ce1565b94508793505b505b5050965096945050505050565b600080600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561341d57600080fd5b505afa158015613431573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134559190613eec565b506001600160701b031691506001600160701b031691508461347857818161347b565b80825b9097909650945050505050565b6000816001600160a01b03166324a9d8536040518163ffffffff1660e01b815260040160206040518083038186803b1580156134c357600080fd5b505afa1580156134d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fb9190613c6a565b92915050565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b038116811461352c57600080fd5b50565b803561353a81613517565b919050565b60008060008060008060c0878903121561355857600080fd5b863561356381613517565b9550602087013594506040870135935060608701359250608087013561358881613517565b8092505060a087013590509295509295509295565b60008083601f8401126135af57600080fd5b50813567ffffffffffffffff8111156135c757600080fd5b6020830191508360208260051b8501011115611a7557600080fd5b60008060008060008060a087890312156135fb57600080fd5b8635955060208701359450604087013567ffffffffffffffff81111561362057600080fd5b61362c89828a0161359d565b909550935050606087013561364081613517565b80925050608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b8181101561368d57835183529284019291840191600101613671565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156136c257600080fd5b8235915060208084013567ffffffffffffffff808211156136e257600080fd5b818601915086601f8301126136f657600080fd5b81358181111561370857613708613699565b8060051b604051601f19603f8301168101818110858211171561372d5761372d613699565b60405291825284820192508381018501918983111561374b57600080fd5b938501935b82851015613770576137618561352f565b84529385019392850192613750565b8096505050505050509250929050565b801515811461352c57600080fd5b803560ff8116811461353a57600080fd5b60008060008060008060008060008060006101608c8e0312156137c157600080fd5b8b356137cc81613517565b9a5060208c01356137dc81613517565b995060408c0135985060608c0135975060808c0135965060a08c013561380181613517565b955060c08c0135945060e08c013561381881613780565b93506138276101008d0161378e565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806000806080858703121561385f57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000806000806000806000806101408b8d03121561389b57600080fd5b8a356138a681613517565b995060208b0135985060408b0135975060608b0135965060808b01356138cb81613517565b955060a08b0135945060c08b01356138e281613780565b93506138f060e08c0161378e565b92506101008b013591506101208b013590509295989b9194979a5092959850565b60008060008060006080868803121561392957600080fd5b85359450602086013567ffffffffffffffff81111561394757600080fd5b6139538882890161359d565b909550935050604086013561396781613517565b949793965091946060013592915050565b6000806040838503121561398b57600080fd5b823561399681613517565b915060208301356139a681613517565b809150509250929050565b6000806000606084860312156139c657600080fd5b505081359360208301359350604090920135919050565b600080600080600080600060e0888a0312156139f857600080fd5b8735613a0381613517565b96506020880135613a1381613517565b955060408801359450606088013593506080880135925060a0880135613a3881613517565b8092505060c0880135905092959891949750929550565b600080600080600080600080610100898b031215613a6c57600080fd5b8835613a7781613517565b97506020890135613a8781613517565b965060408901359550606089013594506080890135935060a0890135925060c0890135613ab381613517565b8092505060e089013590509295985092959890939650565b60208082526017908201527f5465616c73776170526f757465723a2045585049524544000000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082821015613b2a57613b2a613b02565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613b5757600080fd5b81356108a881613517565b6020808252601c908201527f5465616c73776170526f757465723a20494e56414c49445f5041544800000000604082015260600190565b6020808252602a908201527f5465616c73776170526f757465723a20494e53554646494349454e545f4f555460408201526914155517d05353d5539560b21b606082015260800190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b60208082526026908201527f5465616c73776170526f757465723a204558434553534956455f494e5055545f604082015265105353d5539560d21b606082015260800190565b600060208284031215613c7c57600080fd5b5051919050565b600060208284031215613c9557600080fd5b81516108a881613780565b600060208284031215613cb257600080fd5b81516108a881613517565b60008060408385031215613cd057600080fd5b505080516020909101519092909150565b60208082526025908201527f5465616c73776170526f757465723a20494e53554646494349454e545f415f416040820152641353d5539560da1b606082015260800190565b60208082526025908201527f5465616c73776170526f757465723a20494e53554646494349454e545f425f416040820152641353d5539560da1b606082015260800190565b60005b83811015613d86578181015183820152602001613d6e565b838111156129045750506000910152565b60008251613da9818460208701613d6b565b9190910192915050565b60008219821115613dc657613dc6613b02565b500190565b6000600019821415613ddf57613ddf613b02565b5060010190565b84815283602082015260018060a01b03831660408201526080606082015260008251806080840152613e1f8160a0850160208701613d6b565b601f01601f19169190910160a00195945050505050565b600081613e4557613e45613b02565b506000190190565b60208082526027908201527f5465616c737761704c6962726172793a20494e53554646494349454e545f4c496040820152665155494449545960c81b606082015260800190565b6000816000190483118215151615613eae57613eae613b02565b500290565b600082613ed057634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160701b038116811461353a57600080fd5b600080600060608486031215613f0157600080fd5b613f0a84613ed5565b9250613f1860208501613ed5565b9150604084015163ffffffff81168114613f3157600080fd5b80915050925092509256fea2646970667358221220202d9a6c54c30c5fab572353ad8f7753e73c7dc5f92fce696c0a7c9715727f5164736f6c63430008090033", - ), - }, - } - - deployments5 = []*deployment{ - { - contract: stakeManager, - // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/2548a7979a1bec95d05ae729b6c75ab0ff56ba45/contracts/StakeManager.sol - code: mustDecodeCode("0x6080604052600436106102465760003560e01c80637243199111610139578063cf5c13db116100b6578063e1aca3411161007a578063e1aca341146107cf578063f3621e43146107ef578063f65a5ed21461080f578063f8d6b1ab1461082f578063fa52c7d81461084f578063ff3d3f60146108be57600080fd5b8063cf5c13db146106cd578063d0051adf146106ed578063d1f18ee11461071e578063dbd61d8714610776578063df93c8421461079657600080fd5b80639043150b116100fd5780639043150b1461062f5780639168ae7214610637578063ac7475ed1461066d578063ad71bd361461068d578063cbc0fac6146106ad57600080fd5b8063724319911461055557806374e2b63c146105865780637b520aa8146105ab5780637befa74f146105e157806388325234146105f457600080fd5b80632b47da52116101c7578063485cc9551161018b578063485cc955146104a55780635c4fc4c5146104c55780635d94ccf6146104f55780635efc766e146105155780636b2b33691461053557600080fd5b80632b47da52146103de57806333f32d7814610416578063428e85621461043657806345367f231461045657806346dfce7b1461047657600080fd5b8063195afea11161020e578063195afea11461030a5780631c1b4f3a1461032a5780632168e8b41461034a57806322226367146103785780632b42ed8c146103ad57600080fd5b806302fb4d851461024b5780630ddda63c1461026d578063158ef93e1461028d5780631903cf16146102bc578063190b9257146102dc575b600080fd5b34801561025757600080fd5b5061026b610266366004614acc565b6108de565b005b34801561027957600080fd5b5061026b610288366004614af8565b610ae4565b34801561029957600080fd5b506000546102a79060ff1681565b60405190151581526020015b60405180910390f35b3480156102c857600080fd5b5061026b6102d7366004614ba3565b610cef565b3480156102e857600080fd5b506102fc6102f7366004614af8565b610ee8565b6040519081526020016102b3565b34801561031657600080fd5b506102fc610325366004614acc565b610f09565b34801561033657600080fd5b506102fc610345366004614af8565b610f40565b34801561035657600080fd5b5061036a610365366004614c4d565b610f50565b6040516102b3929190614cb3565b34801561038457600080fd5b50610398610393366004614acc565b611036565b604080519283526020830191909152016102b3565b3480156103b957600080fd5b506103cd6103c8366004614cd5565b611104565b6040516102b3959493929190614d40565b3480156103ea57600080fd5b506001546103fe906001600160a01b031681565b6040516001600160a01b0390911681526020016102b3565b34801561042257600080fd5b506102fc610431366004614da0565b611451565b34801561044257600080fd5b5061026b610451366004614ba3565b611610565b34801561046257600080fd5b506102fc610471366004614af8565b611809565b34801561048257600080fd5b50610496610491366004614cd5565b61189f565b6040516102b393929190614e3f565b3480156104b157600080fd5b5061026b6104c0366004614e75565b611afc565b3480156104d157600080fd5b506104e56104e0366004614acc565b611b7b565b6040516102b39493929190614ee6565b34801561050157600080fd5b5061026b610510366004614af8565b611c47565b34801561052157600080fd5b506103fe610530366004614af8565b611d51565b34801561054157600080fd5b5061026b610550366004614f11565b611d7b565b34801561056157600080fd5b50610575610570366004614f2e565b611ec3565b6040516102b3959493929190614f8c565b34801561059257600080fd5b506000546103fe9061010090046001600160a01b031681565b3480156105b757600080fd5b506103fe6105c6366004614f11565b6006602052600090815260409020546001600160a01b031681565b61026b6105ef366004614fd9565b61227f565b34801561060057600080fd5b5061061461060f366004614f11565b61244a565b604080519384526020840192909252908201526060016102b3565b61026b6124ca565b34801561064357600080fd5b506103fe610652366004614f11565b6007602052600090815260409020546001600160a01b031681565b34801561067957600080fd5b5061026b610688366004614f11565b6124ff565b34801561069957600080fd5b5061036a6106a8366004614c4d565b6125c6565b3480156106b957600080fd5b5061026b6106c8366004614acc565b6126a4565b3480156106d957600080fd5b5061026b6106e8366004614acc565b61274c565b3480156106f957600080fd5b5061070d61070836600461501e565b61294b565b6040516102b3959493929190615053565b34801561072a57600080fd5b5061073e610739366004614acc565b612c03565b604080516001600160a01b0390961686529315156020860152911515928401929092529015156060830152608082015260a0016102b3565b34801561078257600080fd5b506102fc6107913660046150bc565b612d93565b3480156107a257600080fd5b506102fc6107b1366004614f11565b6001600160a01b031660009081526007602052604090206006015490565b3480156107db57600080fd5b5061026b6107ea366004614fd9565b612ddb565b3480156107fb57600080fd5b5061026b61080a3660046150bc565b612df4565b34801561081b57600080fd5b506103fe61082a366004614af8565b612f00565b34801561083b57600080fd5b5061026b61084a366004614f11565b612f10565b34801561085b57600080fd5b5061089861086a366004614f11565b6004602052600090815260409020805460018201546006909201546001600160a01b03918216929091169083565b604080516001600160a01b039485168152939092166020840152908201526060016102b3565b3480156108ca57600080fd5b5061026b6108d9366004614fd9565b612f72565b6001600160a01b038083166000908152600660209081526040808320548416808452600490925290912054909116610929576040516372898ae960e11b815260040160405180910390fd5b33411461094957604051631cf4735960e01b815260040160405180910390fd5b6001600160a01b038084166000908152600660209081526040808320548416835260049182905280832083548251633fa4f24560e01b815292519195610a5c946101009092041692633fa4f2459281830192610120928290030181865afa1580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc91906150ec565b600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a539190615167565b84919087613253565b82546040519192506001600160a01b0316907f1647efd0ce9727dc31dc201c9d8d35ac687f7370adcacbd454afc6485ddabfda90600090a28015610add5781546040518281526001600160a01b03909116907feb7d7a49847ec491969db21a0e31b234565a9923145a2d1b56a75c9e95825802906020015b60405180910390a25b5050505050565b336000818152600460205260409020546001600160a01b0316610b1a576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316610b505760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc79190615180565b15610be557604051631e59ccd960e01b815260040160405180910390fd5b60008054338252600460205260408220610c0d9161010090046001600160a01b03168661333b565b905080610c2d57604051637bc90c0560e11b815260040160405180910390fd5b610cb13333600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca99190615167565b60008561335b565b604051818152339081907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba1043836906020015b60405180910390a350505050565b6001600160a01b03828116600090815260046020526040902080548492163314801590610d29575060018101546001600160a01b03163314155b15610d4757604051630101292160e31b815260040160405180910390fd5b6001600160a01b03808516600090815260046020526040902054859116610d81576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df89190615180565b15610e1657604051631e59ccd960e01b815260040160405180910390fd5b610eaf600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e909190615167565b6001600160a01b03871660009081526004602052604090209086613409565b846001600160a01b03167fc11dfc9c24621433bb10587dc4bbae26a33a4aff53914e0d4c9fddf224a8cb7d85604051610ad491906151a2565b60028181548110610ef857600080fd5b600091825260209091200154905081565b600080546001600160a01b038481168352600460205260408320610f36929091610100909104168461341b565b5090505b92915050565b60038181548110610ef857600080fd5b60606000610f6484846005805490506135ae565b9093509050826001600160401b03811115610f8157610f81614b11565b604051908082528060200260200182016040528015610faa578160200160208202803683370190505b50915060005b8381101561102e576005610fc482876151cb565b81548110610fd457610fd46151e3565b9060005260206000200160009054906101000a90046001600160a01b0316838281518110611004576110046151e3565b6001600160a01b039092166020928302919091019091015280611026816151f9565b915050610fb0565b509250929050565b6000806110f9600084116110c057600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611097573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bb9190615167565b6110c2565b835b6001600160a01b038616600090815260046020908152604080832093835260098401825280832054600a9094019091529020549091565b909590945092505050565b6001600160a01b0384166000908152600760205260408120606091829182918291886111a657600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561117d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a19190615167565b6111a8565b885b98506111ba88886005805490506135ae565b9097509150866001600160401b038111156111d7576111d7614b11565b604051908082528060200260200182016040528015611200578160200160208202803683370190505b509550866001600160401b0381111561121b5761121b614b11565b604051908082528060200260200182016040528015611244578160200160208202803683370190505b509450866001600160401b0381111561125f5761125f614b11565b604051908082528060200260200182016040528015611288578160200160208202803683370190505b509350866001600160401b038111156112a3576112a3614b11565b6040519080825280602002602001820160405280156112cc578160200160208202803683370190505b50925060005b878110156114445760056112e6828b6151cb565b815481106112f6576112f66151e3565b9060005260206000200160009054906101000a90046001600160a01b0316878281518110611326576113266151e3565b60200260200101906001600160a01b031690816001600160a01b03168152505061137787828151811061135b5761135b6151e3565b602002602001015160008c856135e5909392919063ffffffff16565b868281518110611389576113896151e3565b6020026020010181815250506113c68782815181106113aa576113aa6151e3565b602002602001015160018c856135e5909392919063ffffffff16565b8582815181106113d8576113d86151e3565b6020026020010181815250506114158782815181106113f9576113f96151e3565b602002602001015160028c856135e5909392919063ffffffff16565b848281518110611427576114276151e3565b60209081029190910101528061143c816151f9565b9150506112d2565b5050945094509450945094565b600080600183600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ce9190615167565b6114d89190615214565b6114e29190615214565b845190915060005b84811015611607576114fd6001846151cb565b6000805460405163fcbb371b60e01b81526004810184905292955090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157591906150ec565b905060005b838110156115f2576115d48286600460008c868151811061159d5761159d6151e3565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206136a69092919063ffffffff16565b6115de90876151cb565b9550806115ea816151f9565b91505061157a565b505080806115ff906151f9565b9150506114ea565b50505092915050565b6001600160a01b0382811660009081526004602052604090208054849216331480159061164a575060018101546001600160a01b03163314155b1561166857604051630101292160e31b815260040160405180910390fd5b6001600160a01b038085166000908152600460205260409020548591166116a2576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117199190615180565b1561173757604051631e59ccd960e01b815260040160405180910390fd5b6117d0600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561178d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b19190615167565b6001600160a01b03871660009081526004602052604090209086613813565b846001600160a01b03167f0ad9bf1b8c026a174a2f30954417002a6ea00c9b08c1b8846c7951c687be809585604051610ad491906151a2565b600080821161188e57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611865573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118899190615167565b611890565b815b9150610f3a6002600384613820565b6001600160a01b038416600090815260046020526040812060609182918661193d57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611914573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119389190615167565b61193f565b865b9650611953868683600701805490506135ae565b9095509150846001600160401b0381111561197057611970614b11565b604051908082528060200260200182016040528015611999578160200160208202803683370190505b509350846001600160401b038111156119b4576119b4614b11565b6040519080825280602002602001820160405280156119dd578160200160208202803683370190505b50925060005b85811015611af05760006007818482016119fd858c6151cb565b81548110611a0d57611a0d6151e3565b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190208054885191935090911690879084908110611a5357611a536151e3565b6001600160a01b0392831660209182029290920101528354611a7a9183911660028c6135e5565b8354611a939083906001600160a01b031660018d6135e5565b8454611aac9084906001600160a01b031660008e6135e5565b611ab691906151cb565b611ac091906151cb565b858381518110611ad257611ad26151e3565b60209081029190910101525080611ae8816151f9565b9150506119e3565b50509450945094915050565b334114611b1c57604051631cf4735960e01b815260040160405180910390fd5b60005460ff1615611b3f5760405162dc149f60e41b815260040160405180910390fd5b6000805460016001600160a81b03199091166101006001600160a01b039586160217811790915580546001600160a01b03191691909216179055565b6001600160a01b03821660009081526007602052604081206006018054829182918291829187908110611bb057611bb06151e3565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115611be357611be3614eae565b6002811115611bf457611bf4614eae565b81526020016001820154815260200160028201548152505090508060000151816020015182604001518360400151600014158015611c36575083604001514210155b929a91995097509095509350505050565b336000818152600760205260409020546001600160a01b0316611c7d5760405163cf83d93d60e01b815260040160405180910390fd5b336000908152600760205260408120600601805484908110611ca157611ca16151e3565b9060005260206000209060030201905060008160020154905080421015611cdb576040516303cb96db60e21b815260040160405180910390fd5b80611cf957604051630c8d9eab60e31b815260040160405180910390fd5b6000600283015560405184815233907fbf5f92dc2b945251eadf78c2ca629ae64053d979bfbc43a7b17a463707906bf99060200160405180910390a281546001830154611d4b9160ff169033906138f2565b50505050565b60058181548110611d6157600080fd5b6000918252602090912001546001600160a01b0316905081565b60015460405163322433e360e01b81523360048201819052916001600160a01b03169063322433e390602401602060405180830381865afa158015611dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de89190615180565b611e055760405163423057c560e11b815260040160405180910390fd5b6001600160a01b0381166000908152600460205260409020611e279083613a11565b60058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b038381166001600160a01b03199283168117909355841660009081526006602090815260409182902080549093168417909255519182527fd5828184f48f65962d10eac907318df85953d4e3542a0f09b5932ee3fe398bdd910160405180910390a15050565b606080606080600080600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f439190615167565b905060008911611f535780611f55565b885b6000805460405163fcbb371b60e01b815260048101849052929b5090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015611fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fcd91906150ec565b9050611fdf89896005805490506135ae565b9098509250876001600160401b03811115611ffc57611ffc614b11565b604051908082528060200260200182016040528015612025578160200160208202803683370190505b509650876001600160401b0381111561204057612040614b11565b604051908082528060200260200182016040528015612069578160200160208202803683370190505b509550876001600160401b0381111561208457612084614b11565b6040519080825280602002602001820160405280156120ad578160200160208202803683370190505b509450876001600160401b038111156120c8576120c8614b11565b6040519080825280602002602001820160405280156120f1578160200160208202803683370190505b50935060005b888110156122715760006004816005612110858f6151cb565b81548110612120576121206151e3565b60009182526020808320909101546001600160a01b039081168452908301939093526040909101902080548b51919350909116908a9084908110612166576121666151e3565b6001600160a01b03928316602091820292909201015260018201548951911690899084908110612198576121986151e3565b6001600160a01b03909216602092830291909101909101526121ba818d613a53565b8783815181106121cc576121cc6151e3565b60209081029190910101526121f5818d6000908152600291909101602052604090205460ff1690565b158015612213575060008c815260038201602052604090205460ff16155b801561223c57508260c00151878381518110612231576122316151e3565b602002602001015110155b86838151811061224e5761224e6151e3565b911515602092830291909101909101525080612269816151f9565b9150506120f7565b505050939792965093509350565b6001600160a01b038084166000908152600460205260409020548491166122b9576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa15801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615180565b1561234e57604051631e59ccd960e01b815260040160405180910390fd5b8161236c57604051637bc90c0560e11b815260040160405180910390fd5b612377833384613a66565b6124053385600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f39190615167565b6123fe9060016151cb565b868661335b565b836001600160a01b0316336001600160a01b03167f8fc656e319452025372383dc27d933046d412b8253de50a10739eeaa59862be68585604051610ce192919061522b565b6001600160a01b03808216600090815260076020526040812081549192839283929161247f9183916101009091041684613b07565b6000549094506124a090829061010090046001600160a01b03166001613b07565b6000549093506124c190829061010090046001600160a01b03166002613b07565b93959294505050565b6040513481527f1de49774d094a85fc1bbbd16e8d09a865fb848218f41e2da4369f528c42ee42e9060200160405180910390a1565b336000818152600460205260409020546001600160a01b0316612535576040516372898ae960e11b815260040160405180910390fd5b33600081815260046020526040902060018101546001600160a01b031661255c8286613d2d565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916888616908117909155825194861685529084019290925290917f758820d0b14a01c1fa60b8d2bbef25ed1b6a5af4802e5dec3f08679255ba8bf39101610ad4565b606060006125da84846008805490506135ae565b9093509050826001600160401b038111156125f7576125f7614b11565b604051908082528060200260200182016040528015612620578160200160208202803683370190505b50915060005b8381101561102e57600861263a82876151cb565b8154811061264a5761264a6151e3565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061267a5761267a6151e3565b6001600160a01b03909216602092830291909101909101528061269c816151f9565b915050612626565b336000818152600460205260409020546001600160a01b03166126da576040516372898ae960e11b815260040160405180910390fd5b600080543382526004602052604082206127029161010090046001600160a01b03168561333b565b60405181815290915033907f882d5671e5b36af50883197c33d48ba56ce337589958e871ba82fb0a54adf3e89060200160405180910390a28015611d4b57611d4b600033836138f2565b6001600160a01b03808316600090815260046020526040902054839116612786576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166127bc5760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa15801561280f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128339190615180565b1561285157604051631e59ccd960e01b815260040160405180910390fd5b600080546001600160a01b0386811683526004602090815260408085203386526007909252842061288c939092610100909104169087613da7565b9050806128ac57604051637bc90c0560e11b815260040160405180910390fd5b6129043386600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c85573d6000803e3d6000fd5b6040518181526001600160a01b0386169033907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba10438369060200160405180910390a35050505050565b6001600160a01b03831660009081526007602052604081206006810154606092839283928392919061298090899089906135ae565b9097509150866001600160401b0381111561299d5761299d614b11565b6040519080825280602002602001820160405280156129c6578160200160208202803683370190505b509550866001600160401b038111156129e1576129e1614b11565b604051908082528060200260200182016040528015612a0a578160200160208202803683370190505b509450866001600160401b03811115612a2557612a25614b11565b604051908082528060200260200182016040528015612a4e578160200160208202803683370190505b509350866001600160401b03811115612a6957612a69614b11565b604051908082528060200260200182016040528015612a92578160200160208202803683370190505b50925060005b87811015612bf657600060068301612ab0838c6151cb565b81548110612ac057612ac06151e3565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115612af357612af3614eae565b6002811115612b0457612b04614eae565b81526020016001820154815260200160028201548152505090508060000151888381518110612b3557612b356151e3565b60200260200101906002811115612b4e57612b4e614eae565b90816002811115612b6157612b61614eae565b815250508060200151878381518110612b7c57612b7c6151e3565b6020026020010181815250508060400151868381518110612b9f57612b9f6151e3565b6020908102919091010152604081015115801590612bc1575080604001514210155b858381518110612bd357612bd36151e3565b911515602092830291909101909101525080612bee816151f9565b915050612a98565b5050939792965093509350565b600080600080600080600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c839190615167565b905060008711612c935780612c95565b865b6000805460405163fcbb371b60e01b81526004810184905292995090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015612ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0d91906150ec565b6001600160a01b038a1660009081526004602090815260408083208c8452600281018352818420546003820190935292205460ff918216159950169650909150612d57818a613a53565b9350868015612d64575085155b8015612d7457508160c001518410155b6001909101546001600160a01b03169750935050509295509295909350565b600080546001600160a01b038481168352600460209081526040808520888416865260079092528420612dd0939092610100909104169085613de0565b5090505b9392505050565b604051634ee5a1b960e01b815260040160405180910390fd5b6001600160a01b03808316600090815260046020526040902054839116612e2e576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316612e645760405163cf83d93d60e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420612e9f939092610100909104169087613da7565b604080516001600160a01b03881681526020810183905291925033917f2ef606d064225d24c1514dc94907c134faee1237445c2f63f410cce0852b2054910160405180910390a28015612ef857612ef8600033836138f2565b505050505050565b60088181548110611d6157600080fd5b336000818152600760205260409020546001600160a01b0316612f465760405163cf83d93d60e01b815260040160405180910390fd5b6000805433825260076020526040909120612f6e9161010090046001600160a01b0316613fea565b5050565b6001600160a01b03808416600090815260046020526040902054849116612fac576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316612fe25760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015613035573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130599190615180565b1561307757604051631e59ccd960e01b815260040160405180910390fd5b33600090815260076020908152604080832083546001600160a01b038a811686526004909452919093206130b592849261010090041690888861400e565b9350836130d557604051637bc90c0560e11b815260040160405180910390fd5b8060060160405180606001604052808760028111156130f6576130f6614eae565b81526020810187905260400161310f42620d2f006151cb565b9052815460018181018455600093845260209093208251600390920201805492939092839160ff199091169083600281111561314d5761314d614eae565b0217905550602082015181600101556040820151816002015550506131f96003600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e49190615167565b6131ef9060016151cb565b6002919087614150565b5060068101546001600160a01b0387169033907fb649014faa7a0e23357e091fb8a67a128c33dc9480f846f7e41cb3a6c9d806109061323a90600190615214565b60405190815260200160405180910390a3505050505050565b600082815260098501602052604081205461327c57600083815260098601602052604090208290555b6000838152600a860160205260408120546132989060016151cb565b6000858152600a88016020526040902081905560e086015190915081108015906132e457506003860160006132ce8660016151cb565b815260208101919091526040016000205460ff16155b15613332576101008501516132f990856151cb565b91505b81841015613332578361330e816151f9565b60008181526003890160205260409020805460ff1916600117905594506132fc9050565b50949350505050565b600080600061334b86868661341b565b6006880155925050509392505050565b6001600160a01b03808616600090815260076020526040902080549091166133d45780546001600160a01b0387166001600160a01b031991821681178355600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180549092161790555b6001600160a01b03851660009081526004602052604090206133fb908290869086866141e9565b612ef86002600386856142b1565b6134168383836000614302565b505050565b6000808460060154905060006001856001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613467573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061348b9190615167565b6134959190615214565b90508315806134ac5750806134aa83866151cb565b115b156134be576134bb8282615214565b93505b60005b848110156135a4576134d46001846151cb565b60405163fcbb371b60e01b8152600481018290529093506000906001600160a01b0388169063fcbb371b9060240161012060405180830381865afa158015613520573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061354491906150ec565b905060006135538983876136a6565b905080613561575050613592565b60a0820151613571575050613592565b613583818360a0015160646019614388565b61358d90876151cb565b955050505b8061359c816151f9565b9150506134c1565b5050935093915050565b600080826135bc85876151cb565b106135ce576135cb8584615214565b93505b836135d981876151cb565b91509150935093915050565b600061369b85600201600085600281111561360257613602614eae565b600281111561361357613613614eae565b81526020019081526020016000206000866001600160a01b03166001600160a01b031681526020019081526020016000208387600101600087600281111561365d5761365d614eae565b600281111561366e5761366e614eae565b8152602080820192909252604090810160009081206001600160a01b038b16825290925290209190613820565b90505b949350505050565b600081815260028401602052604081205460ff16806136d55750600082815260038501602052604090205460ff165b156136e257506000612dd4565b60006136ee8584613a53565b90506049831061372f578360c0015181101561370e576000915050612dd4565b6298968061371e82610a34615246565b6137289190615265565b91506137c8565b8061373e576000915050612dd4565b61374a6019600a615363565b61375b8560800151606460196143b4565b6137659083615246565b61376f9190615265565b915081613780576000915050612dd4565b6137a3846060015185604001516137979190615246565b6301e1338060196143b4565b6137ad9083615246565b91506137bb6019600a615363565b6137c59083615265565b91505b6000838152600a86016020526040902054801561380a576000848152600987016020526040902054613806846137fe8484615214565b836019614388565b9350505b50509392505050565b6134168383836001614302565b825460009080158061384e57508285600081548110613841576138416151e3565b9060005260206000200154115b1561385d576000915050612dd4565b828561386a600184615214565b8154811061387a5761387a6151e3565b9060005260206000200154116138b95783613896600183615214565b815481106138a6576138a66151e3565b9060005260206000200154915050612dd4565b60006138c886856000856143fa565b90508481815481106138dc576138dc6151e3565b9060005260206000200154925050509392505050565b60008084600281111561390757613907614eae565b1415613966576040516001600160a01b038416908390600081818185875af1925050503d8060008114613956576040519150601f19603f3d011682016040523d82523d6000602084013e61395b565b606091505b5050809150506139e8565b61396f846144a2565b60405163a9059cbb60e01b81526001600160a01b03858116600483015260248201859052919091169063a9059cbb906044015b6020604051808303816000875af11580156139c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139e59190615180565b90505b80611d4b5783604051630db5347560e11b8152600401613a08919061536f565b60405180910390fd5b81546001600160a01b031615613a3957604051621d934160e11b815260040160405180910390fd5b81546001600160a01b03191633178255612f6e8282613d2d565b6000612dd4600484016005850184613820565b6000836002811115613a7a57613a7a614eae565b1415613aa05780341461341657604051630fe5b06560e11b815260040160405180910390fd5b3415613abf5760405163a745ac8560e01b815260040160405180910390fd5b6000613aca846144a2565b6040516323b872dd60e01b81526001600160a01b0385811660048301523060248301526044820185905291909116906323b872dd906064016139a2565b600080846003016000846002811115613b2257613b22614eae565b6002811115613b3357613b33614eae565b8152602081019190915260400160002054905080613b55576000915050612dd4565b6000846001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bb99190615167565b90506000613bc8600184615214565b9050600081118015613c2b575081876003016000876002811115613bee57613bee614eae565b6002811115613bff57613bff614eae565b81526020019081526020016000208281548110613c1e57613c1e6151e3565b9060005260206000200154115b15613c3e5780613c3a8161537d565b9150505b81876003016000876002811115613c5757613c57614eae565b6002811115613c6857613c68614eae565b81526020019081526020016000208281548110613c8757613c876151e3565b90600052602060002001541115613ca45760009350505050612dd4565b6000805b828111613d2157886004016000886002811115613cc757613cc7614eae565b6002811115613cd857613cd8614eae565b81526020019081526020016000208181548110613cf757613cf76151e3565b906000526020600020015482613d0d91906151cb565b915080613d19816151f9565b915050613ca8565b50979650505050505050565b6001600160a01b038116613d5457604051637138356f60e01b815260040160405180910390fd5b81546001600160a01b0382811691161415613d825760405163e037058f60e01b815260040160405180910390fd5b60019190910180546001600160a01b0319166001600160a01b03909216919091179055565b6000806000613db887878787613de0565b86546001600160a01b0316600090815260058a01602052604090205592505050949350505050565b81546001600160a01b039081166000908152600586016020908152604080832054815163900cf0cf60e01b81529151939490938593600193928a169263900cf0cf92600480830193928290030181865afa158015613e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e669190615167565b613e709190615214565b9050831580613e87575080613e8583866151cb565b115b15613e9957613e968282615214565b93505b60005b84811015613fdf57613eaf6001846151cb565b8654909350600090613ece908a906001600160a01b03166002876135e5565b8754613ee7908b906001600160a01b03166001886135e5565b8854613f00908c906001600160a01b03166000896135e5565b613f0a91906151cb565b613f1491906151cb565b905080613f215750613fcd565b60405163fcbb371b60e01b815260048101859052600090613f9a906001600160a01b038b169063fcbb371b9060240161012060405180830381865afa158015613f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f9291906150ec565b89908761450d565b905080613fa8575050613fcd565b613fbe8183613fb78b89613a53565b6019614388565b613fc890876151cb565b955050505b80613fd7816151f9565b915050613e9c565b505094509492505050565b613ff682826001614558565b61400282826002614558565b612f6e82826000614558565b600061412a86600201600085600281111561402b5761402b614eae565b600281111561403c5761403c614eae565b81526020808201929092526040908101600090812088546001600160a01b03908116835290845290829020825163900cf0cf60e01b815292519093918a169263900cf0cf9260048083019391928290030181865afa1580156140a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140c69190615167565b6140d19060016151cb565b848960010160008860028111156140ea576140ea614eae565b60028111156140fb576140fb614eae565b8152602080820192909252604090810160009081208b546001600160a01b031682529092529020929190614150565b91508161413957506000614147565b61414484868461487e565b50805b95945050505050565b600061415d8585856148fe565b845460008561416d600184615214565b8154811061417d5761417d6151e3565b9060005260206000200154905080841115614198578061419a565b835b935083156141de5783866141af600185615214565b815481106141bf576141bf6151e3565b9060005260206000200160008282546141d89190615214565b90915550505b509195945050505050565b61429885600201600084600281111561420457614204614eae565b600281111561421557614215614eae565b81526020808201929092526040908101600090812087546001600160a01b031682529092528120908690849060018a019087600281111561425857614258614eae565b600281111561426957614269614eae565b8152602080820192909252604090810160009081208a546001600160a01b0316825290925290209291906142b1565b8454610add90849086906001600160a01b0316846149b6565b6142bc8484846148fe565b8354819084906142ce90600190615214565b815481106142de576142de6151e3565b9060005260206000200160008282546142f791906151cb565b909155505050505050565b815160005b81811015612ef8576000848281518110614323576143236151e3565b6020026020010151905085811180156143535750600081815260028801602052604090205460ff16151584151514155b156143755760008181526002880160205260409020805460ff19168515151790555b5080614380816151f9565b915050614307565b600061439582600a615363565b6143a08585856143b4565b6143aa9087615246565b61369b9190615265565b6000806143c28360016151cb565b6143cd90600a615363565b6143d79086615246565b9050600a6143e58583615265565b6143f09060056151cb565b6141479190615265565b6000818314156144165761440f600183615214565b905061369e565b6000600261442484866151cb565b61442e9190615265565b905084868281548110614443576144436151e3565b9060005260206000200154111561446857614460868686846143fa565b91505061369e565b8486828154811061447b5761447b6151e3565b9060005260206000200154101561369b57614460868661449c8460016151cb565b866143fa565b600060018260028111156144b8576144b8614eae565b14156144cc57506001602960991b01919050565b60028260028111156144e0576144e0614eae565b14156144f457506002602960991b01919050565b604051638698bf3760e01b815260040160405180910390fd5b60008061451b8585856136a6565b90508061452c576000915050612dd4565b60a084015161453c579050612dd4565b61454e818560a0015160646019614388565b6141479082615214565b6000614565848484613b07565b9050806145725750505050565b600084600301600084600281111561458c5761458c614eae565b600281111561459d5761459d614eae565b8152602001908152602001600020805490509050836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156145ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146139190615167565b85600301600085600281111561462b5761462b614eae565b600281111561463c5761463c614eae565b81526020019081526020016000206001836146579190615214565b81548110614667576146676151e3565b9060005260206000200154116147025784600301600084600281111561468f5761468f614eae565b60028111156146a0576146a0614eae565b815260200190815260200160002060006146ba9190614a36565b8460040160008460028111156146d2576146d2614eae565b60028111156146e3576146e3614eae565b815260200190815260200160002060006146fd9190614a36565b614867565b604051806020016040528086600301600086600281111561472557614725614eae565b600281111561473657614736614eae565b81526020019081526020016000206001846147519190615214565b81548110614761576147616151e3565b906000526020600020015481525085600301600085600281111561478757614787614eae565b600281111561479857614798614eae565b815260208101919091526040016000206147b3916001614a57565b5060405180602001604052808660040160008660028111156147d7576147d7614eae565b60028111156147e8576147e8614eae565b81526020019081526020016000206001846148039190615214565b81548110614813576148136151e3565b906000526020600020015481525085600401600085600281111561483957614839614eae565b600281111561484a5761484a614eae565b81526020810191909152604001600020614865916001614a57565b505b8454610add9084906001600160a01b0316846138f2565b611d4b83600501836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156148c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148e79190615167565b6148f29060016151cb565b60048601919084614150565b82548061492857508254600181810185556000948552602085209091019190915581540181559052565b600084614936600184615214565b81548110614946576149466151e3565b90600052602060002001549050828114610add57845460018181018755600087815260209020909101849055849081906149809085615214565b81548110614990576149906151e3565b600091825260208083209091015483546001810185559383529120909101555050505050565b6001600160a01b038216600090815260088501602052604090205460ff16614a24576001600160a01b038216600081815260088601602090815260408220805460ff191660019081179091556007880180549182018155835291200180546001600160a01b03191690911790555b611d4b600485016005860185846142b1565b5080546000825590600052602060002090810190614a549190614aa2565b50565b828054828255906000526020600020908101928215614a92579160200282015b82811115614a92578251825591602001919060010190614a77565b50614a9e929150614aa2565b5090565b5b80821115614a9e5760008155600101614aa3565b6001600160a01b0381168114614a5457600080fd5b60008060408385031215614adf57600080fd5b8235614aea81614ab7565b946020939093013593505050565b600060208284031215614b0a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715614b4a57614b4a614b11565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614b7857614b78614b11565b604052919050565b60006001600160401b03821115614b9957614b99614b11565b5060051b60200190565b60008060408385031215614bb657600080fd5b8235614bc181614ab7565b91506020838101356001600160401b03811115614bdd57600080fd5b8401601f81018613614bee57600080fd5b8035614c01614bfc82614b80565b614b50565b81815260059190911b82018301908381019088831115614c2057600080fd5b928401925b82841015614c3e57833582529284019290840190614c25565b80955050505050509250929050565b60008060408385031215614c6057600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015614ca85781516001600160a01b031687529582019590820190600101614c83565b509495945050505050565b604081526000614cc66040830185614c6f565b90508260208301529392505050565b60008060008060808587031215614ceb57600080fd5b8435614cf681614ab7565b966020860135965060408601359560600135945092505050565b600081518084526020808501945080840160005b83811015614ca857815187529582019590820190600101614d24565b60a081526000614d5360a0830188614c6f565b8281036020840152614d658188614d10565b90508281036040840152614d798187614d10565b90508281036060840152614d8d8186614d10565b9150508260808301529695505050505050565b60008060408385031215614db357600080fd5b82356001600160401b03811115614dc957600080fd5b8301601f81018513614dda57600080fd5b80356020614dea614bfc83614b80565b82815260059290921b83018101918181019088841115614e0957600080fd5b938201935b83851015614e30578435614e2181614ab7565b82529382019390820190614e0e565b98969091013596505050505050565b606081526000614e526060830186614c6f565b8281036020840152614e648186614d10565b915050826040830152949350505050565b60008060408385031215614e8857600080fd5b8235614e9381614ab7565b91506020830135614ea381614ab7565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60038110614ee257634e487b7160e01b600052602160045260246000fd5b9052565b60808101614ef48287614ec4565b846020830152836040830152821515606083015295945050505050565b600060208284031215614f2357600080fd5b8135612dd481614ab7565b600080600060608486031215614f4357600080fd5b505081359360208301359350604090920135919050565b600081518084526020808501945080840160005b83811015614ca8578151151587529582019590820190600101614f6e565b60a081526000614f9f60a0830188614c6f565b8281036020840152614fb18188614c6f565b90508281036040840152614fc58187614d10565b90508281036060840152614d8d8186614f5a565b600080600060608486031215614fee57600080fd5b8335614ff981614ab7565b925060208401356003811061500d57600080fd5b929592945050506040919091013590565b60008060006060848603121561503357600080fd5b833561503e81614ab7565b95602085013595506040909401359392505050565b60a0808252865190820181905260009060209060c0840190828a01845b8281101561509357615083848351614ec4565b9284019290840190600101615070565b505050838103828501526150a78189614d10565b9150508281036040840152614fc58187614d10565b6000806000606084860312156150d157600080fd5b83356150dc81614ab7565b9250602084013561500d81614ab7565b600061012082840312156150ff57600080fd5b615107614b27565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b60006020828403121561517957600080fd5b5051919050565b60006020828403121561519257600080fd5b81518015158114612dd457600080fd5b602081526000612dd46020830184614d10565b634e487b7160e01b600052601160045260246000fd5b600082198211156151de576151de6151b5565b500190565b634e487b7160e01b600052603260045260246000fd5b600060001982141561520d5761520d6151b5565b5060010190565b600082821015615226576152266151b5565b500390565b604081016152398285614ec4565b8260208301529392505050565b6000816000190483118215151615615260576152606151b5565b500290565b60008261528257634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561102e5781600019048211156152a8576152a86151b5565b808516156152b557918102915b93841c939080029061528c565b6000826152d157506001610f3a565b816152de57506000610f3a565b81600181146152f457600281146152fe5761531a565b6001915050610f3a565b60ff84111561530f5761530f6151b5565b50506001821b610f3a565b5060208310610133831016604e8410600b841016171561533d575081810a610f3a565b6153478383615287565b806000190482111561535b5761535b6151b5565b029392505050565b6000612dd483836152c2565b60208101610f3a8284614ec4565b60008161538c5761538c6151b5565b50600019019056fea26469706673582212205e56660e794cf6ac8fef932c6bc6ddc03d16240bf42c38f16cc5710cdd39fbf664736f6c634300080c0033"), - }, - } - - deployments6 = []*deployment{ - { - contract: stakeManager, - // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/56d52dd025b33876976d1322d2742d1975c8ff08/contracts/StakeManager.sol - code: mustDecodeCode("0x60806040526004361061025c5760003560e01c80637243199111610144578063cf5c13db116100b6578063e1aca3411161007a578063e1aca34114610825578063f3621e4314610845578063f65a5ed214610865578063f8d6b1ab14610885578063fa52c7d8146108a5578063ff3d3f601461091457600080fd5b8063cf5c13db14610723578063d0051adf14610743578063d1f18ee114610774578063dbd61d87146107cc578063df93c842146107ec57600080fd5b80639043150b116101085780639043150b146106655780639168ae721461066d5780639c508219146106a3578063ac7475ed146106c3578063ad71bd36146106e3578063cbc0fac61461070357600080fd5b8063724319911461058b57806374e2b63c146105bc5780637b520aa8146105e15780637befa74f14610617578063883252341461062a57600080fd5b80632b47da52116101dd57806346dfce7b116101a157806346dfce7b146104ac578063485cc955146104db5780635c4fc4c5146104fb5780635d94ccf61461052b5780635efc766e1461054b5780636b2b33691461056b57600080fd5b80632b47da52146103f45780632ee462b31461042c57806333f32d781461044c578063428e85621461046c57806345367f231461048c57600080fd5b8063195afea111610224578063195afea1146103205780631c1b4f3a146103405780632168e8b414610360578063222263671461038e5780632b42ed8c146103c357600080fd5b806302fb4d85146102615780630ddda63c14610283578063158ef93e146102a35780631903cf16146102d2578063190b9257146102f2575b600080fd5b34801561026d57600080fd5b5061028161027c366004614f04565b610934565b005b34801561028f57600080fd5b5061028161029e366004614f30565b610b3a565b3480156102af57600080fd5b506000546102bd9060ff1681565b60405190151581526020015b60405180910390f35b3480156102de57600080fd5b506102816102ed366004614fdb565b610d45565b3480156102fe57600080fd5b5061031261030d366004614f30565b610f3e565b6040519081526020016102c9565b34801561032c57600080fd5b5061031261033b366004614f04565b610f5f565b34801561034c57600080fd5b5061031261035b366004614f30565b610f96565b34801561036c57600080fd5b5061038061037b366004615085565b610fa6565b6040516102c99291906150eb565b34801561039a57600080fd5b506103ae6103a9366004614f04565b61108c565b604080519283526020830191909152016102c9565b3480156103cf57600080fd5b506103e36103de36600461510d565b61115a565b6040516102c9959493929190615178565b34801561040057600080fd5b50600154610414906001600160a01b031681565b6040516001600160a01b0390911681526020016102c9565b34801561043857600080fd5b50610312610447366004614f04565b6114a7565b34801561045857600080fd5b506103126104673660046151d8565b61155a565b34801561047857600080fd5b50610281610487366004614fdb565b611719565b34801561049857600080fd5b506103126104a7366004614f30565b611912565b3480156104b857600080fd5b506104cc6104c736600461510d565b6119a8565b6040516102c993929190615277565b3480156104e757600080fd5b506102816104f63660046152ad565b611c05565b34801561050757600080fd5b5061051b610516366004614f04565b611c84565b6040516102c9949392919061531e565b34801561053757600080fd5b50610281610546366004614f30565b611d50565b34801561055757600080fd5b50610414610566366004614f30565b611e5a565b34801561057757600080fd5b50610281610586366004615349565b611e84565b34801561059757600080fd5b506105ab6105a6366004615366565b611fcc565b6040516102c99594939291906153c4565b3480156105c857600080fd5b506000546104149061010090046001600160a01b031681565b3480156105ed57600080fd5b506104146105fc366004615349565b6006602052600090815260409020546001600160a01b031681565b610281610625366004615411565b612388565b34801561063657600080fd5b5061064a610645366004615349565b612553565b604080519384526020840192909252908201526060016102c9565b6102816125d3565b34801561067957600080fd5b50610414610688366004615349565b6007602052600090815260409020546001600160a01b031681565b3480156106af57600080fd5b506103126106be366004614f04565b612608565b3480156106cf57600080fd5b506102816106de366004615349565b6126e4565b3480156106ef57600080fd5b506103806106fe366004615085565b6127ab565b34801561070f57600080fd5b5061028161071e366004614f04565b612889565b34801561072f57600080fd5b5061028161073e366004614f04565b612931565b34801561074f57600080fd5b5061076361075e366004615456565b612b30565b6040516102c995949392919061548b565b34801561078057600080fd5b5061079461078f366004614f04565b612de8565b604080516001600160a01b0390961686529315156020860152911515928401929092529015156060830152608082015260a0016102c9565b3480156107d857600080fd5b506103126107e73660046154f4565b612f78565b3480156107f857600080fd5b50610312610807366004615349565b6001600160a01b031660009081526007602052604090206006015490565b34801561083157600080fd5b50610281610840366004615411565b612fbe565b34801561085157600080fd5b506102816108603660046154f4565b612fd7565b34801561087157600080fd5b50610414610880366004614f30565b6130e3565b34801561089157600080fd5b506102816108a0366004615349565b6130f3565b3480156108b157600080fd5b506108ee6108c0366004615349565b6004602052600090815260409020805460018201546006909201546001600160a01b03918216929091169083565b604080516001600160a01b039485168152939092166020840152908201526060016102c9565b34801561092057600080fd5b5061028161092f366004615411565b613155565b6001600160a01b03808316600090815260066020908152604080832054841680845260049092529091205490911661097f576040516372898ae960e11b815260040160405180910390fd5b33411461099f57604051631cf4735960e01b815260040160405180910390fd5b6001600160a01b038084166000908152600660209081526040808320548416835260049182905280832083548251633fa4f24560e01b815292519195610ab2946101009092041692633fa4f2459281830192610120928290030181865afa158015610a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a329190615524565b600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa9919061559f565b84919087613436565b82546040519192506001600160a01b0316907f1647efd0ce9727dc31dc201c9d8d35ac687f7370adcacbd454afc6485ddabfda90600090a28015610b335781546040518281526001600160a01b03909116907feb7d7a49847ec491969db21a0e31b234565a9923145a2d1b56a75c9e95825802906020015b60405180910390a25b5050505050565b336000818152600460205260409020546001600160a01b0316610b70576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316610ba65760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1d91906155b8565b15610c3b57604051631e59ccd960e01b815260040160405180910390fd5b60008054338252600460205260408220610c639161010090046001600160a01b031686613515565b905080610c8357604051637bc90c0560e11b815260040160405180910390fd5b610d073333600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cff919061559f565b600085613535565b604051818152339081907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba1043836906020015b60405180910390a350505050565b6001600160a01b03828116600090815260046020526040902080548492163314801590610d7f575060018101546001600160a01b03163314155b15610d9d57604051630101292160e31b815260040160405180910390fd5b6001600160a01b03808516600090815260046020526040902054859116610dd7576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e91906155b8565b15610e6c57604051631e59ccd960e01b815260040160405180910390fd5b610f05600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee6919061559f565b6001600160a01b038716600090815260046020526040902090866135e3565b846001600160a01b03167fc11dfc9c24621433bb10587dc4bbae26a33a4aff53914e0d4c9fddf224a8cb7d85604051610b2a91906155da565b60028181548110610f4e57600080fd5b600091825260209091200154905081565b600080546001600160a01b038481168352600460205260408320610f8c92909161010090910416846135f5565b5090505b92915050565b60038181548110610f4e57600080fd5b60606000610fba8484600580549050613788565b9093509050826001600160401b03811115610fd757610fd7614f49565b604051908082528060200260200182016040528015611000578160200160208202803683370190505b50915060005b8381101561108457600561101a8287615603565b8154811061102a5761102a61561b565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061105a5761105a61561b565b6001600160a01b03909216602092830291909101909101528061107c81615631565b915050611006565b509250929050565b60008061114f6000841161111657600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611111919061559f565b611118565b835b6001600160a01b038616600090815260046020908152604080832093835260098401825280832054600a9094019091529020549091565b909590945092505050565b6001600160a01b0384166000908152600760205260408120606091829182918291886111fc57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f7919061559f565b6111fe565b885b98506112108888600580549050613788565b9097509150866001600160401b0381111561122d5761122d614f49565b604051908082528060200260200182016040528015611256578160200160208202803683370190505b509550866001600160401b0381111561127157611271614f49565b60405190808252806020026020018201604052801561129a578160200160208202803683370190505b509450866001600160401b038111156112b5576112b5614f49565b6040519080825280602002602001820160405280156112de578160200160208202803683370190505b509350866001600160401b038111156112f9576112f9614f49565b604051908082528060200260200182016040528015611322578160200160208202803683370190505b50925060005b8781101561149a57600561133c828b615603565b8154811061134c5761134c61561b565b9060005260206000200160009054906101000a90046001600160a01b031687828151811061137c5761137c61561b565b60200260200101906001600160a01b031690816001600160a01b0316815250506113cd8782815181106113b1576113b161561b565b602002602001015160008c856137bf909392919063ffffffff16565b8682815181106113df576113df61561b565b60200260200101818152505061141c8782815181106114005761140061561b565b602002602001015160018c856137bf909392919063ffffffff16565b85828151811061142e5761142e61561b565b60200260200101818152505061146b87828151811061144f5761144f61561b565b602002602001015160028c856137bf909392919063ffffffff16565b84828151811061147d5761147d61561b565b60209081029190910101528061149281615631565b915050611328565b5050945094509450945094565b600080821161152c57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611503573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611527919061559f565b61152e565b815b6001600160a01b0384166000908152600460205260409020909250611553908361387e565b9392505050565b600080600183600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d7919061559f565b6115e1919061564c565b6115eb919061564c565b845190915060005b8481101561171057611606600184615603565b6000805460405163fcbb371b60e01b81526004810184905292955090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa15801561165a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167e9190615524565b905060005b838110156116fb576116dd8286600460008c86815181106116a6576116a661561b565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206138919092919063ffffffff16565b6116e79087615603565b9550806116f381615631565b915050611683565b5050808061170890615631565b9150506115f3565b50505092915050565b6001600160a01b03828116600090815260046020526040902080548492163314801590611753575060018101546001600160a01b03163314155b1561177157604051630101292160e31b815260040160405180910390fd5b6001600160a01b038085166000908152600460205260409020548591166117ab576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182291906155b8565b1561184057604051631e59ccd960e01b815260040160405180910390fd5b6118d9600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ba919061559f565b6001600160a01b038716600090815260046020526040902090866139fe565b846001600160a01b03167f0ad9bf1b8c026a174a2f30954417002a6ea00c9b08c1b8846c7951c687be809585604051610b2a91906155da565b600080821161199757600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561196e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611992919061559f565b611999565b815b9150610f906002600384613a0b565b6001600160a01b0384166000908152600460205260408120606091829186611a4657600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a41919061559f565b611a48565b865b9650611a5c86868360070180549050613788565b9095509150846001600160401b03811115611a7957611a79614f49565b604051908082528060200260200182016040528015611aa2578160200160208202803683370190505b509350846001600160401b03811115611abd57611abd614f49565b604051908082528060200260200182016040528015611ae6578160200160208202803683370190505b50925060005b85811015611bf9576000600781848201611b06858c615603565b81548110611b1657611b1661561b565b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190208054885191935090911690879084908110611b5c57611b5c61561b565b6001600160a01b0392831660209182029290920101528354611b839183911660028c6137bf565b8354611b9c9083906001600160a01b031660018d6137bf565b8454611bb59084906001600160a01b031660008e6137bf565b611bbf9190615603565b611bc99190615603565b858381518110611bdb57611bdb61561b565b60209081029190910101525080611bf181615631565b915050611aec565b50509450945094915050565b334114611c2557604051631cf4735960e01b815260040160405180910390fd5b60005460ff1615611c485760405162dc149f60e41b815260040160405180910390fd5b6000805460016001600160a81b03199091166101006001600160a01b039586160217811790915580546001600160a01b03191691909216179055565b6001600160a01b03821660009081526007602052604081206006018054829182918291829187908110611cb957611cb961561b565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115611cec57611cec6152e6565b6002811115611cfd57611cfd6152e6565b81526020016001820154815260200160028201548152505090508060000151816020015182604001518360400151600014158015611d3f575083604001514210155b929a91995097509095509350505050565b336000818152600760205260409020546001600160a01b0316611d865760405163cf83d93d60e01b815260040160405180910390fd5b336000908152600760205260408120600601805484908110611daa57611daa61561b565b9060005260206000209060030201905060008160020154905080421015611de4576040516303cb96db60e21b815260040160405180910390fd5b80611e0257604051630c8d9eab60e31b815260040160405180910390fd5b6000600283015560405184815233907fbf5f92dc2b945251eadf78c2ca629ae64053d979bfbc43a7b17a463707906bf99060200160405180910390a281546001830154611e549160ff16903390613b24565b50505050565b60058181548110611e6a57600080fd5b6000918252602090912001546001600160a01b0316905081565b60015460405163322433e360e01b81523360048201819052916001600160a01b03169063322433e390602401602060405180830381865afa158015611ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef191906155b8565b611f0e5760405163423057c560e11b815260040160405180910390fd5b6001600160a01b0381166000908152600460205260409020611f309083613c43565b60058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b038381166001600160a01b03199283168117909355841660009081526006602090815260409182902080549093168417909255519182527fd5828184f48f65962d10eac907318df85953d4e3542a0f09b5932ee3fe398bdd910160405180910390a15050565b606080606080600080600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612028573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204c919061559f565b90506000891161205c578061205e565b885b6000805460405163fcbb371b60e01b815260048101849052929b5090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa1580156120b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d69190615524565b90506120e88989600580549050613788565b9098509250876001600160401b0381111561210557612105614f49565b60405190808252806020026020018201604052801561212e578160200160208202803683370190505b509650876001600160401b0381111561214957612149614f49565b604051908082528060200260200182016040528015612172578160200160208202803683370190505b509550876001600160401b0381111561218d5761218d614f49565b6040519080825280602002602001820160405280156121b6578160200160208202803683370190505b509450876001600160401b038111156121d1576121d1614f49565b6040519080825280602002602001820160405280156121fa578160200160208202803683370190505b50935060005b8881101561237a5760006004816005612219858f615603565b815481106122295761222961561b565b60009182526020808320909101546001600160a01b039081168452908301939093526040909101902080548b51919350909116908a908490811061226f5761226f61561b565b6001600160a01b039283166020918202929092010152600182015489519116908990849081106122a1576122a161561b565b6001600160a01b03909216602092830291909101909101526122c3818d61387e565b8783815181106122d5576122d561561b565b60209081029190910101526122fe818d6000908152600291909101602052604090205460ff1690565b15801561231c575060008c815260038201602052604090205460ff16155b801561234557508260c0015187838151811061233a5761233a61561b565b602002602001015110155b8683815181106123575761235761561b565b91151560209283029190910190910152508061237281615631565b915050612200565b505050939792965093509350565b6001600160a01b038084166000908152600460205260409020548491166123c2576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015612415573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243991906155b8565b1561245757604051631e59ccd960e01b815260040160405180910390fd5b8161247557604051637bc90c0560e11b815260040160405180910390fd5b612480833384613c85565b61250e3385600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124fc919061559f565b612507906001615603565b8686613535565b836001600160a01b0316336001600160a01b03167f8fc656e319452025372383dc27d933046d412b8253de50a10739eeaa59862be68585604051610d37929190615663565b6001600160a01b0380821660009081526007602052604081208154919283928392916125889183916101009091041684613d26565b6000549094506125a990829061010090046001600160a01b03166001613d26565b6000549093506125ca90829061010090046001600160a01b03166002613d26565b93959294505050565b6040513481527f1de49774d094a85fc1bbbd16e8d09a865fb848218f41e2da4369f528c42ee42e9060200160405180910390a1565b6001600160a01b03808316600081815260066020908152604080832054851683526004909152812060018101549193909291161461264a576000915050610f90565b600083116126ce57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c9919061559f565b6126d0565b825b92506126dc818461387e565b949350505050565b336000818152600460205260409020546001600160a01b031661271a576040516372898ae960e11b815260040160405180910390fd5b33600081815260046020526040902060018101546001600160a01b03166127418286613f4c565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916888616908117909155825194861685529084019290925290917f758820d0b14a01c1fa60b8d2bbef25ed1b6a5af4802e5dec3f08679255ba8bf39101610b2a565b606060006127bf8484600880549050613788565b9093509050826001600160401b038111156127dc576127dc614f49565b604051908082528060200260200182016040528015612805578160200160208202803683370190505b50915060005b8381101561108457600861281f8287615603565b8154811061282f5761282f61561b565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061285f5761285f61561b565b6001600160a01b03909216602092830291909101909101528061288181615631565b91505061280b565b336000818152600460205260409020546001600160a01b03166128bf576040516372898ae960e11b815260040160405180910390fd5b600080543382526004602052604082206128e79161010090046001600160a01b031685613515565b60405181815290915033907f882d5671e5b36af50883197c33d48ba56ce337589958e871ba82fb0a54adf3e89060200160405180910390a28015611e5457611e5460003383613b24565b6001600160a01b0380831660009081526004602052604090205483911661296b576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166129a15760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1891906155b8565b15612a3657604051631e59ccd960e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420612a71939092610100909104169087613fc6565b905080612a9157604051637bc90c0560e11b815260040160405180910390fd5b612ae93386600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cdb573d6000803e3d6000fd5b6040518181526001600160a01b0386169033907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba10438369060200160405180910390a35050505050565b6001600160a01b038316600090815260076020526040812060068101546060928392839283929190612b659089908990613788565b9097509150866001600160401b03811115612b8257612b82614f49565b604051908082528060200260200182016040528015612bab578160200160208202803683370190505b509550866001600160401b03811115612bc657612bc6614f49565b604051908082528060200260200182016040528015612bef578160200160208202803683370190505b509450866001600160401b03811115612c0a57612c0a614f49565b604051908082528060200260200182016040528015612c33578160200160208202803683370190505b509350866001600160401b03811115612c4e57612c4e614f49565b604051908082528060200260200182016040528015612c77578160200160208202803683370190505b50925060005b87811015612ddb57600060068301612c95838c615603565b81548110612ca557612ca561561b565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115612cd857612cd86152e6565b6002811115612ce957612ce96152e6565b81526020016001820154815260200160028201548152505090508060000151888381518110612d1a57612d1a61561b565b60200260200101906002811115612d3357612d336152e6565b90816002811115612d4657612d466152e6565b815250508060200151878381518110612d6157612d6161561b565b6020026020010181815250508060400151868381518110612d8457612d8461561b565b6020908102919091010152604081015115801590612da6575080604001514210155b858381518110612db857612db861561b565b911515602092830291909101909101525080612dd381615631565b915050612c7d565b5050939792965093509350565b600080600080600080600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e68919061559f565b905060008711612e785780612e7a565b865b6000805460405163fcbb371b60e01b81526004810184905292995090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015612ece573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef29190615524565b6001600160a01b038a1660009081526004602090815260408083208c8452600281018352818420546003820190935292205460ff918216159950169650909150612f3c818a61387e565b9350868015612f49575085155b8015612f5957508160c001518410155b6001909101546001600160a01b03169750935050509295509295909350565b600080546001600160a01b038481168352600460209081526040808520888416865260079092528420612fb5939092610100909104169085613fff565b50949350505050565b604051634ee5a1b960e01b815260040160405180910390fd5b6001600160a01b03808316600090815260046020526040902054839116613011576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166130475760405163cf83d93d60e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420613082939092610100909104169087613fc6565b604080516001600160a01b03881681526020810183905291925033917f2ef606d064225d24c1514dc94907c134faee1237445c2f63f410cce0852b2054910160405180910390a280156130db576130db60003383613b24565b505050505050565b60088181548110611e6a57600080fd5b336000818152600760205260409020546001600160a01b03166131295760405163cf83d93d60e01b815260040160405180910390fd5b60008054338252600760205260409091206131519161010090046001600160a01b0316614209565b5050565b6001600160a01b0380841660009081526004602052604090205484911661318f576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166131c55760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015613218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061323c91906155b8565b1561325a57604051631e59ccd960e01b815260040160405180910390fd5b33600090815260076020908152604080832083546001600160a01b038a8116865260049094529190932061329892849261010090041690888861422d565b9350836132b857604051637bc90c0560e11b815260040160405180910390fd5b8060060160405180606001604052808760028111156132d9576132d96152e6565b8152602081018790526040016132f242620d2f00615603565b9052815460018181018455600093845260209093208251600390920201805492939092839160ff1990911690836002811115613330576133306152e6565b0217905550602082015181600101556040820151816002015550506133dc6003600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c7919061559f565b6133d2906001615603565b6002919087614363565b5060068101546001600160a01b0387169033907fb649014faa7a0e23357e091fb8a67a128c33dc9480f846f7e41cb3a6c9d806109061341d9060019061564c565b60405190815260200160405180910390a3505050505050565b600082815260098501602052604081205461345f57600083815260098601602052604090208290555b6000838152600a8601602052604081205461347b906001615603565b6000858152600a88016020526040902081905560e086015190915081108015906134c757506003860160006134b1866001615603565b815260208101919091526040016000205460ff16155b15612fb5576101008501516134dc9085615603565b91505b81841015612fb557836134f181615631565b60008181526003890160205260409020805460ff1916600117905594506134df9050565b60008060006135258686866135f5565b6006880155925050509392505050565b6001600160a01b03808616600090815260076020526040902080549091166135ae5780546001600160a01b0387166001600160a01b031991821681178355600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180549092161790555b6001600160a01b03851660009081526004602052604090206135d59082908690868661443e565b6130db600260038685614506565b6135f083838360006145ec565b505050565b6000808460060154905060006001856001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613641573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613665919061559f565b61366f919061564c565b90508315806136865750806136848386615603565b115b1561369857613695828261564c565b93505b60005b8481101561377e576136ae600184615603565b60405163fcbb371b60e01b8152600481018290529093506000906001600160a01b0388169063fcbb371b9060240161012060405180830381865afa1580156136fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061371e9190615524565b9050600061372d898387613891565b90508061373b57505061376c565b60a082015161374b57505061376c565b61375d818360a0015160646019614672565b6137679087615603565b955050505b8061377681615631565b91505061369b565b5050935093915050565b600080826137968587615603565b106137a8576137a5858461564c565b93505b836137b38187615603565b91509150935093915050565b60006138758560020160008560028111156137dc576137dc6152e6565b60028111156137ed576137ed6152e6565b81526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002083876001016000876002811115613837576138376152e6565b6002811115613848576138486152e6565b8152602080820192909252604090810160009081206001600160a01b038b16825290925290209190613a0b565b95945050505050565b6000611553600484016005850184613a0b565b600081815260028401602052604081205460ff16806138c05750600082815260038501602052604090205460ff165b156138cd57506000611553565b60006138d9858461387e565b90506049831061391a578360c001518110156138f9576000915050611553565b6298968061390982610a3461567e565b613913919061569d565b91506139b3565b80613929576000915050611553565b6139356019600a61579b565b61394685608001516064601961469e565b613950908361567e565b61395a919061569d565b91508161396b576000915050611553565b61398e84606001518560400151613982919061567e565b6301e13380601961469e565b613998908361567e565b91506139a66019600a61579b565b6139b0908361569d565b91505b6000838152600a8601602052604090205480156139f55760008481526009870160205260409020546139f1846139e9848461564c565b836019614672565b9350505b50509392505050565b6135f083838360016145ec565b8254600090801580613a3957508285600081548110613a2c57613a2c61561b565b9060005260206000200154115b15613a48576000915050611553565b8285613a5560018461564c565b81548110613a6557613a6561561b565b906000526020600020015411613aa45783613a8160018361564c565b81548110613a9157613a9161561b565b9060005260206000200154915050611553565b600181118015613ada57508285613abc60028461564c565b81548110613acc57613acc61561b565b906000526020600020015411155b15613aeb5783613a8160028361564c565b6000613afa86856000856146da565b9050848181548110613b0e57613b0e61561b565b9060005260206000200154925050509392505050565b600080846002811115613b3957613b396152e6565b1415613b98576040516001600160a01b038416908390600081818185875af1925050503d8060008114613b88576040519150601f19603f3d011682016040523d82523d6000602084013e613b8d565b606091505b505080915050613c1a565b613ba184614782565b60405163a9059cbb60e01b81526001600160a01b03858116600483015260248201859052919091169063a9059cbb906044015b6020604051808303816000875af1158015613bf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1791906155b8565b90505b80611e545783604051630db5347560e11b8152600401613c3a91906157a7565b60405180910390fd5b81546001600160a01b031615613c6b57604051621d934160e11b815260040160405180910390fd5b81546001600160a01b031916331782556131518282613f4c565b6000836002811115613c9957613c996152e6565b1415613cbf578034146135f057604051630fe5b06560e11b815260040160405180910390fd5b3415613cde5760405163a745ac8560e01b815260040160405180910390fd5b6000613ce984614782565b6040516323b872dd60e01b81526001600160a01b0385811660048301523060248301526044820185905291909116906323b872dd90606401613bd4565b600080846003016000846002811115613d4157613d416152e6565b6002811115613d5257613d526152e6565b8152602081019190915260400160002054905080613d74576000915050611553565b6000846001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dd8919061559f565b90506000613de760018461564c565b9050600081118015613e4a575081876003016000876002811115613e0d57613e0d6152e6565b6002811115613e1e57613e1e6152e6565b81526020019081526020016000208281548110613e3d57613e3d61561b565b9060005260206000200154115b15613e5d5780613e59816157b5565b9150505b81876003016000876002811115613e7657613e766152e6565b6002811115613e8757613e876152e6565b81526020019081526020016000208281548110613ea657613ea661561b565b90600052602060002001541115613ec35760009350505050611553565b6000805b828111613f4057886004016000886002811115613ee657613ee66152e6565b6002811115613ef757613ef76152e6565b81526020019081526020016000208181548110613f1657613f1661561b565b906000526020600020015482613f2c9190615603565b915080613f3881615631565b915050613ec7565b50979650505050505050565b6001600160a01b038116613f7357604051637138356f60e01b815260040160405180910390fd5b81546001600160a01b0382811691161415613fa15760405163e037058f60e01b815260040160405180910390fd5b60019190910180546001600160a01b0319166001600160a01b03909216919091179055565b6000806000613fd787878787613fff565b86546001600160a01b0316600090815260058a01602052604090205592505050949350505050565b81546001600160a01b039081166000908152600586016020908152604080832054815163900cf0cf60e01b81529151939490938593600193928a169263900cf0cf92600480830193928290030181865afa158015614061573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614085919061559f565b61408f919061564c565b90508315806140a65750806140a48386615603565b115b156140b8576140b5828261564c565b93505b60005b848110156141fe576140ce600184615603565b86549093506000906140ed908a906001600160a01b03166002876137bf565b8754614106908b906001600160a01b03166001886137bf565b885461411f908c906001600160a01b03166000896137bf565b6141299190615603565b6141339190615603565b90508061414057506141ec565b60405163fcbb371b60e01b8152600481018590526000906141b9906001600160a01b038b169063fcbb371b9060240161012060405180830381865afa15801561418d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141b19190615524565b8990876147ed565b9050806141c75750506141ec565b6141dd81836141d68b8961387e565b6019614672565b6141e79087615603565b955050505b806141f681615631565b9150506140bb565b505094509492505050565b61421582826001614838565b61422182826002614838565b61315182826000614838565b600061434986600201600085600281111561424a5761424a6152e6565b600281111561425b5761425b6152e6565b81526020808201929092526040908101600090812088546001600160a01b03908116835290845290829020825163900cf0cf60e01b815292519093918a169263900cf0cf9260048083019391928290030181865afa1580156142c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142e5919061559f565b6142f0906001615603565b84896001016000886002811115614309576143096152e6565b600281111561431a5761431a6152e6565b8152602080820192909252604090810160009081208b546001600160a01b031682529092529020929190614363565b91508161435857506000613875565b612fb5848684614b5e565b835460009080158061439a57508561437c60018361564c565b8154811061438c5761438c61561b565b906000526020600020015484105b156143b857604051630eae4c9760e01b815260040160405180910390fd5b60006143c5878787614bde565b905060008682815481106143db576143db61561b565b90600052602060002001549050808511156143f657806143f8565b845b9450841561443257848783815481106144135761441361561b565b90600052602060002001600082825461442c919061564c565b90915550505b50929695505050505050565b6144ed856002016000846002811115614459576144596152e6565b600281111561446a5761446a6152e6565b81526020808201929092526040908101600090812087546001600160a01b031682529092528120908690849060018a01908760028111156144ad576144ad6152e6565b60028111156144be576144be6152e6565b8152602080820192909252604090810160009081208a546001600160a01b031682529092529020929190614506565b8454610b3390849086906001600160a01b031684614dee565b835460018111801561453d57508461451f60018361564c565b8154811061452f5761452f61561b565b906000526020600020015483105b801561456e57508461455060028361564c565b815481106145605761456061561b565b906000526020600020015483105b1561458c57604051630eae4c9760e01b815260040160405180910390fd5b6000614599868686614bde565b8654925090505b818110156130db57828582815481106145bb576145bb61561b565b9060005260206000200160008282546145d49190615603565b909155508190506145e481615631565b9150506145a0565b815160005b818110156130db57600084828151811061460d5761460d61561b565b60200260200101519050858111801561463d5750600081815260028801602052604090205460ff16151584151514155b1561465f5760008181526002880160205260409020805460ff19168515151790555b508061466a81615631565b9150506145f1565b600061467f82600a61579b565b61468a85858561469e565b614694908761567e565b613875919061569d565b6000806146ac836001615603565b6146b790600a61579b565b6146c1908661567e565b9050600a6146cf858361569d565b614694906005615603565b6000818314156146f6576146ef60018361564c565b90506126dc565b600060026147048486615603565b61470e919061569d565b9050848682815481106147235761472361561b565b9060005260206000200154111561474857614740868686846146da565b9150506126dc565b8486828154811061475b5761475b61561b565b9060005260206000200154101561387557614740868661477c846001615603565b866146da565b60006001826002811115614798576147986152e6565b14156147ac57506001602960991b01919050565b60028260028111156147c0576147c06152e6565b14156147d457506002602960991b01919050565b604051638698bf3760e01b815260040160405180910390fd5b6000806147fb858585613891565b90508061480c576000915050611553565b60a084015161481c579050611553565b61482e818560a0015160646019614672565b613875908261564c565b6000614845848484613d26565b9050806148525750505050565b600084600301600084600281111561486c5761486c6152e6565b600281111561487d5761487d6152e6565b8152602001908152602001600020805490509050836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156148cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148f3919061559f565b85600301600085600281111561490b5761490b6152e6565b600281111561491c5761491c6152e6565b8152602001908152602001600020600183614937919061564c565b815481106149475761494761561b565b9060005260206000200154116149e25784600301600084600281111561496f5761496f6152e6565b6002811115614980576149806152e6565b8152602001908152602001600020600061499a9190614e6e565b8460040160008460028111156149b2576149b26152e6565b60028111156149c3576149c36152e6565b815260200190815260200160002060006149dd9190614e6e565b614b47565b6040518060200160405280866003016000866002811115614a0557614a056152e6565b6002811115614a1657614a166152e6565b8152602001908152602001600020600184614a31919061564c565b81548110614a4157614a4161561b565b9060005260206000200154815250856003016000856002811115614a6757614a676152e6565b6002811115614a7857614a786152e6565b81526020810191909152604001600020614a93916001614e8f565b506040518060200160405280866004016000866002811115614ab757614ab76152e6565b6002811115614ac857614ac86152e6565b8152602001908152602001600020600184614ae3919061564c565b81548110614af357614af361561b565b9060005260206000200154815250856004016000856002811115614b1957614b196152e6565b6002811115614b2a57614b2a6152e6565b81526020810191909152604001600020614b45916001614e8f565b505b8454610b339084906001600160a01b031684613b24565b611e5483600501836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bc7919061559f565b614bd2906001615603565b60048601919084614363565b825460009080614c19575050825460018181018555600085815260208082209093018490558454918201855584815291822001819055611553565b6000614c2660018361564c565b90506000868281548110614c3c57614c3c61561b565b9060005260206000200154905080851415614c5b575091506115539050565b80851115614cc35786546001810188556000888152602090200185905585548690819084908110614c8e57614c8e61561b565b6000918252602080832090910154835460018181018655948452919092200155614cb9908390615603565b9350505050611553565b600082118015614cf8575086614cda60018461564c565b81548110614cea57614cea61561b565b906000526020600020015485145b15614d0857614cb960018361564c565b86878381548110614d1b57614d1b61561b565b6000918252602080832090910154835460018101855593835291209091015585548690819084908110614d5057614d5061561b565b6000918252602080832090910154835460018101855593835291209091015586548590889084908110614d8557614d8561561b565b6000918252602090912001558115614dc35785614da360018461564c565b81548110614db357614db361561b565b9060005260206000200154614dc6565b60005b868381548110614dd857614dd861561b565b6000918252602090912001555091506115539050565b6001600160a01b038216600090815260088501602052604090205460ff16614e5c576001600160a01b038216600081815260088601602090815260408220805460ff191660019081179091556007880180549182018155835291200180546001600160a01b03191690911790555b611e5460048501600586018584614506565b5080546000825590600052602060002090810190614e8c9190614eda565b50565b828054828255906000526020600020908101928215614eca579160200282015b82811115614eca578251825591602001919060010190614eaf565b50614ed6929150614eda565b5090565b5b80821115614ed65760008155600101614edb565b6001600160a01b0381168114614e8c57600080fd5b60008060408385031215614f1757600080fd5b8235614f2281614eef565b946020939093013593505050565b600060208284031215614f4257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715614f8257614f82614f49565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614fb057614fb0614f49565b604052919050565b60006001600160401b03821115614fd157614fd1614f49565b5060051b60200190565b60008060408385031215614fee57600080fd5b8235614ff981614eef565b91506020838101356001600160401b0381111561501557600080fd5b8401601f8101861361502657600080fd5b803561503961503482614fb8565b614f88565b81815260059190911b8201830190838101908883111561505857600080fd5b928401925b828410156150765783358252928401929084019061505d565b80955050505050509250929050565b6000806040838503121561509857600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b838110156150e05781516001600160a01b0316875295820195908201906001016150bb565b509495945050505050565b6040815260006150fe60408301856150a7565b90508260208301529392505050565b6000806000806080858703121561512357600080fd5b843561512e81614eef565b966020860135965060408601359560600135945092505050565b600081518084526020808501945080840160005b838110156150e05781518752958201959082019060010161515c565b60a08152600061518b60a08301886150a7565b828103602084015261519d8188615148565b905082810360408401526151b18187615148565b905082810360608401526151c58186615148565b9150508260808301529695505050505050565b600080604083850312156151eb57600080fd5b82356001600160401b0381111561520157600080fd5b8301601f8101851361521257600080fd5b8035602061522261503483614fb8565b82815260059290921b8301810191818101908884111561524157600080fd5b938201935b8385101561526857843561525981614eef565b82529382019390820190615246565b98969091013596505050505050565b60608152600061528a60608301866150a7565b828103602084015261529c8186615148565b915050826040830152949350505050565b600080604083850312156152c057600080fd5b82356152cb81614eef565b915060208301356152db81614eef565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b6003811061531a57634e487b7160e01b600052602160045260246000fd5b9052565b6080810161532c82876152fc565b846020830152836040830152821515606083015295945050505050565b60006020828403121561535b57600080fd5b813561155381614eef565b60008060006060848603121561537b57600080fd5b505081359360208301359350604090920135919050565b600081518084526020808501945080840160005b838110156150e05781511515875295820195908201906001016153a6565b60a0815260006153d760a08301886150a7565b82810360208401526153e981886150a7565b905082810360408401526153fd8187615148565b905082810360608401526151c58186615392565b60008060006060848603121561542657600080fd5b833561543181614eef565b925060208401356003811061544557600080fd5b929592945050506040919091013590565b60008060006060848603121561546b57600080fd5b833561547681614eef565b95602085013595506040909401359392505050565b60a0808252865190820181905260009060209060c0840190828a01845b828110156154cb576154bb8483516152fc565b92840192908401906001016154a8565b505050838103828501526154df8189615148565b91505082810360408401526153fd8187615148565b60008060006060848603121561550957600080fd5b833561551481614eef565b9250602084013561544581614eef565b6000610120828403121561553757600080fd5b61553f614f5f565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b6000602082840312156155b157600080fd5b5051919050565b6000602082840312156155ca57600080fd5b8151801515811461155357600080fd5b6020815260006115536020830184615148565b634e487b7160e01b600052601160045260246000fd5b60008219821115615616576156166155ed565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415615645576156456155ed565b5060010190565b60008282101561565e5761565e6155ed565b500390565b6040810161567182856152fc565b8260208301529392505050565b6000816000190483118215151615615698576156986155ed565b500290565b6000826156ba57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156110845781600019048211156156e0576156e06155ed565b808516156156ed57918102915b93841c93908002906156c4565b60008261570957506001610f90565b8161571657506000610f90565b816001811461572c576002811461573657615752565b6001915050610f90565b60ff841115615747576157476155ed565b50506001821b610f90565b5060208310610133831016604e8410600b8410161715615775575081810a610f90565b61577f83836156bf565b8060001904821115615793576157936155ed565b029392505050565b600061155383836156fa565b60208101610f9082846152fc565b6000816157c4576157c46155ed565b50600019019056fea26469706673582212200a3bb40da327dc2414c15b981a7b902457121dd4bc3e8627caf9d791841ae51864736f6c634300080c0033"), - }, - { - contract: sccVerifier, - // commit: https://github.com/oasysgames/oasys-optimism/blob/d6df48a68a33ac67c4222851b64cf5036150c495/packages/contracts/contracts/oasys/L1/rollup/OasysStateCommitmentChainVerifier.sol - code: mustDecodeCode("0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063d17f1fb11461003b578063dea2619d14610050575b600080fd5b61004e610049366004610bd9565b610063565b005b61004e61005e366004610bd9565b610152565b6100708383600084610234565b6040517f9594dd6400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690639594dd64906100c2908590600401610d29565b600060405180830381600087803b1580156100dc57600080fd5b505af11580156100f0573d6000803e3d6000fd5b5050505081600001518373ffffffffffffffffffffffffffffffffffffffff167f2d6c30e420d4abe074221e2e344cec3bd0f565a2e09435a3d9d738f69332a6dd846020015160405161014591815260200190565b60405180910390a3505050565b61015f8383600184610234565b6040517fe0c2b41800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063e0c2b418906101b1908590600401610d29565b600060405180830381600087803b1580156101cb57600080fd5b505af11580156101df573d6000803e3d6000fd5b5050505081600001518373ffffffffffffffffffffffffffffffffffffffff167f4785b50466d5e0124a77ed43985b62f3b454caff4b6cfc6aa94ab02c5e5df1f5846020015160405161014591815260200190565b8251602080850151604080514681850152606089901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016818301526054810194909452607484019190915284151560f81b6094840152805160758185030181526095909301905281519101206000906102ae90836102c0565b90506102b9816105aa565b5050505050565b6060815167ffffffffffffffff8111156102dc576102dc610a05565b604051908082528060200260200182016040528015610305578160200160208202803683370190505b506040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101859052909150600090605c016040516020818303038152906040528051906020012090506000805b84518110156105a157600085828151811061037857610378610d74565b6020026020010151905060008061038f8684610835565b909250905060018160048111156103a8576103a8610da3565b14156103eb57826040517ff31b6ee50000000000000000000000000000000000000000000000000000000081526004016103e29190610dd2565b60405180910390fd5b60028160048111156103ff576103ff610da3565b141561043957826040517ff31b6ee50000000000000000000000000000000000000000000000000000000081526004016103e29190610e24565b600381600481111561044d5761044d610da3565b141561048757826040517ff31b6ee50000000000000000000000000000000000000000000000000000000081526004016103e29190610e76565b600481600481111561049b5761049b610da3565b14156104d557826040517ff31b6ee50000000000000000000000000000000000000000000000000000000081526004016103e29190610eee565b8473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1611610552576040517f3d1fd1b000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016103e2565b8187858151811061056557610565610d74565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015250925081905061059981610f95565b91505061035b565b50505092915050565b600061100090506000611001905060008273ffffffffffffffffffffffffffffffffffffffff1663900cf0cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561060057600080fd5b505afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106389190610fce565b84519091506000805b8281101561072c578473ffffffffffffffffffffffffffffffffffffffff16639c50821988838151811061067757610677610d74565b6020026020010151866040518363ffffffff1660e01b81526004016106be92919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60206040518083038186803b1580156106d657600080fd5b505afa1580156106ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070e9190610fce565b6107189083610fe7565b91508061072481610f95565b915050610641565b506040517f45367f230000000000000000000000000000000000000000000000000000000081526004810184905260009060649073ffffffffffffffffffffffffffffffffffffffff8716906345367f239060240160206040518083038186803b15801561079957600080fd5b505afa1580156107ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d19190610fce565b6107dc906033610fff565b6107e6919061103c565b90508082101561082c576040517f09b3dd4a00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016103e2565b50505050505050565b60008082516041141561086c5760208301516040840151606085015160001a610860878285856108a5565b9450945050505061089e565b825160401415610896576020830151604084015161088b8683836109bd565b93509350505061089e565b506000905060025b9250929050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156108dc57506000905060036109b4565b8460ff16601b141580156108f457508460ff16601c14155b1561090557506000905060046109b4565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610959573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166109ad576000600192509250506109b4565b9150600090505b94509492505050565b6000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831660ff84901c601b016109f7878288856108a5565b935093505050935093915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715610a5757610a57610a05565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610aa457610aa4610a05565b604052919050565b600082601f830112610abd57600080fd5b813567ffffffffffffffff811115610ad757610ad7610a05565b610b0860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610a5d565b818152846020838601011115610b1d57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610b4b57600080fd5b8135602067ffffffffffffffff80831115610b6857610b68610a05565b8260051b610b77838201610a5d565b9384528581018301938381019088861115610b9157600080fd5b84880192505b85831015610bcd57823584811115610baf5760008081fd5b610bbd8a87838c0101610aac565b8352509184019190840190610b97565b98975050505050505050565b600080600060608486031215610bee57600080fd5b833573ffffffffffffffffffffffffffffffffffffffff81168114610c1257600080fd5b9250602084013567ffffffffffffffff80821115610c2f57600080fd5b9085019060a08288031215610c4357600080fd5b610c4b610a34565b82358152602083013560208201526040830135604082015260608301356060820152608083013582811115610c7f57600080fd5b610c8b89828601610aac565b60808301525093506040860135915080821115610ca757600080fd5b50610cb486828701610b3a565b9150509250925092565b6000815180845260005b81811015610ce457602081850181015186830182015201610cc8565b81811115610cf6576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152815160208201526020820151604082015260408201516060820152606082015160808201526000608083015160a080840152610d6c60c0840182610cbe565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b604081526000610de56040830184610cbe565b8281036020840152601881527f45434453413a20696e76616c6964207369676e6174757265000000000000000060208201526040810191505092915050565b604081526000610e376040830184610cbe565b8281036020840152601f81527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060208201526040810191505092915050565b604081526000610e896040830184610cbe565b8281036020840152602281527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60208201527f756500000000000000000000000000000000000000000000000000000000000060408201526060810191505092915050565b604081526000610f016040830184610cbe565b8281036020840152602281527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60208201527f756500000000000000000000000000000000000000000000000000000000000060408201526060810191505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610fc757610fc7610f66565b5060010190565b600060208284031215610fe057600080fd5b5051919050565b60008219821115610ffa57610ffa610f66565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561103757611037610f66565b500290565b600082611072577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220a5d5618bfbba3887dcc2791601a94d5894ba03dc22eb33326b5607d801da74e764736f6c63430008090033"), - }, - } - - deployments7 = []*deployment{ - { - contract: bitbankExchangeDeposit, - // commit: - // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/contracts/bitbank/ExchangeDeposit.sol - // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/outputs/bitbank.json#L6-L10 - code: mustDecodeCode("0x6080604052600436106100a05760003560e01c806388bc06731161006457806388bc0673146104c7578063ab413f1c146104dc578063cb56d18e146104f1578063d4dca69b14610524578063dca67d7b14610539578063fc6f94681461056c5761021d565b80632663d52d146103fb5780632ffdb1c51461042757806341c0e1b51461044e5780635c60da1b146104635780636296aa3f146104945761021d565b3661021d576000546001600160a01b03166100f2576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b60015434101561013c576040805162461bcd60e51b815260206004820152601060248201526f105b5bdd5b9d081d1bdbc81cdb585b1b60821b604482015290519081900360640190fd5b600080546040516001600160a01b039091169034908381818185875af1925050503d8060008114610189576040519150601f19603f3d011682016040523d82523d6000602084013e61018e565b606091505b50509050806101e4576040805162461bcd60e51b815260206004820152601760248201527f466f7277617264696e672066756e6473206661696c6564000000000000000000604482015290519081900360640190fd5b60408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a250005b6000610227610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561025f57600080fd5b505afa158015610273573d6000803e3d6000fd5b505050506040513d602081101561028957600080fd5b50516001600160a01b031614156102d7576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b60006102e16105bc565b90506001600160a01b03811661033e576040805162461bcd60e51b815260206004820152601960248201527f46616c6c6261636b20636f6e7472616374206e6f742073657400000000000000604482015290519081900360640190fd5b6000816001600160a01b03166000366040518083838082843760405192019450600093509091505080830381855af49150503d806000811461039c576040519150601f19603f3d011682016040523d82523d6000602084013e6103a1565b606091505b50509050806103f7576040805162461bcd60e51b815260206004820152601860248201527f46616c6c6261636b20636f6e7472616374206661696c65640000000000000000604482015290519081900360640190fd5b5050005b34801561040757600080fd5b506104256004803603602081101561041e57600080fd5b5035610664565b005b34801561043357600080fd5b5061043c6107e8565b60408051918252519081900360200190f35b34801561045a57600080fd5b506104256107ee565b34801561046f57600080fd5b5061047861097f565b604080516001600160a01b039092168252519081900360200190f35b3480156104a057600080fd5b50610425600480360360208110156104b757600080fd5b50356001600160a01b031661098e565b3480156104d357600080fd5b50610425610b8a565b3480156104e857600080fd5b50610478610c42565b3480156104fd57600080fd5b506104256004803603602081101561051457600080fd5b50356001600160a01b0316610c51565b34801561053057600080fd5b50610478610e66565b34801561054557600080fd5b506104256004803603602081101561055c57600080fd5b50356001600160a01b0316610e8a565b34801561057857600080fd5b50610478610f32565b600061058b610f56565b6105b5577f00000000000000000000000052000000000000000000000000000000000000246105b7565b305b905090565b60006105c6610f56565b610654577f00000000000000000000000052000000000000000000000000000000000000246001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561062357600080fd5b505afa158015610637573d6000803e3d6000fd5b505050506040513d602081101561064d57600080fd5b50516105b7565b506002546001600160a01b031690565b61066c610f56565b6106b6576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b60006106c0610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106f857600080fd5b505afa15801561070c573d6000803e3d6000fd5b505050506040513d602081101561072257600080fd5b50516001600160a01b03161415610770576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000e643b5fad9efe257d59c17fe19a9bbac809016b916146107e3576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b600155565b60015481565b6107f6610f56565b610840576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b600061084a610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561088257600080fd5b505afa158015610896573d6000803e3d6000fd5b505050506040513d60208110156108ac57600080fd5b50516001600160a01b031614156108fa576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000e643b5fad9efe257d59c17fe19a9bbac809016b9161461096d576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b600080546001600160a01b0319169055565b6002546001600160a01b031681565b610996610f56565b6109e0576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b60006109ea610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2257600080fd5b505afa158015610a36573d6000803e3d6000fd5b505050506040513d6020811015610a4c57600080fd5b50516001600160a01b03161415610a9a576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000e643b5fad9efe257d59c17fe19a9bbac809016b91614610b0d576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b6001600160a01b038116610b68576040805162461bcd60e51b815260206004820152601960248201527f30783020697320616e20696e76616c6964206164647265737300000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4780610b965750610c40565b6000610ba0610f85565b6040516001600160a01b0391909116908390600081818185875af1925050503d8060008114610beb576040519150601f19603f3d011682016040523d82523d6000602084013e610bf0565b606091505b5050905080610c3d576040805162461bcd60e51b8152602060048201526014602482015273086deead8c840dcdee840cec2e8d0cae4408aa8960631b604482015290519081900360640190fd5b50505b565b6000546001600160a01b031681565b610c59610f56565b610ca3576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b6000610cad610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ce557600080fd5b505afa158015610cf9573d6000803e3d6000fd5b505050506040513d6020811015610d0f57600080fd5b50516001600160a01b03161415610d5d576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000e643b5fad9efe257d59c17fe19a9bbac809016b91614610dd0576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b6001600160a01b0381161580610df35750610df3816001600160a01b0316611080565b610e44576040805162461bcd60e51b815260206004820152601f60248201527f696d706c656d656e746174696f6e206d75737420626520636f6e747261637400604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000520000000000000000000000000000000000002481565b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610ed457600080fd5b505afa158015610ee8573d6000803e3d6000fd5b505050506040513d6020811015610efe57600080fd5b5051905080610f0d5750610f2f565b610c3d610f18610f85565b6001600160a01b038416908363ffffffff61108616565b50565b7f000000000000000000000000e643b5fad9efe257d59c17fe19a9bbac809016b981565b7f00000000000000000000000052000000000000000000000000000000000000246001600160a01b0316301490565b600080610f90610581565b90506000816001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fcd57600080fd5b505afa158015610fe1573d6000803e3d6000fd5b505050506040513d6020811015610ff757600080fd5b5051905060006001600160a01b038216156110125781611078565b826001600160a01b031663fc6f94686040518163ffffffff1660e01b815260040160206040518083038186803b15801561104b57600080fd5b505afa15801561105f573d6000803e3d6000fd5b505050506040513d602081101561107557600080fd5b50515b935050505090565b3b151590565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526110d89084906110dd565b505050565b6060611132826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661118e9092919063ffffffff16565b8051909150156110d85780806020019051602081101561115157600080fd5b50516110d85760405162461bcd60e51b815260040180806020018281038252602a815260200180611351602a913960400191505060405180910390fd5b606061119d84846000856111a5565b949350505050565b60606111b085611080565b611201576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106112405780518252601f199092019160209182019101611221565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146112a2576040519150601f19603f3d011682016040523d82523d6000602084013e6112a7565b606091505b509150915081156112bb57915061119d9050565b8051156112cb5780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156113155781810151838201526020016112fd565b50505050905090810190601f1680156113425780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220186bde0d9b36823fed4f13c80a6d371e15ae371d5d8c928dcf853bd9560c276c64736f6c634300060b0033"), - storage: storage{ - // address payable public coldAddress - "0x00": "0x0000000000000000000000003727cfcbd85390bb11b3ff421878123adb866be8", - // uint256 public minimumInput - "0x01": "0x000000000000000000000000000000000000000000000000002386f26fc10000", - }, - }, - { - contract: bitbankProxyFactory, - // commit - // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/contracts/bitbank/ProxyFactory.sol - // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/outputs/bitbank.json#L16 - code: mustDecodeCode("0x608060405234801561001057600080fd5b50600436106100365760003560e01c80630cdd42341461003b578063d508e6231461005f575b600080fd5b61004361007c565b604080516001600160a01b039092168252519081900360200190f35b6100436004803603602081101561007557600080fd5b50356100a0565b7f000000000000000000000000520000000000000000000000000000000000002481565b600060606040518060800160405280604a815260200161010d604a91396020810180517f0000000000000000000000005200000000000000000000000000000000000024600881901b909117825291925084604a826000f59350508261010557600080fd5b505091905056fe604080600a3d393df3fe7300000000000000000000000000000000000000003d366025573d3d3d3d34865af16031565b363d3d373d3d363d855af45b3d82803e603c573d81fd5b3d81f3a264697066735822122084aed37c49a27a5f93f4288da7680e1280b7fb0971d6731dcb31a3c61010490464736f6c634300060b0033"), - }, - { - contract: bitbankExchangeDepositStaging, - // commit: - // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/contracts/bitbank/ExchangeDeposit.sol - // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/outputs/bitbank.json#L23-L27 - code: mustDecodeCode("0x6080604052600436106100a05760003560e01c806388bc06731161006457806388bc0673146104c7578063ab413f1c146104dc578063cb56d18e146104f1578063d4dca69b14610524578063dca67d7b14610539578063fc6f94681461056c5761021d565b80632663d52d146103fb5780632ffdb1c51461042757806341c0e1b51461044e5780635c60da1b146104635780636296aa3f146104945761021d565b3661021d576000546001600160a01b03166100f2576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b60015434101561013c576040805162461bcd60e51b815260206004820152601060248201526f105b5bdd5b9d081d1bdbc81cdb585b1b60821b604482015290519081900360640190fd5b600080546040516001600160a01b039091169034908381818185875af1925050503d8060008114610189576040519150601f19603f3d011682016040523d82523d6000602084013e61018e565b606091505b50509050806101e4576040805162461bcd60e51b815260206004820152601760248201527f466f7277617264696e672066756e6473206661696c6564000000000000000000604482015290519081900360640190fd5b60408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a250005b6000610227610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561025f57600080fd5b505afa158015610273573d6000803e3d6000fd5b505050506040513d602081101561028957600080fd5b50516001600160a01b031614156102d7576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b60006102e16105bc565b90506001600160a01b03811661033e576040805162461bcd60e51b815260206004820152601960248201527f46616c6c6261636b20636f6e7472616374206e6f742073657400000000000000604482015290519081900360640190fd5b6000816001600160a01b03166000366040518083838082843760405192019450600093509091505080830381855af49150503d806000811461039c576040519150601f19603f3d011682016040523d82523d6000602084013e6103a1565b606091505b50509050806103f7576040805162461bcd60e51b815260206004820152601860248201527f46616c6c6261636b20636f6e7472616374206661696c65640000000000000000604482015290519081900360640190fd5b5050005b34801561040757600080fd5b506104256004803603602081101561041e57600080fd5b5035610664565b005b34801561043357600080fd5b5061043c6107e8565b60408051918252519081900360200190f35b34801561045a57600080fd5b506104256107ee565b34801561046f57600080fd5b5061047861097f565b604080516001600160a01b039092168252519081900360200190f35b3480156104a057600080fd5b50610425600480360360208110156104b757600080fd5b50356001600160a01b031661098e565b3480156104d357600080fd5b50610425610b8a565b3480156104e857600080fd5b50610478610c42565b3480156104fd57600080fd5b506104256004803603602081101561051457600080fd5b50356001600160a01b0316610c51565b34801561053057600080fd5b50610478610e66565b34801561054557600080fd5b506104256004803603602081101561055c57600080fd5b50356001600160a01b0316610e8a565b34801561057857600080fd5b50610478610f32565b600061058b610f56565b6105b5577f00000000000000000000000052000000000000000000000000000000000000266105b7565b305b905090565b60006105c6610f56565b610654577f00000000000000000000000052000000000000000000000000000000000000266001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561062357600080fd5b505afa158015610637573d6000803e3d6000fd5b505050506040513d602081101561064d57600080fd5b50516105b7565b506002546001600160a01b031690565b61066c610f56565b6106b6576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b60006106c0610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106f857600080fd5b505afa15801561070c573d6000803e3d6000fd5b505050506040513d602081101561072257600080fd5b50516001600160a01b03161415610770576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000d4973c24a370face9a53f477f7e369e39886580516146107e3576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b600155565b60015481565b6107f6610f56565b610840576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b600061084a610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561088257600080fd5b505afa158015610896573d6000803e3d6000fd5b505050506040513d60208110156108ac57600080fd5b50516001600160a01b031614156108fa576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000d4973c24a370face9a53f477f7e369e398865805161461096d576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b600080546001600160a01b0319169055565b6002546001600160a01b031681565b610996610f56565b6109e0576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b60006109ea610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2257600080fd5b505afa158015610a36573d6000803e3d6000fd5b505050506040513d6020811015610a4c57600080fd5b50516001600160a01b03161415610a9a576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000d4973c24a370face9a53f477f7e369e3988658051614610b0d576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b6001600160a01b038116610b68576040805162461bcd60e51b815260206004820152601960248201527f30783020697320616e20696e76616c6964206164647265737300000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4780610b965750610c40565b6000610ba0610f85565b6040516001600160a01b0391909116908390600081818185875af1925050503d8060008114610beb576040519150601f19603f3d011682016040523d82523d6000602084013e610bf0565b606091505b5050905080610c3d576040805162461bcd60e51b8152602060048201526014602482015273086deead8c840dcdee840cec2e8d0cae4408aa8960631b604482015290519081900360640190fd5b50505b565b6000546001600160a01b031681565b610c59610f56565b610ca3576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b6000610cad610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ce557600080fd5b505afa158015610cf9573d6000803e3d6000fd5b505050506040513d6020811015610d0f57600080fd5b50516001600160a01b03161415610d5d576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000d4973c24a370face9a53f477f7e369e3988658051614610dd0576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b6001600160a01b0381161580610df35750610df3816001600160a01b0316611080565b610e44576040805162461bcd60e51b815260206004820152601f60248201527f696d706c656d656e746174696f6e206d75737420626520636f6e747261637400604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000520000000000000000000000000000000000002681565b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610ed457600080fd5b505afa158015610ee8573d6000803e3d6000fd5b505050506040513d6020811015610efe57600080fd5b5051905080610f0d5750610f2f565b610c3d610f18610f85565b6001600160a01b038416908363ffffffff61108616565b50565b7f000000000000000000000000d4973c24a370face9a53f477f7e369e39886580581565b7f00000000000000000000000052000000000000000000000000000000000000266001600160a01b0316301490565b600080610f90610581565b90506000816001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fcd57600080fd5b505afa158015610fe1573d6000803e3d6000fd5b505050506040513d6020811015610ff757600080fd5b5051905060006001600160a01b038216156110125781611078565b826001600160a01b031663fc6f94686040518163ffffffff1660e01b815260040160206040518083038186803b15801561104b57600080fd5b505afa15801561105f573d6000803e3d6000fd5b505050506040513d602081101561107557600080fd5b50515b935050505090565b3b151590565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526110d89084906110dd565b505050565b6060611132826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661118e9092919063ffffffff16565b8051909150156110d85780806020019051602081101561115157600080fd5b50516110d85760405162461bcd60e51b815260040180806020018281038252602a815260200180611351602a913960400191505060405180910390fd5b606061119d84846000856111a5565b949350505050565b60606111b085611080565b611201576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106112405780518252601f199092019160209182019101611221565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146112a2576040519150601f19603f3d011682016040523d82523d6000602084013e6112a7565b606091505b509150915081156112bb57915061119d9050565b8051156112cb5780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156113155781810151838201526020016112fd565b50505050905090810190601f1680156113425780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220186bde0d9b36823fed4f13c80a6d371e15ae371d5d8c928dcf853bd9560c276c64736f6c634300060b0033"), - storage: storage{ - // address payable public coldAddress - "0x00": "0x000000000000000000000000a3a80b4daa8be824b73f689eb87fb0955446dece", - // uint256 public minimumInput - "0x01": "0x000000000000000000000000000000000000000000000000002386f26fc10000", - }, - }, - { - contract: bitbankProxyFactoryStaging, - // commit: - // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/contracts/bitbank/ProxyFactory.sol - // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/outputs/bitbank.json#L33 - code: mustDecodeCode("0x608060405234801561001057600080fd5b50600436106100365760003560e01c80630cdd42341461003b578063d508e6231461005f575b600080fd5b61004361007c565b604080516001600160a01b039092168252519081900360200190f35b6100436004803603602081101561007557600080fd5b50356100a0565b7f000000000000000000000000520000000000000000000000000000000000002681565b600060606040518060800160405280604a815260200161010d604a91396020810180517f0000000000000000000000005200000000000000000000000000000000000026600881901b909117825291925084604a826000f59350508261010557600080fd5b505091905056fe604080600a3d393df3fe7300000000000000000000000000000000000000003d366025573d3d3d3d34865af16031565b363d3d373d3d363d855af45b3d82803e603c573d81fd5b3d81f3a264697066735822122084aed37c49a27a5f93f4288da7680e1280b7fb0971d6731dcb31a3c61010490464736f6c634300060b0033"), - }, - { - contract: oasMultiTransfer, - // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/2c8697e48049f692080650f9d4a6b70dabfa2a3c/contracts/util/OASMultiTransfer.sol - code: mustDecodeCode("0x60806040526004361061001e5760003560e01c8063ffc3a76914610023575b600080fd5b610036610031366004610323565b610038565b005b805182511461005a5760405163a9cb9e0d60e01b815260040160405180910390fd5b60005b82518110156101cd5760006001600160a01b0316838281518110610083576100836103f2565b60200260200101516001600160a01b0316141561009f576101bb565b8181815181106100b1576100b16103f2565b6020026020010151600014156100c6576101bb565b60008382815181106100da576100da6103f2565b60200260200101516001600160a01b03168383815181106100fd576100fd6103f2565b602002602001015160405160006040518083038185875af1925050503d8060008114610145576040519150601f19603f3d011682016040523d82523d6000602084013e61014a565b606091505b50509050806101b957838281518110610165576101656103f2565b602002602001015183838151811061017f5761017f6103f2565b6020908102919091010151604051630e21dcbb60e11b81526001600160a01b03909216600483015260248201526044015b60405180910390fd5b505b806101c581610408565b91505061005d565b50476101d7575050565b604051600090339047908381818185875af1925050503d8060008114610219576040519150601f19603f3d011682016040523d82523d6000602084013e61021e565b606091505b505090508061024857604051630e21dcbb60e11b81523360048201524760248201526044016101b0565b505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561028c5761028c61024d565b604052919050565b600067ffffffffffffffff8211156102ae576102ae61024d565b5060051b60200190565b600082601f8301126102c957600080fd5b813560206102de6102d983610294565b610263565b82815260059290921b840181019181810190868411156102fd57600080fd5b8286015b848110156103185780358352918301918301610301565b509695505050505050565b6000806040838503121561033657600080fd5b823567ffffffffffffffff8082111561034e57600080fd5b818501915085601f83011261036257600080fd5b813560206103726102d983610294565b82815260059290921b8401810191818101908984111561039157600080fd5b948201945b838610156103c55785356001600160a01b03811681146103b65760008081fd5b82529482019490820190610396565b965050860135925050808211156103db57600080fd5b506103e8858286016102b8565b9150509250929050565b634e487b7160e01b600052603260045260246000fd5b600060001982141561042a57634e487b7160e01b600052601160045260246000fd5b506001019056fea2646970667358221220463aa93b36bbf049bb9add61fc6e9f93ee69240841579c4af23fc9a58a9a1a0d64736f6c634300080c0033"), - }, - } - - deployments8 = []*deployment{ - { - contract: bitbankExchangeDepositYokohama, - // commit: - // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/contracts/bitbank/ExchangeDeposit.sol - // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/outputs/bitbank.json#L40-L44 - code: mustDecodeCode("0x6080604052600436106100a05760003560e01c806388bc06731161006457806388bc0673146104c7578063ab413f1c146104dc578063cb56d18e146104f1578063d4dca69b14610524578063dca67d7b14610539578063fc6f94681461056c5761021d565b80632663d52d146103fb5780632ffdb1c51461042757806341c0e1b51461044e5780635c60da1b146104635780636296aa3f146104945761021d565b3661021d576000546001600160a01b03166100f2576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b60015434101561013c576040805162461bcd60e51b815260206004820152601060248201526f105b5bdd5b9d081d1bdbc81cdb585b1b60821b604482015290519081900360640190fd5b600080546040516001600160a01b039091169034908381818185875af1925050503d8060008114610189576040519150601f19603f3d011682016040523d82523d6000602084013e61018e565b606091505b50509050806101e4576040805162461bcd60e51b815260206004820152601760248201527f466f7277617264696e672066756e6473206661696c6564000000000000000000604482015290519081900360640190fd5b60408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a250005b6000610227610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561025f57600080fd5b505afa158015610273573d6000803e3d6000fd5b505050506040513d602081101561028957600080fd5b50516001600160a01b031614156102d7576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b60006102e16105bc565b90506001600160a01b03811661033e576040805162461bcd60e51b815260206004820152601960248201527f46616c6c6261636b20636f6e7472616374206e6f742073657400000000000000604482015290519081900360640190fd5b6000816001600160a01b03166000366040518083838082843760405192019450600093509091505080830381855af49150503d806000811461039c576040519150601f19603f3d011682016040523d82523d6000602084013e6103a1565b606091505b50509050806103f7576040805162461bcd60e51b815260206004820152601860248201527f46616c6c6261636b20636f6e7472616374206661696c65640000000000000000604482015290519081900360640190fd5b5050005b34801561040757600080fd5b506104256004803603602081101561041e57600080fd5b5035610664565b005b34801561043357600080fd5b5061043c6107e8565b60408051918252519081900360200190f35b34801561045a57600080fd5b506104256107ee565b34801561046f57600080fd5b5061047861097f565b604080516001600160a01b039092168252519081900360200190f35b3480156104a057600080fd5b50610425600480360360208110156104b757600080fd5b50356001600160a01b031661098e565b3480156104d357600080fd5b50610425610b8a565b3480156104e857600080fd5b50610478610c42565b3480156104fd57600080fd5b506104256004803603602081101561051457600080fd5b50356001600160a01b0316610c51565b34801561053057600080fd5b50610478610e66565b34801561054557600080fd5b506104256004803603602081101561055c57600080fd5b50356001600160a01b0316610e8a565b34801561057857600080fd5b50610478610f32565b600061058b610f56565b6105b5577f00000000000000000000000052000000000000000000000000000000000000286105b7565b305b905090565b60006105c6610f56565b610654577f00000000000000000000000052000000000000000000000000000000000000286001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561062357600080fd5b505afa158015610637573d6000803e3d6000fd5b505050506040513d602081101561064d57600080fd5b50516105b7565b506002546001600160a01b031690565b61066c610f56565b6106b6576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b60006106c0610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106f857600080fd5b505afa15801561070c573d6000803e3d6000fd5b505050506040513d602081101561072257600080fd5b50516001600160a01b03161415610770576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f0000000000000000000000000434fa25152dbd34a906a192b6ca5b4a8e0030ee16146107e3576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b600155565b60015481565b6107f6610f56565b610840576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b600061084a610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561088257600080fd5b505afa158015610896573d6000803e3d6000fd5b505050506040513d60208110156108ac57600080fd5b50516001600160a01b031614156108fa576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f0000000000000000000000000434fa25152dbd34a906a192b6ca5b4a8e0030ee161461096d576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b600080546001600160a01b0319169055565b6002546001600160a01b031681565b610996610f56565b6109e0576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b60006109ea610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2257600080fd5b505afa158015610a36573d6000803e3d6000fd5b505050506040513d6020811015610a4c57600080fd5b50516001600160a01b03161415610a9a576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f0000000000000000000000000434fa25152dbd34a906a192b6ca5b4a8e0030ee1614610b0d576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b6001600160a01b038116610b68576040805162461bcd60e51b815260206004820152601960248201527f30783020697320616e20696e76616c6964206164647265737300000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4780610b965750610c40565b6000610ba0610f85565b6040516001600160a01b0391909116908390600081818185875af1925050503d8060008114610beb576040519150601f19603f3d011682016040523d82523d6000602084013e610bf0565b606091505b5050905080610c3d576040805162461bcd60e51b8152602060048201526014602482015273086deead8c840dcdee840cec2e8d0cae4408aa8960631b604482015290519081900360640190fd5b50505b565b6000546001600160a01b031681565b610c59610f56565b610ca3576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b6000610cad610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ce557600080fd5b505afa158015610cf9573d6000803e3d6000fd5b505050506040513d6020811015610d0f57600080fd5b50516001600160a01b03161415610d5d576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f0000000000000000000000000434fa25152dbd34a906a192b6ca5b4a8e0030ee1614610dd0576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b6001600160a01b0381161580610df35750610df3816001600160a01b0316611080565b610e44576040805162461bcd60e51b815260206004820152601f60248201527f696d706c656d656e746174696f6e206d75737420626520636f6e747261637400604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000520000000000000000000000000000000000002881565b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610ed457600080fd5b505afa158015610ee8573d6000803e3d6000fd5b505050506040513d6020811015610efe57600080fd5b5051905080610f0d5750610f2f565b610c3d610f18610f85565b6001600160a01b038416908363ffffffff61108616565b50565b7f0000000000000000000000000434fa25152dbd34a906a192b6ca5b4a8e0030ee81565b7f00000000000000000000000052000000000000000000000000000000000000286001600160a01b0316301490565b600080610f90610581565b90506000816001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fcd57600080fd5b505afa158015610fe1573d6000803e3d6000fd5b505050506040513d6020811015610ff757600080fd5b5051905060006001600160a01b038216156110125781611078565b826001600160a01b031663fc6f94686040518163ffffffff1660e01b815260040160206040518083038186803b15801561104b57600080fd5b505afa15801561105f573d6000803e3d6000fd5b505050506040513d602081101561107557600080fd5b50515b935050505090565b3b151590565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526110d89084906110dd565b505050565b6060611132826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661118e9092919063ffffffff16565b8051909150156110d85780806020019051602081101561115157600080fd5b50516110d85760405162461bcd60e51b815260040180806020018281038252602a815260200180611351602a913960400191505060405180910390fd5b606061119d84846000856111a5565b949350505050565b60606111b085611080565b611201576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106112405780518252601f199092019160209182019101611221565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146112a2576040519150601f19603f3d011682016040523d82523d6000602084013e6112a7565b606091505b509150915081156112bb57915061119d9050565b8051156112cb5780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156113155781810151838201526020016112fd565b50505050905090810190601f1680156113425780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220186bde0d9b36823fed4f13c80a6d371e15ae371d5d8c928dcf853bd9560c276c64736f6c634300060b0033"), - storage: storage{ - // address payable public coldAddress - "0x00": "0x0000000000000000000000006f83f131b8c3f29f24fd146c6b75bce0844dc6d3", - // uint256 public minimumInput - "0x01": "0x000000000000000000000000000000000000000000000000002386f26fc10000", - }, - }, - { - contract: bitbankProxyFactoryYokohama, - // commit: - // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/contracts/bitbank/ProxyFactory.sol - // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/outputs/bitbank.json#L50 - code: mustDecodeCode("0x608060405234801561001057600080fd5b50600436106100365760003560e01c80630cdd42341461003b578063d508e6231461005f575b600080fd5b61004361007c565b604080516001600160a01b039092168252519081900360200190f35b6100436004803603602081101561007557600080fd5b50356100a0565b7f000000000000000000000000520000000000000000000000000000000000002881565b600060606040518060800160405280604a815260200161010d604a91396020810180517f0000000000000000000000005200000000000000000000000000000000000028600881901b909117825291925084604a826000f59350508261010557600080fd5b505091905056fe604080600a3d393df3fe7300000000000000000000000000000000000000003d366025573d3d3d3d34865af16031565b363d3d373d3d363d855af45b3d82803e603c573d81fd5b3d81f3a264697066735822122084aed37c49a27a5f93f4288da7680e1280b7fb0971d6731dcb31a3c61010490464736f6c634300060b0033"), - }, - { - contract: bitbankExchangeDepositDev, - // commit: - // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/contracts/bitbank/ExchangeDeposit.sol - // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/outputs/bitbank.json#L57-L61 - code: mustDecodeCode("0x6080604052600436106100a05760003560e01c806388bc06731161006457806388bc0673146104c7578063ab413f1c146104dc578063cb56d18e146104f1578063d4dca69b14610524578063dca67d7b14610539578063fc6f94681461056c5761021d565b80632663d52d146103fb5780632ffdb1c51461042757806341c0e1b51461044e5780635c60da1b146104635780636296aa3f146104945761021d565b3661021d576000546001600160a01b03166100f2576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b60015434101561013c576040805162461bcd60e51b815260206004820152601060248201526f105b5bdd5b9d081d1bdbc81cdb585b1b60821b604482015290519081900360640190fd5b600080546040516001600160a01b039091169034908381818185875af1925050503d8060008114610189576040519150601f19603f3d011682016040523d82523d6000602084013e61018e565b606091505b50509050806101e4576040805162461bcd60e51b815260206004820152601760248201527f466f7277617264696e672066756e6473206661696c6564000000000000000000604482015290519081900360640190fd5b60408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a250005b6000610227610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561025f57600080fd5b505afa158015610273573d6000803e3d6000fd5b505050506040513d602081101561028957600080fd5b50516001600160a01b031614156102d7576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b60006102e16105bc565b90506001600160a01b03811661033e576040805162461bcd60e51b815260206004820152601960248201527f46616c6c6261636b20636f6e7472616374206e6f742073657400000000000000604482015290519081900360640190fd5b6000816001600160a01b03166000366040518083838082843760405192019450600093509091505080830381855af49150503d806000811461039c576040519150601f19603f3d011682016040523d82523d6000602084013e6103a1565b606091505b50509050806103f7576040805162461bcd60e51b815260206004820152601860248201527f46616c6c6261636b20636f6e7472616374206661696c65640000000000000000604482015290519081900360640190fd5b5050005b34801561040757600080fd5b506104256004803603602081101561041e57600080fd5b5035610664565b005b34801561043357600080fd5b5061043c6107e8565b60408051918252519081900360200190f35b34801561045a57600080fd5b506104256107ee565b34801561046f57600080fd5b5061047861097f565b604080516001600160a01b039092168252519081900360200190f35b3480156104a057600080fd5b50610425600480360360208110156104b757600080fd5b50356001600160a01b031661098e565b3480156104d357600080fd5b50610425610b8a565b3480156104e857600080fd5b50610478610c42565b3480156104fd57600080fd5b506104256004803603602081101561051457600080fd5b50356001600160a01b0316610c51565b34801561053057600080fd5b50610478610e66565b34801561054557600080fd5b506104256004803603602081101561055c57600080fd5b50356001600160a01b0316610e8a565b34801561057857600080fd5b50610478610f32565b600061058b610f56565b6105b5577f000000000000000000000000520000000000000000000000000000000000002a6105b7565b305b905090565b60006105c6610f56565b610654577f000000000000000000000000520000000000000000000000000000000000002a6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561062357600080fd5b505afa158015610637573d6000803e3d6000fd5b505050506040513d602081101561064d57600080fd5b50516105b7565b506002546001600160a01b031690565b61066c610f56565b6106b6576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b60006106c0610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106f857600080fd5b505afa15801561070c573d6000803e3d6000fd5b505050506040513d602081101561072257600080fd5b50516001600160a01b03161415610770576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000fb0a2b538bd0c86db72f3b18cf1cec634df2dade16146107e3576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b600155565b60015481565b6107f6610f56565b610840576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b600061084a610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561088257600080fd5b505afa158015610896573d6000803e3d6000fd5b505050506040513d60208110156108ac57600080fd5b50516001600160a01b031614156108fa576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000fb0a2b538bd0c86db72f3b18cf1cec634df2dade161461096d576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b600080546001600160a01b0319169055565b6002546001600160a01b031681565b610996610f56565b6109e0576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b60006109ea610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2257600080fd5b505afa158015610a36573d6000803e3d6000fd5b505050506040513d6020811015610a4c57600080fd5b50516001600160a01b03161415610a9a576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000fb0a2b538bd0c86db72f3b18cf1cec634df2dade1614610b0d576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b6001600160a01b038116610b68576040805162461bcd60e51b815260206004820152601960248201527f30783020697320616e20696e76616c6964206164647265737300000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4780610b965750610c40565b6000610ba0610f85565b6040516001600160a01b0391909116908390600081818185875af1925050503d8060008114610beb576040519150601f19603f3d011682016040523d82523d6000602084013e610bf0565b606091505b5050905080610c3d576040805162461bcd60e51b8152602060048201526014602482015273086deead8c840dcdee840cec2e8d0cae4408aa8960631b604482015290519081900360640190fd5b50505b565b6000546001600160a01b031681565b610c59610f56565b610ca3576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b6000610cad610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ce557600080fd5b505afa158015610cf9573d6000803e3d6000fd5b505050506040513d6020811015610d0f57600080fd5b50516001600160a01b03161415610d5d576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000fb0a2b538bd0c86db72f3b18cf1cec634df2dade1614610dd0576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b6001600160a01b0381161580610df35750610df3816001600160a01b0316611080565b610e44576040805162461bcd60e51b815260206004820152601f60248201527f696d706c656d656e746174696f6e206d75737420626520636f6e747261637400604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000520000000000000000000000000000000000002a81565b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610ed457600080fd5b505afa158015610ee8573d6000803e3d6000fd5b505050506040513d6020811015610efe57600080fd5b5051905080610f0d5750610f2f565b610c3d610f18610f85565b6001600160a01b038416908363ffffffff61108616565b50565b7f000000000000000000000000fb0a2b538bd0c86db72f3b18cf1cec634df2dade81565b7f000000000000000000000000520000000000000000000000000000000000002a6001600160a01b0316301490565b600080610f90610581565b90506000816001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fcd57600080fd5b505afa158015610fe1573d6000803e3d6000fd5b505050506040513d6020811015610ff757600080fd5b5051905060006001600160a01b038216156110125781611078565b826001600160a01b031663fc6f94686040518163ffffffff1660e01b815260040160206040518083038186803b15801561104b57600080fd5b505afa15801561105f573d6000803e3d6000fd5b505050506040513d602081101561107557600080fd5b50515b935050505090565b3b151590565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526110d89084906110dd565b505050565b6060611132826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661118e9092919063ffffffff16565b8051909150156110d85780806020019051602081101561115157600080fd5b50516110d85760405162461bcd60e51b815260040180806020018281038252602a815260200180611351602a913960400191505060405180910390fd5b606061119d84846000856111a5565b949350505050565b60606111b085611080565b611201576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106112405780518252601f199092019160209182019101611221565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146112a2576040519150601f19603f3d011682016040523d82523d6000602084013e6112a7565b606091505b509150915081156112bb57915061119d9050565b8051156112cb5780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156113155781810151838201526020016112fd565b50505050905090810190601f1680156113425780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220186bde0d9b36823fed4f13c80a6d371e15ae371d5d8c928dcf853bd9560c276c64736f6c634300060b0033"), - storage: storage{ - // address payable public coldAddress - "0x00": "0x000000000000000000000000ba7b3124bd11c738e22c2ee61f46cb2108d2356b", - // uint256 public minimumInput - "0x01": "0x000000000000000000000000000000000000000000000000002386f26fc10000", - }, - }, - { - contract: bitbankProxyFactoryDev, - // commit: - // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/contracts/bitbank/ProxyFactory.sol - // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/outputs/bitbank.json#L67 - code: mustDecodeCode("0x608060405234801561001057600080fd5b50600436106100365760003560e01c80630cdd42341461003b578063d508e6231461005f575b600080fd5b61004361007c565b604080516001600160a01b039092168252519081900360200190f35b6100436004803603602081101561007557600080fd5b50356100a0565b7f000000000000000000000000520000000000000000000000000000000000002a81565b600060606040518060800160405280604a815260200161010d604a91396020810180517f000000000000000000000000520000000000000000000000000000000000002a600881901b909117825291925084604a826000f59350508261010557600080fd5b505091905056fe604080600a3d393df3fe7300000000000000000000000000000000000000003d366025573d3d3d3d34865af16031565b363d3d373d3d363d855af45b3d82803e603c573d81fd5b3d81f3a264697066735822122084aed37c49a27a5f93f4288da7680e1280b7fb0971d6731dcb31a3c61010490464736f6c634300060b0033"), - }, - } - - deployments9 = []*deployment{ - { - // commit: https://github.com/oasysgames/oasys-optimism/blob/5186190c3250121179064b70d8e2fbd2d0a03ce3/packages/contracts/contracts/oasys/L1/build/L1BuildAgent.sol - contract: l1BuildAgent, - code: mustDecodeCode(`0x608060405234801561001057600080fd5b50600436106100df5760003560e01c806365c11a6c1161008c5780639f05c9ea116100665780639f05c9ea14610222578063a708ca6b14610242578063b61f370e14610255578063c86fc4c91461027557600080fd5b806365c11a6c146101cf57806366ed9d1b146101ef57806385c89dad1461020f57600080fd5b8063408d2693116100bd578063408d2693146101565780634dbbce2a1461018c57806364f57cb3146101ad57600080fd5b80630d5242f7146100e45780631ee5c97d1461012157806328f833b714610136575b600080fd5b6100f76100f23660046110e0565b610288565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013461012f3660046111e2565b6103b3565b005b6000546100f79073ffffffffffffffffffffffffffffffffffffffff1681565b6100f761016436600461121e565b60009081526005602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b61019f61019a36600461121e565b6107ce565b604051610118929190611288565b6101c06101bb366004611373565b61092b565b60405161011893929190611395565b6004546100f79073ffffffffffffffffffffffffffffffffffffffff1681565b6003546100f79073ffffffffffffffffffffffffffffffffffffffff1681565b61013461021d3660046113f5565b610add565b6001546100f79073ffffffffffffffffffffffffffffffffffffffff1681565b610134610250366004611453565b610c9c565b6002546100f79073ffffffffffffffffffffffffffffffffffffffff1681565b6101346102833660046114a0565b610dc6565b805160208083019190912060008481526006909252604082208054835b8181101561034557838382815481106102c0576102c061150d565b906000526020600020016040516102d79190611590565b604051809103902014156103335760008781526007602052604090208054829081106103055761030561150d565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1694506103ad9350505050565b8061033d81611692565b9150506102a5565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f7420666f756e64000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b92915050565b60008381526005602052604090205473ffffffffffffffffffffffffffffffffffffffff161561043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f616c7265616479206275696c740000000000000000000000000000000000000060448201526064016103a4565b6000546040517ff3701da200000000000000000000000000000000000000000000000000000000815233600482018190529173ffffffffffffffffffffffffffffffffffffffff169063f3701da290602401600060405180830381600087803b1580156104ab57600080fd5b505af11580156104bf573d6000803e3d6000fd5b50506001546040517f1ee5c97d0000000000000000000000000000000000000000000000000000000081526004810188905273ffffffffffffffffffffffffffffffffffffffff878116602483015286811660448301529091169250631ee5c97d9150606401600060405180830381600087803b15801561053f57600080fd5b505af1158015610553573d6000803e3d6000fd5b50506002546040517f7ef7cca20000000000000000000000000000000000000000000000000000000081526004810188905273ffffffffffffffffffffffffffffffffffffffff85811660248301529091169250637ef7cca29150604401600060405180830381600087803b1580156105cb57600080fd5b505af11580156105df573d6000803e3d6000fd5b50506003546040517f7ef7cca20000000000000000000000000000000000000000000000000000000081526004810188905273ffffffffffffffffffffffffffffffffffffffff85811660248301529091169250637ef7cca29150604401600060405180830381600087803b15801561065757600080fd5b505af115801561066b573d6000803e3d6000fd5b5050600480546040517f7ef7cca200000000000000000000000000000000000000000000000000000000815291820188905273ffffffffffffffffffffffffffffffffffffffff8581166024840152169250637ef7cca29150604401600060405180830381600087803b1580156106e157600080fd5b505af11580156106f5573d6000803e3d6000fd5b50506008805460018082019092557ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915560098054928301815560009081527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af9092018890556040518894509092507fd8406a18b0c7572d0adae5f0a479d5d802035e2c506e9353b092d25997f61a629190a350505050565b60008181526006602090815260408083206007835281842081548351818602810186019094528084526060958695939492938592919084015b828210156108b35783829060005260206000200180546108269061153c565b80601f01602080910402602001604051908101604052809291908181526020018280546108529061153c565b801561089f5780601f106108745761010080835404028352916020019161089f565b820191906000526020600020905b81548152906001019060200180831161088257829003601f168201915b505050505081526020019060010190610807565b5050505091508080548060200260200160405190810160405280929190818152602001828054801561091b57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116108f0575b5050505050905091509150915091565b60085460609081906000908061094186886116cb565b106109535761095086826116e3565b94505b60008567ffffffffffffffff81111561096e5761096e6110b1565b604051908082528060200260200182016040528015610997578160200160208202803683370190505b50905060008667ffffffffffffffff8111156109b5576109b56110b1565b6040519080825280602002602001820160405280156109de578160200160208202803683370190505b50905060005b87811015610ac05760086109f8828b6116cb565b81548110610a0857610a0861150d565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838281518110610a4557610a4561150d565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526009610a76828b6116cb565b81548110610a8657610a8661150d565b9060005260206000200154828281518110610aa357610aa361150d565b602090810291909101015280610ab881611692565b9150506109e4565b508181610acd898b6116cb565b9550955095505050509250925092565b60035473ffffffffffffffffffffffffffffffffffffffff163314610b5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f6f6e6c7920746865204c314275696c6453746570332063616e2063616c6c000060448201526064016103a4565b610b9e856040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000081525086610f7f565b610bc18560405180606001604052806021815260200161171c6021913985610f7f565b610c01856040518060400160405280601b81526020017f50726f78795f5f4f564d5f4c315374616e64617264427269646765000000000081525084610f7f565b610c41856040518060400160405280601981526020017f50726f78795f5f4f564d5f4c314552433732314272696467650000000000000081525083610f7f565b610c95856040518060400160405280601681526020017f4c3243726f7373446f6d61696e4d657373656e67657200000000000000000000815250734200000000000000000000000000000000000007610f7f565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff163314610d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f6f6e6c7920746865204c314275696c6453746570322063616e2063616c6c000060448201526064016103a4565b610d5d846040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e00000000000000000000000081525085610f7f565b610d80846040518060600160405280602181526020016116fb6021913984610f7f565b610dc0846040518060400160405280600b81526020017f426f6e644d616e6167657200000000000000000000000000000000000000000081525083610f7f565b50505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610e47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f6f6e6c7920746865204c314275696c6453746570312063616e2063616c6c000060448201526064016103a4565b60008681526005602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790558151808301909252600d82527f4f564d5f53657175656e6365720000000000000000000000000000000000000090820152610ed490879086610f7f565b610f14866040518060400160405280600c81526020017f4f564d5f50726f706f736572000000000000000000000000000000000000000081525085610f7f565b610f54866040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e0000000000000081525084610f7f565b610f778660405180606001604052806021815260200161173d6021913983610f7f565b505050505050565b600083815260066020908152604082208054600181018255908352918190208451610fb1939190910191850190611018565b50600092835260076020908152604084208054600181018255908552932090920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915550565b8280546110249061153c565b90600052602060002090601f016020900481019282611046576000855561108c565b82601f1061105f57805160ff191683800117855561108c565b8280016001018555821561108c579182015b8281111561108c578251825591602001919060010190611071565b5061109892915061109c565b5090565b5b80821115611098576000815560010161109d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156110f357600080fd5b82359150602083013567ffffffffffffffff8082111561111257600080fd5b818501915085601f83011261112657600080fd5b813581811115611138576111386110b1565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561117e5761117e6110b1565b8160405282815288602084870101111561119757600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111dd57600080fd5b919050565b6000806000606084860312156111f757600080fd5b83359250611207602085016111b9565b9150611215604085016111b9565b90509250925092565b60006020828403121561123057600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561127d57815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161124b565b509495945050505050565b6000604082016040835280855180835260608501915060608160051b860101925060208088016000805b84811015611353577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089880301865282518051808952835b81811015611305578281018701518a820188015286016112ea565b81811115611315578487838c0101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016979097018401965094830194918301916001016112b2565b5050508584038187015250505061136a8185611237565b95945050505050565b6000806040838503121561138657600080fd5b50508035926020909101359150565b6060815260006113a86060830186611237565b82810360208481019190915285518083528682019282019060005b818110156113df578451835293830193918301916001016113c3565b5050809350505050826040830152949350505050565b600080600080600060a0868803121561140d57600080fd5b8535945061141d602087016111b9565b935061142b604087016111b9565b9250611439606087016111b9565b9150611447608087016111b9565b90509295509295909350565b6000806000806080858703121561146957600080fd5b84359350611479602086016111b9565b9250611487604086016111b9565b9150611495606086016111b9565b905092959194509250565b60008060008060008060c087890312156114b957600080fd5b863595506114c9602088016111b9565b94506114d7604088016111b9565b93506114e5606088016111b9565b92506114f3608088016111b9565b915061150160a088016111b9565b90509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600181811c9082168061155057607f821691505b6020821081141561158a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080835481600182811c9150808316806115ac57607f831692505b60208084108214156115e5577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b8180156115f9576001811461162857611655565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650611655565b60008a81526020902060005b8681101561164d5781548b820152908501908301611634565b505084890196505b509498975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156116c4576116c4611663565b5060010190565b600082198211156116de576116de611663565b500190565b6000828210156116f5576116f5611663565b50039056fe436861696e53746f72616765436f6e7461696e65722d5343432d6261746368657350726f78795f5f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572436861696e53746f72616765436f6e7461696e65722d4354432d62617463686573a2646970667358221220c70f07fcb4927676b1a2cfebe530cc3e52ee51485f36a55a2a0c016a958a4cfe64736f6c63430008090033`), - }, - { - contract: l1BuildParam, - storage: storage{ - // bytes public l1ERC721BridgeCode, commit: https://github.com/oasysgames/oasys-optimism/blob/5186190c3250121179064b70d8e2fbd2d0a03ce3/packages/contracts/contracts/oasys/L1/messaging/L1ERC721BridgeV2.sol - "0x06": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80635d93a3fc1161005b5780635d93a3fc146100f45780638f45e47714610138578063c1bcfa4f1461014b578063dbfc9c3f1461015e57600080fd5b806330389967146100825780633cb747bf14610097578063485cc955146100e1575b600080fd5b610095610090366004610b04565b61017e565b005b6000546100b79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100956100ef366004610b87565b610204565b610128610102366004610bc0565b600260209081526000938452604080852082529284528284209052825290205460ff1681565b60405190151581526020016100d8565b610095610146366004610c01565b6102d7565b610095610159366004610c99565b610727565b6001546100b79073ffffffffffffffffffffffffffffffffffffffff1681565b333b156101ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4163636f756e74206e6f7420454f41000000000000000000000000000000000060448201526064015b60405180910390fd5b6101fc8686333388888888610740565b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1615610284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e697469616c697a65206f6e6c79206f6e636500000000000000000000000060448201526064016101e3565b6000805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560018054929093169116179055565b60015473ffffffffffffffffffffffffffffffffffffffff1661030f60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e7469636174656400000000000000000000000000000000000060648201526084016101e3565b8073ffffffffffffffffffffffffffffffffffffffff166103ff60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b815260040160206040518083038186803b15801561044457600080fd5b505afa158015610458573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047c9190610d10565b73ffffffffffffffffffffffffffffffffffffffff161461051f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d6573736167650000000000000000000000000000000060648201526084016101e3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b1683529281528282208783529052205460ff166105c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4e6f74206465706f73697465640000000000000000000000000000000000000060448201526064016101e3565b73ffffffffffffffffffffffffffffffffffffffff88811660008181526002602090815260408083208c8616845282528083208984529091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f23b872dd000000000000000000000000000000000000000000000000000000008152306004820152918716602483015260448201869052906323b872dd90606401600060405180830381600087803b15801561068357600080fd5b505af1158015610697573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f7fb3671da6a9a3c4b54a15e06575a4fa57d6264ad848930a6ea490e03e7514c1888888886040516107159493929190610d7d565b60405180910390a45050505050505050565b6107378787338888888888610740565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b1683529281528282208783529052205460ff16156107e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f416c7265616479206465706f736974656400000000000000000000000000000060448201526064016101e3565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152306024830152604482018690528916906323b872dd90606401600060405180830381600087803b15801561085b57600080fd5b505af115801561086f573d6000803e3d6000fd5b50505050600063662a633a60e01b8989898989888860405160240161089a9796959493929190610dbd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260015490915061093e9073ffffffffffffffffffffffffffffffffffffffff1685836109f5565b73ffffffffffffffffffffffffffffffffffffffff808a1660008181526002602090815260408083208d86168085529083528184208b85529092529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559051928a16929091907fd660bea642cb3af692ff947912f15e82ec86ad0796523ba971c5f369a6f989c5906109e2908b908b908a908a90610d7d565b60405180910390a4505050505050505050565b6000546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b90610a4f90869085908790600401610e1a565b600060405180830381600087803b158015610a6957600080fd5b505af1158015610737573d6000803e3d6000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114610a9f57600080fd5b50565b803563ffffffff81168114610ab657600080fd5b919050565b60008083601f840112610acd57600080fd5b50813567ffffffffffffffff811115610ae557600080fd5b602083019150836020828501011115610afd57600080fd5b9250929050565b60008060008060008060a08789031215610b1d57600080fd5b8635610b2881610a7d565b95506020870135610b3881610a7d565b945060408701359350610b4d60608801610aa2565b9250608087013567ffffffffffffffff811115610b6957600080fd5b610b7589828a01610abb565b979a9699509497509295939492505050565b60008060408385031215610b9a57600080fd5b8235610ba581610a7d565b91506020830135610bb581610a7d565b809150509250929050565b600080600060608486031215610bd557600080fd5b8335610be081610a7d565b92506020840135610bf081610a7d565b929592945050506040919091013590565b600080600080600080600060c0888a031215610c1c57600080fd5b8735610c2781610a7d565b96506020880135610c3781610a7d565b95506040880135610c4781610a7d565b94506060880135610c5781610a7d565b93506080880135925060a088013567ffffffffffffffff811115610c7a57600080fd5b610c868a828b01610abb565b989b979a50959850939692959293505050565b600080600080600080600060c0888a031215610cb457600080fd5b8735610cbf81610a7d565b96506020880135610ccf81610a7d565b95506040880135610cdf81610a7d565b945060608801359350610cf460808901610aa2565b925060a088013567ffffffffffffffff811115610c7a57600080fd5b600060208284031215610d2257600080fd5b8151610d2d81610a7d565b9392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000610db3606083018486610d34565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a0830152610e0d60c083018486610d34565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815260006020606081840152845180606085015260005b81811015610e6457868101830151858201608001528201610e48565b81811115610e76576000608083870101525b5063ffffffff9490941660408401525050601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016016080019291505056fea26469706673582212206c2b77a3fea5aa85a79d440bfa071416f63f3deba4bc3abec3d3ca8768451e0164736f6c63430008090033", - }, - }, - { - // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/c40adc981d07ccedd2cf2d3932ea9503761f6191/contracts/lib/AddressList.sol - contract: candidateValidatorManagerHighStakes, - code: mustDecodeCode(`0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806345788ce21161007157806345788ce21461016357806350fd73671461018e578063715018a6146101af5780638da5cb5b146101b9578063ab73e316146101ca578063f2fde38b146101dd57600080fd5b80630a3b0a4f146100b95780631907ebde146100e15780631f7b6d321461010157806321887c3d14610112578063225e25251461013d57806329092d0e14610150575b600080fd5b6100cc6100c7366004610975565b6101f0565b60405190151581526020015b60405180910390f35b6100f46100ef36600461099e565b610233565b6040516100d89190610a13565b6002546040519081526020016100d8565b6100cc610120366004610975565b6001600160a01b0316600090815260016020526040902054151590565b6100f461014b36600461099e565b61031c565b6100cc61015e366004610975565b6103fd565b610176610171366004610975565b610431565b6040516001600160a01b0390911681526020016100d8565b6101a161019c366004610a59565b610493565b6040516100d8929190610a7b565b6101b7610594565b005b6000546001600160a01b0316610176565b6101766101d8366004610975565b6105ca565b6101b76101eb366004610975565b610614565b600080546001600160a01b031633146102245760405162461bcd60e51b815260040161021b90610acc565b60405180910390fd5b61022d826106af565b92915050565b6000546060906001600160a01b031633146102605760405162461bcd60e51b815260040161021b90610acc565b818067ffffffffffffffff81111561027a5761027a610b01565b6040519080825280602002602001820160405280156102a3578160200160208202803683370190505b50915060005b81811015610314576102e08585838181106102c6576102c6610b17565b90506020020160208101906102db9190610975565b61078f565b8382815181106102f2576102f2610b17565b911515602092830291909101909101528061030c81610b43565b9150506102a9565b505092915050565b6000546060906001600160a01b031633146103495760405162461bcd60e51b815260040161021b90610acc565b818067ffffffffffffffff81111561036357610363610b01565b60405190808252806020026020018201604052801561038c578160200160208202803683370190505b50915060005b81811015610314576103c98585838181106103af576103af610b17565b90506020020160208101906103c49190610975565b6106af565b8382815181106103db576103db610b17565b91151560209283029190910190910152806103f581610b43565b915050610392565b600080546001600160a01b031633146104285760405162461bcd60e51b815260040161021b90610acc565b61022d8261078f565b6001600160a01b038116600090815260016020526040812054600281101561045a57600061048c565b60026104668183610b5e565b8154811061047657610476610b17565b6000918252602090912001546001600160a01b03165b9392505050565b600254606090600090806104a78587610b75565b106104b9576104b68582610b5e565b93505b6104c38486610b75565b91508367ffffffffffffffff8111156104de576104de610b01565b604051908082528060200260200182016040528015610507578160200160208202803683370190505b50925060005b8481101561058b5760026105218288610b75565b8154811061053157610531610b17565b9060005260206000200160009054906101000a90046001600160a01b031684828151811061056157610561610b17565b6001600160a01b03909216602092830291909101909101528061058381610b43565b91505061050d565b50509250929050565b6000546001600160a01b031633146105be5760405162461bcd60e51b815260040161021b90610acc565b6105c86000610925565b565b6001600160a01b03811660009081526001602081905260408220549081108015906105f6575060025481105b61060157600061048c565b6002818154811061047657610476610b17565b6000546001600160a01b0316331461063e5760405162461bcd60e51b815260040161021b90610acc565b6001600160a01b0381166106a35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161021b565b6106ac81610925565b50565b60006001600160a01b0382166106d85760405163e99d5ac560e01b815260040160405180910390fd5b6001600160a01b03821660009081526001602052604090205480156107005750600092915050565b60028054600180820183557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180546001600160a01b0319166001600160a01b03871690811790915591546000838152602092909252604080832091909155517fdcfefddfe354ab15def7a2a6a8758e2ad4100c920318c627db94e29d833e15679190a250600192915050565b60006001600160a01b0382166107b85760405163e99d5ac560e01b815260040160405180910390fd5b6001600160a01b038216600090815260016020526040902054806107df5750600092915050565b6001600160a01b0383166000908152600160208190526040822082905560028054909161080b91610b5e565b8154811061081b5761081b610b17565b600091825260209091200154600280546001600160a01b039092169250908061084657610846610b8d565b600082815260209020810160001990810180546001600160a01b03191690550190556001600160a01b03818116908516146108e7576001600160a01b038116600090815260016020819052604090912083905581906002906108a89085610b5e565b815481106108b8576108b8610b17565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6040516001600160a01b038516907f066a905b79c0121afe61e3a44e0b14b6bc1ec16d854cdba09efdfc9b6aa9af8190600090a25060019392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561098757600080fd5b81356001600160a01b038116811461048c57600080fd5b600080602083850312156109b157600080fd5b823567ffffffffffffffff808211156109c957600080fd5b818501915085601f8301126109dd57600080fd5b8135818111156109ec57600080fd5b8660208260051b8501011115610a0157600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b81811015610a4d578351151583529284019291840191600101610a2f565b50909695505050505050565b60008060408385031215610a6c57600080fd5b50508035926020909101359150565b604080825283519082018190526000906020906060840190828701845b82811015610abd5781516001600160a01b031684529284019290840190600101610a98565b50505092019290925292915050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415610b5757610b57610b2d565b5060010190565b600082821015610b7057610b70610b2d565b500390565b60008219821115610b8857610b88610b2d565b500190565b634e487b7160e01b600052603160045260246000fdfea264697066735822122045cb0552c2bcaf2e2a3f729cc78f6fc14d52c75562ab8ee201df8fca2eaae61864736f6c634300080c0033`), - storage: storage{ - // address private _owner - "0x00": candidateValidatorManager.address, - // mapping(address => uint256) private _ids - "0x01": genesismap{ - params.OasysMainnetGenesisHash: mapping{ - keyFn: addressKeyFn, - values: map[string]interface{}{ - "0x86652fE437425AC63211C55b6b067B3181BBcB17": big.NewInt(1), - "0xa505014a84e8BdC4A620470A53EAd872b0c1CA5b": big.NewInt(2), - "0xF5100e233E0A5AF82e9C6f3DEdF6Ca2E45099eF8": big.NewInt(3), - "0x4e5E774D3837bd9302B83CAD94a112575411F07B": big.NewInt(4), - "0x3C8075380217Eb85d4109226406cACda4c3BdB75": big.NewInt(5), - "0x9b64BE0ec5a334968b37BbD687EaDbc757DA6875": big.NewInt(6), - "0x3d821c7399ea97dA12e55727A378B4F5eb0289F8": big.NewInt(7), - "0xAf76F079631Ca0f3C090A98A2987b8D232C26447": big.NewInt(8), - "0xD47620F7904686E1B61bC2b16AD4Ef333623C3A4": big.NewInt(9), - "0xeC21628Fd017bbB0c751CB14BCbC6b81EB437241": big.NewInt(10), - "0x324D14607bB6853Fb0E15a02C80D59045714520F": big.NewInt(11), - "0x5F6831BDA9d0483054EB50A48966d65D2b156C7b": big.NewInt(12), - "0x6e28e5AF24dA4Cb7Bd669332244271eDce95f747": big.NewInt(13), - "0x5Ed4f15045aCfDd0392a7A0706503ae1aA2B82dc": big.NewInt(14), - "0x5646b6E8a0856766f0ace6D008f6919ad42Df82c": big.NewInt(15), - "0x025e6bEc8c34dBb38120840610004e8968790b7e": big.NewInt(16), - "0xB441A6A51BF69366d903c072D3B5594Ca02Ff1e0": big.NewInt(17), - "0x362EE93C00D8Bffc1e0284116d7CC9513cdE959F": big.NewInt(18), - "0x272d6bd040c2B8454f4f6F43115758fBe318ee2c": big.NewInt(19), - "0x80e358CBB533F6c8d07d2dc5604a55aA925A95df": big.NewInt(20), - "0xFCB42091aCBEf803e333A1b5C7079A43b0CFDE59": big.NewInt(21), - "0xaAF5a641256131484D00ACC565D84683025f2444": big.NewInt(22), - "0x18050B80d427B373C96AB24B78996310C0733c13": big.NewInt(23), - "0x4e5963c92bFE4De6f319b0859B2Efcf95267E3Ae": big.NewInt(24), - }, - }, - params.OasysTestnetGenesisHash: mapping{ - keyFn: addressKeyFn, - values: map[string]interface{}{ - "0xF886672205399c186638abfA9Dc155dEe9CBBD2e": big.NewInt(1), - }, - }, - }, - // address[] private _addresses - "0x02": genesismap{ - params.OasysMainnetGenesisHash: array{ - "0x86652fE437425AC63211C55b6b067B3181BBcB17", - "0xa505014a84e8BdC4A620470A53EAd872b0c1CA5b", - "0xF5100e233E0A5AF82e9C6f3DEdF6Ca2E45099eF8", - "0x4e5E774D3837bd9302B83CAD94a112575411F07B", - "0x3C8075380217Eb85d4109226406cACda4c3BdB75", - "0x9b64BE0ec5a334968b37BbD687EaDbc757DA6875", - "0x3d821c7399ea97dA12e55727A378B4F5eb0289F8", - "0xAf76F079631Ca0f3C090A98A2987b8D232C26447", - "0xD47620F7904686E1B61bC2b16AD4Ef333623C3A4", - "0xeC21628Fd017bbB0c751CB14BCbC6b81EB437241", - "0x324D14607bB6853Fb0E15a02C80D59045714520F", - "0x5F6831BDA9d0483054EB50A48966d65D2b156C7b", - "0x6e28e5AF24dA4Cb7Bd669332244271eDce95f747", - "0x5Ed4f15045aCfDd0392a7A0706503ae1aA2B82dc", - "0x5646b6E8a0856766f0ace6D008f6919ad42Df82c", - "0x025e6bEc8c34dBb38120840610004e8968790b7e", - "0xB441A6A51BF69366d903c072D3B5594Ca02Ff1e0", - "0x362EE93C00D8Bffc1e0284116d7CC9513cdE959F", - "0x272d6bd040c2B8454f4f6F43115758fBe318ee2c", - "0x80e358CBB533F6c8d07d2dc5604a55aA925A95df", - "0xFCB42091aCBEf803e333A1b5C7079A43b0CFDE59", - "0xaAF5a641256131484D00ACC565D84683025f2444", - "0x18050B80d427B373C96AB24B78996310C0733c13", - "0x4e5963c92bFE4De6f319b0859B2Efcf95267E3Ae", - }, - params.OasysTestnetGenesisHash: array{ - "0xF886672205399c186638abfA9Dc155dEe9CBBD2e", - }, - }, - }, - }, - { - // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/c40adc981d07ccedd2cf2d3932ea9503761f6191/contracts/CandidateValidatorManager.sol - contract: candidateValidatorManager, - code: mustDecodeCode(`0x608060405234801561001057600080fd5b50600436106100625760003560e01c80630c53b46c1461006757806321b81652146100ab5780632d73a02f146100d157806374e2b63c146100e45780637542ff951461010b578063ad24c33a14610132575b600080fd5b61008e7f000000000000000000000000520000000000000000000000000000000000002d81565b6040516001600160a01b0390911681526020015b60405180910390f35b6100be6100b9366004610ce8565b610147565b6040516100a29796959493929190610d8a565b6100be6100df366004610ce8565b6102ae565b61008e7f000000000000000000000000000000000000000000000000000000000000100081565b61008e7f000000000000000000000000000000000000000000000000000000000000100181565b610145610140366004610e4d565b610395565b005b60608060608060608060007f00000000000000000000000000000000000000000000000000000000000010006001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d49190610e71565b8a10156101f457604051630eae4c9760e01b815260040160405180910390fd5b6040516350fd736760e01b8152600481018a9052602481018990527f000000000000000000000000520000000000000000000000000000000000002d6001600160a01b0316906350fd7367906044015b600060405180830381865afa158015610261573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102899190810190610efb565b9097509050610298878b610411565b9a9e939d50919b50995097965090945092505050565b60608080808080600089610341577f00000000000000000000000000000000000000000000000000000000000010006001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561031a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033e9190610e71565b99505b60405163085a3a2d60e21b8152600481018a9052602481018990527f00000000000000000000000000000000000000000000000000000000000010016001600160a01b031690632168e8b490604401610244565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000100116146103de57604051630101292160e31b815260040160405180910390fd5b6001600160a01b0381166104055760405163e99d5ac560e01b815260040160405180910390fd5b61040e81610700565b50565b60608060608060606000875190508067ffffffffffffffff81111561043857610438610e8a565b604051908082528060200260200182016040528015610461578160200160208202803683370190505b5095508067ffffffffffffffff81111561047d5761047d610e8a565b6040519080825280602002602001820160405280156104a6578160200160208202803683370190505b5094508067ffffffffffffffff8111156104c2576104c2610e8a565b6040519080825280602002602001820160405280156104eb578160200160208202803683370190505b5093508067ffffffffffffffff81111561050757610507610e8a565b604051908082528060200260200182016040528015610530578160200160208202803683370190505b5092508067ffffffffffffffff81111561054c5761054c610e8a565b604051908082528060200260200182016040528015610575578160200160208202803683370190505b50915060005b818110156106f4577f00000000000000000000000000000000000000000000000000000000000010016001600160a01b031663d1f18ee18a83815181106105c4576105c4610fb5565b60200260200101518a6040518363ffffffff1660e01b81526004016105fe9291906001600160a01b03929092168252602082015260400190565b60a060405180830381865afa15801561061b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063f9190610fe0565b8b868151811061065157610651610fb5565b602002602001018b878151811061066a5761066a610fb5565b602002602001018b888151811061068357610683610fb5565b602002602001018a898151811061069c5761069c610fb5565b602002602001018c8a815181106106b5576106b5610fb5565b60209081029190910101949094529315159092529215159091529115159091526001600160a01b039091169052806106ec81611056565b91505061057b565b50509295509295909350565b60007f00000000000000000000000000000000000000000000000000000000000010006001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610760573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107849190610e71565b90506000610793826001611071565b60405163fcbb371b60e01b8152600481018490529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000001000169063fcbb371b9060240161012060405180830381865afa1580156107ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108239190611089565b60c0015160405163fcbb371b60e01b8152600481018490529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000001000169063fcbb371b9060240161012060405180830381865afa158015610893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b79190611089565b60c00151604080516060810182526001600160a01b0380891680835292516322bc467160e11b81526004810193909352929350600092909160208301917f000000000000000000000000520000000000000000000000000000000000002d16906345788ce290602401602060405180830381865afa15801561093d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109619190611104565b6001600160a01b0390811682526040516355b9f18b60e11b815289821660048201526020909201917f000000000000000000000000520000000000000000000000000000000000002d9091169063ab73e31690602401602060405180830381865afa1580156109d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f89190611104565b6001600160a01b03169052905060005b60038160ff161015610cdf576000828260ff1660038110610a2b57610a2b610fb5565b602002015190506001600160a01b038116610a465750610ccd565b604051632ee462b360e01b81526001600160a01b0382811660048301526024820189905260009187917f00000000000000000000000000000000000000000000000000000000000010011690632ee462b390604401602060405180830381865afa158015610ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adc9190610e71565b101590506000857f00000000000000000000000000000000000000000000000000000000000010016001600160a01b0316632ee462b3858b6040518363ffffffff1660e01b8152600401610b459291906001600160a01b03929092168252602082015260400190565b602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b869190610e71565b101590508180610b935750805b15610c2a57604051630a3b0a4f60e01b81526001600160a01b0384811660048301527f000000000000000000000000520000000000000000000000000000000000002d1690630a3b0a4f906024016020604051808303816000875af1158015610c00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c249190611121565b50610cc9565b81158015610c36575080155b15610cc957604051631484968760e11b81526001600160a01b0384811660048301527f000000000000000000000000520000000000000000000000000000000000002d16906329092d0e906024016020604051808303816000875af1158015610ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc79190611121565b505b5050505b80610cd78161113c565b915050610a08565b50505050505050565b600080600060608486031215610cfd57600080fd5b505081359360208301359350604090920135919050565b600081518084526020808501945080840160005b83811015610d4d5781516001600160a01b031687529582019590820190600101610d28565b509495945050505050565b600081518084526020808501945080840160005b83811015610d4d578151151587529582019590820190600101610d6c565b60e081526000610d9d60e083018a610d14565b602083820381850152610db0828b610d14565b91508382036040850152610dc4828a610d58565b91508382036060850152610dd88289610d58565b8481036080860152875180825282890193509082019060005b81811015610e0d57845183529383019391830191600101610df1565b505084810360a0860152610e218188610d58565b93505050508260c083015298975050505050505050565b6001600160a01b038116811461040e57600080fd5b600060208284031215610e5f57600080fd5b8135610e6a81610e38565b9392505050565b600060208284031215610e8357600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715610ec457610ec4610e8a565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610ef357610ef3610e8a565b604052919050565b60008060408385031215610f0e57600080fd5b825167ffffffffffffffff80821115610f2657600080fd5b818501915085601f830112610f3a57600080fd5b8151602082821115610f4e57610f4e610e8a565b8160051b9250610f5f818401610eca565b8281529284018101928181019089851115610f7957600080fd5b948201945b84861015610fa35785519350610f9384610e38565b8382529482019490820190610f7e565b97909101519698969750505050505050565b634e487b7160e01b600052603260045260246000fd5b80518015158114610fdb57600080fd5b919050565b600080600080600060a08688031215610ff857600080fd5b855161100381610e38565b945061101160208701610fcb565b935061101f60408701610fcb565b925061102d60608701610fcb565b9150608086015190509295509295909350565b634e487b7160e01b600052601160045260246000fd5b600060001982141561106a5761106a611040565b5060010190565b6000821982111561108457611084611040565b500190565b6000610120828403121561109c57600080fd5b6110a4610ea0565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b60006020828403121561111657600080fd5b8151610e6a81610e38565b60006020828403121561113357600080fd5b610e6a82610fcb565b600060ff821660ff81141561115357611153611040565b6001019291505056fea264697066735822122082a01584713028389853236ce27242ae2ad212676d5e675565ce1b9469a72f2f64736f6c634300080c0033`), - }, - { - // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/c40adc981d07ccedd2cf2d3932ea9503761f6191/contracts/StakeManager.sol - contract: stakeManager, - code: mustDecodeCode(`0x6080604052600436106102675760003560e01c806374e2b63c11610144578063cf5c13db116100b6578063e1aca3411161007a578063e1aca34114610850578063f3621e4314610870578063f65a5ed214610890578063f8d6b1ab146108b0578063fa52c7d8146108d0578063ff3d3f601461093f57600080fd5b8063cf5c13db1461074e578063d0051adf1461076e578063d1f18ee11461079f578063dbd61d87146107f7578063df93c8421461081757600080fd5b80639168ae72116101085780639168ae72146106785780639c508219146106ae578063a6a41f44146106ce578063ac7475ed146106ee578063ad71bd361461070e578063cbc0fac61461072e57600080fd5b806374e2b63c146105c75780637b520aa8146105ec5780637befa74f1461062257806388325234146106355780639043150b1461067057600080fd5b80632ee462b3116101dd578063485cc955116101a1578063485cc955146104e65780635c4fc4c5146105065780635d94ccf6146105365780635efc766e146105565780636b2b336914610576578063724319911461059657600080fd5b80632ee462b31461043757806333f32d7814610457578063428e85621461047757806345367f231461049757806346dfce7b146104b757600080fd5b8063195afea11161022f578063195afea11461032b5780631c1b4f3a1461034b5780632168e8b41461036b57806322226367146103995780632b42ed8c146103ce5780632b47da52146103ff57600080fd5b806302fb4d851461026c5780630ddda63c1461028e578063158ef93e146102ae5780631903cf16146102dd578063190b9257146102fd575b600080fd5b34801561027857600080fd5b5061028c610287366004614cb3565b61095f565b005b34801561029a57600080fd5b5061028c6102a9366004614cdf565b610b65565b3480156102ba57600080fd5b506000546102c89060ff1681565b60405190151581526020015b60405180910390f35b3480156102e957600080fd5b5061028c6102f8366004614d8a565b610d70565b34801561030957600080fd5b5061031d610318366004614cdf565b610f69565b6040519081526020016102d4565b34801561033757600080fd5b5061031d610346366004614cb3565b610f8a565b34801561035757600080fd5b5061031d610366366004614cdf565b610fc1565b34801561037757600080fd5b5061038b610386366004614e34565b610fd1565b6040516102d4929190614e9a565b3480156103a557600080fd5b506103b96103b4366004614cb3565b6110b7565b604080519283526020830191909152016102d4565b3480156103da57600080fd5b506103ee6103e9366004614ebc565b611185565b6040516102d4959493929190614f27565b34801561040b57600080fd5b5060015461041f906001600160a01b031681565b6040516001600160a01b0390911681526020016102d4565b34801561044357600080fd5b5061031d610452366004614cb3565b6114d2565b34801561046357600080fd5b5061031d610472366004614f87565b611585565b34801561048357600080fd5b5061028c610492366004614d8a565b611744565b3480156104a357600080fd5b5061031d6104b2366004614cdf565b61193d565b3480156104c357600080fd5b506104d76104d2366004614ebc565b6119d3565b6040516102d493929190615026565b3480156104f257600080fd5b5061028c61050136600461505c565b611c30565b34801561051257600080fd5b50610526610521366004614cb3565b611caf565b6040516102d494939291906150cd565b34801561054257600080fd5b5061028c610551366004614cdf565b611d7b565b34801561056257600080fd5b5061041f610571366004614cdf565b611e85565b34801561058257600080fd5b5061028c6105913660046150f8565b611eaf565b3480156105a257600080fd5b506105b66105b1366004615115565b611fa8565b6040516102d4959493929190615173565b3480156105d357600080fd5b5060005461041f9061010090046001600160a01b031681565b3480156105f857600080fd5b5061041f6106073660046150f8565b6006602052600090815260409020546001600160a01b031681565b61028c6106303660046151c0565b612048565b34801561064157600080fd5b506106556106503660046150f8565b612213565b604080519384526020840192909252908201526060016102d4565b61028c612293565b34801561068457600080fd5b5061041f6106933660046150f8565b6007602052600090815260409020546001600160a01b031681565b3480156106ba57600080fd5b5061031d6106c9366004614cb3565b6122c8565b3480156106da57600080fd5b5060095461041f906001600160a01b031681565b3480156106fa57600080fd5b5061028c6107093660046150f8565b6123a4565b34801561071a57600080fd5b5061038b610729366004614e34565b6124aa565b34801561073a57600080fd5b5061028c610749366004614cb3565b612588565b34801561075a57600080fd5b5061028c610769366004614cb3565b612630565b34801561077a57600080fd5b5061078e610789366004615205565b61282f565b6040516102d495949392919061523a565b3480156107ab57600080fd5b506107bf6107ba366004614cb3565b612ae7565b604080516001600160a01b0390961686529315156020860152911515928401929092529015156060830152608082015260a0016102d4565b34801561080357600080fd5b5061031d6108123660046152a3565b612c61565b34801561082357600080fd5b5061031d6108323660046150f8565b6001600160a01b031660009081526007602052604090206006015490565b34801561085c57600080fd5b5061028c61086b3660046151c0565b612ca7565b34801561087c57600080fd5b5061028c61088b3660046152a3565b612cc0565b34801561089c57600080fd5b5061041f6108ab366004614cdf565b612dcc565b3480156108bc57600080fd5b5061028c6108cb3660046150f8565b612ddc565b3480156108dc57600080fd5b506109196108eb3660046150f8565b6004602052600090815260409020805460018201546006909201546001600160a01b03918216929091169083565b604080516001600160a01b039485168152939092166020840152908201526060016102d4565b34801561094b57600080fd5b5061028c61095a3660046151c0565b612e3e565b6001600160a01b0380831660009081526006602090815260408083205484168084526004909252909120549091166109aa576040516372898ae960e11b815260040160405180910390fd5b3341146109ca57604051631cf4735960e01b815260040160405180910390fd5b6001600160a01b038084166000908152600660209081526040808320548416835260049182905280832083548251633fa4f24560e01b815292519195610add946101009092041692633fa4f2459281830192610120928290030181865afa158015610a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5d91906152d3565b600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad4919061534e565b8491908761317e565b82546040519192506001600160a01b0316907f1647efd0ce9727dc31dc201c9d8d35ac687f7370adcacbd454afc6485ddabfda90600090a28015610b5e5781546040518281526001600160a01b03909116907feb7d7a49847ec491969db21a0e31b234565a9923145a2d1b56a75c9e95825802906020015b60405180910390a25b5050505050565b336000818152600460205260409020546001600160a01b0316610b9b576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316610bd15760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c48919061537c565b15610c6657604051631e59ccd960e01b815260040160405180910390fd5b60008054338252600460205260408220610c8e9161010090046001600160a01b03168661325d565b905080610cae57604051637bc90c0560e11b815260040160405180910390fd5b610d323333600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a919061534e565b60008561327d565b604051818152339081907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba1043836906020015b60405180910390a350505050565b6001600160a01b03828116600090815260046020526040902080548492163314801590610daa575060018101546001600160a01b03163314155b15610dc857604051630101292160e31b815260040160405180910390fd5b6001600160a01b03808516600090815260046020526040902054859116610e02576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e79919061537c565b15610e9757604051631e59ccd960e01b815260040160405180910390fd5b610f30600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f11919061534e565b6001600160a01b03871660009081526004602052604090209086613392565b846001600160a01b03167fc11dfc9c24621433bb10587dc4bbae26a33a4aff53914e0d4c9fddf224a8cb7d85604051610b559190615397565b60028181548110610f7957600080fd5b600091825260209091200154905081565b600080546001600160a01b038481168352600460205260408320610fb792909161010090910416846133a4565b5090505b92915050565b60038181548110610f7957600080fd5b60606000610fe58484600580549050613537565b9093509050826001600160401b0381111561100257611002614cf8565b60405190808252806020026020018201604052801561102b578160200160208202803683370190505b50915060005b838110156110af57600561104582876153c0565b81548110611055576110556153d8565b9060005260206000200160009054906101000a90046001600160a01b0316838281518110611085576110856153d8565b6001600160a01b0390921660209283029190910190910152806110a7816153ee565b915050611031565b509250929050565b60008061117a6000841161114157600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113c919061534e565b611143565b835b6001600160a01b038616600090815260046020908152604080832093835260098401825280832054600a9094019091529020549091565b909590945092505050565b6001600160a01b03841660009081526007602052604081206060918291829182918861122757600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611222919061534e565b611229565b885b985061123b8888600580549050613537565b9097509150866001600160401b0381111561125857611258614cf8565b604051908082528060200260200182016040528015611281578160200160208202803683370190505b509550866001600160401b0381111561129c5761129c614cf8565b6040519080825280602002602001820160405280156112c5578160200160208202803683370190505b509450866001600160401b038111156112e0576112e0614cf8565b604051908082528060200260200182016040528015611309578160200160208202803683370190505b509350866001600160401b0381111561132457611324614cf8565b60405190808252806020026020018201604052801561134d578160200160208202803683370190505b50925060005b878110156114c5576005611367828b6153c0565b81548110611377576113776153d8565b9060005260206000200160009054906101000a90046001600160a01b03168782815181106113a7576113a76153d8565b60200260200101906001600160a01b031690816001600160a01b0316815250506113f88782815181106113dc576113dc6153d8565b602002602001015160008c8561356e909392919063ffffffff16565b86828151811061140a5761140a6153d8565b60200260200101818152505061144787828151811061142b5761142b6153d8565b602002602001015160018c8561356e909392919063ffffffff16565b858281518110611459576114596153d8565b60200260200101818152505061149687828151811061147a5761147a6153d8565b602002602001015160028c8561356e909392919063ffffffff16565b8482815181106114a8576114a86153d8565b6020908102919091010152806114bd816153ee565b915050611353565b5050945094509450945094565b600080821161155757600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561152e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611552919061534e565b611559565b815b6001600160a01b038416600090815260046020526040902090925061157e908361362d565b9392505050565b600080600183600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611602919061534e565b61160c9190615409565b6116169190615409565b845190915060005b8481101561173b576116316001846153c0565b6000805460405163fcbb371b60e01b81526004810184905292955090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015611685573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a991906152d3565b905060005b83811015611726576117088286600460008c86815181106116d1576116d16153d8565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206136409092919063ffffffff16565b61171290876153c0565b95508061171e816153ee565b9150506116ae565b50508080611733906153ee565b91505061161e565b50505092915050565b6001600160a01b0382811660009081526004602052604090208054849216331480159061177e575060018101546001600160a01b03163314155b1561179c57604051630101292160e31b815260040160405180910390fd5b6001600160a01b038085166000908152600460205260409020548591166117d6576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015611829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184d919061537c565b1561186b57604051631e59ccd960e01b815260040160405180910390fd5b611904600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e5919061534e565b6001600160a01b038716600090815260046020526040902090866137ad565b846001600160a01b03167f0ad9bf1b8c026a174a2f30954417002a6ea00c9b08c1b8846c7951c687be809585604051610b559190615397565b60008082116119c257600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bd919061534e565b6119c4565b815b9150610fbb60026003846137ba565b6001600160a01b0384166000908152600460205260408120606091829186611a7157600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6c919061534e565b611a73565b865b9650611a8786868360070180549050613537565b9095509150846001600160401b03811115611aa457611aa4614cf8565b604051908082528060200260200182016040528015611acd578160200160208202803683370190505b509350846001600160401b03811115611ae857611ae8614cf8565b604051908082528060200260200182016040528015611b11578160200160208202803683370190505b50925060005b85811015611c24576000600781848201611b31858c6153c0565b81548110611b4157611b416153d8565b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190208054885191935090911690879084908110611b8757611b876153d8565b6001600160a01b0392831660209182029290920101528354611bae9183911660028c61356e565b8354611bc79083906001600160a01b031660018d61356e565b8454611be09084906001600160a01b031660008e61356e565b611bea91906153c0565b611bf491906153c0565b858381518110611c0657611c066153d8565b60209081029190910101525080611c1c816153ee565b915050611b17565b50509450945094915050565b334114611c5057604051631cf4735960e01b815260040160405180910390fd5b60005460ff1615611c735760405162dc149f60e41b815260040160405180910390fd5b6000805460016001600160a81b03199091166101006001600160a01b039586160217811790915580546001600160a01b03191691909216179055565b6001600160a01b03821660009081526007602052604081206006018054829182918291829187908110611ce457611ce46153d8565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115611d1757611d17615095565b6002811115611d2857611d28615095565b81526020016001820154815260200160028201548152505090508060000151816020015182604001518360400151600014158015611d6a575083604001514210155b929a91995097509095509350505050565b336000818152600760205260409020546001600160a01b0316611db15760405163cf83d93d60e01b815260040160405180910390fd5b336000908152600760205260408120600601805484908110611dd557611dd56153d8565b9060005260206000209060030201905060008160020154905080421015611e0f576040516303cb96db60e21b815260040160405180910390fd5b80611e2d57604051630c8d9eab60e31b815260040160405180910390fd5b6000600283015560405184815233907fbf5f92dc2b945251eadf78c2ca629ae64053d979bfbc43a7b17a463707906bf99060200160405180910390a281546001830154611e7f9160ff169033906138d3565b50505050565b60058181548110611e9557600080fd5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b0381811660009081526006602052604090205433911615611eea5760405163055ee1f160e31b815260040160405180910390fd5b6001600160a01b0381166000908152600460205260409020611f0c90836139f2565b60058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b038381166001600160a01b03199283168117909355841660009081526006602090815260409182902080549093168417909255519182527fd5828184f48f65962d10eac907318df85953d4e3542a0f09b5932ee3fe398bdd910160405180910390a15050565b600954604051632d73a02f60e01b81526004810185905260248101849052604481018390526060918291829182916000916001600160a01b031690632d73a02f90606401600060405180830381865afa158015612009573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612031919081019061554c565b959e949d50909b5099509297509095505050505050565b6001600160a01b03808416600090815260046020526040902054849116612082576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f9919061537c565b1561211757604051631e59ccd960e01b815260040160405180910390fd5b8161213557604051637bc90c0560e11b815260040160405180910390fd5b612140833384613a34565b6121ce3385600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bc919061534e565b6121c79060016153c0565b868661327d565b836001600160a01b0316336001600160a01b03167f8fc656e319452025372383dc27d933046d412b8253de50a10739eeaa59862be68585604051610d6292919061564b565b6001600160a01b0380821660009081526007602052604081208154919283928392916122489183916101009091041684613ad5565b60005490945061226990829061010090046001600160a01b03166001613ad5565b60005490935061228a90829061010090046001600160a01b03166002613ad5565b93959294505050565b6040513481527f1de49774d094a85fc1bbbd16e8d09a865fb848218f41e2da4369f528c42ee42e9060200160405180910390a1565b6001600160a01b03808316600081815260066020908152604080832054851683526004909152812060018101549193909291161461230a576000915050610fbb565b6000831161238e57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612365573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612389919061534e565b612390565b825b925061239c818461362d565b949350505050565b336000818152600460205260409020546001600160a01b03166123da576040516372898ae960e11b815260040160405180910390fd5b6001600160a01b03828116600090815260066020526040902054339116156124155760405163055ee1f160e31b815260040160405180910390fd5b6001600160a01b03808216600090815260046020526040902060018101549091166124408286613cfb565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916888616908117909155825194861685529084019290925290917f758820d0b14a01c1fa60b8d2bbef25ed1b6a5af4802e5dec3f08679255ba8bf39101610b55565b606060006124be8484600880549050613537565b9093509050826001600160401b038111156124db576124db614cf8565b604051908082528060200260200182016040528015612504578160200160208202803683370190505b50915060005b838110156110af57600861251e82876153c0565b8154811061252e5761252e6153d8565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061255e5761255e6153d8565b6001600160a01b039092166020928302919091019091015280612580816153ee565b91505061250a565b336000818152600460205260409020546001600160a01b03166125be576040516372898ae960e11b815260040160405180910390fd5b600080543382526004602052604082206125e69161010090046001600160a01b03168561325d565b60405181815290915033907f882d5671e5b36af50883197c33d48ba56ce337589958e871ba82fb0a54adf3e89060200160405180910390a28015611e7f57611e7f600033836138d3565b6001600160a01b0380831660009081526004602052604090205483911661266a576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166126a05760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612717919061537c565b1561273557604051631e59ccd960e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420612770939092610100909104169087613d75565b90508061279057604051637bc90c0560e11b815260040160405180910390fd5b6127e83386600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d06573d6000803e3d6000fd5b6040518181526001600160a01b0386169033907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba10438369060200160405180910390a35050505050565b6001600160a01b0383166000908152600760205260408120600681015460609283928392839291906128649089908990613537565b9097509150866001600160401b0381111561288157612881614cf8565b6040519080825280602002602001820160405280156128aa578160200160208202803683370190505b509550866001600160401b038111156128c5576128c5614cf8565b6040519080825280602002602001820160405280156128ee578160200160208202803683370190505b509450866001600160401b0381111561290957612909614cf8565b604051908082528060200260200182016040528015612932578160200160208202803683370190505b509350866001600160401b0381111561294d5761294d614cf8565b604051908082528060200260200182016040528015612976578160200160208202803683370190505b50925060005b87811015612ada57600060068301612994838c6153c0565b815481106129a4576129a46153d8565b6000918252602090912060408051606081019091526003909202018054829060ff1660028111156129d7576129d7615095565b60028111156129e8576129e8615095565b81526020016001820154815260200160028201548152505090508060000151888381518110612a1957612a196153d8565b60200260200101906002811115612a3257612a32615095565b90816002811115612a4557612a45615095565b815250508060200151878381518110612a6057612a606153d8565b6020026020010181815250508060400151868381518110612a8357612a836153d8565b6020908102919091010152604081015115801590612aa5575080604001514210155b858381518110612ab757612ab76153d8565b911515602092830291909101909101525080612ad2816153ee565b91505061297c565b5050939792965093509350565b60008080808085612b6c57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b69919061534e565b95505b6001600160a01b03878116600090815260046020908152604080832060018101548b855260028201909352922054921696509060ff1660008881526003830160205260409020549015955060ff169350612bc6818861362d565b9150848015612bd3575083155b8015612c54575060005460405163fcbb371b60e01b8152600481018990526101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015612c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4c91906152d3565b60c001518210155b9250509295509295909350565b600080546001600160a01b038481168352600460209081526040808520888416865260079092528420612c9e939092610100909104169085613dae565b50949350505050565b604051634ee5a1b960e01b815260040160405180910390fd5b6001600160a01b03808316600090815260046020526040902054839116612cfa576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316612d305760405163cf83d93d60e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420612d6b939092610100909104169087613d75565b604080516001600160a01b03881681526020810183905291925033917f2ef606d064225d24c1514dc94907c134faee1237445c2f63f410cce0852b2054910160405180910390a28015612dc457612dc4600033836138d3565b505050505050565b60088181548110611e9557600080fd5b336000818152600760205260409020546001600160a01b0316612e125760405163cf83d93d60e01b815260040160405180910390fd5b6000805433825260076020526040909120612e3a9161010090046001600160a01b0316613fb8565b5050565b6001600160a01b03808416600090815260046020526040902054849116612e78576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316612eae5760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f25919061537c565b15612f4357604051631e59ccd960e01b815260040160405180910390fd5b33600090815260076020908152604080832083546001600160a01b038a81168652600490945291909320612f81928492610100900416908888613fdc565b935083612fa157604051637bc90c0560e11b815260040160405180910390fd5b806006016040518060600160405280876002811115612fc257612fc2615095565b815260208101879052604001612fdb42620d2f006153c0565b9052815460018181018455600093845260209093208251600390920201805492939092839160ff199091169083600281111561301957613019615095565b0217905550602082015181600101556040820151816002015550506130c56003600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561308c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b0919061534e565b6130bb9060016153c0565b6002919087614112565b50600954604051635692619d60e11b81526001600160a01b0388811660048301529091169063ad24c33a90602401600060405180830381600087803b15801561310d57600080fd5b505af1158015613121573d6000803e3d6000fd5b50505060068201546001600160a01b038816915033907fb649014faa7a0e23357e091fb8a67a128c33dc9480f846f7e41cb3a6c9d806109061316590600190615409565b60405190815260200160405180910390a3505050505050565b60008281526009850160205260408120546131a757600083815260098601602052604090208290555b6000838152600a860160205260408120546131c39060016153c0565b6000858152600a88016020526040902081905560e0860151909150811080159061320f57506003860160006131f98660016153c0565b815260208101919091526040016000205460ff16155b15612c9e5761010085015161322490856153c0565b91505b81841015612c9e5783613239816153ee565b60008181526003890160205260409020805460ff1916600117905594506132279050565b600080600061326d8686866133a4565b6006880155925050509392505050565b6001600160a01b03808616600090815260076020526040902080549091166132f65780546001600160a01b0387166001600160a01b031991821681178355600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180549092161790555b6001600160a01b038516600090815260046020526040902061331d908290869086866141ed565b61332b6002600386856142b5565b600954604051635692619d60e11b81526001600160a01b0387811660048301529091169063ad24c33a90602401600060405180830381600087803b15801561337257600080fd5b505af1158015613386573d6000803e3d6000fd5b50505050505050505050565b61339f838383600061439b565b505050565b6000808460060154905060006001856001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613414919061534e565b61341e9190615409565b905083158061343557508061343383866153c0565b115b15613447576134448282615409565b93505b60005b8481101561352d5761345d6001846153c0565b60405163fcbb371b60e01b8152600481018290529093506000906001600160a01b0388169063fcbb371b9060240161012060405180830381865afa1580156134a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134cd91906152d3565b905060006134dc898387613640565b9050806134ea57505061351b565b60a08201516134fa57505061351b565b61350c818360a0015160646019614421565b61351690876153c0565b955050505b80613525816153ee565b91505061344a565b5050935093915050565b6000808261354585876153c0565b10613557576135548584615409565b93505b8361356281876153c0565b91509150935093915050565b600061362485600201600085600281111561358b5761358b615095565b600281111561359c5761359c615095565b81526020019081526020016000206000866001600160a01b03166001600160a01b03168152602001908152602001600020838760010160008760028111156135e6576135e6615095565b60028111156135f7576135f7615095565b8152602080820192909252604090810160009081206001600160a01b038b168252909252902091906137ba565b95945050505050565b600061157e6004840160058501846137ba565b600081815260028401602052604081205460ff168061366f5750600082815260038501602052604090205460ff165b1561367c5750600061157e565b6000613688858461362d565b9050604983106136c9578360c001518110156136a857600091505061157e565b629896806136b882610a34615666565b6136c29190615685565b9150613762565b806136d857600091505061157e565b6136e46019600a615783565b6136f585608001516064601961444d565b6136ff9083615666565b6137099190615685565b91508161371a57600091505061157e565b61373d846060015185604001516137319190615666565b6301e13380601961444d565b6137479083615666565b91506137556019600a615783565b61375f9083615685565b91505b6000838152600a8601602052604090205480156137a45760008481526009870160205260409020546137a0846137988484615409565b836019614421565b9350505b50509392505050565b61339f838383600161439b565b82546000908015806137e8575082856000815481106137db576137db6153d8565b9060005260206000200154115b156137f757600091505061157e565b8285613804600184615409565b81548110613814576138146153d8565b9060005260206000200154116138535783613830600183615409565b81548110613840576138406153d8565b906000526020600020015491505061157e565b6001811180156138895750828561386b600284615409565b8154811061387b5761387b6153d8565b906000526020600020015411155b1561389a5783613830600283615409565b60006138a98685600085614489565b90508481815481106138bd576138bd6153d8565b9060005260206000200154925050509392505050565b6000808460028111156138e8576138e8615095565b1415613947576040516001600160a01b038416908390600081818185875af1925050503d8060008114613937576040519150601f19603f3d011682016040523d82523d6000602084013e61393c565b606091505b5050809150506139c9565b61395084614531565b60405163a9059cbb60e01b81526001600160a01b03858116600483015260248201859052919091169063a9059cbb906044015b6020604051808303816000875af11580156139a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139c6919061537c565b90505b80611e7f5783604051630db5347560e11b81526004016139e9919061578f565b60405180910390fd5b81546001600160a01b031615613a1a57604051621d934160e11b815260040160405180910390fd5b81546001600160a01b03191633178255612e3a8282613cfb565b6000836002811115613a4857613a48615095565b1415613a6e5780341461339f57604051630fe5b06560e11b815260040160405180910390fd5b3415613a8d5760405163a745ac8560e01b815260040160405180910390fd5b6000613a9884614531565b6040516323b872dd60e01b81526001600160a01b0385811660048301523060248301526044820185905291909116906323b872dd90606401613983565b600080846003016000846002811115613af057613af0615095565b6002811115613b0157613b01615095565b8152602081019190915260400160002054905080613b2357600091505061157e565b6000846001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b87919061534e565b90506000613b96600184615409565b9050600081118015613bf9575081876003016000876002811115613bbc57613bbc615095565b6002811115613bcd57613bcd615095565b81526020019081526020016000208281548110613bec57613bec6153d8565b9060005260206000200154115b15613c0c5780613c088161579d565b9150505b81876003016000876002811115613c2557613c25615095565b6002811115613c3657613c36615095565b81526020019081526020016000208281548110613c5557613c556153d8565b90600052602060002001541115613c72576000935050505061157e565b6000805b828111613cef57886004016000886002811115613c9557613c95615095565b6002811115613ca657613ca6615095565b81526020019081526020016000208181548110613cc557613cc56153d8565b906000526020600020015482613cdb91906153c0565b915080613ce7816153ee565b915050613c76565b50979650505050505050565b6001600160a01b038116613d2257604051637138356f60e01b815260040160405180910390fd5b81546001600160a01b0382811691161415613d505760405163e037058f60e01b815260040160405180910390fd5b60019190910180546001600160a01b0319166001600160a01b03909216919091179055565b6000806000613d8687878787613dae565b86546001600160a01b0316600090815260058a01602052604090205592505050949350505050565b81546001600160a01b039081166000908152600586016020908152604080832054815163900cf0cf60e01b81529151939490938593600193928a169263900cf0cf92600480830193928290030181865afa158015613e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e34919061534e565b613e3e9190615409565b9050831580613e55575080613e5383866153c0565b115b15613e6757613e648282615409565b93505b60005b84811015613fad57613e7d6001846153c0565b8654909350600090613e9c908a906001600160a01b031660028761356e565b8754613eb5908b906001600160a01b031660018861356e565b8854613ece908c906001600160a01b031660008961356e565b613ed891906153c0565b613ee291906153c0565b905080613eef5750613f9b565b60405163fcbb371b60e01b815260048101859052600090613f68906001600160a01b038b169063fcbb371b9060240161012060405180830381865afa158015613f3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f6091906152d3565b89908761459c565b905080613f76575050613f9b565b613f8c8183613f858b8961362d565b6019614421565b613f9690876153c0565b955050505b80613fa5816153ee565b915050613e6a565b505094509492505050565b613fc4828260016145e7565b613fd0828260026145e7565b612e3a828260006145e7565b60006140f8866002016000856002811115613ff957613ff9615095565b600281111561400a5761400a615095565b81526020808201929092526040908101600090812088546001600160a01b03908116835290845290829020825163900cf0cf60e01b815292519093918a169263900cf0cf9260048083019391928290030181865afa158015614070573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614094919061534e565b61409f9060016153c0565b848960010160008860028111156140b8576140b8615095565b60028111156140c9576140c9615095565b8152602080820192909252604090810160009081208b546001600160a01b031682529092529020929190614112565b91508161410757506000613624565b612c9e84868461490d565b835460009080158061414957508561412b600183615409565b8154811061413b5761413b6153d8565b906000526020600020015484105b1561416757604051630eae4c9760e01b815260040160405180910390fd5b600061417487878761498d565b9050600086828154811061418a5761418a6153d8565b90600052602060002001549050808511156141a557806141a7565b845b945084156141e157848783815481106141c2576141c26153d8565b9060005260206000200160008282546141db9190615409565b90915550505b50929695505050505050565b61429c85600201600084600281111561420857614208615095565b600281111561421957614219615095565b81526020808201929092526040908101600090812087546001600160a01b031682529092528120908690849060018a019087600281111561425c5761425c615095565b600281111561426d5761426d615095565b8152602080820192909252604090810160009081208a546001600160a01b0316825290925290209291906142b5565b8454610b5e90849086906001600160a01b031684614b9d565b83546001811180156142ec5750846142ce600183615409565b815481106142de576142de6153d8565b906000526020600020015483105b801561431d5750846142ff600283615409565b8154811061430f5761430f6153d8565b906000526020600020015483105b1561433b57604051630eae4c9760e01b815260040160405180910390fd5b600061434886868661498d565b8654925090505b81811015612dc4578285828154811061436a5761436a6153d8565b90600052602060002001600082825461438391906153c0565b90915550819050614393816153ee565b91505061434f565b815160005b81811015612dc45760008482815181106143bc576143bc6153d8565b6020026020010151905085811180156143ec5750600081815260028801602052604090205460ff16151584151514155b1561440e5760008181526002880160205260409020805460ff19168515151790555b5080614419816153ee565b9150506143a0565b600061442e82600a615783565b61443985858561444d565b6144439087615666565b6136249190615685565b60008061445b8360016153c0565b61446690600a615783565b6144709086615666565b9050600a61447e8583615685565b6144439060056153c0565b6000818314156144a55761449e600183615409565b905061239c565b600060026144b384866153c0565b6144bd9190615685565b9050848682815481106144d2576144d26153d8565b906000526020600020015411156144f7576144ef86868684614489565b91505061239c565b8486828154811061450a5761450a6153d8565b90600052602060002001541015613624576144ef868661452b8460016153c0565b86614489565b6000600182600281111561454757614547615095565b141561455b57506001602960991b01919050565b600282600281111561456f5761456f615095565b141561458357506002602960991b01919050565b604051638698bf3760e01b815260040160405180910390fd5b6000806145aa858585613640565b9050806145bb57600091505061157e565b60a08401516145cb57905061157e565b6145dd818560a0015160646019614421565b6136249082615409565b60006145f4848484613ad5565b9050806146015750505050565b600084600301600084600281111561461b5761461b615095565b600281111561462c5761462c615095565b8152602001908152602001600020805490509050836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561467e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146a2919061534e565b8560030160008560028111156146ba576146ba615095565b60028111156146cb576146cb615095565b81526020019081526020016000206001836146e69190615409565b815481106146f6576146f66153d8565b9060005260206000200154116147915784600301600084600281111561471e5761471e615095565b600281111561472f5761472f615095565b815260200190815260200160002060006147499190614c1d565b84600401600084600281111561476157614761615095565b600281111561477257614772615095565b8152602001908152602001600020600061478c9190614c1d565b6148f6565b60405180602001604052808660030160008660028111156147b4576147b4615095565b60028111156147c5576147c5615095565b81526020019081526020016000206001846147e09190615409565b815481106147f0576147f06153d8565b906000526020600020015481525085600301600085600281111561481657614816615095565b600281111561482757614827615095565b81526020810191909152604001600020614842916001614c3e565b50604051806020016040528086600401600086600281111561486657614866615095565b600281111561487757614877615095565b81526020019081526020016000206001846148929190615409565b815481106148a2576148a26153d8565b90600052602060002001548152508560040160008560028111156148c8576148c8615095565b60028111156148d9576148d9615095565b815260208101919091526040016000206148f4916001614c3e565b505b8454610b5e9084906001600160a01b0316846138d3565b611e7f83600501836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614952573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614976919061534e565b6149819060016153c0565b60048601919084614112565b8254600090806149c857505082546001818101855560008581526020808220909301849055845491820185558481529182200181905561157e565b60006149d5600183615409565b905060008682815481106149eb576149eb6153d8565b9060005260206000200154905080851415614a0a5750915061157e9050565b80851115614a725786546001810188556000888152602090200185905585548690819084908110614a3d57614a3d6153d8565b6000918252602080832090910154835460018181018655948452919092200155614a689083906153c0565b935050505061157e565b600082118015614aa7575086614a89600184615409565b81548110614a9957614a996153d8565b906000526020600020015485145b15614ab757614a68600183615409565b86878381548110614aca57614aca6153d8565b6000918252602080832090910154835460018101855593835291209091015585548690819084908110614aff57614aff6153d8565b6000918252602080832090910154835460018101855593835291209091015586548590889084908110614b3457614b346153d8565b6000918252602090912001558115614b725785614b52600184615409565b81548110614b6257614b626153d8565b9060005260206000200154614b75565b60005b868381548110614b8757614b876153d8565b60009182526020909120015550915061157e9050565b6001600160a01b038216600090815260088501602052604090205460ff16614c0b576001600160a01b038216600081815260088601602090815260408220805460ff191660019081179091556007880180549182018155835291200180546001600160a01b03191690911790555b611e7f600485016005860185846142b5565b5080546000825590600052602060002090810190614c3b9190614c89565b50565b828054828255906000526020600020908101928215614c79579160200282015b82811115614c79578251825591602001919060010190614c5e565b50614c85929150614c89565b5090565b5b80821115614c855760008155600101614c8a565b6001600160a01b0381168114614c3b57600080fd5b60008060408385031215614cc657600080fd5b8235614cd181614c9e565b946020939093013593505050565b600060208284031215614cf157600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715614d3157614d31614cf8565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614d5f57614d5f614cf8565b604052919050565b60006001600160401b03821115614d8057614d80614cf8565b5060051b60200190565b60008060408385031215614d9d57600080fd5b8235614da881614c9e565b91506020838101356001600160401b03811115614dc457600080fd5b8401601f81018613614dd557600080fd5b8035614de8614de382614d67565b614d37565b81815260059190911b82018301908381019088831115614e0757600080fd5b928401925b82841015614e2557833582529284019290840190614e0c565b80955050505050509250929050565b60008060408385031215614e4757600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015614e8f5781516001600160a01b031687529582019590820190600101614e6a565b509495945050505050565b604081526000614ead6040830185614e56565b90508260208301529392505050565b60008060008060808587031215614ed257600080fd5b8435614edd81614c9e565b966020860135965060408601359560600135945092505050565b600081518084526020808501945080840160005b83811015614e8f57815187529582019590820190600101614f0b565b60a081526000614f3a60a0830188614e56565b8281036020840152614f4c8188614ef7565b90508281036040840152614f608187614ef7565b90508281036060840152614f748186614ef7565b9150508260808301529695505050505050565b60008060408385031215614f9a57600080fd5b82356001600160401b03811115614fb057600080fd5b8301601f81018513614fc157600080fd5b80356020614fd1614de383614d67565b82815260059290921b83018101918181019088841115614ff057600080fd5b938201935b8385101561501757843561500881614c9e565b82529382019390820190614ff5565b98969091013596505050505050565b6060815260006150396060830186614e56565b828103602084015261504b8186614ef7565b915050826040830152949350505050565b6000806040838503121561506f57600080fd5b823561507a81614c9e565b9150602083013561508a81614c9e565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b600381106150c957634e487b7160e01b600052602160045260246000fd5b9052565b608081016150db82876150ab565b846020830152836040830152821515606083015295945050505050565b60006020828403121561510a57600080fd5b813561157e81614c9e565b60008060006060848603121561512a57600080fd5b505081359360208301359350604090920135919050565b600081518084526020808501945080840160005b83811015614e8f578151151587529582019590820190600101615155565b60a08152600061518660a0830188614e56565b82810360208401526151988188614e56565b905082810360408401526151ac8187614ef7565b90508281036060840152614f748186615141565b6000806000606084860312156151d557600080fd5b83356151e081614c9e565b92506020840135600381106151f457600080fd5b929592945050506040919091013590565b60008060006060848603121561521a57600080fd5b833561522581614c9e565b95602085013595506040909401359392505050565b60a0808252865190820181905260009060209060c0840190828a01845b8281101561527a5761526a8483516150ab565b9284019290840190600101615257565b5050508381038285015261528e8189614ef7565b91505082810360408401526151ac8187614ef7565b6000806000606084860312156152b857600080fd5b83356152c381614c9e565b925060208401356151f481614c9e565b600061012082840312156152e657600080fd5b6152ee614d0e565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b60006020828403121561536057600080fd5b5051919050565b8051801515811461537757600080fd5b919050565b60006020828403121561538e57600080fd5b61157e82615367565b60208152600061157e6020830184614ef7565b634e487b7160e01b600052601160045260246000fd5b600082198211156153d3576153d36153aa565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415615402576154026153aa565b5060010190565b60008282101561541b5761541b6153aa565b500390565b600082601f83011261543157600080fd5b81516020615441614de383614d67565b82815260059290921b8401810191818101908684111561546057600080fd5b8286015b8481101561548457805161547781614c9e565b8352918301918301615464565b509695505050505050565b600082601f8301126154a057600080fd5b815160206154b0614de383614d67565b82815260059290921b840181019181810190868411156154cf57600080fd5b8286015b84811015615484576154e481615367565b83529183019183016154d3565b600082601f83011261550257600080fd5b81516020615512614de383614d67565b82815260059290921b8401810191818101908684111561553157600080fd5b8286015b848110156154845780518352918301918301615535565b600080600080600080600060e0888a03121561556757600080fd5b87516001600160401b038082111561557e57600080fd5b61558a8b838c01615420565b985060208a01519150808211156155a057600080fd5b6155ac8b838c01615420565b975060408a01519150808211156155c257600080fd5b6155ce8b838c0161548f565b965060608a01519150808211156155e457600080fd5b6155f08b838c0161548f565b955060808a015191508082111561560657600080fd5b6156128b838c016154f1565b945060a08a015191508082111561562857600080fd5b506156358a828b0161548f565b92505060c0880151905092959891949750929550565b6040810161565982856150ab565b8260208301529392505050565b6000816000190483118215151615615680576156806153aa565b500290565b6000826156a257634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156110af5781600019048211156156c8576156c86153aa565b808516156156d557918102915b93841c93908002906156ac565b6000826156f157506001610fbb565b816156fe57506000610fbb565b8160018114615714576002811461571e5761573a565b6001915050610fbb565b60ff84111561572f5761572f6153aa565b50506001821b610fbb565b5060208310610133831016604e8410600b841016171561575d575081810a610fbb565b61576783836156a7565b806000190482111561577b5761577b6153aa565b029392505050565b600061157e83836156e2565b60208101610fbb82846150ab565b6000816157ac576157ac6153aa565b50600019019056fea264697066735822122011bcd72f29891519cecf669abcb6b18e7aec1f45315d67eb5669e5a2a685d50d64736f6c634300080c0033`), - storage: storage{ - // ICandidateValidatorManager public candidateManager - "0x09": candidateValidatorManager.address, - }, - }, - } - - deployments10 = []*deployment{ - { - // commit: https://github.com/oasysgames/oasys-governance-contract/blob/be1dff6c29cd84c671ab3f4e0cfb811a0e47634f/contracts/PermissionedContractFactory.sol - contract: permissionedContractFactory, - code: mustDecodeCode(`0x6080604052600436106100b25760003560e01c806336568abe1161006f57806336568abe146101e55780634de79ecc1461020557806365ddb0171461021a57806391d148541461022d578063a217fddf1461024d578063d547741f14610262578063da58f37e1461028257600080fd5b806301ffc9a7146100b757806309b1eca6146100ec5780630b19429e14610124578063248a9ca3146101665780632a50c146146101965780632f2ff15d146101c3575b600080fd5b3480156100c357600080fd5b506100d76100d2366004610d98565b6102a2565b60405190151581526020015b60405180910390f35b3480156100f857600080fd5b5061010c610107366004610e65565b6102d9565b6040516001600160a01b0390911681526020016100e3565b34801561013057600080fd5b506101587f0d8b58cba732a42811e1f217ab43cccb14f1a8263ebb61afbf13838fcdae9df981565b6040519081526020016100e3565b34801561017257600080fd5b50610158610181366004610eac565b60009081526020819052604090206001015490565b3480156101a257600080fd5b506101b66101b1366004610edc565b6102f4565b6040516100e39190610f47565b3480156101cf57600080fd5b506101e36101de366004610f8a565b610433565b005b3480156101f157600080fd5b506101e3610200366004610f8a565b61045d565b34801561021157600080fd5b50600154610158565b61010c610228366004610fb6565b6104db565b34801561023957600080fd5b506100d7610248366004610f8a565b610614565b34801561025957600080fd5b50610158600081565b34801561026e57600080fd5b506101e361027d366004610f8a565b61063d565b34801561028e57600080fd5b506101b661029d366004610eac565b610662565b60006001600160e01b03198216637965db0b60e01b14806102d357506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006102ed838380519060200120306107ca565b9392505050565b604080516060808201835260008083526020830152918101919091526001600160a01b0380831660009081526002602081815260409283902083516060810185528154861681526001820154909516918501919091529081018054919284019161035d90611070565b80601f016020809104026020016040519081016040528092919081815260200182805461038990611070565b80156103d65780601f106103ab576101008083540402835291602001916103d6565b820191906000526020600020905b8154815290600101906020018083116103b957829003601f168201915b5050509190925250505060208101519091506001600160a01b031661042e5760405162461bcd60e51b81526020600482015260096024820152681b9bdd08199bdd5b9960ba1b60448201526064015b60405180910390fd5b919050565b60008281526020819052604090206001015461044e816107f4565b6104588383610801565b505050565b6001600160a01b03811633146104cd5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610425565b6104d78282610885565b5050565b60007f0d8b58cba732a42811e1f217ab43cccb14f1a8263ebb61afbf13838fcdae9df9610507816107f4565b8734146105565760405162461bcd60e51b815260206004820152601a60248201527f5043433a20696e636f727265637420616d6f756e742073656e740000000000006044820152606401610425565b6105618888886108ea565b9150846001600160a01b0316826001600160a01b0316146105be5760405162461bcd60e51b81526020600482015260176024820152765043433a20756e6578706563746564206164647265737360481b6044820152606401610425565b7f388d923fb867b31389c9da49a5a9b552bd44cde0717beb38a215d99ef09778db33898989866040516105f59594939291906110aa565b60405180910390a1610609823386866109ea565b509695505050505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600082815260208190526040902060010154610658816107f4565b6104588383610885565b6040805160608082018352600080835260208301529181019190915260015461068c836001611103565b11156106cf5760405162461bcd60e51b8152602060048201526012602482015271696e646578206f7574206f662072616e676560701b6044820152606401610425565b60026000600184815481106106e6576106e6611116565b60009182526020808320909101546001600160a01b0390811684528382019490945260409283019091208251606081018452815485168152600182015490941691840191909152600281018054919284019161074190611070565b80601f016020809104026020016040519081016040528092919081815260200182805461076d90611070565b80156107ba5780601f1061078f576101008083540402835291602001916107ba565b820191906000526020600020905b81548152906001019060200180831161079d57829003601f168201915b5050505050815250509050919050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6107fe8133610b91565b50565b61080b8282610614565b6104d7576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556108413390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61088f8282610614565b156104d7576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008347101561093c5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610425565b815160000361098d5760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610425565b8282516020840186f590506001600160a01b0381166102ed5760405162461bcd60e51b8152602060048201526019602482015278437265617465323a204661696c6564206f6e206465706c6f7960381b6044820152606401610425565b6001600160a01b038481166000908152600260205260409020600101541615610a4a5760405162461bcd60e51b8152602060048201526012602482015271185b1c9958591e481c9959da5cdd195c995960721b6044820152606401610425565b826001600160a01b03167f8d3f2558914d24d1627609279aec4a8b1033bb2e86f4fc8118aba14785e3fc39858484604051610a879392919061112c565b60405180910390a26001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b03868116918217909255604080516060810182529182529185166020808301919091528251601f85018290048202810182018452848152919283019190859085908190840183828082843760009201829052509390945250506001600160a01b03808816825260026020818152604093849020865181549085166001600160a01b031991821617825591870151600182018054919095169216919091179092559184015190925090820190610b8890826111ba565b50505050505050565b610b9b8282610614565b6104d757610ba881610bea565b610bb3836020610bfc565b604051602001610bc492919061127a565b60408051601f198184030181529082905262461bcd60e51b8252610425916004016112e9565b60606102d36001600160a01b03831660145b60606000610c0b8360026112fc565b610c16906002611103565b67ffffffffffffffff811115610c2e57610c2e610dc2565b6040519080825280601f01601f191660200182016040528015610c58576020820181803683370190505b509050600360fc1b81600081518110610c7357610c73611116565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610ca257610ca2611116565b60200101906001600160f81b031916908160001a9053506000610cc68460026112fc565b610cd1906001611103565b90505b6001811115610d49576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610d0557610d05611116565b1a60f81b828281518110610d1b57610d1b611116565b60200101906001600160f81b031916908160001a90535060049490941c93610d4281611313565b9050610cd4565b5083156102ed5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610425565b600060208284031215610daa57600080fd5b81356001600160e01b0319811681146102ed57600080fd5b634e487b7160e01b600052604160045260246000fd5b600082601f830112610de957600080fd5b813567ffffffffffffffff80821115610e0457610e04610dc2565b604051601f8301601f19908116603f01168101908282118183101715610e2c57610e2c610dc2565b81604052838152866020858801011115610e4557600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215610e7857600080fd5b82359150602083013567ffffffffffffffff811115610e9657600080fd5b610ea285828601610dd8565b9150509250929050565b600060208284031215610ebe57600080fd5b5035919050565b80356001600160a01b038116811461042e57600080fd5b600060208284031215610eee57600080fd5b6102ed82610ec5565b60005b83811015610f12578181015183820152602001610efa565b50506000910152565b60008151808452610f33816020860160208601610ef7565b601f01601f19169290920160200192915050565b60208152600060018060a01b03808451166020840152806020850151166040840152506040830151606080840152610f826080840182610f1b565b949350505050565b60008060408385031215610f9d57600080fd5b82359150610fad60208401610ec5565b90509250929050565b60008060008060008060a08789031215610fcf57600080fd5b8635955060208701359450604087013567ffffffffffffffff80821115610ff557600080fd5b6110018a838b01610dd8565b955061100f60608a01610ec5565b9450608089013591508082111561102557600080fd5b818901915089601f83011261103957600080fd5b81358181111561104857600080fd5b8a602082850101111561105a57600080fd5b6020830194508093505050509295509295509295565b600181811c9082168061108457607f821691505b6020821081036110a457634e487b7160e01b600052602260045260246000fd5b50919050565b600060018060a01b03808816835286602084015285604084015260a060608401526110d860a0840186610f1b565b91508084166080840152509695505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102d3576102d36110ed565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b601f82111561045857600081815260208120601f850160051c810160208610156111935750805b601f850160051c820191505b818110156111b25782815560010161119f565b505050505050565b815167ffffffffffffffff8111156111d4576111d4610dc2565b6111e8816111e28454611070565b8461116c565b602080601f83116001811461121d57600084156112055750858301515b600019600386901b1c1916600185901b1785556111b2565b600085815260208120601f198616915b8281101561124c5788860151825594840194600190910190840161122d565b508582101561126a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516112ac816017850160208801610ef7565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516112dd816028840160208801610ef7565b01602801949350505050565b6020815260006102ed6020830184610f1b565b80820281158282048414176102d3576102d36110ed565b600081611322576113226110ed565b50600019019056fea26469706673582212206921a9f7c5bb12866f25cbc8403a852dd261b38e2deb870825f95c96e3b64db864736f6c63430008120033`), - storage: storage{ - // mapping(bytes32 => RoleData) private _roles - "0x00": mapping{ - keyFn: func(key string) common.Hash { - if key == "DEFAULT_ADMIN_ROLE" { - return common.Hash{} - } - return common.BytesToHash(crypto.Keccak256([]byte(key))) - }, - values: map[string]interface{}{ - "DEFAULT_ADMIN_ROLE": structValue{ - // mapping(address => bool) members - { - pos: 0, - value: genesismap{ - params.OasysMainnetGenesisHash: mapping{ - keyFn: addressKeyFn, - values: map[string]interface{}{ - "0xe04EEaCb1f181cD23501f3De39014F4cbb7C1Cd8": "0x1", - }, - }, - params.OasysTestnetGenesisHash: mapping{ - keyFn: addressKeyFn, - values: map[string]interface{}{ - "0xbe32b47A35C31d294B3c58d92ca83876DdC38776": "0x1", - }, - }, - }, - }, - }, - "CONTRACT_CREATOR_ROLE": structValue{ - // mapping(address => bool) members - { - pos: 0, - value: genesismap{ - params.OasysMainnetGenesisHash: mapping{ - keyFn: addressKeyFn, - values: map[string]interface{}{ - "0xc0bACBDA16Bb494d8C5be6DE84540465Fd83333E": "0x1", - }, - }, - params.OasysTestnetGenesisHash: mapping{ - keyFn: addressKeyFn, - values: map[string]interface{}{ - "0xBb5a4FF43683a1281800A6Bc8a94365f055F444F": "0x1", - }, - }, - }, - }, - }, - }, - }, - }, - }, - } - - deployments11 = []*deployment{ - { - // commit: https://github.com/ironbeer/oasys-genesis-contract/blob/4b5025986137ce4453b7e585bfa7bb6ad2a05e25/contracts/Environment.sol - contract: environment, - code: mustDecodeCode(`0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063900cf0cf11610071578063900cf0cf146101b9578063b4c2f727146101cf578063bd4eff19146101e2578063ccfb9935146101f5578063d4a53686146101fd578063fcbb371b1461020557600080fd5b806308a54356146100ae578063158ef93e146100c35780633fa4f245146100e55780634ba7ed391461015a5780635e383d2114610162575b600080fd5b6100c16100bc366004610e82565b610218565b005b6000546100d09060ff1681565b60405190151581526020015b60405180910390f35b6100ed61027e565b6040516100dc9190600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525092915050565b6100d06102f6565b610175610170366004610efd565b610327565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e0830152610100820152610120016100dc565b6101c1610385565b6040519081526020016100dc565b6101c16101dd366004610efd565b61039c565b6100c16101f0366004610e82565b6103bd565b6100ed61047e565b6100d0610563565b6100ed610213366004610efd565b61058e565b33411461023857604051631cf4735960e01b815260040160405180910390fd5b60005460ff161561025b5760405162dc149f60e41b815260040160405180910390fd5b6000805460ff191660019081178255908252602082015261027b8161060c565b50565b610286610dfe565b61028e6108d5565b604080516101208101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152600890910154610100820152919050565b6000806103016108d5565b60038101548154919250906103169043610f2c565b6103209190610f59565b1592915050565b6002818154811061033757600080fd5b90600052602060002090600902016000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080154905089565b60006103976103926108d5565b610907565b905090565b600181815481106103ac57600080fd5b600091825260209091200154905081565b3341146103dd57604051631cf4735960e01b815260040160405180910390fd5b6103e5610563565b1561040357604051631e59ccd960e01b815260040160405180910390fd5b61040b610385565b81602001511161042e57604051630eae4c9760e01b815260040160405180910390fd5b600061043861093b565b905061044681439054111590565b1561045c576104558183610979565b8252610471565b61046e826104686109b1565b90610979565b82525b61047a8261060c565b5050565b610486610dfe565b60006104906108d5565b9050600061049c61093b565b90506000826003015483600101546104b385610907565b6104bd9190610f2c565b6104c8906001610f6d565b6104d29190610f85565b83546104de9190610f6d565b90506104ec82829054111590565b6104f657826104f8565b815b604080516101208101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152600890910154610100820152949350505050565b60008061056e6108d5565b60038101548154919250906105839043610f2c565b610316906001610f6d565b610596610dfe565b6105a36001600284610a04565b604080516101208101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260089091015461010082015292915050565b61061581610aeb565b60015480158061065d575061065d436002610631600185610f2c565b8154811061064157610641610fa4565b906000526020600020906009020161097290919063ffffffff16565b1561081a57506020810180516001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6019190915560028054918201815560005282517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace60099092029182015590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf82015560408201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad082015560608201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad182015560808201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad282015560a08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad382015560c08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad482015560e08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad5820155610100909101517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad690910155565b6020820151600161082b8184610f2c565b8154811061083b5761083b610fa4565b600091825260209091200155816002610855600184610f2c565b8154811061086557610865610fa4565b9060005260206000209060090201600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007015561010082015181600801559050505050565b6000806108e061093b565b90506108ee81439054111590565b6108ff576108fa6109b1565b610901565b805b91505090565b600381015481546000919061091c9043610f2c565b6109269190610fba565b82600101546109359190610f6d565b92915050565b600280546000919061094f90600190610f2c565b8154811061095f5761095f610fa4565b9060005260206000209060090201905090565b9054111590565b60008260030154836001015483602001516109949190610f2c565b61099e9190610f85565b83546109aa9190610f6d565b9392505050565b60025460009060018114156109e85760026000815481106109d4576109d4610fa4565b906000526020600020906009020191505090565b60026109f48183610f2c565b815481106109d4576109d4610fa4565b82546000908285610a16600184610f2c565b81548110610a2657610a26610fa4565b906000526020600020015411610a685783610a42600183610f2c565b81548110610a5257610a52610fa4565b90600052602060002090600902019150506109aa565b600181118015610a9e57508285610a80600284610f2c565b81548110610a9057610a90610fa4565b906000526020600020015411155b15610aaf5783610a42600283610f2c565b6000610abe8685600085610d4b565b9050848181548110610ad257610ad2610fa4565b9060005260206000209060090201925050509392505050565b600181604001511015610b465760405163a1b63ceb60e01b815260206004820152601960248201527f626c6f636b506572696f6420697320746f6f20736d616c6c2e0000000000000060448201526064015b60405180910390fd5b600381606001511015610b9c5760405163a1b63ceb60e01b815260206004820152601960248201527f65706f6368506572696f6420697320746f6f20736d616c6c2e000000000000006044820152606401610b3d565b606481608001511115610bf25760405163a1b63ceb60e01b815260206004820152601860248201527f7265776172645261746520697320746f6f206c617267652e00000000000000006044820152606401610b3d565b60648160a001511115610c485760405163a1b63ceb60e01b815260206004820152601c60248201527f636f6d6d697373696f6e5261746520697320746f6f206c617267652e000000006044820152606401610b3d565b60018160c001511015610c9e5760405163a1b63ceb60e01b815260206004820181905260248201527f76616c696461746f725468726573686f6c6420697320746f6f20736d616c6c2e6044820152606401610b3d565b60018160e001511015610cf45760405163a1b63ceb60e01b815260206004820152601b60248201527f6a61696c5468726573686f6c6420697320746f6f20736d616c6c2e00000000006044820152606401610b3d565b6001816101000151101561027b5760405163a1b63ceb60e01b815260206004820152601860248201527f6a61696c506572696f6420697320746f6f20736d616c6c2e00000000000000006044820152606401610b3d565b600081831415610d6757610d60600183610f2c565b9050610df6565b60006002610d758486610f6d565b610d7f9190610fba565b905084868281548110610d9457610d94610fa4565b90600052602060002001541115610db957610db186868684610d4b565b915050610df6565b84868281548110610dcc57610dcc610fa4565b90600052602060002001541015610df357610db18686610ded846001610f6d565b86610d4b565b90505b949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051610120810167ffffffffffffffff81118282101715610e7c57634e487b7160e01b600052604160045260246000fd5b60405290565b60006101208284031215610e9557600080fd5b610e9d610e4a565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c082015260e083013560e08201526101008084013581830152508091505092915050565b600060208284031215610f0f57600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b600082821015610f3e57610f3e610f16565b500390565b634e487b7160e01b600052601260045260246000fd5b600082610f6857610f68610f43565b500690565b60008219821115610f8057610f80610f16565b500190565b6000816000190483118215151615610f9f57610f9f610f16565b500290565b634e487b7160e01b600052603260045260246000fd5b600082610fc957610fc9610f43565b50049056fea264697066735822122037767202f998a71461c6fd1f440560e015e745ebf87a689f7ca44aa0f1f791e664736f6c634300080c0033`), - }, - { - // commit: https://github.com/ironbeer/oasys-genesis-contract/blob/4b5025986137ce4453b7e585bfa7bb6ad2a05e25/contracts/StakeManager.sol - contract: stakeManager, - code: mustDecodeCode(`0x6080604052600436106102675760003560e01c806374e2b63c11610144578063cf5c13db116100b6578063e1aca3411161007a578063e1aca34114610850578063f3621e4314610870578063f65a5ed214610890578063f8d6b1ab146108b0578063fa52c7d8146108d0578063ff3d3f601461093f57600080fd5b8063cf5c13db1461074e578063d0051adf1461076e578063d1f18ee11461079f578063dbd61d87146107f7578063df93c8421461081757600080fd5b80639168ae72116101085780639168ae72146106785780639c508219146106ae578063a6a41f44146106ce578063ac7475ed146106ee578063ad71bd361461070e578063cbc0fac61461072e57600080fd5b806374e2b63c146105c75780637b520aa8146105ec5780637befa74f1461062257806388325234146106355780639043150b1461067057600080fd5b80632ee462b3116101dd578063485cc955116101a1578063485cc955146104e65780635c4fc4c5146105065780635d94ccf6146105365780635efc766e146105565780636b2b336914610576578063724319911461059657600080fd5b80632ee462b31461043757806333f32d7814610457578063428e85621461047757806345367f231461049757806346dfce7b146104b757600080fd5b8063195afea11161022f578063195afea11461032b5780631c1b4f3a1461034b5780632168e8b41461036b57806322226367146103995780632b42ed8c146103ce5780632b47da52146103ff57600080fd5b806302fb4d851461026c5780630ddda63c1461028e578063158ef93e146102ae5780631903cf16146102dd578063190b9257146102fd575b600080fd5b34801561027857600080fd5b5061028c610287366004614cc8565b61095f565b005b34801561029a57600080fd5b5061028c6102a9366004614cf4565b610b65565b3480156102ba57600080fd5b506000546102c89060ff1681565b60405190151581526020015b60405180910390f35b3480156102e957600080fd5b5061028c6102f8366004614d9f565b610d70565b34801561030957600080fd5b5061031d610318366004614cf4565b610f69565b6040519081526020016102d4565b34801561033757600080fd5b5061031d610346366004614cc8565b610f8a565b34801561035757600080fd5b5061031d610366366004614cf4565b610fc1565b34801561037757600080fd5b5061038b610386366004614e49565b610fd1565b6040516102d4929190614eaf565b3480156103a557600080fd5b506103b96103b4366004614cc8565b6110b7565b604080519283526020830191909152016102d4565b3480156103da57600080fd5b506103ee6103e9366004614ed1565b611185565b6040516102d4959493929190614f3c565b34801561040b57600080fd5b5060015461041f906001600160a01b031681565b6040516001600160a01b0390911681526020016102d4565b34801561044357600080fd5b5061031d610452366004614cc8565b6114d2565b34801561046357600080fd5b5061031d610472366004614f9c565b611585565b34801561048357600080fd5b5061028c610492366004614d9f565b61174b565b3480156104a357600080fd5b5061031d6104b2366004614cf4565b611944565b3480156104c357600080fd5b506104d76104d2366004614ed1565b6119da565b6040516102d49392919061503b565b3480156104f257600080fd5b5061028c610501366004615071565b611c37565b34801561051257600080fd5b50610526610521366004614cc8565b611cb6565b6040516102d494939291906150e2565b34801561054257600080fd5b5061028c610551366004614cf4565b611d82565b34801561056257600080fd5b5061041f610571366004614cf4565b611e8c565b34801561058257600080fd5b5061028c61059136600461510d565b611eb6565b3480156105a257600080fd5b506105b66105b136600461512a565b611faf565b6040516102d4959493929190615188565b3480156105d357600080fd5b5060005461041f9061010090046001600160a01b031681565b3480156105f857600080fd5b5061041f61060736600461510d565b6006602052600090815260409020546001600160a01b031681565b61028c6106303660046151d5565b61204f565b34801561064157600080fd5b5061065561065036600461510d565b61221a565b604080519384526020840192909252908201526060016102d4565b61028c61229a565b34801561068457600080fd5b5061041f61069336600461510d565b6007602052600090815260409020546001600160a01b031681565b3480156106ba57600080fd5b5061031d6106c9366004614cc8565b6122cf565b3480156106da57600080fd5b5060095461041f906001600160a01b031681565b3480156106fa57600080fd5b5061028c61070936600461510d565b6123ab565b34801561071a57600080fd5b5061038b610729366004614e49565b6124b1565b34801561073a57600080fd5b5061028c610749366004614cc8565b61258f565b34801561075a57600080fd5b5061028c610769366004614cc8565b612637565b34801561077a57600080fd5b5061078e61078936600461521a565b612836565b6040516102d495949392919061524f565b3480156107ab57600080fd5b506107bf6107ba366004614cc8565b612aee565b604080516001600160a01b0390961686529315156020860152911515928401929092529015156060830152608082015260a0016102d4565b34801561080357600080fd5b5061031d6108123660046152b8565b612c68565b34801561082357600080fd5b5061031d61083236600461510d565b6001600160a01b031660009081526007602052604090206006015490565b34801561085c57600080fd5b5061028c61086b3660046151d5565b612cae565b34801561087c57600080fd5b5061028c61088b3660046152b8565b612cc7565b34801561089c57600080fd5b5061041f6108ab366004614cf4565b612dd3565b3480156108bc57600080fd5b5061028c6108cb36600461510d565b612de3565b3480156108dc57600080fd5b506109196108eb36600461510d565b6004602052600090815260409020805460018201546006909201546001600160a01b03918216929091169083565b604080516001600160a01b039485168152939092166020840152908201526060016102d4565b34801561094b57600080fd5b5061028c61095a3660046151d5565b612e45565b6001600160a01b0380831660009081526006602090815260408083205484168084526004909252909120549091166109aa576040516372898ae960e11b815260040160405180910390fd5b3341146109ca57604051631cf4735960e01b815260040160405180910390fd5b6001600160a01b038084166000908152600660209081526040808320548416835260049182905280832083548251633fa4f24560e01b815292519195610add946101009092041692633fa4f2459281830192610120928290030181865afa158015610a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5d91906152e8565b600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad49190615363565b84919087613185565b82546040519192506001600160a01b0316907f1647efd0ce9727dc31dc201c9d8d35ac687f7370adcacbd454afc6485ddabfda90600090a28015610b5e5781546040518281526001600160a01b03909116907feb7d7a49847ec491969db21a0e31b234565a9923145a2d1b56a75c9e95825802906020015b60405180910390a25b5050505050565b336000818152600460205260409020546001600160a01b0316610b9b576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316610bd15760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c489190615391565b15610c6657604051631e59ccd960e01b815260040160405180910390fd5b60008054338252600460205260408220610c8e9161010090046001600160a01b031686613264565b905080610cae57604051637bc90c0560e11b815260040160405180910390fd5b610d323333600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a9190615363565b600085613284565b604051818152339081907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba1043836906020015b60405180910390a350505050565b6001600160a01b03828116600090815260046020526040902080548492163314801590610daa575060018101546001600160a01b03163314155b15610dc857604051630101292160e31b815260040160405180910390fd5b6001600160a01b03808516600090815260046020526040902054859116610e02576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e799190615391565b15610e9757604051631e59ccd960e01b815260040160405180910390fd5b610f30600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f119190615363565b6001600160a01b03871660009081526004602052604090209086613399565b846001600160a01b03167fc11dfc9c24621433bb10587dc4bbae26a33a4aff53914e0d4c9fddf224a8cb7d85604051610b5591906153ac565b60028181548110610f7957600080fd5b600091825260209091200154905081565b600080546001600160a01b038481168352600460205260408320610fb792909161010090910416846133ab565b5090505b92915050565b60038181548110610f7957600080fd5b60606000610fe5848460058054905061353f565b9093509050826001600160401b0381111561100257611002614d0d565b60405190808252806020026020018201604052801561102b578160200160208202803683370190505b50915060005b838110156110af57600561104582876153d5565b81548110611055576110556153ed565b9060005260206000200160009054906101000a90046001600160a01b0316838281518110611085576110856153ed565b6001600160a01b0390921660209283029190910190910152806110a781615403565b915050611031565b509250929050565b60008061117a6000841161114157600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113c9190615363565b611143565b835b6001600160a01b038616600090815260046020908152604080832093835260098401825280832054600a9094019091529020549091565b909590945092505050565b6001600160a01b03841660009081526007602052604081206060918291829182918861122757600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112229190615363565b611229565b885b985061123b888860058054905061353f565b9097509150866001600160401b0381111561125857611258614d0d565b604051908082528060200260200182016040528015611281578160200160208202803683370190505b509550866001600160401b0381111561129c5761129c614d0d565b6040519080825280602002602001820160405280156112c5578160200160208202803683370190505b509450866001600160401b038111156112e0576112e0614d0d565b604051908082528060200260200182016040528015611309578160200160208202803683370190505b509350866001600160401b0381111561132457611324614d0d565b60405190808252806020026020018201604052801561134d578160200160208202803683370190505b50925060005b878110156114c5576005611367828b6153d5565b81548110611377576113776153ed565b9060005260206000200160009054906101000a90046001600160a01b03168782815181106113a7576113a76153ed565b60200260200101906001600160a01b031690816001600160a01b0316815250506113f88782815181106113dc576113dc6153ed565b602002602001015160008c85613577909392919063ffffffff16565b86828151811061140a5761140a6153ed565b60200260200101818152505061144787828151811061142b5761142b6153ed565b602002602001015160018c85613577909392919063ffffffff16565b858281518110611459576114596153ed565b60200260200101818152505061149687828151811061147a5761147a6153ed565b602002602001015160028c85613577909392919063ffffffff16565b8482815181106114a8576114a86153ed565b6020908102919091010152806114bd81615403565b915050611353565b5050945094509450945094565b600080821161155757600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561152e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115529190615363565b611559565b815b6001600160a01b038416600090815260046020526040902090925061157e9083613636565b9392505050565b600080600183600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116029190615363565b61160c919061541e565b611616919061541e565b845190915060005b84811015611742576116316001846153d5565b6000805460405163fcbb371b60e01b81526004810184905292955090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015611685573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a991906152e8565b905060005b8381101561172d57600061170a8387600460008d87815181106116d3576116d36153ed565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206136499092919063ffffffff16565b50905061171781886153d5565b965050808061172590615403565b9150506116ae565b5050808061173a90615403565b91505061161e565b50505092915050565b6001600160a01b03828116600090815260046020526040902080548492163314801590611785575060018101546001600160a01b03163314155b156117a357604051630101292160e31b815260040160405180910390fd5b6001600160a01b038085166000908152600460205260409020548591166117dd576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015611830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118549190615391565b1561187257604051631e59ccd960e01b815260040160405180910390fd5b61190b600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ec9190615363565b6001600160a01b038716600090815260046020526040902090866137b8565b846001600160a01b03167f0ad9bf1b8c026a174a2f30954417002a6ea00c9b08c1b8846c7951c687be809585604051610b5591906153ac565b60008082116119c957600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c49190615363565b6119cb565b815b9150610fbb60026003846137c5565b6001600160a01b0384166000908152600460205260408120606091829186611a7857600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a739190615363565b611a7a565b865b9650611a8e8686836007018054905061353f565b9095509150846001600160401b03811115611aab57611aab614d0d565b604051908082528060200260200182016040528015611ad4578160200160208202803683370190505b509350846001600160401b03811115611aef57611aef614d0d565b604051908082528060200260200182016040528015611b18578160200160208202803683370190505b50925060005b85811015611c2b576000600781848201611b38858c6153d5565b81548110611b4857611b486153ed565b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190208054885191935090911690879084908110611b8e57611b8e6153ed565b6001600160a01b0392831660209182029290920101528354611bb59183911660028c613577565b8354611bce9083906001600160a01b031660018d613577565b8454611be79084906001600160a01b031660008e613577565b611bf191906153d5565b611bfb91906153d5565b858381518110611c0d57611c0d6153ed565b60209081029190910101525080611c2381615403565b915050611b1e565b50509450945094915050565b334114611c5757604051631cf4735960e01b815260040160405180910390fd5b60005460ff1615611c7a5760405162dc149f60e41b815260040160405180910390fd5b6000805460016001600160a81b03199091166101006001600160a01b039586160217811790915580546001600160a01b03191691909216179055565b6001600160a01b03821660009081526007602052604081206006018054829182918291829187908110611ceb57611ceb6153ed565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115611d1e57611d1e6150aa565b6002811115611d2f57611d2f6150aa565b81526020016001820154815260200160028201548152505090508060000151816020015182604001518360400151600014158015611d71575083604001514210155b929a91995097509095509350505050565b336000818152600760205260409020546001600160a01b0316611db85760405163cf83d93d60e01b815260040160405180910390fd5b336000908152600760205260408120600601805484908110611ddc57611ddc6153ed565b9060005260206000209060030201905060008160020154905080421015611e16576040516303cb96db60e21b815260040160405180910390fd5b80611e3457604051630c8d9eab60e31b815260040160405180910390fd5b6000600283015560405184815233907fbf5f92dc2b945251eadf78c2ca629ae64053d979bfbc43a7b17a463707906bf99060200160405180910390a281546001830154611e869160ff169033906138de565b50505050565b60058181548110611e9c57600080fd5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b0381811660009081526006602052604090205433911615611ef15760405163055ee1f160e31b815260040160405180910390fd5b6001600160a01b0381166000908152600460205260409020611f1390836139fd565b60058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b038381166001600160a01b03199283168117909355841660009081526006602090815260409182902080549093168417909255519182527fd5828184f48f65962d10eac907318df85953d4e3542a0f09b5932ee3fe398bdd910160405180910390a15050565b600954604051632d73a02f60e01b81526004810185905260248101849052604481018390526060918291829182916000916001600160a01b031690632d73a02f90606401600060405180830381865afa158015612010573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120389190810190615561565b959e949d50909b5099509297509095505050505050565b6001600160a01b03808416600090815260046020526040902054849116612089576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121009190615391565b1561211e57604051631e59ccd960e01b815260040160405180910390fd5b8161213c57604051637bc90c0560e11b815260040160405180910390fd5b612147833384613a3f565b6121d53385600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561219f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c39190615363565b6121ce9060016153d5565b8686613284565b836001600160a01b0316336001600160a01b03167f8fc656e319452025372383dc27d933046d412b8253de50a10739eeaa59862be68585604051610d62929190615660565b6001600160a01b03808216600090815260076020526040812081549192839283929161224f9183916101009091041684613ae0565b60005490945061227090829061010090046001600160a01b03166001613ae0565b60005490935061229190829061010090046001600160a01b03166002613ae0565b93959294505050565b6040513481527f1de49774d094a85fc1bbbd16e8d09a865fb848218f41e2da4369f528c42ee42e9060200160405180910390a1565b6001600160a01b038083166000818152600660209081526040808320548516835260049091528120600181015491939092911614612311576000915050610fbb565b6000831161239557600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561236c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123909190615363565b612397565b825b92506123a38184613636565b949350505050565b336000818152600460205260409020546001600160a01b03166123e1576040516372898ae960e11b815260040160405180910390fd5b6001600160a01b038281166000908152600660205260409020543391161561241c5760405163055ee1f160e31b815260040160405180910390fd5b6001600160a01b03808216600090815260046020526040902060018101549091166124478286613d06565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916888616908117909155825194861685529084019290925290917f758820d0b14a01c1fa60b8d2bbef25ed1b6a5af4802e5dec3f08679255ba8bf39101610b55565b606060006124c5848460088054905061353f565b9093509050826001600160401b038111156124e2576124e2614d0d565b60405190808252806020026020018201604052801561250b578160200160208202803683370190505b50915060005b838110156110af57600861252582876153d5565b81548110612535576125356153ed565b9060005260206000200160009054906101000a90046001600160a01b0316838281518110612565576125656153ed565b6001600160a01b03909216602092830291909101909101528061258781615403565b915050612511565b336000818152600460205260409020546001600160a01b03166125c5576040516372898ae960e11b815260040160405180910390fd5b600080543382526004602052604082206125ed9161010090046001600160a01b031685613264565b60405181815290915033907f882d5671e5b36af50883197c33d48ba56ce337589958e871ba82fb0a54adf3e89060200160405180910390a28015611e8657611e86600033836138de565b6001600160a01b03808316600090815260046020526040902054839116612671576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166126a75760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271e9190615391565b1561273c57604051631e59ccd960e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420612777939092610100909104169087613d80565b90508061279757604051637bc90c0560e11b815260040160405180910390fd5b6127ef3386600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d06573d6000803e3d6000fd5b6040518181526001600160a01b0386169033907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba10438369060200160405180910390a35050505050565b6001600160a01b03831660009081526007602052604081206006810154606092839283928392919061286b908990899061353f565b9097509150866001600160401b0381111561288857612888614d0d565b6040519080825280602002602001820160405280156128b1578160200160208202803683370190505b509550866001600160401b038111156128cc576128cc614d0d565b6040519080825280602002602001820160405280156128f5578160200160208202803683370190505b509450866001600160401b0381111561291057612910614d0d565b604051908082528060200260200182016040528015612939578160200160208202803683370190505b509350866001600160401b0381111561295457612954614d0d565b60405190808252806020026020018201604052801561297d578160200160208202803683370190505b50925060005b87811015612ae15760006006830161299b838c6153d5565b815481106129ab576129ab6153ed565b6000918252602090912060408051606081019091526003909202018054829060ff1660028111156129de576129de6150aa565b60028111156129ef576129ef6150aa565b81526020016001820154815260200160028201548152505090508060000151888381518110612a2057612a206153ed565b60200260200101906002811115612a3957612a396150aa565b90816002811115612a4c57612a4c6150aa565b815250508060200151878381518110612a6757612a676153ed565b6020026020010181815250508060400151868381518110612a8a57612a8a6153ed565b6020908102919091010152604081015115801590612aac575080604001514210155b858381518110612abe57612abe6153ed565b911515602092830291909101909101525080612ad981615403565b915050612983565b5050939792965093509350565b60008080808085612b7357600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b709190615363565b95505b6001600160a01b03878116600090815260046020908152604080832060018101548b855260028201909352922054921696509060ff1660008881526003830160205260409020549015955060ff169350612bcd8188613636565b9150848015612bda575083155b8015612c5b575060005460405163fcbb371b60e01b8152600481018990526101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015612c2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5391906152e8565b60c001518210155b9250509295509295909350565b600080546001600160a01b038481168352600460209081526040808520888416865260079092528420612ca5939092610100909104169085613db9565b50949350505050565b604051634ee5a1b960e01b815260040160405180910390fd5b6001600160a01b03808316600090815260046020526040902054839116612d01576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316612d375760405163cf83d93d60e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420612d72939092610100909104169087613d80565b604080516001600160a01b03881681526020810183905291925033917f2ef606d064225d24c1514dc94907c134faee1237445c2f63f410cce0852b2054910160405180910390a28015612dcb57612dcb600033836138de565b505050505050565b60088181548110611e9c57600080fd5b336000818152600760205260409020546001600160a01b0316612e195760405163cf83d93d60e01b815260040160405180910390fd5b6000805433825260076020526040909120612e419161010090046001600160a01b0316613fc7565b5050565b6001600160a01b03808416600090815260046020526040902054849116612e7f576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316612eb55760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f2c9190615391565b15612f4a57604051631e59ccd960e01b815260040160405180910390fd5b33600090815260076020908152604080832083546001600160a01b038a81168652600490945291909320612f88928492610100900416908888613feb565b935083612fa857604051637bc90c0560e11b815260040160405180910390fd5b806006016040518060600160405280876002811115612fc957612fc96150aa565b815260208101879052604001612fe242620d2f006153d5565b9052815460018181018455600093845260209093208251600390920201805492939092839160ff1990911690836002811115613020576130206150aa565b0217905550602082015181600101556040820151816002015550506130cc6003600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613093573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b79190615363565b6130c29060016153d5565b6002919087614121565b50600954604051635692619d60e11b81526001600160a01b0388811660048301529091169063ad24c33a90602401600060405180830381600087803b15801561311457600080fd5b505af1158015613128573d6000803e3d6000fd5b50505060068201546001600160a01b038816915033907fb649014faa7a0e23357e091fb8a67a128c33dc9480f846f7e41cb3a6c9d806109061316c9060019061541e565b60405190815260200160405180910390a3505050505050565b60008281526009850160205260408120546131ae57600083815260098601602052604090208290555b6000838152600a860160205260408120546131ca9060016153d5565b6000858152600a88016020526040902081905560e0860151909150811080159061321657506003860160006132008660016153d5565b815260208101919091526040016000205460ff16155b15612ca55761010085015161322b90856153d5565b91505b81841015612ca5578361324081615403565b60008181526003890160205260409020805460ff19166001179055945061322e9050565b60008060006132748686866133ab565b6006880155925050509392505050565b6001600160a01b03808616600090815260076020526040902080549091166132fd5780546001600160a01b0387166001600160a01b031991821681178355600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180549092161790555b6001600160a01b0385166000908152600460205260409020613324908290869086866141fc565b6133326002600386856142c4565b600954604051635692619d60e11b81526001600160a01b0387811660048301529091169063ad24c33a90602401600060405180830381600087803b15801561337957600080fd5b505af115801561338d573d6000803e3d6000fd5b50505050505050505050565b6133a683838360006143aa565b505050565b6000808460060154905060006001856001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341b9190615363565b613425919061541e565b905083158061343c57508061343a83866153d5565b115b1561344e5761344b828261541e565b93505b60005b84811015613535576134646001846153d5565b60405163fcbb371b60e01b8152600481018290529093506000906001600160a01b0388169063fcbb371b9060240161012060405180830381865afa1580156134b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d491906152e8565b905060006134e3898387613649565b509050806134f2575050613523565b60a0820151613502575050613523565b613514818360a0015160646019614430565b61351e90876153d5565b955050505b8061352d81615403565b915050613451565b5050935093915050565b6000808261354d85876153d5565b1061355f5761355c858461541e565b93505b8361356a81876153d5565b915091505b935093915050565b600061362d856002016000856002811115613594576135946150aa565b60028111156135a5576135a56150aa565b81526020019081526020016000206000866001600160a01b03166001600160a01b03168152602001908152602001600020838760010160008760028111156135ef576135ef6150aa565b6002811115613600576136006150aa565b8152602080820192909252604090810160009081206001600160a01b038b168252909252902091906137c5565b95945050505050565b600061157e6004840160058501846137c5565b6000818152600284016020526040812054819060ff168061367a5750600083815260038601602052604090205460ff165b1561368a5750600090508061356f565b6136948584613636565b9050604983106136d4578360c001518110156136b3576000915061356f565b629896806136c382610a3461567b565b6136cd919061569a565b915061376d565b806136e45750600090508061356f565b6136f06019600a615798565b61370185608001516064601961445c565b61370b908361567b565b613715919061569a565b915081613725576000915061356f565b6137488460600151856040015161373c919061567b565b6301e13380601961445c565b613752908361567b565b91506137606019600a615798565b61376a908361569a565b91505b6000838152600a8601602052604090205480156137af5760008481526009870160205260409020546137ab846137a3848461541e565b836019614430565b9350505b50935093915050565b6133a683838360016143aa565b82546000908015806137f3575082856000815481106137e6576137e66153ed565b9060005260206000200154115b1561380257600091505061157e565b828561380f60018461541e565b8154811061381f5761381f6153ed565b90600052602060002001541161385e578361383b60018361541e565b8154811061384b5761384b6153ed565b906000526020600020015491505061157e565b6001811180156138945750828561387660028461541e565b81548110613886576138866153ed565b906000526020600020015411155b156138a5578361383b60028361541e565b60006138b48685600085614498565b90508481815481106138c8576138c86153ed565b9060005260206000200154925050509392505050565b6000808460028111156138f3576138f36150aa565b1415613952576040516001600160a01b038416908390600081818185875af1925050503d8060008114613942576040519150601f19603f3d011682016040523d82523d6000602084013e613947565b606091505b5050809150506139d4565b61395b84614540565b60405163a9059cbb60e01b81526001600160a01b03858116600483015260248201859052919091169063a9059cbb906044015b6020604051808303816000875af11580156139ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139d19190615391565b90505b80611e865783604051630db5347560e11b81526004016139f491906157a4565b60405180910390fd5b81546001600160a01b031615613a2557604051621d934160e11b815260040160405180910390fd5b81546001600160a01b03191633178255612e418282613d06565b6000836002811115613a5357613a536150aa565b1415613a79578034146133a657604051630fe5b06560e11b815260040160405180910390fd5b3415613a985760405163a745ac8560e01b815260040160405180910390fd5b6000613aa384614540565b6040516323b872dd60e01b81526001600160a01b0385811660048301523060248301526044820185905291909116906323b872dd9060640161398e565b600080846003016000846002811115613afb57613afb6150aa565b6002811115613b0c57613b0c6150aa565b8152602081019190915260400160002054905080613b2e57600091505061157e565b6000846001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b929190615363565b90506000613ba160018461541e565b9050600081118015613c04575081876003016000876002811115613bc757613bc76150aa565b6002811115613bd857613bd86150aa565b81526020019081526020016000208281548110613bf757613bf76153ed565b9060005260206000200154115b15613c175780613c13816157b2565b9150505b81876003016000876002811115613c3057613c306150aa565b6002811115613c4157613c416150aa565b81526020019081526020016000208281548110613c6057613c606153ed565b90600052602060002001541115613c7d576000935050505061157e565b6000805b828111613cfa57886004016000886002811115613ca057613ca06150aa565b6002811115613cb157613cb16150aa565b81526020019081526020016000208181548110613cd057613cd06153ed565b906000526020600020015482613ce691906153d5565b915080613cf281615403565b915050613c81565b50979650505050505050565b6001600160a01b038116613d2d57604051637138356f60e01b815260040160405180910390fd5b81546001600160a01b0382811691161415613d5b5760405163e037058f60e01b815260040160405180910390fd5b60019190910180546001600160a01b0319166001600160a01b03909216919091179055565b6000806000613d9187878787613db9565b86546001600160a01b0316600090815260058a01602052604090205592505050949350505050565b81546001600160a01b039081166000908152600586016020908152604080832054815163900cf0cf60e01b81529151939490938593600193928a169263900cf0cf92600480830193928290030181865afa158015613e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3f9190615363565b613e49919061541e565b9050831580613e60575080613e5e83866153d5565b115b15613e7257613e6f828261541e565b93505b60005b84811015613fbc57613e886001846153d5565b8654909350600090613ea7908a906001600160a01b0316600287613577565b8754613ec0908b906001600160a01b0316600188613577565b8854613ed9908c906001600160a01b0316600089613577565b613ee391906153d5565b613eed91906153d5565b905080613efa5750613faa565b600080613f788a6001600160a01b031663fcbb371b886040518263ffffffff1660e01b8152600401613f2e91815260200190565b61012060405180830381865afa158015613f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f7091906152e8565b8a90886145ab565b915091508160001415613f8d57505050613faa565b613f9a8284836019614430565b613fa490886153d5565b96505050505b80613fb481615403565b915050613e75565b505094509492505050565b613fd3828260016145fc565b613fdf828260026145fc565b612e41828260006145fc565b6000614107866002016000856002811115614008576140086150aa565b6002811115614019576140196150aa565b81526020808201929092526040908101600090812088546001600160a01b03908116835290845290829020825163900cf0cf60e01b815292519093918a169263900cf0cf9260048083019391928290030181865afa15801561407f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140a39190615363565b6140ae9060016153d5565b848960010160008860028111156140c7576140c76150aa565b60028111156140d8576140d86150aa565b8152602080820192909252604090810160009081208b546001600160a01b031682529092529020929190614121565b9150816141165750600061362d565b612ca5848684614922565b835460009080158061415857508561413a60018361541e565b8154811061414a5761414a6153ed565b906000526020600020015484105b1561417657604051630eae4c9760e01b815260040160405180910390fd5b60006141838787876149a2565b90506000868281548110614199576141996153ed565b90600052602060002001549050808511156141b457806141b6565b845b945084156141f057848783815481106141d1576141d16153ed565b9060005260206000200160008282546141ea919061541e565b90915550505b50929695505050505050565b6142ab856002016000846002811115614217576142176150aa565b6002811115614228576142286150aa565b81526020808201929092526040908101600090812087546001600160a01b031682529092528120908690849060018a019087600281111561426b5761426b6150aa565b600281111561427c5761427c6150aa565b8152602080820192909252604090810160009081208a546001600160a01b0316825290925290209291906142c4565b8454610b5e90849086906001600160a01b031684614bb2565b83546001811180156142fb5750846142dd60018361541e565b815481106142ed576142ed6153ed565b906000526020600020015483105b801561432c57508461430e60028361541e565b8154811061431e5761431e6153ed565b906000526020600020015483105b1561434a57604051630eae4c9760e01b815260040160405180910390fd5b60006143578686866149a2565b8654925090505b81811015612dcb5782858281548110614379576143796153ed565b90600052602060002001600082825461439291906153d5565b909155508190506143a281615403565b91505061435e565b815160005b81811015612dcb5760008482815181106143cb576143cb6153ed565b6020026020010151905085811180156143fb5750600081815260028801602052604090205460ff16151584151514155b1561441d5760008181526002880160205260409020805460ff19168515151790555b508061442881615403565b9150506143af565b600061443d82600a615798565b61444885858561445c565b614452908761567b565b61362d919061569a565b60008061446a8360016153d5565b61447590600a615798565b61447f908661567b565b9050600a61448d858361569a565b6144529060056153d5565b6000818314156144b4576144ad60018361541e565b90506123a3565b600060026144c284866153d5565b6144cc919061569a565b9050848682815481106144e1576144e16153ed565b90600052602060002001541115614506576144fe86868684614498565b9150506123a3565b84868281548110614519576145196153ed565b9060005260206000200154101561362d576144fe868661453a8460016153d5565b86614498565b60006001826002811115614556576145566150aa565b141561456a57506001602960991b01919050565b600282600281111561457e5761457e6150aa565b141561459257506002602960991b01919050565b604051638698bf3760e01b815260040160405180910390fd5b6000806145b9858585613649565b9092509050816145cc576000915061356f565b60a08401511561356f576145e8828560a0015160646019614430565b6145f2908361541e565b9150935093915050565b6000614609848484613ae0565b9050806146165750505050565b6000846003016000846002811115614630576146306150aa565b6002811115614641576146416150aa565b8152602001908152602001600020805490509050836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146b79190615363565b8560030160008560028111156146cf576146cf6150aa565b60028111156146e0576146e06150aa565b81526020019081526020016000206001836146fb919061541e565b8154811061470b5761470b6153ed565b9060005260206000200154116147a657846003016000846002811115614733576147336150aa565b6002811115614744576147446150aa565b8152602001908152602001600020600061475e9190614c32565b846004016000846002811115614776576147766150aa565b6002811115614787576147876150aa565b815260200190815260200160002060006147a19190614c32565b61490b565b60405180602001604052808660030160008660028111156147c9576147c96150aa565b60028111156147da576147da6150aa565b81526020019081526020016000206001846147f5919061541e565b81548110614805576148056153ed565b906000526020600020015481525085600301600085600281111561482b5761482b6150aa565b600281111561483c5761483c6150aa565b81526020810191909152604001600020614857916001614c53565b50604051806020016040528086600401600086600281111561487b5761487b6150aa565b600281111561488c5761488c6150aa565b81526020019081526020016000206001846148a7919061541e565b815481106148b7576148b76153ed565b90600052602060002001548152508560040160008560028111156148dd576148dd6150aa565b60028111156148ee576148ee6150aa565b81526020810191909152604001600020614909916001614c53565b505b8454610b5e9084906001600160a01b0316846138de565b611e8683600501836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061498b9190615363565b6149969060016153d5565b60048601919084614121565b8254600090806149dd57505082546001818101855560008581526020808220909301849055845491820185558481529182200181905561157e565b60006149ea60018361541e565b90506000868281548110614a0057614a006153ed565b9060005260206000200154905080851415614a1f5750915061157e9050565b80851115614a875786546001810188556000888152602090200185905585548690819084908110614a5257614a526153ed565b6000918252602080832090910154835460018181018655948452919092200155614a7d9083906153d5565b935050505061157e565b600082118015614abc575086614a9e60018461541e565b81548110614aae57614aae6153ed565b906000526020600020015485145b15614acc57614a7d60018361541e565b86878381548110614adf57614adf6153ed565b6000918252602080832090910154835460018101855593835291209091015585548690819084908110614b1457614b146153ed565b6000918252602080832090910154835460018101855593835291209091015586548590889084908110614b4957614b496153ed565b6000918252602090912001558115614b875785614b6760018461541e565b81548110614b7757614b776153ed565b9060005260206000200154614b8a565b60005b868381548110614b9c57614b9c6153ed565b60009182526020909120015550915061157e9050565b6001600160a01b038216600090815260088501602052604090205460ff16614c20576001600160a01b038216600081815260088601602090815260408220805460ff191660019081179091556007880180549182018155835291200180546001600160a01b03191690911790555b611e86600485016005860185846142c4565b5080546000825590600052602060002090810190614c509190614c9e565b50565b828054828255906000526020600020908101928215614c8e579160200282015b82811115614c8e578251825591602001919060010190614c73565b50614c9a929150614c9e565b5090565b5b80821115614c9a5760008155600101614c9f565b6001600160a01b0381168114614c5057600080fd5b60008060408385031215614cdb57600080fd5b8235614ce681614cb3565b946020939093013593505050565b600060208284031215614d0657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715614d4657614d46614d0d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614d7457614d74614d0d565b604052919050565b60006001600160401b03821115614d9557614d95614d0d565b5060051b60200190565b60008060408385031215614db257600080fd5b8235614dbd81614cb3565b91506020838101356001600160401b03811115614dd957600080fd5b8401601f81018613614dea57600080fd5b8035614dfd614df882614d7c565b614d4c565b81815260059190911b82018301908381019088831115614e1c57600080fd5b928401925b82841015614e3a57833582529284019290840190614e21565b80955050505050509250929050565b60008060408385031215614e5c57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015614ea45781516001600160a01b031687529582019590820190600101614e7f565b509495945050505050565b604081526000614ec26040830185614e6b565b90508260208301529392505050565b60008060008060808587031215614ee757600080fd5b8435614ef281614cb3565b966020860135965060408601359560600135945092505050565b600081518084526020808501945080840160005b83811015614ea457815187529582019590820190600101614f20565b60a081526000614f4f60a0830188614e6b565b8281036020840152614f618188614f0c565b90508281036040840152614f758187614f0c565b90508281036060840152614f898186614f0c565b9150508260808301529695505050505050565b60008060408385031215614faf57600080fd5b82356001600160401b03811115614fc557600080fd5b8301601f81018513614fd657600080fd5b80356020614fe6614df883614d7c565b82815260059290921b8301810191818101908884111561500557600080fd5b938201935b8385101561502c57843561501d81614cb3565b8252938201939082019061500a565b98969091013596505050505050565b60608152600061504e6060830186614e6b565b82810360208401526150608186614f0c565b915050826040830152949350505050565b6000806040838503121561508457600080fd5b823561508f81614cb3565b9150602083013561509f81614cb3565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b600381106150de57634e487b7160e01b600052602160045260246000fd5b9052565b608081016150f082876150c0565b846020830152836040830152821515606083015295945050505050565b60006020828403121561511f57600080fd5b813561157e81614cb3565b60008060006060848603121561513f57600080fd5b505081359360208301359350604090920135919050565b600081518084526020808501945080840160005b83811015614ea457815115158752958201959082019060010161516a565b60a08152600061519b60a0830188614e6b565b82810360208401526151ad8188614e6b565b905082810360408401526151c18187614f0c565b90508281036060840152614f898186615156565b6000806000606084860312156151ea57600080fd5b83356151f581614cb3565b925060208401356003811061520957600080fd5b929592945050506040919091013590565b60008060006060848603121561522f57600080fd5b833561523a81614cb3565b95602085013595506040909401359392505050565b60a0808252865190820181905260009060209060c0840190828a01845b8281101561528f5761527f8483516150c0565b928401929084019060010161526c565b505050838103828501526152a38189614f0c565b91505082810360408401526151c18187614f0c565b6000806000606084860312156152cd57600080fd5b83356152d881614cb3565b9250602084013561520981614cb3565b600061012082840312156152fb57600080fd5b615303614d23565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b60006020828403121561537557600080fd5b5051919050565b8051801515811461538c57600080fd5b919050565b6000602082840312156153a357600080fd5b61157e8261537c565b60208152600061157e6020830184614f0c565b634e487b7160e01b600052601160045260246000fd5b600082198211156153e8576153e86153bf565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415615417576154176153bf565b5060010190565b600082821015615430576154306153bf565b500390565b600082601f83011261544657600080fd5b81516020615456614df883614d7c565b82815260059290921b8401810191818101908684111561547557600080fd5b8286015b8481101561549957805161548c81614cb3565b8352918301918301615479565b509695505050505050565b600082601f8301126154b557600080fd5b815160206154c5614df883614d7c565b82815260059290921b840181019181810190868411156154e457600080fd5b8286015b84811015615499576154f98161537c565b83529183019183016154e8565b600082601f83011261551757600080fd5b81516020615527614df883614d7c565b82815260059290921b8401810191818101908684111561554657600080fd5b8286015b84811015615499578051835291830191830161554a565b600080600080600080600060e0888a03121561557c57600080fd5b87516001600160401b038082111561559357600080fd5b61559f8b838c01615435565b985060208a01519150808211156155b557600080fd5b6155c18b838c01615435565b975060408a01519150808211156155d757600080fd5b6155e38b838c016154a4565b965060608a01519150808211156155f957600080fd5b6156058b838c016154a4565b955060808a015191508082111561561b57600080fd5b6156278b838c01615506565b945060a08a015191508082111561563d57600080fd5b5061564a8a828b016154a4565b92505060c0880151905092959891949750929550565b6040810161566e82856150c0565b8260208301529392505050565b6000816000190483118215151615615695576156956153bf565b500290565b6000826156b757634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156110af5781600019048211156156dd576156dd6153bf565b808516156156ea57918102915b93841c93908002906156c1565b60008261570657506001610fbb565b8161571357506000610fbb565b816001811461572957600281146157335761574f565b6001915050610fbb565b60ff841115615744576157446153bf565b50506001821b610fbb565b5060208310610133831016604e8410600b8410161715615772575081810a610fbb565b61577c83836156bc565b8060001904821115615790576157906153bf565b029392505050565b600061157e83836156f7565b60208101610fbb82846150c0565b6000816157c1576157c16153bf565b50600019019056fea26469706673582212207b2d1662d7b769f464a304e533739d8f086e3da7b8bcf2076988a8e3798afe7264736f6c634300080c0033`), - }, - } - - deploymentSets = map[common.Hash]map[uint64]deploymentSet{ - params.OasysMainnetGenesisHash: { - 1: deploymentSet{deployments0}, - 235000: deploymentSet{deployments1}, - 309600: deploymentSet{deployments2, deployments3, deployments4}, - 419000: deploymentSet{deployments5}, - 557100: deploymentSet{deployments6}, - 971800: deploymentSet{deployments7}, - 1529980: deploymentSet{deployments9}, - 1892000: deploymentSet{deployments10}, - 9999999: deploymentSet{deployments11}, // TODO - }, - params.OasysTestnetGenesisHash: { - 1: deploymentSet{deployments0}, - 189400: deploymentSet{deployments2}, - 200800: deploymentSet{deployments1}, - 269700: deploymentSet{deployments3}, - 293000: deploymentSet{deployments4}, - 385000: deploymentSet{deployments5}, - 546400: deploymentSet{deployments6}, - 955400: deploymentSet{deployments7, deployments8}, - 1519840: deploymentSet{deployments9}, - 1880660: deploymentSet{deployments10}, - 9999999: deploymentSet{deployments11}, // TODO - }, - defaultGenesisHash: { - 2: deploymentSet{ - deployments0, - deployments1, - deployments2, - deployments3, - deployments4, - deployments5, - deployments6, - deployments7, - deployments8, - deployments9, - deployments10, - deployments11, - }, - }, - } -) +var deploymentSets = map[common.Hash]map[uint64]deploymentSet{ + params.OasysMainnetGenesisHash: { + 1: deploymentSet{deployments0}, + 235000: deploymentSet{deployments1}, + 309600: deploymentSet{deployments2, deployments3, deployments4}, + 419000: deploymentSet{deployments5}, + 557100: deploymentSet{deployments6}, + 971800: deploymentSet{deployments7}, + 1529980: deploymentSet{deployments9}, + 1892000: deploymentSet{deployments10}, + 9999999: deploymentSet{deployments11}, // TODO + }, + params.OasysTestnetGenesisHash: { + 1: deploymentSet{deployments0}, + 189400: deploymentSet{deployments2}, + 200800: deploymentSet{deployments1}, + 269700: deploymentSet{deployments3}, + 293000: deploymentSet{deployments4}, + 385000: deploymentSet{deployments5}, + 546400: deploymentSet{deployments6}, + 955400: deploymentSet{deployments7, deployments8}, + 1519840: deploymentSet{deployments9}, + 1880660: deploymentSet{deployments10}, + 9999999: deploymentSet{deployments11}, // TODO + }, + defaultGenesisHash: { + 2: deploymentSet{ + deployments0, + deployments1, + deployments2, + deployments3, + deployments4, + deployments5, + deployments6, + deployments7, + deployments8, + deployments9, + deployments10, + deployments11, + }, + }, +} func mustDecodeCode(code string) []byte { hexcode, err := hex.DecodeString(strings.TrimPrefix(code, hexPrefix)) diff --git a/contracts/oasys/deployments0.go b/contracts/oasys/deployments0.go new file mode 100644 index 000000000..28fbafd0d --- /dev/null +++ b/contracts/oasys/deployments0.go @@ -0,0 +1,243 @@ +package oasys + +import ( + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/params" +) + +var deployments0 = []*deployment{ + { + contract: wrappedOAS, + // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/1a5673f5d69108ada2e7d825b9033ac6f668f71a/contracts/token/WOAS.sol + code: mustDecodeCode( + "0x6080604052600436106100dc5760003560e01c8063395093511161007f578063a457c2d711610059578063a457c2d714610244578063a9059cbb14610264578063d0e30db014610284578063dd62ed3e1461028c57600080fd5b806339509351146101d957806370a08231146101f957806395d89b411461022f57600080fd5b806318160ddd116100bb57806318160ddd1461015e57806323b872dd1461017d5780632e1a7d4d1461019d578063313ce567146101bd57600080fd5b8062f714ce146100e157806306fdde0314610103578063095ea7b31461012e575b600080fd5b3480156100ed57600080fd5b506101016100fc366004610c71565b6102d2565b005b34801561010f57600080fd5b506101186102e0565b6040516101259190610c9d565b60405180910390f35b34801561013a57600080fd5b5061014e610149366004610cf2565b610372565b6040519015158152602001610125565b34801561016a57600080fd5b506002545b604051908152602001610125565b34801561018957600080fd5b5061014e610198366004610d1c565b61038a565b3480156101a957600080fd5b506101016101b8366004610d58565b6103ae565b3480156101c957600080fd5b5060405160128152602001610125565b3480156101e557600080fd5b5061014e6101f4366004610cf2565b6103bb565b34801561020557600080fd5b5061016f610214366004610d71565b6001600160a01b031660009081526020819052604090205490565b34801561023b57600080fd5b506101186103fa565b34801561025057600080fd5b5061014e61025f366004610cf2565b610409565b34801561027057600080fd5b5061014e61027f366004610cf2565b6104a0565b6101016104ae565b34801561029857600080fd5b5061016f6102a7366004610d93565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102dc8282610530565b5050565b6060600380546102ef90610dbd565b80601f016020809104026020016040519081016040528092919081815260200182805461031b90610dbd565b80156103685780601f1061033d57610100808354040283529160200191610368565b820191906000526020600020905b81548152906001019060200180831161034b57829003601f168201915b5050505050905090565b6000336103808185856106ab565b5060019392505050565b6000336103988582856107d0565b6103a3858585610862565b506001949350505050565b6103b88133610530565b50565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061038090829086906103f5908790610e0e565b6106ab565b6060600480546102ef90610dbd565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156104935760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6103a382868684036106ab565b600033610380818585610862565b600034116104ef5760405162461bcd60e51b815260206004820152600e60248201526d3b30b63ab29034b9903d32b9379760911b604482015260640161048a565b6104f93334610a30565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600082116105725760405162461bcd60e51b815260206004820152600f60248201526e30b6b7bab73a1034b9903d32b9379760891b604482015260640161048a565b336000908152602081905260409020548211156105bf5760405162461bcd60e51b815260206004820152600b60248201526a1bdd995c88185b5bdd5b9d60aa1b604482015260640161048a565b6105c93383610b0f565b6000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114610616576040519150601f19603f3d011682016040523d82523d6000602084013e61061b565b606091505b50509050806106635760405162461bcd60e51b815260206004820152601460248201527327a0a9903a3930b739b332b9103330b4b632b21760611b604482015260640161048a565b816001600160a01b03167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b658460405161069e91815260200190565b60405180910390a2505050565b6001600160a01b03831661070d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161048a565b6001600160a01b03821661076e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161048a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461085c578181101561084f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161048a565b61085c84848484036106ab565b50505050565b6001600160a01b0383166108c65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161048a565b6001600160a01b0382166109285760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161048a565b6001600160a01b038316600090815260208190526040902054818110156109a05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161048a565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906109d7908490610e0e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a2391815260200190565b60405180910390a361085c565b6001600160a01b038216610a865760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161048a565b8060026000828254610a989190610e0e565b90915550506001600160a01b03821660009081526020819052604081208054839290610ac5908490610e0e565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038216610b6f5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161048a565b6001600160a01b03821660009081526020819052604090205481811015610be35760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161048a565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610c12908490610e26565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016107c3565b80356001600160a01b0381168114610c6c57600080fd5b919050565b60008060408385031215610c8457600080fd5b82359150610c9460208401610c55565b90509250929050565b600060208083528351808285015260005b81811015610cca57858101830151858201604001528201610cae565b81811115610cdc576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215610d0557600080fd5b610d0e83610c55565b946020939093013593505050565b600080600060608486031215610d3157600080fd5b610d3a84610c55565b9250610d4860208501610c55565b9150604084013590509250925092565b600060208284031215610d6a57600080fd5b5035919050565b600060208284031215610d8357600080fd5b610d8c82610c55565b9392505050565b60008060408385031215610da657600080fd5b610daf83610c55565b9150610c9460208401610c55565b600181811c90821680610dd157607f821691505b60208210811415610df257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610e2157610e21610df8565b500190565b600082821015610e3857610e38610df8565b50039056fea26469706673582212201386e735025cbb0cf1805fd55167774354486301f58ae37b970d23e4b244557864736f6c634300080c0033", + ), + storage: storage{ + // string private _name + "0x03": "Wrapped OAS", + // string private _symbol + "0x04": "WOAS", + }, + }, + { + contract: stakableOAS, + // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/6da1ef708fd80fb58ee07f7802091e1da0e4dad3/contracts/token/SOAS.sol + code: mustDecodeCode( + "0x6080604052600436106101145760003560e01c80636dec93f1116100a057806395d89b411161006457806395d89b4114610328578063a457c2d71461033d578063a9059cbb1461035d578063d97830b11461037d578063dd62ed3e1461041a57600080fd5b80636dec93f11461025c57806370a082311461027c578063775ad527146102b25780637de6b1db146102d257806392de7482146102f257600080fd5b8063313ce567116100e7578063313ce567146101b3578063379607f5146101cf57806339509351146101f1578063546cec3e1461021157806364b55bed1461022457600080fd5b806306fdde0314610119578063095ea7b31461014457806318160ddd1461017457806323b872dd14610193575b600080fd5b34801561012557600080fd5b5061012e610460565b60405161013b9190611497565b60405180910390f35b34801561015057600080fd5b5061016461015f366004611508565b6104f2565b604051901515815260200161013b565b34801561018057600080fd5b506002545b60405190815260200161013b565b34801561019f57600080fd5b506101646101ae366004611532565b61050c565b3480156101bf57600080fd5b506040516012815260200161013b565b3480156101db57600080fd5b506101ef6101ea36600461156e565b610530565b005b3480156101fd57600080fd5b5061016461020c366004611508565b61069c565b6101ef61021f36600461159e565b6106db565b34801561023057600080fd5b5061024461023f36600461156e565b61092f565b6040516001600160a01b03909116815260200161013b565b34801561026857600080fd5b506101856102773660046115e1565b610959565b34801561028857600080fd5b506101856102973660046115e1565b6001600160a01b031660009081526020819052604090205490565b3480156102be57600080fd5b506101ef6102cd3660046115fc565b610a57565b3480156102de57600080fd5b506101ef6102ed36600461156e565b610b27565b3480156102fe57600080fd5b5061024461030d3660046115e1565b6007602052600090815260409020546001600160a01b031681565b34801561033457600080fd5b5061012e610c68565b34801561034957600080fd5b50610164610358366004611508565b610c77565b34801561036957600080fd5b50610164610378366004611508565b610d0e565b34801561038957600080fd5b506103dd6103983660046115e1565b6006602052600090815260409020805460018201546002830154600390930154919290916001600160401b0380831692600160401b900416906001600160a01b031685565b6040805195865260208601949094526001600160401b03928316938501939093521660608301526001600160a01b0316608082015260a00161013b565b34801561042657600080fd5b506101856104353660046115fc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60606003805461046f9061162f565b80601f016020809104026020016040519081016040528092919081815260200182805461049b9061162f565b80156104e85780601f106104bd576101008083540402835291602001916104e8565b820191906000526020600020905b8154815290600101906020018083116104cb57829003601f168201915b5050505050905090565b600033610500818585610d1c565b60019150505b92915050565b60003361051a858285610e41565b610525858585610ed3565b506001949350505050565b8061054e57604051637bc90c0560e11b815260040160405180910390fd5b336000818152600760208181526040808420546001600160a01b03168085526006835290842060018101549585529290915290929061058c90610959565b6105969190611680565b9050808311156105b9576040516377dfdf2160e01b815260040160405180910390fd5b828260010160008282546105cd9190611697565b909155506105dd905033846110ac565b604051600090339085908381818185875af1925050503d806000811461061f576040519150601f19603f3d011682016040523d82523d6000602084013e610624565b606091505b5050905080610646576040516312171d8360e31b815260040160405180910390fd5b336000908152600760209081526040918290205491518681526001600160a01b03909216917f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4910160405180910390a250505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061050090829086906106d6908790611697565b610d1c565b6001600160a01b03831615806107505750610750600580548060200260200160405190810160405280929190818152602001828054801561074557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610727575b5050505050846111fe565b1561076e5760405163ac6b05f560e01b815260040160405180910390fd5b6001600160a01b0383811660009081526007602052604090205416156107a757604051630fb356f360e21b815260040160405180910390fd5b42826001600160401b03161115806107d15750806001600160401b0316826001600160401b031610155b156107ef57604051636385801560e11b815260040160405180910390fd5b3461080d57604051637bc90c0560e11b815260040160405180910390fd5b6108178334611264565b6040805160a08101825234808252600060208084018281526001600160401b038089168688019081528882166060880190815233608089019081526001600160a01b038d8116808952600688528b89209a518b55955160018b0155925160028a01805493518616600160401b026fffffffffffffffffffffffffffffffff19909416919095161791909117909255905160039096018054969091166001600160a01b031996871617905560079091529084902080549093168117909255915190917fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb916109229190869086909283526001600160401b03918216602084015216604082015260600190565b60405180910390a2505050565b6005818154811061093f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b038082166000908152600660209081526040808320815160a081018352815480825260018301549482019490945260028201546001600160401b0380821694830194909452600160401b900490921660608301526003015490931660808401529091906109d05750600092915050565b80604001516001600160401b03164210156109ee5750600092915050565b600081604001518260600151610a0491906116af565b6001600160401b031682604001516001600160401b031642610a269190611680565b8351610a3291906116d7565b610a3c91906116f6565b8251909150811115610a5057505192915050565b9392505050565b6001600160a01b03828116600090815260066020526040902060030154163314610a945760405163d8d5894f60e01b815260040160405180910390fd5b6001600160a01b038181166000908152600760205260409020541615610acd57604051630fb356f360e21b815260040160405180910390fd5b6001600160a01b0381811660008181526007602052604080822080546001600160a01b0319169487169485179055519192917fdc5d0ac53741544fef2e2ae9b2c8006a9e56f9708377f300d8e825f8d411617d9190a35050565b80610b4557604051637bc90c0560e11b815260040160405180910390fd5b336000908152600760209081526040808320546001600160a01b031683526006909152902060018101548154610b7b9190611680565b821115610b9b576040516377dfdf2160e01b815260040160405180910390fd5b610ba533836110ac565b60038101546040516000916001600160a01b03169084908381818185875af1925050503d8060008114610bf4576040519150601f19603f3d011682016040523d82523d6000602084013e610bf9565b606091505b5050905080610c1b576040516312171d8360e31b815260040160405180910390fd5b336000908152600760209081526040918290205491518581526001600160a01b03909216917f443630e54cc5dd8826c25d7467193a3b7a0a67b4ed73c14fb477e8e7eed3fd489101610922565b60606004805461046f9061162f565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610d015760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6105258286868403610d1c565b600033610500818585610ed3565b6001600160a01b038316610d7e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cf8565b6001600160a01b038216610ddf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cf8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610ecd5781811015610ec05760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610cf8565b610ecd8484848403610d1c565b50505050565b6001600160a01b038316610f375760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cf8565b6001600160a01b038216610f995760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cf8565b610fa483838361134f565b6001600160a01b0383166000908152602081905260409020548181101561101c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610cf8565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611053908490611697565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161109f91815260200190565b60405180910390a3610ecd565b6001600160a01b03821661110c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610cf8565b6111188260008361134f565b6001600160a01b0382166000908152602081905260409020548181101561118c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610cf8565b6001600160a01b03831660009081526020819052604081208383039055600280548492906111bb908490611680565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610e34565b6000805b835181101561125a57826001600160a01b031684828151811061122757611227611718565b60200260200101516001600160a01b03161415611248576001915050610506565b806112528161172e565b915050611202565b5060009392505050565b6001600160a01b0382166112ba5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610cf8565b6112c66000838361134f565b80600260008282546112d89190611697565b90915550506001600160a01b03821660009081526020819052604081208054839290611305908490611697565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038316158061136c57506001600160a01b038216155b1561137657505050565b6113d86005805480602002602001604051908101604052809291908181526020018280548015610745576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610727575050505050846111fe565b806114425750611442600580548060200260200160405190810160405280929190818152602001828054801561143757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611419575b5050505050836111fe565b1561144c57505050565b6001600160a01b0380831660009081526007602052604080822054868416835291205482169116141561147e57505050565b6040516325cdf54f60e21b815260040160405180910390fd5b600060208083528351808285015260005b818110156114c4578581018301518582016040015282016114a8565b818111156114d6576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461150357600080fd5b919050565b6000806040838503121561151b57600080fd5b611524836114ec565b946020939093013593505050565b60008060006060848603121561154757600080fd5b611550846114ec565b925061155e602085016114ec565b9150604084013590509250925092565b60006020828403121561158057600080fd5b5035919050565b80356001600160401b038116811461150357600080fd5b6000806000606084860312156115b357600080fd5b6115bc846114ec565b92506115ca60208501611587565b91506115d860408501611587565b90509250925092565b6000602082840312156115f357600080fd5b610a50826114ec565b6000806040838503121561160f57600080fd5b611618836114ec565b9150611626602084016114ec565b90509250929050565b600181811c9082168061164357607f821691505b6020821081141561166457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156116925761169261166a565b500390565b600082198211156116aa576116aa61166a565b500190565b60006001600160401b03838116908316818110156116cf576116cf61166a565b039392505050565b60008160001904831182151516156116f1576116f161166a565b500290565b60008261171357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006000198214156117425761174261166a565b506001019056fea2646970667358221220f21d097e602c55de21338fa3788df67cbc61610d671043339c5528343e0b804364736f6c634300080c0033", + ), + storage: storage{ + // string private _name + "0x03": "Stakable OAS", + // string private _symbol + "0x04": "SOAS", + // address[] public allowedAddresses + "0x05": array{ + values: map[int64]interface{}{ + 0: StakeManagerAddress, + 1: l1BuildDeposit.address, + }, + }, + }, + }, + { + contract: l1StandardERC20Factory, + // commit: https://github.com/oasysgames/oasys-optimism/blob/1386e7b9ea4e0dd7d67370991a0471c54b9a6888/packages/contracts/contracts/oasys/L1/token/L1StandardERC20Factory.sol + code: mustDecodeCode( + "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80630b6ec17814610030575b600080fd5b61004361003e3660046101c2565b610045565b005b6000338383604051610056906100db565b610062939291906102a0565b604051809103906000f08015801561007e573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff16826040516100a691906102eb565b604051908190038120907fd714a43f627528ad95fc3dcf6c453cf595be2f4d75c58c4273f17208ed899f4490600090a3505050565b6124338061030883390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261012857600080fd5b813567ffffffffffffffff80821115610143576101436100e8565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610189576101896100e8565b816040528381528660208588010111156101a257600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156101d557600080fd5b823567ffffffffffffffff808211156101ed57600080fd5b6101f986838701610117565b9350602085013591508082111561020f57600080fd5b5061021c85828601610117565b9150509250929050565b60005b83811015610241578181015183820152602001610229565b83811115610250576000848401525b50505050565b6000815180845261026e816020860160208601610226565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006102cf6060830185610256565b82810360408401526102e18185610256565b9695505050505050565b600082516102fd818460208701610226565b919091019291505056fe60806040523480156200001157600080fd5b5060405162002433380380620024338339810160408190526200003491620003b6565b8151829082906200004d90600590602085019062000243565b5080516200006390600690602084019062000243565b50506007805460ff19169055506200007d600084620000de565b620000a97f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a684620000de565b620000d57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a84620000de565b5050506200047d565b620000f582826200012160201b62000abd1760201c565b60008281526001602090815260409091206200011c91839062000ac762000131821b17901c565b505050565b6200012d828262000151565b5050565b600062000148836001600160a01b038416620001f1565b90505b92915050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166200012d576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001ad3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008181526001830160205260408120546200023a575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200014b565b5060006200014b565b828054620002519062000440565b90600052602060002090601f016020900481019282620002755760008555620002c0565b82601f106200029057805160ff1916838001178555620002c0565b82800160010185558215620002c0579182015b82811115620002c0578251825591602001919060010190620002a3565b50620002ce929150620002d2565b5090565b5b80821115620002ce5760008155600101620002d3565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200031157600080fd5b81516001600160401b03808211156200032e576200032e620002e9565b604051601f8301601f19908116603f01168101908282118183101715620003595762000359620002e9565b816040528381526020925086838588010111156200037657600080fd5b600091505b838210156200039a57858201830151818301840152908201906200037b565b83821115620003ac5760008385830101525b9695505050505050565b600080600060608486031215620003cc57600080fd5b83516001600160a01b0381168114620003e457600080fd5b60208501519093506001600160401b03808211156200040257600080fd5b6200041087838801620002ff565b935060408601519150808211156200042757600080fd5b506200043686828701620002ff565b9150509250925092565b600181811c908216806200045557607f821691505b602082108114156200047757634e487b7160e01b600052602260045260246000fd5b50919050565b611fa6806200048d6000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063a457c2d711610097578063d539139311610071578063d5391393146103fa578063d547741f14610421578063dd62ed3e14610434578063e63ab1e91461047a57600080fd5b8063a457c2d7146103c1578063a9059cbb146103d4578063ca15c873146103e757600080fd5b80639010d07c116100d35780639010d07c1461033557806391d148541461036d57806395d89b41146103b1578063a217fddf146103b957600080fd5b806370a08231146102e457806379cc67901461031a5780638456cb591461032d57600080fd5b8063313ce567116101665780633f4ba83a116101405780633f4ba83a146102ab57806340c10f19146102b357806342966c68146102c65780635c975abb146102d957600080fd5b8063313ce5671461027657806336568abe14610285578063395093511461029857600080fd5b806318160ddd116101a257806318160ddd1461021957806323b872dd1461022b578063248a9ca31461023e5780632f2ff15d1461026157600080fd5b806301ffc9a7146101c957806306fdde03146101f1578063095ea7b314610206575b600080fd5b6101dc6101d7366004611b44565b6104a1565b60405190151581526020015b60405180910390f35b6101f96104fd565b6040516101e89190611bb2565b6101dc610214366004611c2c565b61058f565b6004545b6040519081526020016101e8565b6101dc610239366004611c56565b6105a5565b61021d61024c366004611c92565b60009081526020819052604090206001015490565b61027461026f366004611cab565b610676565b005b604051601281526020016101e8565b610274610293366004611cab565b61069d565b6101dc6102a6366004611c2c565b6106bf565b610274610708565b6102746102c1366004611c2c565b6107ae565b6102746102d4366004611c92565b610858565b60075460ff166101dc565b61021d6102f2366004611cd7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b610274610328366004611c2c565b610865565b6102746108ff565b610348610343366004611cf2565b6109a3565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b6101dc61037b366004611cab565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f96109c2565b61021d600081565b6101dc6103cf366004611c2c565b6109d1565b6101dc6103e2366004611c2c565b610a8f565b61021d6103f5366004611c92565b610a9c565b61021d7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61027461042f366004611cab565b610ab3565b61021d610442366004611d14565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020908152604080832093909416825291909152205490565b61021d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f0000000000000000000000000000000000000000000000000000000014806104f757506104f782610ae9565b92915050565b60606005805461050c90611d3e565b80601f016020809104026020016040519081016040528092919081815260200182805461053890611d3e565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b5050505050905090565b600061059c338484610b80565b50600192915050565b60006105b2848484610cff565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602090815260408083203384529091529020548281101561065e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61066b8533858403610b80565b506001949350505050565b6106808282610f71565b60008281526001602052604090206106989082610ac7565b505050565b6106a78282610f97565b6000828152600160205260409020610698908261102c565b33600081815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161059c918590610703908690611dc1565b610b80565b6107327f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a3361037b565b6107a45760405162461bcd60e51b815260206004820152603960248201527f45524332305072657365744d696e7465725061757365723a206d75737420686160448201527f76652070617573657220726f6c6520746f20756e7061757365000000000000006064820152608401610655565b6107ac61104e565b565b6107d87f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a63361037b565b61084a5760405162461bcd60e51b815260206004820152603660248201527f45524332305072657365744d696e7465725061757365723a206d75737420686160448201527f7665206d696e74657220726f6c6520746f206d696e74000000000000000000006064820152608401610655565b6108548282611115565b5050565b6108623382611227565b50565b60006108718333610442565b9050818110156108e85760405162461bcd60e51b8152602060048201526024808201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760448201527f616e6365000000000000000000000000000000000000000000000000000000006064820152608401610655565b6108f58333848403610b80565b6106988383611227565b6109297f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a3361037b565b61099b5760405162461bcd60e51b815260206004820152603760248201527f45524332305072657365744d696e7465725061757365723a206d75737420686160448201527f76652070617573657220726f6c6520746f2070617573650000000000000000006064820152608401610655565b6107ac6113ec565b60008281526001602052604081206109bb9083611492565b9392505050565b60606006805461050c90611d3e565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205482811015610a785760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610655565b610a853385858403610b80565b5060019392505050565b600061059c338484610cff565b60008181526001602052604081206104f79061149e565b6106a782826114a8565b61085482826114ce565b60006109bb8373ffffffffffffffffffffffffffffffffffffffff84166115be565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104f757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146104f7565b73ffffffffffffffffffffffffffffffffffffffff8316610c085760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610655565b73ffffffffffffffffffffffffffffffffffffffff8216610c915760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610655565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d885760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610655565b73ffffffffffffffffffffffffffffffffffffffff8216610e115760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610655565b610e1c83838361160d565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602052604090205481811015610eb85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610655565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260026020526040808220858503905591851681529081208054849290610efc908490611dc1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f6291815260200190565b60405180910390a35b50505050565b600082815260208190526040902060010154610f8d8133611618565b61069883836114ce565b73ffffffffffffffffffffffffffffffffffffffff811633146110225760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610655565b61085482826116ce565b60006109bb8373ffffffffffffffffffffffffffffffffffffffff8416611785565b60075460ff166110a05760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610655565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff82166111785760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610655565b6111846000838361160d565b80600460008282546111969190611dc1565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040812080548392906111d0908490611dc1565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166112b05760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610655565b6112bc8260008361160d565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054818110156113585760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610655565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600260205260408120838303905560048054849290611394908490611dd9565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b60075460ff161561143f5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610655565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110eb3390565b60006109bb8383611878565b60006104f7825490565b6000828152602081905260409020600101546114c48133611618565b61069883836116ce565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166108545760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556115603390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000818152600183016020526040812054611605575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556104f7565b5060006104f7565b6106988383836118a2565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166108545761166e8173ffffffffffffffffffffffffffffffffffffffff16601461191b565b61167983602061191b565b60405160200161168a929190611df0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262461bcd60e51b825261065591600401611bb2565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156108545760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000818152600183016020526040812054801561186e5760006117a9600183611dd9565b85549091506000906117bd90600190611dd9565b90508181146118225760008660000182815481106117dd576117dd611e71565b906000526020600020015490508087600001848154811061180057611800611e71565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061183357611833611ea0565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506104f7565b60009150506104f7565b600082600001828154811061188f5761188f611e71565b9060005260206000200154905092915050565b60075460ff16156106985760405162461bcd60e51b815260206004820152602a60248201527f45524332305061757361626c653a20746f6b656e207472616e7366657220776860448201527f696c6520706175736564000000000000000000000000000000000000000000006064820152608401610655565b6060600061192a836002611ecf565b611935906002611dc1565b67ffffffffffffffff81111561194d5761194d611f0c565b6040519080825280601f01601f191660200182016040528015611977576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106119ae576119ae611e71565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611a1157611a11611e71565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000611a4d846002611ecf565b611a58906001611dc1565b90505b6001811115611af5577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611a9957611a99611e71565b1a60f81b828281518110611aaf57611aaf611e71565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93611aee81611f3b565b9050611a5b565b5083156109bb5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610655565b600060208284031215611b5657600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146109bb57600080fd5b60005b83811015611ba1578181015183820152602001611b89565b83811115610f6b5750506000910152565b6020815260008251806020840152611bd1816040850160208701611b86565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611c2757600080fd5b919050565b60008060408385031215611c3f57600080fd5b611c4883611c03565b946020939093013593505050565b600080600060608486031215611c6b57600080fd5b611c7484611c03565b9250611c8260208501611c03565b9150604084013590509250925092565b600060208284031215611ca457600080fd5b5035919050565b60008060408385031215611cbe57600080fd5b82359150611cce60208401611c03565b90509250929050565b600060208284031215611ce957600080fd5b6109bb82611c03565b60008060408385031215611d0557600080fd5b50508035926020909101359150565b60008060408385031215611d2757600080fd5b611d3083611c03565b9150611cce60208401611c03565b600181811c90821680611d5257607f821691505b60208210811415611d8c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611dd457611dd4611d92565b500190565b600082821015611deb57611deb611d92565b500390565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611e28816017850160208801611b86565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351611e65816028840160208801611b86565b01602801949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611f0757611f07611d92565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081611f4a57611f4a611d92565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea2646970667358221220279d5b6f44263b9c7a2fd8e5a6715f8168357d04499c7b1fed9172c006be848864736f6c63430008090033a2646970667358221220ac8d6c619affd4c59d71b416b87e6e7e116b5c247a3eae1b78fa4a14dbacc26964736f6c63430008090033", + ), + }, + { + contract: l1StandardERC721Factory, + // commit: https://github.com/oasysgames/oasys-optimism/blob/1386e7b9ea4e0dd7d67370991a0471c54b9a6888/packages/contracts/contracts/oasys/L1/token/L1StandardERC721Factory.sol + code: mustDecodeCode( + "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c4af445814610030575b600080fd5b61004361003e3660046101c6565b610045565b005b600033848484604051610057906100de565b61006494939291906102c8565b604051809103906000f080158015610080573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff16836040516100a89190610328565b604051908190038120907fbda470470721b5a2c56d61dc0aa9496dd02d39170f9dff803c35efbab673652290600090a350505050565b61316e806200034583390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261012c57600080fd5b813567ffffffffffffffff80821115610147576101476100ec565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561018d5761018d6100ec565b816040528381528660208588010111156101a657600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156101db57600080fd5b833567ffffffffffffffff808211156101f357600080fd5b6101ff8783880161011b565b9450602086013591508082111561021557600080fd5b6102218783880161011b565b9350604086013591508082111561023757600080fd5b506102448682870161011b565b9150509250925092565b60005b83811015610269578181015183820152602001610251565b83811115610278576000848401525b50505050565b6000815180845261029681602086016020860161024e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff851681526080602082015260006102f7608083018661027e565b8281036040840152610309818661027e565b9050828103606084015261031d818561027e565b979650505050505050565b6000825161033a81846020870161024e565b919091019291505056fe60806040523480156200001157600080fd5b506040516200316e3803806200316e8339810160408190526200003491620003cd565b8251839083906200004d9060029060208501906200025a565b508051620000639060039060208401906200025a565b5050600c805460ff191690555080516200008590600d9060208401906200025a565b5062000093600085620000f5565b620000bf7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a685620000f5565b620000eb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a85620000f5565b50505050620004bc565b6200010c82826200013860201b62000fb91760201c565b60008281526001602090815260409091206200013391839062000fc362000148821b17901c565b505050565b62000144828262000168565b5050565b60006200015f836001600160a01b03841662000208565b90505b92915050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000144576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001c43390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000818152600183016020526040812054620002515750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000162565b50600062000162565b82805462000268906200047f565b90600052602060002090601f0160209004810192826200028c5760008555620002d7565b82601f10620002a757805160ff1916838001178555620002d7565b82800160010185558215620002d7579182015b82811115620002d7578251825591602001919060010190620002ba565b50620002e5929150620002e9565b5090565b5b80821115620002e55760008155600101620002ea565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200032857600080fd5b81516001600160401b038082111562000345576200034562000300565b604051601f8301601f19908116603f0116810190828211818310171562000370576200037062000300565b816040528381526020925086838588010111156200038d57600080fd5b600091505b83821015620003b1578582018301518183018401529082019062000392565b83821115620003c35760008385830101525b9695505050505050565b60008060008060808587031215620003e457600080fd5b84516001600160a01b0381168114620003fc57600080fd5b60208601519094506001600160401b03808211156200041a57600080fd5b620004288883890162000316565b945060408701519150808211156200043f57600080fd5b6200044d8883890162000316565b935060608701519150808211156200046457600080fd5b50620004738782880162000316565b91505092959194509250565b600181811c908216806200049457607f821691505b60208210811415620004b657634e487b7160e01b600052602260045260246000fd5b50919050565b612ca280620004cc6000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80636352211e1161010f578063b88d4fde116100a2578063d539139311610071578063d53913931461041b578063d547741f14610442578063e63ab1e914610455578063e985e9c51461047c57600080fd5b8063b88d4fde146103cf578063c87b56dd146103e2578063ca15c873146103f5578063d35e29d71461040857600080fd5b806391d14854116100de57806391d148541461037557806395d89b41146103ac578063a217fddf146103b4578063a22cb465146103bc57600080fd5b80636352211e1461033457806370a08231146103475780638456cb591461035a5780639010d07c1461036257600080fd5b80632f2ff15d1161018757806342842e0e1161015657806342842e0e146102f057806342966c68146103035780634f6ccce7146103165780635c975abb1461032957600080fd5b80632f2ff15d146102af5780632f745c59146102c257806336568abe146102d55780633f4ba83a146102e857600080fd5b8063095ea7b3116101c3578063095ea7b31461025257806318160ddd1461026757806323b872dd14610279578063248a9ca31461028c57600080fd5b806301ffc9a7146101ea57806306fdde0314610212578063081812fc14610227575b600080fd5b6101fd6101f83660046125e3565b6104b8565b60405190151581526020015b60405180910390f35b61021a6104c9565b6040516102099190612676565b61023a610235366004612689565b61055b565b6040516001600160a01b039091168152602001610209565b6102656102603660046126be565b610606565b005b600a545b604051908152602001610209565b6102656102873660046126e8565b610738565b61026b61029a366004612689565b60009081526020819052604090206001015490565b6102656102bd366004612724565b6107c0565b61026b6102d03660046126be565b6107e2565b6102656102e3366004612724565b61088a565b6102656108ac565b6102656102fe3660046126e8565b610952565b610265610311366004612689565b61096d565b61026b610324366004612689565b6109f4565b600c5460ff166101fd565b61023a610342366004612689565b610a98565b61026b610355366004612750565b610b23565b610265610bbd565b61023a61037036600461276b565b610c61565b6101fd610383366004612724565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61021a610c80565b61026b600081565b6102656103ca36600461278d565b610c8f565b6102656103dd3660046127f8565b610d72565b61021a6103f0366004612689565b610e00565b61026b610403366004612689565b610ee8565b6102656104163660046128f2565b610eff565b61026b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610265610450366004612724565b610faf565b61026b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6101fd61048a366004612927565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b60006104c382610fd8565b92915050565b6060600280546104d890612951565b80601f016020809104026020016040519081016040528092919081815260200182805461050490612951565b80156105515780601f1061052657610100808354040283529160200191610551565b820191906000526020600020905b81548152906001019060200180831161053457829003601f168201915b5050505050905090565b6000818152600460205260408120546001600160a01b03166105ea5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061061182610a98565b9050806001600160a01b0316836001600160a01b0316141561069b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084016105e1565b336001600160a01b03821614806106b757506106b7813361048a565b6107295760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016105e1565b610733838361102e565b505050565b610743335b826110b4565b6107b55760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016105e1565b6107338383836111bc565b6107ca82826113ac565b60008281526001602052604090206107339082610fc3565b60006107ed83610b23565b82106108615760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e647300000000000000000000000000000000000000000060648201526084016105e1565b506001600160a01b03919091166000908152600860209081526040808320938352929052205490565b61089482826113d2565b6000828152600160205260409020610733908261145a565b6108d67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33610383565b6109485760405162461bcd60e51b815260206004820152603260248201527f4c315374616e646172644552433732313a206d7573742068617665207061757360448201527f657220726f6c6520746f20756e7061757365000000000000000000000000000060648201526084016105e1565b61095061146f565b565b61073383838360405180602001604052806000815250610d72565b6109763361073d565b6109e85760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f7665640000000000000000000000000000000060648201526084016105e1565b6109f181611529565b50565b60006109ff600a5490565b8210610a735760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e6473000000000000000000000000000000000000000060648201526084016105e1565b600a8281548110610a8657610a866129a5565b90600052602060002001549050919050565b6000818152600460205260408120546001600160a01b0316806104c35760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e000000000000000000000000000000000000000000000060648201526084016105e1565b60006001600160a01b038216610ba15760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f20616464726573730000000000000000000000000000000000000000000060648201526084016105e1565b506001600160a01b031660009081526005602052604090205490565b610be77f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33610383565b610c595760405162461bcd60e51b815260206004820152603060248201527f4c315374616e646172644552433732313a206d7573742068617665207061757360448201527f657220726f6c6520746f2070617573650000000000000000000000000000000060648201526084016105e1565b6109506115e8565b6000828152600160205260408120610c79908361168e565b9392505050565b6060600380546104d890612951565b6001600160a01b038216331415610ce85760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105e1565b3360008181526007602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610d7c33836110b4565b610dee5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016105e1565b610dfa8484848461169a565b50505050565b6000818152600460205260409020546060906001600160a01b0316610e8d5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e000000000000000000000000000000000060648201526084016105e1565b6000610e97611723565b90506000815111610eb75760405180602001604052806000815250610c79565b80610ec184611732565b604051602001610ed29291906129d4565b6040516020818303038152906040529392505050565b60008181526001602052604081206104c390611864565b610f297f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633610383565b610f9b5760405162461bcd60e51b815260206004820152602f60248201527f4c315374616e646172644552433732313a206d7573742068617665206d696e7460448201527f657220726f6c6520746f206d696e74000000000000000000000000000000000060648201526084016105e1565b610fab828263ffffffff1661186e565b5050565b61089482826119d4565b610fab82826119fa565b6000610c79836001600160a01b038416611ab6565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806104c357506104c382611b05565b600081815260066020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416908117909155819061107b82610a98565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600460205260408120546001600160a01b031661113e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016105e1565b600061114983610a98565b9050806001600160a01b0316846001600160a01b031614806111845750836001600160a01b03166111798461055b565b6001600160a01b0316145b806111b457506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166111cf82610a98565b6001600160a01b03161461124b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e000000000000000000000000000000000000000000000060648201526084016105e1565b6001600160a01b0382166112c65760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016105e1565b6112d1838383611ba7565b6112dc60008261102e565b6001600160a01b0383166000908152600560205260408120805460019290611305908490612a32565b90915550506001600160a01b0382166000908152600560205260408120805460019290611333908490612a49565b909155505060008181526004602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000828152602081905260409020600101546113c88133611bb2565b61073383836119fa565b6001600160a01b03811633146114505760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016105e1565b610fab8282611c4e565b6000610c79836001600160a01b038416611ceb565b600c5460ff166114c15760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016105e1565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600061153482610a98565b905061154281600084611ba7565b61154d60008361102e565b6001600160a01b0381166000908152600560205260408120805460019290611576908490612a32565b909155505060008281526004602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600c5460ff161561163b5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016105e1565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861150c3390565b6000610c798383611dde565b6116a58484846111bc565b6116b184848484611e08565b610dfa5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016105e1565b6060600d80546104d890612951565b60608161177257505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561179c578061178681612a61565b91506117959050600a83612ac9565b9150611776565b60008167ffffffffffffffff8111156117b7576117b76127c9565b6040519080825280601f01601f1916602001820160405280156117e1576020820181803683370190505b5090505b84156111b4576117f6600183612a32565b9150611803600a86612add565b61180e906030612a49565b60f81b818381518110611823576118236129a5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061185d600a86612ac9565b94506117e5565b60006104c3825490565b6001600160a01b0382166118c45760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105e1565b6000818152600460205260409020546001600160a01b0316156119295760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105e1565b61193560008383611ba7565b6001600160a01b038216600090815260056020526040812080546001929061195e908490612a49565b909155505060008181526004602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000828152602081905260409020600101546119f08133611bb2565b6107338383611c4e565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610fab576000828152602081815260408083206001600160a01b0385168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611a723390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000818152600183016020526040812054611afd575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556104c3565b5060006104c3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480611b9857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806104c357506104c382611fd3565b610733838383612029565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610fab57611bee816001600160a01b031660146120ad565b611bf98360206120ad565b604051602001611c0a929190612af1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262461bcd60e51b82526105e191600401612676565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1615610fab576000828152602081815260408083206001600160a01b038516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008181526001830160205260408120548015611dd4576000611d0f600183612a32565b8554909150600090611d2390600190612a32565b9050818114611d88576000866000018281548110611d4357611d436129a5565b9060005260206000200154905080876000018481548110611d6657611d666129a5565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611d9957611d99612b72565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506104c3565b60009150506104c3565b6000826000018281548110611df557611df56129a5565b9060005260206000200154905092915050565b60006001600160a01b0384163b15611fc8576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290611e65903390899088908890600401612ba1565b602060405180830381600087803b158015611e7f57600080fd5b505af1925050508015611ecd575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611eca91810190612bdd565b60015b611f7d573d808015611efb576040519150601f19603f3d011682016040523d82523d6000602084013e611f00565b606091505b508051611f755760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016105e1565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490506111b4565b506001949350505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f0000000000000000000000000000000000000000000000000000000014806104c357506104c3826122d6565b61203483838361236d565b600c5460ff16156107335760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201527f68696c652070617573656400000000000000000000000000000000000000000060648201526084016105e1565b606060006120bc836002612bfa565b6120c7906002612a49565b67ffffffffffffffff8111156120df576120df6127c9565b6040519080825280601f01601f191660200182016040528015612109576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612140576121406129a5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106121a3576121a36129a5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006121df846002612bfa565b6121ea906001612a49565b90505b6001811115612287577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061222b5761222b6129a5565b1a60f81b828281518110612241576122416129a5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c9361228081612c37565b90506121ed565b508315610c795760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016105e1565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104c357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146104c3565b6001600160a01b0383166123c8576123c381600a80546000838152600b60205260408120829055600182018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80155565b6123eb565b816001600160a01b0316836001600160a01b0316146123eb576123eb8382612425565b6001600160a01b03821661240257610733816124c2565b826001600160a01b0316826001600160a01b031614610733576107338282612571565b6000600161243284610b23565b61243c9190612a32565b60008381526009602052604090205490915080821461248f576001600160a01b03841660009081526008602090815260408083208584528252808320548484528184208190558352600990915290208190555b5060009182526009602090815260408084208490556001600160a01b039094168352600881528383209183525290812055565b600a546000906124d490600190612a32565b6000838152600b6020526040812054600a80549394509092849081106124fc576124fc6129a5565b9060005260206000200154905080600a838154811061251d5761251d6129a5565b6000918252602080832090910192909255828152600b9091526040808220849055858252812055600a80548061255557612555612b72565b6001900381819060005260206000200160009055905550505050565b600061257c83610b23565b6001600160a01b039093166000908152600860209081526040808320868452825280832085905593825260099052919091209190915550565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146109f157600080fd5b6000602082840312156125f557600080fd5b8135610c79816125b5565b60005b8381101561261b578181015183820152602001612603565b83811115610dfa5750506000910152565b60008151808452612644816020860160208601612600565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610c79602083018461262c565b60006020828403121561269b57600080fd5b5035919050565b80356001600160a01b03811681146126b957600080fd5b919050565b600080604083850312156126d157600080fd5b6126da836126a2565b946020939093013593505050565b6000806000606084860312156126fd57600080fd5b612706846126a2565b9250612714602085016126a2565b9150604084013590509250925092565b6000806040838503121561273757600080fd5b82359150612747602084016126a2565b90509250929050565b60006020828403121561276257600080fd5b610c79826126a2565b6000806040838503121561277e57600080fd5b50508035926020909101359150565b600080604083850312156127a057600080fd5b6127a9836126a2565b9150602083013580151581146127be57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000806080858703121561280e57600080fd5b612817856126a2565b9350612825602086016126a2565b925060408501359150606085013567ffffffffffffffff8082111561284957600080fd5b818701915087601f83011261285d57600080fd5b81358181111561286f5761286f6127c9565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156128b5576128b56127c9565b816040528281528a60208487010111156128ce57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561290557600080fd5b61290e836126a2565b9150602083013563ffffffff811681146127be57600080fd5b6000806040838503121561293a57600080fd5b612943836126a2565b9150612747602084016126a2565b600181811c9082168061296557607f821691505b6020821081141561299f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600083516129e6818460208801612600565b8351908301906129fa818360208801612600565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612a4457612a44612a03565b500390565b60008219821115612a5c57612a5c612a03565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612a9357612a93612a03565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612ad857612ad8612a9a565b500490565b600082612aec57612aec612a9a565b500690565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612b29816017850160208801612600565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351612b66816028840160208801612600565b01602801949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006001600160a01b03808716835280861660208401525083604083015260806060830152612bd3608083018461262c565b9695505050505050565b600060208284031215612bef57600080fd5b8151610c79816125b5565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c3257612c32612a03565b500290565b600081612c4657612c46612a03565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea26469706673582212200bcacce717a531f5447904ba237f25df82679c2bb4d6411537ea678c1245a59b64736f6c63430008090033a26469706673582212205635b6b0f1feb1896524fbca96231ccea89d8ba1c74757babe25ae65f48af29f64736f6c63430008090033", + ), + }, + { + contract: l1BuildParam, + // commit: https://github.com/oasysgames/oasys-optimism/blob/1386e7b9ea4e0dd7d67370991a0471c54b9a6888/packages/contracts/contracts/oasys/L1/build/L1BuildParam.sol + code: mustDecodeCode( + "0x608060405234801561001057600080fd5b50600436106100c95760003560e01c80638d38c6c111610081578063e46020a11161005b578063e46020a11461013e578063e654b1fb14610147578063f066ab8a1461015057600080fd5b80638d38c6c114610124578063ca6573fb1461012d578063ccf987c81461013557600080fd5b806333f67e6a116100b257806333f67e6a146100fe57806335f7317c146101075780635f3d8cf91461010f57600080fd5b80630d1eb646146100ce57806332f51723146100e9575b600080fd5b6100d6610163565b6040519081526020015b60405180910390f35b6100f1610181565b6040516100e091906103dd565b6100d660045481565b6100f161020f565b61012261011d36600461047f565b61021c565b005b6100d660005481565b6100d66102ae565b6100d660015481565b6100d660035481565b6100d660025481565b61012261015e36600461047f565b6102bf565b6000600660405161017491906105a2565b6040518091039020905090565b6005805461018e9061054e565b80601f01602080910402602001604051908101604052809291908181526020018280546101ba9061054e565b80156102075780601f106101dc57610100808354040283529160200191610207565b820191906000526020600020905b8154815290600101906020018083116101ea57829003601f168201915b505050505081565b6006805461018e9061054e565b600580546102299061054e565b159050610297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f74686520636f64652068617320616c7265616479206265656e2073657400000060448201526064015b60405180910390fd5b80516102aa906005906020840190610344565b5050565b6000600560405161017491906105a2565b600680546102cc9061054e565b159050610335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f74686520636f64652068617320616c7265616479206265656e20736574000000604482015260640161028e565b80516102aa9060069060208401905b8280546103509061054e565b90600052602060002090601f01602090048101928261037257600085556103b8565b82601f1061038b57805160ff19168380011785556103b8565b828001600101855582156103b8579182015b828111156103b857825182559160200191906001019061039d565b506103c49291506103c8565b5090565b5b808211156103c457600081556001016103c9565b600060208083528351808285015260005b8181101561040a578581018301518582016040015282016103ee565b8181111561041c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561049157600080fd5b813567ffffffffffffffff808211156104a957600080fd5b818401915084601f8301126104bd57600080fd5b8135818111156104cf576104cf610450565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561051557610515610450565b8160405282815287602084870101111561052e57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600181811c9082168061056257607f821691505b6020821081141561059c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080835481600182811c9150808316806105be57607f831692505b60208084108214156105f7577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b81801561060b576001811461063a57610667565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650610667565b60008a81526020902060005b8681101561065f5781548b820152908501908301610646565b505084890196505b50949897505050505050505056fea264697066735822122098ada51d0593017691b400941339ca317312a35e536abc51d007c2120a0044a864736f6c63430008090033", + ), + storage: storage{ + // uint256 public maxTransactionGasLimit + "0x00": big.NewInt(15_000_000), + // uint256 public l2GasDiscountDivisor + "0x01": big.NewInt(32), + // uint256 public enqueueGasCost + "0x02": big.NewInt(60_000), + // uint256 public fraudProofWindow + "0x03": big.NewInt(604_800), + // uint256 public sequencerPublishWindow + "0x04": big.NewInt(12_592_000), + // bytes public l1StandardBridgeCode, commit: https://github.com/oasysgames/oasys-optimism/blob/28313096a0cc758c3d4fbdc29a2078a5ef78cb70/packages/contracts/contracts/L1/messaging/L1StandardBridge.sol + "0x05": "0x6080604052600436106100c05760003560e01c80638b4c40b0116100745780639a2ac6d51161004e5780639a2ac6d514610288578063a9f9e6751461029b578063b1a1a882146102bb57600080fd5b80638b4c40b0146101375780638f601f661461021557806391c49bf81461025b57600080fd5b8063485cc955116100a5578063485cc955146101b557806358a997f6146101d5578063838b2520146101f557600080fd5b80631532ec341461013e5780633cb747bf1461015e57600080fd5b3661013957333b156101195760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f41000000000000000000000000000000000060448201526064015b60405180910390fd5b610137333362030d40604051806020016040528060008152506102ce565b005b600080fd5b34801561014a57600080fd5b50610137610159366004611357565b61041a565b34801561016a57600080fd5b5060005461018b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101c157600080fd5b506101376101d03660046113ca565b610790565b3480156101e157600080fd5b506101376101f036600461141c565b61086f565b34801561020157600080fd5b5061013761021036600461149f565b6108d6565b34801561022157600080fd5b5061024d6102303660046113ca565b600260209081526000928352604080842090915290825290205481565b6040519081526020016101ac565b34801561026757600080fd5b5060015461018b9073ffffffffffffffffffffffffffffffffffffffff1681565b610137610296366004611535565b6108ef565b3480156102a757600080fd5b506101376102b6366004611598565b610937565b6101376102c9366004611611565b610c59565b600063662a633a60e01b600073deaddeaddeaddeaddeaddeaddeaddeaddead000087873487604051602401610308969594939291906116da565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001549091506103ac9073ffffffffffffffffffffffffffffffffffffffff168483610cef565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23348560405161040b929190611735565b60405180910390a35050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1661045260005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104f25760405162461bcd60e51b815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e746963617465640000000000000000000000000000000000006064820152608401610110565b8073ffffffffffffffffffffffffffffffffffffffff1661052860005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b815260040160206040518083038186803b15801561056d57600080fd5b505afa158015610581573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a5919061174e565b73ffffffffffffffffffffffffffffffffffffffff161461062e5760405162461bcd60e51b815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d657373616765000000000000000000000000000000006064820152608401610110565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8716908690604051610665919061176b565b60006040518083038185875af1925050503d80600081146106a2576040519150601f19603f3d011682016040523d82523d6000602084013e6106a7565b606091505b505090508061071e5760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527f20455448207472616e73666572206661696c65640000000000000000000000006064820152608401610110565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e63187878760405161077f939291906117d0565b60405180910390a350505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff161561081c5760405162461bcd60e51b815260206004820152602660248201527f436f6e74726163742068617320616c7265616479206265656e20696e6974696160448201527f6c697a65642e00000000000000000000000000000000000000000000000000006064820152608401610110565b6000805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560018054929093169116179055565b333b156108be5760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f4100000000000000000000000000000000006044820152606401610110565b6108ce8686333388888888610d77565b505050505050565b6108e68787338888888888610d77565b50505050505050565b61093133858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506102ce92505050565b50505050565b60015473ffffffffffffffffffffffffffffffffffffffff1661096f60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a0f5760405162461bcd60e51b815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e746963617465640000000000000000000000000000000000006064820152608401610110565b8073ffffffffffffffffffffffffffffffffffffffff16610a4560005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b815260040160206040518083038186803b158015610a8a57600080fd5b505afa158015610a9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac2919061174e565b73ffffffffffffffffffffffffffffffffffffffff1614610b4b5760405162461bcd60e51b815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d657373616765000000000000000000000000000000006064820152608401610110565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b1683529290522054610b89908590611822565b73ffffffffffffffffffffffffffffffffffffffff808a166000818152600260209081526040808320948d1683529390529190912091909155610bcd908686610f27565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b388888888604051610c479493929190611839565b60405180910390a45050505050505050565b333b15610ca85760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f4100000000000000000000000000000000006044820152606401610110565b610cea33338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506102ce92505050565b505050565b6000546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b90610d4990869085908790600401611879565b600060405180830381600087803b158015610d6357600080fd5b505af11580156108e6573d6000803e3d6000fd5b610d9973ffffffffffffffffffffffffffffffffffffffff8916873087610ffb565b600063662a633a60e01b89898989898888604051602401610dc097969594939291906118be565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600154909150610e649073ffffffffffffffffffffffffffffffffffffffff168583610cef565b73ffffffffffffffffffffffffffffffffffffffff808a166000908152600260209081526040808320938c1683529290522054610ea290869061191b565b73ffffffffffffffffffffffffffffffffffffffff808b1660008181526002602090815260408083208e86168085529252918290209490945551918a1692917f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039690610f14908b908b908a908a90611839565b60405180910390a4505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610cea9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611059565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526109319085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401610f79565b60006110bb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661114b9092919063ffffffff16565b805190915015610cea57808060200190518101906110d99190611933565b610cea5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610110565b606061115a8484600085611164565b90505b9392505050565b6060824710156111dc5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610110565b843b61122a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610110565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611253919061176b565b60006040518083038185875af1925050503d8060008114611290576040519150601f19603f3d011682016040523d82523d6000602084013e611295565b606091505b50915091506112a58282866112b0565b979650505050505050565b606083156112bf57508161115d565b8251156112cf5782518084602001fd5b8160405162461bcd60e51b81526004016101109190611955565b73ffffffffffffffffffffffffffffffffffffffff8116811461130b57600080fd5b50565b60008083601f84011261132057600080fd5b50813567ffffffffffffffff81111561133857600080fd5b60208301915083602082850101111561135057600080fd5b9250929050565b60008060008060006080868803121561136f57600080fd5b853561137a816112e9565b9450602086013561138a816112e9565b935060408601359250606086013567ffffffffffffffff8111156113ad57600080fd5b6113b98882890161130e565b969995985093965092949392505050565b600080604083850312156113dd57600080fd5b82356113e8816112e9565b915060208301356113f8816112e9565b809150509250929050565b803563ffffffff8116811461141757600080fd5b919050565b60008060008060008060a0878903121561143557600080fd5b8635611440816112e9565b95506020870135611450816112e9565b94506040870135935061146560608801611403565b9250608087013567ffffffffffffffff81111561148157600080fd5b61148d89828a0161130e565b979a9699509497509295939492505050565b600080600080600080600060c0888a0312156114ba57600080fd5b87356114c5816112e9565b965060208801356114d5816112e9565b955060408801356114e5816112e9565b9450606088013593506114fa60808901611403565b925060a088013567ffffffffffffffff81111561151657600080fd5b6115228a828b0161130e565b989b979a50959850939692959293505050565b6000806000806060858703121561154b57600080fd5b8435611556816112e9565b935061156460208601611403565b9250604085013567ffffffffffffffff81111561158057600080fd5b61158c8782880161130e565b95989497509550505050565b600080600080600080600060c0888a0312156115b357600080fd5b87356115be816112e9565b965060208801356115ce816112e9565b955060408801356115de816112e9565b945060608801356115ee816112e9565b93506080880135925060a088013567ffffffffffffffff81111561151657600080fd5b60008060006040848603121561162657600080fd5b61162f84611403565b9250602084013567ffffffffffffffff81111561164b57600080fd5b6116578682870161130e565b9497909650939450505050565b60005b8381101561167f578181015183820152602001611667565b838111156109315750506000910152565b600081518084526116a8816020860160208601611664565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a083015261172960c0830184611690565b98975050505050505050565b82815260406020820152600061115a6040830184611690565b60006020828403121561176057600080fd5b815161115d816112e9565b6000825161177d818460208701611664565b9190910192915050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8381526040602082015260006117ea604083018486611787565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611834576118346117f3565b500390565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015260606040820152600061186f606083018486611787565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006118a86060830185611690565b905063ffffffff83166040830152949350505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261190e60c083018486611787565b9998505050505050505050565b6000821982111561192e5761192e6117f3565b500190565b60006020828403121561194557600080fd5b8151801515811461115d57600080fd5b60208152600061115d602083018461169056fea2646970667358221220ab0015e7cee64db6dc95e6eb0899ae4017c78ab54ebce874e3b018a7bc88850364736f6c63430008090033", + // bytes public l1ERC721BridgeCode, commit: https://github.com/oasysgames/oasys-optimism/blob/1e4bd056e8b1088d28d0125a89b4a2822c064bc0/packages/contracts/contracts/oasys/L1/messaging/L1ERC721Bridge.sol + "0x06": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c80638f45e477116100505780638f45e477146100e8578063c1bcfa4f146100fb578063dbfc9c3f1461010e57600080fd5b806330389967146100775780633cb747bf1461008c578063485cc955146100d5575b600080fd5b61008a6100853660046108f7565b61012e565b005b6000546100ac9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61008a6100e336600461097a565b6101b4565b61008a6100f63660046109b3565b610287565b61008a610109366004610a4b565b6105e9565b6001546100ac9073ffffffffffffffffffffffffffffffffffffffff1681565b333b1561019c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4163636f756e74206e6f7420454f41000000000000000000000000000000000060448201526064015b60405180910390fd5b6101ac8686333388888888610602565b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1615610234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e697469616c697a65206f6e6c79206f6e63650000000000000000000000006044820152606401610193565b6000805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560018054929093169116179055565b60015473ffffffffffffffffffffffffffffffffffffffff166102bf60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e746963617465640000000000000000000000000000000000006064820152608401610193565b8073ffffffffffffffffffffffffffffffffffffffff166103af60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b815260040160206040518083038186803b1580156103f457600080fd5b505afa158015610408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042c9190610ac2565b73ffffffffffffffffffffffffffffffffffffffff16146104cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d657373616765000000000000000000000000000000006064820152608401610193565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8681166024830152604482018690528916906323b872dd90606401600060405180830381600087803b15801561054557600080fd5b505af1158015610559573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f7fb3671da6a9a3c4b54a15e06575a4fa57d6264ad848930a6ea490e03e7514c1888888886040516105d79493929190610b2f565b60405180910390a45050505050505050565b6105f98787338888888888610602565b50505050505050565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152306024830152604482018690528916906323b872dd90606401600060405180830381600087803b15801561067857600080fd5b505af115801561068c573d6000803e3d6000fd5b50505050600063662a633a60e01b898989898988886040516024016106b79796959493929190610b6f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260015490915061075b9073ffffffffffffffffffffffffffffffffffffffff1685836107e8565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fd660bea642cb3af692ff947912f15e82ec86ad0796523ba971c5f369a6f989c5898988886040516107d59493929190610b2f565b60405180910390a4505050505050505050565b6000546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b9061084290869085908790600401610bcc565b600060405180830381600087803b15801561085c57600080fd5b505af11580156105f9573d6000803e3d6000fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461089257600080fd5b50565b803563ffffffff811681146108a957600080fd5b919050565b60008083601f8401126108c057600080fd5b50813567ffffffffffffffff8111156108d857600080fd5b6020830191508360208285010111156108f057600080fd5b9250929050565b60008060008060008060a0878903121561091057600080fd5b863561091b81610870565b9550602087013561092b81610870565b94506040870135935061094060608801610895565b9250608087013567ffffffffffffffff81111561095c57600080fd5b61096889828a016108ae565b979a9699509497509295939492505050565b6000806040838503121561098d57600080fd5b823561099881610870565b915060208301356109a881610870565b809150509250929050565b600080600080600080600060c0888a0312156109ce57600080fd5b87356109d981610870565b965060208801356109e981610870565b955060408801356109f981610870565b94506060880135610a0981610870565b93506080880135925060a088013567ffffffffffffffff811115610a2c57600080fd5b610a388a828b016108ae565b989b979a50959850939692959293505050565b600080600080600080600060c0888a031215610a6657600080fd5b8735610a7181610870565b96506020880135610a8181610870565b95506040880135610a9181610870565b945060608801359350610aa660808901610895565b925060a088013567ffffffffffffffff811115610a2c57600080fd5b600060208284031215610ad457600080fd5b8151610adf81610870565b9392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000610b65606083018486610ae6565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a0830152610bbf60c083018486610ae6565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815260006020606081840152845180606085015260005b81811015610c1657868101830151858201608001528201610bfa565b81811115610c28576000608083870101525b5063ffffffff9490941660408401525050601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016016080019291505056fea2646970667358221220f73507ccec51c3b566074a4e2360e8d06d794b8fdd194ace99d5c7c228a73b4664736f6c63430008090033", + }, + }, + { + contract: l1BuildDeposit, + // commit: https://github.com/oasysgames/oasys-optimism/blob/20eff6890c0b64dc9e8a1e36f347c4d561a1e411/packages/contracts/contracts/oasys/L1/build/L1BuildDeposit.sol + code: mustDecodeCode( + "0x6080604052600436106100e85760003560e01c80636504eff61161008a578063f340fa0111610059578063f340fa0114610310578063f3701da214610323578063f3fef3a314610343578063f45b1b3a1461036357600080fd5b80636504eff61461026a5780636c5928bf14610297578063c4d66de8146102ad578063c76474db146102cd57600080fd5b806338613690116100c657806338613690146101c257806344004cc11461021457806348b9ef40146102345780635e5f2e261461024a57600080fd5b8063061be895146100ed57806319b189ff146101435780631cad5a40146101a0575b600080fd5b3480156100f957600080fd5b50610130610108366004611214565b73ffffffffffffffffffffffffffffffffffffffff1660009081526007602052604090205490565b6040519081526020015b60405180910390f35b34801561014f57600080fd5b5061013061015e366004611236565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526006602090815260408083209584168352948152848220939092168152919052205490565b3480156101ac57600080fd5b506101c06101bb366004611279565b610383565b005b3480156101ce57600080fd5b506003546101ef9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013a565b34801561022057600080fd5b506101c061022f366004611279565b6105b8565b34801561024057600080fd5b5061013060005481565b34801561025657600080fd5b506101ef6102653660046112b5565b6107d5565b34801561027657600080fd5b506002546101ef9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102a357600080fd5b5061013060015481565b3480156102b957600080fd5b506101c06102c8366004611214565b61080c565b3480156102d957600080fd5b506101306102e8366004611214565b73ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205490565b6101c061031e366004611214565b6108b9565b34801561032f57600080fd5b506101c061033e366004611214565b610929565b34801561034f57600080fd5b506101c061035e3660046112ce565b610ada565b34801561036f57600080fd5b5061013061037e3660046112f8565b610bfa565b6103f460048054806020026020016040519081016040528092919081815260200182805480156103e957602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103be575b505050505083610c53565b6104455760405162461bcd60e51b815260206004820152601160248201527f4552433230206e6f7420616c6c6f77656400000000000000000000000000000060448201526064015b60405180910390fd5b3361045284828585610cd7565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015230602483015260448201849052600091908516906323b872dd90606401602060405180830381600087803b1580156104cc57600080fd5b505af11580156104e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610504919061132b565b9050806105535760405162461bcd60e51b815260206004820152601560248201527f4552433230207472616e73666572206661696c65640000000000000000000000604482015260640161043c565b6040805173ffffffffffffffffffffffffffffffffffffffff84811682528681166020830152918101859052908616907f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a96906060015b60405180910390a25050505050565b61062760048054806020026020016040519081016040528092919081815260200182805480156103e95760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103be57505050505083610c53565b6106735760405162461bcd60e51b815260206004820152601160248201527f4552433230206e6f7420616c6c6f776564000000000000000000000000000000604482015260640161043c565b3361068084828585610f8d565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152602482018490526000919085169063a9059cbb90604401602060405180830381600087803b1580156106f457600080fd5b505af1158015610708573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072c919061132b565b90508061077b5760405162461bcd60e51b815260206004820152601560248201527f4552433230207472616e73666572206661696c65640000000000000000000000604482015260640161043c565b6040805173ffffffffffffffffffffffffffffffffffffffff84811682528681166020830152918101859052908616907f342e7ff505a8a0364cd0dc2ff195c315e43bce86b204846ecd36913e117b109e906060016105a9565b600481815481106107e557600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60035473ffffffffffffffffffffffffffffffffffffffff16156108725760405162461bcd60e51b815260206004820152601460248201527f696e697469616c697a65206f6e6c79206f6e6365000000000000000000000000604482015260640161043c565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b33346108c88383600084610cd7565b6040805173ffffffffffffffffffffffffffffffffffffffff848116825260006020830152918101839052908416907f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a969060600160405180910390a2505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146109905760405162461bcd60e51b815260206004820152601d60248201527f6f6e6c79204c314275696c644167656e742063616e2063616c6c206d65000000604482015260640161043c565b6000805473ffffffffffffffffffffffffffffffffffffffff8316825260056020526040909120541015610a065760405162461bcd60e51b815260206004820152601760248201527f6465706f73697420616d6f756e742073686f7274616765000000000000000000604482015260640161043c565b73ffffffffffffffffffffffffffffffffffffffff811660009081526007602052604090205415610a795760405162461bcd60e51b815260206004820152601860248201527f616c7265616479206275696c74206279206275696c6465720000000000000000604482015260640161043c565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260076020908152604091829020439081905591519182527fd8406a18b0c7572d0adae5f0a479d5d802035e2c506e9353b092d25997f61a62910160405180910390a250565b33610ae88382600085610f8d565b60008173ffffffffffffffffffffffffffffffffffffffff168360405160006040518083038185875af1925050503d8060008114610b42576040519150601f19603f3d011682016040523d82523d6000602084013e610b47565b606091505b5050905080610b985760405162461bcd60e51b815260206004820152601360248201527f4f4153207472616e73666572206661696c656400000000000000000000000000604482015260640161043c565b6040805173ffffffffffffffffffffffffffffffffffffffff848116825260006020830152918101859052908516907f342e7ff505a8a0364cd0dc2ff195c315e43bce86b204846ecd36913e117b109e9060600160405180910390a250505050565b73ffffffffffffffffffffffffffffffffffffffff82811660009081527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f860209081526040808320938516835292905220545b92915050565b8151600090815b81811015610ccc578373ffffffffffffffffffffffffffffffffffffffff16858281518110610c8b57610c8b61134d565b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415610cba57600192505050610c4d565b80610cc4816113ab565b915050610c5a565b506000949350505050565b73ffffffffffffffffffffffffffffffffffffffff8416610d3a5760405162461bcd60e51b815260206004820152601760248201527f6275696c646572206973207a65726f2061646472657373000000000000000000604482015260640161043c565b6002546040517f322433e300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529091169063322433e39060240160206040518083038186803b158015610da557600080fd5b505afa158015610db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddd919061132b565b610e295760405162461bcd60e51b815260206004820152601360248201527f6275696c646572206e6f7420616c6c6f77656400000000000000000000000000604482015260640161043c565b60008111610e795760405162461bcd60e51b815260206004820152600e60248201527f616d6f756e74206973207a65726f000000000000000000000000000000000000604482015260640161043c565b6000805473ffffffffffffffffffffffffffffffffffffffff861682526005602052604090912054610eac9083906113e4565b1115610efa5760405162461bcd60e51b815260206004820152601360248201527f6f766572206465706f73697420616d6f756e7400000000000000000000000000604482015260640161043c565b73ffffffffffffffffffffffffffffffffffffffff841660009081526005602052604081208054839290610f2f9084906113e4565b909155505073ffffffffffffffffffffffffffffffffffffffff80831660009081526006602090815260408083208885168452825280832093871683529290529081208054839290610f829084906113e4565b909155505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416610ff05760405162461bcd60e51b815260206004820152601760248201527f6275696c646572206973207a65726f2061646472657373000000000000000000604482015260640161043c565b600081116110405760405162461bcd60e51b815260206004820152600e60248201527f616d6f756e74206973207a65726f000000000000000000000000000000000000604482015260640161043c565b73ffffffffffffffffffffffffffffffffffffffff841660009081526007602052604090205480158061107f5750436001548261107d91906113e4565b105b6110cb5760405162461bcd60e51b815260206004820152600c60248201527f7768696c65206c6f636b65640000000000000000000000000000000000000000604482015260640161043c565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260066020908152604080832089851684528252808320938816835292905220548211156111575760405162461bcd60e51b815260206004820152601c60248201527f796f7572206465706f73697420616d6f756e742073686f727461676500000000604482015260640161043c565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600560205260408120805484929061118c9084906113fc565b909155505073ffffffffffffffffffffffffffffffffffffffff808416600090815260066020908152604080832089851684528252808320938816835292905290812080548492906111df9084906113fc565b90915550505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461120f57600080fd5b919050565b60006020828403121561122657600080fd5b61122f826111eb565b9392505050565b60008060006060848603121561124b57600080fd5b611254846111eb565b9250611262602085016111eb565b9150611270604085016111eb565b90509250925092565b60008060006060848603121561128e57600080fd5b611297846111eb565b92506112a5602085016111eb565b9150604084013590509250925092565b6000602082840312156112c757600080fd5b5035919050565b600080604083850312156112e157600080fd5b6112ea836111eb565b946020939093013593505050565b6000806040838503121561130b57600080fd5b611314836111eb565b9150611322602084016111eb565b90509250929050565b60006020828403121561133d57600080fd5b8151801515811461122f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156113dd576113dd61137c565b5060010190565b600082198211156113f7576113f761137c565b500190565b60008282101561140e5761140e61137c565b50039056fea264697066735822122011b3bee93ce381ab6cf15b1e65cba7ca0fdc5d2e0628152f1e7674ffcc3f3f6d64736f6c63430008090033", + ), + storage: storage{ + // uint256 public requiredAmount + "0x00": genesismap{ + params.OasysMainnetGenesisHash: new( + big.Int, + ).Mul(big.NewInt(params.Ether), big.NewInt(1_000_000)), + defaultGenesisHash: big.NewInt(params.GWei), + }, + // uint256 public lockedBlock + "0x01": genesismap{ + params.OasysMainnetGenesisHash: big.NewInt(1_036_800), + defaultGenesisHash: common.Big1, + }, + // address public allowlistAddress + "0x02": l1BuildAllowList.address, + // address public agentAddress + "0x03": l1BuildAgent.address, + // address[] public allowedTokens + "0x04": array{ + values: map[int64]interface{}{ + 0: stakableOAS.address, + }, + }, + }, + }, + { + contract: l1BuildAgent, + // commit: https://github.com/oasysgames/oasys-optimism/blob/20eff6890c0b64dc9e8a1e36f347c4d561a1e411/packages/contracts/contracts/oasys/L1/build/L1BuildAgent.sol + code: mustDecodeCode( + "0x608060405234801561001057600080fd5b50600436106100df5760003560e01c806365c11a6c1161008c5780639f05c9ea116100665780639f05c9ea14610222578063a708ca6b14610242578063b61f370e14610255578063c86fc4c91461027557600080fd5b806365c11a6c146101cf57806366ed9d1b146101ef57806385c89dad1461020f57600080fd5b8063408d2693116100bd578063408d2693146101565780634dbbce2a1461018c57806364f57cb3146101ad57600080fd5b80630d5242f7146100e45780631ee5c97d1461012157806328f833b714610136575b600080fd5b6100f76100f23660046110b3565b610288565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013461012f3660046111b5565b6103b3565b005b6000546100f79073ffffffffffffffffffffffffffffffffffffffff1681565b6100f76101643660046111f1565b60009081526005602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b61019f61019a3660046111f1565b6107a1565b60405161011892919061125b565b6101c06101bb366004611346565b6108fe565b60405161011893929190611368565b6004546100f79073ffffffffffffffffffffffffffffffffffffffff1681565b6003546100f79073ffffffffffffffffffffffffffffffffffffffff1681565b61013461021d3660046113c8565b610ab0565b6001546100f79073ffffffffffffffffffffffffffffffffffffffff1681565b610134610250366004611426565b610c6f565b6002546100f79073ffffffffffffffffffffffffffffffffffffffff1681565b610134610283366004611473565b610d99565b805160208083019190912060008481526006909252604082208054835b8181101561034557838382815481106102c0576102c06114e0565b906000526020600020016040516102d79190611563565b60405180910390201415610333576000878152600760205260409020805482908110610305576103056114e0565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1694506103ad9350505050565b8061033d81611665565b9150506102a5565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f7420666f756e64000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b92915050565b60008381526005602052604090205473ffffffffffffffffffffffffffffffffffffffff161561043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f616c7265616479206275696c740000000000000000000000000000000000000060448201526064016103a4565b6000546040517ff3701da200000000000000000000000000000000000000000000000000000000815233600482018190529173ffffffffffffffffffffffffffffffffffffffff169063f3701da290602401600060405180830381600087803b1580156104ab57600080fd5b505af11580156104bf573d6000803e3d6000fd5b50506001546040517f1ee5c97d0000000000000000000000000000000000000000000000000000000081526004810188905273ffffffffffffffffffffffffffffffffffffffff878116602483015286811660448301529091169250631ee5c97d9150606401600060405180830381600087803b15801561053f57600080fd5b505af1158015610553573d6000803e3d6000fd5b50506002546040517f7ef7cca20000000000000000000000000000000000000000000000000000000081526004810188905273ffffffffffffffffffffffffffffffffffffffff85811660248301529091169250637ef7cca29150604401600060405180830381600087803b1580156105cb57600080fd5b505af11580156105df573d6000803e3d6000fd5b50506003546040517f7ef7cca20000000000000000000000000000000000000000000000000000000081526004810188905273ffffffffffffffffffffffffffffffffffffffff85811660248301529091169250637ef7cca29150604401600060405180830381600087803b15801561065757600080fd5b505af115801561066b573d6000803e3d6000fd5b5050600480546040517f7ef7cca200000000000000000000000000000000000000000000000000000000815291820188905273ffffffffffffffffffffffffffffffffffffffff8581166024840152169250637ef7cca29150604401600060405180830381600087803b1580156106e157600080fd5b505af11580156106f5573d6000803e3d6000fd5b50506008805460018082019092557ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff959095169490941790935550506009805491820181556000527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01929092555050565b60008181526006602090815260408083206007835281842081548351818602810186019094528084526060958695939492938592919084015b828210156108865783829060005260206000200180546107f99061150f565b80601f01602080910402602001604051908101604052809291908181526020018280546108259061150f565b80156108725780601f1061084757610100808354040283529160200191610872565b820191906000526020600020905b81548152906001019060200180831161085557829003601f168201915b5050505050815260200190600101906107da565b505050509150808054806020026020016040519081016040528092919081815260200182805480156108ee57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116108c3575b5050505050905091509150915091565b600854606090819060009080610914868861169e565b106109265761092386826116b6565b94505b60008567ffffffffffffffff81111561094157610941611084565b60405190808252806020026020018201604052801561096a578160200160208202803683370190505b50905060008667ffffffffffffffff81111561098857610988611084565b6040519080825280602002602001820160405280156109b1578160200160208202803683370190505b50905060005b87811015610a935760086109cb828b61169e565b815481106109db576109db6114e0565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838281518110610a1857610a186114e0565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526009610a49828b61169e565b81548110610a5957610a596114e0565b9060005260206000200154828281518110610a7657610a766114e0565b602090810291909101015280610a8b81611665565b9150506109b7565b508181610aa0898b61169e565b9550955095505050509250925092565b60035473ffffffffffffffffffffffffffffffffffffffff163314610b31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f6f6e6c7920746865204c314275696c6453746570332063616e2063616c6c000060448201526064016103a4565b610b71856040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000081525086610f52565b610b94856040518060600160405280602181526020016116ef6021913985610f52565b610bd4856040518060400160405280601b81526020017f50726f78795f5f4f564d5f4c315374616e64617264427269646765000000000081525084610f52565b610c14856040518060400160405280601981526020017f50726f78795f5f4f564d5f4c314552433732314272696467650000000000000081525083610f52565b610c68856040518060400160405280601681526020017f4c3243726f7373446f6d61696e4d657373656e67657200000000000000000000815250734200000000000000000000000000000000000007610f52565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff163314610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f6f6e6c7920746865204c314275696c6453746570322063616e2063616c6c000060448201526064016103a4565b610d30846040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e00000000000000000000000081525085610f52565b610d53846040518060600160405280602181526020016116ce6021913984610f52565b610d93846040518060400160405280600b81526020017f426f6e644d616e6167657200000000000000000000000000000000000000000081525083610f52565b50505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610e1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f6f6e6c7920746865204c314275696c6453746570312063616e2063616c6c000060448201526064016103a4565b60008681526005602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790558151808301909252600d82527f4f564d5f53657175656e6365720000000000000000000000000000000000000090820152610ea790879086610f52565b610ee7866040518060400160405280600c81526020017f4f564d5f50726f706f736572000000000000000000000000000000000000000081525085610f52565b610f27866040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e0000000000000081525084610f52565b610f4a866040518060600160405280602181526020016117106021913983610f52565b505050505050565b600083815260066020908152604082208054600181018255908352918190208451610f84939190910191850190610feb565b50600092835260076020908152604084208054600181018255908552932090920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915550565b828054610ff79061150f565b90600052602060002090601f016020900481019282611019576000855561105f565b82601f1061103257805160ff191683800117855561105f565b8280016001018555821561105f579182015b8281111561105f578251825591602001919060010190611044565b5061106b92915061106f565b5090565b5b8082111561106b5760008155600101611070565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156110c657600080fd5b82359150602083013567ffffffffffffffff808211156110e557600080fd5b818501915085601f8301126110f957600080fd5b81358181111561110b5761110b611084565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561115157611151611084565b8160405282815288602084870101111561116a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111b057600080fd5b919050565b6000806000606084860312156111ca57600080fd5b833592506111da6020850161118c565b91506111e86040850161118c565b90509250925092565b60006020828403121561120357600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561125057815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161121e565b509495945050505050565b6000604082016040835280855180835260608501915060608160051b860101925060208088016000805b84811015611326577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089880301865282518051808952835b818110156112d8578281018701518a820188015286016112bd565b818111156112e8578487838c0101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01697909701840196509483019491830191600101611285565b5050508584038187015250505061133d818561120a565b95945050505050565b6000806040838503121561135957600080fd5b50508035926020909101359150565b60608152600061137b606083018661120a565b82810360208481019190915285518083528682019282019060005b818110156113b257845183529383019391830191600101611396565b5050809350505050826040830152949350505050565b600080600080600060a086880312156113e057600080fd5b853594506113f06020870161118c565b93506113fe6040870161118c565b925061140c6060870161118c565b915061141a6080870161118c565b90509295509295909350565b6000806000806080858703121561143c57600080fd5b8435935061144c6020860161118c565b925061145a6040860161118c565b91506114686060860161118c565b905092959194509250565b60008060008060008060c0878903121561148c57600080fd5b8635955061149c6020880161118c565b94506114aa6040880161118c565b93506114b86060880161118c565b92506114c66080880161118c565b91506114d460a0880161118c565b90509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600181811c9082168061152357607f821691505b6020821081141561155d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080835481600182811c91508083168061157f57607f831692505b60208084108214156115b8577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b8180156115cc57600181146115fb57611628565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650611628565b60008a81526020902060005b868110156116205781548b820152908501908301611607565b505084890196505b509498975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561169757611697611636565b5060010190565b600082198211156116b1576116b1611636565b500190565b6000828210156116c8576116c8611636565b50039056fe436861696e53746f72616765436f6e7461696e65722d5343432d6261746368657350726f78795f5f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572436861696e53746f72616765436f6e7461696e65722d4354432d62617463686573a2646970667358221220ab0eb7ccd74838d120afcdb9fba90c434a3bdd67aed793705e4dcf3a00c1350a64736f6c63430008090033", + ), + storage: storage{ + // address public depositAddress + "0x00": l1BuildDeposit.address, + // address public step1Address + "0x01": l1BuildStep1.address, + // address public step2Address + "0x02": l1BuildStep2.address, + // address public step3Address + "0x03": l1BuildStep3.address, + // address public step4Address + "0x04": l1BuildStep4.address, + }, + }, + { + contract: l1BuildStep1, + // commit: https://github.com/oasysgames/oasys-optimism/blob/20eff6890c0b64dc9e8a1e36f347c4d561a1e411/packages/contracts/contracts/oasys/L1/build/L1BuildStep1.sol + code: mustDecodeCode( + "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806303305d32146100515780631ee5c97d1461009a57806338613690146100af578063485cc955146100cf575b600080fd5b6001546100719073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100ad6100a836600461077f565b6100e2565b005b6000546100719073ffffffffffffffffffffffffffffffffffffffff1681565b6100ad6100dd3660046107c1565b61063e565b60005473ffffffffffffffffffffffffffffffffffffffff163314610168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f6f6e6c7920746865204c314275696c644167656e742063616e2063616c6c000060448201526064015b60405180910390fd5b600060405161017690610733565b604051809103906000f080158015610192573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff1663f2fde38b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166365c11a6c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561021757600080fd5b505afa15801561022b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061024f91906107fa565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b1580156102b557600080fd5b505af11580156102c9573d6000803e3d6000fd5b50505050600081600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d38c6c16040518163ffffffff1660e01b815260040160206040518083038186803b15801561033857600080fd5b505afa15801561034c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610370919061081e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ccf987c86040518163ffffffff1660e01b815260040160206040518083038186803b1580156103d857600080fd5b505afa1580156103ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610410919061081e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e654b1fb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561047857600080fd5b505afa15801561048c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b0919061081e565b6040516104bc90610740565b73ffffffffffffffffffffffffffffffffffffffff9094168452602084019290925260408301526060820152608001604051809103906000f080158015610507573d6000803e3d6000fd5b5090506000826040516105199061074d565b73ffffffffffffffffffffffffffffffffffffffff90911681526040602082018190526019908201527f43616e6f6e6963616c5472616e73616374696f6e436861696e000000000000006060820152608001604051809103906000f080158015610587573d6000803e3d6000fd5b506000546040517fc86fc4c90000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff868116602483015288811660448301528781166064830152858116608483015280841660a483015292935091169063c86fc4c99060c401600060405180830381600087803b15801561061e57600080fd5b505af1158015610632573d6000803e3d6000fd5b50505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1615801561067a575060015473ffffffffffffffffffffffffffffffffffffffff16155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e697469616c697a65206f6e6c79206f6e6365000000000000000000000000604482015260640161015f565b6000805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560018054929093169116179055565b6107808061083883390190565b611a9880610fb883390190565b6111b380612a5083390190565b73ffffffffffffffffffffffffffffffffffffffff8116811461077c57600080fd5b50565b60008060006060848603121561079457600080fd5b8335925060208401356107a68161075a565b915060408401356107b68161075a565b809150509250925092565b600080604083850312156107d457600080fd5b82356107df8161075a565b915060208301356107ef8161075a565b809150509250929050565b60006020828403121561080c57600080fd5b81516108178161075a565b9392505050565b60006020828403121561083057600080fd5b505191905056fe608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107028061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80639b2ea4bd116100505780639b2ea4bd146100b9578063bf40fac1146100cc578063f2fde38b146100df57600080fd5b8063715018a61461006c5780638da5cb5b14610076575b600080fd5b6100746100f2565b005b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100746100c73660046105e4565b610184565b6100906100da366004610632565b6102d0565b6100746100ed36600461066f565b61030c565b60005473ffffffffffffffffffffffffffffffffffffffff163314610178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610182600061043c565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610205576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161016f565b6000610210836104b1565b60008181526001602052604090819020805473ffffffffffffffffffffffffffffffffffffffff8681167fffffffffffffffffffffffff000000000000000000000000000000000000000083161790925591519293501690610273908590610691565b6040805191829003822073ffffffffffffffffffffffffffffffffffffffff808716845284166020840152917f9416a153a346f93d95f94b064ae3f148b6460473c6e82b3f9fc2521b873fcd6c910160405180910390a250505050565b6000600160006102df846104b1565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff1692915050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461038d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161016f565b73ffffffffffffffffffffffffffffffffffffffff8116610430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161016f565b6104398161043c565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000816040516020016104c49190610691565b604051602081830303815290604052805190602001209050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261052157600080fd5b813567ffffffffffffffff8082111561053c5761053c6104e1565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610582576105826104e1565b8160405283815286602085880101111561059b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b600080604083850312156105f757600080fd5b823567ffffffffffffffff81111561060e57600080fd5b61061a85828601610510565b925050610629602084016105bb565b90509250929050565b60006020828403121561064457600080fd5b813567ffffffffffffffff81111561065b57600080fd5b61066784828501610510565b949350505050565b60006020828403121561068157600080fd5b61068a826105bb565b9392505050565b6000825160005b818110156106b25760208186018101518583015201610698565b818111156106c1576000828501525b50919091019291505056fea2646970667358221220882d6a267e1fbcc015c1726b422a6847e08c6be7e987e8b5ec1f7e85aa5095bb64736f6c63430008090033608060405234801561001057600080fd5b5060405162001a9838038062001a9883398101604081905261003191610072565b600080546001600160a01b0319166001600160a01b03861617905560048390556002829055600181905561006581836100bd565b600355506100ea92505050565b6000806000806080858703121561008857600080fd5b84516001600160a01b038116811461009f57600080fd5b60208601516040870151606090970151919890975090945092505050565b60008160001904831182151516156100e557634e487b7160e01b600052601160045260246000fd5b500290565b61199e80620000fa6000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c8063876ed5cb116100cd578063d0f8934411610081578063e654b1fb11610066578063e654b1fb146102c0578063edcc4a45146102c9578063f722b41a146102dc57600080fd5b8063d0f89344146102b0578063e561dddc146102b857600080fd5b8063b8f77005116100b2578063b8f7700514610297578063ccf987c81461029f578063cfdf677e146102a857600080fd5b8063876ed5cb146102855780638d38c6c11461028e57600080fd5b80635ae6256d1161012457806378f4b2f21161010957806378f4b2f2146102645780637a167a8a1461026e5780637aa63a861461027d57600080fd5b80635ae6256d146102475780636fee07e01461024f57600080fd5b80632a7f18be116101555780632a7f18be146101d25780633789977014610216578063461a44781461023457600080fd5b80630b3dfa9714610171578063299ca4781461018d575b600080fd5b61017a60035481565b6040519081526020015b60405180910390f35b6000546101ad9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610184565b6101e56101e03660046113e5565b6102e4565b604080518251815260208084015164ffffffffff908116918301919091529282015190921690820152606001610184565b61021e610362565b60405164ffffffffff9091168152602001610184565b6101ad6102423660046114c1565b610376565b61021e610423565b61026261025d366004611537565b610437565b005b61017a620186a081565b60055464ffffffffff1661021e565b61017a610899565b61017a61c35081565b61017a60045481565b60065461021e565b61017a60025481565b6101ad6108b4565b6102626108dc565b61017a610df8565b61017a60015481565b6102626102d73660046115a4565b610e7f565b61021e611016565b604080516060810182526000808252602082018190529181019190915260068281548110610314576103146115c6565b6000918252602091829020604080516060810182526002909302909101805483526001015464ffffffffff808216948401949094526501000000000090049092169181019190915292915050565b60008061036d611032565b50949350505050565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac1906103cd908590600401611660565b60206040518083038186803b1580156103e557600080fd5b505afa1580156103f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041d919061167a565b92915050565b60008061042e611032565b95945050505050565b61c350815111156104cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f5472616e73616374696f6e20646174612073697a652065786365656473206d6160448201527f78696d756d20666f7220726f6c6c7570207472616e73616374696f6e2e00000060648201526084015b60405180910390fd5b600454821115610561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f5472616e73616374696f6e20676173206c696d69742065786365656473206d6160448201527f78696d756d20666f7220726f6c6c7570207472616e73616374696f6e2e00000060648201526084016104c6565b620186a08210156105f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f5472616e73616374696f6e20676173206c696d697420746f6f206c6f7720746f60448201527f20656e71756575652e000000000000000000000000000000000000000000000060648201526084016104c6565b6003548211156106dc5760006002546003548461061191906116c6565b61061b91906116dd565b905060005a90508181116106b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e73756666696369656e742067617320666f72204c322072617465206c696d60448201527f6974696e67206275726e2e00000000000000000000000000000000000000000060648201526084016104c6565b60005b825a6106c090846116c6565b10156106d857806106d081611718565b9150506106b4565b5050505b6000333214156106ed575033610706565b5033731111000000000000000000000000000000001111015b60008185858560405160200161071f9493929190611751565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060608401835280845264ffffffffff42811692850192835243811693850193845260068054600181810183556000838152975160029092027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f81019290925594517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d4090910180549651841665010000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090971691909316179490941790559154919350610825916116c6565b9050808673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f4b388aecf9fa6cc92253704e5975a6129a4f735bdbd99567df4ed0094ee4ceb58888426040516108899392919061179a565b60405180910390a4505050505050565b6000806108a4611032565b50505064ffffffffff1692915050565b60006108d760405180606001604052806021815260200161194860219139610376565b905090565b60043560d81c60093560e890811c90600c35901c6108f8610899565b8364ffffffffff161461098d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f41637475616c20626174636820737461727420696e64657820646f6573206e6f60448201527f74206d6174636820657870656374656420737461727420696e6465782e00000060648201526084016104c6565b6109cb6040518060400160405280600d81526020017f4f564d5f53657175656e63657200000000000000000000000000000000000000815250610376565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f46756e6374696f6e2063616e206f6e6c792062652063616c6c6564206279207460448201527f68652053657175656e6365722e0000000000000000000000000000000000000060648201526084016104c6565b6000610a9762ffffff831660106117c3565b610aa290600f611800565b905064ffffffffff8116361015610b3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4e6f7420656e6f756768204261746368436f6e74657874732070726f7669646560448201527f642e00000000000000000000000000000000000000000000000000000000000060648201526084016104c6565b6005546040805160808101825260008082526020820181905291810182905260608101829052909164ffffffffff169060005b8562ffffff168163ffffffff161015610bcc576000610b928263ffffffff166110ed565b8051909350839150610ba49086611818565b9450826020015184610bb69190611840565b9350508080610bc490611860565b915050610b6e565b5060065464ffffffffff83161115610c8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f417474656d7074656420746f20617070656e64206d6f726520656c656d656e7460448201527f73207468616e2061726520617661696c61626c6520696e20746865207175657560648201527f652e000000000000000000000000000000000000000000000000000000000000608482015260a4016104c6565b6000610c9d8462ffffff8916611884565b63ffffffff169050600080836020015160001415610cc657505060408201516060830151610d37565b60006006610cd56001886118a9565b64ffffffffff1681548110610cec57610cec6115c6565b6000918252602091829020604080516060810182526002909302909101805483526001015464ffffffffff808216948401859052650100000000009091041691018190529093509150505b610d5b610d456001436116c6565b408a62ffffff168564ffffffffff168585611174565b7f602f1aeac0ca2e7a13e281a9ef0ad7838542712ce16780fa2ecffd351f05f899610d8684876118a9565b84610d8f610899565b6040805164ffffffffff94851681529390921660208401529082015260600160405180910390a15050600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000001664ffffffffff949094169390931790925550505050505050565b6000610e026108b4565b73ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b158015610e4757600080fd5b505afa158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d791906118c7565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ee557600080fd5b505afa158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d919061167a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f6e6c792063616c6c61626c6520627920746865204275726e2041646d696e2e60448201526064016104c6565b60018190556002829055610fc581836117c3565b60038190556002546001546040805192835260208301919091528101919091527fc6ed75e96b8b18b71edc1a6e82a9d677f8268c774a262c624eeb2cf0a8b3e07e9060600160405180910390a15050565b6005546006546000916108d79164ffffffffff909116906118a9565b60008060008060006110426108b4565b73ffffffffffffffffffffffffffffffffffffffff1663ccf8f9696040518163ffffffff1660e01b815260040160206040518083038186803b15801561108757600080fd5b505afa15801561109b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bf91906118e0565b64ffffffffff602882901c811697605083901c82169750607883901c8216965060a09290921c169350915050565b6111186040518060800160405280600081526020016000815260200160008152602001600081525090565b60006111256010846117c3565b61113090600f611800565b60408051608081018252823560e890811c82526003840135901c6020820152600683013560d890811c92820192909252600b90920135901c60608201529392505050565b600061117e6108b4565b905060008061118b611032565b50509150915060006040518060a001604052808573ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b1580156111e457600080fd5b505afa1580156111f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121c91906118c7565b81526020018a81526020018981526020018464ffffffffff16815260200160405180602001604052806000815250815250905080600001517f127186556e7be68c7e31263195225b4de02820707889540969f62c05cf73525e82602001518360400151846060015185608001516040516112999493929190611922565b60405180910390a260006112ac8261139f565b905060006112e78360400151866112c39190611840565b6112cd8b87611840565b602890811b9190911760508b901b1760788a901b17901b90565b6040517f2015276c000000000000000000000000000000000000000000000000000000008152600481018490527fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000008216602482015290915073ffffffffffffffffffffffffffffffffffffffff871690632015276c90604401600060405180830381600087803b15801561137a57600080fd5b505af115801561138e573d6000803e3d6000fd5b505050505050505050505050505050565b600081602001518260400151836060015184608001516040516020016113c89493929190611922565b604051602081830303815290604052805190602001209050919050565b6000602082840312156113f757600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115611448576114486113fe565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561148e5761148e6113fe565b816040528093508581528686860111156114a757600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156114d357600080fd5b813567ffffffffffffffff8111156114ea57600080fd5b8201601f810184136114fb57600080fd5b61150a8482356020840161142d565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461153457600080fd5b50565b60008060006060848603121561154c57600080fd5b833561155781611512565b925060208401359150604084013567ffffffffffffffff81111561157a57600080fd5b8401601f8101861361158b57600080fd5b61159a8682356020840161142d565b9150509250925092565b600080604083850312156115b757600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815180845260005b8181101561161b576020818501810151868301820152016115ff565b8181111561162d576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061167360208301846115f5565b9392505050565b60006020828403121561168c57600080fd5b815161167381611512565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156116d8576116d8611697565b500390565b600082611713577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561174a5761174a611697565b5060010190565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261179060808301846115f5565b9695505050505050565b8381526060602082015260006117b360608301856115f5565b9050826040830152949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156117fb576117fb611697565b500290565b6000821982111561181357611813611697565b500190565b600063ffffffff80831681851680830382111561183757611837611697565b01949350505050565b600064ffffffffff80831681851680830382111561183757611837611697565b600063ffffffff8083168181141561187a5761187a611697565b6001019392505050565b600063ffffffff838116908316818110156118a1576118a1611697565b039392505050565b600064ffffffffff838116908316818110156118a1576118a1611697565b6000602082840312156118d957600080fd5b5051919050565b6000602082840312156118f257600080fd5b81517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000008116811461167357600080fd5b84815283602082015282604082015260806060820152600061179060808301846115f556fe436861696e53746f72616765436f6e7461696e65722d4354432d62617463686573a2646970667358221220c8d6d671bb1ae3bd0434364664f960f2eb1e1515f336e3260e4ce79fceb2110764736f6c6343000809003360806040523480156200001157600080fd5b50604051620011b3380380620011b3833981016040819052620000349162000129565b600080546001600160a01b0319166001600160a01b0384161790558051620000649060019060208401906200006d565b50505062000266565b8280546200007b9062000229565b90600052602060002090601f0160209004810192826200009f5760008555620000ea565b82601f10620000ba57805160ff1916838001178555620000ea565b82800160010185558215620000ea579182015b82811115620000ea578251825591602001919060010190620000cd565b50620000f8929150620000fc565b5090565b5b80821115620000f85760008155600101620000fd565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156200013d57600080fd5b82516001600160a01b03811681146200015557600080fd5b602084810151919350906001600160401b03808211156200017557600080fd5b818601915086601f8301126200018a57600080fd5b8151818111156200019f576200019f62000113565b604051601f8201601f19908116603f01168101908382118183101715620001ca57620001ca62000113565b816040528281528986848701011115620001e357600080fd5b600093505b82841015620002075784840186015181850187015292850192620001e8565b82841115620002195760008684830101525b8096505050505050509250929050565b600181811c908216806200023e57607f821691505b602082108114156200026057634e487b7160e01b600052602260045260246000fd5b50919050565b610f3d80620002766000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063461a4478116100815780639507d39a1161005b5780639507d39a146101a4578063b298e36b146101b7578063ccf8f969146101ca57600080fd5b8063461a4478146101695780634651d91e1461017c5780638da5cb5b1461018f57600080fd5b80632015276c116100b25780632015276c146100fe57806329061de214610111578063299ca4781461012457600080fd5b8063167fd681146100ce5780631f7b6d32146100e3575b600080fd5b6100e16100dc366004610c59565b6101e9565b005b6100eb61034d565b6040519081526020015b60405180910390f35b6100e161010c366004610c59565b610365565b6100e161011f366004610c85565b61043d565b6000546101449073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f5565b610144610177366004610cd6565b610517565b6100e161018a366004610da5565b6105c4565b61019761069b565b6040516100f59190610dbe565b6100eb6101b2366004610da5565b610729565b6100e16101c5366004610da5565b61073d565b6101d2610814565b60405164ffffffffff1990911681526020016100f5565b61027c600180546101f990610e31565b80601f016020809104026020016040519081016040528092919081815260200182805461022590610e31565b80156102725780601f1061024757610100808354040283529160200191610272565b820191906000526020600020905b81548152906001019060200180831161025557829003601f168201915b5050505050610517565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461033d57604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f436861696e53746f72616765436f6e7461696e65723a2046756e6374696f6e2060448201527f63616e206f6e6c792062652063616c6c656420627920746865206f776e65722e60648201526084015b60405180910390fd5b61034960028383610825565b5050565b6000610359600261090c565b64ffffffffff16905090565b610375600180546101f990610e31565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461043157604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f436861696e53746f72616765436f6e7461696e65723a2046756e6374696f6e2060448201527f63616e206f6e6c792062652063616c6c656420627920746865206f776e65722e6064820152608401610334565b61034960028383610957565b61044d600180546101f990610e31565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461050957604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f436861696e53746f72616765436f6e7461696e65723a2046756e6374696f6e2060448201527f63616e206f6e6c792062652063616c6c656420627920746865206f776e65722e6064820152608401610334565b6105146002826109e6565b50565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061056e908590600401610dbe565b60206040518083038186803b15801561058657600080fd5b505afa15801561059a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105be9190610e85565b92915050565b6105d4600180546101f990610e31565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461069057604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f436861696e53746f72616765436f6e7461696e65723a2046756e6374696f6e2060448201527f63616e206f6e6c792062652063616c6c656420627920746865206f776e65722e6064820152608401610334565b610514600282610a47565b600180546106a890610e31565b80601f01602080910402602001604051908101604052809291908181526020018280546106d490610e31565b80156107215780601f106106f657610100808354040283529160200191610721565b820191906000526020600020905b81548152906001019060200180831161070457829003601f168201915b505050505081565b60006105be600264ffffffffff8416610aa4565b61074d600180546101f990610e31565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461080957604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f436861696e53746f72616765436f6e7461696e65723a2046756e6374696f6e2060448201527f63616e206f6e6c792062652063616c6c656420627920746865206f776e65722e6064820152608401610334565b610514600282610b73565b60006108206002610bd0565b905090565b600061086784604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b9050806000015164ffffffffff168364ffffffffff16106108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f496e646578206f7574206f6620626f756e64732e0000000000000000000000006044820152606401610334565b64ffffffffff8316815264ffffffffff19821660208201526109068482610c1e565b50505050565b60008061094f83604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b519392505050565b600061099984604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b805164ffffffffff16600090815260018601602052604090208490558051909150816109c482610ebb565b64ffffffffff1690525064ffffffffff19821660208201526109068482610c1e565b6000610a2883604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b64ffffffffff19831660208201529050610a428382610c1e565b505050565b6000610a8983604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b9050610a42828260200151856108259092919063ffffffff16565b600080610ae784604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b805190915064ffffffffff168310610b5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f496e646578206f7574206f6620626f756e64732e0000000000000000000000006044820152606401610334565b50506000908152600191909101602052604090205490565b6000610bb583604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b9050610a42828260200151856109579092919063ffffffff16565b600080610c1383604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b602001519392505050565b8051602082015183548183179291908314610c37578285555b5050505050565b803564ffffffffff1981168114610c5457600080fd5b919050565b60008060408385031215610c6c57600080fd5b82359150610c7c60208401610c3e565b90509250929050565b600060208284031215610c9757600080fd5b610ca082610c3e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215610ce857600080fd5b813567ffffffffffffffff80821115610d0057600080fd5b818401915084601f830112610d1457600080fd5b813581811115610d2657610d26610ca7565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610d6c57610d6c610ca7565b81604052828152876020848701011115610d8557600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215610db757600080fd5b5035919050565b600060208083528351808285015260005b81811015610deb57858101830151858201604001528201610dcf565b81811115610dfd576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600181811c90821680610e4557607f821691505b60208210811415610e7f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215610e9757600080fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610ca057600080fd5b600064ffffffffff80831681811415610efd577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600101939250505056fea2646970667358221220e1995ee56c4c5e67de41c56ad510b16704727d3ab1fa5bb2e3c62b0bd7c0597564736f6c63430008090033a264697066735822122059a7be2a1ee54361ae8529c3d6353990f73b26048af4e6e13ced7655aceddeb664736f6c63430008090033", + ), + storage: storage{ + // address public agentAddress + "0x00": l1BuildAgent.address, + // address public paramAddress + "0x01": l1BuildParam.address, + }, + }, + { + contract: l1BuildStep2, + // commit: https://github.com/oasysgames/oasys-optimism/blob/20eff6890c0b64dc9e8a1e36f347c4d561a1e411/packages/contracts/contracts/oasys/L1/build/L1BuildStep2.sol + code: mustDecodeCode( + "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806303305d3214610051578063386136901461009a578063485cc955146100ba5780637ef7cca2146100cf575b600080fd5b6001546100719073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6000546100719073ffffffffffffffffffffffffffffffffffffffff1681565b6100cd6100c8366004610655565b6100e2565b005b6100cd6100dd36600461068e565b6101dc565b60005473ffffffffffffffffffffffffffffffffffffffff1615801561011e575060015473ffffffffffffffffffffffffffffffffffffffff16155b610189576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e697469616c697a65206f6e6c79206f6e636500000000000000000000000060448201526064015b60405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560018054929093169116179055565b60005473ffffffffffffffffffffffffffffffffffffffff16331461025d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f6f6e6c7920746865204c314275696c644167656e742063616e2063616c6c00006044820152606401610180565b600080546040517f408d26930000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff9091169063408d26939060240160206040518083038186803b1580156102c857600080fd5b505afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030091906106b3565b9050600081600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e46020a16040518163ffffffff1660e01b815260040160206040518083038186803b15801561036d57600080fd5b505afa158015610381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a591906106d7565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166333f67e6a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561040d57600080fd5b505afa158015610421573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044591906106d7565b60405161045190610609565b73ffffffffffffffffffffffffffffffffffffffff909316835260208301919091526040820152606001604051809103906000f080158015610497573d6000803e3d6000fd5b5090506000826040516104a990610616565b73ffffffffffffffffffffffffffffffffffffffff90911681526040602082018190526014908201527f5374617465436f6d6d69746d656e74436861696e0000000000000000000000006060820152608001604051809103906000f080158015610517573d6000803e3d6000fd5b50905060008360405161052990610623565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015610562573d6000803e3d6000fd5b506000546040517fa708ca6b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff86811660248301528581166044830152808416606483015292935091169063a708ca6b90608401600060405180830381600087803b1580156105e957600080fd5b505af11580156105fd573d6000803e3d6000fd5b50505050505050505050565b6123ea806106f183390190565b6111b380612adb83390190565b61048880613c8e83390190565b73ffffffffffffffffffffffffffffffffffffffff8116811461065257600080fd5b50565b6000806040838503121561066857600080fd5b823561067381610630565b9150602083013561068381610630565b809150509250929050565b600080604083850312156106a157600080fd5b82359150602083013561068381610630565b6000602082840312156106c557600080fd5b81516106d081610630565b9392505050565b6000602082840312156106e957600080fd5b505191905056fe608060405234801561001057600080fd5b50604051620023ea380380620023ea8339810160408190526100319161005d565b600080546001600160a01b0319166001600160a01b0394909416939093179092556001556002556100a0565b60008060006060848603121561007257600080fd5b83516001600160a01b038116811461008957600080fd5b602085015160409095015190969495509392505050565b61233a80620000b06000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80639418bddd11610097578063cfdf677e11610066578063cfdf677e146101f8578063e0c2b41814610200578063e561dddc14610213578063fc7e9c6f1461021b57600080fd5b80639418bddd146101b65780639594dd64146101c9578063b8e189ac146101dc578063c17b291b146101ef57600080fd5b80637aa63a86116100d35780637aa63a861461017a5780637ad168a01461019057806381eb62ef146101985780638ca5cbb9146101a157600080fd5b8063299ca478146100fa578063461a4478146101445780634d69ee5714610157575b600080fd5b60005461011a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61011a610152366004611d47565b610224565b61016a610165366004611eb9565b6102d1565b604051901515815260200161013b565b6101826103a0565b60405190815260200161013b565b6101826103b9565b61018260025481565b6101b46101af366004611f76565b6103d2565b005b61016a6101c4366004611fbb565b6107ac565b6101b46101d7366004611fbb565b61086b565b6101b46101ea366004611fbb565b6109e6565b61018260015481565b61011a610ba2565b6101b461020e366004611fbb565b610bca565b610182610d1f565b61018260035481565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061027b90859060040161205b565b60206040518083038186803b15801561029357600080fd5b505afa1580156102a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102cb9190612090565b92915050565b60006102dc83610da6565b61032d5760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e000000000000000000000060448201526064015b60405180910390fd5b61034a836020015185846000015185602001518760400151610e68565b6103965760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420696e636c7573696f6e2070726f6f662e00000000000000006044820152606401610324565b5060019392505050565b6000806103ab6110d6565b5064ffffffffff1692915050565b6000806103c46110d6565b64ffffffffff169392505050565b6103da6103a0565b811461044e5760405162461bcd60e51b815260206004820152603d60248201527f41637475616c20626174636820737461727420696e64657820646f6573206e6f60448201527f74206d6174636820657870656374656420737461727420696e6465782e0000006064820152608401610324565b61048c6040518060400160405280600b81526020017f426f6e644d616e61676572000000000000000000000000000000000000000000815250610224565b6040517f02ad4d2a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff91909116906302ad4d2a9060240160206040518083038186803b1580156104f357600080fd5b505afa158015610507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052b91906120ad565b61059d5760405162461bcd60e51b815260206004820152602f60248201527f50726f706f73657220646f6573206e6f74206861766520656e6f75676820636f60448201527f6c6c61746572616c20706f7374656400000000000000000000000000000000006064820152608401610324565b60008251116106145760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74207375626d697420616e20656d7074792073746174652062617460448201527f63682e00000000000000000000000000000000000000000000000000000000006064820152608401610324565b6106526040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610224565b73ffffffffffffffffffffffffffffffffffffffff16637aa63a866040518163ffffffff1660e01b815260040160206040518083038186803b15801561069757600080fd5b505afa1580156106ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cf91906120cf565b82516106d96103a0565b6106e39190612117565b111561077d5760405162461bcd60e51b815260206004820152604960248201527f4e756d626572206f6620737461746520726f6f74732063616e6e6f742065786360448201527f65656420746865206e756d626572206f662063616e6f6e6963616c207472616e60648201527f73616374696f6e732e0000000000000000000000000000000000000000000000608482015260a401610324565b60408051426020820152338183015281518082038301815260609091019091526107a890839061117a565b5050565b6000600354826000015110156107c457506000919050565b600082608001518060200190518101906107de919061212f565b509050806108545760405162461bcd60e51b815260206004820152602560248201527f4261746368206865616465722074696d657374616d702063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610324565b42600154826108639190612117565b119392505050565b33735200000000000000000000000000000000000014146108ce5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206d6573736167652073656e6465722e0000000000000000006044820152606401610324565b6108d781610da6565b6109235760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e00000000000000000000006044820152606401610324565b61092c816107ac565b6109a0576040805162461bcd60e51b81526020600482015260248101919091527f537461746520626174636865732063616e206f6e6c792062652064656c65746560448201527f642077697468696e207468652066726175642070726f6f662077696e646f772e6064820152608401610324565b6109a98161141d565b80516020808301516040519081527f1723478079cff2362bd8896c78c4c8bee974428fc01131b52d79078349af3e1091015b60405180910390a250565b610a246040518060400160405280601181526020017f4f564d5f46726175645665726966696572000000000000000000000000000000815250610224565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ac45760405162461bcd60e51b815260206004820152603b60248201527f537461746520626174636865732063616e206f6e6c792062652064656c65746560448201527f6420627920746865204f564d5f467261756456657269666965722e00000000006064820152608401610324565b610acd81610da6565b610b195760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e00000000000000000000006044820152606401610324565b610b22816107ac565b610b96576040805162461bcd60e51b81526020600482015260248101919091527f537461746520626174636865732063616e206f6e6c792062652064656c65746560448201527f642077697468696e207468652066726175642070726f6f662077696e646f772e6064820152608401610324565b610b9f8161141d565b50565b6000610bc56040518060600160405280602181526020016122e460219139610224565b905090565b3373520000000000000000000000000000000000001414610c2d5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206d6573736167652073656e6465722e0000000000000000006044820152606401610324565b610c3681610da6565b610c825760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e00000000000000000000006044820152606401610324565b600354815114610cd45760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420626174636820696e6465782e0000000000000000000000006044820152606401610324565b60038054906000610ce48361215f565b909155505080516020808301516040519081527fc032f530357a4853a125c129880b7801f1f30fb46fdd0e2f3bbc6e053199dca991016109db565b6000610d29610ba2565b73ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6e57600080fd5b505afa158015610d82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc591906120cf565b6000610db0610ba2565b82516040517f9507d39a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9290921691639507d39a91610e089160040190815260200190565b60206040518083038186803b158015610e2057600080fd5b505afa158015610e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5891906120cf565b610e6183611643565b1492915050565b6000808211610edf5760405162461bcd60e51b815260206004820152603760248201527f4c69625f4d65726b6c65547265653a20546f74616c206c6561766573206d757360448201527f742062652067726561746572207468616e207a65726f2e0000000000000000006064820152608401610324565b818410610f535760405162461bcd60e51b8152602060048201526024808201527f4c69625f4d65726b6c65547265653a20496e646578206f7574206f6620626f7560448201527f6e64732e000000000000000000000000000000000000000000000000000000006064820152608401610324565b610f5c82611689565b835114610ff75760405162461bcd60e51b815260206004820152604d60248201527f4c69625f4d65726b6c65547265653a20546f74616c207369626c696e6773206460448201527f6f6573206e6f7420636f72726563746c7920636f72726573706f6e6420746f2060648201527f746f74616c206c65617665732e00000000000000000000000000000000000000608482015260a401610324565b8460005b84518110156110c95785600116600114156110625784818151811061102257611022612198565b602002602001015182604051602001611045929190918252602082015260400190565b6040516020818303038152906040528051906020012091506110b0565b8185828151811061107557611075612198565b6020026020010151604051602001611097929190918252602082015260400190565b6040516020818303038152906040528051906020012091505b60019590951c94806110c18161215f565b915050610ffb565b5090951495945050505050565b60008060006110e3610ba2565b73ffffffffffffffffffffffffffffffffffffffff1663ccf8f9696040518163ffffffff1660e01b815260040160206040518083038186803b15801561112857600080fd5b505afa15801561113c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116091906121c7565b64ffffffffff602882901c169460509190911c9350915050565b60006111ba6040518060400160405280600c81526020017f4f564d5f50726f706f7365720000000000000000000000000000000000000000815250610224565b90506000806111c76110d6565b90925090503373ffffffffffffffffffffffffffffffffffffffff841614156111f15750426112a0565b426002548264ffffffffff166112079190612117565b106112a05760405162461bcd60e51b815260206004820152604360248201527f43616e6e6f74207075626c69736820737461746520726f6f747320776974686960448201527f6e207468652073657175656e636572207075626c69636174696f6e2077696e6460648201527f6f772e0000000000000000000000000000000000000000000000000000000000608482015260a401610324565b60006040518060a001604052806112b5610d1f565b81526020016112c38861176f565b8152602001875181526020018464ffffffffff16815260200186815250905080600001517f16be4c5129a4e03cf3350262e181dc02ddfb4a6008d925368c0899fcd97ca9c5826020015183604001518460600151856080015160405161132c9493929190612209565b60405180910390a261133c610ba2565b73ffffffffffffffffffffffffffffffffffffffff16632015276c61136083611643565b611385846040015185606001516113779190612117565b602887811b91909117901b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092527fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000166024820152604401600060405180830381600087803b1580156113fd57600080fd5b505af1158015611411573d6000803e3d6000fd5b50505050505050505050565b611425610ba2565b73ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b15801561146a57600080fd5b505afa15801561147e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a291906120cf565b8151106114f15760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420626174636820696e6465782e0000000000000000000000006044820152606401610324565b6114fa81610da6565b6115465760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e00000000000000000000006044820152606401610324565b61154e610ba2565b8151606083015173ffffffffffffffffffffffffffffffffffffffff929092169163167fd681919060281b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092527fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000166024820152604401600060405180830381600087803b1580156115f157600080fd5b505af1158015611605573d6000803e3d6000fd5b5050505080600001517f8747b69ce8fdb31c3b9b0a67bd8049ad8c1a69ea417b69b12174068abd9cbd6482602001516040516109db91815260200190565b6000816020015182604001518360600151846080015160405160200161166c9493929190612209565b604051602081830303815290604052805190602001209050919050565b60008082116117005760405162461bcd60e51b815260206004820152603060248201527f4c69625f4d65726b6c65547265653a2043616e6e6f7420636f6d70757465206360448201527f65696c286c6f675f3229206f6620302e000000000000000000000000000000006064820152608401610324565b816001141561171157506000919050565b81600060805b6001811061174f578061172d600180831b612238565b901b831615611747576117408183612117565b92811c9291505b60011c611717565b506001811b841461176857611765600182612117565b90505b9392505050565b6000808251116117e75760405162461bcd60e51b815260206004820152603460248201527f4c69625f4d65726b6c65547265653a204d7573742070726f766964652061742060448201527f6c65617374206f6e65206c65616620686173682e0000000000000000000000006064820152608401610324565b815160011415611813578160008151811061180457611804612198565b60200260200101519050919050565b60408051610200810182527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56381527f633dc4d7da7256660a892f8f1604a44b5432649cc8ec5cb3ced4c4e6ac94dd1d60208201527f890740a8eb06ce9be422cb8da5cdafc2b58c0a5e24036c578de2a433c828ff7d818301527f3b8ec09e026fdc305365dfc94e189a81b38c7597b3d941c279f042e8206e0bd86060808301919091527fecd50eee38e386bd62be9bedb990706951b65fe053bd9d8a521af753d139e2da60808301527fdefff6d330bb5403f63b14f33b578274160de3a50df4efecf0e0db73bcdd3da560a08301527f617bdd11f7c0a11f49db22f629387a12da7596f9d1704d7465177c63d88ec7d760c08301527f292c23a9aa1d8bea7e2435e555a4a60e379a5a35f3f452bae60121073fb6eead60e08301527fe1cea92ed99acdcb045a6726b2f87107e8a61620a232cf4d7d5b5766b3952e106101008301527f7ad66c0a68c72cb89e4fb4303841966e4062a76ab97451e3b9fb526a5ceb7f826101208301527fe026cc5a4aed3c22a58cbd3d2ac754c9352c5436f638042dca99034e836365166101408301527f3d04cffd8b46a874edf5cfae63077de85f849a660426697b06a829c70dd1409c6101608301527fad676aa337a485e4728a0b240d92b3ef7b3c372d06d189322bfd5f61f1e7203e6101808301527fa2fca4a49658f9fab7aa63289c91b7c7b6c832a6d0e69334ff5b0a3483d09dab6101a08301527f4ebfd9cd7bca2505f7bef59cc1c12ecc708fff26ae4af19abe852afe9e20c8626101c08301527f2def10d13dd169f550f578bda343d9717a138562e0093b380a1120789d53cf106101e083015282518381529081018352909160009190602082018180368337505085519192506000918291508180805b6001841115611c2957611ac460028561227e565b9150611ad1600285612292565b600114905060005b82811015611b7d578a611aed8260026122a6565b81518110611afd57611afd612198565b602002602001015196508a816002611b1591906122a6565b611b20906001612117565b81518110611b3057611b30612198565b6020026020010151955086602089015285604089015287805190602001208b8281518110611b6057611b60612198565b602090810291909101015280611b758161215f565b915050611ad9565b508015611bf95789611b90600186612238565b81518110611ba057611ba0612198565b60200260200101519550878360108110611bbc57611bbc612198565b602002015160001b945085602088015284604088015286805190602001208a8381518110611bec57611bec612198565b6020026020010181815250505b80611c05576000611c08565b60015b611c159060ff1683612117565b935082611c218161215f565b935050611ab0565b89600081518110611c3c57611c3c612198565b602002602001015198505050505050505050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611cc957611cc9611c53565b604052919050565b600067ffffffffffffffff831115611ceb57611ceb611c53565b611d1c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601611c82565b9050828152838383011115611d3057600080fd5b828260208301376000602084830101529392505050565b600060208284031215611d5957600080fd5b813567ffffffffffffffff811115611d7057600080fd5b8201601f81018413611d8157600080fd5b611d9084823560208401611cd1565b949350505050565b600060a08284031215611daa57600080fd5b60405160a0810167ffffffffffffffff8282108183111715611dce57611dce611c53565b81604052829350843583526020850135602084015260408501356040840152606085013560608401526080850135915080821115611e0b57600080fd5b508301601f81018513611e1d57600080fd5b611e2c85823560208401611cd1565b6080830152505092915050565b600082601f830112611e4a57600080fd5b8135602067ffffffffffffffff821115611e6657611e66611c53565b8160051b611e75828201611c82565b9283528481018201928281019087851115611e8f57600080fd5b83870192505b84831015611eae57823582529183019190830190611e95565b979650505050505050565b600080600060608486031215611ece57600080fd5b83359250602084013567ffffffffffffffff80821115611eed57600080fd5b611ef987838801611d98565b93506040860135915080821115611f0f57600080fd5b9085019060408288031215611f2357600080fd5b604051604081018181108382111715611f3e57611f3e611c53565b60405282358152602083013582811115611f5757600080fd5b611f6389828601611e39565b6020830152508093505050509250925092565b60008060408385031215611f8957600080fd5b823567ffffffffffffffff811115611fa057600080fd5b611fac85828601611e39565b95602094909401359450505050565b600060208284031215611fcd57600080fd5b813567ffffffffffffffff811115611fe457600080fd5b611d9084828501611d98565b6000815180845260005b8181101561201657602081850181015186830182015201611ffa565b81811115612028576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006117686020830184611ff0565b73ffffffffffffffffffffffffffffffffffffffff81168114610b9f57600080fd5b6000602082840312156120a257600080fd5b81516117688161206e565b6000602082840312156120bf57600080fd5b8151801515811461176857600080fd5b6000602082840312156120e157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561212a5761212a6120e8565b500190565b6000806040838503121561214257600080fd5b8251915060208301516121548161206e565b809150509250929050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612191576121916120e8565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156121d957600080fd5b81517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000008116811461176857600080fd5b84815283602082015282604082015260806060820152600061222e6080830184611ff0565b9695505050505050565b60008282101561224a5761224a6120e8565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261228d5761228d61224f565b500490565b6000826122a1576122a161224f565b500690565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156122de576122de6120e8565b50029056fe436861696e53746f72616765436f6e7461696e65722d5343432d62617463686573a264697066735822122060a057bdd3794e10fb5160d3519c4bc1d6ee67b68a543739f166ac503884e1da64736f6c6343000809003360806040523480156200001157600080fd5b50604051620011b3380380620011b3833981016040819052620000349162000129565b600080546001600160a01b0319166001600160a01b0384161790558051620000649060019060208401906200006d565b50505062000266565b8280546200007b9062000229565b90600052602060002090601f0160209004810192826200009f5760008555620000ea565b82601f10620000ba57805160ff1916838001178555620000ea565b82800160010185558215620000ea579182015b82811115620000ea578251825591602001919060010190620000cd565b50620000f8929150620000fc565b5090565b5b80821115620000f85760008155600101620000fd565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156200013d57600080fd5b82516001600160a01b03811681146200015557600080fd5b602084810151919350906001600160401b03808211156200017557600080fd5b818601915086601f8301126200018a57600080fd5b8151818111156200019f576200019f62000113565b604051601f8201601f19908116603f01168101908382118183101715620001ca57620001ca62000113565b816040528281528986848701011115620001e357600080fd5b600093505b82841015620002075784840186015181850187015292850192620001e8565b82841115620002195760008684830101525b8096505050505050509250929050565b600181811c908216806200023e57607f821691505b602082108114156200026057634e487b7160e01b600052602260045260246000fd5b50919050565b610f3d80620002766000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063461a4478116100815780639507d39a1161005b5780639507d39a146101a4578063b298e36b146101b7578063ccf8f969146101ca57600080fd5b8063461a4478146101695780634651d91e1461017c5780638da5cb5b1461018f57600080fd5b80632015276c116100b25780632015276c146100fe57806329061de214610111578063299ca4781461012457600080fd5b8063167fd681146100ce5780631f7b6d32146100e3575b600080fd5b6100e16100dc366004610c59565b6101e9565b005b6100eb61034d565b6040519081526020015b60405180910390f35b6100e161010c366004610c59565b610365565b6100e161011f366004610c85565b61043d565b6000546101449073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f5565b610144610177366004610cd6565b610517565b6100e161018a366004610da5565b6105c4565b61019761069b565b6040516100f59190610dbe565b6100eb6101b2366004610da5565b610729565b6100e16101c5366004610da5565b61073d565b6101d2610814565b60405164ffffffffff1990911681526020016100f5565b61027c600180546101f990610e31565b80601f016020809104026020016040519081016040528092919081815260200182805461022590610e31565b80156102725780601f1061024757610100808354040283529160200191610272565b820191906000526020600020905b81548152906001019060200180831161025557829003601f168201915b5050505050610517565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461033d57604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f436861696e53746f72616765436f6e7461696e65723a2046756e6374696f6e2060448201527f63616e206f6e6c792062652063616c6c656420627920746865206f776e65722e60648201526084015b60405180910390fd5b61034960028383610825565b5050565b6000610359600261090c565b64ffffffffff16905090565b610375600180546101f990610e31565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461043157604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f436861696e53746f72616765436f6e7461696e65723a2046756e6374696f6e2060448201527f63616e206f6e6c792062652063616c6c656420627920746865206f776e65722e6064820152608401610334565b61034960028383610957565b61044d600180546101f990610e31565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461050957604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f436861696e53746f72616765436f6e7461696e65723a2046756e6374696f6e2060448201527f63616e206f6e6c792062652063616c6c656420627920746865206f776e65722e6064820152608401610334565b6105146002826109e6565b50565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061056e908590600401610dbe565b60206040518083038186803b15801561058657600080fd5b505afa15801561059a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105be9190610e85565b92915050565b6105d4600180546101f990610e31565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461069057604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f436861696e53746f72616765436f6e7461696e65723a2046756e6374696f6e2060448201527f63616e206f6e6c792062652063616c6c656420627920746865206f776e65722e6064820152608401610334565b610514600282610a47565b600180546106a890610e31565b80601f01602080910402602001604051908101604052809291908181526020018280546106d490610e31565b80156107215780601f106106f657610100808354040283529160200191610721565b820191906000526020600020905b81548152906001019060200180831161070457829003601f168201915b505050505081565b60006105be600264ffffffffff8416610aa4565b61074d600180546101f990610e31565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461080957604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f436861696e53746f72616765436f6e7461696e65723a2046756e6374696f6e2060448201527f63616e206f6e6c792062652063616c6c656420627920746865206f776e65722e6064820152608401610334565b610514600282610b73565b60006108206002610bd0565b905090565b600061086784604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b9050806000015164ffffffffff168364ffffffffff16106108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f496e646578206f7574206f6620626f756e64732e0000000000000000000000006044820152606401610334565b64ffffffffff8316815264ffffffffff19821660208201526109068482610c1e565b50505050565b60008061094f83604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b519392505050565b600061099984604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b805164ffffffffff16600090815260018601602052604090208490558051909150816109c482610ebb565b64ffffffffff1690525064ffffffffff19821660208201526109068482610c1e565b6000610a2883604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b64ffffffffff19831660208201529050610a428382610c1e565b505050565b6000610a8983604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b9050610a42828260200151856108259092919063ffffffff16565b600080610ae784604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b805190915064ffffffffff168310610b5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f496e646578206f7574206f6620626f756e64732e0000000000000000000000006044820152606401610334565b50506000908152600191909101602052604090205490565b6000610bb583604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b9050610a42828260200151856109579092919063ffffffff16565b600080610c1383604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b602001519392505050565b8051602082015183548183179291908314610c37578285555b5050505050565b803564ffffffffff1981168114610c5457600080fd5b919050565b60008060408385031215610c6c57600080fd5b82359150610c7c60208401610c3e565b90509250929050565b600060208284031215610c9757600080fd5b610ca082610c3e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215610ce857600080fd5b813567ffffffffffffffff80821115610d0057600080fd5b818401915084601f830112610d1457600080fd5b813581811115610d2657610d26610ca7565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610d6c57610d6c610ca7565b81604052828152876020848701011115610d8557600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215610db757600080fd5b5035919050565b600060208083528351808285015260005b81811015610deb57858101830151858201604001528201610dcf565b81811115610dfd576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600181811c90821680610e4557607f821691505b60208210811415610e7f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215610e9757600080fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610ca057600080fd5b600064ffffffffff80831681811415610efd577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600101939250505056fea2646970667358221220e1995ee56c4c5e67de41c56ad510b16704727d3ab1fa5bb2e3c62b0bd7c0597564736f6c63430008090033608060405234801561001057600080fd5b5060405161048838038061048883398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6103f5806100936000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806302ad4d2a14610046578063299ca4781461006e578063461a4478146100b3575b600080fd5b61005961005436600461020d565b6100c6565b60405190151581526020015b60405180910390f35b60005461008e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610065565b61008e6100c1366004610260565b61013b565b60006101066040518060400160405280600c81526020017f4f564d5f50726f706f736572000000000000000000000000000000000000000081525061013b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061019290859060040161032f565b60206040518083038186803b1580156101aa57600080fd5b505afa1580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e291906103a2565b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461020a57600080fd5b50565b60006020828403121561021f57600080fd5b813561022a816101e8565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561027257600080fd5b813567ffffffffffffffff8082111561028a57600080fd5b818401915084601f83011261029e57600080fd5b8135818111156102b0576102b0610231565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156102f6576102f6610231565b8160405282815287602084870101111561030f57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208083528351808285015260005b8181101561035c57858101830151858201604001528201610340565b8181111561036e576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156103b457600080fd5b815161022a816101e856fea264697066735822122087d4cb97cd5a4456c2b8ab23d1374b6ac6874a5b854a207714f5b3768ca6d73a64736f6c63430008090033a2646970667358221220f5173b5ea49b9d5111e99aa41a43574a2abd8b1dc6eb9e489267e65cd729e8b764736f6c63430008090033", + ), + storage: storage{ + // address public agentAddress + "0x00": l1BuildAgent.address, + // address public paramAddress + "0x01": l1BuildParam.address, + }, + }, + { + contract: l1BuildStep3, + // commit: https://github.com/oasysgames/oasys-optimism/blob/20eff6890c0b64dc9e8a1e36f347c4d561a1e411/packages/contracts/contracts/oasys/L1/build/L1BuildStep3.sol + code: mustDecodeCode( + "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806338613690146100465780637ef7cca21461008f578063c4d66de8146100a4575b600080fd5b6000546100669073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100a261009d366004610725565b6100b7565b005b6100a26100b2366004610755565b610612565b60005473ffffffffffffffffffffffffffffffffffffffff16331461013d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f6f6e6c7920746865204c314275696c644167656e742063616e2063616c6c000060448201526064015b60405180910390fd5b600080546040517f408d26930000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff9091169063408d26939060240160206040518083038186803b1580156101a857600080fd5b505afa1580156101bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e09190610779565b905060006040516101f0906106d9565b604051809103906000f08015801561020c573d6000803e3d6000fd5b506040517fc4d66de800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529192509082169063c4d66de890602401600060405180830381600087803b15801561027a57600080fd5b505af115801561028e573d6000803e3d6000fd5b50506040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528416925063f2fde38b9150602401600060405180830381600087803b1580156102fb57600080fd5b505af115801561030f573d6000803e3d6000fd5b50505050600082604051610322906106e6565b73ffffffffffffffffffffffffffffffffffffffff9091168152604060208201819052601a908201527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000006060820152608001604051809103906000f080158015610390573d6000803e3d6000fd5b50905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166365c11a6c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156103fc57600080fd5b505afa158015610410573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104349190610779565b604051610440906106f3565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015610479573d6000803e3d6000fd5b50905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166365c11a6c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104e557600080fd5b505afa1580156104f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051d9190610779565b604051610529906106f3565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015610562573d6000803e3d6000fd5b506000546040517f85c89dad000000000000000000000000000000000000000000000000000000008152600481018a905273ffffffffffffffffffffffffffffffffffffffff87811660248301528681166044830152858116606483015280841660848301529293509116906385c89dad9060a401600060405180830381600087803b1580156105f157600080fd5b505af1158015610605573d6000803e3d6000fd5b5050505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1615610692576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e697469616c697a65206f6e6c79206f6e63650000000000000000000000006044820152606401610134565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b613c988061079783390190565b6105b58061442f83390190565b610a5d806149e483390190565b73ffffffffffffffffffffffffffffffffffffffff8116811461072257600080fd5b50565b6000806040838503121561073857600080fd5b82359150602083013561074a81610700565b809150509250929050565b60006020828403121561076757600080fd5b813561077281610700565b9392505050565b60006020828403121561078b57600080fd5b81516107728161070056fe608060405260cc80546001600160a01b03191661dead17905534801561002457600080fd5b50600080546001600160a01b0319169055613c54806100446000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c8063715018a6116100b2578063b1b1b20911610081578063c6b94ab011610066578063c6b94ab014610275578063d7fd19dd14610298578063f2fde38b146102ab57600080fd5b8063b1b1b2091461023f578063c4d66de81461026257600080fd5b8063715018a6146101fe57806381ada46c146102065780638456cb59146102195780638da5cb5b1461022157600080fd5b8063461a4478116100ee578063461a4478146101c55780635c975abb146101d85780636e296e45146101e35780636f1c8d47146101eb57600080fd5b80630ecf2eea1461012057806321d800ec14610135578063299ca4781461016d5780633dbb202b146101b2575b600080fd5b61013361012e36600461311d565b6102be565b005b61015861014336600461311d565b60ca6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b60005461018d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610164565b6101336101c0366004613295565b61036d565b61018d6101d33660046132f5565b6104b5565b60655460ff16610158565b61018d610562565b6101336101f9366004613346565b6105ec565b6101336107d3565b61013361021436600461311d565b610846565b6101336108ed565b60335473ffffffffffffffffffffffffffffffffffffffff1661018d565b61015861024d36600461311d565b60cb6020526000908152604090205460ff1681565b6101336102703660046133d2565b61095c565b61015861028336600461311d565b60c96020526000908152604090205460ff1681565b6101336102a6366004613538565b610ba9565b6101336102b93660046133d2565b611078565b60335473ffffffffffffffffffffffffffffffffffffffff16331461032a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b600081815260c96020526040808220805460ff191660011790555182917ff52508d5339edf0d7e5060a416df98db067af561bdc60872d29c0439eaa13a0291a250565b60006103ad6040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e000000000000008152506104b5565b905060008173ffffffffffffffffffffffffffffffffffffffff1663b8f770056040518163ffffffff1660e01b815260040160206040518083038186803b1580156103f757600080fd5b505afa15801561040b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042f9190613686565b905060006104468633878564ffffffffff16611174565b905061045983828663ffffffff166111ef565b8573ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a338785886040516104a594939291906136fd565b60405180910390a2505050505050565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061050c908590600401613750565b60206040518083038186803b15801561052457600080fd5b505afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c9190613763565b92915050565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff1661dead14156105cf5760405162461bcd60e51b815260206004820152601f60248201527f78446f6d61696e4d65737361676553656e646572206973206e6f7420736574006044820152606401610321565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b600061062c6040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e000000000000008152506104b5565b6040517f2a7f18be0000000000000000000000000000000000000000000000000000000081526004810186905290915060009073ffffffffffffffffffffffffffffffffffffffff831690632a7f18be9060240160606040518083038186803b15801561069857600080fd5b505afa1580156106ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d09190613780565b905060006106e089898989611174565b905060007311110000000000000000000000000000000011113001734200000000000000000000000000000000000007878460405160200161072594939291906137e5565b604051602081830303815290604052805190602001209050826000015181146107b65760405162461bcd60e51b815260206004820152602760248201527f50726f7669646564206d65737361676520686173206e6f74206265656e20656e60448201527f7175657565642e000000000000000000000000000000000000000000000000006064820152608401610321565b6107c784838763ffffffff166111ef565b50505050505050505050565b60335473ffffffffffffffffffffffffffffffffffffffff16331461083a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610321565b6108446000611290565b565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108ad5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610321565b600081815260c96020526040808220805460ff191690555182917f52c8a2680a9f4cc0ad0bf88f32096eadbebf0646ea611d93a0ce6a29a024040591a250565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109545760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610321565b610844611307565b6000547501000000000000000000000000000000000000000000900460ff16806109a1575060005474010000000000000000000000000000000000000000900460ff16155b610a135760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610321565b6000547501000000000000000000000000000000000000000000900460ff16158015610a7a57600080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff1675010100000000000000000000000000000000000000001790555b60005473ffffffffffffffffffffffffffffffffffffffff1615610b065760405162461bcd60e51b815260206004820152602a60248201527f4c3143726f7373446f6d61696e4d657373656e67657220616c7265616479206960448201527f6e7469616c697a65642e000000000000000000000000000000000000000000006064820152608401610321565b6000805473ffffffffffffffffffffffffffffffffffffffff84167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560cc805490911661dead179055610b5e6113b9565b610b66611508565b610b6e61162f565b610b76611788565b8015610ba557600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1690555b5050565b60026097541415610bfc5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610321565b600260975560655460ff1615610c545760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610321565b6000610c6286868686611174565b9050610c6e81836118dc565b1515600114610ce55760405162461bcd60e51b815260206004820152602760248201527f50726f7669646564206d65737361676520636f756c64206e6f7420626520766560448201527f7269666965642e000000000000000000000000000000000000000000000000006064820152608401610321565b8051602080830191909120600081815260cb90925260409091205460ff1615610d765760405162461bcd60e51b815260206004820152602b60248201527f50726f7669646564206d6573736167652068617320616c72656164792062656560448201527f6e2072656365697665642e0000000000000000000000000000000000000000006064820152608401610321565b600081815260c9602052604090205460ff1615610dfb5760405162461bcd60e51b815260206004820152602260248201527f50726f7669646564206d65737361676520686173206265656e20626c6f636b6560448201527f642e0000000000000000000000000000000000000000000000000000000000006064820152608401610321565b610e396040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e000000000000008152506104b5565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161415610eda5760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f742073656e64204c322d3e4c31206d6573736167657320746f204c60448201527f312073797374656d20636f6e7472616374732e000000000000000000000000006064820152608401610321565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff88811691909117909155604051600091891690610f3390889061382a565b6000604051808303816000865af19150503d8060008114610f70576040519150601f19603f3d011682016040523d82523d6000602084013e610f75565b606091505b505060cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080151560011415610ff557600082815260cb6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2611021565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f90600090a25b600083334360405160200161103893929190613846565b60408051601f198184030181529181528151602092830120600090815260ca9092529020805460ff19166001908117909155609755505050505050505050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146110df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610321565b73ffffffffffffffffffffffffffffffffffffffff81166111685760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610321565b61117181611290565b50565b60608484848460405160240161118d9493929190613898565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6040517f6fee07e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636fee07e0906112599073420000000000000000000000000000000000000790859087906004016138e2565b600060405180830381600087803b15801561127357600080fd5b505af1158015611287573d6000803e3d6000fd5b50505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60655460ff161561135a5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610321565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861138f3390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6000547501000000000000000000000000000000000000000000900460ff16806113fe575060005474010000000000000000000000000000000000000000900460ff16155b6114705760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610321565b6000547501000000000000000000000000000000000000000000900460ff161580156114d757600080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff1675010100000000000000000000000000000000000000001790555b801561117157600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16905550565b6000547501000000000000000000000000000000000000000000900460ff168061154d575060005474010000000000000000000000000000000000000000900460ff16155b6115bf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610321565b6000547501000000000000000000000000000000000000000000900460ff1615801561162657600080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff1675010100000000000000000000000000000000000000001790555b6114d733611290565b6000547501000000000000000000000000000000000000000000900460ff1680611674575060005474010000000000000000000000000000000000000000900460ff16155b6116e65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610321565b6000547501000000000000000000000000000000000000000000900460ff1615801561174d57600080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff1675010100000000000000000000000000000000000000001790555b6065805460ff19169055801561117157600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16905550565b6000547501000000000000000000000000000000000000000000900460ff16806117cd575060005474010000000000000000000000000000000000000000900460ff16155b61183f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610321565b6000547501000000000000000000000000000000000000000000900460ff161580156118a657600080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff1675010100000000000000000000000000000000000000001790555b6001609755801561117157600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16905550565b60006118e7826118ff565b80156118f857506118f88383611aa1565b9392505050565b6000806119406040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e0000000000000000000000008152506104b5565b60208401516040517f9418bddd00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff831691639418bddd9161199891600401613954565b60206040518083038186803b1580156119b057600080fd5b505afa1580156119c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e89190613967565b1580156118f857508251602084015160408086015190517f4d69ee5700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851693634d69ee5793611a51939192909190600401613989565b60206040518083038186803b158015611a6957600080fd5b505afa158015611a7d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f89190613967565b60008083734200000000000000000000000000000000000007604051602001611acb929190613a01565b60408051601f1981840301815282825280516020918201209083015260009082015260600160408051601f198184030181529082905280516020918201207f42000000000000000000000000000000000000000000000000000000000000009183019190915291506000908190611b5b9060340160408051601f1981840301815291905260608701518751611c85565b9092509050600182151514611bfe5760405162461bcd60e51b815260206004820152604d60248201527f4d6573736167652070617373696e67207072656465706c6f7920686173206e6f60448201527f74206265656e20696e697469616c697a6564206f7220696e76616c696420707260648201527f6f6f662070726f76696465642e00000000000000000000000000000000000000608482015260a401610321565b6000611c0982611cae565b9050611c7a84604051602001611c2191815260200190565b60408051601f19818403018152908290527f010000000000000000000000000000000000000000000000000000000000000060208301529060210160405160208183030381529060405288608001518460400151611d72565b979650505050505050565b600060606000611c9486611d96565b9050611ca1818686611dc8565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290611cdb83611ea3565b90506040518060800160405280611d0b83600081518110611cfe57611cfe613a4b565b6020026020010151611ed6565b8152602001611d2683600181518110611cfe57611cfe613a4b565b8152602001611d4e83600281518110611d4157611d41613a4b565b6020026020010151611edd565b8152602001611d6983600381518110611d4157611d41613a4b565b90529392505050565b600080611d7e86611d96565b9050611d8c81868686611fdf565b9695505050505050565b60608180519060200120604051602001611db291815260200190565b6040516020818303038152906040529050919050565b600060606000611dd785612015565b90506000806000611de9848a89612110565b81519295509093509150158080611dfd5750815b611e495760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e0000000000006044820152606401610321565b600081611e655760405180602001604052806000815250611e91565b611e9186611e74600188613aa9565b81518110611e8457611e84613a4b565b60200260200101516125ab565b919b919a509098505050505050505050565b60408051808201825260008082526020918201528151808301909252825182528083019082015260609061055c906125d5565b600061055c825b6000602182600001511115611f345760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e0000000000006044820152606401610321565b6000806000611f42856127d4565b919450925090506000816001811115611f5d57611f5d613ac0565b14611faa5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e0000000000006044820152606401610321565b6000838660200151611fbc9190613aef565b80519091506020841015611d8c5760208490036101000a90049695505050505050565b6000806000611fef878686611dc8565b91509150818015611c7a5750805160208083019190912087519188019190912014611c7a565b6060600061202283611ea3565b90506000815167ffffffffffffffff81111561204057612040613158565b60405190808252806020026020018201604052801561208557816020015b604080518082019091526060808252602082015281526020019060019003908161205e5790505b50905060005b82518110156121085760006120b88483815181106120ab576120ab613a4b565b6020026020010151612b25565b905060405180604001604052808281526020016120d483611ea3565b8152508383815181106120e9576120e9613a4b565b602002602001018190525050808061210090613b07565b91505061208b565b509392505050565b6000606081808061212087612bb5565b90506000869050600080612147604051806040016040528060608152602001606081525090565b60005b8c51811015612567578c818151811061216557612165613a4b565b60200260200101519150828461217b9190613aef565b9350612188600188613aef565b9650836121ec578151805160209091012085146121e75760405162461bcd60e51b815260206004820152601160248201527f496e76616c696420726f6f7420686173680000000000000000000000000000006044820152606401610321565b6122a9565b81515160201161224e578151805160209091012085146121e75760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c206861736800000000006044820152606401610321565b8461225c8360000151612d38565b146122a95760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f646520686173680000000000006044820152606401610321565b6122b560106001613aef565b826020015151141561232e5785518414156122cf57612567565b60008685815181106122e3576122e3613a4b565b602001015160f81c60f81b60f81c9050600083602001518260ff168151811061230e5761230e613a4b565b6020026020010151905061232181612d60565b9650600194505050612555565b6002826020015151141561250d57600061234783612d96565b905060008160008151811061235e5761235e613a4b565b016020015160f81c90506000612375600283613b6f565b612380906002613b91565b90506000612391848360ff16612dba565b9050600061239f8b8a612dba565b905060006123ad8383612df0565b905060ff8516600214806123c4575060ff85166003145b1561241a578083511480156123d95750808251145b156123eb576123e8818b613aef565b99505b507f80000000000000000000000000000000000000000000000000000000000000009950612567945050505050565b60ff8516158061242d575060ff85166001145b1561249f578251811461246957507f80000000000000000000000000000000000000000000000000000000000000009950612567945050505050565b612490886020015160018151811061248357612483613a4b565b6020026020010151612d60565b9a509750612555945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e2060448201527f70726566697800000000000000000000000000000000000000000000000000006064820152608401610321565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e0000006044820152606401610321565b8061255f81613b07565b91505061214a565b507f80000000000000000000000000000000000000000000000000000000000000008414866125968786612dba565b909e909d50909b509950505050505050505050565b6020810151805160609161055c916125c590600190613aa9565b815181106120ab576120ab613a4b565b60606000806125e3846127d4565b919350909150600190508160018111156125ff576125ff613ac0565b1461264c5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c50206c6973742076616c75652e0000000000000000006044820152606401610321565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816126655790505090506000835b86518110156127c957602082106127115760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201527f7374206c656e6774682e000000000000000000000000000000000000000000006064820152608401610321565b60008061274e6040518060400160405280858c600001516127329190613aa9565b8152602001858c602001516127479190613aef565b90526127d4565b50915091506040518060400160405280838361276a9190613aef565b8152602001848b6020015161277f9190613aef565b81525085858151811061279457612794613a4b565b60209081029190910101526127aa600185613aef565b93506127b68183613aef565b6127c09084613aef565b92505050612692565b508152949350505050565b60008060008084600001511161282c5760405162461bcd60e51b815260206004820152601860248201527f524c50206974656d2063616e6e6f74206265206e756c6c2e00000000000000006044820152606401610321565b6020840151805160001a607f8111612851576000600160009450945094505050612b1e565b60b781116128cd576000612866608083613aa9565b9050808760000151116128bb5760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420524c502073686f727420737472696e672e000000000000006044820152606401610321565b60019550935060009250612b1e915050565b60bf81116129bc5760006128e260b783613aa9565b9050808760000151116129375760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e006044820152606401610321565b600183015160208290036101000a90046129518183613aef565b8851116129a05760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c50206c6f6e6720737472696e672e00000000000000006044820152606401610321565b6129ab826001613aef565b9650945060009350612b1e92505050565b60f78111612a375760006129d160c083613aa9565b905080876000015111612a265760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c502073686f7274206c6973742e0000000000000000006044820152606401610321565b600195509350849250612b1e915050565b6000612a4460f783613aa9565b905080876000015111612a995760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e0000006044820152606401610321565b600183015160208290036101000a9004612ab38183613aef565b885111612b025760405162461bcd60e51b815260206004820152601660248201527f496e76616c696420524c50206c6f6e67206c6973742e000000000000000000006044820152606401610321565b612b0d826001613aef565b9650945060019350612b1e92505050565b9193909250565b60606000806000612b35856127d4565b919450925090506000816001811115612b5057612b50613ac0565b14612b9d5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c502062797465732076616c75652e00000000000000006044820152606401610321565b612bac85602001518484612e9c565b95945050505050565b6060600082516002612bc79190613bb4565b67ffffffffffffffff811115612bdf57612bdf613158565b6040519080825280601f01601f191660200182016040528015612c09576020820181803683370190505b50905060005b8351811015612d31576004848281518110612c2c57612c2c613a4b565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c82612c61836002613bb4565b81518110612c7157612c71613a4b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506010848281518110612cb457612cb4613a4b565b0160200151612cc6919060f81c613b6f565b60f81b82612cd5836002613bb4565b612ce0906001613aef565b81518110612cf057612cf0613a4b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080612d2981613b07565b915050612c0f565b5092915050565b6000602082511015612d4c57506020015190565b8180602001905181019061055c9190613bf1565b60006060602083600001511015612d8157612d7a83612f7b565b9050612d8d565b612d8a83612b25565b90505b6118f881612d38565b606061055c612db583602001516000815181106120ab576120ab613a4b565b612bb5565b606082518210612dd9575060408051602081019091526000815261055c565b6118f88383848651612deb9190613aa9565b612f86565b6000805b808451118015612e045750808351115b8015612e855750828181518110612e1d57612e1d613a4b565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110612e5c57612e5c613a4b565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156118f85780612e9481613b07565b915050612df4565b606060008267ffffffffffffffff811115612eb957612eb9613158565b6040519080825280601f01601f191660200182016040528015612ee3576020820181803683370190505b509050805160001415612ef75790506118f8565b6000612f038587613aef565b90506020820160005b612f17602087613c0a565b811015612f4e5782518252612f2d602084613aef565b9250612f3a602083613aef565b915080612f4681613b07565b915050612f0c565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b606061055c82613107565b606081612f9481601f613aef565b1015612fe25760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610321565b82612fed8382613aef565b101561303b5760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610321565b6130458284613aef565b845110156130955760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610321565b6060821580156130b457604051915060008252602082016040526130fe565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156130ed5780518352602092830192016130d5565b5050858452601f01601f1916604052505b50949350505050565b606061055c826020015160008460000151612e9c565b60006020828403121561312f57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461117157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156131aa576131aa613158565b60405290565b60405160a0810167ffffffffffffffff811182821017156131aa576131aa613158565b604051601f8201601f1916810167ffffffffffffffff811182821017156131fc576131fc613158565b604052919050565b600067ffffffffffffffff83111561321e5761321e613158565b6132316020601f19601f860116016131d3565b905082815283838301111561324557600080fd5b828260208301376000602084830101529392505050565b600082601f83011261326d57600080fd5b6118f883833560208501613204565b803563ffffffff8116811461329057600080fd5b919050565b6000806000606084860312156132aa57600080fd5b83356132b581613136565b9250602084013567ffffffffffffffff8111156132d157600080fd5b6132dd8682870161325c565b9250506132ec6040850161327c565b90509250925092565b60006020828403121561330757600080fd5b813567ffffffffffffffff81111561331e57600080fd5b8201601f8101841361332f57600080fd5b61333e84823560208401613204565b949350505050565b60008060008060008060c0878903121561335f57600080fd5b863561336a81613136565b9550602087013561337a81613136565b9450604087013567ffffffffffffffff81111561339657600080fd5b6133a289828a0161325c565b945050606087013592506133b86080880161327c565b91506133c660a0880161327c565b90509295509295509295565b6000602082840312156133e457600080fd5b81356118f881613136565b600060a0828403121561340157600080fd5b60405160a0810167ffffffffffffffff828210818311171561342557613425613158565b8160405282935084358352602085013560208401526040850135604084015260608501356060840152608085013591508082111561346257600080fd5b5061346f8582860161325c565b6080830152505092915050565b60006040828403121561348e57600080fd5b613496613187565b90508135815260208083013567ffffffffffffffff808211156134b857600080fd5b818501915085601f8301126134cc57600080fd5b8135818111156134de576134de613158565b8060051b91506134ef8483016131d3565b818152918301840191848101908884111561350957600080fd5b938501935b838510156135275784358252938501939085019061350e565b808688015250505050505092915050565b600080600080600060a0868803121561355057600080fd5b853561355b81613136565b9450602086013561356b81613136565b9350604086013567ffffffffffffffff8082111561358857600080fd5b61359489838a0161325c565b94506060880135935060808801359150808211156135b157600080fd5b9087019060a0828a0312156135c557600080fd5b6135cd6131b0565b823581526020830135828111156135e357600080fd5b6135ef8b8286016133ef565b60208301525060408301358281111561360757600080fd5b6136138b82860161347c565b60408301525060608301358281111561362b57600080fd5b6136378b82860161325c565b60608301525060808301358281111561364f57600080fd5b61365b8b82860161325c565b6080830152508093505050509295509295909350565b805164ffffffffff8116811461329057600080fd5b60006020828403121561369857600080fd5b6118f882613671565b60005b838110156136bc5781810151838201526020016136a4565b838111156136cb576000848401525b50505050565b600081518084526136e98160208601602086016136a1565b601f01601f19169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8516815260806020820152600061372c60808301866136d1565b905064ffffffffff8416604083015263ffffffff8316606083015295945050505050565b6020815260006118f860208301846136d1565b60006020828403121561377557600080fd5b81516118f881613136565b60006060828403121561379257600080fd5b6040516060810181811067ffffffffffffffff821117156137b5576137b5613158565b604052825181526137c860208401613671565b60208201526137d960408401613671565b60408201529392505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525063ffffffff8416604083015260806060830152611d8c60808301846136d1565b6000825161383c8184602087016136a1565b9190910192915050565b600084516138588184602089016136a1565b60609490941b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001691909301908152601481019190915260340192915050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526138d160808301856136d1565b905082606083015295945050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612bac60608301846136d1565b805182526020810151602083015260408101516040830152606081015160608301526000608082015160a0608085015261333e60a08501826136d1565b6020815260006118f86020830184613917565b60006020828403121561397957600080fd5b815180151581146118f857600080fd5b838152600060206060818401526139a36060840186613917565b83810360408501526040810185518252828601516040848401528181518084526060850191508583019450600093505b808410156139f357845182529385019360019390930192908501906139d3565b509998505050505050505050565b60008351613a138184602088016136a1565b60609390931b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190920190815260140192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015613abb57613abb613a7a565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60008219821115613b0257613b02613a7a565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b3957613b39613a7a565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060ff831680613b8257613b82613b40565b8060ff84160691505092915050565b600060ff821660ff841680821015613bab57613bab613a7a565b90039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bec57613bec613a7a565b500290565b600060208284031215613c0357600080fd5b5051919050565b600082613c1957613c19613b40565b50049056fea2646970667358221220feab407f2c49fed8e1c5d2a57f14dd17236e44c665f11870bb505fc3d545335164736f6c63430008090033608060405234801561001057600080fd5b506040516105b53803806105b583398101604081905261002f91610125565b30600090815260016020908152604080832080546001600160a01b0319166001600160a01b038716179055828252909120825161006e92840190610076565b505050610252565b82805461008290610217565b90600052602060002090601f0160209004810192826100a457600085556100ea565b82601f106100bd57805160ff19168380011785556100ea565b828001600101855582156100ea579182015b828111156100ea5782518255916020019190600101906100cf565b506100f69291506100fa565b5090565b5b808211156100f657600081556001016100fb565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561013857600080fd5b82516001600160a01b038116811461014f57600080fd5b602084810151919350906001600160401b038082111561016e57600080fd5b818601915086601f83011261018257600080fd5b8151818111156101945761019461010f565b604051601f8201601f19908116603f011681019083821181831017156101bc576101bc61010f565b8160405282815289868487010111156101d457600080fd5b600093505b828410156101f657848401860151818501870152928501926101d9565b828411156102075760008684830101525b8096505050505050509250929050565b600181811c9082168061022b57607f821691505b6020821081141561024c57634e487b7160e01b600052602260045260246000fd5b50919050565b610354806102616000396000f3fe608060408181523060009081526001602090815282822054908290529181207fbf40fac1000000000000000000000000000000000000000000000000000000009093529173ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061006d9060846101f2565b60206040518083038186803b15801561008557600080fd5b505afa158015610099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100bd91906102d1565b905073ffffffffffffffffffffffffffffffffffffffff8116610166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5461726765742061646472657373206d75737420626520696e697469616c697a60448201527f65642e0000000000000000000000000000000000000000000000000000000000606482015260840160405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff1660003660405161019192919061030e565b600060405180830381855af49150503d80600081146101cc576040519150601f19603f3d011682016040523d82523d6000602084013e6101d1565b606091505b509092509050600182151514156101ea57805160208201f35b805160208201fd5b600060208083526000845481600182811c91508083168061021457607f831692505b85831081141561024b577f4e487b710000000000000000000000000000000000000000000000000000000085526022600452602485fd5b8786018381526020018180156102685760018114610297576102c2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616825287820196506102c2565b60008b81526020902060005b868110156102bc578154848201529085019089016102a3565b83019750505b50949998505050505050505050565b6000602082840312156102e357600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461030757600080fd5b9392505050565b818382376000910190815291905056fea2646970667358221220d66a7dad92a7f7528f41181719174e1d244423b8bb730d2884645c76cfa0944064736f6c63430008090033608060405234801561001057600080fd5b50604051610a5d380380610a5d83398101604081905261002f9161005d565b610057817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b5061008d565b60006020828403121561006f57600080fd5b81516001600160a01b038116811461008657600080fd5b9392505050565b6109c18061009c6000396000f3fe60806040526004361061005a5760003560e01c8063893d20e811610043578063893d20e8146100a45780639b0b0fda146100e2578063aaf10f42146101025761005a565b806313af4035146100645780636c5d4ad014610084575b610062610117565b005b34801561007057600080fd5b5061006261007f366004610792565b6103ba565b34801561009057600080fd5b5061006261009f3660046107fe565b61044b565b3480156100b057600080fd5b506100b9610601565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100ee57600080fd5b506100626100fd3660046108cd565b610698565b34801561010e57600080fd5b506100b9610706565b60006101417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb7947262000000000000000000000000000000000000000000000000000000001790529051919250600091829173ffffffffffffffffffffffffffffffffffffffff8516916101c3919061092a565b600060405180830381855afa9150503d80600081146101fe576040519150601f19603f3d011682016040523d82523d6000602084013e610203565b606091505b5091509150818015610216575080516020145b156102c8576000818060200190518101906102319190610936565b905080156102c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c314368756753706c61736850726f78793a2073797374656d2069732063757260448201527f72656e746c79206265696e67207570677261646564000000000000000000000060648201526084015b60405180910390fd5b505b60006102f27f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4c314368756753706c61736850726f78793a20696d706c656d656e746174696f60448201527f6e206973206e6f7420736574207965740000000000000000000000000000000060648201526084016102bd565b3660008037600080366000845af43d6000803e806103b4573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610413575033155b1561044357610440817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b50565b610440610117565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806104a4575033155b156104435760006104d37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b9050803f8251602084012014156104e8575050565b60405160009061051e907f600d380380600d6000396000f30000000000000000000000000000000000000090859060200161094f565b604051602081830303815290604052905060008151602083016000f084516020860120909150813f146105d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f4c314368756753706c61736850726f78793a20636f646520776173206e6f742060448201527f636f72726563746c79206465706c6f7965642e0000000000000000000000000060648201526084016102bd565b6105fb817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b50505050565b600061062b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610662575033155b1561068d57507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610695610117565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806106f1575033155b156106fa579055565b610702610117565b5050565b60006107307fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610767575033155b1561068d57507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000602082840312156107a457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146107c857600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561081057600080fd5b813567ffffffffffffffff8082111561082857600080fd5b818401915084601f83011261083c57600080fd5b81358181111561084e5761084e6107cf565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610894576108946107cf565b816040528281528760208487010111156108ad57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080604083850312156108e057600080fd5b50508035926020909101359150565b6000815160005b8181101561091057602081850181015186830152016108f6565b8181111561091f576000828601525b509290920192915050565b60006107c882846108ef565b60006020828403121561094857600080fd5b5051919050565b7fffffffffffffffffffffffffff00000000000000000000000000000000000000831681526000610983600d8301846108ef565b94935050505056fea2646970667358221220aea34fd8cdcf3a9cced029d5f7b1e628f42ad1514501878e0040df2afddb6e7164736f6c63430008090033a26469706673582212200c92deadd8d06b4b4e16219fa1a2fc7ff041d68509e7bcf5945e67176145ff2764736f6c63430008090033", + ), + storage: storage{ + // address public agentAddress + "0x00": l1BuildAgent.address, + }, + }, + { + contract: l1BuildStep4, + // commit: https://github.com/oasysgames/oasys-optimism/blob/20eff6890c0b64dc9e8a1e36f347c4d561a1e411/packages/contracts/contracts/oasys/L1/build/L1BuildStep4.sol + code: mustDecodeCode( + "0x60806040523480156200001157600080fd5b5060043610620000525760003560e01c806303305d3214620000575780633861369014620000a1578063485cc95514620000c25780637ef7cca214620000db575b600080fd5b600154620000789073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b600054620000789073ffffffffffffffffffffffffffffffffffffffff1681565b620000d9620000d336600462000eda565b620000f2565b005b620000d9620000ec36600462000f18565b620001ee565b60005473ffffffffffffffffffffffffffffffffffffffff161580156200012f575060015473ffffffffffffffffffffffffffffffffffffffff16155b6200019b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e697469616c697a65206f6e6c79206f6e636500000000000000000000000060448201526064015b60405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560018054929093169116179055565b60005473ffffffffffffffffffffffffffffffffffffffff16331462000271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f6f6e6c7920746865204c314275696c644167656e742063616e2063616c6c0000604482015260640162000192565b600080546040517f408d26930000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff9091169063408d26939060240160206040518083038186803b158015620002dd57600080fd5b505afa158015620002f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000318919062000f40565b6000546040517f4dbbce2a000000000000000000000000000000000000000000000000000000008152600481018690529192508291606091829173ffffffffffffffffffffffffffffffffffffffff90911690634dbbce2a9060240160006040518083038186803b1580156200038d57600080fd5b505afa158015620003a2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003cc9190810190620010f9565b8092508193505050600083868484604051620003e89062000e98565b620003f7949392919062001277565b604051809103906000f08015801562000414573d6000803e3d6000fd5b506040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192509085169063f2fde38b90602401600060405180830381600087803b1580156200048357600080fd5b505af115801562000498573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663bc3a429b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620004e557600080fd5b505af1158015620004fa573d6000803e3d6000fd5b50506040517fbf40fac100000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f50726f78795f5f4f564d5f4c3143726f7373446f6d61696e4d657373656e676560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526000925073ffffffffffffffffffffffffffffffffffffffff8716915063bf40fac19060840160206040518083038186803b158015620005bb57600080fd5b505afa158015620005d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005f6919062000f40565b6040517fc4d66de800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152919250829182169063c4d66de890602401600060405180830381600087803b1580156200066557600080fd5b505af11580156200067a573d6000803e3d6000fd5b50506040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811660048301528416925063f2fde38b9150602401600060405180830381600087803b158015620006e857600080fd5b505af1158015620006fd573d6000803e3d6000fd5b50506040517fbf40fac100000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50726f78795f5f4f564d5f4c315374616e64617264427269646765000000000060448201526000925073ffffffffffffffffffffffffffffffffffffffff8916915063bf40fac19060640160206040518083038186803b1580156200079857600080fd5b505afa158015620007ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007d3919062000f40565b905060008190506000818b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca6573fb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200084757600080fd5b505afa1580156200085c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200088291906200133a565b60405160009073ffffffffffffffffffffffffffffffffffffffff8a169060019073420000000000000000000000000000000000001090620008c49062000ea6565b73ffffffffffffffffffffffffffffffffffffffff978816815296909516602087015260408601939093526060850191909152608084015260a083015260c082015260e001604051809103906000f08015801562000926573d6000803e3d6000fd5b506040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8083166004830152919250908316906313af403590602401600060405180830381600087803b1580156200099557600080fd5b505af1158015620009aa573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16630bf56f21600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166332f517236040518163ffffffff1660e01b815260040160006040518083038186803b15801562000a3357600080fd5b505afa15801562000a48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a72919081019062001354565b6040518263ffffffff1660e01b815260040162000a909190620013aa565b600060405180830381600087803b15801562000aab57600080fd5b505af115801562000ac0573d6000803e3d6000fd5b50506040517fbf40fac100000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f50726f78795f5f4f564d5f4c314552433732314272696467650000000000000060448201526000925073ffffffffffffffffffffffffffffffffffffffff8c16915063bf40fac19060640160206040518083038186803b15801562000b5b57600080fd5b505afa15801562000b70573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b96919062000f40565b905060008190506000818e600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d1eb6466040518163ffffffff1660e01b815260040160206040518083038186803b15801562000c0a57600080fd5b505afa15801562000c1f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4591906200133a565b60405160009073ffffffffffffffffffffffffffffffffffffffff8d16906001907362000000000000000000000000000000000000019062000c879062000ea6565b73ffffffffffffffffffffffffffffffffffffffff978816815296909516602087015260408601939093526060850191909152608084015260a083015260c082015260e001604051809103906000f08015801562000ce9573d6000803e3d6000fd5b506040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8083166004830152919250908316906313af403590602401600060405180830381600087803b15801562000d5857600080fd5b505af115801562000d6d573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16630bf56f21600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166335f7317c6040518163ffffffff1660e01b815260040160006040518083038186803b15801562000df657600080fd5b505afa15801562000e0b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000e35919081019062001354565b6040518263ffffffff1660e01b815260040162000e539190620013aa565b600060405180830381600087803b15801562000e6e57600080fd5b505af115801562000e83573d6000803e3d6000fd5b50505050505050505050505050505050505050565b610d5e80620013c083390190565b610883806200211e83390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462000ed757600080fd5b50565b6000806040838503121562000eee57600080fd5b823562000efb8162000eb4565b9150602083013562000f0d8162000eb4565b809150509250929050565b6000806040838503121562000f2c57600080fd5b82359150602083013562000f0d8162000eb4565b60006020828403121562000f5357600080fd5b815162000f608162000eb4565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562000fc25762000fc262000f67565b604052919050565b600067ffffffffffffffff82111562000fe75762000fe762000f67565b5060051b60200190565b60005b838110156200100e57818101518382015260200162000ff4565b838111156200101e576000848401525b50505050565b600067ffffffffffffffff83111562001041576200104162000f67565b620010566020601f19601f8601160162000f96565b90508281528383830111156200106b57600080fd5b62000f6083602083018462000ff1565b600082601f8301126200108d57600080fd5b81516020620010a6620010a08362000fca565b62000f96565b82815260059290921b84018101918181019086841115620010c657600080fd5b8286015b84811015620010ee578051620010e08162000eb4565b8352918301918301620010ca565b509695505050505050565b60008060408084860312156200110e57600080fd5b835167ffffffffffffffff808211156200112757600080fd5b818601915086601f8301126200113c57600080fd5b815160206200114f620010a08362000fca565b82815260059290921b8401810191818101908a8411156200116f57600080fd5b8286015b84811015620011c1578051868111156200118d5760008081fd5b8701603f81018d13620011a05760008081fd5b620011b28d868301518b840162001024565b84525091830191830162001173565b5091890151919750909450505080831115620011dc57600080fd5b5050620011ec858286016200107b565b9150509250929050565b600081518084526200121081602086016020860162000ff1565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b838110156200126c57815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010162001238565b509495945050505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff808816845260208188168186015260806040860152829150865180845260a08601925060a08160051b870101935081880160005b8281101562001316577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6088870301855262001303868351620011f6565b95509383019390830190600101620012c6565b505050505082810360608401526200132f818562001224565b979650505050505050565b6000602082840312156200134d57600080fd5b5051919050565b6000602082840312156200136757600080fd5b815167ffffffffffffffff8111156200137f57600080fd5b8201601f810184136200139157600080fd5b620013a28482516020840162001024565b949350505050565b60208152600062000f606020830184620011f656fe60806040523480156200001157600080fd5b5060405162000d5e38038062000d5e83398101604081905262000034916200037a565b600080546001600160a01b038087166001600160a01b03199283161790925560018054928616929091169190911790558051825114620000ee5760405162461bcd60e51b815260206004820152604560248201527f416464726573734469637461746f723a204d7573742070726f7669646520616e60448201527f20657175616c206e756d626572206f66206e616d657320616e6420616464726560648201526439b9b2b99760d91b608482015260a40160405180910390fd5b60005b8251811015620001c357600260405180604001604052808584815181106200011d576200011d62000505565b602002602001015181526020018484815181106200013f576200013f62000505565b6020908102919091018101516001600160a01b0316909152825460018101845560009384529281902082518051939460020290910192620001849284920190620001ce565b5060209190910151600190910180546001600160a01b0319166001600160a01b0390921691909117905580620001ba816200051b565b915050620000f1565b505050505062000582565b828054620001dc9062000545565b90600052602060002090601f0160209004810192826200020057600085556200024b565b82601f106200021b57805160ff19168380011785556200024b565b828001600101855582156200024b579182015b828111156200024b5782518255916020019190600101906200022e565b50620002599291506200025d565b5090565b5b808211156200025957600081556001016200025e565b6001600160a01b03811681146200028a57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620002ce57620002ce6200028d565b604052919050565b60006001600160401b03821115620002f257620002f26200028d565b5060051b60200190565b600082601f8301126200030e57600080fd5b81516020620003276200032183620002d6565b620002a3565b82815260059290921b840181019181810190868411156200034757600080fd5b8286015b848110156200036f578051620003618162000274565b83529183019183016200034b565b509695505050505050565b600080600080608085870312156200039157600080fd5b84516200039e8162000274565b80945050602080860151620003b38162000274565b60408701519094506001600160401b0380821115620003d157600080fd5b818801915088601f830112620003e657600080fd5b8151620003f76200032182620002d6565b81815260059190911b8301840190848101908b8311156200041757600080fd5b8585015b83811015620004ce57805185811115620004355760008081fd5b8601603f81018e13620004485760008081fd5b87810151868111156200045f576200045f6200028d565b62000473601f8201601f19168a01620002a3565b8181528f60408385010111156200048a5760008081fd5b60005b82811015620004ab57838101604001518282018c01528a016200048d565b82811115620004bd5760008b84840101525b50855250509186019186016200041b565b5060608b01519097509450505080831115620004e957600080fd5b5050620004f987828801620002fc565b91505092959194509250565b634e487b7160e01b600052603260045260246000fd5b60006000198214156200053e57634e487b7160e01b600052601160045260246000fd5b5060010190565b600181811c908216806200055a57607f821691505b602082108114156200057c57634e487b7160e01b600052602260045260246000fd5b50919050565b6107cc80620005926000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80633ccad6fc116100505780633ccad6fc146100c0578063481c6a75146100d5578063bc3a429b146100f557600080fd5b806317ad94ec1461006c578063297d1a34146100b6575b600080fd5b60015461008c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100be6100fd565b005b6100c8610232565b6040516100ad91906104af565b60005461008c9073ffffffffffffffffffffffffffffffffffffffff1681565b6100be610343565b60015473ffffffffffffffffffffffffffffffffffffffff1633146101a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f416464726573734469637461746f723a206f6e6c792063616c6c61626c65206260448201527f792066696e616c4f776e65720000000000000000000000000000000000000000606482015260840160405180910390fd5b6000546001546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063f2fde38b906024015b600060405180830381600087803b15801561021857600080fd5b505af115801561022c573d6000803e3d6000fd5b50505050565b60606002805480602002602001604051908101604052809291908181526020016000905b8282101561033a5783829060005260206000209060020201604051806040016040529081600082018054610289906105ae565b80601f01602080910402602001604051908101604052809291908181526020018280546102b5906105ae565b80156103025780601f106102d757610100808354040283529160200191610302565b820191906000526020600020905b8154815290600101906020018083116102e557829003601f168201915b505050918352505060019182015473ffffffffffffffffffffffffffffffffffffffff16602091820152918352929092019101610256565b50505050905090565b60005b600254811015610454576000546002805473ffffffffffffffffffffffffffffffffffffffff90921691639b2ea4bd91908490811061038757610387610602565b9060005260206000209060020201600001600284815481106103ab576103ab610602565b60009182526020909120600160029092020101546040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815261040f929173ffffffffffffffffffffffffffffffffffffffff1690600401610631565b600060405180830381600087803b15801561042957600080fd5b505af115801561043d573d6000803e3d6000fd5b50505050808061044c90610736565b915050610346565b506000546001546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063f2fde38b906024016101fe565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101561059f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08a8503018652825180518886528051808a880152845b81811015610532578281018c0151888201606001528b01610516565b8181111561054357856060838a0101525b50918a015173ffffffffffffffffffffffffffffffffffffffff16868b01525095880195601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690930160600192918701916001016104d7565b50919998505050505050505050565b600181811c908216806105c257607f821691505b602082108114156105fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60408152600080845481600182811c91508083168061065157607f831692505b602080841082141561068a577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b60408801849052606088018280156106a957600181146106d857610703565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00871682528282019750610703565b60008c81526020902060005b878110156106fd578154848201529086019084016106e4565b83019850505b50508596506107298189018a73ffffffffffffffffffffffffffffffffffffffff169052565b5050505050509392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561078f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212207993fbd341ec4f9e20c9ca42c43294b14f2a103fa8da10fc05d197e3abc8766164736f6c6343000809003360806040526000805460ff1916600117905534801561001d57600080fd5b5060405161088338038061088383398101604081905261003c916100a8565b60008054610100600160a81b0319166101006001600160a01b03998a1602179055600180546001600160a01b031916969097169590951790955560029290925560035560045560059190915560065561010f565b6001600160a01b03811681146100a557600080fd5b50565b600080600080600080600060e0888a0312156100c357600080fd5b87516100ce81610090565b60208901519097506100df81610090565b604089015160608a015160808b015160a08c015160c0909c01519a9d939c50919a90999198509650945092505050565b6107658061011e6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c8063708518de11610076578063a3b2d8a51161005b578063a3b2d8a51461015c578063b794726214610165578063d4b839921461018257600080fd5b8063708518de1461014a578063907023dd1461015357600080fd5b806318edaaf2116100a757806318edaaf214610122578063297d1a34146101395780635307023b1461014157600080fd5b80630bf56f21146100c357806317ad94ec146100d8575b600080fd5b6100d66100d13660046105ed565b6101a7565b005b6001546100f89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61012b60025481565b604051908152602001610119565b6100d6610489565b61012b60045481565b61012b60035481565b61012b60065481565b61012b60055481565b6000546101729060ff1681565b6040519015158152602001610119565b6000546100f890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6002548151602083012014610243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4368756753706c6173684469637461746f723a20496e636f727265637420636f60448201527f646520686173682e00000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000546040517f6c5d4ad000000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690636c5d4ad09061029d9084906004016106bc565b600060405180830381600087803b1580156102b757600080fd5b505af11580156102cb573d6000803e3d6000fd5b5050600054600354600480546040517f9b0b0fda00000000000000000000000000000000000000000000000000000000815291820192909252602481019190915261010090910473ffffffffffffffffffffffffffffffffffffffff169250639b0b0fda9150604401600060405180830381600087803b15801561034e57600080fd5b505af1158015610362573d6000803e3d6000fd5b50506000546005546006546040517f9b0b0fda0000000000000000000000000000000000000000000000000000000081526004810192909252602482015261010090910473ffffffffffffffffffffffffffffffffffffffff169250639b0b0fda9150604401600060405180830381600087803b1580156103e257600080fd5b505af11580156103f6573d6000803e3d6000fd5b50506000546001546040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526101009092041692506313af40359150602401600060405180830381600087803b15801561046e57600080fd5b505af1158015610482573d6000803e3d6000fd5b5050505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4368756753706c6173684469637461746f723a206f6e6c792063616c6c61626c60448201527f652062792066696e616c4f776e65720000000000000000000000000000000000606482015260840161023a565b6000546001546040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261010090920416906313af403590602401600060405180830381600087803b1580156105a457600080fd5b505af11580156105b8573d6000803e3d6000fd5b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156105ff57600080fd5b813567ffffffffffffffff8082111561061757600080fd5b818401915084601f83011261062b57600080fd5b81358181111561063d5761063d6105be565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610683576106836105be565b8160405282815287602084870101111561069c57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208083528351808285015260005b818110156106e9578581018301518582016040015282016106cd565b818111156106fb576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea2646970667358221220d6996ebde67a73563bf52d2b5545adec064534b2fcd91ec70e83fc1ef951152464736f6c63430008090033a2646970667358221220951845e890ab9203b30da702a3968c462c24b850de19dab1f4d34df732ef8e3a64736f6c63430008090033", + ), + storage: storage{ + // address public agentAddress + "0x00": l1BuildAgent.address, + // address public paramAddress + "0x01": l1BuildParam.address, + }, + }, + { + contract: l1BuildAllowList, + // commit: https://github.com/oasysgames/oasys-optimism/blob/28313096a0cc758c3d4fbdc29a2078a5ef78cb70/packages/contracts/contracts/oasys/libraries/Allowlist.sol + code: mustDecodeCode( + "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063715018a61161005b578063715018a6146100d25780638da5cb5b146100da578063c5eff3d014610102578063f2fde38b1461011757600080fd5b8063322433e31461008257806338eada1c146100aa5780634ba79dfe146100bf575b600080fd5b610095610090366004610a53565b61012a565b60405190151581526020015b60405180910390f35b6100bd6100b8366004610a53565b6101e7565b005b6100bd6100cd366004610a53565b6103ed565b6100bd61072e565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a1565b61010a6107bb565b6040516100a19190610a90565b6100bd610125366004610a53565b61082a565b60008061014c60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16141561017057506001919050565b6101e160018054806020026020016040519081016040528092919081815260200182805480156101d657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116101ab575b50505050508361095a565b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102de60018054806020026020016040519081016040528092919081815260200182805480156102d357602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116102a8575b50505050508261095a565b15610345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f616c7265616479206164646564000000000000000000000000000000000000006044820152606401610264565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f28f54e0b69489ad5fd27625e6fcff58faff5da96f8a077d08bb09af25bb41d549060200160405180910390a150565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610264565b6104dd60018054806020026020016040519081016040528092919081815260200182805480156102d35760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116102a85750505050508261095a565b610543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f61646472657373206e6f7420666f756e640000000000000000000000000000006044820152606401610264565b6001546000805b610555600184610b19565b81101561067357811580156105b357508373ffffffffffffffffffffffffffffffffffffffff166001828154811061058f5761058f610b30565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16145b156105bd57600191505b81156106615760016105cf8282610b5f565b815481106105df576105df610b30565b6000918252602090912001546001805473ffffffffffffffffffffffffffffffffffffffff909216918390811061061857610618610b30565b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8061066b81610b77565b91505061054a565b50600180548061068557610685610bb0565b60008281526020908190207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908301810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590910190915560405173ffffffffffffffffffffffffffffffffffffffff851681527f458680f79aa9de0ae06344287a3bd8ec6179faa05252e9af81ae734d6b4dc6ba910160405180910390a1505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610264565b6107b960006109de565b565b6060600180548060200260200160405190810160405280929190818152602001828054801561082057602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116107f5575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610264565b73ffffffffffffffffffffffffffffffffffffffff811661094e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610264565b610957816109de565b50565b8151600090815b818110156109d3578373ffffffffffffffffffffffffffffffffffffffff1685828151811061099257610992610b30565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156109c1576001925050506101e1565b806109cb81610b77565b915050610961565b506000949350505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610a6557600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610a8957600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610ade57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610aac565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015610b2b57610b2b610aea565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115610b7257610b72610aea565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610ba957610ba9610aea565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212201785ecf5877acc9d1f9db6528041816518f95e4f871e44d00797031028d66a8064736f6c63430008090033", + ), + storage: storage{ + // address private _owner + "0x00": genesismap{ + params.OasysMainnetGenesisHash: mainnetGenesisWalletAddress, + }, + }, + }, + { + contract: nsuiteGnosisSafe, + code: mustDecodeCode( + "0x6080604052600436106101dc5760003560e01c8063affed0e011610102578063e19a9dd911610095578063f08a032311610064578063f08a032314611647578063f698da2514611698578063f8dc5dd9146116c3578063ffa1ad741461173e57610231565b8063e19a9dd91461139b578063e318b52b146113ec578063e75235b81461147d578063e86637db146114a857610231565b8063cc2f8452116100d1578063cc2f8452146110e8578063d4d9bdcd146111b5578063d8d11f78146111f0578063e009cfde1461132a57610231565b8063affed0e014610d94578063b4faba0914610dbf578063b63e800d14610ea7578063c4ca3a9c1461101757610231565b80635624b25b1161017a5780636a761202116101495780636a761202146109945780637d83297414610b50578063934f3a1114610bbf578063a0e67e2b14610d2857610231565b80635624b25b146107fb5780635ae6bd37146108b9578063610b592514610908578063694e80c31461095957610231565b80632f54bf6e116101b65780632f54bf6e146104d35780633408e4701461053a578063468721a7146105655780635229073f1461067a57610231565b80630d582f131461029e57806312fb68e0146102f95780632d9ad53d1461046c57610231565b36610231573373ffffffffffffffffffffffffffffffffffffffff167f3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d346040518082815260200191505060405180910390a2005b34801561023d57600080fd5b5060007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b905080548061027257600080f35b36600080373360601b365260008060143601600080855af13d6000803e80610299573d6000fd5b3d6000f35b3480156102aa57600080fd5b506102f7600480360360408110156102c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117ce565b005b34801561030557600080fd5b5061046a6004803603608081101561031c57600080fd5b81019080803590602001909291908035906020019064010000000081111561034357600080fd5b82018360208201111561035557600080fd5b8035906020019184600183028401116401000000008311171561037757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103da57600080fd5b8201836020820111156103ec57600080fd5b8035906020019184600183028401116401000000008311171561040e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611bbe565b005b34801561047857600080fd5b506104bb6004803603602081101561048f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612546565b60405180821515815260200191505060405180910390f35b3480156104df57600080fd5b50610522600480360360208110156104f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612618565b60405180821515815260200191505060405180910390f35b34801561054657600080fd5b5061054f6126ea565b6040518082815260200191505060405180910390f35b34801561057157600080fd5b506106626004803603608081101561058857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156105cf57600080fd5b8201836020820111156105e157600080fd5b8035906020019184600183028401116401000000008311171561060357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506126f7565b60405180821515815260200191505060405180910390f35b34801561068657600080fd5b506107776004803603608081101561069d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156106e457600080fd5b8201836020820111156106f657600080fd5b8035906020019184600183028401116401000000008311171561071857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506128dd565b60405180831515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107bf5780820151818401526020810190506107a4565b50505050905090810190601f1680156107ec5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561080757600080fd5b5061083e6004803603604081101561081e57600080fd5b810190808035906020019092919080359060200190929190505050612913565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561087e578082015181840152602081019050610863565b50505050905090810190601f1680156108ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108c557600080fd5b506108f2600480360360208110156108dc57600080fd5b810190808035906020019092919050505061299a565b6040518082815260200191505060405180910390f35b34801561091457600080fd5b506109576004803603602081101561092b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129b2565b005b34801561096557600080fd5b506109926004803603602081101561097c57600080fd5b8101908080359060200190929190505050612d44565b005b610b3860048036036101408110156109ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109f257600080fd5b820183602082011115610a0457600080fd5b80359060200191846001830284011164010000000083111715610a2657600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610ab257600080fd5b820183602082011115610ac457600080fd5b80359060200191846001830284011164010000000083111715610ae657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612e7e565b60405180821515815260200191505060405180910390f35b348015610b5c57600080fd5b50610ba960048036036040811015610b7357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506133bb565b6040518082815260200191505060405180910390f35b348015610bcb57600080fd5b50610d2660048036036060811015610be257600080fd5b810190808035906020019092919080359060200190640100000000811115610c0957600080fd5b820183602082011115610c1b57600080fd5b80359060200191846001830284011164010000000083111715610c3d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ca057600080fd5b820183602082011115610cb257600080fd5b80359060200191846001830284011164010000000083111715610cd457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506133e0565b005b348015610d3457600080fd5b50610d3d61346f565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d80578082015181840152602081019050610d65565b505050509050019250505060405180910390f35b348015610da057600080fd5b50610da9613618565b6040518082815260200191505060405180910390f35b348015610dcb57600080fd5b50610ea560048036036040811015610de257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610e1f57600080fd5b820183602082011115610e3157600080fd5b80359060200191846001830284011164010000000083111715610e5357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061361e565b005b348015610eb357600080fd5b506110156004803603610100811015610ecb57600080fd5b8101908080359060200190640100000000811115610ee857600080fd5b820183602082011115610efa57600080fd5b80359060200191846020830284011164010000000083111715610f1c57600080fd5b909192939192939080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610f6757600080fd5b820183602082011115610f7957600080fd5b80359060200191846001830284011164010000000083111715610f9b57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613640565b005b34801561102357600080fd5b506110d26004803603608081101561103a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561108157600080fd5b82018360208201111561109357600080fd5b803590602001918460018302840111640100000000831117156110b557600080fd5b9091929391929390803560ff1690602001909291905050506137fe565b6040518082815260200191505060405180910390f35b3480156110f457600080fd5b506111416004803603604081101561110b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613926565b60405180806020018373ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019060200280838360005b838110156111a0578082015181840152602081019050611185565b50505050905001935050505060405180910390f35b3480156111c157600080fd5b506111ee600480360360208110156111d857600080fd5b8101908080359060200190929190505050613b18565b005b3480156111fc57600080fd5b50611314600480360361014081101561121457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561125b57600080fd5b82018360208201111561126d57600080fd5b8035906020019184600183028401116401000000008311171561128f57600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613cb7565b6040518082815260200191505060405180910390f35b34801561133657600080fd5b506113996004803603604081101561134d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ce4565b005b3480156113a757600080fd5b506113ea600480360360208110156113be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614075565b005b3480156113f857600080fd5b5061147b6004803603606081101561140f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506140f9565b005b34801561148957600080fd5b5061149261476b565b6040518082815260200191505060405180910390f35b3480156114b457600080fd5b506115cc60048036036101408110156114cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561151357600080fd5b82018360208201111561152557600080fd5b8035906020019184600183028401116401000000008311171561154757600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614775565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561160c5780820151818401526020810190506115f1565b50505050905090810190601f1680156116395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561165357600080fd5b506116966004803603602081101561166a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061491d565b005b3480156116a457600080fd5b506116ad61497e565b6040518082815260200191505060405180910390f35b3480156116cf57600080fd5b5061173c600480360360608110156116e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506149fc565b005b34801561174a57600080fd5b50611753614e2f565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611793578082015181840152602081019050611778565b50505050905090810190601f1680156117c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6117d6614e68565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156118405750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561187857503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600081548092919060010191905055507f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2682604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414611bba57611bb981612d44565b5b5050565b611bd2604182614f0b90919063ffffffff16565b82511015611c48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808060008060008060008091505b8882101561253857611c6a8a83614f45565b80955081965082975050505060008560ff161415612073578360001c9650611c9c60418a614f0b90919063ffffffff16565b8360001c1015611d14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8951611d2d60208560001c614f7490919063ffffffff16565b1115611da1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006020848c01015190508a51611dd782611dc960208860001c614f7490919063ffffffff16565b614f7490919063ffffffff16565b1115611e4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60606020858d010190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168973ffffffffffffffffffffffffffffffffffffffff166320c13b0b8f846040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611eed578082015181840152602081019050611ed2565b50505050905090810190601f168015611f1a5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611f53578082015181840152602081019050611f38565b50505050905090810190601f168015611f805780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b158015611f9f57600080fd5b505afa158015611fb3573d6000803e3d6000fd5b505050506040513d6020811015611fc957600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461206c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b50506122b8565b60018560ff161415612187578360001c96508673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061211057506000600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e81526020019081526020016000205414155b612182576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6122b7565b601e8560ff16111561224f5760018c60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012060048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561223e573d6000803e3d6000fd5b5050506020604051035196506122b6565b60018c86868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156122a9573d6000803e3d6000fd5b5050506020604051035196505b5b5b600173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141580156122fa57506122f987612618565b5b156123075786955061244e565b600061231161346f565b905060019650600091505b805182101561244c57600081838151811061233357fe5b60200260200101519050600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612378575061243f565b6000813b90506000811415801561242d57508173ffffffffffffffffffffffffffffffffffffffff16632f54bf6e8b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156123f157600080fd5b505afa158015612405573d6000803e3d6000fd5b505050506040513d602081101561241b57600080fd5b81019080805190602001909291905050505b1561243c57819850505061244c565b50505b818060010192505061231c565b505b8773ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161180156124b65750600173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b612528576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323600000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8597508180600101925050611c58565b505050505050505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600173ffffffffffffffffffffffffffffffffffffffff16141580156126115750600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156126e35750600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000804690508091505090565b6000600173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156127c25750600073ffffffffffffffffffffffffffffffffffffffff16600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b612834576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612841858585855a614f93565b90508015612891573373ffffffffffffffffffffffffffffffffffffffff167f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb860405160405180910390a26128d5565b3373ffffffffffffffffffffffffffffffffffffffff167facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37560405160405180910390a25b949350505050565b600060606128ed868686866126f7565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060006020830267ffffffffffffffff8111801561293157600080fd5b506040519080825280601f01601f1916602001820160405280156129645781602001600182028036833780820191505090505b50905060005b8381101561298f5780850154806020830260208501015250808060010191505061296a565b508091505092915050565b60076020528060005260406000206000915090505481565b6129ba614e68565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015612a245750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b612a96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b97576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b612d4c614e68565b600354811115612dc4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001811015612e3b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806004819055507f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c936004546040518082815260200191505060405180910390a150565b6000806000612e988e8e8e8e8e8e8e8e8e8e600554614775565b905060056000815480929190600101919050555080805190602001209150612ec18282866133e0565b506000612ecc614fdf565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146130b2578073ffffffffffffffffffffffffffffffffffffffff166375f0bb528f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b8152600401808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115612f6f57fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018473ffffffffffffffffffffffffffffffffffffffff16815260200183810383528d8d82818152602001925080828437600081840152601f19601f820116905080830192505050838103825285818151815260200191508051906020019080838360005b83811015613041578082015181840152602081019050613026565b50505050905090810190601f16801561306e5780820380516001836020036101000a031916815260200191505b509e505050505050505050505050505050600060405180830381600087803b15801561309957600080fd5b505af11580156130ad573d6000803e3d6000fd5b505050505b6101f46130d96109c48b01603f60408d02816130ca57fe5b0461501090919063ffffffff16565b015a101561314f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60005a90506131b88f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e60008d146131ad578e6131b3565b6109c45a035b614f93565b93506131cd5a8261502a90919063ffffffff16565b905083806131dc575060008a14155b806131e8575060008814155b61325a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008089111561327457613271828b8b8b8b61504a565b90505b84156132be577f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e8482604051808381526020018281526020019250505060405180910390a16132fe565b7f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d238482604051808381526020018281526020019250505060405180910390a15b5050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146133aa578073ffffffffffffffffffffffffffffffffffffffff16639327136883856040518363ffffffff1660e01b815260040180838152602001821515815260200192505050600060405180830381600087803b15801561339157600080fd5b505af11580156133a5573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b600060045490506000811161345d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61346984848484611bbe565b50505050565b6060600060035467ffffffffffffffff8111801561348c57600080fd5b506040519080825280602002602001820160405280156134bb5781602001602082028036833780820191505090505b50905060008060026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461360f578083838151811061356657fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508180600101925050613525565b82935050505090565b60055481565b600080825160208401855af4806000523d6020523d600060403e60403d016000fd5b61368b8a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505089615250565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146136c9576136c884615750565b5b6137178787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061577f565b60008211156137315761372f8260006001868561504a565b505b3373ffffffffffffffffffffffffffffffffffffffff167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a88b8b8b8b8960405180806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281038252878782818152602001925060200280828437600081840152601f19601f820116905080830192505050965050505050505060405180910390a250505050505050505050565b6000805a9050613855878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050865a614f93565b61385e57600080fd5b60005a8203905080604051602001808281526020019150506040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156138eb5780820151818401526020810190506138d0565b50505050905090810190601f1680156139185780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b606060008267ffffffffffffffff8111801561394157600080fd5b506040519080825280602002602001820160405280156139705781602001602082028036833780820191505090505b509150600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613a435750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015613a4e57508482105b15613b095780848381518110613a6057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081806001019250506139d9565b80925081845250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff16600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613c1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16817ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c60405160405180910390a350565b6000613ccc8c8c8c8c8c8c8c8c8c8c8c614775565b8051906020012090509b9a5050505050505050505050565b613cec614e68565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613d565750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b613dc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613ec8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b61407d614e68565b60007f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b90508181557f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa282604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b614101614e68565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561416b5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156141a357503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b614215576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614316576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156143805750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6143f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146144f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a17f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b6000600454905090565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d860001b8d8d8d8d60405180838380828437808301925050509250505060405180910390208c8c8c8c8c8c8c604051602001808c81526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189815260200188600181111561480657fe5b81526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019b505050505050505050505050604051602081830303815290604052805190602001209050601960f81b600160f81b61489261497e565b8360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018381526020018281526020019450505050506040516020818303038152906040529150509b9a5050505050505050505050565b614925614e68565b61492e81615750565b7f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921860001b6149ac6126ea565b30604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405160208183030381529060405280519060200120905090565b614a04614e68565b806001600354031015614a7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015614ae95750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b614b5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614c5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008154809291906001900391905055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414614e2a57614e2981612d44565b5b505050565b6040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614f09576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b565b600080831415614f1e5760009050614f3f565b6000828402905082848281614f2f57fe5b0414614f3a57600080fd5b809150505b92915050565b60008060008360410260208101860151925060408101860151915060ff60418201870151169350509250925092565b600080828401905083811015614f8957600080fd5b8091505092915050565b6000600180811115614fa157fe5b836001811115614fad57fe5b1415614fc6576000808551602087018986f49050614fd6565b600080855160208701888a87f190505b95945050505050565b6000807f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b9050805491505090565b6000818310156150205781615022565b825b905092915050565b60008282111561503957600080fd5b600082840390508091505092915050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146150875782615089565b325b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156151a1576150f33a86106150d0573a6150d2565b855b6150e5888a614f7490919063ffffffff16565b614f0b90919063ffffffff16565b91508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505061519c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b615246565b6151c6856151b8888a614f7490919063ffffffff16565b614f0b90919063ffffffff16565b91506151d38482846159ba565b615245576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5095945050505050565b6000600454146152c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b815181111561533f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60018110156153b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006001905060005b83518110156156bc5760008482815181106153d657fe5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561544a5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561548257503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156154ba57508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b61552c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461562d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508092505080806001019150506153bf565b506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550825160038190555081600481905550505050565b60007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b90508181555050565b600073ffffffffffffffffffffffffffffffffffffffff1660016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614615881576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001806000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146159b6576159438260008360015a614f93565b6159b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5050565b60008063a9059cbb8484604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050602060008251602084016000896127105a03f13d60008114615a615760208114615a695760009350615a74565b819350615a74565b600051158215171593505b505050939250505056fea264697066735822122038be17aeeb4bf95ff3f3ebc2eeec00436c94fcdc1f5b1a723c10c64b3f14ce7d64736f6c63430007060033", + ), + storage: storage{ + // uint256 internal threshold + "0x04": common.Big1, + }, + }, + { + contract: nsuiteGnosisSafeProxyFactory, + code: mustDecodeCode( + "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c806361b69abd1161006657806361b69abd146103bb57806368fa8134146104c0578063addacc0f14610504578063c999117614610587578063d18af54d146105cb5761009e565b80630a2eb301146100a35780631688f0b9146100fd5780632500510e1461020c57806353e5d935146102d9578063543b36931461035c575b600080fd5b6100e5600480360360208110156100b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106fa565b60405180821515815260200191505060405180910390f35b6101e06004803603606081101561011357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561015057600080fd5b82018360208201111561016257600080fd5b8035906020019184600183028401116401000000008311171561018457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291905050506107cb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102ad6004803603606081101561022257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561025f57600080fd5b82018360208201111561027157600080fd5b8035906020019184600183028401116401000000008311171561029357600080fd5b9091929391929390803590602001909291905050506108ed565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102e1610a1a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610321578082015181840152602081019050610306565b50505050905090810190601f16801561034e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610364610a45565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156103a757808201518184015260208101905061038c565b505050509050019250505060405180910390f35b610494600480360360408110156103d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561040e57600080fd5b82018360208201111561042057600080fd5b8035906020019184600183028401116401000000008311171561044257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610bec565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610502600480360360208110156104d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610cd1565b005b61050c611291565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561054c578082015181840152602081019050610531565b50505050905090810190601f1680156105795780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105c96004803603602081101561059d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112bc565b005b6106ce600480360360808110156105e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561061e57600080fd5b82018360208201111561063057600080fd5b8035906020019184600183028401116401000000008311171561065257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116cf565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156107c45750600073ffffffffffffffffffffffffffffffffffffffff166000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b60006107d6336106fa565b610848576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f475331303030310000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6108538484846118fa565b905060008351111561087b5760008060008551602087016000865af1141561087a57600080fd5b5b7f4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e2358185604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a19392505050565b600061093e8585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050846118fa565b905080604051602001808273ffffffffffffffffffffffffffffffffffffffff1660601b81526014019150506040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156109df5780820151818401526020810190506109c4565b50505050905090810190601f168015610a0c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b606060405180602001610a2c90611a8e565b6020820181038252601f19601f82011660405250905090565b6060600060015467ffffffffffffffff81118015610a6257600080fd5b50604051908082528060200260200182016040528015610a915781602001602082028036833780820191505090505b509050600080806000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610be35780838381518110610b3b57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508180600101925050610afa565b82935050505090565b600082604051610bfb90611a8e565b808273ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f080158015610c37573d6000803e3d6000fd5b509050600082511115610c605760008060008451602086016000865af11415610c5f57600080fd5b5b7f4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e2358184604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a192915050565b610cda336106fa565b610d4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f475331303030310000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600180540311610dc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f475331303030340000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015610e305750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b610ea2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f475331303030320000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600190505b6000808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508173ffffffffffffffffffffffffffffffffffffffff166000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015610fd15750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b610ea9578173ffffffffffffffffffffffffffffffffffffffff166000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f475331303030350000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160008154809291906001900391905055507f7b309bf0232684e703b0a791653cc857835761a0365ccade0e2aa66ef02ca53082604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b6060604051806020016112a390611a9b565b6020820181038252601f19601f82011660405250905090565b6112c5336106fa565b611337576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f475331303030310000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156113a15750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b611413576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f475331303030320000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611513576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f475331303030330000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600080600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600080600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600081548092919060010191905055507f1d37cb7b1c6fd2a757acce811a604fac9c4a3d2e453faff6a1358e126ba8d2dc81604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60006116da336106fa565b61174c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f475331303030310000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008383604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1660601b8152601401925050506040516020818303038152906040528051906020012060001c90506117a68686836107cb565b9150600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146118f1578273ffffffffffffffffffffffffffffffffffffffff16631e52b518838888886040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561188957808201518184015260208101905061186e565b50505050905090810190601f1680156118b65780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156118d857600080fd5b505af11580156118ec573d6000803e3d6000fd5b505050505b50949350505050565b600080826040516020018082815260200191505060405160208183030381529060405280519060200120905060006040518060200161193890611a8e565b6020820181038252601f19601f820116604052508673ffffffffffffffffffffffffffffffffffffffff166040516020018083805190602001908083835b602083106119995780518252602082019150602081019050602083039250611976565b6001836020036101000a038019825116818451168082178552505050505050905001828152602001925050506040516020818303038152906040529050818151826020016000f59250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a85576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f437265617465322063616c6c206661696c65640000000000000000000000000081525060200191505060405180910390fd5b50509392505050565b6101e680611aa883390190565b60ab80611c8e8339019056fe608060405234801561001057600080fd5b506040516101e63803806101e68339818101604052602081101561003357600080fd5b8101908080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156100ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806101c46022913960400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060ab806101196000396000f3fe608060405273ffffffffffffffffffffffffffffffffffffffff600054167fa619486e0000000000000000000000000000000000000000000000000000000060003514156050578060005260206000f35b3660008037600080366000845af43d6000803e60008114156070573d6000fd5b3d6000f3fea2646970667358221220d1429297349653a4918076d650332de1a1068c5f3e07c5c82360c277770b955264736f6c63430007060033496e76616c69642073696e676c65746f6e20616464726573732070726f7669646564608060405273ffffffffffffffffffffffffffffffffffffffff600054167fa619486e0000000000000000000000000000000000000000000000000000000060003514156050578060005260206000f35b3660008037600080366000845af43d6000803e60008114156070573d6000fd5b3d6000f3fea2646970667358221220d1429297349653a4918076d650332de1a1068c5f3e07c5c82360c277770b955264736f6c63430007060033a2646970667358221220b348b7b9a93d312ee0be5dfa6ad57baedea8278324f92f89631c8bdcd6efcd5364736f6c63430007060033", + ), + storage: storage{ + // mapping(address => address) internal administrators + "0x00": genesismap{ + params.OasysMainnetGenesisHash: mapping{ + keyFn: addressKeyFn, + values: map[string]interface{}{ + "0x0000000000000000000000000000000000000001": "0x2273e9bD041d1405cB3f9DCa42fafC9358b07f79", + "0x2273e9bD041d1405cB3f9DCa42fafC9358b07f79": "0x0000000000000000000000000000000000000001", + }, + }, + defaultGenesisHash: mapping{ + keyFn: addressKeyFn, + values: map[string]interface{}{ + "0x0000000000000000000000000000000000000001": "0x377b21b3D7d6F9B1dBf00176f96cCf4CABD100d2", + "0x377b21b3D7d6F9B1dBf00176f96cCf4CABD100d2": "0x0000000000000000000000000000000000000001", + }, + }, + }, + // uint256 internal administratorCount + "0x01": common.Big1, + }, + }, + { + contract: nsuiteCompatibilityFallbackHandler, + code: mustDecodeCode( + "0x608060405234801561001057600080fd5b50600436106100ce5760003560e01c80636ac247841161008c578063bc197c8111610066578063bc197c81146107bb578063bd61951d14610951578063f23a6e6114610a63578063ffa1ad7414610b63576100ce565b80636ac24784146105ea578063a3f4df7e146106d9578063b2494df31461075c576100ce565b806223de29146100d357806301ffc9a71461020b5780630a1028c41461026e578063150b7a021461033d5780631626ba7e1461043357806320c13b0b146104e9575b600080fd5b610209600480360360c08110156100e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561017057600080fd5b82018360208201111561018257600080fd5b803590602001918460018302840111640100000000831117156101a457600080fd5b9091929391929390803590602001906401000000008111156101c557600080fd5b8201836020820111156101d757600080fd5b803590602001918460018302840111640100000000831117156101f957600080fd5b9091929391929390505050610be6565b005b6102566004803603602081101561022157600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bf0565b60405180821515815260200191505060405180910390f35b6103276004803603602081101561028457600080fd5b81019080803590602001906401000000008111156102a157600080fd5b8201836020820111156102b357600080fd5b803590602001918460018302840111640100000000831117156102d557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610d2a565b6040518082815260200191505060405180910390f35b6103fe6004803603608081101561035357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156103ba57600080fd5b8201836020820111156103cc57600080fd5b803590602001918460018302840111640100000000831117156103ee57600080fd5b9091929391929390505050610d3d565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6104b46004803603604081101561044957600080fd5b81019080803590602001909291908035906020019064010000000081111561047057600080fd5b82018360208201111561048257600080fd5b803590602001918460018302840111640100000000831117156104a457600080fd5b9091929391929390505050610d52565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6105b5600480360360408110156104ff57600080fd5b810190808035906020019064010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184600183028401116401000000008311171561055057600080fd5b90919293919293908035906020019064010000000081111561057157600080fd5b82018360208201111561058357600080fd5b803590602001918460018302840111640100000000831117156105a557600080fd5b9091929391929390505050610f0a565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6106c36004803603604081101561060057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561063d57600080fd5b82018360208201111561064f57600080fd5b8035906020019184600183028401116401000000008311171561067157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061115b565b6040518082815260200191505060405180910390f35b6106e16112cd565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610721578082015181840152602081019050610706565b50505050905090810190601f16801561074e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610764611306565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156107a757808201518184015260208101905061078c565b505050509050019250505060405180910390f35b61091c600480360360a08110156107d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561082e57600080fd5b82018360208201111561084057600080fd5b8035906020019184602083028401116401000000008311171561086257600080fd5b90919293919293908035906020019064010000000081111561088357600080fd5b82018360208201111561089557600080fd5b803590602001918460208302840111640100000000831117156108b757600080fd5b9091929391929390803590602001906401000000008111156108d857600080fd5b8201836020820111156108ea57600080fd5b8035906020019184600183028401116401000000008311171561090c57600080fd5b909192939192939050505061146d565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6109e86004803603604081101561096757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156109a457600080fd5b8201836020820111156109b657600080fd5b803590602001918460018302840111640100000000831117156109d857600080fd5b9091929391929390505050611485565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a28578082015181840152602081019050610a0d565b50505050905090810190601f168015610a555780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b2e600480360360a0811015610a7957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610aea57600080fd5b820183602082011115610afc57600080fd5b80359060200191846001830284011164010000000083111715610b1e57600080fd5b90919293919293905050506114ef565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b610b6b611505565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bab578082015181840152602081019050610b90565b50505050905090810190601f168015610bd85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b5050505050505050565b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cbb57507f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d2357507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000610d36338361115b565b9050919050565b600063150b7a0260e01b905095945050505050565b60008033905060008173ffffffffffffffffffffffffffffffffffffffff166320c13b0b876040516020018082815260200191505060405160208183030381529060405287876040518463ffffffff1660e01b8152600401808060200180602001838103835286818151815260200191508051906020019080838360005b83811015610deb578082015181840152602081019050610dd0565b50505050905090810190601f168015610e185780820380516001836020036101000a031916815260200191505b508381038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060206040518083038186803b158015610e6357600080fd5b505afa158015610e77573d6000803e3d6000fd5b505050506040513d6020811015610e8d57600080fd5b810190808051906020019092919050505090506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610ef657600060e01b610eff565b631626ba7e60e01b5b925050509392505050565b6000803390506000610f608288888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061115b565b905060008585905014156110755760008273ffffffffffffffffffffffffffffffffffffffff16635ae6bd37836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610fc157600080fd5b505afa158015610fd5573d6000803e3d6000fd5b505050506040513d6020811015610feb57600080fd5b81019080805190602001909291905050501415611070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f48617368206e6f7420617070726f76656400000000000000000000000000000081525060200191505060405180910390fd5b611147565b8173ffffffffffffffffffffffffffffffffffffffff1663934f3a1182898989896040518663ffffffff1660e01b81526004018086815260200180602001806020018381038352878782818152602001925080828437600081840152601f19601f8201169050808301925050508381038252858582818152602001925080828437600081840152601f19601f82011690508083019250505097505050505050505060006040518083038186803b15801561112e57600080fd5b505afa158015611142573d6000803e3d6000fd5b505050505b6320c13b0b60e01b92505050949350505050565b6000807f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca60001b83805190602001206040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050601960f81b600160f81b8573ffffffffffffffffffffffffffffffffffffffff1663f698da256040518163ffffffff1660e01b815260040160206040518083038186803b15801561120957600080fd5b505afa15801561121d573d6000803e3d6000fd5b505050506040513d602081101561123357600080fd5b81019080805190602001909291905050508360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018381526020018281526020019450505050506040516020818303038152906040528051906020012091505092915050565b6040518060400160405280601881526020017f44656661756c742043616c6c6261636b2048616e646c6572000000000000000081525081565b6060600033905060008173ffffffffffffffffffffffffffffffffffffffff1663cc2f84526001600a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060006040518083038186803b15801561138057600080fd5b505afa158015611394573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060408110156113be57600080fd5b81019080805160405193929190846401000000008211156113de57600080fd5b838201915060208201858111156113f457600080fd5b825186602082028301116401000000008211171561141157600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561144857808201518184015260208101905061142d565b5050505090500160405260200180519060200190929190505050509050809250505090565b600063bc197c8160e01b905098975050505050505050565b60606040517fb4faba09000000000000000000000000000000000000000000000000000000008152600436036004808301376020600036836000335af15060203d036040519250808301604052806020843e6000516114e657825160208401fd5b50509392505050565b600063f23a6e6160e01b90509695505050505050565b6040518060400160405280600581526020017f312e302e300000000000000000000000000000000000000000000000000000008152508156fea2646970667358221220c442b2d533954457d3b4b55cb2485c7bc35c09b825c575be1b86282f7fdc559f64736f6c63430007060033", + ), + }, + { + contract: sccVerifier, + code: mustDecodeCode( + "0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063d17f1fb11461003b578063dea2619d14610050575b600080fd5b61004e610049366004610c9e565b610063565b005b61004e61005e366004610c9e565b610152565b6100708383600084610234565b6040517f9594dd6400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690639594dd64906100c2908590600401610dd5565b600060405180830381600087803b1580156100dc57600080fd5b505af11580156100f0573d6000803e3d6000fd5b5050505081600001518373ffffffffffffffffffffffffffffffffffffffff167f2d6c30e420d4abe074221e2e344cec3bd0f565a2e09435a3d9d738f69332a6dd846020015160405161014591815260200190565b60405180910390a3505050565b61015f8383600184610234565b6040517fe0c2b41800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063e0c2b418906101b1908590600401610dd5565b600060405180830381600087803b1580156101cb57600080fd5b505af11580156101df573d6000803e3d6000fd5b5050505081600001518373ffffffffffffffffffffffffffffffffffffffff167f4785b50466d5e0124a77ed43985b62f3b454caff4b6cfc6aa94ab02c5e5df1f5846020015160405161014591815260200190565b8251602080850151604080514681850152606089901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016818301526054810194909452607484019190915284151560f81b6094840152805160758185030181526095909301905281519101206000906102ae90836102c0565b90506102b9816105aa565b5050505050565b6060815167ffffffffffffffff8111156102dc576102dc610aca565b604051908082528060200260200182016040528015610305578160200160208202803683370190505b506040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101859052909150600090605c016040516020818303038152906040528051906020012090506000805b84518110156105a157600085828151811061037857610378610e20565b6020026020010151905060008061038f86846108d5565b909250905060018160048111156103a8576103a8610e4f565b14156103eb57826040517ff31b6ee50000000000000000000000000000000000000000000000000000000081526004016103e29190610e7e565b60405180910390fd5b60028160048111156103ff576103ff610e4f565b141561043957826040517ff31b6ee50000000000000000000000000000000000000000000000000000000081526004016103e29190610ed0565b600381600481111561044d5761044d610e4f565b141561048757826040517ff31b6ee50000000000000000000000000000000000000000000000000000000081526004016103e29190610f22565b600481600481111561049b5761049b610e4f565b14156104d557826040517ff31b6ee50000000000000000000000000000000000000000000000000000000081526004016103e29190610f9a565b8473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1611610552576040517f3d1fd1b000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016103e2565b8187858151811061056557610565610e20565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015250925081905061059981611041565b91505061035b565b50505092915050565b8051611001906000805b828110156107d55760008582815181106105d0576105d0610e20565b60209081029190910101516040517f7b520aa800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8083166004830152919250600091871690637b520aa89060240160206040518083038186803b15801561064857600080fd5b505afa15801561065c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610680919061107a565b6040517fd1f18ee100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808316600483015260006024830181905292935082919089169063d1f18ee19060440160a06040518083038186803b1580156106f657600080fd5b505afa15801561070a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072e91906110b3565b945050505091508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146107b2576040517f5b73c50400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016103e2565b6107bc8187611113565b95505050505080806107cd90611041565b9150506105b4565b506040517f45367f230000000000000000000000000000000000000000000000000000000081526000600482018190529060649073ffffffffffffffffffffffffffffffffffffffff8616906345367f239060240160206040518083038186803b15801561084257600080fd5b505afa158015610856573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087a919061112b565b6108849190611144565b61088f90603361117f565b9050808210156102b9576040517f09b3dd4a00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016103e2565b60008082516041141561090c5760208301516040840151606085015160001a61090087828585610945565b9450945050505061093e565b825160401415610936576020830151604084015161092b868383610a5d565b93509350505061093e565b506000905060025b9250929050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561097c5750600090506003610a54565b8460ff16601b1415801561099457508460ff16601c14155b156109a55750600090506004610a54565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156109f9573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116610a4d57600060019250925050610a54565b9150600090505b94509492505050565b6000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831660ff84901c601b01610a9787828885610945565b935093505050935093915050565b73ffffffffffffffffffffffffffffffffffffffff81168114610ac757600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715610b1c57610b1c610aca565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610b6957610b69610aca565b604052919050565b600082601f830112610b8257600080fd5b813567ffffffffffffffff811115610b9c57610b9c610aca565b610bcd60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610b22565b818152846020838601011115610be257600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610c1057600080fd5b8135602067ffffffffffffffff80831115610c2d57610c2d610aca565b8260051b610c3c838201610b22565b9384528581018301938381019088861115610c5657600080fd5b84880192505b85831015610c9257823584811115610c745760008081fd5b610c828a87838c0101610b71565b8352509184019190840190610c5c565b98975050505050505050565b600080600060608486031215610cb357600080fd5b8335610cbe81610aa5565b9250602084013567ffffffffffffffff80821115610cdb57600080fd5b9085019060a08288031215610cef57600080fd5b610cf7610af9565b82358152602083013560208201526040830135604082015260608301356060820152608083013582811115610d2b57600080fd5b610d3789828601610b71565b60808301525093506040860135915080821115610d5357600080fd5b50610d6086828701610bff565b9150509250925092565b6000815180845260005b81811015610d9057602081850181015186830182015201610d74565b81811115610da2576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152815160208201526020820151604082015260408201516060820152606082015160808201526000608083015160a080840152610e1860c0840182610d6a565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b604081526000610e916040830184610d6a565b8281036020840152601881527f45434453413a20696e76616c6964207369676e6174757265000000000000000060208201526040810191505092915050565b604081526000610ee36040830184610d6a565b8281036020840152601f81527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060208201526040810191505092915050565b604081526000610f356040830184610d6a565b8281036020840152602281527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60208201527f756500000000000000000000000000000000000000000000000000000000000060408201526060810191505092915050565b604081526000610fad6040830184610d6a565b8281036020840152602281527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60208201527f756500000000000000000000000000000000000000000000000000000000000060408201526060810191505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561107357611073611012565b5060010190565b60006020828403121561108c57600080fd5b815161109781610aa5565b9392505050565b805180151581146110ae57600080fd5b919050565b600080600080600060a086880312156110cb57600080fd5b85516110d681610aa5565b94506110e46020870161109e565b93506110f26040870161109e565b92506111006060870161109e565b9150608086015190509295509295909350565b6000821982111561112657611126611012565b500190565b60006020828403121561113d57600080fd5b5051919050565b60008261117a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111b7576111b7611012565b50029056fea26469706673582212209fac11dd98c868fd9ffa7b08d18830bba06fb4094fceab962bb92cab205636c164736f6c63430008090033", + ), + }, +} diff --git a/contracts/oasys/deployments1.go b/contracts/oasys/deployments1.go new file mode 100644 index 000000000..608d6a38d --- /dev/null +++ b/contracts/oasys/deployments1.go @@ -0,0 +1,14 @@ +package oasys + +var deployments1 = []*deployment{ + { + contract: wrappedOAS, + // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/031c8a0598fc6f88435e5be804e754d083c3eb67/contracts/token/WOAS.sol + code: mustDecodeCode("0x6080604052600436106100f25760003560e01c806370a082311161008a578063d0e30db011610059578063d0e30db01461029a578063dd62ed3e146102a2578063f94a138b146102e8578063ffc3a7691461030857600080fd5b806370a082311461020f57806395d89b4114610245578063a457c2d71461025a578063a9059cbb1461027a57600080fd5b806323b872dd116100c657806323b872dd146101935780632e1a7d4d146101b3578063313ce567146101d357806339509351146101ef57600080fd5b8062f714ce146100f757806306fdde0314610119578063095ea7b31461014457806318160ddd14610174575b600080fd5b34801561010357600080fd5b50610117610112366004610e6f565b610328565b005b34801561012557600080fd5b5061012e610336565b60405161013b9190610e9b565b60405180910390f35b34801561015057600080fd5b5061016461015f366004610ef0565b6103c8565b604051901515815260200161013b565b34801561018057600080fd5b506002545b60405190815260200161013b565b34801561019f57600080fd5b506101646101ae366004610f1a565b6103e0565b3480156101bf57600080fd5b506101176101ce366004610f56565b610404565b3480156101df57600080fd5b506040516012815260200161013b565b3480156101fb57600080fd5b5061016461020a366004610ef0565b610411565b34801561021b57600080fd5b5061018561022a366004610f6f565b6001600160a01b031660009081526020819052604090205490565b34801561025157600080fd5b5061012e610450565b34801561026657600080fd5b50610164610275366004610ef0565b61045f565b34801561028657600080fd5b50610164610295366004610ef0565b6104f6565b610117610504565b3480156102ae57600080fd5b506101856102bd366004610f91565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156102f457600080fd5b506101646103033660046110f3565b610586565b34801561031457600080fd5b5061016461032336600461117b565b61066f565b610332828261072e565b5050565b606060038054610345906111df565b80601f0160208091040260200160405190810160405280929190818152602001828054610371906111df565b80156103be5780601f10610393576101008083540402835291602001916103be565b820191906000526020600020905b8154815290600101906020018083116103a157829003601f168201915b5050505050905090565b6000336103d68185856108a9565b5060019392505050565b6000336103ee8582856109ce565b6103f9858585610a60565b506001949350505050565b61040e813361072e565b50565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091906103d6908290869061044b908790611230565b6108a9565b606060048054610345906111df565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156104e95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6103f982868684036108a9565b6000336103d6818585610a60565b600034116105455760405162461bcd60e51b815260206004820152600e60248201526d3b30b63ab29034b9903d32b9379760911b60448201526064016104e0565b61054f3334610c2e565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b60008251845114801561059a575081518351145b6105fa5760405162461bcd60e51b815260206004820152602b60248201527f574f41533a2062756c6b207472616e7366657246726f6d2061726773206d757360448201526a7420626520657175616c7360a81b60648201526084016104e0565b60005b84518110156103f95761065c85828151811061061b5761061b611248565b602002602001015185838151811061063557610635611248565b602002602001015185848151811061064f5761064f611248565b60200260200101516103e0565b50806106678161125e565b9150506105fd565b600081518351146106d25760405162461bcd60e51b815260206004820152602760248201527f574f41533a2062756c6b207472616e736665722061726773206d75737420626560448201526620657175616c7360c81b60648201526084016104e0565b3360005b84518110156103f95761071c828683815181106106f5576106f5611248565b602002602001015186848151811061070f5761070f611248565b6020026020010151610a60565b806107268161125e565b9150506106d6565b600082116107705760405162461bcd60e51b815260206004820152600f60248201526e30b6b7bab73a1034b9903d32b9379760891b60448201526064016104e0565b336000908152602081905260409020548211156107bd5760405162461bcd60e51b815260206004820152600b60248201526a1bdd995c88185b5bdd5b9d60aa1b60448201526064016104e0565b6107c73383610d0d565b6000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114610814576040519150601f19603f3d011682016040523d82523d6000602084013e610819565b606091505b50509050806108615760405162461bcd60e51b815260206004820152601460248201527327a0a9903a3930b739b332b9103330b4b632b21760611b60448201526064016104e0565b816001600160a01b03167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b658460405161089c91815260200190565b60405180910390a2505050565b6001600160a01b03831661090b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104e0565b6001600160a01b03821661096c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104e0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610a5a5781811015610a4d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104e0565b610a5a84848484036108a9565b50505050565b6001600160a01b038316610ac45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104e0565b6001600160a01b038216610b265760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104e0565b6001600160a01b03831660009081526020819052604090205481811015610b9e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104e0565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610bd5908490611230565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c2191815260200190565b60405180910390a3610a5a565b6001600160a01b038216610c845760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104e0565b8060026000828254610c969190611230565b90915550506001600160a01b03821660009081526020819052604081208054839290610cc3908490611230565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038216610d6d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104e0565b6001600160a01b03821660009081526020819052604090205481811015610de15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104e0565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610e10908490611279565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109c1565b80356001600160a01b0381168114610e6a57600080fd5b919050565b60008060408385031215610e8257600080fd5b82359150610e9260208401610e53565b90509250929050565b600060208083528351808285015260005b81811015610ec857858101830151858201604001528201610eac565b81811115610eda576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215610f0357600080fd5b610f0c83610e53565b946020939093013593505050565b600080600060608486031215610f2f57600080fd5b610f3884610e53565b9250610f4660208501610e53565b9150604084013590509250925092565b600060208284031215610f6857600080fd5b5035919050565b600060208284031215610f8157600080fd5b610f8a82610e53565b9392505050565b60008060408385031215610fa457600080fd5b610fad83610e53565b9150610e9260208401610e53565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610ffa57610ffa610fbb565b604052919050565b600067ffffffffffffffff82111561101c5761101c610fbb565b5060051b60200190565b600082601f83011261103757600080fd5b8135602061104c61104783611002565b610fd1565b82815260059290921b8401810191818101908684111561106b57600080fd5b8286015b8481101561108d5761108081610e53565b835291830191830161106f565b509695505050505050565b600082601f8301126110a957600080fd5b813560206110b961104783611002565b82815260059290921b840181019181810190868411156110d857600080fd5b8286015b8481101561108d57803583529183019183016110dc565b60008060006060848603121561110857600080fd5b833567ffffffffffffffff8082111561112057600080fd5b61112c87838801611026565b9450602086013591508082111561114257600080fd5b61114e87838801611026565b9350604086013591508082111561116457600080fd5b5061117186828701611098565b9150509250925092565b6000806040838503121561118e57600080fd5b823567ffffffffffffffff808211156111a657600080fd5b6111b286838701611026565b935060208501359150808211156111c857600080fd5b506111d585828601611098565b9150509250929050565b600181811c908216806111f357607f821691505b6020821081141561121457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156112435761124361121a565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156112725761127261121a565b5060010190565b60008282101561128b5761128b61121a565b50039056fea26469706673582212205d1f5233387daece3b2968a83b7cd384cae4d4841cd290dc7ca0817609fd9c5c64736f6c634300080c0033"), + }, + { + contract: stakableOAS, + // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/031c8a0598fc6f88435e5be804e754d083c3eb67/contracts/token/SOAS.sol + code: mustDecodeCode("0x6080604052600436106101355760003560e01c806370a08231116100ab578063a457c2d71161006f578063a457c2d71461037e578063a9059cbb1461039e578063d97830b1146103be578063dd62ed3e1461045b578063f94a138b146104a1578063ffc3a769146104c157600080fd5b806370a08231146102bd578063775ad527146102f35780637de6b1db1461031357806392de74821461033357806395d89b411461036957600080fd5b8063313ce567116100fd578063313ce567146101f6578063379607f5146102125780633950935114610232578063546cec3e1461025257806364b55bed146102655780636dec93f11461029d57600080fd5b806306fdde031461013a578063095ea7b31461016557806318160ddd1461019557806323b872dd146101b45780632e87d48c146101d4575b600080fd5b34801561014657600080fd5b5061014f6104e1565b60405161015c9190611758565b60405180910390f35b34801561017157600080fd5b506101856101803660046117c9565b610573565b604051901515815260200161015c565b3480156101a157600080fd5b506002545b60405190815260200161015c565b3480156101c057600080fd5b506101856101cf3660046117f3565b61058d565b3480156101e057600080fd5b506101f46101ef36600461190a565b6105b1565b005b34801561020257600080fd5b506040516012815260200161015c565b34801561021e57600080fd5b506101f461022d366004611957565b610634565b34801561023e57600080fd5b5061018561024d3660046117c9565b6107a0565b6101f4610260366004611987565b6107df565b34801561027157600080fd5b50610285610280366004611957565b610a33565b6040516001600160a01b03909116815260200161015c565b3480156102a957600080fd5b506101a66102b83660046119ca565b610a5d565b3480156102c957600080fd5b506101a66102d83660046119ca565b6001600160a01b031660009081526020819052604090205490565b3480156102ff57600080fd5b506101f461030e3660046119e5565b610b5b565b34801561031f57600080fd5b506101f461032e366004611957565b610ba6565b34801561033f57600080fd5b5061028561034e3660046119ca565b6007602052600090815260409020546001600160a01b031681565b34801561037557600080fd5b5061014f610ce7565b34801561038a57600080fd5b506101856103993660046117c9565b610cf6565b3480156103aa57600080fd5b506101856103b93660046117c9565b610d8d565b3480156103ca57600080fd5b5061041e6103d93660046119ca565b6006602052600090815260409020805460018201546002830154600390930154919290916001600160401b0380831692600160401b900416906001600160a01b031685565b6040805195865260208601949094526001600160401b03928316938501939093521660608301526001600160a01b0316608082015260a00161015c565b34801561046757600080fd5b506101a66104763660046119e5565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156104ad57600080fd5b506101856104bc366004611a73565b610d9b565b3480156104cd57600080fd5b506101856104dc366004611afa565b610e84565b6060600380546104f090611b53565b80601f016020809104026020016040519081016040528092919081815260200182805461051c90611b53565b80156105695780601f1061053e57610100808354040283529160200191610569565b820191906000526020600020905b81548152906001019060200180831161054c57829003601f168201915b5050505050905090565b600033610581818585610f43565b60019150505b92915050565b60003361059b858285611067565b6105a68585856110f9565b506001949350505050565b6001600160a01b038281166000908152600660205260409020600301541633146105ee5760405163d8d5894f60e01b815260040160405180910390fd5b60005b815181101561062f5761061d8383838151811061061057610610611b8e565b60200260200101516112d2565b8061062781611bba565b9150506105f1565b505050565b8061065257604051637bc90c0560e11b815260040160405180910390fd5b336000818152600760208181526040808420546001600160a01b03168085526006835290842060018101549585529290915290929061069090610a5d565b61069a9190611bd5565b9050808311156106bd576040516377dfdf2160e01b815260040160405180910390fd5b828260010160008282546106d19190611bec565b909155506106e190503384611365565b604051600090339085908381818185875af1925050503d8060008114610723576040519150601f19603f3d011682016040523d82523d6000602084013e610728565b606091505b505090508061074a576040516312171d8360e31b815260040160405180910390fd5b336000908152600760209081526040918290205491518681526001600160a01b03909216917f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4910160405180910390a250505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061058190829086906107da908790611bec565b610f43565b6001600160a01b03831615806108545750610854600580548060200260200160405190810160405280929190818152602001828054801561084957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161082b575b5050505050846114bf565b156108725760405163ac6b05f560e01b815260040160405180910390fd5b6001600160a01b0383811660009081526007602052604090205416156108ab57604051630fb356f360e21b815260040160405180910390fd5b42826001600160401b03161115806108d55750806001600160401b0316826001600160401b031610155b156108f357604051636385801560e11b815260040160405180910390fd5b3461091157604051637bc90c0560e11b815260040160405180910390fd5b61091b8334611525565b6040805160a08101825234808252600060208084018281526001600160401b038089168688019081528882166060880190815233608089019081526001600160a01b038d8116808952600688528b89209a518b55955160018b0155925160028a01805493518616600160401b026fffffffffffffffffffffffffffffffff19909416919095161791909117909255905160039096018054969091166001600160a01b031996871617905560079091529084902080549093168117909255915190917fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb91610a269190869086909283526001600160401b03918216602084015216604082015260600190565b60405180910390a2505050565b60058181548110610a4357600080fd5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b038082166000908152600660209081526040808320815160a081018352815480825260018301549482019490945260028201546001600160401b0380821694830194909452600160401b90049092166060830152600301549093166080840152909190610ad45750600092915050565b80604001516001600160401b0316421015610af25750600092915050565b600081604001518260600151610b089190611c04565b6001600160401b031682604001516001600160401b031642610b2a9190611bd5565b8351610b369190611c2c565b610b409190611c4b565b8251909150811115610b5457505192915050565b9392505050565b6001600160a01b03828116600090815260066020526040902060030154163314610b985760405163d8d5894f60e01b815260040160405180910390fd5b610ba282826112d2565b5050565b80610bc457604051637bc90c0560e11b815260040160405180910390fd5b336000908152600760209081526040808320546001600160a01b031683526006909152902060018101548154610bfa9190611bd5565b821115610c1a576040516377dfdf2160e01b815260040160405180910390fd5b610c243383611365565b60038101546040516000916001600160a01b03169084908381818185875af1925050503d8060008114610c73576040519150601f19603f3d011682016040523d82523d6000602084013e610c78565b606091505b5050905080610c9a576040516312171d8360e31b815260040160405180910390fd5b336000908152600760209081526040918290205491518581526001600160a01b03909216917f443630e54cc5dd8826c25d7467193a3b7a0a67b4ed73c14fb477e8e7eed3fd489101610a26565b6060600480546104f090611b53565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610d805760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6105a68286868403610f43565b6000336105818185856110f9565b600082518451148015610daf575081518351145b610e0f5760405162461bcd60e51b815260206004820152602b60248201527f534f41533a2062756c6b207472616e7366657246726f6d2061726773206d757360448201526a7420626520657175616c7360a81b6064820152608401610d77565b60005b84518110156105a657610e71858281518110610e3057610e30611b8e565b6020026020010151858381518110610e4a57610e4a611b8e565b6020026020010151858481518110610e6457610e64611b8e565b602002602001015161058d565b5080610e7c81611bba565b915050610e12565b60008151835114610ee75760405162461bcd60e51b815260206004820152602760248201527f534f41533a2062756c6b207472616e736665722061726773206d75737420626560448201526620657175616c7360c81b6064820152608401610d77565b3360005b84518110156105a657610f3182868381518110610f0a57610f0a611b8e565b6020026020010151868481518110610f2457610f24611b8e565b60200260200101516110f9565b80610f3b81611bba565b915050610eeb565b6001600160a01b038316610fa55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d77565b6001600160a01b0382166110065760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d77565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146110f357818110156110e65760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610d77565b6110f38484848403610f43565b50505050565b6001600160a01b03831661115d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d77565b6001600160a01b0382166111bf5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d77565b6111ca838383611610565b6001600160a01b038316600090815260208190526040902054818110156112425760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d77565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611279908490611bec565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112c591815260200190565b60405180910390a36110f3565b6001600160a01b03818116600090815260076020526040902054161561130b57604051630fb356f360e21b815260040160405180910390fd5b6001600160a01b0381811660008181526007602052604080822080546001600160a01b0319169487169485179055519192917fdc5d0ac53741544fef2e2ae9b2c8006a9e56f9708377f300d8e825f8d411617d9190a35050565b6001600160a01b0382166113c55760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610d77565b6113d182600083611610565b6001600160a01b038216600090815260208190526040902054818110156114455760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610d77565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611474908490611bd5565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6000805b835181101561151b57826001600160a01b03168482815181106114e8576114e8611b8e565b60200260200101516001600160a01b03161415611509576001915050610587565b8061151381611bba565b9150506114c3565b5060009392505050565b6001600160a01b03821661157b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610d77565b61158760008383611610565b80600260008282546115999190611bec565b90915550506001600160a01b038216600090815260208190526040812080548392906115c6908490611bec565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038316158061162d57506001600160a01b038216155b1561163757505050565b6116996005805480602002602001604051908101604052809291908181526020018280548015610849576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161082b575050505050846114bf565b80611703575061170360058054806020026020016040519081016040528092919081815260200182805480156116f857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116116da575b5050505050836114bf565b1561170d57505050565b6001600160a01b0380831660009081526007602052604080822054868416835291205482169116141561173f57505050565b6040516325cdf54f60e21b815260040160405180910390fd5b600060208083528351808285015260005b8181101561178557858101830151858201604001528201611769565b81811115611797576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b03811681146117c457600080fd5b919050565b600080604083850312156117dc57600080fd5b6117e5836117ad565b946020939093013593505050565b60008060006060848603121561180857600080fd5b611811846117ad565b925061181f602085016117ad565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561186d5761186d61182f565b604052919050565b60006001600160401b0382111561188e5761188e61182f565b5060051b60200190565b600082601f8301126118a957600080fd5b813560206118be6118b983611875565b611845565b82815260059290921b840181019181810190868411156118dd57600080fd5b8286015b848110156118ff576118f2816117ad565b83529183019183016118e1565b509695505050505050565b6000806040838503121561191d57600080fd5b611926836117ad565b915060208301356001600160401b0381111561194157600080fd5b61194d85828601611898565b9150509250929050565b60006020828403121561196957600080fd5b5035919050565b80356001600160401b03811681146117c457600080fd5b60008060006060848603121561199c57600080fd5b6119a5846117ad565b92506119b360208501611970565b91506119c160408501611970565b90509250925092565b6000602082840312156119dc57600080fd5b610b54826117ad565b600080604083850312156119f857600080fd5b611a01836117ad565b9150611a0f602084016117ad565b90509250929050565b600082601f830112611a2957600080fd5b81356020611a396118b983611875565b82815260059290921b84018101918181019086841115611a5857600080fd5b8286015b848110156118ff5780358352918301918301611a5c565b600080600060608486031215611a8857600080fd5b83356001600160401b0380821115611a9f57600080fd5b611aab87838801611898565b94506020860135915080821115611ac157600080fd5b611acd87838801611898565b93506040860135915080821115611ae357600080fd5b50611af086828701611a18565b9150509250925092565b60008060408385031215611b0d57600080fd5b82356001600160401b0380821115611b2457600080fd5b611b3086838701611898565b93506020850135915080821115611b4657600080fd5b5061194d85828601611a18565b600181811c90821680611b6757607f821691505b60208210811415611b8857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611bce57611bce611ba4565b5060010190565b600082821015611be757611be7611ba4565b500390565b60008219821115611bff57611bff611ba4565b500190565b60006001600160401b0383811690831681811015611c2457611c24611ba4565b039392505050565b6000816000190483118215151615611c4657611c46611ba4565b500290565b600082611c6857634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220028b793c926803692d49bd19d341046b43de3cc651a5bc2229afa9d2b0d94a8d64736f6c634300080c0033"), + }, +} diff --git a/contracts/oasys/deployments10.go b/contracts/oasys/deployments10.go new file mode 100644 index 000000000..88061547b --- /dev/null +++ b/contracts/oasys/deployments10.go @@ -0,0 +1,62 @@ +package oasys + +import ( + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" +) + +var deployments10 = []*deployment{ + { + // commit: https://github.com/oasysgames/oasys-governance-contract/blob/be1dff6c29cd84c671ab3f4e0cfb811a0e47634f/contracts/PermissionedContractFactory.sol + contract: permissionedContractFactory, + code: mustDecodeCode(`0x6080604052600436106100b25760003560e01c806336568abe1161006f57806336568abe146101e55780634de79ecc1461020557806365ddb0171461021a57806391d148541461022d578063a217fddf1461024d578063d547741f14610262578063da58f37e1461028257600080fd5b806301ffc9a7146100b757806309b1eca6146100ec5780630b19429e14610124578063248a9ca3146101665780632a50c146146101965780632f2ff15d146101c3575b600080fd5b3480156100c357600080fd5b506100d76100d2366004610d98565b6102a2565b60405190151581526020015b60405180910390f35b3480156100f857600080fd5b5061010c610107366004610e65565b6102d9565b6040516001600160a01b0390911681526020016100e3565b34801561013057600080fd5b506101587f0d8b58cba732a42811e1f217ab43cccb14f1a8263ebb61afbf13838fcdae9df981565b6040519081526020016100e3565b34801561017257600080fd5b50610158610181366004610eac565b60009081526020819052604090206001015490565b3480156101a257600080fd5b506101b66101b1366004610edc565b6102f4565b6040516100e39190610f47565b3480156101cf57600080fd5b506101e36101de366004610f8a565b610433565b005b3480156101f157600080fd5b506101e3610200366004610f8a565b61045d565b34801561021157600080fd5b50600154610158565b61010c610228366004610fb6565b6104db565b34801561023957600080fd5b506100d7610248366004610f8a565b610614565b34801561025957600080fd5b50610158600081565b34801561026e57600080fd5b506101e361027d366004610f8a565b61063d565b34801561028e57600080fd5b506101b661029d366004610eac565b610662565b60006001600160e01b03198216637965db0b60e01b14806102d357506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006102ed838380519060200120306107ca565b9392505050565b604080516060808201835260008083526020830152918101919091526001600160a01b0380831660009081526002602081815260409283902083516060810185528154861681526001820154909516918501919091529081018054919284019161035d90611070565b80601f016020809104026020016040519081016040528092919081815260200182805461038990611070565b80156103d65780601f106103ab576101008083540402835291602001916103d6565b820191906000526020600020905b8154815290600101906020018083116103b957829003601f168201915b5050509190925250505060208101519091506001600160a01b031661042e5760405162461bcd60e51b81526020600482015260096024820152681b9bdd08199bdd5b9960ba1b60448201526064015b60405180910390fd5b919050565b60008281526020819052604090206001015461044e816107f4565b6104588383610801565b505050565b6001600160a01b03811633146104cd5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610425565b6104d78282610885565b5050565b60007f0d8b58cba732a42811e1f217ab43cccb14f1a8263ebb61afbf13838fcdae9df9610507816107f4565b8734146105565760405162461bcd60e51b815260206004820152601a60248201527f5043433a20696e636f727265637420616d6f756e742073656e740000000000006044820152606401610425565b6105618888886108ea565b9150846001600160a01b0316826001600160a01b0316146105be5760405162461bcd60e51b81526020600482015260176024820152765043433a20756e6578706563746564206164647265737360481b6044820152606401610425565b7f388d923fb867b31389c9da49a5a9b552bd44cde0717beb38a215d99ef09778db33898989866040516105f59594939291906110aa565b60405180910390a1610609823386866109ea565b509695505050505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600082815260208190526040902060010154610658816107f4565b6104588383610885565b6040805160608082018352600080835260208301529181019190915260015461068c836001611103565b11156106cf5760405162461bcd60e51b8152602060048201526012602482015271696e646578206f7574206f662072616e676560701b6044820152606401610425565b60026000600184815481106106e6576106e6611116565b60009182526020808320909101546001600160a01b0390811684528382019490945260409283019091208251606081018452815485168152600182015490941691840191909152600281018054919284019161074190611070565b80601f016020809104026020016040519081016040528092919081815260200182805461076d90611070565b80156107ba5780601f1061078f576101008083540402835291602001916107ba565b820191906000526020600020905b81548152906001019060200180831161079d57829003601f168201915b5050505050815250509050919050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6107fe8133610b91565b50565b61080b8282610614565b6104d7576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556108413390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61088f8282610614565b156104d7576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008347101561093c5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610425565b815160000361098d5760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610425565b8282516020840186f590506001600160a01b0381166102ed5760405162461bcd60e51b8152602060048201526019602482015278437265617465323a204661696c6564206f6e206465706c6f7960381b6044820152606401610425565b6001600160a01b038481166000908152600260205260409020600101541615610a4a5760405162461bcd60e51b8152602060048201526012602482015271185b1c9958591e481c9959da5cdd195c995960721b6044820152606401610425565b826001600160a01b03167f8d3f2558914d24d1627609279aec4a8b1033bb2e86f4fc8118aba14785e3fc39858484604051610a879392919061112c565b60405180910390a26001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b03868116918217909255604080516060810182529182529185166020808301919091528251601f85018290048202810182018452848152919283019190859085908190840183828082843760009201829052509390945250506001600160a01b03808816825260026020818152604093849020865181549085166001600160a01b031991821617825591870151600182018054919095169216919091179092559184015190925090820190610b8890826111ba565b50505050505050565b610b9b8282610614565b6104d757610ba881610bea565b610bb3836020610bfc565b604051602001610bc492919061127a565b60408051601f198184030181529082905262461bcd60e51b8252610425916004016112e9565b60606102d36001600160a01b03831660145b60606000610c0b8360026112fc565b610c16906002611103565b67ffffffffffffffff811115610c2e57610c2e610dc2565b6040519080825280601f01601f191660200182016040528015610c58576020820181803683370190505b509050600360fc1b81600081518110610c7357610c73611116565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610ca257610ca2611116565b60200101906001600160f81b031916908160001a9053506000610cc68460026112fc565b610cd1906001611103565b90505b6001811115610d49576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610d0557610d05611116565b1a60f81b828281518110610d1b57610d1b611116565b60200101906001600160f81b031916908160001a90535060049490941c93610d4281611313565b9050610cd4565b5083156102ed5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610425565b600060208284031215610daa57600080fd5b81356001600160e01b0319811681146102ed57600080fd5b634e487b7160e01b600052604160045260246000fd5b600082601f830112610de957600080fd5b813567ffffffffffffffff80821115610e0457610e04610dc2565b604051601f8301601f19908116603f01168101908282118183101715610e2c57610e2c610dc2565b81604052838152866020858801011115610e4557600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215610e7857600080fd5b82359150602083013567ffffffffffffffff811115610e9657600080fd5b610ea285828601610dd8565b9150509250929050565b600060208284031215610ebe57600080fd5b5035919050565b80356001600160a01b038116811461042e57600080fd5b600060208284031215610eee57600080fd5b6102ed82610ec5565b60005b83811015610f12578181015183820152602001610efa565b50506000910152565b60008151808452610f33816020860160208601610ef7565b601f01601f19169290920160200192915050565b60208152600060018060a01b03808451166020840152806020850151166040840152506040830151606080840152610f826080840182610f1b565b949350505050565b60008060408385031215610f9d57600080fd5b82359150610fad60208401610ec5565b90509250929050565b60008060008060008060a08789031215610fcf57600080fd5b8635955060208701359450604087013567ffffffffffffffff80821115610ff557600080fd5b6110018a838b01610dd8565b955061100f60608a01610ec5565b9450608089013591508082111561102557600080fd5b818901915089601f83011261103957600080fd5b81358181111561104857600080fd5b8a602082850101111561105a57600080fd5b6020830194508093505050509295509295509295565b600181811c9082168061108457607f821691505b6020821081036110a457634e487b7160e01b600052602260045260246000fd5b50919050565b600060018060a01b03808816835286602084015285604084015260a060608401526110d860a0840186610f1b565b91508084166080840152509695505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102d3576102d36110ed565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b601f82111561045857600081815260208120601f850160051c810160208610156111935750805b601f850160051c820191505b818110156111b25782815560010161119f565b505050505050565b815167ffffffffffffffff8111156111d4576111d4610dc2565b6111e8816111e28454611070565b8461116c565b602080601f83116001811461121d57600084156112055750858301515b600019600386901b1c1916600185901b1785556111b2565b600085815260208120601f198616915b8281101561124c5788860151825594840194600190910190840161122d565b508582101561126a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516112ac816017850160208801610ef7565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516112dd816028840160208801610ef7565b01602801949350505050565b6020815260006102ed6020830184610f1b565b80820281158282048414176102d3576102d36110ed565b600081611322576113226110ed565b50600019019056fea26469706673582212206921a9f7c5bb12866f25cbc8403a852dd261b38e2deb870825f95c96e3b64db864736f6c63430008120033`), + storage: storage{ + // mapping(bytes32 => RoleData) private _roles + "0x00": mapping{ + keyFn: func(key string) common.Hash { + if key == "DEFAULT_ADMIN_ROLE" { + return common.Hash{} + } + return common.BytesToHash(crypto.Keccak256([]byte(key))) + }, + values: map[string]interface{}{ + "DEFAULT_ADMIN_ROLE": structValue{ + // mapping(address => bool) members + genesismap{ + params.OasysMainnetGenesisHash: mapping{ + keyFn: addressKeyFn, + values: map[string]interface{}{ + "0xe04EEaCb1f181cD23501f3De39014F4cbb7C1Cd8": "0x1", + }, + }, + params.OasysTestnetGenesisHash: mapping{ + keyFn: addressKeyFn, + values: map[string]interface{}{ + "0xbe32b47A35C31d294B3c58d92ca83876DdC38776": "0x1", + }, + }, + }, + }, + "CONTRACT_CREATOR_ROLE": structValue{ + // mapping(address => bool) members + genesismap{ + params.OasysMainnetGenesisHash: mapping{ + keyFn: addressKeyFn, + values: map[string]interface{}{ + "0xc0bACBDA16Bb494d8C5be6DE84540465Fd83333E": "0x1", + }, + }, + params.OasysTestnetGenesisHash: mapping{ + keyFn: addressKeyFn, + values: map[string]interface{}{ + "0xBb5a4FF43683a1281800A6Bc8a94365f055F444F": "0x1", + }, + }, + }, + }, + }, + }, + }, + }, +} diff --git a/contracts/oasys/deployments11.go b/contracts/oasys/deployments11.go new file mode 100644 index 000000000..0efecb7b5 --- /dev/null +++ b/contracts/oasys/deployments11.go @@ -0,0 +1,14 @@ +package oasys + +var deployments11 = []*deployment{ + { + // commit: https://github.com/ironbeer/oasys-genesis-contract/blob/4b5025986137ce4453b7e585bfa7bb6ad2a05e25/contracts/Environment.sol + contract: environment, + code: mustDecodeCode(`0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063900cf0cf11610071578063900cf0cf146101b9578063b4c2f727146101cf578063bd4eff19146101e2578063ccfb9935146101f5578063d4a53686146101fd578063fcbb371b1461020557600080fd5b806308a54356146100ae578063158ef93e146100c35780633fa4f245146100e55780634ba7ed391461015a5780635e383d2114610162575b600080fd5b6100c16100bc366004610e82565b610218565b005b6000546100d09060ff1681565b60405190151581526020015b60405180910390f35b6100ed61027e565b6040516100dc9190600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525092915050565b6100d06102f6565b610175610170366004610efd565b610327565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e0830152610100820152610120016100dc565b6101c1610385565b6040519081526020016100dc565b6101c16101dd366004610efd565b61039c565b6100c16101f0366004610e82565b6103bd565b6100ed61047e565b6100d0610563565b6100ed610213366004610efd565b61058e565b33411461023857604051631cf4735960e01b815260040160405180910390fd5b60005460ff161561025b5760405162dc149f60e41b815260040160405180910390fd5b6000805460ff191660019081178255908252602082015261027b8161060c565b50565b610286610dfe565b61028e6108d5565b604080516101208101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152600890910154610100820152919050565b6000806103016108d5565b60038101548154919250906103169043610f2c565b6103209190610f59565b1592915050565b6002818154811061033757600080fd5b90600052602060002090600902016000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080154905089565b60006103976103926108d5565b610907565b905090565b600181815481106103ac57600080fd5b600091825260209091200154905081565b3341146103dd57604051631cf4735960e01b815260040160405180910390fd5b6103e5610563565b1561040357604051631e59ccd960e01b815260040160405180910390fd5b61040b610385565b81602001511161042e57604051630eae4c9760e01b815260040160405180910390fd5b600061043861093b565b905061044681439054111590565b1561045c576104558183610979565b8252610471565b61046e826104686109b1565b90610979565b82525b61047a8261060c565b5050565b610486610dfe565b60006104906108d5565b9050600061049c61093b565b90506000826003015483600101546104b385610907565b6104bd9190610f2c565b6104c8906001610f6d565b6104d29190610f85565b83546104de9190610f6d565b90506104ec82829054111590565b6104f657826104f8565b815b604080516101208101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152600890910154610100820152949350505050565b60008061056e6108d5565b60038101548154919250906105839043610f2c565b610316906001610f6d565b610596610dfe565b6105a36001600284610a04565b604080516101208101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260089091015461010082015292915050565b61061581610aeb565b60015480158061065d575061065d436002610631600185610f2c565b8154811061064157610641610fa4565b906000526020600020906009020161097290919063ffffffff16565b1561081a57506020810180516001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6019190915560028054918201815560005282517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace60099092029182015590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf82015560408201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad082015560608201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad182015560808201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad282015560a08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad382015560c08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad482015560e08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad5820155610100909101517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad690910155565b6020820151600161082b8184610f2c565b8154811061083b5761083b610fa4565b600091825260209091200155816002610855600184610f2c565b8154811061086557610865610fa4565b9060005260206000209060090201600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007015561010082015181600801559050505050565b6000806108e061093b565b90506108ee81439054111590565b6108ff576108fa6109b1565b610901565b805b91505090565b600381015481546000919061091c9043610f2c565b6109269190610fba565b82600101546109359190610f6d565b92915050565b600280546000919061094f90600190610f2c565b8154811061095f5761095f610fa4565b9060005260206000209060090201905090565b9054111590565b60008260030154836001015483602001516109949190610f2c565b61099e9190610f85565b83546109aa9190610f6d565b9392505050565b60025460009060018114156109e85760026000815481106109d4576109d4610fa4565b906000526020600020906009020191505090565b60026109f48183610f2c565b815481106109d4576109d4610fa4565b82546000908285610a16600184610f2c565b81548110610a2657610a26610fa4565b906000526020600020015411610a685783610a42600183610f2c565b81548110610a5257610a52610fa4565b90600052602060002090600902019150506109aa565b600181118015610a9e57508285610a80600284610f2c565b81548110610a9057610a90610fa4565b906000526020600020015411155b15610aaf5783610a42600283610f2c565b6000610abe8685600085610d4b565b9050848181548110610ad257610ad2610fa4565b9060005260206000209060090201925050509392505050565b600181604001511015610b465760405163a1b63ceb60e01b815260206004820152601960248201527f626c6f636b506572696f6420697320746f6f20736d616c6c2e0000000000000060448201526064015b60405180910390fd5b600381606001511015610b9c5760405163a1b63ceb60e01b815260206004820152601960248201527f65706f6368506572696f6420697320746f6f20736d616c6c2e000000000000006044820152606401610b3d565b606481608001511115610bf25760405163a1b63ceb60e01b815260206004820152601860248201527f7265776172645261746520697320746f6f206c617267652e00000000000000006044820152606401610b3d565b60648160a001511115610c485760405163a1b63ceb60e01b815260206004820152601c60248201527f636f6d6d697373696f6e5261746520697320746f6f206c617267652e000000006044820152606401610b3d565b60018160c001511015610c9e5760405163a1b63ceb60e01b815260206004820181905260248201527f76616c696461746f725468726573686f6c6420697320746f6f20736d616c6c2e6044820152606401610b3d565b60018160e001511015610cf45760405163a1b63ceb60e01b815260206004820152601b60248201527f6a61696c5468726573686f6c6420697320746f6f20736d616c6c2e00000000006044820152606401610b3d565b6001816101000151101561027b5760405163a1b63ceb60e01b815260206004820152601860248201527f6a61696c506572696f6420697320746f6f20736d616c6c2e00000000000000006044820152606401610b3d565b600081831415610d6757610d60600183610f2c565b9050610df6565b60006002610d758486610f6d565b610d7f9190610fba565b905084868281548110610d9457610d94610fa4565b90600052602060002001541115610db957610db186868684610d4b565b915050610df6565b84868281548110610dcc57610dcc610fa4565b90600052602060002001541015610df357610db18686610ded846001610f6d565b86610d4b565b90505b949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051610120810167ffffffffffffffff81118282101715610e7c57634e487b7160e01b600052604160045260246000fd5b60405290565b60006101208284031215610e9557600080fd5b610e9d610e4a565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c082015260e083013560e08201526101008084013581830152508091505092915050565b600060208284031215610f0f57600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b600082821015610f3e57610f3e610f16565b500390565b634e487b7160e01b600052601260045260246000fd5b600082610f6857610f68610f43565b500690565b60008219821115610f8057610f80610f16565b500190565b6000816000190483118215151615610f9f57610f9f610f16565b500290565b634e487b7160e01b600052603260045260246000fd5b600082610fc957610fc9610f43565b50049056fea264697066735822122037767202f998a71461c6fd1f440560e015e745ebf87a689f7ca44aa0f1f791e664736f6c634300080c0033`), + }, + { + // commit: https://github.com/ironbeer/oasys-genesis-contract/blob/4b5025986137ce4453b7e585bfa7bb6ad2a05e25/contracts/StakeManager.sol + contract: stakeManager, + code: mustDecodeCode(`0x6080604052600436106102675760003560e01c806374e2b63c11610144578063cf5c13db116100b6578063e1aca3411161007a578063e1aca34114610850578063f3621e4314610870578063f65a5ed214610890578063f8d6b1ab146108b0578063fa52c7d8146108d0578063ff3d3f601461093f57600080fd5b8063cf5c13db1461074e578063d0051adf1461076e578063d1f18ee11461079f578063dbd61d87146107f7578063df93c8421461081757600080fd5b80639168ae72116101085780639168ae72146106785780639c508219146106ae578063a6a41f44146106ce578063ac7475ed146106ee578063ad71bd361461070e578063cbc0fac61461072e57600080fd5b806374e2b63c146105c75780637b520aa8146105ec5780637befa74f1461062257806388325234146106355780639043150b1461067057600080fd5b80632ee462b3116101dd578063485cc955116101a1578063485cc955146104e65780635c4fc4c5146105065780635d94ccf6146105365780635efc766e146105565780636b2b336914610576578063724319911461059657600080fd5b80632ee462b31461043757806333f32d7814610457578063428e85621461047757806345367f231461049757806346dfce7b146104b757600080fd5b8063195afea11161022f578063195afea11461032b5780631c1b4f3a1461034b5780632168e8b41461036b57806322226367146103995780632b42ed8c146103ce5780632b47da52146103ff57600080fd5b806302fb4d851461026c5780630ddda63c1461028e578063158ef93e146102ae5780631903cf16146102dd578063190b9257146102fd575b600080fd5b34801561027857600080fd5b5061028c610287366004614cc8565b61095f565b005b34801561029a57600080fd5b5061028c6102a9366004614cf4565b610b65565b3480156102ba57600080fd5b506000546102c89060ff1681565b60405190151581526020015b60405180910390f35b3480156102e957600080fd5b5061028c6102f8366004614d9f565b610d70565b34801561030957600080fd5b5061031d610318366004614cf4565b610f69565b6040519081526020016102d4565b34801561033757600080fd5b5061031d610346366004614cc8565b610f8a565b34801561035757600080fd5b5061031d610366366004614cf4565b610fc1565b34801561037757600080fd5b5061038b610386366004614e49565b610fd1565b6040516102d4929190614eaf565b3480156103a557600080fd5b506103b96103b4366004614cc8565b6110b7565b604080519283526020830191909152016102d4565b3480156103da57600080fd5b506103ee6103e9366004614ed1565b611185565b6040516102d4959493929190614f3c565b34801561040b57600080fd5b5060015461041f906001600160a01b031681565b6040516001600160a01b0390911681526020016102d4565b34801561044357600080fd5b5061031d610452366004614cc8565b6114d2565b34801561046357600080fd5b5061031d610472366004614f9c565b611585565b34801561048357600080fd5b5061028c610492366004614d9f565b61174b565b3480156104a357600080fd5b5061031d6104b2366004614cf4565b611944565b3480156104c357600080fd5b506104d76104d2366004614ed1565b6119da565b6040516102d49392919061503b565b3480156104f257600080fd5b5061028c610501366004615071565b611c37565b34801561051257600080fd5b50610526610521366004614cc8565b611cb6565b6040516102d494939291906150e2565b34801561054257600080fd5b5061028c610551366004614cf4565b611d82565b34801561056257600080fd5b5061041f610571366004614cf4565b611e8c565b34801561058257600080fd5b5061028c61059136600461510d565b611eb6565b3480156105a257600080fd5b506105b66105b136600461512a565b611faf565b6040516102d4959493929190615188565b3480156105d357600080fd5b5060005461041f9061010090046001600160a01b031681565b3480156105f857600080fd5b5061041f61060736600461510d565b6006602052600090815260409020546001600160a01b031681565b61028c6106303660046151d5565b61204f565b34801561064157600080fd5b5061065561065036600461510d565b61221a565b604080519384526020840192909252908201526060016102d4565b61028c61229a565b34801561068457600080fd5b5061041f61069336600461510d565b6007602052600090815260409020546001600160a01b031681565b3480156106ba57600080fd5b5061031d6106c9366004614cc8565b6122cf565b3480156106da57600080fd5b5060095461041f906001600160a01b031681565b3480156106fa57600080fd5b5061028c61070936600461510d565b6123ab565b34801561071a57600080fd5b5061038b610729366004614e49565b6124b1565b34801561073a57600080fd5b5061028c610749366004614cc8565b61258f565b34801561075a57600080fd5b5061028c610769366004614cc8565b612637565b34801561077a57600080fd5b5061078e61078936600461521a565b612836565b6040516102d495949392919061524f565b3480156107ab57600080fd5b506107bf6107ba366004614cc8565b612aee565b604080516001600160a01b0390961686529315156020860152911515928401929092529015156060830152608082015260a0016102d4565b34801561080357600080fd5b5061031d6108123660046152b8565b612c68565b34801561082357600080fd5b5061031d61083236600461510d565b6001600160a01b031660009081526007602052604090206006015490565b34801561085c57600080fd5b5061028c61086b3660046151d5565b612cae565b34801561087c57600080fd5b5061028c61088b3660046152b8565b612cc7565b34801561089c57600080fd5b5061041f6108ab366004614cf4565b612dd3565b3480156108bc57600080fd5b5061028c6108cb36600461510d565b612de3565b3480156108dc57600080fd5b506109196108eb36600461510d565b6004602052600090815260409020805460018201546006909201546001600160a01b03918216929091169083565b604080516001600160a01b039485168152939092166020840152908201526060016102d4565b34801561094b57600080fd5b5061028c61095a3660046151d5565b612e45565b6001600160a01b0380831660009081526006602090815260408083205484168084526004909252909120549091166109aa576040516372898ae960e11b815260040160405180910390fd5b3341146109ca57604051631cf4735960e01b815260040160405180910390fd5b6001600160a01b038084166000908152600660209081526040808320548416835260049182905280832083548251633fa4f24560e01b815292519195610add946101009092041692633fa4f2459281830192610120928290030181865afa158015610a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5d91906152e8565b600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad49190615363565b84919087613185565b82546040519192506001600160a01b0316907f1647efd0ce9727dc31dc201c9d8d35ac687f7370adcacbd454afc6485ddabfda90600090a28015610b5e5781546040518281526001600160a01b03909116907feb7d7a49847ec491969db21a0e31b234565a9923145a2d1b56a75c9e95825802906020015b60405180910390a25b5050505050565b336000818152600460205260409020546001600160a01b0316610b9b576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316610bd15760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c489190615391565b15610c6657604051631e59ccd960e01b815260040160405180910390fd5b60008054338252600460205260408220610c8e9161010090046001600160a01b031686613264565b905080610cae57604051637bc90c0560e11b815260040160405180910390fd5b610d323333600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a9190615363565b600085613284565b604051818152339081907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba1043836906020015b60405180910390a350505050565b6001600160a01b03828116600090815260046020526040902080548492163314801590610daa575060018101546001600160a01b03163314155b15610dc857604051630101292160e31b815260040160405180910390fd5b6001600160a01b03808516600090815260046020526040902054859116610e02576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e799190615391565b15610e9757604051631e59ccd960e01b815260040160405180910390fd5b610f30600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f119190615363565b6001600160a01b03871660009081526004602052604090209086613399565b846001600160a01b03167fc11dfc9c24621433bb10587dc4bbae26a33a4aff53914e0d4c9fddf224a8cb7d85604051610b5591906153ac565b60028181548110610f7957600080fd5b600091825260209091200154905081565b600080546001600160a01b038481168352600460205260408320610fb792909161010090910416846133ab565b5090505b92915050565b60038181548110610f7957600080fd5b60606000610fe5848460058054905061353f565b9093509050826001600160401b0381111561100257611002614d0d565b60405190808252806020026020018201604052801561102b578160200160208202803683370190505b50915060005b838110156110af57600561104582876153d5565b81548110611055576110556153ed565b9060005260206000200160009054906101000a90046001600160a01b0316838281518110611085576110856153ed565b6001600160a01b0390921660209283029190910190910152806110a781615403565b915050611031565b509250929050565b60008061117a6000841161114157600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113c9190615363565b611143565b835b6001600160a01b038616600090815260046020908152604080832093835260098401825280832054600a9094019091529020549091565b909590945092505050565b6001600160a01b03841660009081526007602052604081206060918291829182918861122757600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112229190615363565b611229565b885b985061123b888860058054905061353f565b9097509150866001600160401b0381111561125857611258614d0d565b604051908082528060200260200182016040528015611281578160200160208202803683370190505b509550866001600160401b0381111561129c5761129c614d0d565b6040519080825280602002602001820160405280156112c5578160200160208202803683370190505b509450866001600160401b038111156112e0576112e0614d0d565b604051908082528060200260200182016040528015611309578160200160208202803683370190505b509350866001600160401b0381111561132457611324614d0d565b60405190808252806020026020018201604052801561134d578160200160208202803683370190505b50925060005b878110156114c5576005611367828b6153d5565b81548110611377576113776153ed565b9060005260206000200160009054906101000a90046001600160a01b03168782815181106113a7576113a76153ed565b60200260200101906001600160a01b031690816001600160a01b0316815250506113f88782815181106113dc576113dc6153ed565b602002602001015160008c85613577909392919063ffffffff16565b86828151811061140a5761140a6153ed565b60200260200101818152505061144787828151811061142b5761142b6153ed565b602002602001015160018c85613577909392919063ffffffff16565b858281518110611459576114596153ed565b60200260200101818152505061149687828151811061147a5761147a6153ed565b602002602001015160028c85613577909392919063ffffffff16565b8482815181106114a8576114a86153ed565b6020908102919091010152806114bd81615403565b915050611353565b5050945094509450945094565b600080821161155757600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561152e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115529190615363565b611559565b815b6001600160a01b038416600090815260046020526040902090925061157e9083613636565b9392505050565b600080600183600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116029190615363565b61160c919061541e565b611616919061541e565b845190915060005b84811015611742576116316001846153d5565b6000805460405163fcbb371b60e01b81526004810184905292955090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015611685573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a991906152e8565b905060005b8381101561172d57600061170a8387600460008d87815181106116d3576116d36153ed565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206136499092919063ffffffff16565b50905061171781886153d5565b965050808061172590615403565b9150506116ae565b5050808061173a90615403565b91505061161e565b50505092915050565b6001600160a01b03828116600090815260046020526040902080548492163314801590611785575060018101546001600160a01b03163314155b156117a357604051630101292160e31b815260040160405180910390fd5b6001600160a01b038085166000908152600460205260409020548591166117dd576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015611830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118549190615391565b1561187257604051631e59ccd960e01b815260040160405180910390fd5b61190b600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ec9190615363565b6001600160a01b038716600090815260046020526040902090866137b8565b846001600160a01b03167f0ad9bf1b8c026a174a2f30954417002a6ea00c9b08c1b8846c7951c687be809585604051610b5591906153ac565b60008082116119c957600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c49190615363565b6119cb565b815b9150610fbb60026003846137c5565b6001600160a01b0384166000908152600460205260408120606091829186611a7857600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a739190615363565b611a7a565b865b9650611a8e8686836007018054905061353f565b9095509150846001600160401b03811115611aab57611aab614d0d565b604051908082528060200260200182016040528015611ad4578160200160208202803683370190505b509350846001600160401b03811115611aef57611aef614d0d565b604051908082528060200260200182016040528015611b18578160200160208202803683370190505b50925060005b85811015611c2b576000600781848201611b38858c6153d5565b81548110611b4857611b486153ed565b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190208054885191935090911690879084908110611b8e57611b8e6153ed565b6001600160a01b0392831660209182029290920101528354611bb59183911660028c613577565b8354611bce9083906001600160a01b031660018d613577565b8454611be79084906001600160a01b031660008e613577565b611bf191906153d5565b611bfb91906153d5565b858381518110611c0d57611c0d6153ed565b60209081029190910101525080611c2381615403565b915050611b1e565b50509450945094915050565b334114611c5757604051631cf4735960e01b815260040160405180910390fd5b60005460ff1615611c7a5760405162dc149f60e41b815260040160405180910390fd5b6000805460016001600160a81b03199091166101006001600160a01b039586160217811790915580546001600160a01b03191691909216179055565b6001600160a01b03821660009081526007602052604081206006018054829182918291829187908110611ceb57611ceb6153ed565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115611d1e57611d1e6150aa565b6002811115611d2f57611d2f6150aa565b81526020016001820154815260200160028201548152505090508060000151816020015182604001518360400151600014158015611d71575083604001514210155b929a91995097509095509350505050565b336000818152600760205260409020546001600160a01b0316611db85760405163cf83d93d60e01b815260040160405180910390fd5b336000908152600760205260408120600601805484908110611ddc57611ddc6153ed565b9060005260206000209060030201905060008160020154905080421015611e16576040516303cb96db60e21b815260040160405180910390fd5b80611e3457604051630c8d9eab60e31b815260040160405180910390fd5b6000600283015560405184815233907fbf5f92dc2b945251eadf78c2ca629ae64053d979bfbc43a7b17a463707906bf99060200160405180910390a281546001830154611e869160ff169033906138de565b50505050565b60058181548110611e9c57600080fd5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b0381811660009081526006602052604090205433911615611ef15760405163055ee1f160e31b815260040160405180910390fd5b6001600160a01b0381166000908152600460205260409020611f1390836139fd565b60058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b038381166001600160a01b03199283168117909355841660009081526006602090815260409182902080549093168417909255519182527fd5828184f48f65962d10eac907318df85953d4e3542a0f09b5932ee3fe398bdd910160405180910390a15050565b600954604051632d73a02f60e01b81526004810185905260248101849052604481018390526060918291829182916000916001600160a01b031690632d73a02f90606401600060405180830381865afa158015612010573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120389190810190615561565b959e949d50909b5099509297509095505050505050565b6001600160a01b03808416600090815260046020526040902054849116612089576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121009190615391565b1561211e57604051631e59ccd960e01b815260040160405180910390fd5b8161213c57604051637bc90c0560e11b815260040160405180910390fd5b612147833384613a3f565b6121d53385600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561219f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c39190615363565b6121ce9060016153d5565b8686613284565b836001600160a01b0316336001600160a01b03167f8fc656e319452025372383dc27d933046d412b8253de50a10739eeaa59862be68585604051610d62929190615660565b6001600160a01b03808216600090815260076020526040812081549192839283929161224f9183916101009091041684613ae0565b60005490945061227090829061010090046001600160a01b03166001613ae0565b60005490935061229190829061010090046001600160a01b03166002613ae0565b93959294505050565b6040513481527f1de49774d094a85fc1bbbd16e8d09a865fb848218f41e2da4369f528c42ee42e9060200160405180910390a1565b6001600160a01b038083166000818152600660209081526040808320548516835260049091528120600181015491939092911614612311576000915050610fbb565b6000831161239557600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561236c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123909190615363565b612397565b825b92506123a38184613636565b949350505050565b336000818152600460205260409020546001600160a01b03166123e1576040516372898ae960e11b815260040160405180910390fd5b6001600160a01b038281166000908152600660205260409020543391161561241c5760405163055ee1f160e31b815260040160405180910390fd5b6001600160a01b03808216600090815260046020526040902060018101549091166124478286613d06565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916888616908117909155825194861685529084019290925290917f758820d0b14a01c1fa60b8d2bbef25ed1b6a5af4802e5dec3f08679255ba8bf39101610b55565b606060006124c5848460088054905061353f565b9093509050826001600160401b038111156124e2576124e2614d0d565b60405190808252806020026020018201604052801561250b578160200160208202803683370190505b50915060005b838110156110af57600861252582876153d5565b81548110612535576125356153ed565b9060005260206000200160009054906101000a90046001600160a01b0316838281518110612565576125656153ed565b6001600160a01b03909216602092830291909101909101528061258781615403565b915050612511565b336000818152600460205260409020546001600160a01b03166125c5576040516372898ae960e11b815260040160405180910390fd5b600080543382526004602052604082206125ed9161010090046001600160a01b031685613264565b60405181815290915033907f882d5671e5b36af50883197c33d48ba56ce337589958e871ba82fb0a54adf3e89060200160405180910390a28015611e8657611e86600033836138de565b6001600160a01b03808316600090815260046020526040902054839116612671576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166126a75760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271e9190615391565b1561273c57604051631e59ccd960e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420612777939092610100909104169087613d80565b90508061279757604051637bc90c0560e11b815260040160405180910390fd5b6127ef3386600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d06573d6000803e3d6000fd5b6040518181526001600160a01b0386169033907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba10438369060200160405180910390a35050505050565b6001600160a01b03831660009081526007602052604081206006810154606092839283928392919061286b908990899061353f565b9097509150866001600160401b0381111561288857612888614d0d565b6040519080825280602002602001820160405280156128b1578160200160208202803683370190505b509550866001600160401b038111156128cc576128cc614d0d565b6040519080825280602002602001820160405280156128f5578160200160208202803683370190505b509450866001600160401b0381111561291057612910614d0d565b604051908082528060200260200182016040528015612939578160200160208202803683370190505b509350866001600160401b0381111561295457612954614d0d565b60405190808252806020026020018201604052801561297d578160200160208202803683370190505b50925060005b87811015612ae15760006006830161299b838c6153d5565b815481106129ab576129ab6153ed565b6000918252602090912060408051606081019091526003909202018054829060ff1660028111156129de576129de6150aa565b60028111156129ef576129ef6150aa565b81526020016001820154815260200160028201548152505090508060000151888381518110612a2057612a206153ed565b60200260200101906002811115612a3957612a396150aa565b90816002811115612a4c57612a4c6150aa565b815250508060200151878381518110612a6757612a676153ed565b6020026020010181815250508060400151868381518110612a8a57612a8a6153ed565b6020908102919091010152604081015115801590612aac575080604001514210155b858381518110612abe57612abe6153ed565b911515602092830291909101909101525080612ad981615403565b915050612983565b5050939792965093509350565b60008080808085612b7357600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b709190615363565b95505b6001600160a01b03878116600090815260046020908152604080832060018101548b855260028201909352922054921696509060ff1660008881526003830160205260409020549015955060ff169350612bcd8188613636565b9150848015612bda575083155b8015612c5b575060005460405163fcbb371b60e01b8152600481018990526101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015612c2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5391906152e8565b60c001518210155b9250509295509295909350565b600080546001600160a01b038481168352600460209081526040808520888416865260079092528420612ca5939092610100909104169085613db9565b50949350505050565b604051634ee5a1b960e01b815260040160405180910390fd5b6001600160a01b03808316600090815260046020526040902054839116612d01576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316612d375760405163cf83d93d60e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420612d72939092610100909104169087613d80565b604080516001600160a01b03881681526020810183905291925033917f2ef606d064225d24c1514dc94907c134faee1237445c2f63f410cce0852b2054910160405180910390a28015612dcb57612dcb600033836138de565b505050505050565b60088181548110611e9c57600080fd5b336000818152600760205260409020546001600160a01b0316612e195760405163cf83d93d60e01b815260040160405180910390fd5b6000805433825260076020526040909120612e419161010090046001600160a01b0316613fc7565b5050565b6001600160a01b03808416600090815260046020526040902054849116612e7f576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316612eb55760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f2c9190615391565b15612f4a57604051631e59ccd960e01b815260040160405180910390fd5b33600090815260076020908152604080832083546001600160a01b038a81168652600490945291909320612f88928492610100900416908888613feb565b935083612fa857604051637bc90c0560e11b815260040160405180910390fd5b806006016040518060600160405280876002811115612fc957612fc96150aa565b815260208101879052604001612fe242620d2f006153d5565b9052815460018181018455600093845260209093208251600390920201805492939092839160ff1990911690836002811115613020576130206150aa565b0217905550602082015181600101556040820151816002015550506130cc6003600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613093573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b79190615363565b6130c29060016153d5565b6002919087614121565b50600954604051635692619d60e11b81526001600160a01b0388811660048301529091169063ad24c33a90602401600060405180830381600087803b15801561311457600080fd5b505af1158015613128573d6000803e3d6000fd5b50505060068201546001600160a01b038816915033907fb649014faa7a0e23357e091fb8a67a128c33dc9480f846f7e41cb3a6c9d806109061316c9060019061541e565b60405190815260200160405180910390a3505050505050565b60008281526009850160205260408120546131ae57600083815260098601602052604090208290555b6000838152600a860160205260408120546131ca9060016153d5565b6000858152600a88016020526040902081905560e0860151909150811080159061321657506003860160006132008660016153d5565b815260208101919091526040016000205460ff16155b15612ca55761010085015161322b90856153d5565b91505b81841015612ca5578361324081615403565b60008181526003890160205260409020805460ff19166001179055945061322e9050565b60008060006132748686866133ab565b6006880155925050509392505050565b6001600160a01b03808616600090815260076020526040902080549091166132fd5780546001600160a01b0387166001600160a01b031991821681178355600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180549092161790555b6001600160a01b0385166000908152600460205260409020613324908290869086866141fc565b6133326002600386856142c4565b600954604051635692619d60e11b81526001600160a01b0387811660048301529091169063ad24c33a90602401600060405180830381600087803b15801561337957600080fd5b505af115801561338d573d6000803e3d6000fd5b50505050505050505050565b6133a683838360006143aa565b505050565b6000808460060154905060006001856001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341b9190615363565b613425919061541e565b905083158061343c57508061343a83866153d5565b115b1561344e5761344b828261541e565b93505b60005b84811015613535576134646001846153d5565b60405163fcbb371b60e01b8152600481018290529093506000906001600160a01b0388169063fcbb371b9060240161012060405180830381865afa1580156134b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d491906152e8565b905060006134e3898387613649565b509050806134f2575050613523565b60a0820151613502575050613523565b613514818360a0015160646019614430565b61351e90876153d5565b955050505b8061352d81615403565b915050613451565b5050935093915050565b6000808261354d85876153d5565b1061355f5761355c858461541e565b93505b8361356a81876153d5565b915091505b935093915050565b600061362d856002016000856002811115613594576135946150aa565b60028111156135a5576135a56150aa565b81526020019081526020016000206000866001600160a01b03166001600160a01b03168152602001908152602001600020838760010160008760028111156135ef576135ef6150aa565b6002811115613600576136006150aa565b8152602080820192909252604090810160009081206001600160a01b038b168252909252902091906137c5565b95945050505050565b600061157e6004840160058501846137c5565b6000818152600284016020526040812054819060ff168061367a5750600083815260038601602052604090205460ff165b1561368a5750600090508061356f565b6136948584613636565b9050604983106136d4578360c001518110156136b3576000915061356f565b629896806136c382610a3461567b565b6136cd919061569a565b915061376d565b806136e45750600090508061356f565b6136f06019600a615798565b61370185608001516064601961445c565b61370b908361567b565b613715919061569a565b915081613725576000915061356f565b6137488460600151856040015161373c919061567b565b6301e13380601961445c565b613752908361567b565b91506137606019600a615798565b61376a908361569a565b91505b6000838152600a8601602052604090205480156137af5760008481526009870160205260409020546137ab846137a3848461541e565b836019614430565b9350505b50935093915050565b6133a683838360016143aa565b82546000908015806137f3575082856000815481106137e6576137e66153ed565b9060005260206000200154115b1561380257600091505061157e565b828561380f60018461541e565b8154811061381f5761381f6153ed565b90600052602060002001541161385e578361383b60018361541e565b8154811061384b5761384b6153ed565b906000526020600020015491505061157e565b6001811180156138945750828561387660028461541e565b81548110613886576138866153ed565b906000526020600020015411155b156138a5578361383b60028361541e565b60006138b48685600085614498565b90508481815481106138c8576138c86153ed565b9060005260206000200154925050509392505050565b6000808460028111156138f3576138f36150aa565b1415613952576040516001600160a01b038416908390600081818185875af1925050503d8060008114613942576040519150601f19603f3d011682016040523d82523d6000602084013e613947565b606091505b5050809150506139d4565b61395b84614540565b60405163a9059cbb60e01b81526001600160a01b03858116600483015260248201859052919091169063a9059cbb906044015b6020604051808303816000875af11580156139ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139d19190615391565b90505b80611e865783604051630db5347560e11b81526004016139f491906157a4565b60405180910390fd5b81546001600160a01b031615613a2557604051621d934160e11b815260040160405180910390fd5b81546001600160a01b03191633178255612e418282613d06565b6000836002811115613a5357613a536150aa565b1415613a79578034146133a657604051630fe5b06560e11b815260040160405180910390fd5b3415613a985760405163a745ac8560e01b815260040160405180910390fd5b6000613aa384614540565b6040516323b872dd60e01b81526001600160a01b0385811660048301523060248301526044820185905291909116906323b872dd9060640161398e565b600080846003016000846002811115613afb57613afb6150aa565b6002811115613b0c57613b0c6150aa565b8152602081019190915260400160002054905080613b2e57600091505061157e565b6000846001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b929190615363565b90506000613ba160018461541e565b9050600081118015613c04575081876003016000876002811115613bc757613bc76150aa565b6002811115613bd857613bd86150aa565b81526020019081526020016000208281548110613bf757613bf76153ed565b9060005260206000200154115b15613c175780613c13816157b2565b9150505b81876003016000876002811115613c3057613c306150aa565b6002811115613c4157613c416150aa565b81526020019081526020016000208281548110613c6057613c606153ed565b90600052602060002001541115613c7d576000935050505061157e565b6000805b828111613cfa57886004016000886002811115613ca057613ca06150aa565b6002811115613cb157613cb16150aa565b81526020019081526020016000208181548110613cd057613cd06153ed565b906000526020600020015482613ce691906153d5565b915080613cf281615403565b915050613c81565b50979650505050505050565b6001600160a01b038116613d2d57604051637138356f60e01b815260040160405180910390fd5b81546001600160a01b0382811691161415613d5b5760405163e037058f60e01b815260040160405180910390fd5b60019190910180546001600160a01b0319166001600160a01b03909216919091179055565b6000806000613d9187878787613db9565b86546001600160a01b0316600090815260058a01602052604090205592505050949350505050565b81546001600160a01b039081166000908152600586016020908152604080832054815163900cf0cf60e01b81529151939490938593600193928a169263900cf0cf92600480830193928290030181865afa158015613e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3f9190615363565b613e49919061541e565b9050831580613e60575080613e5e83866153d5565b115b15613e7257613e6f828261541e565b93505b60005b84811015613fbc57613e886001846153d5565b8654909350600090613ea7908a906001600160a01b0316600287613577565b8754613ec0908b906001600160a01b0316600188613577565b8854613ed9908c906001600160a01b0316600089613577565b613ee391906153d5565b613eed91906153d5565b905080613efa5750613faa565b600080613f788a6001600160a01b031663fcbb371b886040518263ffffffff1660e01b8152600401613f2e91815260200190565b61012060405180830381865afa158015613f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f7091906152e8565b8a90886145ab565b915091508160001415613f8d57505050613faa565b613f9a8284836019614430565b613fa490886153d5565b96505050505b80613fb481615403565b915050613e75565b505094509492505050565b613fd3828260016145fc565b613fdf828260026145fc565b612e41828260006145fc565b6000614107866002016000856002811115614008576140086150aa565b6002811115614019576140196150aa565b81526020808201929092526040908101600090812088546001600160a01b03908116835290845290829020825163900cf0cf60e01b815292519093918a169263900cf0cf9260048083019391928290030181865afa15801561407f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140a39190615363565b6140ae9060016153d5565b848960010160008860028111156140c7576140c76150aa565b60028111156140d8576140d86150aa565b8152602080820192909252604090810160009081208b546001600160a01b031682529092529020929190614121565b9150816141165750600061362d565b612ca5848684614922565b835460009080158061415857508561413a60018361541e565b8154811061414a5761414a6153ed565b906000526020600020015484105b1561417657604051630eae4c9760e01b815260040160405180910390fd5b60006141838787876149a2565b90506000868281548110614199576141996153ed565b90600052602060002001549050808511156141b457806141b6565b845b945084156141f057848783815481106141d1576141d16153ed565b9060005260206000200160008282546141ea919061541e565b90915550505b50929695505050505050565b6142ab856002016000846002811115614217576142176150aa565b6002811115614228576142286150aa565b81526020808201929092526040908101600090812087546001600160a01b031682529092528120908690849060018a019087600281111561426b5761426b6150aa565b600281111561427c5761427c6150aa565b8152602080820192909252604090810160009081208a546001600160a01b0316825290925290209291906142c4565b8454610b5e90849086906001600160a01b031684614bb2565b83546001811180156142fb5750846142dd60018361541e565b815481106142ed576142ed6153ed565b906000526020600020015483105b801561432c57508461430e60028361541e565b8154811061431e5761431e6153ed565b906000526020600020015483105b1561434a57604051630eae4c9760e01b815260040160405180910390fd5b60006143578686866149a2565b8654925090505b81811015612dcb5782858281548110614379576143796153ed565b90600052602060002001600082825461439291906153d5565b909155508190506143a281615403565b91505061435e565b815160005b81811015612dcb5760008482815181106143cb576143cb6153ed565b6020026020010151905085811180156143fb5750600081815260028801602052604090205460ff16151584151514155b1561441d5760008181526002880160205260409020805460ff19168515151790555b508061442881615403565b9150506143af565b600061443d82600a615798565b61444885858561445c565b614452908761567b565b61362d919061569a565b60008061446a8360016153d5565b61447590600a615798565b61447f908661567b565b9050600a61448d858361569a565b6144529060056153d5565b6000818314156144b4576144ad60018361541e565b90506123a3565b600060026144c284866153d5565b6144cc919061569a565b9050848682815481106144e1576144e16153ed565b90600052602060002001541115614506576144fe86868684614498565b9150506123a3565b84868281548110614519576145196153ed565b9060005260206000200154101561362d576144fe868661453a8460016153d5565b86614498565b60006001826002811115614556576145566150aa565b141561456a57506001602960991b01919050565b600282600281111561457e5761457e6150aa565b141561459257506002602960991b01919050565b604051638698bf3760e01b815260040160405180910390fd5b6000806145b9858585613649565b9092509050816145cc576000915061356f565b60a08401511561356f576145e8828560a0015160646019614430565b6145f2908361541e565b9150935093915050565b6000614609848484613ae0565b9050806146165750505050565b6000846003016000846002811115614630576146306150aa565b6002811115614641576146416150aa565b8152602001908152602001600020805490509050836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146b79190615363565b8560030160008560028111156146cf576146cf6150aa565b60028111156146e0576146e06150aa565b81526020019081526020016000206001836146fb919061541e565b8154811061470b5761470b6153ed565b9060005260206000200154116147a657846003016000846002811115614733576147336150aa565b6002811115614744576147446150aa565b8152602001908152602001600020600061475e9190614c32565b846004016000846002811115614776576147766150aa565b6002811115614787576147876150aa565b815260200190815260200160002060006147a19190614c32565b61490b565b60405180602001604052808660030160008660028111156147c9576147c96150aa565b60028111156147da576147da6150aa565b81526020019081526020016000206001846147f5919061541e565b81548110614805576148056153ed565b906000526020600020015481525085600301600085600281111561482b5761482b6150aa565b600281111561483c5761483c6150aa565b81526020810191909152604001600020614857916001614c53565b50604051806020016040528086600401600086600281111561487b5761487b6150aa565b600281111561488c5761488c6150aa565b81526020019081526020016000206001846148a7919061541e565b815481106148b7576148b76153ed565b90600052602060002001548152508560040160008560028111156148dd576148dd6150aa565b60028111156148ee576148ee6150aa565b81526020810191909152604001600020614909916001614c53565b505b8454610b5e9084906001600160a01b0316846138de565b611e8683600501836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061498b9190615363565b6149969060016153d5565b60048601919084614121565b8254600090806149dd57505082546001818101855560008581526020808220909301849055845491820185558481529182200181905561157e565b60006149ea60018361541e565b90506000868281548110614a0057614a006153ed565b9060005260206000200154905080851415614a1f5750915061157e9050565b80851115614a875786546001810188556000888152602090200185905585548690819084908110614a5257614a526153ed565b6000918252602080832090910154835460018181018655948452919092200155614a7d9083906153d5565b935050505061157e565b600082118015614abc575086614a9e60018461541e565b81548110614aae57614aae6153ed565b906000526020600020015485145b15614acc57614a7d60018361541e565b86878381548110614adf57614adf6153ed565b6000918252602080832090910154835460018101855593835291209091015585548690819084908110614b1457614b146153ed565b6000918252602080832090910154835460018101855593835291209091015586548590889084908110614b4957614b496153ed565b6000918252602090912001558115614b875785614b6760018461541e565b81548110614b7757614b776153ed565b9060005260206000200154614b8a565b60005b868381548110614b9c57614b9c6153ed565b60009182526020909120015550915061157e9050565b6001600160a01b038216600090815260088501602052604090205460ff16614c20576001600160a01b038216600081815260088601602090815260408220805460ff191660019081179091556007880180549182018155835291200180546001600160a01b03191690911790555b611e86600485016005860185846142c4565b5080546000825590600052602060002090810190614c509190614c9e565b50565b828054828255906000526020600020908101928215614c8e579160200282015b82811115614c8e578251825591602001919060010190614c73565b50614c9a929150614c9e565b5090565b5b80821115614c9a5760008155600101614c9f565b6001600160a01b0381168114614c5057600080fd5b60008060408385031215614cdb57600080fd5b8235614ce681614cb3565b946020939093013593505050565b600060208284031215614d0657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715614d4657614d46614d0d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614d7457614d74614d0d565b604052919050565b60006001600160401b03821115614d9557614d95614d0d565b5060051b60200190565b60008060408385031215614db257600080fd5b8235614dbd81614cb3565b91506020838101356001600160401b03811115614dd957600080fd5b8401601f81018613614dea57600080fd5b8035614dfd614df882614d7c565b614d4c565b81815260059190911b82018301908381019088831115614e1c57600080fd5b928401925b82841015614e3a57833582529284019290840190614e21565b80955050505050509250929050565b60008060408385031215614e5c57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015614ea45781516001600160a01b031687529582019590820190600101614e7f565b509495945050505050565b604081526000614ec26040830185614e6b565b90508260208301529392505050565b60008060008060808587031215614ee757600080fd5b8435614ef281614cb3565b966020860135965060408601359560600135945092505050565b600081518084526020808501945080840160005b83811015614ea457815187529582019590820190600101614f20565b60a081526000614f4f60a0830188614e6b565b8281036020840152614f618188614f0c565b90508281036040840152614f758187614f0c565b90508281036060840152614f898186614f0c565b9150508260808301529695505050505050565b60008060408385031215614faf57600080fd5b82356001600160401b03811115614fc557600080fd5b8301601f81018513614fd657600080fd5b80356020614fe6614df883614d7c565b82815260059290921b8301810191818101908884111561500557600080fd5b938201935b8385101561502c57843561501d81614cb3565b8252938201939082019061500a565b98969091013596505050505050565b60608152600061504e6060830186614e6b565b82810360208401526150608186614f0c565b915050826040830152949350505050565b6000806040838503121561508457600080fd5b823561508f81614cb3565b9150602083013561509f81614cb3565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b600381106150de57634e487b7160e01b600052602160045260246000fd5b9052565b608081016150f082876150c0565b846020830152836040830152821515606083015295945050505050565b60006020828403121561511f57600080fd5b813561157e81614cb3565b60008060006060848603121561513f57600080fd5b505081359360208301359350604090920135919050565b600081518084526020808501945080840160005b83811015614ea457815115158752958201959082019060010161516a565b60a08152600061519b60a0830188614e6b565b82810360208401526151ad8188614e6b565b905082810360408401526151c18187614f0c565b90508281036060840152614f898186615156565b6000806000606084860312156151ea57600080fd5b83356151f581614cb3565b925060208401356003811061520957600080fd5b929592945050506040919091013590565b60008060006060848603121561522f57600080fd5b833561523a81614cb3565b95602085013595506040909401359392505050565b60a0808252865190820181905260009060209060c0840190828a01845b8281101561528f5761527f8483516150c0565b928401929084019060010161526c565b505050838103828501526152a38189614f0c565b91505082810360408401526151c18187614f0c565b6000806000606084860312156152cd57600080fd5b83356152d881614cb3565b9250602084013561520981614cb3565b600061012082840312156152fb57600080fd5b615303614d23565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b60006020828403121561537557600080fd5b5051919050565b8051801515811461538c57600080fd5b919050565b6000602082840312156153a357600080fd5b61157e8261537c565b60208152600061157e6020830184614f0c565b634e487b7160e01b600052601160045260246000fd5b600082198211156153e8576153e86153bf565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415615417576154176153bf565b5060010190565b600082821015615430576154306153bf565b500390565b600082601f83011261544657600080fd5b81516020615456614df883614d7c565b82815260059290921b8401810191818101908684111561547557600080fd5b8286015b8481101561549957805161548c81614cb3565b8352918301918301615479565b509695505050505050565b600082601f8301126154b557600080fd5b815160206154c5614df883614d7c565b82815260059290921b840181019181810190868411156154e457600080fd5b8286015b84811015615499576154f98161537c565b83529183019183016154e8565b600082601f83011261551757600080fd5b81516020615527614df883614d7c565b82815260059290921b8401810191818101908684111561554657600080fd5b8286015b84811015615499578051835291830191830161554a565b600080600080600080600060e0888a03121561557c57600080fd5b87516001600160401b038082111561559357600080fd5b61559f8b838c01615435565b985060208a01519150808211156155b557600080fd5b6155c18b838c01615435565b975060408a01519150808211156155d757600080fd5b6155e38b838c016154a4565b965060608a01519150808211156155f957600080fd5b6156058b838c016154a4565b955060808a015191508082111561561b57600080fd5b6156278b838c01615506565b945060a08a015191508082111561563d57600080fd5b5061564a8a828b016154a4565b92505060c0880151905092959891949750929550565b6040810161566e82856150c0565b8260208301529392505050565b6000816000190483118215151615615695576156956153bf565b500290565b6000826156b757634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156110af5781600019048211156156dd576156dd6153bf565b808516156156ea57918102915b93841c93908002906156c1565b60008261570657506001610fbb565b8161571357506000610fbb565b816001811461572957600281146157335761574f565b6001915050610fbb565b60ff841115615744576157446153bf565b50506001821b610fbb565b5060208310610133831016604e8410600b8410161715615772575081810a610fbb565b61577c83836156bc565b8060001904821115615790576157906153bf565b029392505050565b600061157e83836156f7565b60208101610fbb82846150c0565b6000816157c1576157c16153bf565b50600019019056fea26469706673582212207b2d1662d7b769f464a304e533739d8f086e3da7b8bcf2076988a8e3798afe7264736f6c634300080c0033`), + }, +} diff --git a/contracts/oasys/deployments2.go b/contracts/oasys/deployments2.go new file mode 100644 index 000000000..85b713af6 --- /dev/null +++ b/contracts/oasys/deployments2.go @@ -0,0 +1,188 @@ +package oasys + +import "github.com/ethereum/go-ethereum/params" + +var deployments2 = []*deployment{ + { + contract: cBridgeBridge, + // commit: https://github.com/oasysgames/oasys-ecosystem-contract/blob/b9d43020001d9c8ae5d8a0e571726e378314ce9b/contracts/cBridge/liquidity-bridge/Bridge.sol + code: mustDecodeCode( + "0x6080604052600436106103545760003560e01c806382dc1ec4116101c6578063ba2cb25c116100f7578063e43581b811610095578063f20c922a1161006f578063f20c922a14610a6b578063f2fde38b14610a8b578063f832138314610aab578063f8b30d7d14610ad857600080fd5b8063e43581b814610a0b578063e999e5f414610a2b578063eecdac8814610a4b57600080fd5b8063d0790da9116100d1578063d0790da914610980578063e026049c14610996578063e09ab428146109ab578063e3eece26146109db57600080fd5b8063ba2cb25c14610913578063ccde517a14610933578063cdd1b25d1461096057600080fd5b80639ff9001a11610164578063a7bdf45a1161013e578063a7bdf45a14610836578063adc0d57f14610856578063b1c94d94146108d0578063b5f2bc47146108e657600080fd5b80639ff9001a146107d6578063a21a9280146107f6578063a5977fbb1461081657600080fd5b806389e39127116101a057806389e391271461074a5780638da5cb5b146107825780639b14d4c6146107a05780639e25fc5c146107b657600080fd5b806382dc1ec4146106f55780638456cb5914610715578063878fe1ce1461072a57600080fd5b806348234126116102a0578063618ee0551161023e5780636b2c0f55116102185780636b2c0f551461067d5780636ef8d66d1461069d5780637044c89e146106b257806380f51c12146106c557600080fd5b8063618ee0551461061a57806365a114f114610647578063682dbc221461065d57600080fd5b8063566887001161027a578063566887001461059f57806357d775f8146105bf5780635c975abb146105d557806360216b00146105ed57600080fd5b8063482341261461053257806352532faa1461055257806354eea7961461057f57600080fd5b80633c64f04b1161030d5780633f4ba83a116102e75780633f4ba83a146104a5578063457bfa2f146104ba57806346fbf68e146104f257806347b16c6c1461051257600080fd5b80633c64f04b146104325780633d572107146104725780633f2e5fc31461049257600080fd5b8063089927411461036057806317bdbae51461038257806325c38b9f146103a25780632fd1b0a4146103b7578063370fb47b146103ee5780633c4a25d01461041257600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061038061037b366004613f99565b610b05565b005b34801561038e57600080fd5b5061038061039d366004613f99565b610c57565b3480156103ae57600080fd5b50610380610d99565b3480156103c357600080fd5b506017546103d49063ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b3480156103fa57600080fd5b5061040460025481565b6040519081526020016103e5565b34801561041e57600080fd5b5061038061042d366004614020565b610e1a565b34801561043e57600080fd5b5061046261044d36600461403b565b60146020526000908152604090205460ff1681565b60405190151581526020016103e5565b34801561047e57600080fd5b5061038061048d36600461403b565b610e5f565b6103806104a036600461407f565b610ec0565b3480156104b157600080fd5b50610380611068565b3480156104c657600080fd5b506013546104da906001600160a01b031681565b6040516001600160a01b0390911681526020016103e5565b3480156104fe57600080fd5b5061046261050d366004614020565b6110be565b34801561051e57600080fd5b5061038061052d366004613f99565b6110dc565b34801561053e57600080fd5b5061038061054d3660046140dd565b61121e565b34801561055e57600080fd5b5061040461056d366004614020565b600e6020526000908152604090205481565b34801561058b57600080fd5b5061038061059a36600461403b565b61125f565b3480156105ab57600080fd5b506103806105ba3660046140f8565b6112b9565b3480156105cb57600080fd5b5061040460095481565b3480156105e157600080fd5b5060065460ff16610462565b3480156105f957600080fd5b50610404610608366004614020565b600a6020526000908152604090205481565b34801561062657600080fd5b50610404610635366004614020565b60166020526000908152604090205481565b34801561065357600080fd5b5061040460035481565b34801561066957600080fd5b50610380610678366004614138565b6113e6565b34801561068957600080fd5b50610380610698366004614020565b6114d2565b3480156106a957600080fd5b50610380611514565b6103806106c036600461403b565b61151d565b3480156106d157600080fd5b506104626106e0366004614020565b60076020526000908152604090205460ff1681565b34801561070157600080fd5b50610380610710366004614020565b611730565b34801561072157600080fd5b50610380611772565b34801561073657600080fd5b50610380610745366004613f99565b6117c6565b34801561075657600080fd5b5060105461076a906001600160401b031681565b6040516001600160401b0390911681526020016103e5565b34801561078e57600080fd5b506000546001600160a01b03166104da565b3480156107ac57600080fd5b5061040460045481565b3480156107c257600080fd5b506103806107d136600461403b565b611908565b3480156107e257600080fd5b506103806107f1366004614020565b611938565b34801561080257600080fd5b50610380610811366004614265565b611993565b34801561082257600080fd5b50610380610831366004614353565b611c7f565b34801561084257600080fd5b50610380610851366004613f99565b611d29565b34801561086257600080fd5b506108a561087136600461403b565b600d6020526000908152604090208054600182015460028301546003909301546001600160a01b0392831693919092169184565b604080516001600160a01b0395861681529490931660208501529183015260608201526080016103e5565b3480156108dc57600080fd5b50610404600f5481565b3480156108f257600080fd5b50610404610901366004614020565b600b6020526000908152604090205481565b34801561091f57600080fd5b5061038061092e3660046143c0565b611dc2565b34801561093f57600080fd5b5061040461094e366004614020565b60116020526000908152604090205481565b34801561096c57600080fd5b5061038061097b366004614265565b611f03565b34801561098c57600080fd5b5061040460015481565b3480156109a257600080fd5b506103806121c7565b3480156109b757600080fd5b506104626109c636600461403b565b60126020526000908152604090205460ff1681565b3480156109e757600080fd5b506104626109f6366004614020565b60086020526000908152604090205460ff1681565b348015610a1757600080fd5b50610462610a26366004614020565b6121d0565b348015610a3757600080fd5b50610380610a46366004613f99565b6121ee565b348015610a5757600080fd5b50610380610a66366004614020565b612330565b348015610a7757600080fd5b50610380610a8636600461403b565b612372565b348015610a9757600080fd5b50610380610aa6366004614020565b61240d565b348015610ab757600080fd5b50610404610ac6366004614020565b600c6020526000908152604090205481565b348015610ae457600080fd5b50610404610af3366004614020565b60156020526000908152604090205481565b610b0e336121d0565b610b335760405162461bcd60e51b8152600401610b2a906144bf565b60405180910390fd5b828114610b525760405162461bcd60e51b8152600401610b2a906144ef565b60005b83811015610c5057828282818110610b6f57610b6f614518565b9050602002013560156000878785818110610b8c57610b8c614518565b9050602002016020810190610ba19190614020565b6001600160a01b031681526020810191909152604001600020557f8b59d386e660418a48d742213ad5ce7c4dd51ae81f30e4e2c387f17d907010c9858583818110610bee57610bee614518565b9050602002016020810190610c039190614020565b848484818110610c1557610c15614518565b604080516001600160a01b0390951685526020918202939093013590840152500160405180910390a180610c4881614544565b915050610b55565b5050505050565b610c60336121d0565b610c7c5760405162461bcd60e51b8152600401610b2a906144bf565b828114610c9b5760405162461bcd60e51b8152600401610b2a906144ef565b60005b83811015610c5057828282818110610cb857610cb8614518565b90506020020135600e6000878785818110610cd557610cd5614518565b9050602002016020810190610cea9190614020565b6001600160a01b031681526020810191909152604001600020557fceaad6533bfb481492fb3e08ef19297f46611b8fa9de5ef4cf8dc23a56ad09ce858583818110610d3757610d37614518565b9050602002016020810190610d4c9190614020565b848484818110610d5e57610d5e614518565b604080516001600160a01b0390951685526020918202939093013590840152500160405180910390a180610d9181614544565b915050610c9e565b33610dac6000546001600160a01b031690565b6001600160a01b031614610dd25760405162461bcd60e51b8152600401610b2a9061455f565b600454610ddf9042614594565b60038190556040519081527f68e825132f7d4bc837dea2d64ac9fc19912bf0224b67f9317d8f1a917f5304a1906020015b60405180910390a1565b33610e2d6000546001600160a01b031690565b6001600160a01b031614610e535760405162461bcd60e51b8152600401610b2a9061455f565b610e5c816124b4565b50565b610e68336121d0565b610e845760405162461bcd60e51b8152600401610b2a906144bf565b600f8190556040518181527fc0a39f234199b125fb93713c4d067bdcebbf691087f87b79c0feb92b156ba8b6906020015b60405180910390a150565b60026005541415610ee35760405162461bcd60e51b8152600401610b2a906145ac565b6002600555610ef061255e565b833414610f315760405162461bcd60e51b815260206004820152600f60248201526e082dadeeadce840dad2e6dac2e8c6d608b1b6044820152606401610b2a565b6013546001600160a01b0316610f7f5760405162461bcd60e51b815260206004820152601360248201527213985d1a5d99481ddc985c081b9bdd081cd95d606a1b6044820152606401610b2a565b601354600090610f9d9087906001600160a01b0316878787876125a4565b9050601360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0866040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fef57600080fd5b505af1158015611003573d6000803e3d6000fd5b50506013546040517f89d8051e597ab4178a863a5190407b98abfeff406aa8db90c59af76612e58f019450611053935085925033918b916001600160a01b03909116908b908b908b908b906145e3565b60405180910390a15050600160055550505050565b611071336110be565b6110b45760405162461bcd60e51b815260206004820152601460248201527321b0b63632b91034b9903737ba103830bab9b2b960611b6044820152606401610b2a565b6110bc61279b565b565b6001600160a01b031660009081526007602052604090205460ff1690565b6110e5336121d0565b6111015760405162461bcd60e51b8152600401610b2a906144bf565b8281146111205760405162461bcd60e51b8152600401610b2a906144ef565b60005b83811015610c505782828281811061113d5761113d614518565b90506020020135600b600087878581811061115a5761115a614518565b905060200201602081019061116f9190614020565b6001600160a01b031681526020810191909152604001600020557f608e49c22994f20b5d3496dca088b88dfd81b4a3e8cc3809ea1e10a320107e898585838181106111bc576111bc614518565b90506020020160208101906111d19190614020565b8484848181106111e3576111e3614518565b604080516001600160a01b0390951685526020918202939093013590840152500160405180910390a18061121681614544565b915050611123565b611227336121d0565b6112435760405162461bcd60e51b8152600401610b2a906144bf565b6017805463ffffffff191663ffffffff92909216919091179055565b611268336121d0565b6112845760405162461bcd60e51b8152600401610b2a906144bf565b60098190556040518181527f2664fec2ff76486ac58ed087310855b648b15b9d19f3de8529e95f7c46b7d6b390602001610eb5565b600260055414156112dc5760405162461bcd60e51b8152600401610b2a906145ac565b60026005556112e961255e565b6001600160a01b03821660009081526011602052604090205481116113205760405162461bcd60e51b8152600401610b2a90614636565b601080546001919060009061133f9084906001600160401b0316614660565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550611383333083856001600160a01b03166127e8909392919063ffffffff16565b601054604080516001600160401b0390921682523360208301526001600160a01b0384168282015260608201839052517fd5d28426c3248963b1719df49aa4c665120372e02c8249bbea03d019c39ce7649181900360800190a150506001600555565b6000848484846040516020016113ff94939291906146f7565b60405160208183030381529060405280519060200120905080600154146114685760405162461bcd60e51b815260206004820152601860248201527f4d69736d617463682063757272656e74207369676e65727300000000000000006044820152606401610b2a565b87516020808a0191909120604080517f19457468657265756d205369676e6564204d6573736167653a0a33320000000081850152603c8082019390935281518082039093018352605c01905280519101206114c890888888888888612853565b5050505050505050565b336114e56000546001600160a01b031690565b6001600160a01b03161461150b5760405162461bcd60e51b8152600401610b2a9061455f565b610e5c81612b35565b6110bc33612b35565b600260055414156115405760405162461bcd60e51b8152600401610b2a906145ac565b600260055561154d61255e565b80341461158e5760405162461bcd60e51b815260206004820152600f60248201526e082dadeeadce840dad2e6dac2e8c6d608b1b6044820152606401610b2a565b6013546001600160a01b03166115dc5760405162461bcd60e51b815260206004820152601360248201527213985d1a5d99481ddc985c081b9bdd081cd95d606a1b6044820152606401610b2a565b6013546001600160a01b031660009081526011602052604090205481116116155760405162461bcd60e51b8152600401610b2a90614636565b60108054600191906000906116349084906001600160401b0316614660565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550601360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156116a857600080fd5b505af11580156116bc573d6000803e3d6000fd5b5050601054601354604080516001600160401b0390931683523360208401526001600160a01b0390911690820152606081018590527fd5d28426c3248963b1719df49aa4c665120372e02c8249bbea03d019c39ce764935060800191506117209050565b60405180910390a1506001600555565b336117436000546001600160a01b031690565b6001600160a01b0316146117695760405162461bcd60e51b8152600401610b2a9061455f565b610e5c81612bd3565b61177b336110be565b6117be5760405162461bcd60e51b815260206004820152601460248201527321b0b63632b91034b9903737ba103830bab9b2b960611b6044820152606401610b2a565b6110bc612c7d565b6117cf336121d0565b6117eb5760405162461bcd60e51b8152600401610b2a906144bf565b82811461180a5760405162461bcd60e51b8152600401610b2a906144ef565b60005b83811015610c505782828281811061182757611827614518565b905060200201356016600087878581811061184457611844614518565b90506020020160208101906118599190614020565b6001600160a01b031681526020810191909152604001600020557f4f12d1a5bfb3ccd3719255d4d299d808d50cdca9a0a5c2b3a5aaa7edde73052c8585838181106118a6576118a6614518565b90506020020160208101906118bb9190614020565b8484848181106118cd576118cd614518565b604080516001600160a01b0390951685526020918202939093013590840152500160405180910390a18061190081614544565b91505061180d565b61191061255e565b600061191b82612cba565b9050611934816000015182602001518360400151612e7f565b5050565b3361194b6000546001600160a01b031690565b6001600160a01b0316146119715760405162461bcd60e51b8152600401610b2a9061455f565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b61199b61255e565b600046306040516020016119da92919091825260601b6001600160601b03191660208201526a57697468647261774d736760a81b6034820152603f0190565b604051602081830303815290604052805190602001209050611a24818a8a604051602001611a0a93929190614718565b6040516020818303038152906040528888888888886113e6565b6000611a658a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612fb492505050565b9050600081600001518260200151836040015184606001518560800151604051602001611ad995949392919060c095861b6001600160c01b031990811682529490951b9093166008850152606091821b6001600160601b03199081166010860152911b166024830152603882015260580190565b60408051601f1981840301815291815281516020928301206000818152601290935291205490915060ff1615611b515760405162461bcd60e51b815260206004820152601a60248201527f776974686472617720616c7265616479207375636365656465640000000000006044820152606401610b2a565b6000818152601260205260409020805460ff1916600117905560608201516080830151611b7e9190613112565b60608201516001600160a01b03166000908152600e60205260409020548015801590611bad5750808360800151115b15611bcf57611bca8284604001518560600151866080015161321f565b611be6565b611be6836040015184606001518560800151612e7f565b7f48a1ab26f3aa7b62bb6b6e8eed182f292b84eb7b006c0254386b268af20774be8284602001518560400151866060015187608001518860a00151604051611c69969594939291909586526001600160401b039490941660208601526001600160a01b03928316604086015291166060840152608083015260a082015260c00190565b60405180910390a1505050505050505050505050565b60026005541415611ca25760405162461bcd60e51b8152600401610b2a906145ac565b6002600555611caf61255e565b6000611cbf8787878787876125a4565b9050611cd66001600160a01b0387163330886127e8565b7f89d8051e597ab4178a863a5190407b98abfeff406aa8db90c59af76612e58f018133898989898989604051611d139897969594939291906145e3565b60405180910390a1505060016005555050505050565b33611d3c6000546001600160a01b031690565b6001600160a01b031614611d625760405162461bcd60e51b8152600401610b2a9061455f565b6003544211611daa5760405162461bcd60e51b81526020600482015260146024820152736e6f742072656163682072657365742074696d6560601b6044820152606401610b2a565b600019600355611dbc84848484613332565b50505050565b6002548b11611e135760405162461bcd60e51b815260206004820152601e60248201527f547269676765722074696d65206973206e6f7420696e6372656173696e6700006044820152606401610b2a565b611e1f42610e10614594565b8b10611e6d5760405162461bcd60e51b815260206004820152601960248201527f547269676765722074696d6520697320746f6f206c61726765000000000000006044820152606401610b2a565b60004630604051602001611eae92919091825260601b6001600160601b03191660208201526c5570646174655369676e65727360981b603482015260410190565b604051602081830303815290604052805190602001209050611ee4818d8d8d8d8d604051602001611a0a96959493929190614732565b611ef08b8b8b8b613332565b5050506002989098555050505050505050565b611f0b61255e565b60004630604051602001611f4492919091825260601b6001600160601b03191660208201526452656c617960d81b603482015260390190565b604051602081830303815290604052805190602001209050611f74818a8a604051602001611a0a93929190614718565b6000611fb58a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134a092505050565b8051602080830151604080850151606080870151608088015160a089015160c0808b015187519a861b6001600160601b03199081168c8c015298861b891660348c01529590941b9096166048890152605c880191909152811b6001600160c01b0319908116607c88015293901b9092166084850152608c808501929092528051808503909201825260ac909301835280519082012060008181526014909252919020549192509060ff161561209e5760405162461bcd60e51b815260206004820152600f60248201526e7472616e736665722065786973747360881b6044820152606401610b2a565b60008181526014602052604090819020805460ff1916600117905582015160608301516120cb9190613112565b6040808301516001600160a01b03166000908152600e602052205480158015906120f85750808360600151115b1561211a576121158284602001518560400151866060015161321f565b612131565b612131836020015184604001518560600151612e7f565b7f79fa08de5149d912dce8e5e8da7a7c17ccdf23dd5d3bfe196802e6eb86347c7c82846000015185602001518660400151876060015188608001518960c00151604051611c6997969594939291909687526001600160a01b039586166020880152938516604087015291909316606085015260808401929092526001600160401b039190911660a083015260c082015260e00190565b6110bc33613616565b6001600160a01b031660009081526008602052604090205460ff1690565b6121f7336121d0565b6122135760405162461bcd60e51b8152600401610b2a906144bf565b8281146122325760405162461bcd60e51b8152600401610b2a906144ef565b60005b83811015610c505782828281811061224f5761224f614518565b905060200201356011600087878581811061226c5761226c614518565b90506020020160208101906122819190614020565b6001600160a01b031681526020810191909152604001600020557fc56b0d14c4940515800d94ebbd0f3f5d8cc58ba1109c12536bd993b72e466e4f8585838181106122ce576122ce614518565b90506020020160208101906122e39190614020565b8484848181106122f5576122f5614518565b604080516001600160a01b0390951685526020918202939093013590840152500160405180910390a18061232881614544565b915050612235565b336123436000546001600160a01b031690565b6001600160a01b0316146123695760405162461bcd60e51b8152600401610b2a9061455f565b610e5c81613616565b336123856000546001600160a01b031690565b6001600160a01b0316146123ab5760405162461bcd60e51b8152600401610b2a9061455f565b60045481116124085760405162461bcd60e51b815260206004820152602360248201527f6e6f7469636520706572696f642063616e206f6e6c7920626520696e637265616044820152621cd95960ea1b6064820152608401610b2a565b600455565b336124206000546001600160a01b031690565b6001600160a01b0316146124465760405162461bcd60e51b8152600401610b2a9061455f565b6001600160a01b0381166124ab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b2a565b610e5c816136bc565b6124bd816121d0565b1561250a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920676f7665726e6f7200000000006044820152606401610b2a565b6001600160a01b038116600081815260086020908152604091829020805460ff1916600117905590519182527fdc5a48d79e2e147530ff63ecdbed5a5a66adb9d5cf339384d5d076da197c40b59101610eb5565b60065460ff16156110bc5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610b2a565b6001600160a01b03851660009081526015602052604081205485116125db5760405162461bcd60e51b8152600401610b2a90614636565b6001600160a01b038616600090815260166020526040902054158061261857506001600160a01b0386166000908152601660205260409020548511155b6126575760405162461bcd60e51b815260206004820152601060248201526f616d6f756e7420746f6f206c6172676560801b6044820152606401610b2a565b60175463ffffffff908116908316116126ab5760405162461bcd60e51b81526020600482015260166024820152751b585e081cdb1a5c1c1859d9481d1bdbc81cdb585b1b60521b6044820152606401610b2a565b6040516001600160601b031933606090811b8216602084015289811b8216603484015288901b166048820152605c81018690526001600160c01b031960c086811b8216607c84015285811b8216608484015246901b16608c82015260009060940160408051601f1981840301815291815281516020928301206000818152601490935291205490915060ff16156127765760405162461bcd60e51b815260206004820152600f60248201526e7472616e736665722065786973747360881b6044820152606401610b2a565b6000818152601460205260409020805460ff1916600117905590509695505050505050565b6127a361370c565b6006805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b039091168152602001610e10565b6040516001600160a01b0380851660248301528316604482015260648101829052611dbc9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613755565b8281146128725760405162461bcd60e51b8152600401610b2a9061475a565b6000805b848110156128b65783838281811061289057612890614518565b90506020020135826128a29190614594565b9150806128ae81614544565b915050612876565b50600060036128c683600261479d565b6128d091906147bc565b6128db906001614594565b905060008080805b8a811015612aee5760006129668d8d8481811061290257612902614518565b905060200281019061291491906147de565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508f61382790919063ffffffff16565b9050836001600160a01b0316816001600160a01b0316116129c95760405162461bcd60e51b815260206004820152601e60248201527f7369676e657273206e6f7420696e20617363656e64696e67206f7264657200006044820152606401610b2a565b8093505b8a8a848181106129df576129df614518565b90506020020160208101906129f49190614020565b6001600160a01b0316816001600160a01b03161115612a6157612a18600184614594565b9250898310612a5c5760405162461bcd60e51b815260206004820152601060248201526f1cda59db995c881b9bdd08199bdd5b9960821b6044820152606401610b2a565b6129cd565b8a8a84818110612a7357612a73614518565b9050602002016020810190612a889190614020565b6001600160a01b0316816001600160a01b03161415612ac857888884818110612ab357612ab3614518565b9050602002013585612ac59190614594565b94505b858510612adb5750505050505050612b2c565b5080612ae681614544565b9150506128e3565b5060405162461bcd60e51b81526020600482015260126024820152711c5d5bdc9d5b481b9bdd081c995858da195960721b6044820152606401610b2a565b50505050505050565b612b3e816110be565b612b825760405162461bcd60e51b815260206004820152601560248201527420b1b1b7bab73a1034b9903737ba103830bab9b2b960591b6044820152606401610b2a565b6001600160a01b038116600081815260076020908152604091829020805460ff1916905590519182527fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e9101610eb5565b612bdc816110be565b15612c295760405162461bcd60e51b815260206004820152601960248201527f4163636f756e7420697320616c726561647920706175736572000000000000006044820152606401610b2a565b6001600160a01b038116600081815260076020908152604091829020805460ff1916600117905590519182527f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f89101610eb5565b612c8561255e565b6006805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586127d03390565b6040805160808101825260008082526020820181905291810182905260608101919091526000828152600d6020908152604091829020825160808101845281546001600160a01b0390811682526001830154169281019290925260028101549282019290925260039091015460608201819052612d795760405162461bcd60e51b815260206004820152601a60248201527f64656c61796564207472616e73666572206e6f742065786973740000000000006044820152606401610b2a565b600f548160600151612d8b9190614594565b4211612dd95760405162461bcd60e51b815260206004820152601d60248201527f64656c61796564207472616e73666572207374696c6c206c6f636b65640000006044820152606401610b2a565b6000838152600d6020908152604080832080546001600160a01b03199081168255600182018054909116905560028101849055600301929092558251908301518383015192517f3b40e5089937425d14cdd96947e5661868357e224af59bd8b24a4b8a330d442693612e7193889390929091909384526001600160a01b03928316602085015291166040830152606082015260800190565b60405180910390a192915050565b6013546001600160a01b0383811691161415612f9b57601354604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b158015612edb57600080fd5b505af1158015612eef573d6000803e3d6000fd5b505050506000836001600160a01b03168261c35090604051600060405180830381858888f193505050503d8060008114612f45576040519150601f19603f3d011682016040523d82523d6000602084013e612f4a565b606091505b5050905080611dbc5760405162461bcd60e51b815260206004820152601b60248201527f6661696c656420746f2073656e64206e617469766520746f6b656e00000000006044820152606401610b2a565b612faf6001600160a01b038316848361384b565b505050565b6040805160c08101825260008082526020808301829052828401829052606083018290526080830182905260a0830182905283518085019094528184528301849052909190805b6020830151518351101561310a576130128361387b565b9092509050816001141561303957613029836138b5565b6001600160401b03168452612ffb565b816002141561305e5761304b836138b5565b6001600160401b03166020850152612ffb565b816003141561308b5761307861307384613937565b6139f3565b6001600160a01b03166040850152612ffb565b81600414156130b3576130a061307384613937565b6001600160a01b03166060850152612ffb565b81600514156130d7576130cd6130c884613937565b613a04565b6080850152612ffb565b81600614156130fb576130f16130ec84613937565b613a3b565b60a0850152612ffb565b6131058382613a53565b612ffb565b505050919050565b60095461311d575050565b6001600160a01b0382166000908152600b60205260409020548061314057505050565b6001600160a01b0383166000908152600a60205260408120546009549091429161316a81846147bc565b613174919061479d565b6001600160a01b0387166000908152600c602052604090205490915081111561319f578492506131ac565b6131a98584614594565b92505b838311156131f15760405162461bcd60e51b81526020600482015260126024820152710766f6c756d652065786365656473206361760741b6044820152606401610b2a565b506001600160a01b039094166000908152600a6020908152604080832093909355600c905220929092555050565b6000848152600d60205260409020600301541561327e5760405162461bcd60e51b815260206004820152601f60248201527f64656c61796564207472616e7366657220616c726561647920657869737473006044820152606401610b2a565b604080516080810182526001600160a01b0380861682528481166020808401918252838501868152426060860190815260008b8152600d90935291869020945185549085166001600160a01b031991821617865592516001860180549190951693169290921790925551600283015551600390910155517fcbcfffe5102114216a85d3aceb14ad4b81a3935b1b5c468fadf3889eb9c5dce6906133249086815260200190565b60405180910390a150505050565b8281146133515760405162461bcd60e51b8152600401610b2a9061475a565b6000805b8481101561342a57816001600160a01b031686868381811061337957613379614518565b905060200201602081019061338e9190614020565b6001600160a01b0316116133ef5760405162461bcd60e51b815260206004820152602260248201527f4e6577207369676e657273206e6f7420696e20617363656e64696e67206f726460448201526132b960f11b6064820152608401610b2a565b85858281811061340157613401614518565b90506020020160208101906134169190614020565b91508061342281614544565b915050613355565b508484848460405160200161344294939291906146f7565b60408051601f198184030181529082905280516020909101206001557ff126123539a68393c55697f617e7d1148e371988daed246c2f41da99965a23f890613491908790879087908790614824565b60405180910390a15050505050565b6040805160e08101825260008082526020808301829052828401829052606083018290526080830182905260a0830182905260c0830182905283518085019094528184528301849052909190805b6020830151518351101561310a576135058361387b565b9092509050816001141561352f5761351f61307384613937565b6001600160a01b031684526134ee565b81600214156135575761354461307384613937565b6001600160a01b031660208501526134ee565b816003141561357f5761356c61307384613937565b6001600160a01b031660408501526134ee565b816004141561359e576135946130c884613937565b60608501526134ee565b81600514156135c3576135b0836138b5565b6001600160401b031660808501526134ee565b81600614156135e8576135d5836138b5565b6001600160401b031660a08501526134ee565b8160071415613607576135fd6130ec84613937565b60c08501526134ee565b6136118382613a53565b6134ee565b61361f816121d0565b61366b5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f7420676f7665726e6f720000000000000000006044820152606401610b2a565b6001600160a01b038116600081815260086020908152604091829020805460ff1916905590519182527f1ebe834e73d60a5fec822c1e1727d34bc79f2ad977ed504581cc1822fe20fb5b9101610eb5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60065460ff166110bc5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610b2a565b60006137aa826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613ac59092919063ffffffff16565b805190915015612faf57808060200190518101906137c891906148a6565b612faf5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b2a565b60008060006138368585613ade565b9150915061384381613b24565b509392505050565b6040516001600160a01b038316602482015260448101829052612faf90849063a9059cbb60e01b9060640161281c565b6000806000613889846138b5565b90506138966008826147bc565b92508060071660058111156138ad576138ad6148c8565b915050915091565b602080820151825181019091015160009182805b600a8110156139315783811a91506138e281600761479d565b82607f16901b85179450816080166000141561391f57613903816001614594565b86518790613912908390614594565b9052509395945050505050565b8061392981614544565b9150506138c9565b50600080fd5b60606000613944836138b5565b905060008184600001516139589190614594565b905083602001515181111561396c57600080fd5b816001600160401b0381111561398457613984614122565b6040519080825280601f01601f1916602001820160405280156139ae576020820181803683370190505b50602080860151865192955091818601919083010160005b858110156139e85781810151838201526139e1602082614594565b90506139c6565b505050935250919050565b60006139fe82613cdf565b92915050565b6000602082511115613a1557600080fd5b6020820151905081516020613a2a91906148de565b613a3590600861479d565b1c919050565b60008151602014613a4b57600080fd5b506020015190565b6000816005811115613a6757613a676148c8565b1415613a7657612faf826138b5565b6002816005811115613a8a57613a8a6148c8565b141561035b576000613a9b836138b5565b90508083600001818151613aaf9190614594565b90525060208301515183511115612faf57600080fd5b6060613ad48484600085613cfe565b90505b9392505050565b600080825160411415613b155760208301516040840151606085015160001a613b0987828585613e2f565b94509450505050613b1d565b506000905060025b9250929050565b6000816004811115613b3857613b386148c8565b1415613b415750565b6001816004811115613b5557613b556148c8565b1415613ba35760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610b2a565b6002816004811115613bb757613bb76148c8565b1415613c055760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b2a565b6003816004811115613c1957613c196148c8565b1415613c725760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b2a565b6004816004811115613c8657613c866148c8565b1415610e5c5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610b2a565b60008151601414613cef57600080fd5b5060200151600160601b900490565b606082471015613d5f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610b2a565b6001600160a01b0385163b613db65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b2a565b600080866001600160a01b03168587604051613dd29190614921565b60006040518083038185875af1925050503d8060008114613e0f576040519150601f19603f3d011682016040523d82523d6000602084013e613e14565b606091505b5091509150613e24828286613f1c565b979650505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613e665750600090506003613f13565b8460ff16601b14158015613e7e57508460ff16601c14155b15613e8f5750600090506004613f13565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613ee3573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613f0c57600060019250925050613f13565b9150600090505b94509492505050565b60608315613f2b575081613ad7565b825115613f3b5782518084602001fd5b8160405162461bcd60e51b8152600401610b2a919061493d565b60008083601f840112613f6757600080fd5b5081356001600160401b03811115613f7e57600080fd5b6020830191508360208260051b8501011115613b1d57600080fd5b60008060008060408587031215613faf57600080fd5b84356001600160401b0380821115613fc657600080fd5b613fd288838901613f55565b90965094506020870135915080821115613feb57600080fd5b50613ff887828801613f55565b95989497509550505050565b80356001600160a01b038116811461401b57600080fd5b919050565b60006020828403121561403257600080fd5b613ad782614004565b60006020828403121561404d57600080fd5b5035919050565b80356001600160401b038116811461401b57600080fd5b803563ffffffff8116811461401b57600080fd5b600080600080600060a0868803121561409757600080fd5b6140a086614004565b9450602086013593506140b560408701614054565b92506140c360608701614054565b91506140d16080870161406b565b90509295509295909350565b6000602082840312156140ef57600080fd5b613ad78261406b565b6000806040838503121561410b57600080fd5b61411483614004565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060006080888a03121561415357600080fd5b87356001600160401b038082111561416a57600080fd5b818a0191508a601f83011261417e57600080fd5b81358181111561419057614190614122565b604051601f8201601f19908116603f011681019083821181831017156141b8576141b8614122565b816040528281528d60208487010111156141d157600080fd5b82602086016020830137600094508460208483010152809b5050505060208a0135818111156141fe578283fd5b61420a8c828d01613f55565b90995097505060408a013581811115614221578283fd5b61422d8c828d01613f55565b90975095505060608a013581811115614244578283fd5b6142508c828d01613f55565b9a9d999c50979a509598949794955050505050565b6000806000806000806000806080898b03121561428157600080fd5b88356001600160401b038082111561429857600080fd5b818b0191508b601f8301126142ac57600080fd5b8135818111156142bb57600080fd5b8c60208285010111156142cd57600080fd5b60209283019a509850908a013590808211156142e857600080fd5b6142f48c838d01613f55565b909850965060408b013591508082111561430d57600080fd5b6143198c838d01613f55565b909650945060608b013591508082111561433257600080fd5b5061433f8b828c01613f55565b999c989b5096995094979396929594505050565b60008060008060008060c0878903121561436c57600080fd5b61437587614004565b955061438360208801614004565b94506040870135935061439860608801614054565b92506143a660808801614054565b91506143b460a0880161406b565b90509295509295509295565b600080600080600080600080600080600060c08c8e0312156143e157600080fd5b8b359a506001600160401b038060208e013511156143fe57600080fd5b61440e8e60208f01358f01613f55565b909b50995060408d013581101561442457600080fd5b6144348e60408f01358f01613f55565b909950975060608d013581101561444a57600080fd5b61445a8e60608f01358f01613f55565b909750955060808d013581101561447057600080fd5b6144808e60808f01358f01613f55565b909550935060a08d013581101561449657600080fd5b506144a78d60a08e01358e01613f55565b81935080925050509295989b509295989b9093969950565b60208082526016908201527521b0b63632b91034b9903737ba1033b7bb32b93737b960511b604082015260600190565b6020808252600f908201526e0d8cadccee8d040dad2e6dac2e8c6d608b1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156145585761455861452e565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156145a7576145a761452e565b500190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b9788526001600160a01b039687166020890152948616604088015292909416606086015260808501526001600160401b0392831660a085015290911660c083015263ffffffff1660e08201526101000190565b60208082526010908201526f185b5bdd5b9d081d1bdbc81cdb585b1b60821b604082015260600190565b60006001600160401b038083168185168083038211156146825761468261452e565b01949350505050565b60008160005b848110156146c0576001600160a01b036146aa83614004565b1686526020958601959190910190600101614691565b5093949350505050565b60006001600160fb1b038311156146e057600080fd5b8260051b8083863760009401938452509192915050565b600061470e61470783878961468b565b84866146ca565b9695505050505050565b838152818360208301376000910160200190815292915050565b868152856020820152600061474e61470760408401878961468b565b98975050505050505050565b60208082526023908201527f7369676e65727320616e6420706f77657273206c656e677468206e6f74206d616040820152620e8c6d60eb1b606082015260800190565b60008160001904831182151516156147b7576147b761452e565b500290565b6000826147d957634e487b7160e01b600052601260045260246000fd5b500490565b6000808335601e198436030181126147f557600080fd5b8301803591506001600160401b0382111561480f57600080fd5b602001915036819003821315613b1d57600080fd5b6040808252810184905260008560608301825b87811015614865576001600160a01b0361485084614004565b16825260209283019290910190600101614837565b5083810360208501528481526001600160fb1b0385111561488557600080fd5b8460051b915081866020830137600091016020019081529695505050505050565b6000602082840312156148b857600080fd5b81518015158114613ad757600080fd5b634e487b7160e01b600052602160045260246000fd5b6000828210156148f0576148f061452e565b500390565b60005b838110156149105781810151838201526020016148f8565b83811115611dbc5750506000910152565b600082516149338184602087016148f5565b9190910192915050565b602081526000825180602084015261495c8160408501602087016148f5565b601f01601f1916919091016040019291505056fea264697066735822122039b1bf809550003760acf5cb486792849d86e742d763f636b43a1a0f3589197b64736f6c63430008090033", + ), + storage: storage{ + // Pool > Signers > Ownable : address private _owner + "0x00": genesismap{ + params.OasysMainnetGenesisHash: "0x1b9dFC56e38b0F92448659C114e2347Bd803911c", + defaultGenesisHash: "0x58b529F9084D7eAA598EB3477Fe36064C5B7bbC1", + }, + // Pool > ReentrancyGuard : uint256 private _status + "0x05": "0x1", + // Pool > Pauser : mapping(address => bool) public pausers + "0x07": genesismap{ + params.OasysMainnetGenesisHash: mapping{ + keyFn: addressKeyFn, + values: map[string]interface{}{ + "0x1b9dFC56e38b0F92448659C114e2347Bd803911c": "0x1", + "0xDfE4F07D1F36B8d559b25082460a4f6A72531de2": "0x1", + "0x34dFa1226F8b3E36FE597B34eEa809a2B5c0bBf9": "0x1", + "0x9F6B03Cb6d8AB8239cF1045Ab28B9Df43dfCC823": "0x1", + "0x2FB8783C14A71C08bFC1dE8Fc3D715Dd93039BF2": "0x1", + "0x1a0aEc0fC48F1B5cc538BE74A90E340b278189e4": "0x1", + }, + }, + defaultGenesisHash: mapping{ + keyFn: addressKeyFn, + values: map[string]interface{}{ + "0x58b529F9084D7eAA598EB3477Fe36064C5B7bbC1": "0x1", + }, + }, + }, + // Pool > VolumeControl > Governor : mapping(address => bool) public governors + "0x08": genesismap{ + params.OasysMainnetGenesisHash: mapping{ + keyFn: addressKeyFn, + values: map[string]interface{}{ + "0x1b9dFC56e38b0F92448659C114e2347Bd803911c": "0x1", + "0x34dFa1226F8b3E36FE597B34eEa809a2B5c0bBf9": "0x1", + "0x9F6B03Cb6d8AB8239cF1045Ab28B9Df43dfCC823": "0x1", + "0x8e9174ed59eA4b81E70d0aE0DE13242e2329106c": "0x1", + }, + }, + defaultGenesisHash: mapping{ + keyFn: addressKeyFn, + values: map[string]interface{}{ + "0x58b529F9084D7eAA598EB3477Fe36064C5B7bbC1": "0x1", + }, + }, + }, + }, + }, + { + contract: cBridgeOriginalTokenVaultV2, + // commit: https://github.com/oasysgames/oasys-ecosystem-contract/blob/b9d43020001d9c8ae5d8a0e571726e378314ce9b/contracts/cBridge/pegged-bridge/OriginalTokenVaultV2.sol + code: mustDecodeCode( + "0x6080604052600436106102285760003560e01c80636b2c0f5511610123578063adc0d57f116100ab578063e3eece261161006f578063e3eece26146106f7578063e43581b814610727578063eecdac8814610747578063f2fde38b14610767578063f83213831461078757600080fd5b8063adc0d57f1461060a578063b1c94d9414610684578063b5f2bc471461069a578063ccf2683b146106c7578063e026049c146106e257600080fd5b80638456cb59116100f25780638456cb59146105775780638da5cb5b1461058c5780639e25fc5c146105aa5780639ff9001a146105ca578063a21a9280146105ea57600080fd5b80636b2c0f55146104f25780636ef8d66d1461051257806380f51c121461052757806382dc1ec41461055757600080fd5b8063402d267d116101b157806354eea7961161017557806354eea7961461045057806357d775f8146104705780635c975abb146104865780635ec2fa26146104a557806360216b00146104c557600080fd5b8063402d267d1461037e578063457bfa2f146103ab57806346fbf68e146103e357806347b16c6c1461040357806352532faa1461042357600080fd5b8063303b6442116101f8578063303b6442146102dc5780633c29f839146102fc5780633c4a25d0146103295780633d572107146103495780633f4ba83a1461036957600080fd5b8062a95fd71461023457806301e647251461025a57806317bdbae51461029a57806323463624146102bc57600080fd5b3661022f57005b600080fd5b61024761024236600461289e565b6107b4565b6040519081526020015b60405180910390f35b34801561026657600080fd5b5061028a6102753660046128eb565b600b6020526000908152604090205460ff1681565b6040519015158152602001610251565b3480156102a657600080fd5b506102ba6102b5366004612950565b61098e565b005b3480156102c857600080fd5b506102476102d73660046129bc565b610ad7565b3480156102e857600080fd5b506102ba6102f7366004612950565b610bb1565b34801561030857600080fd5b50610247610317366004612a1a565b600c6020526000908152604090205481565b34801561033557600080fd5b506102ba610344366004612a1a565b610cf3565b34801561035557600080fd5b506102ba6103643660046128eb565b610d38565b34801561037557600080fd5b506102ba610d99565b34801561038a57600080fd5b50610247610399366004612a1a565b600d6020526000908152604090205481565b3480156103b757600080fd5b50600e546103cb906001600160a01b031681565b6040516001600160a01b039091168152602001610251565b3480156103ef57600080fd5b5061028a6103fe366004612a1a565b610def565b34801561040f57600080fd5b506102ba61041e366004612950565b610e0d565b34801561042f57600080fd5b5061024761043e366004612a1a565b60096020526000908152604090205481565b34801561045c57600080fd5b506102ba61046b3660046128eb565b610f4f565b34801561047c57600080fd5b5061024760045481565b34801561049257600080fd5b50600154600160a01b900460ff1661028a565b3480156104b157600080fd5b506102ba6104c0366004612950565b610fa9565b3480156104d157600080fd5b506102476104e0366004612a1a565b60056020526000908152604090205481565b3480156104fe57600080fd5b506102ba61050d366004612a1a565b6110eb565b34801561051e57600080fd5b506102ba61112d565b34801561053357600080fd5b5061028a610542366004612a1a565b60026020526000908152604090205460ff1681565b34801561056357600080fd5b506102ba610572366004612a1a565b611136565b34801561058357600080fd5b506102ba611178565b34801561059857600080fd5b506001546001600160a01b03166103cb565b3480156105b657600080fd5b506102ba6105c53660046128eb565b6111cc565b3480156105d657600080fd5b506102ba6105e5366004612a1a565b6111fc565b3480156105f657600080fd5b50610247610605366004612a35565b611257565b34801561061657600080fd5b506106596106253660046128eb565b60086020526000908152604090208054600182015460028301546003909301546001600160a01b0392831693919092169184565b604080516001600160a01b039586168152949093166020850152918301526060820152608001610251565b34801561069057600080fd5b50610247600a5481565b3480156106a657600080fd5b506102476106b5366004612a1a565b60066020526000908152604090205481565b3480156106d357600080fd5b506103cb6015602960991b0181565b3480156106ee57600080fd5b506102ba611592565b34801561070357600080fd5b5061028a610712366004612a1a565b60036020526000908152604090205460ff1681565b34801561073357600080fd5b5061028a610742366004612a1a565b61159b565b34801561075357600080fd5b506102ba610762366004612a1a565b6115b9565b34801561077357600080fd5b506102ba610782366004612a1a565b6115fb565b34801561079357600080fd5b506102476107a2366004612a1a565b60076020526000908152604090205481565b60006002600054141561080e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260005561081b6116a2565b84341461085c5760405162461bcd60e51b815260206004820152600f60248201526e082dadeeadce840dad2e6dac2e8c6d608b1b6044820152606401610805565b600e546001600160a01b03166108aa5760405162461bcd60e51b815260206004820152601360248201527213985d1a5d99481ddc985c081b9bdd081cd95d606a1b6044820152606401610805565b600e546000906108c6906001600160a01b0316878787876116ef565b9050600e60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0876040518263ffffffff1660e01b81526004016000604051808303818588803b15801561091857600080fd5b505af115801561092c573d6000803e3d6000fd5b5050600e546040517f28d226819e371600e26624ebc4a9a3947117ee2760209f816c789d3a99bf481b9450610978935085925033916001600160a01b0316908b908b908b908b90612b24565b60405180910390a1600160005595945050505050565b6109973361159b565b6109b35760405162461bcd60e51b815260040161080590612b6b565b8281146109d25760405162461bcd60e51b815260040161080590612b9b565b60005b83811015610ad0578282828181106109ef576109ef612bc4565b9050602002013560096000878785818110610a0c57610a0c612bc4565b9050602002016020810190610a219190612a1a565b6001600160a01b031681526020810191909152604001600020557fceaad6533bfb481492fb3e08ef19297f46611b8fa9de5ef4cf8dc23a56ad09ce858583818110610a6e57610a6e612bc4565b9050602002016020810190610a839190612a1a565b848484818110610a9557610a95612bc4565b604080516001600160a01b0390951685526020918202939093013590840152500160405180910390a180610ac881612bf0565b9150506109d5565b5050505050565b600060026000541415610b2c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610805565b6002600055610b396116a2565b6000610b4887878787876116ef565b9050610b5f6001600160a01b0388163330896118bc565b7f28d226819e371600e26624ebc4a9a3947117ee2760209f816c789d3a99bf481b81338989898989604051610b9a9796959493929190612b24565b60405180910390a160016000559695505050505050565b610bba3361159b565b610bd65760405162461bcd60e51b815260040161080590612b6b565b828114610bf55760405162461bcd60e51b815260040161080590612b9b565b60005b83811015610ad057828282818110610c1257610c12612bc4565b90506020020135600d6000878785818110610c2f57610c2f612bc4565b9050602002016020810190610c449190612a1a565b6001600160a01b031681526020810191909152604001600020557f0e5d348f9737ccc8b4cf0eea0ccf3670af071af8bea5d64664f10e700c08de72858583818110610c9157610c91612bc4565b9050602002016020810190610ca69190612a1a565b848484818110610cb857610cb8612bc4565b604080516001600160a01b0390951685526020918202939093013590840152500160405180910390a180610ceb81612bf0565b915050610bf8565b33610d066001546001600160a01b031690565b6001600160a01b031614610d2c5760405162461bcd60e51b815260040161080590612c0b565b610d358161192d565b50565b610d413361159b565b610d5d5760405162461bcd60e51b815260040161080590612b6b565b600a8190556040518181527fc0a39f234199b125fb93713c4d067bdcebbf691087f87b79c0feb92b156ba8b6906020015b60405180910390a150565b610da233610def565b610de55760405162461bcd60e51b815260206004820152601460248201527321b0b63632b91034b9903737ba103830bab9b2b960611b6044820152606401610805565b610ded6119d7565b565b6001600160a01b031660009081526002602052604090205460ff1690565b610e163361159b565b610e325760405162461bcd60e51b815260040161080590612b6b565b828114610e515760405162461bcd60e51b815260040161080590612b9b565b60005b83811015610ad057828282818110610e6e57610e6e612bc4565b9050602002013560066000878785818110610e8b57610e8b612bc4565b9050602002016020810190610ea09190612a1a565b6001600160a01b031681526020810191909152604001600020557f608e49c22994f20b5d3496dca088b88dfd81b4a3e8cc3809ea1e10a320107e89858583818110610eed57610eed612bc4565b9050602002016020810190610f029190612a1a565b848484818110610f1457610f14612bc4565b604080516001600160a01b0390951685526020918202939093013590840152500160405180910390a180610f4781612bf0565b915050610e54565b610f583361159b565b610f745760405162461bcd60e51b815260040161080590612b6b565b60048190556040518181527f2664fec2ff76486ac58ed087310855b648b15b9d19f3de8529e95f7c46b7d6b390602001610d8e565b610fb23361159b565b610fce5760405162461bcd60e51b815260040161080590612b6b565b828114610fed5760405162461bcd60e51b815260040161080590612b9b565b60005b83811015610ad05782828281811061100a5761100a612bc4565b90506020020135600c600087878581811061102757611027612bc4565b905060200201602081019061103c9190612a1a565b6001600160a01b031681526020810191909152604001600020557f0f48d517989455cd80ed52427e80553e66f9b69fd5cee8e26bd1a1f9c364fba685858381811061108957611089612bc4565b905060200201602081019061109e9190612a1a565b8484848181106110b0576110b0612bc4565b604080516001600160a01b0390951685526020918202939093013590840152500160405180910390a1806110e381612bf0565b915050610ff0565b336110fe6001546001600160a01b031690565b6001600160a01b0316146111245760405162461bcd60e51b815260040161080590612c0b565b610d3581611a2c565b610ded33611a2c565b336111496001546001600160a01b031690565b6001600160a01b03161461116f5760405162461bcd60e51b815260040161080590612c0b565b610d3581611aca565b61118133610def565b6111c45760405162461bcd60e51b815260206004820152601460248201527321b0b63632b91034b9903737ba103830bab9b2b960611b6044820152606401610805565b610ded611b74565b6111d46116a2565b60006111df82611bb7565b90506111f8816000015182602001518360400151611d7c565b5050565b3361120f6001546001600160a01b031690565b6001600160a01b0316146112355760405162461bcd60e51b815260040161080590612c0b565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b60006112616116a2565b6000463060405160200161129d92919091825260601b6001600160601b031916602082015267576974686472617760c01b6034820152603c0190565b6040516020818303038152906040528051906020012090506015602960991b016001600160a01b031663682dbc22828c8c6040516020016112e093929190612c40565b6040516020818303038152906040528a8a8a8a8a8a6040518863ffffffff1660e01b81526004016113179796959493929190612d58565b60006040518083038186803b15801561132f57600080fd5b505afa158015611343573d6000803e3d6000fd5b5050505060006113888b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eb192505050565b6020818101518251604080850151606080870151608088015160a089015185516001600160601b031998851b8916818b015296841b88166034880152604887019490945290821b861660688601526001600160c01b031960c09190911b16607c850152608484019190915230901b90921660a48201528151808203609801815260b890910182528051908301206000818152600b9093529120549192509060ff16156114665760405162461bcd60e51b815260206004820152600d60248201526c7265636f72642065786973747360981b6044820152606401610805565b6000818152600b602052604090819020805460ff191660011790558251908301516114919190612013565b81516001600160a01b031660009081526009602052604090205480158015906114bd5750808360400151115b156114df576114da82846020015185600001518660400151612120565b6114f6565b6114f6836020015184600001518560400151611d7c565b602080840151845160408087015160808089015160a0808b01516060808d015187518d81526001600160a01b039a8b169b81019b909b52978916968a01969096529488019390935267ffffffffffffffff16908601528401521660c08201527f296a629c5265cb4e5319803d016902eb70a9079b89655fe2b7737821ed88beeb9060e00160405180910390a1509b9a5050505050505050505050565b610ded33612233565b6001600160a01b031660009081526003602052604090205460ff1690565b336115cc6001546001600160a01b031690565b6001600160a01b0316146115f25760405162461bcd60e51b815260040161080590612c0b565b610d3581612233565b3361160e6001546001600160a01b031690565b6001600160a01b0316146116345760405162461bcd60e51b815260040161080590612c0b565b6001600160a01b0381166116995760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610805565b610d35816122d9565b600154600160a01b900460ff1615610ded5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610805565b6001600160a01b0385166000908152600c602052604081205485116117495760405162461bcd60e51b815260206004820152601060248201526f185b5bdd5b9d081d1bdbc81cdb585b1b60821b6044820152606401610805565b6001600160a01b0386166000908152600d6020526040902054158061178657506001600160a01b0386166000908152600d60205260409020548511155b6117c55760405162461bcd60e51b815260206004820152601060248201526f616d6f756e7420746f6f206c6172676560801b6044820152606401610805565b6040516001600160601b031933606090811b8216602084015288811b82166034840152604883018890526001600160c01b031960c088811b8216606886015287831b8416607086015286811b8216608486015246901b16608c84015230901b16609482015260009060a80160408051601f1981840301815291815281516020928301206000818152600b90935291205490915060ff16156118985760405162461bcd60e51b815260206004820152600d60248201526c7265636f72642065786973747360981b6044820152606401610805565b6000818152600b60205260409020805460ff19166001179055905095945050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526119279085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261232b565b50505050565b6119368161159b565b156119835760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920676f7665726e6f7200000000006044820152606401610805565b6001600160a01b038116600081815260036020908152604091829020805460ff1916600117905590519182527fdc5a48d79e2e147530ff63ecdbed5a5a66adb9d5cf339384d5d076da197c40b59101610d8e565b6119df6123fd565b6001805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b611a3581610def565b611a795760405162461bcd60e51b815260206004820152601560248201527420b1b1b7bab73a1034b9903737ba103830bab9b2b960591b6044820152606401610805565b6001600160a01b038116600081815260026020908152604091829020805460ff1916905590519182527fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e9101610d8e565b611ad381610def565b15611b205760405162461bcd60e51b815260206004820152601960248201527f4163636f756e7420697320616c726561647920706175736572000000000000006044820152606401610805565b6001600160a01b038116600081815260026020908152604091829020805460ff1916600117905590519182527f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f89101610d8e565b611b7c6116a2565b6001805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a0f3390565b604080516080810182526000808252602082018190529181018290526060810191909152600082815260086020908152604091829020825160808101845281546001600160a01b0390811682526001830154169281019290925260028101549282019290925260039091015460608201819052611c765760405162461bcd60e51b815260206004820152601a60248201527f64656c61796564207472616e73666572206e6f742065786973740000000000006044820152606401610805565b600a548160600151611c889190612e38565b4211611cd65760405162461bcd60e51b815260206004820152601d60248201527f64656c61796564207472616e73666572207374696c6c206c6f636b65640000006044820152606401610805565b600083815260086020908152604080832080546001600160a01b03199081168255600182018054909116905560028101849055600301929092558251908301518383015192517f3b40e5089937425d14cdd96947e5661868357e224af59bd8b24a4b8a330d442693611d6e93889390929091909384526001600160a01b03928316602085015291166040830152606082015260800190565b60405180910390a192915050565b600e546001600160a01b0383811691161415611e9857600e54604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b158015611dd857600080fd5b505af1158015611dec573d6000803e3d6000fd5b505050506000836001600160a01b03168261c35090604051600060405180830381858888f193505050503d8060008114611e42576040519150601f19603f3d011682016040523d82523d6000602084013e611e47565b606091505b50509050806119275760405162461bcd60e51b815260206004820152601b60248201527f6661696c656420746f2073656e64206e617469766520746f6b656e00000000006044820152606401610805565b611eac6001600160a01b038316848361244d565b505050565b6040805160c08101825260008082526020808301829052828401829052606083018290526080830182905260a0830182905283518085019094528184528301849052909190805b6020830151518351101561200b57611f0f8361247d565b90925090508160011415611f3e57611f2e611f29846124b7565b612574565b6001600160a01b03168452611ef8565b8160021415611f6657611f53611f29846124b7565b6001600160a01b03166020850152611ef8565b8160031415611f8a57611f80611f7b846124b7565b612585565b6040850152611ef8565b8160041415611fb257611f9f611f29846124b7565b6001600160a01b03166060850152611ef8565b8160051415611fd857611fc4836125bc565b67ffffffffffffffff166080850152611ef8565b8160061415611ffc57611ff2611fed846124b7565b61263e565b60a0850152611ef8565b6120068382612656565b611ef8565b505050919050565b60045461201e575050565b6001600160a01b0382166000908152600660205260409020548061204157505050565b6001600160a01b0383166000908152600560205260408120546004549091429161206b8184612e50565b6120759190612e72565b6001600160a01b0387166000908152600760205260409020549091508111156120a0578492506120ad565b6120aa8584612e38565b92505b838311156120f25760405162461bcd60e51b81526020600482015260126024820152710766f6c756d652065786365656473206361760741b6044820152606401610805565b506001600160a01b039094166000908152600560209081526040808320939093556007905220929092555050565b6000848152600860205260409020600301541561217f5760405162461bcd60e51b815260206004820152601f60248201527f64656c61796564207472616e7366657220616c726561647920657869737473006044820152606401610805565b604080516080810182526001600160a01b0380861682528481166020808401918252838501868152426060860190815260008b8152600890935291869020945185549085166001600160a01b031991821617865592516001860180549190951693169290921790925551600283015551600390910155517fcbcfffe5102114216a85d3aceb14ad4b81a3935b1b5c468fadf3889eb9c5dce6906122259086815260200190565b60405180910390a150505050565b61223c8161159b565b6122885760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f7420676f7665726e6f720000000000000000006044820152606401610805565b6001600160a01b038116600081815260036020908152604091829020805460ff1916905590519182527f1ebe834e73d60a5fec822c1e1727d34bc79f2ad977ed504581cc1822fe20fb5b9101610d8e565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000612380826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166126c89092919063ffffffff16565b805190915015611eac578080602001905181019061239e9190612e91565b611eac5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610805565b600154600160a01b900460ff16610ded5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610805565b6040516001600160a01b038316602482015260448101829052611eac90849063a9059cbb60e01b906064016118f0565b600080600061248b846125bc565b9050612498600882612e50565b92508060071660058111156124af576124af612eb3565b915050915091565b606060006124c4836125bc565b905060008184600001516124d89190612e38565b90508360200151518111156124ec57600080fd5b8167ffffffffffffffff81111561250557612505612ec9565b6040519080825280601f01601f19166020018201604052801561252f576020820181803683370190505b50602080860151865192955091818601919083010160005b85811015612569578181015183820152612562602082612e38565b9050612547565b505050935250919050565b600061257f826126e1565b92915050565b600060208251111561259657600080fd5b60208201519050815160206125ab9190612edf565b6125b6906008612e72565b1c919050565b602080820151825181019091015160009182805b600a8110156126385783811a91506125e9816007612e72565b82607f16901b8517945081608016600014156126265761260a816001612e38565b86518790612619908390612e38565b9052509395945050505050565b8061263081612bf0565b9150506125d0565b50600080fd5b6000815160201461264e57600080fd5b506020015190565b600081600581111561266a5761266a612eb3565b141561267957611eac826125bc565b600281600581111561268d5761268d612eb3565b141561022f57600061269e836125bc565b905080836000018181516126b29190612e38565b90525060208301515183511115611eac57600080fd5b60606126d78484600085612700565b90505b9392505050565b600081516014146126f157600080fd5b5060200151600160601b900490565b6060824710156127615760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610805565b6001600160a01b0385163b6127b85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610805565b600080866001600160a01b031685876040516127d49190612ef6565b60006040518083038185875af1925050503d8060008114612811576040519150601f19603f3d011682016040523d82523d6000602084013e612816565b606091505b5091509150612826828286612831565b979650505050505050565b606083156128405750816126da565b8251156128505782518084602001fd5b8160405162461bcd60e51b81526004016108059190612f12565b803567ffffffffffffffff8116811461288257600080fd5b919050565b80356001600160a01b038116811461288257600080fd5b600080600080608085870312156128b457600080fd5b843593506128c46020860161286a565b92506128d260408601612887565b91506128e06060860161286a565b905092959194509250565b6000602082840312156128fd57600080fd5b5035919050565b60008083601f84011261291657600080fd5b50813567ffffffffffffffff81111561292e57600080fd5b6020830191508360208260051b850101111561294957600080fd5b9250929050565b6000806000806040858703121561296657600080fd5b843567ffffffffffffffff8082111561297e57600080fd5b61298a88838901612904565b909650945060208701359150808211156129a357600080fd5b506129b087828801612904565b95989497509550505050565b600080600080600060a086880312156129d457600080fd5b6129dd86612887565b9450602086013593506129f26040870161286a565b9250612a0060608701612887565b9150612a0e6080870161286a565b90509295509295909350565b600060208284031215612a2c57600080fd5b6126da82612887565b6000806000806000806000806080898b031215612a5157600080fd5b883567ffffffffffffffff80821115612a6957600080fd5b818b0191508b601f830112612a7d57600080fd5b813581811115612a8c57600080fd5b8c6020828501011115612a9e57600080fd5b60209283019a509850908a01359080821115612ab957600080fd5b612ac58c838d01612904565b909850965060408b0135915080821115612ade57600080fd5b612aea8c838d01612904565b909650945060608b0135915080821115612b0357600080fd5b50612b108b828c01612904565b999c989b5096995094979396929594505050565b9687526001600160a01b0395861660208801529385166040870152606086019290925267ffffffffffffffff9081166080860152921660a08401521660c082015260e00190565b60208082526016908201527521b0b63632b91034b9903737ba1033b7bb32b93737b960511b604082015260600190565b6020808252600f908201526e0d8cadccee8d040dad2e6dac2e8c6d608b1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415612c0457612c04612bda565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b838152818360208301376000910160200190815292915050565b60005b83811015612c75578181015183820152602001612c5d565b838111156119275750506000910152565b60008151808452612c9e816020860160208601612c5a565b601f01601f19169290920160200192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8183526000602080850194508260005b85811015612d17576001600160a01b03612d0483612887565b1687529582019590820190600101612ceb565b509495945050505050565b81835260006001600160fb1b03831115612d3b57600080fd5b8260051b8083602087013760009401602001938452509192915050565b608081526000612d6b608083018a612c86565b82810360208401528088825260208201905060208960051b8301018a60005b8b811015612dfe57848303601f190184528135368e9003601e19018112612db057600080fd5b8d01803567ffffffffffffffff811115612dc957600080fd5b8036038f1315612dd857600080fd5b612de6858260208501612cb2565b60209687019690955093909301925050600101612d8a565b50508481036040860152612e1381898b612cdb565b925050508281036060840152612e2a818587612d22565b9a9950505050505050505050565b60008219821115612e4b57612e4b612bda565b500190565b600082612e6d57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612e8c57612e8c612bda565b500290565b600060208284031215612ea357600080fd5b815180151581146126da57600080fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600082821015612ef157612ef1612bda565b500390565b60008251612f08818460208701612c5a565b9190910192915050565b6020815260006126da6020830184612c8656fea2646970667358221220047b131bf301e8fc1ffeef548dc7c60ff9971acd709931d12ae9db5a0f34a54d64736f6c63430008090033", + ), + storage: storage{ + // ReentrancyGuard : uint256 private _status + "0x00": "0x1", + // Pauser > Ownable : address private _owner + // Pauser > Pausable : bool private _paused + "0x01": genesismap{ + params.OasysMainnetGenesisHash: "0x0000000000000000000000001b9dFC56e38b0F92448659C114e2347Bd803911c", + defaultGenesisHash: "0x00000000000000000000000058b529F9084D7eAA598EB3477Fe36064C5B7bbC1", + }, + // Pauser : mapping(address => bool) public pausers + "0x02": genesismap{ + params.OasysMainnetGenesisHash: mapping{ + keyFn: addressKeyFn, + values: map[string]interface{}{ + "0x1b9dFC56e38b0F92448659C114e2347Bd803911c": "0x1", + "0xDfE4F07D1F36B8d559b25082460a4f6A72531de2": "0x1", + "0x34dFa1226F8b3E36FE597B34eEa809a2B5c0bBf9": "0x1", + "0x9F6B03Cb6d8AB8239cF1045Ab28B9Df43dfCC823": "0x1", + "0x2FB8783C14A71C08bFC1dE8Fc3D715Dd93039BF2": "0x1", + "0x1a0aEc0fC48F1B5cc538BE74A90E340b278189e4": "0x1", + }, + }, + defaultGenesisHash: mapping{ + keyFn: addressKeyFn, + values: map[string]interface{}{ + "0x58b529F9084D7eAA598EB3477Fe36064C5B7bbC1": "0x1", + }, + }, + }, + // VolumeControl > Governor : mapping(address => bool) public governors + "0x03": genesismap{ + params.OasysMainnetGenesisHash: mapping{ + keyFn: addressKeyFn, + values: map[string]interface{}{ + "0x1b9dFC56e38b0F92448659C114e2347Bd803911c": "0x1", + "0x34dFa1226F8b3E36FE597B34eEa809a2B5c0bBf9": "0x1", + "0x9F6B03Cb6d8AB8239cF1045Ab28B9Df43dfCC823": "0x1", + "0x8e9174ed59eA4b81E70d0aE0DE13242e2329106c": "0x1", + }, + }, + defaultGenesisHash: mapping{ + keyFn: addressKeyFn, + values: map[string]interface{}{ + "0x58b529F9084D7eAA598EB3477Fe36064C5B7bbC1": "0x1", + }, + }, + }, + }, + }, + { + contract: cBridgePeggedTokenBridgeV2, + // commit: https://github.com/oasysgames/oasys-ecosystem-contract/blob/b9d43020001d9c8ae5d8a0e571726e378314ce9b/contracts/cBridge/pegged-bridge/PeggedTokenBridgeV2.sol + code: mustDecodeCode( + "0x608060405234801561001057600080fd5b50600436106102485760003560e01c806382dc1ec41161013b578063bf4816f0116100b8578063eecdac881161007c578063eecdac88146105af578063f2fde38b146105c2578063f8321383146105d5578063f8734302146105f5578063f9a8ea081461060857600080fd5b8063bf4816f014610550578063ccf2683b14610563578063e026049c14610571578063e3eece2614610579578063e43581b81461059c57600080fd5b8063a0029301116100ff578063a002930114610494578063adc0d57f146104a7578063b1c94d9414610514578063b4d8cedc1461051d578063b5f2bc471461053057600080fd5b806382dc1ec41461042e5780638456cb59146104415780638da5cb5b146104495780639e25fc5c1461046e5780639e422c331461048157600080fd5b806352532faa116101c95780636b2c0f551161018d5780636b2c0f55146103bd5780636ef8d66d146103d057806379fcd8ee146103d85780637f856013146103eb57806380f51c121461040b57600080fd5b806352532faa1461034f57806354eea7961461036f57806357d775f8146103825780635c975abb1461038b57806360216b001461039d57600080fd5b80633d572107116102105780633d572107146102ee5780633f4ba83a1461030157806346fbf68e1461030957806347b16c6c1461031c578063497bf3b21461032f57600080fd5b806301e647251461024d57806315d0975c1461028557806317bdbae51461029a578063274cee31146102ad5780633c4a25d0146102db575b600080fd5b61027061025b366004612374565b600a6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6102986102933660046123a9565b61061b565b005b6102986102a836600461241f565b6106e1565b6102cd6102bb36600461248b565b600b6020526000908152604090205481565b60405190815260200161027c565b6102986102e936600461248b565b61081e565b6102986102fc366004612374565b610863565b6102986108c4565b61027061031736600461248b565b61091a565b61029861032a36600461241f565b610938565b6102cd61033d36600461248b565b600d6020526000908152604090205481565b6102cd61035d36600461248b565b60086020526000908152604090205481565b61029861037d366004612374565b610a6e565b6102cd60035481565b600054600160a01b900460ff16610270565b6102cd6103ab36600461248b565b60046020526000908152604090205481565b6102986103cb36600461248b565b610ac8565b610298610b0a565b6102986103e63660046123a9565b610b13565b6102cd6103f936600461248b565b600c6020526000908152604090205481565b61027061041936600461248b565b60016020526000908152604090205460ff1681565b61029861043c36600461248b565b610b74565b610298610bb6565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161027c565b61029861047c366004612374565b610c0a565b6102cd61048f3660046124c5565b610c8e565b6102cd6104a23660046124c5565b610d15565b6104e96104b5366004612374565b60076020526000908152604090208054600182015460028301546003909301546001600160a01b0392831693919092169184565b604080516001600160a01b03958616815294909316602085015291830152606082015260800161027c565b6102cd60095481565b61029861052b3660046123a9565b610d5f565b6102cd61053e36600461248b565b60056020526000908152604090205481565b61029861055e36600461241f565b610de5565b6104566015602960991b0181565b610298610f1b565b61027061058736600461248b565b60026020526000908152604090205460ff1681565b6102706105aa36600461248b565b610f24565b6102986105bd36600461248b565b610f42565b6102986105d036600461248b565b610f84565b6102cd6105e336600461248b565b60066020526000908152604090205481565b6102cd610603366004612523565b61102b565b61029861061636600461241f565b6113fa565b3361062e6000546001600160a01b031690565b6001600160a01b03161461065d5760405162461bcd60e51b815260040161065490612612565b60405180910390fd5b6001600160a01b0382166000908152600b60205260408120805483929061068590849061265d565b90915550506001600160a01b0382166000908152600b6020526040908190205490517feb2f7272b55acd6dea98f5742868e8d2221ad82acb36b2d0cdd00150290e9499916106d591859190612674565b60405180910390a15050565b6106ea33610f24565b6107065760405162461bcd60e51b81526004016106549061268d565b8281146107255760405162461bcd60e51b8152600401610654906126bd565b60005b8381101561081757828282818110610742576107426126e6565b905060200201356008600087878581811061075f5761075f6126e6565b9050602002016020810190610774919061248b565b6001600160a01b031681526020810191909152604001600020557fceaad6533bfb481492fb3e08ef19297f46611b8fa9de5ef4cf8dc23a56ad09ce8585838181106107c1576107c16126e6565b90506020020160208101906107d6919061248b565b8484848181106107e8576107e86126e6565b905060200201356040516107fd929190612674565b60405180910390a18061080f816126fc565b915050610728565b5050505050565b336108316000546001600160a01b031690565b6001600160a01b0316146108575760405162461bcd60e51b815260040161065490612612565b61086081611530565b50565b61086c33610f24565b6108885760405162461bcd60e51b81526004016106549061268d565b60098190556040518181527fc0a39f234199b125fb93713c4d067bdcebbf691087f87b79c0feb92b156ba8b6906020015b60405180910390a150565b6108cd3361091a565b6109105760405162461bcd60e51b815260206004820152601460248201527321b0b63632b91034b9903737ba103830bab9b2b960611b6044820152606401610654565b6109186115da565b565b6001600160a01b031660009081526001602052604090205460ff1690565b61094133610f24565b61095d5760405162461bcd60e51b81526004016106549061268d565b82811461097c5760405162461bcd60e51b8152600401610654906126bd565b60005b8381101561081757828282818110610999576109996126e6565b90506020020135600560008787858181106109b6576109b66126e6565b90506020020160208101906109cb919061248b565b6001600160a01b031681526020810191909152604001600020557f608e49c22994f20b5d3496dca088b88dfd81b4a3e8cc3809ea1e10a320107e89858583818110610a1857610a186126e6565b9050602002016020810190610a2d919061248b565b848484818110610a3f57610a3f6126e6565b90506020020135604051610a54929190612674565b60405180910390a180610a66816126fc565b91505061097f565b610a7733610f24565b610a935760405162461bcd60e51b81526004016106549061268d565b60038190556040518181527f2664fec2ff76486ac58ed087310855b648b15b9d19f3de8529e95f7c46b7d6b3906020016108b9565b33610adb6000546001600160a01b031690565b6001600160a01b031614610b015760405162461bcd60e51b815260040161065490612612565b6108608161162f565b6109183361162f565b33610b266000546001600160a01b031690565b6001600160a01b031614610b4c5760405162461bcd60e51b815260040161065490612612565b6001600160a01b0382166000908152600b602052604081208054839290610685908490612717565b33610b876000546001600160a01b031690565b6001600160a01b031614610bad5760405162461bcd60e51b815260040161065490612612565b610860816116cd565b610bbf3361091a565b610c025760405162461bcd60e51b815260206004820152601460248201527321b0b63632b91034b9903737ba103830bab9b2b960611b6044820152606401610654565b610918611778565b610c126117bb565b6000610c1d82611808565b6020810151815160408084015190516340c10f1960e01b81529394506001600160a01b03909216926340c10f1992610c589291600401612674565b600060405180830381600087803b158015610c7257600080fd5b505af1158015610c86573d6000803e3d6000fd5b505050505050565b6000610c986117bb565b6000610ca787878787876119cd565b60405163079cc67960e41b81529091506001600160a01b038816906379cc679090610cd89033908a90600401612674565b600060405180830381600087803b158015610cf257600080fd5b505af1158015610d06573d6000803e3d6000fd5b50929998505050505050505050565b6000610d1f6117bb565b6000610d2e87878787876119cd565b604051632770a7eb60e21b81529091506001600160a01b03881690639dc29fac90610cd89033908a90600401612674565b33610d726000546001600160a01b031690565b6001600160a01b031614610d985760405162461bcd60e51b815260040161065490612612565b6001600160a01b0382166000908152600b602052604090819020829055517feb2f7272b55acd6dea98f5742868e8d2221ad82acb36b2d0cdd00150290e9499906106d59084908490612674565b610dee33610f24565b610e0a5760405162461bcd60e51b81526004016106549061268d565b828114610e295760405162461bcd60e51b8152600401610654906126bd565b60005b8381101561081757828282818110610e4657610e466126e6565b90506020020135600c6000878785818110610e6357610e636126e6565b9050602002016020810190610e78919061248b565b6001600160a01b031681526020810191909152604001600020557f3796cd0b17a8734f8da819920625598e9a18be490f686725282e5383f1d06683858583818110610ec557610ec56126e6565b9050602002016020810190610eda919061248b565b848484818110610eec57610eec6126e6565b90506020020135604051610f01929190612674565b60405180910390a180610f13816126fc565b915050610e2c565b61091833611c3d565b6001600160a01b031660009081526002602052604090205460ff1690565b33610f556000546001600160a01b031690565b6001600160a01b031614610f7b5760405162461bcd60e51b815260040161065490612612565b61086081611c3d565b33610f976000546001600160a01b031690565b6001600160a01b031614610fbd5760405162461bcd60e51b815260040161065490612612565b6001600160a01b0381166110225760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610654565b61086081611ce3565b60006110356117bb565b6000463060405160200161106d92919091825260601b6001600160601b031916602082015263135a5b9d60e21b603482015260380190565b6040516020818303038152906040528051906020012090506015602960991b016001600160a01b031663682dbc22828c8c6040516020016110b09392919061272f565b6040516020818303038152906040528a8a8a8a8a8a6040518863ffffffff1660e01b81526004016110e79796959493929190612884565b60006040518083038186803b1580156110ff57600080fd5b505afa158015611113573d6000803e3d6000fd5b5050505060006111588b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d3392505050565b6020818101518251604080850151606080870151608088015160a089015185516001600160601b031998851b8916818b015296841b88166034880152604887019490945290821b861660688601526001600160c01b031960c09190911b16607c850152608484019190915230901b90921660a48201528151808203609801815260b890910182528051908301206000818152600a9093529120549192509060ff16156112365760405162461bcd60e51b815260206004820152600d60248201526c7265636f72642065786973747360981b6044820152606401610654565b6000818152600a602052604090819020805460ff191660011790558251908301516112619190611e95565b81516001600160a01b0316600090815260086020526040902054801580159061128d5750808360400151115b156112af576112aa82846020015185600001518660400151611fa2565b61131b565b8251602084015160408086015190516340c10f1960e01b81526001600160a01b03909316926340c10f19926112e8929091600401612674565b600060405180830381600087803b15801561130257600080fd5b505af1158015611316573d6000803e3d6000fd5b505050505b60408084015184516001600160a01b03166000908152600b60205291822080549192909161134a908490612717565b925050819055507f5bc84ecccfced5bb04bfc7f3efcdbe7f5cd21949ef146811b4d1967fe41f777a8284600001518560200151866040015187608001518860a0015189606001516040516113e297969594939291909687526001600160a01b0395861660208801529385166040870152606086019290925267ffffffffffffffff16608085015260a08401521660c082015260e00190565b60405180910390a1509b9a5050505050505050505050565b61140333610f24565b61141f5760405162461bcd60e51b81526004016106549061268d565b82811461143e5760405162461bcd60e51b8152600401610654906126bd565b60005b838110156108175782828281811061145b5761145b6126e6565b90506020020135600d6000878785818110611478576114786126e6565b905060200201602081019061148d919061248b565b6001600160a01b031681526020810191909152604001600020557fa3181379f6db47d9037efc6b6e8e3efe8c55ddb090b4f0512c152f97c4e47da58585838181106114da576114da6126e6565b90506020020160208101906114ef919061248b565b848484818110611501576115016126e6565b90506020020135604051611516929190612674565b60405180910390a180611528816126fc565b915050611441565b61153981610f24565b156115865760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920676f7665726e6f7200000000006044820152606401610654565b6001600160a01b038116600081815260026020908152604091829020805460ff1916600117905590519182527fdc5a48d79e2e147530ff63ecdbed5a5a66adb9d5cf339384d5d076da197c40b591016108b9565b6115e26120b5565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6116388161091a565b61167c5760405162461bcd60e51b815260206004820152601560248201527420b1b1b7bab73a1034b9903737ba103830bab9b2b960591b6044820152606401610654565b6001600160a01b038116600081815260016020908152604091829020805460ff1916905590519182527fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e91016108b9565b6116d68161091a565b156117235760405162461bcd60e51b815260206004820152601960248201527f4163636f756e7420697320616c726561647920706175736572000000000000006044820152606401610654565b6001600160a01b038116600081815260016020818152604092839020805460ff191690921790915590519182527f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f891016108b9565b6117806117bb565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116123390565b600054600160a01b900460ff16156109185760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610654565b604080516080810182526000808252602082018190529181018290526060810191909152600082815260076020908152604091829020825160808101845281546001600160a01b03908116825260018301541692810192909252600281015492820192909252600390910154606082018190526118c75760405162461bcd60e51b815260206004820152601a60248201527f64656c61796564207472616e73666572206e6f742065786973740000000000006044820152606401610654565b60095481606001516118d99190612717565b42116119275760405162461bcd60e51b815260206004820152601d60248201527f64656c61796564207472616e73666572207374696c6c206c6f636b65640000006044820152606401610654565b600083815260076020908152604080832080546001600160a01b03199081168255600182018054909116905560028101849055600301929092558251908301518383015192517f3b40e5089937425d14cdd96947e5661868357e224af59bd8b24a4b8a330d4426936119bf93889390929091909384526001600160a01b03928316602085015291166040830152606082015260800190565b60405180910390a192915050565b6001600160a01b0385166000908152600c60205260408120548511611a275760405162461bcd60e51b815260206004820152601060248201526f185b5bdd5b9d081d1bdbc81cdb585b1b60821b6044820152606401610654565b6001600160a01b0386166000908152600d60205260409020541580611a6457506001600160a01b0386166000908152600d60205260409020548511155b611aa35760405162461bcd60e51b815260206004820152601060248201526f616d6f756e7420746f6f206c6172676560801b6044820152606401610654565b6001600160a01b0386166000908152600b602052604081208054879290611acb90849061265d565b90915550506040516001600160601b031933606090811b8216602084015288811b82166034840152604883018890526001600160c01b031960c088811b8216606886015287831b8416607086015286811b8216608486015246901b16608c84015230901b16609482015260009060a80160408051601f1981840301815291815281516020928301206000818152600a90935291205490915060ff1615611ba35760405162461bcd60e51b815260206004820152600d60248201526c7265636f72642065786973747360981b6044820152606401610654565b6000818152600a6020908152604091829020805460ff1916600117905581518381526001600160a01b038a81169282019290925233928101929092526060820188905267ffffffffffffffff878116608084015290861660a0830152841660c08201527f6298d7b58f235730b3b399dc5c282f15dae8b022e5fbbf89cee21fd83c8810a39060e00160405180910390a19695505050505050565b611c4681610f24565b611c925760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f7420676f7665726e6f720000000000000000006044820152606401610654565b6001600160a01b038116600081815260026020908152604091829020805460ff1916905590519182527f1ebe834e73d60a5fec822c1e1727d34bc79f2ad977ed504581cc1822fe20fb5b91016108b9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805160c08101825260008082526020808301829052828401829052606083018290526080830182905260a0830182905283518085019094528184528301849052909190805b60208301515183511015611e8d57611d9183612105565b90925090508160011415611dc057611db0611dab8461213f565b6121fc565b6001600160a01b03168452611d7a565b8160021415611de857611dd5611dab8461213f565b6001600160a01b03166020850152611d7a565b8160031415611e0c57611e02611dfd8461213f565b61220d565b6040850152611d7a565b8160041415611e3457611e21611dab8461213f565b6001600160a01b03166060850152611d7a565b8160051415611e5a57611e4683612244565b67ffffffffffffffff166080850152611d7a565b8160061415611e7e57611e74611e6f8461213f565b6122c6565b60a0850152611d7a565b611e8883826122de565b611d7a565b505050919050565b600354611ea0575050565b6001600160a01b03821660009081526005602052604090205480611ec357505050565b6001600160a01b03831660009081526004602052604081205460035490914291611eed8184612920565b611ef79190612942565b6001600160a01b038716600090815260066020526040902054909150811115611f2257849250611f2f565b611f2c8584612717565b92505b83831115611f745760405162461bcd60e51b81526020600482015260126024820152710766f6c756d652065786365656473206361760741b6044820152606401610654565b506001600160a01b039094166000908152600460209081526040808320939093556006905220929092555050565b600084815260076020526040902060030154156120015760405162461bcd60e51b815260206004820152601f60248201527f64656c61796564207472616e7366657220616c726561647920657869737473006044820152606401610654565b604080516080810182526001600160a01b0380861682528481166020808401918252838501868152426060860190815260008b8152600790935291869020945185549085166001600160a01b031991821617865592516001860180549190951693169290921790925551600283015551600390910155517fcbcfffe5102114216a85d3aceb14ad4b81a3935b1b5c468fadf3889eb9c5dce6906120a79086815260200190565b60405180910390a150505050565b600054600160a01b900460ff166109185760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610654565b600080600061211384612244565b9050612120600882612920565b925080600716600581111561213757612137612961565b915050915091565b6060600061214c83612244565b905060008184600001516121609190612717565b905083602001515181111561217457600080fd5b8167ffffffffffffffff81111561218d5761218d612977565b6040519080825280601f01601f1916602001820160405280156121b7576020820181803683370190505b50602080860151865192955091818601919083010160005b858110156121f15781810151838201526121ea602082612717565b90506121cf565b505050935250919050565b600061220782612355565b92915050565b600060208251111561221e57600080fd5b6020820151905081516020612233919061265d565b61223e906008612942565b1c919050565b602080820151825181019091015160009182805b600a8110156122c05783811a9150612271816007612942565b82607f16901b8517945081608016600014156122ae57612292816001612717565b865187906122a1908390612717565b9052509395945050505050565b806122b8816126fc565b915050612258565b50600080fd5b600081516020146122d657600080fd5b506020015190565b60008160058111156122f2576122f2612961565b14156123065761230182612244565b505050565b600281600581111561231a5761231a612961565b141561024857600061232b83612244565b9050808360000181815161233f9190612717565b9052506020830151518351111561230157600080fd5b6000815160141461236557600080fd5b5060200151600160601b900490565b60006020828403121561238657600080fd5b5035919050565b80356001600160a01b03811681146123a457600080fd5b919050565b600080604083850312156123bc57600080fd5b6123c58361238d565b946020939093013593505050565b60008083601f8401126123e557600080fd5b50813567ffffffffffffffff8111156123fd57600080fd5b6020830191508360208260051b850101111561241857600080fd5b9250929050565b6000806000806040858703121561243557600080fd5b843567ffffffffffffffff8082111561244d57600080fd5b612459888389016123d3565b9096509450602087013591508082111561247257600080fd5b5061247f878288016123d3565b95989497509550505050565b60006020828403121561249d57600080fd5b6124a68261238d565b9392505050565b803567ffffffffffffffff811681146123a457600080fd5b600080600080600060a086880312156124dd57600080fd5b6124e68661238d565b9450602086013593506124fb604087016124ad565b92506125096060870161238d565b9150612517608087016124ad565b90509295509295909350565b6000806000806000806000806080898b03121561253f57600080fd5b883567ffffffffffffffff8082111561255757600080fd5b818b0191508b601f83011261256b57600080fd5b81358181111561257a57600080fd5b8c602082850101111561258c57600080fd5b60209283019a509850908a013590808211156125a757600080fd5b6125b38c838d016123d3565b909850965060408b01359150808211156125cc57600080fd5b6125d88c838d016123d3565b909650945060608b01359150808211156125f157600080fd5b506125fe8b828c016123d3565b999c989b5096995094979396929594505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008282101561266f5761266f612647565b500390565b6001600160a01b03929092168252602082015260400190565b60208082526016908201527521b0b63632b91034b9903737ba1033b7bb32b93737b960511b604082015260600190565b6020808252600f908201526e0d8cadccee8d040dad2e6dac2e8c6d608b1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060001982141561271057612710612647565b5060010190565b6000821982111561272a5761272a612647565b500190565b838152818360208301376000910160200190815292915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008383855260208086019550808560051b8301018460005b878110156127fa57848303601f19018952813536889003601e190181126127b157600080fd5b8701803567ffffffffffffffff8111156127ca57600080fd5b8036038913156127d957600080fd5b6127e68582888501612749565b9a86019a945050509083019060010161278b565b5090979650505050505050565b8183526000602080850194508260005b85811015612843576001600160a01b036128308361238d565b1687529582019590820190600101612817565b509495945050505050565b81835260006001600160fb1b0383111561286757600080fd5b8260051b8083602087013760009401602001938452509192915050565b608081526000885180608084015260005b818110156128b2576020818c0181015160a0868401015201612895565b818111156128c457600060a083860101525b50601f01601f1916820182810360a090810160208501526128e8908201898b612772565b905082810360408401526128fd818789612807565b9050828103606084015261291281858761284e565b9a9950505050505050505050565b60008261293d57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561295c5761295c612647565b500290565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220157bc23bb40f3223871d6fe78d9253a69341e2d15d82656cbee6ecd06c0296eb64736f6c63430008090033", + ), + storage: storage{ + // Pauser > Ownable : address private _owner + // Pauser > Pausable : bool private _paused + "0x00": genesismap{ + params.OasysMainnetGenesisHash: "0x0000000000000000000000001b9dFC56e38b0F92448659C114e2347Bd803911c", + defaultGenesisHash: "0x00000000000000000000000058b529F9084D7eAA598EB3477Fe36064C5B7bbC1", + }, + // Pauser : mapping(address => bool) public pausers + "0x01": genesismap{ + params.OasysMainnetGenesisHash: mapping{ + keyFn: addressKeyFn, + values: map[string]interface{}{ + "0x1b9dFC56e38b0F92448659C114e2347Bd803911c": "0x1", + "0xDfE4F07D1F36B8d559b25082460a4f6A72531de2": "0x1", + "0x34dFa1226F8b3E36FE597B34eEa809a2B5c0bBf9": "0x1", + "0x9F6B03Cb6d8AB8239cF1045Ab28B9Df43dfCC823": "0x1", + "0x2FB8783C14A71C08bFC1dE8Fc3D715Dd93039BF2": "0x1", + "0x1a0aEc0fC48F1B5cc538BE74A90E340b278189e4": "0x1", + }, + }, + defaultGenesisHash: mapping{ + keyFn: addressKeyFn, + values: map[string]interface{}{ + "0x58b529F9084D7eAA598EB3477Fe36064C5B7bbC1": "0x1", + }, + }, + }, + // VolumeControl > Governor : mapping(address => bool) public governors + "0x02": genesismap{ + params.OasysMainnetGenesisHash: mapping{ + keyFn: addressKeyFn, + values: map[string]interface{}{ + "0x1b9dFC56e38b0F92448659C114e2347Bd803911c": "0x1", + "0x34dFa1226F8b3E36FE597B34eEa809a2B5c0bBf9": "0x1", + "0x9F6B03Cb6d8AB8239cF1045Ab28B9Df43dfCC823": "0x1", + "0x8e9174ed59eA4b81E70d0aE0DE13242e2329106c": "0x1", + }, + }, + defaultGenesisHash: mapping{ + keyFn: addressKeyFn, + values: map[string]interface{}{ + "0x58b529F9084D7eAA598EB3477Fe36064C5B7bbC1": "0x1", + }, + }, + }, + }, + }, + { + contract: tealswapFactory, + // commit: https://github.com/oasysgames/oasys-ecosystem-contract/blob/b9d43020001d9c8ae5d8a0e571726e378314ce9b/contracts/Tealswap/core/TealswapFactory.sol + code: mustDecodeCode( + "0x60806040523480156200001157600080fd5b5060043610620000b75760003560e01c8063590308a5116200007a578063590308a514620001435780636fc4e0e7146200015a578063a2e74af61462000171578063c9c653961462000188578063e6a43905146200019f578063f46901ed14620001d657600080fd5b8063017e7e5814620000bc578063094b741514620000ed5780631e3dd18b14620001015780633c4a37401462000118578063574f2ba31462000131575b600080fd5b600054620000d0906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b600154620000d0906001600160a01b031681565b620000d062000112366004620007b9565b620001ed565b6200012f62000129366004620007f0565b62000218565b005b600354604051908152602001620000e4565b6200012f62000154366004620007f0565b620002c9565b6200012f6200016b36600462000828565b62000354565b6200012f620001823660046200086f565b6200040a565b620000d062000199366004620007f0565b62000459565b620000d0620001b0366004620007f0565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6200012f620001e73660046200086f565b6200075c565b60038181548110620001fe57600080fd5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b031633146200024e5760405162461bcd60e51b8152600401620002459062000894565b60405180910390fd5b6001600160a01b0380831660009081526002602090815260408083208585168452909152808220548151631fa5d41d60e11b81529151931692633f4ba83a9260048084019391929182900301818387803b158015620002ac57600080fd5b505af1158015620002c1573d6000803e3d6000fd5b505050505050565b6001546001600160a01b03163314620002f65760405162461bcd60e51b8152600401620002459062000894565b6001600160a01b0380831660009081526002602090815260408083208585168452909152808220548151638456cb5960e01b81529151931692638456cb599260048084019391929182900301818387803b158015620002ac57600080fd5b6001546001600160a01b03163314620003815760405162461bcd60e51b8152600401620002459062000894565b6001600160a01b03848116600090815260026020908152604080832087851684529091529081902054905163e3ca2d6560e01b8152600481018590526024810184905291169063e3ca2d6590604401600060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b5050505050505050565b6001546001600160a01b03163314620004375760405162461bcd60e51b8152600401620002459062000894565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b03161415620004bf5760405162461bcd60e51b815260206004820152601d60248201527f5465616c737761703a204944454e544943414c5f414444524553534553000000604482015260640162000245565b600080836001600160a01b0316856001600160a01b031610620004e4578385620004e7565b84845b90925090506001600160a01b0382166200053d5760405162461bcd60e51b81526020600482015260166024820152755465616c737761703a205a45524f5f4144445245535360501b604482015260640162000245565b6001600160a01b03828116600090815260026020908152604080832085851684529091529020541615620005ac5760405162461bcd60e51b81526020600482015260156024820152745465616c737761703a20504149525f45584953545360581b604482015260640162000245565b600060405180602001620005c090620007ab565b601f1982820381018352601f9091011660408190526bffffffffffffffffffffffff19606086811b8216602084015285901b166034820152909150600090604801604051602081830303815290604052805190602001209050808251602084016000f560405163485cc95560e01b81526001600160a01b03868116600483015285811660248301529196509086169063485cc95590604401600060405180830381600087803b1580156200067357600080fd5b505af115801562000688573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526002602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9095018054909716841790965592548351928352908201527f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9910160405180910390a35050505092915050565b6001546001600160a01b03163314620007895760405162461bcd60e51b8152600401620002459062000894565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b612e3880620008c283390190565b600060208284031215620007cc57600080fd5b5035919050565b80356001600160a01b0381168114620007eb57600080fd5b919050565b600080604083850312156200080457600080fd5b6200080f83620007d3565b91506200081f60208401620007d3565b90509250929050565b600080600080608085870312156200083f57600080fd5b6200084a85620007d3565b93506200085a60208601620007d3565b93969395505050506040820135916060013590565b6000602082840312156200088257600080fd5b6200088d82620007d3565b9392505050565b6020808252601390820152722a32b0b639bbb0b81d102327a92124a22222a760691b60408201526060019056fe60c0604052601060808190526f2628102a27a5a2a72096aa27a5a2a72160811b60a09081526200003391600091906200011e565b506001600d553480156200004657600080fd5b50620000516200006d565b600680546001600160a81b0319166101003302179055620002a5565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516200009f919062000201565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160408051601f198184030181529190528051602090910120600455565b8280546200012c90620001c4565b90600052602060002090601f0160209004810192826200015057600085556200019b565b82601f106200016b57805160ff19168380011785556200019b565b828001600101855582156200019b579182015b828111156200019b5782518255916020019190600101906200017e565b50620001a9929150620001ad565b5090565b5b80821115620001a95760008155600101620001ae565b600181811c90821680620001d957607f821691505b60208210811415620001fb57634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c9150808316806200021e57607f831692505b60208084108214156200023f57634e487b7160e01b86526022600452602486fd5b818015620002565760018114620002685762000297565b60ff1986168952848901965062000297565b60008a81526020902060005b868110156200028f5781548b82015290850190830162000274565b505084890196505b509498975050505050505050565b612b8380620002b56000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80636a6278421161011a578063ba9a7a56116100ad578063d505accf1161007c578063d505accf14610489578063dd62ed3e1461049c578063e3ca2d65146104c7578063fd615558146104da578063fff6cae9146104e357600080fd5b8063ba9a7a5614610442578063bc25cf771461044b578063c45a01551461045e578063d21220a71461047657600080fd5b80638456cb59116100e95780638456cb59146103d957806389afcb44146103e157806395d89b4114610409578063a9059cbb1461042f57600080fd5b80636a6278421461037d57806370a08231146103905780637464fc3d146103b05780637ecebe00146103b957600080fd5b806324a9d8531161019d5780633f4ba83a1161016c5780633f4ba83a14610345578063485cc9551461034d5780635909c0d5146103605780635a3d5493146103695780635c975abb1461037257600080fd5b806324a9d853146102f257806330adf81f146102fb578063313ce567146103225780633644e5151461033c57600080fd5b80630dfe1681116101d95780630dfe16811461029557806313966db5146102c057806318160ddd146102c857806323b872dd146102df57600080fd5b8063022c0d9f1461020b57806306fdde03146102205780630902f1ac1461023e578063095ea7b314610272575b600080fd5b61021e6102193660046124cb565b6104eb565b005b610228610a1f565b6040516102359190612591565b60405180910390f35b610246610aad565b604080516001600160701b03948516815293909216602084015263ffffffff1690820152606001610235565b6102856102803660046125c4565b610ad7565b6040519015158152602001610235565b6007546102a8906001600160a01b031681565b6040516001600160a01b039091168152602001610235565b61021e610aed565b6102d160015481565b604051908152602001610235565b6102856102ed3660046125f0565b610c7e565b6102d1600e5481565b6102d17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b61032a601281565b60405160ff9091168152602001610235565b6102d160045481565b61021e610cf8565b61021e61035b366004612631565b610d31565b6102d1600a5481565b6102d1600b5481565b60065460ff16610285565b6102d161038b36600461266a565b610ec1565b6102d161039e36600461266a565b60026020526000908152604090205481565b6102d1600c5481565b6102d16103c736600461266a565b60056020526000908152604090205481565b61021e6111b1565b6103f46103ef36600461266a565b6111e8565b60408051928352602083019190915201610235565b6102286040518060400160405280600781526020016605445414c2d4c560cc1b81525081565b61028561043d3660046125c4565b611590565b6102d16103e881565b61021e61045936600461266a565b61159d565b6006546102a89061010090046001600160a01b031681565b6008546102a8906001600160a01b031681565b61021e610497366004612687565b6116c7565b6102d16104aa366004612631565b600360209081526000928352604080842090915290825290205481565b61021e6104d53660046126fe565b6118da565b6102d1600f5481565b61021e6119a3565b6104f3611aed565b600d5460011461051e5760405162461bcd60e51b815260040161051590612720565b60405180910390fd5b6000600d55841515806105315750600084115b6105895760405162461bcd60e51b8152602060048201526024808201527f5465616c737761703a20494e53554646494349454e545f4f55545055545f414d60448201526313d5539560e21b6064820152608401610515565b600080610594610aad565b5091509150816001600160701b0316871080156105b95750806001600160701b031686105b6106055760405162461bcd60e51b815260206004820181905260248201527f5465616c737761703a20494e53554646494349454e545f4c49515549444954596044820152606401610515565b60075460085460009182916001600160a01b039182169190811690891682148015906106435750806001600160a01b0316896001600160a01b031614155b6106865760405162461bcd60e51b81526020600482015260146024820152735465616c737761703a20494e56414c49445f544f60601b6044820152606401610515565b8a1561069757610697828a8d611b33565b89156106a8576106a8818a8c611b33565b861561071457604051627d5ea360e31b81526001600160a01b038a16906303eaf518906106e19033908f908f908e908e9060040161274a565b600060405180830381600087803b1580156106fb57600080fd5b505af115801561070f573d6000803e3d6000fd5b505050505b6040516370a0823160e01b81523060048201526001600160a01b038316906370a082319060240160206040518083038186803b15801561075357600080fd5b505afa158015610767573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078b9190612796565b6040516370a0823160e01b81523060048201529094506001600160a01b038216906370a082319060240160206040518083038186803b1580156107cd57600080fd5b505afa1580156107e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108059190612796565b92505050600089856001600160701b031661082091906127c5565b831161082d57600061084a565b6108408a6001600160701b0387166127c5565b61084a90846127c5565b905060006108618a6001600160701b0387166127c5565b831161086e57600061088b565b6108818a6001600160701b0387166127c5565b61088b90846127c5565b9050600082118061089c5750600081115b6108f45760405162461bcd60e51b815260206004820152602360248201527f5465616c737761703a20494e53554646494349454e545f494e5055545f414d4f60448201526215539560ea1b6064820152608401610515565b600e54600061090382856127dc565b61090f876127106127dc565b61091991906127c5565b9050600061092783856127dc565b610933876127106127dc565b61093d91906127c5565b90506109556001600160701b03808a16908b166127dc565b610963906305f5e1006127dc565b61096d82846127dc565b10156109a95760405162461bcd60e51b815260206004820152600b60248201526a5465616c737761703a204b60a81b6044820152606401610515565b5050506109b884848888611c7e565b60408051838152602081018390529081018c9052606081018b90526001600160a01b038a169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a350506001600d55505050505050505050565b60008054610a2c906127fb565b80601f0160208091040260200160405190810160405280929190818152602001828054610a58906127fb565b8015610aa55780601f10610a7a57610100808354040283529160200191610aa5565b820191906000526020600020905b815481529060010190602001808311610a8857829003601f168201915b505050505081565b6009546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610ae4338484611e45565b50600192915050565b610af5611aed565b600d54600114610b175760405162461bcd60e51b815260040161051590612720565b6000600d81905580610b27610aad565b506007546040516370a0823160e01b81523060048201529294509092506000916001600160a01b03909116906370a082319060240160206040518083038186803b158015610b7457600080fd5b505afa158015610b88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bac9190612796565b6008546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a082319060240160206040518083038186803b158015610bf557600080fd5b505afa158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d9190612796565b90506000610c3b8585611ea7565b9050610c4983838787611c7e565b8015610c7257600954610c6e906001600160701b03600160701b8204811691166127dc565b600c555b50506001600d55505050565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610ce3576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610cdd9084906127c5565b90915550505b610cee848484612011565b5060019392505050565b60065461010090046001600160a01b03163314610d275760405162461bcd60e51b815260040161051590612830565b610d2f6120b9565b565b60065461010090046001600160a01b03163314610d605760405162461bcd60e51b815260040161051590612830565b600780546001600160a01b038085166001600160a01b0319928316811790935560088054918516919092161790556019600f556064600e55604080516395d89b4160e01b815290516395d89b4191600480820192600092909190829003018186803b158015610dce57600080fd5b505afa158015610de2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e0a9190810190612873565b816001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015610e4357600080fd5b505afa158015610e57573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e7f9190810190612873565b604051602001610e90929190612920565b60405160208183030381529060405260009080519060200190610eb492919061241a565b50610ebd61210b565b5050565b6000610ecb611aed565b600d54600114610eed5760405162461bcd60e51b815260040161051590612720565b6000600d81905580610efd610aad565b506007546040516370a0823160e01b81523060048201529294509092506000916001600160a01b03909116906370a082319060240160206040518083038186803b158015610f4a57600080fd5b505afa158015610f5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f829190612796565b6008546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a082319060240160206040518083038186803b158015610fcb57600080fd5b505afa158015610fdf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110039190612796565b9050600061101a6001600160701b038616846127c5565b905060006110316001600160701b038616846127c5565b9050600061103f8787611ea7565b6001549091508061107d576103e861105f61105a85876127dc565b6121ba565b61106991906127c5565b985061107860006103e861222a565b6110c4565b6110c16001600160701b03891661109483876127dc565b61109e9190612981565b6001600160701b0389166110b284876127dc565b6110bc9190612981565b6122bc565b98505b600089116111245760405162461bcd60e51b815260206004820152602760248201527f5465616c737761703a20494e53554646494349454e545f4c495155494449545960448201526617d3525395115160ca1b6064820152608401610515565b61112e8a8a61222a565b61113a86868a8a611c7e565b81156111635760095461115f906001600160701b03600160701b8204811691166127dc565b600c555b604080518581526020810185905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a250506001600d5550949695505050505050565b60065461010090046001600160a01b031633146111e05760405162461bcd60e51b815260040161051590612830565b610d2f6122d4565b6000806111f3611aed565b600d546001146112155760405162461bcd60e51b815260040161051590612720565b6000600d81905580611225610aad565b506007546008546040516370a0823160e01b81523060048201529395509193506001600160a01b039081169291169060009083906370a082319060240160206040518083038186803b15801561127a57600080fd5b505afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b29190612796565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a082319060240160206040518083038186803b1580156112f757600080fd5b505afa15801561130b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132f9190612796565b3060009081526002602052604081205491925061134c8888611ea7565b6001549091508061135d86856127dc565b6113679190612981565b9a508061137485856127dc565b61137e9190612981565b995060008b118015611390575060008a115b6113ec5760405162461bcd60e51b815260206004820152602760248201527f5465616c737761703a20494e53554646494349454e545f4c495155494449545960448201526617d0955493915160ca1b6064820152608401610515565b6113f63084612311565b611401878d8d611b33565b61140c868d8c611b33565b6040516370a0823160e01b81523060048201526001600160a01b038816906370a082319060240160206040518083038186803b15801561144b57600080fd5b505afa15801561145f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114839190612796565b6040516370a0823160e01b81523060048201529095506001600160a01b038716906370a082319060240160206040518083038186803b1580156114c557600080fd5b505afa1580156114d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fd9190612796565b935061150b85858b8b611c7e565b811561153457600954611530906001600160701b03600160701b8204811691166127dc565b600c555b604080518c8152602081018c90526001600160a01b038e169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505050505050506001600d81905550915091565b6000610ae4338484612011565b6115a5611aed565b600d546001146115c75760405162461bcd60e51b815260040161051590612720565b6000600d556007546008546009546040516370a0823160e01b81523060048201526001600160a01b03938416939092169161167591849186916001600160701b03169083906370a08231906024015b60206040518083038186803b15801561162e57600080fd5b505afa158015611642573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116669190612796565b61167091906127c5565b611b33565b6009546040516370a0823160e01b81523060048201526116bd9183918691600160701b90046001600160701b0316906001600160a01b038416906370a0823190602401611616565b50506001600d5550565b4284101561170b5760405162461bcd60e51b81526020600482015260116024820152701519585b1cddd85c0e8811561412549151607a1b6044820152606401610515565b6004546001600160a01b038816600090815260056020526040812080549192917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b91908761175e83612995565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e001604051602081830303815290604052805190602001206040516020016117d792919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015611842573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906118785750886001600160a01b0316816001600160a01b0316145b6118c45760405162461bcd60e51b815260206004820152601b60248201527f5465616c737761703a20494e56414c49445f5349474e415455524500000000006044820152606401610515565b6118cf898989611e45565b505050505050505050565b60065461010090046001600160a01b031633146119095760405162461bcd60e51b815260040161051590612830565b61271082106119475760405162461bcd60e51b815260206004820152600a6024820152694261642066656542707360b01b6044820152606401610515565b600081116119905760405162461bcd60e51b81526020600482015260166024820152752130b210383937ba37b1b7b62332b2a234bb34b232b960511b6044820152606401610515565b611998610aed565b600e91909155600f55565b6119ab611aed565b600d546001146119cd5760405162461bcd60e51b815260040161051590612720565b6000600d556007546040516370a0823160e01b8152306004820152611ae6916001600160a01b0316906370a082319060240160206040518083038186803b158015611a1757600080fd5b505afa158015611a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4f9190612796565b6008546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015611a9257600080fd5b505afa158015611aa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aca9190612796565b6009546001600160701b0380821691600160701b900416611c7e565b6001600d55565b60065460ff1615610d2f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610515565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b17905291516000928392871691611bbf91906129b0565b6000604051808303816000865af19150503d8060008114611bfc576040519150601f19603f3d011682016040523d82523d6000602084013e611c01565b606091505b5091509150818015611c2b575080511580611c2b575080806020019051810190611c2b91906129cc565b611c775760405162461bcd60e51b815260206004820152601960248201527f5465616c737761703a205452414e534645525f4641494c4544000000000000006044820152606401610515565b5050505050565b6001600160701b038411801590611c9c57506001600160701b038311155b611cdd5760405162461bcd60e51b81526020600482015260126024820152715465616c737761703a204f564552464c4f5760701b6044820152606401610515565b6000611cee640100000000426129ee565b600954909150600090611d0e90600160e01b900463ffffffff1683612a02565b905060008163ffffffff16118015611d2e57506001600160701b03841615155b8015611d4257506001600160701b03831615155b15611dad578063ffffffff16611d6a85611d5b8661239d565b6001600160e01b0316906123bc565b600a80546001600160e01b03929092169290920201905563ffffffff8116611d9584611d5b8761239d565b600b80546001600160e01b0392909216929092020190555b6009805463ffffffff8416600160e01b026001600160e01b036001600160701b03898116600160701b9081026001600160e01b03199095168c83161794909417918216831794859055604080519382169282169290921783529290930490911660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a1505050505050565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600080600660019054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611ef857600080fd5b505afa158015611f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f309190612a27565b90506001600160a01b03811615801590611f4c57506000600f54115b600c549092508215611ffd578015611ff8576000611f7961105a6001600160701b038088169089166127dc565b90506000611f86836121ba565b905080821115611ff5576000611f9c82846127c5565b600154611fa991906127dc565b90506000826001600f54611fbd91906127c5565b611fc790866127dc565b611fd19190612a44565b90506000611fdf8284612981565b90508015611ff157611ff1878261222a565b5050505b50505b612009565b8015612009576000600c555b505092915050565b6001600160a01b0383166000908152600260205260409020546120359082906127c5565b6001600160a01b038085166000908152600260205260408082209390935590841681522054612065908290612a44565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e9a9085815260200190565b6120c16123d1565b6006805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600060405161213b9190612a5c565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160408051601f198184030181529190528051602090910120600455565b6000600382111561221b57508060006121d4600283612981565b6121df906001612a44565b90505b81811015612215579050806002816121fa8186612981565b6122049190612a44565b61220e9190612981565b90506121e2565b50919050565b8115612225575060015b919050565b806001546122389190612a44565b6001556001600160a01b03821660009081526002602052604090205461225f908290612a44565b6001600160a01b0383166000818152600260205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122b09085815260200190565b60405180910390a35050565b60008183106122cb57816122cd565b825b9392505050565b6122dc611aed565b6006805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586120ee3390565b6001600160a01b0382166000908152600260205260409020546123359082906127c5565b6001600160a01b03831660009081526002602052604090205560015461235c9082906127c5565b6001556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016122b0565b60006123b6600160701b6001600160701b038416612af8565b92915050565b60006122cd6001600160701b03831684612b27565b60065460ff16610d2f5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610515565b828054612426906127fb565b90600052602060002090601f016020900481019282612448576000855561248e565b82601f1061246157805160ff191683800117855561248e565b8280016001018555821561248e579182015b8281111561248e578251825591602001919060010190612473565b5061249a92915061249e565b5090565b5b8082111561249a576000815560010161249f565b6001600160a01b03811681146124c857600080fd5b50565b6000806000806000608086880312156124e357600080fd5b853594506020860135935060408601356124fc816124b3565b9250606086013567ffffffffffffffff8082111561251957600080fd5b818801915088601f83011261252d57600080fd5b81358181111561253c57600080fd5b89602082850101111561254e57600080fd5b9699959850939650602001949392505050565b60005b8381101561257c578181015183820152602001612564565b8381111561258b576000848401525b50505050565b60208152600082518060208401526125b0816040850160208701612561565b601f01601f19169190910160400192915050565b600080604083850312156125d757600080fd5b82356125e2816124b3565b946020939093013593505050565b60008060006060848603121561260557600080fd5b8335612610816124b3565b92506020840135612620816124b3565b929592945050506040919091013590565b6000806040838503121561264457600080fd5b823561264f816124b3565b9150602083013561265f816124b3565b809150509250929050565b60006020828403121561267c57600080fd5b81356122cd816124b3565b600080600080600080600060e0888a0312156126a257600080fd5b87356126ad816124b3565b965060208801356126bd816124b3565b95506040880135945060608801359350608088013560ff811681146126e157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561271157600080fd5b50508035926020909101359150565b60208082526010908201526f1519585b1cddd85c0e881313d0d2d15160821b604082015260600190565b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b6000602082840312156127a857600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156127d7576127d76127af565b500390565b60008160001904831182151516156127f6576127f66127af565b500290565b600181811c9082168061280f57607f821691505b6020821081141561221557634e487b7160e01b600052602260045260246000fd5b6020808252601390820152722a32b0b639bbb0b81d102327a92124a22222a760691b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561288557600080fd5b815167ffffffffffffffff8082111561289d57600080fd5b818401915084601f8301126128b157600080fd5b8151818111156128c3576128c361285d565b604051601f8201601f19908116603f011681019083821181831017156128eb576128eb61285d565b8160405282815287602084870101111561290457600080fd5b612915836020830160208801612561565b979650505050505050565b6202628160ed1b81526000835161293e816003850160208801612561565b602d60f81b600391840191820152835161295f816004840160208801612561565b01600401949350505050565b634e487b7160e01b600052601260045260246000fd5b6000826129905761299061296b565b500490565b60006000198214156129a9576129a96127af565b5060010190565b600082516129c2818460208701612561565b9190910192915050565b6000602082840312156129de57600080fd5b815180151581146122cd57600080fd5b6000826129fd576129fd61296b565b500690565b600063ffffffff83811690831681811015612a1f57612a1f6127af565b039392505050565b600060208284031215612a3957600080fd5b81516122cd816124b3565b60008219821115612a5757612a576127af565b500190565b600080835481600182811c915080831680612a7857607f831692505b6020808410821415612a9857634e487b7160e01b86526022600452602486fd5b818015612aac5760018114612abd57612aea565b60ff19861689528489019650612aea565b60008a81526020902060005b86811015612ae25781548b820152908501908301612ac9565b505084890196505b509498975050505050505050565b60006001600160e01b0382811684821681151582840482111615612b1e57612b1e6127af565b02949350505050565b60006001600160e01b0383811680612b4157612b4161296b565b9216919091049291505056fea2646970667358221220c6fe8cd8d8615c38fae7ac95e9f68715c1ad88dcacb1d3bd4259e5b8f1d405d264736f6c63430008090033a2646970667358221220a4f4a6326e5debc223b765200558a8120957c35a78e79a9b519cbe207994d44a64736f6c63430008090033", + ), + storage: storage{ + // address public override feeToSetter + "0x01": genesismap{ + params.OasysMainnetGenesisHash: "0x732508dA924f04a3895152fA4FE3dE176aC763A7", + }, + }, + }, + { + contract: tealswapRouter, + // commit: https://github.com/oasysgames/oasys-ecosystem-contract/blob/b9d43020001d9c8ae5d8a0e571726e378314ce9b/contracts/Tealswap/periphery/TealswapRouter.sol + code: mustDecodeCode( + "0x6080604052600436106101855760003560e01c806396ed28f9116100d1578063c45a01551161008a578063ded9382a11610064578063ded9382a14610490578063e8e33700146104b0578063f305d719146104eb578063fb3bdb41146104fe57600080fd5b8063c45a015514610435578063d06ca61f14610450578063d52bb6f41461047057600080fd5b806396ed28f91461036f578063ad5c4648146103a7578063ad615dec146103c2578063af2979eb146103e2578063b6f9de9514610402578063baa2abde1461041557600080fd5b806352707d8c1161013e5780635c11d795116101185780635c11d795146102fc578063791ac9471461031c5780637ff36ab51461033c5780638803dbee1461034f57600080fd5b806352707d8c1461028e578063571fd012146102bc5780635b0d5984146102dc57600080fd5b806302751cec146101a757806318cbafe5146101e15780631f00ca741461020e5780632195995c1461022e57806338ed17391461024e5780634a25d94a1461026e57600080fd5b366101a257336001602960991b01146101a0576101a0613501565b005b600080fd5b3480156101b357600080fd5b506101c76101c236600461353f565b610511565b604080519283526020830191909152015b60405180910390f35b3480156101ed57600080fd5b506102016101fc3660046135e2565b6105d2565b6040516101d89190613655565b34801561021a57600080fd5b506102016102293660046136af565b610894565b34801561023a57600080fd5b506101c761024936600461379f565b6108af565b34801561025a57600080fd5b506102016102693660046135e2565b61096f565b34801561027a57600080fd5b506102016102893660046135e2565b610a74565b34801561029a57600080fd5b506102ae6102a9366004613849565b610b77565b6040519081526020016101d8565b3480156102c857600080fd5b506102ae6102d7366004613849565b610b8e565b3480156102e857600080fd5b506102ae6102f736600461387b565b610b9c565b34801561030857600080fd5b506101a06103173660046135e2565b610c57565b34801561032857600080fd5b506101a06103373660046135e2565b610ebf565b61020161034a366004613911565b61108f565b34801561035b57600080fd5b5061020161036a3660046135e2565b61132f565b34801561037b57600080fd5b5061038f61038a366004613978565b6113d3565b6040516001600160a01b0390911681526020016101d8565b3480156103b357600080fd5b5061038f6001602960991b0181565b3480156103ce57600080fd5b506102ae6103dd3660046139b1565b61145c565b3480156103ee57600080fd5b506102ae6103fd36600461353f565b611471565b6101a0610410366004613911565b611594565b34801561042157600080fd5b506101c76104303660046139dd565b61187a565b34801561044157600080fd5b5061038f6018602960991b0181565b34801561045c57600080fd5b5061020161046b3660046136af565b611a47565b34801561047c57600080fd5b506101c761048b366004613978565b611a5b565b34801561049c57600080fd5b506101c76104ab36600461387b565b611a7c565b3480156104bc57600080fd5b506104d06104cb366004613a4f565b611b3d565b604080519384526020840192909252908201526060016101d8565b6104d06104f936600461353f565b611c31565b61020161050c366004613911565b611e2f565b600080824281101561053e5760405162461bcd60e51b815260040161053590613acb565b60405180910390fd5b610554896001602960991b018a8a8a308a61187a565b9093509150610564898685612105565b604051632e1a7d4d60e01b8152600481018390526001602960991b0190632e1a7d4d90602401600060405180830381600087803b1580156105a457600080fd5b505af11580156105b8573d6000803e3d6000fd5b505050506105c68583612236565b50965096945050505050565b606081428110156105f55760405162461bcd60e51b815260040161053590613acb565b6001602960991b01868661060a600182613b18565b81811061061957610619613b2f565b905060200201602081019061062e9190613b45565b6001600160a01b0316146106545760405162461bcd60e51b815260040161053590613b62565b6106996018602960991b018988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061231592505050565b91508682600184516106ab9190613b18565b815181106106bb576106bb613b2f565b602002602001015110156106e15760405162461bcd60e51b815260040161053590613b99565b61078d868660008181106106f7576106f7613b2f565b905060200201602081019061070c9190613b45565b3361076d6018602960991b018a8a600081811061072b5761072b613b2f565b90506020020160208101906107409190613b45565b8b8b600181811061075357610753613b2f565b90506020020160208101906107689190613b45565b61253a565b8560008151811061078057610780613b2f565b6020026020010151612613565b6107cc82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250612751915050565b6001602960991b016001600160a01b0316632e1a7d4d83600185516107f19190613b18565b8151811061080157610801613b2f565b60200260200101516040518263ffffffff1660e01b815260040161082791815260200190565b600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b5050505061088984836001855161086c9190613b18565b8151811061087c5761087c613b2f565b6020026020010151612236565b509695505050505050565b60606108a86018602960991b01848461290a565b9392505050565b60008060006108c66018602960991b018f8f61253a565b90506000876108d5578c6108d9565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90610914903390309086908f908e908e908e90600401613be3565b600060405180830381600087803b15801561092e57600080fd5b505af1158015610942573d6000803e3d6000fd5b505050506109558f8f8f8f8f8f8f61187a565b809450819550505050509b509b9950505050505050505050565b606081428110156109925760405162461bcd60e51b815260040161053590613acb565b6109d76018602960991b018988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061231592505050565b91508682600184516109e99190613b18565b815181106109f9576109f9613b2f565b60200260200101511015610a1f5760405162461bcd60e51b815260040161053590613b99565b610a35868660008181106106f7576106f7613b2f565b61088982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612751915050565b60608142811015610a975760405162461bcd60e51b815260040161053590613acb565b6001602960991b018686610aac600182613b18565b818110610abb57610abb613b2f565b9050602002016020810190610ad09190613b45565b6001600160a01b031614610af65760405162461bcd60e51b815260040161053590613b62565b610b3b6018602960991b018988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061290a92505050565b91508682600081518110610b5157610b51613b2f565b602002602001015111156106e15760405162461bcd60e51b815260040161053590613c24565b6000610b8585858585612b08565b95945050505050565b6000610b8585858585612bf1565b600080610bb86018602960991b018d6001602960991b0161253a565b9050600086610bc7578b610bcb565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90610c06903390309086908e908d908d908d90600401613be3565b600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b50505050610c468d8d8d8d8d8d611471565b9d9c50505050505050505050505050565b8042811015610c785760405162461bcd60e51b815260040161053590613acb565b610cf085856000818110610c8e57610c8e613b2f565b9050602002016020810190610ca39190613b45565b33610cea6018602960991b0189896000818110610cc257610cc2613b2f565b9050602002016020810190610cd79190613b45565b8a8a600181811061075357610753613b2f565b8a612613565b60008585610cff600182613b18565b818110610d0e57610d0e613b2f565b9050602002016020810190610d239190613b45565b6040516370a0823160e01b81526001600160a01b03868116600483015291909116906370a082319060240160206040518083038186803b158015610d6657600080fd5b505afa158015610d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9e9190613c6a565b9050610dde868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250612ce0915050565b86818787610ded600182613b18565b818110610dfc57610dfc613b2f565b9050602002016020810190610e119190613b45565b6040516370a0823160e01b81526001600160a01b03888116600483015291909116906370a08231906024015b60206040518083038186803b158015610e5557600080fd5b505afa158015610e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8d9190613c6a565b610e979190613b18565b1015610eb55760405162461bcd60e51b815260040161053590613b99565b5050505050505050565b8042811015610ee05760405162461bcd60e51b815260040161053590613acb565b6001602960991b018585610ef5600182613b18565b818110610f0457610f04613b2f565b9050602002016020810190610f199190613b45565b6001600160a01b031614610f3f5760405162461bcd60e51b815260040161053590613b62565b610f5585856000818110610c8e57610c8e613b2f565b610f93858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250612ce0915050565b6040516370a0823160e01b81523060048201526000906001602960991b01906370a082319060240160206040518083038186803b158015610fd357600080fd5b505afa158015610fe7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100b9190613c6a565b90508681101561102d5760405162461bcd60e51b815260040161053590613b99565b604051632e1a7d4d60e01b8152600481018290526001602960991b0190632e1a7d4d90602401600060405180830381600087803b15801561106d57600080fd5b505af1158015611081573d6000803e3d6000fd5b50505050610eb58482612236565b606081428110156110b25760405162461bcd60e51b815260040161053590613acb565b6001602960991b0186866000816110cb576110cb613b2f565b90506020020160208101906110e09190613b45565b6001600160a01b0316146111065760405162461bcd60e51b815260040161053590613b62565b61114b6018602960991b013488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061231592505050565b915086826001845161115d9190613b18565b8151811061116d5761116d613b2f565b602002602001015110156111935760405162461bcd60e51b815260040161053590613b99565b6001602960991b016001600160a01b031663d0e30db0836000815181106111bc576111bc613b2f565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156111ef57600080fd5b505af1158015611203573d6000803e3d6000fd5b50505050506001602960991b016001600160a01b031663a9059cbb61123c6018602960991b0189896000818110610cc257610cc2613b2f565b8460008151811061124f5761124f613b2f565b60200260200101516040518363ffffffff1660e01b81526004016112889291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b1580156112a257600080fd5b505af11580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da9190613c83565b6112e6576112e6613501565b61132582878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612751915050565b5095945050505050565b606081428110156113525760405162461bcd60e51b815260040161053590613acb565b6113976018602960991b018988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061290a92505050565b915086826000815181106113ad576113ad613b2f565b60200260200101511115610a1f5760405162461bcd60e51b815260040161053590613c24565b60405163e6a4390560e01b81526001600160a01b038084166004830152821660248201526000906018602960991b019063e6a439059060440160206040518083038186803b15801561142457600080fd5b505afa158015611438573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a89190613ca0565b6000611469848484613017565b949350505050565b600081428110156114945760405162461bcd60e51b815260040161053590613acb565b6114aa886001602960991b01898989308961187a565b6040516370a0823160e01b81523060048201529093506115329150899086906001600160a01b038316906370a082319060240160206040518083038186803b1580156114f557600080fd5b505afa158015611509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152d9190613c6a565b612105565b604051632e1a7d4d60e01b8152600481018390526001602960991b0190632e1a7d4d90602401600060405180830381600087803b15801561157257600080fd5b505af1158015611586573d6000803e3d6000fd5b505050506108898483612236565b80428110156115b55760405162461bcd60e51b815260040161053590613acb565b6001602960991b0185856000816115ce576115ce613b2f565b90506020020160208101906115e39190613b45565b6001600160a01b0316146116095760405162461bcd60e51b815260040161053590613b62565b60003490506001602960991b016001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561165057600080fd5b505af1158015611664573d6000803e3d6000fd5b50505050506001602960991b016001600160a01b031663a9059cbb61169d6018602960991b0189896000818110610cc257610cc2613b2f565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b1580156116e557600080fd5b505af11580156116f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171d9190613c83565b61172957611729613501565b60008686611738600182613b18565b81811061174757611747613b2f565b905060200201602081019061175c9190613b45565b6040516370a0823160e01b81526001600160a01b03878116600483015291909116906370a082319060240160206040518083038186803b15801561179f57600080fd5b505afa1580156117b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d79190613c6a565b9050611817878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612ce0915050565b87818888611826600182613b18565b81811061183557611835613b2f565b905060200201602081019061184a9190613b45565b6040516370a0823160e01b81526001600160a01b03898116600483015291909116906370a0823190602401610e3d565b600080824281101561189e5760405162461bcd60e51b815260040161053590613acb565b60006118b26018602960991b018c8c61253a565b6040516323b872dd60e01b81523360048201526001600160a01b03821660248201819052604482018c90529192506323b872dd90606401602060405180830381600087803b15801561190357600080fd5b505af1158015611917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193b9190613c83565b5060405163226bf2d160e21b81526001600160a01b03878116600483015260009182918416906389afcb44906024016040805180830381600087803b15801561198357600080fd5b505af1158015611997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bb9190613cbd565b9150915060006119cb8e8e6130b5565b509050806001600160a01b03168e6001600160a01b0316146119ee5781836119f1565b82825b90975095508a871015611a165760405162461bcd60e51b815260040161053590613ce1565b89861015611a365760405162461bcd60e51b815260040161053590613d26565b505050505097509795505050505050565b60606108a86018602960991b018484612315565b600080611a706018602960991b0185856131a4565b915091505b9250929050565b6000806000611a9a6018602960991b018e6001602960991b0161253a565b9050600087611aa9578c611aad565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90611ae8903390309086908f908e908e908e90600401613be3565b600060405180830381600087803b158015611b0257600080fd5b505af1158015611b16573d6000803e3d6000fd5b50505050611b288e8e8e8e8e8e610511565b909f909e509c50505050505050505050505050565b60008060008342811015611b635760405162461bcd60e51b815260040161053590613acb565b611b718c8c8c8c8c8c6131ec565b90945092506000611b8a6018602960991b018e8e61253a565b9050611b988d338388612613565b611ba48c338387612613565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b158015611be757600080fd5b505af1158015611bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1f9190613c6a565b92505050985098509895505050505050565b60008060008342811015611c575760405162461bcd60e51b815260040161053590613acb565b611c6c8a6001602960991b018b348c8c6131ec565b90945092506000611c8c6018602960991b018c6001602960991b0161253a565b9050611c9a8b338388612613565b6001602960991b016001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015611cdc57600080fd5b505af1158015611cf0573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b0385166004820152602481018890526001602960991b01935063a9059cbb92506044019050602060405180830381600087803b158015611d4557600080fd5b505af1158015611d59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7d9190613c83565b611d8957611d89613501565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b158015611dcc57600080fd5b505af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e049190613c6a565b925083341115611e2157611e2133611e1c8634613b18565b612236565b505096509650969350505050565b60608142811015611e525760405162461bcd60e51b815260040161053590613acb565b6001602960991b018686600081611e6b57611e6b613b2f565b9050602002016020810190611e809190613b45565b6001600160a01b031614611ea65760405162461bcd60e51b815260040161053590613b62565b611eeb6018602960991b018888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061290a92505050565b91503482600081518110611f0157611f01613b2f565b60200260200101511115611f275760405162461bcd60e51b815260040161053590613c24565b6001602960991b016001600160a01b031663d0e30db083600081518110611f5057611f50613b2f565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611f8357600080fd5b505af1158015611f97573d6000803e3d6000fd5b50505050506001602960991b016001600160a01b031663a9059cbb611fd06018602960991b0189896000818110610cc257610cc2613b2f565b84600081518110611fe357611fe3613b2f565b60200260200101516040518363ffffffff1660e01b815260040161201c9291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561203657600080fd5b505af115801561204a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206e9190613c83565b61207a5761207a613501565b6120b982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612751915050565b816000815181106120cc576120cc613b2f565b60200260200101513411156113255761132533836000815181106120f2576120f2613b2f565b602002602001015134611e1c9190613b18565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916121619190613d97565b6000604051808303816000865af19150503d806000811461219e576040519150601f19603f3d011682016040523d82523d6000602084013e6121a3565b606091505b50915091508180156121cd5750805115806121cd5750808060200190518101906121cd9190613c83565b61222f5760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b6064820152608401610535565b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040516122609190613d97565b60006040518083038185875af1925050503d806000811461229d576040519150601f19603f3d011682016040523d82523d6000602084013e6122a2565b606091505b50509050806123105760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527308115512081d1c985b9cd9995c8819985a5b195960621b6064820152608401610535565b505050565b60606002825110156123695760405162461bcd60e51b815260206004820152601d60248201527f5465616c737761704c6962726172793a20494e56414c49445f504154480000006044820152606401610535565b815167ffffffffffffffff81111561238357612383613699565b6040519080825280602002602001820160405280156123ac578160200160208202803683370190505b50905082816000815181106123c3576123c3613b2f565b60200260200101818152505060005b600183516123e09190613b18565b8110156125325760006124318483815181106123fe576123fe613b2f565b6020026020010151858460016124149190613db3565b8151811061242457612424613b2f565b60200260200101516130b5565b509050600061247f8786858151811061244c5761244c613b2f565b6020026020010151878660016124629190613db3565b8151811061247257612472613b2f565b602002602001015161253a565b90506000806124bc83856001600160a01b03168988815181106124a4576124a4613b2f565b60200260200101516001600160a01b031614156133de565b9150915060006124cb84613488565b90506124f28787815181106124e2576124e2613b2f565b6020026020010151848484612b08565b876124fe886001613db3565b8151811061250e5761250e613b2f565b6020026020010181815250505050505050808061252a90613dcb565b9150506123d2565b509392505050565b600080600061254985856130b5565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016125f19291906001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527f9690b3663a0ea0887f1b44a4a80a71bb6a9c3bbab71f1777cb5a31e95ffdb5e1603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916126779190613d97565b6000604051808303816000865af19150503d80600081146126b4576040519150601f19603f3d011682016040523d82523d6000602084013e6126b9565b606091505b50915091508180156126e35750805115806126e35750808060200190518101906126e39190613c83565b6127495760405162461bcd60e51b815260206004820152603160248201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472604482015270185b9cd9995c919c9bdb4819985a5b1959607a1b6064820152608401610535565b505050505050565b60005b600183516127629190613b18565b8110156129045760008084838151811061277e5761277e613b2f565b6020026020010151858460016127949190613db3565b815181106127a4576127a4613b2f565b60200260200101519150915060006127bc83836130b5565b5090506000876127cd866001613db3565b815181106127dd576127dd613b2f565b60200260200101519050600080836001600160a01b0316866001600160a01b03161461280b5782600061280f565b6000835b91509150600060028a516128239190613b18565b881061282f5788612847565b6128476018602960991b01878c6124628c6002613db3565b905061285b6018602960991b01888861253a565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015612898576020820181803683370190505b506040518563ffffffff1660e01b81526004016128b89493929190613de6565b600060405180830381600087803b1580156128d257600080fd5b505af11580156128e6573d6000803e3d6000fd5b505050505050505050505080806128fc90613dcb565b915050612754565b50505050565b606060028251101561295e5760405162461bcd60e51b815260206004820152601d60248201527f5465616c737761704c6962726172793a20494e56414c49445f504154480000006044820152606401610535565b815167ffffffffffffffff81111561297857612978613699565b6040519080825280602002602001820160405280156129a1578160200160208202803683370190505b5090508281600183516129b49190613b18565b815181106129c4576129c4613b2f565b6020026020010181815250506000600183516129e09190613b18565b90505b8015612532576000612a24846129fa600185613b18565b81518110612a0a57612a0a613b2f565b602002602001015185848151811061242457612424613b2f565b5090506000612a638786612a39600187613b18565b81518110612a4957612a49613b2f565b602002602001015187868151811061247257612472613b2f565b9050600080612a92836001600160a01b03861689612a8260018a613b18565b815181106124a4576124a4613b2f565b915091506000612aa184613488565b9050612ac8878781518110612ab857612ab8613b2f565b6020026020010151848484612bf1565b87612ad4600189613b18565b81518110612ae457612ae4613b2f565b60200260200101818152505050505050508080612b0090613e36565b9150506129e3565b6000808511612b6c5760405162461bcd60e51b815260206004820152602a60248201527f5465616c737761704c6962726172793a20494e53554646494349454e545f494e60448201526914155517d05353d5539560b21b6064820152608401610535565b600084118015612b7c5750600083115b612b985760405162461bcd60e51b815260040161053590613e4d565b6000612ba683612710613b18565b612bb09087613e94565b90506000612bbe8583613e94565b9050600082612bcf88612710613e94565b612bd99190613db3565b9050612be58183613eb3565b98975050505050505050565b6000808511612c565760405162461bcd60e51b815260206004820152602b60248201527f5465616c737761704c6962726172793a20494e53554646494349454e545f4f5560448201526a1514155517d05353d5539560aa1b6064820152608401610535565b600084118015612c665750600083115b612c825760405162461bcd60e51b815260040161053590613e4d565b6000612c8e8686613e94565b612c9a90612710613e94565b90506000612caa84612710613b18565b612cb48887613b18565b612cbe9190613e94565b9050612cca8183613eb3565b612cd5906001613db3565b979650505050505050565b60005b60018351612cf19190613b18565b81101561231057600080848381518110612d0d57612d0d613b2f565b602002602001015185846001612d239190613db3565b81518110612d3357612d33613b2f565b6020026020010151915091506000612d4b83836130b5565b5090506000612d626018602960991b01858561253a565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612da357600080fd5b505afa158015612db7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddb9190613eec565b506001600160701b031691506001600160701b03169150600080876001600160a01b03168a6001600160a01b031614612e15578284612e18565b83835b6040516370a0823160e01b81526001600160a01b038a8116600483015292945090925083918c16906370a082319060240160206040518083038186803b158015612e6157600080fd5b505afa158015612e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e999190613c6a565b612ea39190613b18565b9550612f218683838a6001600160a01b03166324a9d8536040518163ffffffff1660e01b815260040160206040518083038186803b158015612ee457600080fd5b505afa158015612ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1c9190613c6a565b612b08565b945050505050600080856001600160a01b0316886001600160a01b031614612f4b57826000612f4f565b6000835b91509150600060028c51612f639190613b18565b8a10612f6f578a612f87565b612f876018602960991b01898e6124628e6002613db3565b6040805160008152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f90612fc99086908690869060248101613de6565b600060405180830381600087803b158015612fe357600080fd5b505af1158015612ff7573d6000803e3d6000fd5b50505050505050505050505050808061300f90613dcb565b915050612ce3565b60008084116130745760405162461bcd60e51b8152602060048201526024808201527f5465616c737761704c6962726172793a20494e53554646494349454e545f414d60448201526313d5539560e21b6064820152608401610535565b6000831180156130845750600082115b6130a05760405162461bcd60e51b815260040161053590613e4d565b826130ab8386613e94565b6114699190613eb3565b600080826001600160a01b0316846001600160a01b031614156131265760405162461bcd60e51b8152602060048201526024808201527f5465616c737761704c6962726172793a204944454e544943414c5f41444452456044820152635353455360e01b6064820152608401610535565b826001600160a01b0316846001600160a01b031610613146578284613149565b83835b90925090506001600160a01b038216611a755760405162461bcd60e51b815260206004820152601d60248201527f5465616c737761704c6962726172793a205a45524f5f414444524553530000006044820152606401610535565b60008060006131b385856130b5565b5090506131df6131c487878761253a565b826001600160a01b0316876001600160a01b031614156133de565b9250925050935093915050565b60405163e6a4390560e01b81526001600160a01b03808816600483015286166024820152600090819081906018602960991b019063e6a439059060440160206040518083038186803b15801561324157600080fd5b505afa158015613255573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132799190613ca0565b6001600160a01b03161415613312576040516364e329cb60e11b81526001600160a01b03808a166004830152881660248201526018602960991b019063c9c6539690604401602060405180830381600087803b1580156132d857600080fd5b505af11580156132ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133109190613ca0565b505b6000806133276018602960991b018b8b6131a4565b91509150816000148015613339575080155b15613349578793508692506133d1565b6000613356898484613017565b905087811161338a578581101561337f5760405162461bcd60e51b815260040161053590613d26565b8894509250826133cf565b6000613397898486613017565b9050898111156133a9576133a9613501565b878110156133c95760405162461bcd60e51b815260040161053590613ce1565b94508793505b505b5050965096945050505050565b600080600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561341d57600080fd5b505afa158015613431573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134559190613eec565b506001600160701b031691506001600160701b031691508461347857818161347b565b80825b9097909650945050505050565b6000816001600160a01b03166324a9d8536040518163ffffffff1660e01b815260040160206040518083038186803b1580156134c357600080fd5b505afa1580156134d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fb9190613c6a565b92915050565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b038116811461352c57600080fd5b50565b803561353a81613517565b919050565b60008060008060008060c0878903121561355857600080fd5b863561356381613517565b9550602087013594506040870135935060608701359250608087013561358881613517565b8092505060a087013590509295509295509295565b60008083601f8401126135af57600080fd5b50813567ffffffffffffffff8111156135c757600080fd5b6020830191508360208260051b8501011115611a7557600080fd5b60008060008060008060a087890312156135fb57600080fd5b8635955060208701359450604087013567ffffffffffffffff81111561362057600080fd5b61362c89828a0161359d565b909550935050606087013561364081613517565b80925050608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b8181101561368d57835183529284019291840191600101613671565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156136c257600080fd5b8235915060208084013567ffffffffffffffff808211156136e257600080fd5b818601915086601f8301126136f657600080fd5b81358181111561370857613708613699565b8060051b604051601f19603f8301168101818110858211171561372d5761372d613699565b60405291825284820192508381018501918983111561374b57600080fd5b938501935b82851015613770576137618561352f565b84529385019392850192613750565b8096505050505050509250929050565b801515811461352c57600080fd5b803560ff8116811461353a57600080fd5b60008060008060008060008060008060006101608c8e0312156137c157600080fd5b8b356137cc81613517565b9a5060208c01356137dc81613517565b995060408c0135985060608c0135975060808c0135965060a08c013561380181613517565b955060c08c0135945060e08c013561381881613780565b93506138276101008d0161378e565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806000806080858703121561385f57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000806000806000806000806101408b8d03121561389b57600080fd5b8a356138a681613517565b995060208b0135985060408b0135975060608b0135965060808b01356138cb81613517565b955060a08b0135945060c08b01356138e281613780565b93506138f060e08c0161378e565b92506101008b013591506101208b013590509295989b9194979a5092959850565b60008060008060006080868803121561392957600080fd5b85359450602086013567ffffffffffffffff81111561394757600080fd5b6139538882890161359d565b909550935050604086013561396781613517565b949793965091946060013592915050565b6000806040838503121561398b57600080fd5b823561399681613517565b915060208301356139a681613517565b809150509250929050565b6000806000606084860312156139c657600080fd5b505081359360208301359350604090920135919050565b600080600080600080600060e0888a0312156139f857600080fd5b8735613a0381613517565b96506020880135613a1381613517565b955060408801359450606088013593506080880135925060a0880135613a3881613517565b8092505060c0880135905092959891949750929550565b600080600080600080600080610100898b031215613a6c57600080fd5b8835613a7781613517565b97506020890135613a8781613517565b965060408901359550606089013594506080890135935060a0890135925060c0890135613ab381613517565b8092505060e089013590509295985092959890939650565b60208082526017908201527f5465616c73776170526f757465723a2045585049524544000000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082821015613b2a57613b2a613b02565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613b5757600080fd5b81356108a881613517565b6020808252601c908201527f5465616c73776170526f757465723a20494e56414c49445f5041544800000000604082015260600190565b6020808252602a908201527f5465616c73776170526f757465723a20494e53554646494349454e545f4f555460408201526914155517d05353d5539560b21b606082015260800190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b60208082526026908201527f5465616c73776170526f757465723a204558434553534956455f494e5055545f604082015265105353d5539560d21b606082015260800190565b600060208284031215613c7c57600080fd5b5051919050565b600060208284031215613c9557600080fd5b81516108a881613780565b600060208284031215613cb257600080fd5b81516108a881613517565b60008060408385031215613cd057600080fd5b505080516020909101519092909150565b60208082526025908201527f5465616c73776170526f757465723a20494e53554646494349454e545f415f416040820152641353d5539560da1b606082015260800190565b60208082526025908201527f5465616c73776170526f757465723a20494e53554646494349454e545f425f416040820152641353d5539560da1b606082015260800190565b60005b83811015613d86578181015183820152602001613d6e565b838111156129045750506000910152565b60008251613da9818460208701613d6b565b9190910192915050565b60008219821115613dc657613dc6613b02565b500190565b6000600019821415613ddf57613ddf613b02565b5060010190565b84815283602082015260018060a01b03831660408201526080606082015260008251806080840152613e1f8160a0850160208701613d6b565b601f01601f19169190910160a00195945050505050565b600081613e4557613e45613b02565b506000190190565b60208082526027908201527f5465616c737761704c6962726172793a20494e53554646494349454e545f4c496040820152665155494449545960c81b606082015260800190565b6000816000190483118215151615613eae57613eae613b02565b500290565b600082613ed057634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160701b038116811461353a57600080fd5b600080600060608486031215613f0157600080fd5b613f0a84613ed5565b9250613f1860208501613ed5565b9150604084015163ffffffff81168114613f3157600080fd5b80915050925092509256fea2646970667358221220cc16c8b9a19a0e06f0102a856465a2a73129decb1ba04f1a765069c25f1f093c64736f6c63430008090033", + ), + }, +} diff --git a/contracts/oasys/deployments3.go b/contracts/oasys/deployments3.go new file mode 100644 index 000000000..b9af166ac --- /dev/null +++ b/contracts/oasys/deployments3.go @@ -0,0 +1,38 @@ +package oasys + +var deployments3 = []*deployment{ + { + contract: tealswapFactory, + storage: storage{ + // address public override feeToSetter + "0x01": "0x732508dA924f04a3895152fA4FE3dE176aC763A7", + }, + }, + { + contract: tofunftMarketNG, + // commit: https://github.com/oasysgames/oasys-ecosystem-contract/blob/1008faa1c5e939a3bd87f6b732368b3ec060c12f/contracts/tofuNFT/MarketNG.sol + code: mustDecodeCode( + "0x6080604052600436106103855760003560e01c80638704f2a3116101d1578063c477be2011610102578063ee98ce91116100a0578063f2fde38b1161006f578063f2fde38b14610a1e578063f460590b14610a3e578063f4a33e0d14610a5e578063f5116bc914610a7e57600080fd5b8063ee98ce91146109b0578063f0954160146109e9578063f0d250ba146105c0578063f23a6e61146109fe57600080fd5b8063e1784a02116100dc578063e1784a02146105c0578063e7d4a99914610970578063e91274f314610990578063eb3742611461066157600080fd5b8063c477be20146104ed578063cd78ba0114610879578063d9548e531461093d57600080fd5b8063afd76a0b1161016f578063ba84775911610149578063ba84775914610806578063bc197c8114610819578063bdf52b4514610839578063c1c30e801461085957600080fd5b8063afd76a0b146107b5578063b4533aad146107d5578063b50a2a55146105c057600080fd5b806390c2b10e116101ab57806390c2b10e146104d85780639e57feb514610749578063a80d33fb1461075e578063ac5e2cb11461079557600080fd5b80638704f2a3146106f55780638da5cb5b1461072b5780638f18439e146104ed57600080fd5b806354134876116102b65780637234d8f21161025457806380bc688f1161022357806380bc688f146106ab57806381787a85146106cb5780638456cb59146106e0578063853ca41a146104d857600080fd5b80637234d8f214610661578063740db280146104ed578063781dc70a146106765780637ae1ace01461069657600080fd5b80635fd34298116102905780635fd34298146105f45780636acc65db14610621578063708d4d3514610636578063715018a61461064c57600080fd5b806354134876146105aa5780635a4e5a15146105c05780635c975abb146105d557600080fd5b80631bb03ca9116103235780632bcd27df116102fd5780632bcd27df146105025780633ed9ffb7146105325780633f4ba83a146105625780633fc8cef31461057757600080fd5b80631bb03ca9146104c357806324f8515b146104d857806325593ac2146104ed57600080fd5b80630ad486281161035f5780630ad486281461040d57806311f0794c1461042d578063150b7a02146104545780631b01e72c1461048d57600080fd5b8063015af8ee1461039157806301ffc9a7146103b35780630873c6ec146103e857600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103b16103ac366004614546565b610ab3565b005b3480156103bf57600080fd5b506103d36103ce366004614568565b610af2565b60405190151581526020015b60405180910390f35b3480156103f457600080fd5b506103ff620f424081565b6040519081526020016103df565b34801561041957600080fd5b506103d3610428366004614592565b610b29565b34801561043957600080fd5b50610442600481565b60405160ff90911681526020016103df565b34801561046057600080fd5b5061047461046f366004614611565b610b84565b6040516001600160e01b031990911681526020016103df565b34801561049957600080fd5b506103d36104a8366004614592565b60009081526002602052604090206006015460ff1660011490565b3480156104cf57600080fd5b50610442600681565b3480156104e457600080fd5b50610442600081565b3480156104f957600080fd5b50610442600181565b34801561050e57600080fd5b506103d361051d366004614683565b60066020526000908152604090205460ff1681565b34801561053e57600080fd5b506103d361054d366004614592565b60036020526000908152604090205460ff1681565b34801561056e57600080fd5b506103b1610bc4565b34801561058357600080fd5b506105926001602960991b0181565b6040516001600160a01b0390911681526020016103df565b3480156105b657600080fd5b506103ff60085481565b3480156105cc57600080fd5b50610442600281565b3480156105e157600080fd5b50600154600160a01b900460ff166103d3565b34801561060057600080fd5b506103ff61060f366004614592565b60056020526000908152604090205481565b34801561062d57600080fd5b50610442600881565b34801561064257600080fd5b506103ff60075481565b34801561065857600080fd5b506103b1610bd6565b34801561066d57600080fd5b50610442600381565b34801561068257600080fd5b506103d361069136600461479f565b610be8565b3480156106a257600080fd5b50610442600981565b3480156106b757600080fd5b506103b16106c63660046147f9565b610c68565b3480156106d757600080fd5b50610442600781565b3480156106ec57600080fd5b506103b1610c80565b34801561070157600080fd5b506103d3610710366004614592565b60009081526002602052604090206006015460ff1660031490565b34801561073757600080fd5b506001546001600160a01b0316610592565b34801561075557600080fd5b50610442600581565b34801561076a57600080fd5b506103d3610779366004614592565b60009081526002602081905260409091206006015460ff161490565b3480156107a157600080fd5b506103d36107b0366004614854565b610c90565b3480156107c157600080fd5b506103b16107d036600461491d565b610ccf565b3480156107e157600080fd5b506107f56107f0366004614546565b610db1565b6040516103df9594939291906149c4565b6103b1610814366004614a13565b610e82565b34801561082557600080fd5b50610474610834366004614b17565b6116af565b34801561084557600080fd5b506103d3610854366004614592565b6116e9565b34801561086557600080fd5b506103b1610874366004614bd5565b611706565b34801561088557600080fd5b506108ec610894366004614592565b600260208190526000918252604090912080546001820154928201546003830154600484015460058501546006909501546001600160a01b039485169685169593909416939192909160ff8082169161010090041688565b604080516001600160a01b03998a168152978916602089015295909716948601949094526060850192909252608084015260a083015260ff90811660c083015290911660e0820152610100016103df565b34801561094957600080fd5b506103d3610958366004614592565b60009081526002602052604090206005015442101590565b34801561097c57600080fd5b506103b161098b366004614c24565b611774565b34801561099c57600080fd5b506103b16109ab366004614c54565b6118b8565b3480156109bc57600080fd5b506103d36109cb366004614592565b600090815260026020526040902060060154610100900460ff161590565b3480156109f557600080fd5b50610442600a81565b348015610a0a57600080fd5b50610474610a19366004614d26565b611b7d565b348015610a2a57600080fd5b506103b1610a39366004614683565b611bb5565b348015610a4a57600080fd5b506103b1610a59366004614d8f565b611c2e565b348015610a6a57600080fd5b506103d3610a79366004614dbd565b611ccc565b348015610a8a57600080fd5b506103d3610a99366004614592565b60009081526002602052604090206006015460ff16151590565b610abb61206f565b600881905560078290556040517f6c06ac894de6b71964f14d152b6674a4465a9b5d3f9cf9f216b8e7ea6146751990600090a15050565b60006001600160e01b03198216630a85bd0160e11b1480610b2357506001600160e01b03198216630271189760e51b145b92915050565b60008181526002602052604081206006015460ff166003145b8015610b655750600082815260026020526040902060060154610100900460ff16155b8015610b23575050600090815260026020526040902060050154421090565b60095460009060ff16610bb25760405162461bcd60e51b8152600401610ba990614de2565b60405180910390fd5b50630a85bd0160e11b95945050505050565b610bcc61206f565b610bd46120c9565b565b610bde61206f565b610bd4600061211e565b6000816001600160a01b0316610c54610c4e856040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b86612170565b6001600160a01b03161490505b9392505050565b610c7061206f565b610c7b828483612194565b505050565b610c8861206f565b610bd46122aa565b600060ff8216600314801590610caa575060ff8216600514155b8015610cba575060ff8216600414155b8015610b23575060ff82166006141592915050565b60026000541415610cf25760405162461bcd60e51b8152600401610ba990614e19565b6002600055610cff6122ed565b60005b8151811015610da7576000828281518110610d1f57610d1f614e50565b6020026020010151905080600001516001600160a01b03166342842e0e338684602001516040518463ffffffff1660e01b8152600401610d6193929190614e66565b600060405180830381600087803b158015610d7b57600080fd5b505af1158015610d8f573d6000803e3d6000fd5b50505050508080610d9f90614ea0565b915050610d02565b5050600160005550565b60046020818152600093845260408085209091529183529120805460018201546002830154600384015494840180546001600160a01b03909416959294919360ff90931692610dff90614ebb565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2b90614ebb565b8015610e785780601f10610e4d57610100808354040283529160200191610e78565b820191906000526020600020905b815481529060010190602001808311610e5b57829003601f168201915b5050505050905085565b60026000541415610ea55760405162461bcd60e51b8152600401610ba990614e19565b6002600055610eb26122ed565b42856040013511610f055760405162461bcd60e51b815260206004820152601c60248201527f7472616e73616374696f6e20646561646c696e652072656163686564000000006044820152606401610ba9565b60066000610f196040880160208901614683565b6001600160a01b0316815260208101919091526040016000205460ff16610f7a5760405162461bcd60e51b81526020600482015260156024820152743ab735b737bbb71036b0b935b2ba1039b4b3b732b960591b6044820152606401610ba9565b610f92610f8d60c0870160a08801614854565b61233a565b61100582828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604051610fdc9250899150602001615113565b604051602081830303815290604052805190602001208760200160208101906106919190614683565b6110495760405162461bcd60e51b815260206004820152601560248201527437b33332b91039b4b3b730ba3ab9329032b93937b960591b6044820152606401610ba9565b61105c6107b060c0870160a08801614854565b1561117c57600086604051602001611074919061522d565b60408051601f19818403018152919052805160208201209091508635146110dd5760405162461bcd60e51b815260206004820152601d60248201527f696e74656e74696f6e206861736820646f6573206e6f74206d617463680000006044820152606401610ba9565b61112e85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250508451602080870191909120925061069191508b018b614683565b61117a5760405162461bcd60e51b815260206004820152601960248201527f696e74656e74696f6e207369676e6174757265206572726f72000000000000006044820152606401610ba9565b505b600161118e60c0870160a08801614854565b60ff161415611275576111af6111aa60e0870160c08801614683565b61238c565b60016111c160e0880160c08901614854565b60ff16146112115760405162461bcd60e51b815260206004820152601f60248201527f696e74656e742e6b696e642073686f756c64206265204b494e445f53454c4c006044820152606401610ba9565b61127060808601356112266020890189614683565b61123360208a018a6152cc565b61124360608c0160408d01614683565b60608c013560808d013561125d60e08e0160c08f01614683565b61126b6101408f018f615315565b6123d3565b6116a2565b600261128760c0870160a08801614854565b60ff161415611364576112a36111aa60e0870160c08801614683565b60026112b560e0880160c08901614854565b60ff16146113055760405162461bcd60e51b815260206004820152601e60248201527f696e74656e742e6b696e642073686f756c64206265204b494e445f42555900006044820152606401610ba9565b611270608086013561131a6020890189614683565b61132a60e0890160c08a01614683565b61133760208b018b6152cc565b61134760608d0160408e01614683565b60608d013560808e013561135f6101408f018f615315565b6126cd565b600361137660c0870160a08801614854565b60ff1614156113da576113926111aa60e0870160c08801614683565b61127060808601356113aa60e0880160c08901614683565b6113bb610100890160e08a01614683565b6101008901356113cf6101608b018b6152cc565b8b6101800135612983565b60046113ec60c0870160a08801614854565b60ff161415611433576114086111aa60e0870160c08801614683565b611270608086013561142060e0880160c08901614683565b61142e610140890189615315565b612c87565b600561144560c0870160a08801614854565b60ff16141561145b576112708560800135612e5c565b600661146d60c0870160a08801614854565b60ff161415611483576112708560800135612f56565b600761149560c0870160a08801614854565b60ff16141561157b576114b16111aa60e0870160c08801614683565b60036114c360e0880160c08901614854565b60ff161461151e5760405162461bcd60e51b815260206004820152602260248201527f696e74656e742e6b696e642073686f756c64206265204b494e445f415543544960448201526127a760f11b6064820152608401610ba9565b61127060808601356115336020890189614683565b61154060208a018a6152cc565b61155060608c0160408d01614683565b60608c013560808d013561156a60e08e0160c08f01614683565b8d61010001358e6101200135613167565b600861158d60c0870160a08801614854565b60ff1614156115b15761127060808601356115ac610140880188615315565b6137e4565b60096115c360c0870160a08801614854565b60ff16141561166d576115df6111aa60e0870160c08801614683565b6115ec6020870187614683565b6001600160a01b031661160560e0870160c08801614683565b6001600160a01b0316146116525760405162461bcd60e51b81526020600482015260146024820152731bdb9b1e481cd95b1b195c8818d85b8818d85b1b60621b6044820152606401610ba9565b6112706080860135611668610140880188615315565b613840565b60405162461bcd60e51b815260206004820152600a602482015269696d706f737369626c6560b01b6044820152606401610ba9565b5050600160005550505050565b60095460009060ff166116d45760405162461bcd60e51b8152600401610ba990614de2565b5063bc197c8160e01b98975050505050505050565b600081815260026020819052604082206006015460ff1614610b42565b600260005414156117295760405162461bcd60e51b8152600401610ba990614e19565b60026000556117366122ed565b60005b81811015610da75761176283838381811061175657611756614e50565b9050602002013561396f565b8061176c81614ea0565b915050611739565b61177c61206f565b61179b8260009081526002602052604090206006015460ff1660031490565b6117d55760405162461bcd60e51b815260206004820152600b60248201526a3737ba1030bab1ba34b7b760a91b6044820152606401610ba9565b600082815260026020526040902060060154610100900460ff16156118275760405162461bcd60e51b81526020600482015260086024820152673737ba1037b832b760c11b6044820152606401610ba9565b60008281526002602052604090208161185457805461185490849030906001600160a01b031660006139f4565b60028101546001820154600483015461187a926001600160a01b03908116921690612194565b60068101805461ff0019166102001790556040518390600080516020615848833981519152906118ab9084906153b2565b60405180910390a2505050565b600260005414156118db5760405162461bcd60e51b8152600401610ba990614e19565b60026000556118e86122ed565b4282604001511161192e5760405162461bcd60e51b815260206004820152601060248201526f191958591b1a5b99481c995858da195960821b6044820152606401610ba9565b6119638183604051602001611943919061546d565b604051602081830303815290604052805190602001208460200151610be8565b6119a15760405162461bcd60e51b815260206004820152600f60248201526e39b4b3b730ba3ab9329032b93937b960891b6044820152606401610ba9565b60005b826080015151811015611a6c57826080015181815181106119c7576119c7614e50565b6020026020010151600001516001600160a01b03166342842e0e338560200151866080015185815181106119fd576119fd614e50565b6020026020010151602001516040518463ffffffff1660e01b8152600401611a2793929190614e66565b600060405180830381600087803b158015611a4157600080fd5b505af1158015611a55573d6000803e3d6000fd5b505050508080611a6490614ea0565b9150506119a4565b5060005b826060015151811015611b385782606001518181518110611a9357611a93614e50565b6020026020010151600001516001600160a01b03166342842e0e84602001513386606001518581518110611ac957611ac9614e50565b6020026020010151602001516040518463ffffffff1660e01b8152600401611af393929190614e66565b600060405180830381600087803b158015611b0d57600080fd5b505af1158015611b21573d6000803e3d6000fd5b505050508080611b3090614ea0565b915050611a70565b507f92060d15ec9a14885865b744d2efb1fff3cab53411058a530f51d480288a864c828233604051611b6c93929190615480565b60405180910390a150506001600055565b60095460009060ff16611ba25760405162461bcd60e51b8152600401610ba990614de2565b5063f23a6e6160e01b9695505050505050565b611bbd61206f565b6001600160a01b038116611c225760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ba9565b611c2b8161211e565b50565b611c3661206f565b8015611c61576001600160a01b0382166000908152600660205260409020805460ff19169055611c85565b6001600160a01b0382166000908152600660205260409020805460ff191660011790555b604080516001600160a01b038416815282151560208201527f90d56af4745c314d9b45054b55dc973378c558c1ad1554bccc70d39aa63a2cc5910160405180910390a15050565b60008281526002602052604081206006015460ff16611d1c5760405162461bcd60e51b815260206004820152600c60248201526b6e6f20696e76656e746f727960a01b6044820152606401610ba9565b60005b6000848152600560205260409020548110156120655760008481526004602090815260408083208484529091529020600381015460ff16611d5f57612052565b600381015460ff1660011415611f3c57805460018201546040516331a9108f60e11b81526001600160a01b03928316928716918391636352211e91611daa9160040190815260200190565b60206040518083038186803b158015611dc257600080fd5b505afa158015611dd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfa91906154be565b6001600160a01b0316148015611f205750600182015460405163020604bf60e21b815230916001600160a01b0384169163081812fc91611e409160040190815260200190565b60206040518083038186803b158015611e5857600080fd5b505afa158015611e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9091906154be565b6001600160a01b03161480611f20575060405163e985e9c560e01b81526001600160a01b03868116600483015230602483015282169063e985e9c5906044015b60206040518083038186803b158015611ee857600080fd5b505afa158015611efc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2091906154db565b15611f2a57611f36565b60009350505050610b23565b50612052565b600381015460ff166002141561201657805460028201546001830154604051627eeac760e11b81526001600160a01b0388811660048301526024820192909252921691829062fdd58e9060440160206040518083038186803b158015611fa157600080fd5b505afa158015611fb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd991906154f8565b10158015611f20575060405163e985e9c560e01b81526001600160a01b03868116600483015230602483015282169063e985e9c590604401611ed0565b60405162461bcd60e51b81526020600482015260116024820152703ab739bab83837b93a32b2103a37b5b2b760791b6044820152606401610ba9565b508061205d81614ea0565b915050611d1f565b5060019392505050565b6001546001600160a01b03163314610bd45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ba9565b6120d1613bed565b6001805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080600061217f8585613c3d565b9150915061218c81613c83565b509392505050565b8061219e57505050565b6001600160a01b0382166121f45760405162461bcd60e51b815260206004820152601d60248201527f63616e6e6f74207472616e7366657220746f20616464726573732830290000006044820152606401610ba9565b6001600160a01b03831661229657604051632e1a7d4d60e01b8152600481018290526001602960991b0190632e1a7d4d90602401600060405180830381600087803b15801561224257600080fd5b505af1158015612256573d6000803e3d6000fd5b50506040516001600160a01b038516925083156108fc02915083906000818181858888f19350505050158015612290573d6000803e3d6000fd5b50505050565b610c7b6001600160a01b0384168383613e3e565b6122b26122ed565b6001805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121013390565b600154600160a01b900460ff1615610bd45760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610ba9565b60ff81161580159061234f5750600a60ff8216105b611c2b5760405162461bcd60e51b815260206004820152600e60248201526d696e76616c6964206f70636f646560901b6044820152606401610ba9565b6001600160a01b0381163314611c2b5760405162461bcd60e51b815260206004820152600c60248201526b3bb937b7339039b2b73232b960a11b6044820152606401610ba9565b60008981526002602052604090206006015460ff16156124245760405162461bcd60e51b815260206004820152600c60248201526b191d5c1b1a58d85d19481a5960a21b6044820152606401610ba9565b42831161246c5760405162461bcd60e51b81526020600482015260166024820152751cd95b1b081a185cc8185b1c9958591e48195b99195960521b6044820152606401610ba9565b612477898888613ea1565b61248489898460016139f4565b6001600160a01b038516612511573484146124b15760405162461bcd60e51b8152600401610ba990615511565b6001602960991b016001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156124f357600080fd5b505af1158015612507573d6000803e3d6000fd5b5050505050612526565b6125266001600160a01b038616833087613f53565b604051806101000160405280896001600160a01b03168152602001836001600160a01b03168152602001866001600160a01b03168152602001858152602001858152602001848152602001600160ff168152602001600160ff16815250600260008b815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff021916908360ff16021790555060e08201518160060160016101000a81548160ff021916908360ff16021790555090505088600080516020615848833981519152600260008c81526020019081526020016000206040516126b091906153b2565b60405180910390a26126c28982613f74565b505050505050505050565b60008981526002602052604090206006015460ff161561272f5760405162461bcd60e51b815260206004820152601860248201527f696e76656e746f727920616c72656164792065786973747300000000000000006044820152606401610ba9565b4282116127765760405162461bcd60e51b8152602060048201526015602482015274189d5e481a185cc8185b1c9958591e48195b991959605a1b6044820152606401610ba9565b6001600160a01b0384166127cc5760405162461bcd60e51b815260206004820152601760248201527f63616e6e6f7420757365206e617469766520746f6b656e0000000000000000006044820152606401610ba9565b6127d7898787613ea1565b6127e489888a60016139f4565b6127f96001600160a01b038516893086613f53565b604051806101000160405280886001600160a01b03168152602001896001600160a01b03168152602001856001600160a01b03168152602001848152602001848152602001838152602001600260ff168152602001600160ff16815250600260008b815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff021916908360ff16021790555060e08201518160060160016101000a81548160ff021916908360ff16021790555090505088600080516020615848833981519152600260008c81526020019081526020016000206040516126b091906153b2565b60008781526002602052604090206006015460ff16156129e55760405162461bcd60e51b815260206004820152601a60248201527f696e76656e746f7279496420616c7265616479206578697374730000000000006044820152606401610ba9565b428111612a3e5760405162461bcd60e51b815260206004820152602160248201527f646561646c696e65206d7573742062652067726561746572207468616e206e6f6044820152607760f81b6064820152608401610ba9565b612a49878484613ea1565b6001600160a01b038516612ad657348414612a765760405162461bcd60e51b8152600401610ba990615511565b6001602960991b016001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ab857600080fd5b505af1158015612acc573d6000803e3d6000fd5b5050505050612aeb565b612aeb6001600160a01b038616873087613f53565b60405180610100016040528060006001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b03168152602001858152602001858152602001828152602001600260ff168152602001600060ff168152506002600089815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff021916908360ff16021790555060e08201518160060160016101000a81548160ff021916908360ff16021790555090505086600080516020615848833981519152600260008a8152602001908152602001600020604051612c7691906153b2565b60405180910390a250505050505050565b60008381526002602081905260409091206006015460ff1614612ce05760405162461bcd60e51b81526020600482015260116024820152701a5908191bd95cc81b9bdd08195e1a5cdd607a1b6044820152606401610ba9565b60008381526002602052604090206006810154610100900460ff1615612d335760405162461bcd60e51b81526020600482015260086024820152673737ba1037b832b760c11b6044820152606401610ba9565b612d3d8484611ccc565b612d7f5760405162461bcd60e51b8152602060048201526013602482015272189d5b991b19481b9bdd08185c1c1c9bdd9959606a1b6044820152606401610ba9565b6000848152600260205260409020600501544210612dd35760405162461bcd60e51b8152602060048201526011602482015270189d5e481bd999995c88195e1c1a5c9959607a1b6044820152606401610ba9565b60068101805461ff00191661010017905580546001600160a01b038085166001600160a01b0319909216919091178255600182810154612e1a9287928792909116906139f4565b8360008051602061584883398151915260026000878152602001908152602001600020604051612e4a91906153b2565b60405180910390a26122908483613f74565b60008181526002602081905260409091206006015460ff16148015612e985750600081815260026020526040902060060154610100900460ff16155b612ed35760405162461bcd60e51b815260206004820152600c60248201526b6e6f74206f70656e2062757960a01b6044820152606401610ba9565b600081815260026020819052604090912060068101805461ff0019166102001790559081015460018201546004830154612f1a926001600160a01b03908116921690612194565b8160008051602061584883398151915260026000858152602001908152602001600020604051612f4a91906153b2565b60405180910390a25050565b33612f778260009081526002602081905260409091206006015460ff161490565b8015612f9a5750600082815260026020526040902060060154610100900460ff16155b612fd55760405162461bcd60e51b815260206004820152600c60248201526b6e6f74206f70656e2062757960a01b6044820152606401610ba9565b60005b6000838152600560205260409020548110156131595760008381526004602090815260408083208484529091529020600381015460ff16600114156130fe57805460018201546040516331a9108f60e11b81526001600160a01b03928316928616918391636352211e916130529160040190815260200190565b60206040518083038186803b15801561306a57600080fd5b505afa15801561307e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a291906154be565b6001600160a01b0316146130f85760405162461bcd60e51b815260206004820152601960248201527f63616c6c657220646f6573206e6f74206f776e20746f6b656e000000000000006044820152606401610ba9565b50613146565b60405162461bcd60e51b815260206004820152601b60248201527f63616e6e6f742072656a656374206e6f6e2d37323120746f6b656e00000000006044820152606401610ba9565b508061315181614ea0565b915050612fd8565b5061316382612e5c565b5050565b6009805460ff19166001179055620f424081106131c65760405162461bcd60e51b815260206004820152601760248201527f696e63656e746976655261746520746f6f206c617267650000000000000000006044820152606401610ba9565b6001600160a01b038616613253573482146131f35760405162461bcd60e51b8152600401610ba990615511565b6001602960991b016001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561323557600080fd5b505af1158015613249573d6000803e3d6000fd5b5050505050613268565b6132686001600160a01b038716843085613f53565b6132878a60009081526002602052604090206006015460ff1660031490565b1561350b5760008a815260026020526040902080546001600160a01b038b81169116146132ee5760405162461bcd60e51b81526020600482015260156024820152740e6cad8d8cae440c8decae640dcdee840dac2e8c6d605b1b6044820152606401610ba9565b6006810154610100900460ff161561333b5760405162461bcd60e51b815260206004820152601060248201526f30bab1ba34b7b7103737ba1037b832b760811b6044820152606401610ba9565b4281600501541161337e5760405162461bcd60e51b815260206004820152600d60248201526c185d58dd1a5bdb88195b991959609a1b6044820152606401610ba9565b620f42406007548260030154613394919061553d565b61339e919061555c565b81600301546133ad919061557e565b8310156133f05760405162461bcd60e51b815260206004820152601160248201527062696420707269636520746f6f206c6f7760781b6044820152606401610ba9565b6000620f4240613400848661553d565b61340a919061555c565b60018301546004840154919250613437918a916001600160a01b03169061343290859061557e565b612194565b600182015460048301548d917fa48bcf3362c21033397c03b92fb367d1962ba13b5bde0dfe491f9d88abb59e3f916001600160a01b039091169061347c90859061557e565b604080516001600160a01b03909316835260208301919091520160405180910390a26001820180546001600160a01b0319166001600160a01b038716179055600382018490556134cc8185615596565b600483015560058201546008546134e3904261557e565b10613504576008548260050160008282546134fe919061557e565b90915550505b5050613796565b60008a81526002602052604090206006015460ff161561356d5760405162461bcd60e51b815260206004820152601860248201527f696e76656e746f7279206973206e6f742061756374696f6e00000000000000006044820152606401610ba9565b848210156135bd5760405162461bcd60e51b815260206004820152601a60248201527f626964206c6f776572207468616e2073746172742070726963650000000000006044820152606401610ba9565b4284116135fc5760405162461bcd60e51b815260206004820152600d60248201526c185d58dd1a5bdb88195b991959609a1b6044820152606401610ba9565b6008548490819061360d904261557e565b106136225760085461361f908261557e565b90505b6040518061010001604052808b6001600160a01b03168152602001856001600160a01b03168152602001886001600160a01b03168152602001848152602001848152602001828152602001600360ff168152602001600060ff16815250600260008d815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff021916908360ff16021790555060e08201518160060160016101000a81548160ff021916908360ff1602179055509050506137878b8a8a613ea1565b6137948b8b3060006139f4565b505b89600080516020615848833981519152600260008d81526020019081526020016000206040516137c691906153b2565b60405180910390a250506009805460ff191690555050505050505050565b600082815260026020526040902060050154421161383a5760405162461bcd60e51b815260206004820152601360248201527261756374696f6e207374696c6c20676f696e6760681b6044820152606401610ba9565b61316382825b61385f8260009081526002602052604090206006015460ff1660031490565b6138a45760405162461bcd60e51b8152602060048201526016602482015275185d58dd1a5bdb88191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610ba9565b600082815260026020526040902060060154610100900460ff16156138fe5760405162461bcd60e51b815260206004820152601060248201526f30bab1ba34b7b7103737ba1037b832b760811b6044820152606401610ba9565b6000828152600260205260409081902060068101805461ff001916610100179055905183906000805160206158488339815191529061393e9084906153b2565b60405180910390a260018082015461396591859130916001600160a01b03909116906139f4565b610c7b8383613f74565b600081815260026020526040902060018101546001600160a01b03163314806139a957506000828152600260205260409020600501544210155b6139eb5760405162461bcd60e51b815260206004820152601360248201527231b0b63632b91034b9903737ba10313abcb2b960691b6044820152606401610ba9565b61316382612e5c565b600084815260056020526040812054905b81811015613be55760008681526004602090815260408083208484529091529020600381015460ff16613b1c578315613b17576001600160a01b03851615801590613a5957506001600160a01b0385163014155b613ab15760405162461bcd60e51b8152602060048201526024808201527f6d696e74207461726765742063616e6e6f74206265207a65726f206f72206d616044820152631c9ad95d60e21b6064820152608401610ba9565b805460405163b510391f60e01b81526001600160a01b039091169063b510391f90613ae4908890600480870191016155ad565b600060405180830381600087803b158015613afe57600080fd5b505af1158015613b12573d6000803e3d6000fd5b505050505b613bd2565b600381015460ff1660011415613b625780546001820154604051632142170760e11b81526001600160a01b03909216916342842e0e91613ae4918a918a91600401614e66565b600381015460ff166002141561201657805460018201546002830154604051637921219560e11b81526001600160a01b038a8116600483015289811660248301526044820193909352606481019190915260a06084820152600060a482015291169063f242432a9060c401613ae4565b5080613bdd81614ea0565b915050613a05565b505050505050565b600154600160a01b900460ff16610bd45760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610ba9565b600080825160411415613c745760208301516040840151606085015160001a613c688782858561412c565b94509450505050613c7c565b506000905060025b9250929050565b6000816004811115613c9757613c97615642565b1415613ca05750565b6001816004811115613cb457613cb4615642565b1415613d025760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610ba9565b6002816004811115613d1657613d16615642565b1415613d645760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610ba9565b6003816004811115613d7857613d78615642565b1415613dd15760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610ba9565b6004816004811115613de557613de5615642565b1415611c2b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610ba9565b6040516001600160a01b038316602482015260448101829052610c7b90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614219565b80613edd5760405162461bcd60e51b815260206004820152600c60248201526b656d7074792062756e646c6560a01b6044820152606401610ba9565b60008381526005602052604081208290555b8181101561229057828282818110613f0957613f09614e50565b9050602002810190613f1b9190615658565b60008581526004602090815260408083208584529091529020613f3e8282615774565b50819050613f4b81614ea0565b915050613eef565b612290846323b872dd60e01b858585604051602401613e6a93929190614e66565b6000828152600260205260409020600681015460ff1615158015613fa457506006810154610100900460ff166001145b613ff05760405162461bcd60e51b815260206004820152601b60248201527f6e6f20696e76656e746f7279206f72207374617465206572726f7200000000006044820152606401610ba9565b61400383613ffe84806152cc565b6142eb565b60038101546000620f424061401c60208601358461553d565b614026919061555c565b90506000620f424061403c60408701358561553d565b614046919061555c565b90506000620f424061405c60608801358661553d565b614066919061555c565b90506000818385886004015461407c9190615596565b6140869190615596565b6140909190615596565b600287015487549192506140b1916001600160a01b03918216911683612194565b600286015460018701546140d2916001600160a01b03908116911684612194565b60028601546140fa906001600160a01b03166140f460a08a0160808b01614683565b86612194565b6002860154614122906001600160a01b031661411c60c08a0160a08b01614683565b85612194565b5050505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156141635750600090506003614210565b8460ff16601b1415801561417b57508460ff16601c14155b1561418c5750600090506004614210565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156141e0573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661420957600060019250925050614210565b9150600090505b94509492505050565b600061426e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166143c59092919063ffffffff16565b805190915015610c7b578080602001905181019061428c91906154db565b610c7b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610ba9565b60005b8181101561229057600083838381811061430a5761430a614e50565b60209081029290920135600081815260039093526040909220549192505060ff161561436f5760405162461bcd60e51b815260206004820152601460248201527318dbdd5c1bdb88185b1c9958591e481cdc195b9d60621b6044820152606401610ba9565b600081815260036020526040808220805460ff1916600117905551829187917f6aa71aa6b7aa6036ace4e4ceefbab7d89c4afb7fcfa1a3680499d7b37d32c82f9190a350806143bd81614ea0565b9150506142ee565b60606143d484846000856143dc565b949350505050565b60608247101561443d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610ba9565b6001600160a01b0385163b6144945760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ba9565b600080866001600160a01b031685876040516144b09190615822565b60006040518083038185875af1925050503d80600081146144ed576040519150601f19603f3d011682016040523d82523d6000602084013e6144f2565b606091505b509150915061450282828661450d565b979650505050505050565b6060831561451c575081610c61565b82511561452c5782518084602001fd5b8160405162461bcd60e51b8152600401610ba99190615834565b6000806040838503121561455957600080fd5b50508035926020909101359150565b60006020828403121561457a57600080fd5b81356001600160e01b031981168114610c6157600080fd5b6000602082840312156145a457600080fd5b5035919050565b6001600160a01b0381168114611c2b57600080fd5b80356145cb816145ab565b919050565b60008083601f8401126145e257600080fd5b5081356001600160401b038111156145f957600080fd5b602083019150836020828501011115613c7c57600080fd5b60008060008060006080868803121561462957600080fd5b8535614634816145ab565b94506020860135614644816145ab565b93506040860135925060608601356001600160401b0381111561466657600080fd5b614672888289016145d0565b969995985093965092949392505050565b60006020828403121561469557600080fd5b8135610c61816145ab565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156146d8576146d86146a0565b60405290565b60405160a081016001600160401b03811182821017156146d8576146d86146a0565b604051601f8201601f191681016001600160401b0381118282101715614728576147286146a0565b604052919050565b600082601f83011261474157600080fd5b81356001600160401b0381111561475a5761475a6146a0565b61476d601f8201601f1916602001614700565b81815284602083860101111561478257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000606084860312156147b457600080fd5b83356001600160401b038111156147ca57600080fd5b6147d686828701614730565b9350506020840135915060408401356147ee816145ab565b809150509250925092565b60008060006060848603121561480e57600080fd5b8335614819816145ab565b92506020840135614829816145ab565b929592945050506040919091013590565b60ff81168114611c2b57600080fd5b80356145cb8161483a565b60006020828403121561486657600080fd5b8135610c618161483a565b600082601f83011261488257600080fd5b813560206001600160401b0382111561489d5761489d6146a0565b6148ab818360051b01614700565b82815260069290921b840181019181810190868411156148ca57600080fd5b8286015b8481101561491257604081890312156148e75760008081fd5b6148ef6146b6565b81356148fa816145ab565b815281850135858201528352918301916040016148ce565b509695505050505050565b6000806040838503121561493057600080fd5b823561493b816145ab565b915060208301356001600160401b0381111561495657600080fd5b61496285828601614871565b9150509250929050565b60005b8381101561498757818101518382015260200161496f565b838111156122905750506000910152565b600081518084526149b081602086016020860161496c565b601f01601f19169290920160200192915050565b60018060a01b038616815284602082015283604082015260ff8316606082015260a06080820152600061450260a0830184614998565b60006101a08284031215614a0d57600080fd5b50919050565b60008060008060008060808789031215614a2c57600080fd5b86356001600160401b0380821115614a4357600080fd5b9088019060e0828b031215614a5757600080fd5b90965060208801359080821115614a6d57600080fd5b614a798a838b016149fa565b96506040890135915080821115614a8f57600080fd5b614a9b8a838b016145d0565b90965094506060890135915080821115614ab457600080fd5b50614ac189828a016145d0565b979a9699509497509295939492505050565b60008083601f840112614ae557600080fd5b5081356001600160401b03811115614afc57600080fd5b6020830191508360208260051b8501011115613c7c57600080fd5b60008060008060008060008060a0898b031215614b3357600080fd5b8835614b3e816145ab565b97506020890135614b4e816145ab565b965060408901356001600160401b0380821115614b6a57600080fd5b614b768c838d01614ad3565b909850965060608b0135915080821115614b8f57600080fd5b614b9b8c838d01614ad3565b909650945060808b0135915080821115614bb457600080fd5b50614bc18b828c016145d0565b999c989b5096995094979396929594505050565b60008060208385031215614be857600080fd5b82356001600160401b03811115614bfe57600080fd5b614c0a85828601614ad3565b90969095509350505050565b8015158114611c2b57600080fd5b60008060408385031215614c3757600080fd5b823591506020830135614c4981614c16565b809150509250929050565b60008060408385031215614c6757600080fd5b82356001600160401b0380821115614c7e57600080fd5b9084019060a08287031215614c9257600080fd5b614c9a6146de565b823581526020830135614cac816145ab565b602082015260408381013590820152606083013582811115614ccd57600080fd5b614cd988828601614871565b606083015250608083013582811115614cf157600080fd5b614cfd88828601614871565b60808301525093506020850135915080821115614d1957600080fd5b5061496285828601614730565b60008060008060008060a08789031215614d3f57600080fd5b8635614d4a816145ab565b95506020870135614d5a816145ab565b9450604087013593506060870135925060808701356001600160401b03811115614d8357600080fd5b614ac189828a016145d0565b60008060408385031215614da257600080fd5b8235614dad816145ab565b91506020830135614c4981614c16565b60008060408385031215614dd057600080fd5b823591506020830135614c49816145ab565b6020808252601f908201527f63616e206e6f74207472616e7366657220746f6b656e206469726563746c7900604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b600052601160045260246000fd5b6000600019821415614eb457614eb4614e8a565b5060010190565b600181811c90821680614ecf57607f821691505b60208210811415614a0d57634e487b7160e01b600052602260045260246000fd5b6000823560be19833603018112614f0657600080fd5b90910192915050565b6000808335601e19843603018112614f2657600080fd5b83016020810192503590506001600160401b03811115614f4557600080fd5b8060051b3603831315613c7c57600080fd5b6000614f638283614f0f565b60c080865285018190526001600160fb1b03811115614f8157600080fd5b60051b808260e087013760e081860101915050600081526020830135602085015260408301356040850152606083013560608501526080830135614fc4816145ab565b6001600160a01b03166080850152614fde60a084016145c0565b6001600160a01b03811660a0860152509392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b81835260006020808501808196508560051b810191508460005b878110156151065782840389528135609e1988360301811261505957600080fd5b870160a08135615068816145ab565b6001600160a01b031686528187013587870152604080830135908701526060808301356150948161483a565b60ff169087015260808281013536849003601e190181126150b457600080fd5b830180356001600160401b038111156150cc57600080fd5b8036038513156150db57600080fd5b83838a01526150ef848a01828c8501614ff5565b9d8a019d9850505093870193505050600101615038565b5091979650505050505050565b6020815281356020820152600061512c602084016145c0565b6001600160a01b0381166040840152506040830135606083015260608301356080830152608083013560a083015261516660a08401614849565b60ff811660c08401525061517c60c084016145c0565b6001600160a01b03811660e08401525061519860e084016145c0565b6101006151af818501836001600160a01b03169052565b610120915080850135828501525061014081850135818501526151d481860186614ef0565b9150506101a061016081818601526151f06101c0860184614f57565b92506151fe81870187614f0f565b9150610180601f19878603018188015261521985848461501e565b970135959092019490945250929392505050565b602081526000823561523e816145ab565b60018060a01b03808216602085015261525a6020860186614f0f565b925060e060408601526152726101008601848361501e565b9250506040850135615283816145ab565b8181166060860152505060608401356080840152608084013560a084015260a084013560c084015260c08401356152b98161483a565b60ff1660e0939093019290925250919050565b6000808335601e198436030181126152e357600080fd5b8301803591506001600160401b038211156152fd57600080fd5b6020019150600581901b3603821315613c7c57600080fd5b6000823560be1983360301811261532b57600080fd5b9190910192915050565b6153578261534a83546001600160a01b031690565b6001600160a01b03169052565b60018101546001600160a01b03908116602084015260028201541660408301526003810154606083015260048101546080830152600581015460a08301526006015460ff80821660c084015260089190911c1660e090910152565b6101008101610b238284615335565b600081518084526020808501945080840160005b8381101561540557815180516001600160a01b0316885283015183880152604090960195908201906001016153d5565b509495945050505050565b8051825260018060a01b036020820151166020830152604081015160408301526000606082015160a0606085015261544b60a08501826153c1565b90506080830151848203608086015261546482826153c1565b95945050505050565b602081526000610c616020830184615410565b6060815260006154936060830186615410565b82810360208401526154a58186614998565b91505060018060a01b0383166040830152949350505050565b6000602082840312156154d057600080fd5b8151610c61816145ab565b6000602082840312156154ed57600080fd5b8151610c6181614c16565b60006020828403121561550a57600080fd5b5051919050565b6020808252601290820152717072696365203d3d206d73672e76616c756560701b604082015260600190565b600081600019048311821515161561555757615557614e8a565b500290565b60008261557957634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561559157615591614e8a565b500190565b6000828210156155a8576155a8614e8a565b500390565b60018060a01b038316815260006020604081840152600084546155cf81614ebb565b80604087015260606001808416600081146155f1576001811461560557615633565b60ff19851689840152608089019550615633565b896000528660002060005b8581101561562b5781548b8201860152908301908801615610565b8a0184019650505b50939998505050505050505050565b634e487b7160e01b600052602160045260246000fd5b60008235609e1983360301811261532b57600080fd5b601f821115610c7b57600081815260208120601f850160051c810160208610156156955750805b601f850160051c820191505b81811015613be5578281556001016156a1565b6001600160401b038311156156cb576156cb6146a0565b6156df836156d98354614ebb565b8361566e565b6000601f84116001811461571357600085156156fb5750838201355b600019600387901b1c1916600186901b17835561576d565b600083815260209020601f19861690835b828110156157445786850135825560209485019460019092019101615724565b50868210156157615760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b813561577f816145ab565b81546001600160a01b0319166001600160a01b039190911617815560208201356001820155604082013560028201556003810160608301356157c08161483a565b815460ff191660ff91909116179055608082013536839003601e190181126157e757600080fd5b820180356001600160401b038111156157ff57600080fd5b60208201915080360382131561581457600080fd5b6122908183600486016156b4565b6000825161532b81846020870161496c565b602081526000610c61602083018461499856fe5beea7b3b87c573953fec05007114d17712e5775d364acc106d8da9e74849033a26469706673582212200b12bde3d8b5f1b5206191653f706969ba31b3859922a2251cd03b4762366abc64736f6c63430008090033", + ), + storage: storage{ + // ReentrancyGuard : uint256 private _status + "0x00": "0x1", + // Ownable : address private _owner + "0x01": "0x079a889eB69013d451EcF45377258948116e2b3e", + }, + }, + { + contract: multicall, + // commit: https://github.com/oasysgames/oasys-ecosystem-contract/blob/b9d43020001d9c8ae5d8a0e571726e378314ce9b/contracts/makerdao/Multicall.sol + code: mustDecodeCode( + "0x608060405234801561001057600080fd5b50600436106100885760003560e01c806372425d9d1161005b57806372425d9d146100e657806386d516e8146100ec578063a8b0574e146100f2578063ee82ac5e1461010057600080fd5b80630f28c97d1461008d578063252dba42146100a257806327e86d6e146100c35780634d2301cc146100cb575b600080fd5b425b6040519081526020015b60405180910390f35b6100b56100b03660046102f1565b610112565b60405161009992919061047f565b61008f610252565b61008f6100d9366004610501565b6001600160a01b03163190565b4461008f565b4561008f565b604051418152602001610099565b61008f61010e366004610523565b4090565b8051439060609067ffffffffffffffff81111561013157610131610265565b60405190808252806020026020018201604052801561016457816020015b606081526020019060019003908161014f5790505b50905060005b835181101561024c576000808583815181106101885761018861053c565b6020026020010151600001516001600160a01b03168684815181106101af576101af61053c565b6020026020010151602001516040516101c89190610552565b6000604051808303816000865af19150503d8060008114610205576040519150601f19603f3d011682016040523d82523d6000602084013e61020a565b606091505b50915091508161021957600080fd5b8084848151811061022c5761022c61053c565b60200260200101819052505050808061024490610584565b91505061016a565b50915091565b600061025f60014361059f565b40905090565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561029e5761029e610265565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156102cd576102cd610265565b604052919050565b80356001600160a01b03811681146102ec57600080fd5b919050565b6000602080838503121561030457600080fd5b823567ffffffffffffffff8082111561031c57600080fd5b818501915085601f83011261033057600080fd5b81358181111561034257610342610265565b8060051b6103518582016102a4565b918252838101850191858101908984111561036b57600080fd5b86860192505b83831015610442578235858111156103895760008081fd5b86016040601f19828d0381018213156103a25760008081fd5b6103aa61027b565b6103b58b85016102d5565b815282840135898111156103c95760008081fd5b8085019450508d603f8501126103df5760008081fd5b8a840135898111156103f3576103f3610265565b6104038c84601f840116016102a4565b92508083528e8482870101111561041a5760008081fd5b808486018d85013760009083018c0152808b0191909152845250509186019190860190610371565b9998505050505050505050565b60005b8381101561046a578181015183820152602001610452565b83811115610479576000848401525b50505050565b600060408201848352602060408185015281855180845260608601915060608160051b870101935082870160005b828110156104f357878603605f19018452815180518088526104d481888a0189850161044f565b601f01601f1916969096018501955092840192908401906001016104ad565b509398975050505050505050565b60006020828403121561051357600080fd5b61051c826102d5565b9392505050565b60006020828403121561053557600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b6000825161056481846020870161044f565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b60006000198214156105985761059861056e565b5060010190565b6000828210156105b1576105b161056e565b50039056fea26469706673582212208de8f38e3d3ba940d25e5a11f4e48a1ce427d474288742e0c5d088cc2c690c9764736f6c63430008090033", + ), + }, + { + contract: multicall2, + // commit: https://github.com/oasysgames/oasys-ecosystem-contract/blob/b9d43020001d9c8ae5d8a0e571726e378314ce9b/contracts/makerdao/Multicall2.sol + code: mustDecodeCode( + "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806372425d9d1161007157806372425d9d1461013a57806386d516e814610140578063a8b0574e14610146578063bce38bd714610154578063c3077fa914610174578063ee82ac5e1461018757600080fd5b80630f28c97d146100b9578063252dba42146100ce57806327e86d6e146100ef578063399542e9146100f757806342cbb15c146101195780634d2301cc1461011f575b600080fd5b425b6040519081526020015b60405180910390f35b6100e16100dc3660046106ea565b610199565b6040516100c5929190610783565b6100bb610321565b61010a6101053660046107ed565b610334565b6040516100c5939291906108aa565b436100bb565b6100bb61012d3660046108d2565b6001600160a01b03163190565b446100bb565b456100bb565b6040514181526020016100c5565b6101676101623660046107ed565b61034c565b6040516100c591906108f4565b61010a6101823660046106ea565b610506565b6100bb610195366004610907565b4090565b8051439060609067ffffffffffffffff8111156101b8576101b8610523565b6040519080825280602002602001820160405280156101eb57816020015b60608152602001906001900390816101d65790505b50905060005b835181101561031b5760008085838151811061020f5761020f610920565b6020026020010151600001516001600160a01b031686848151811061023657610236610920565b60200260200101516020015160405161024f9190610936565b6000604051808303816000865af19150503d806000811461028c576040519150601f19603f3d011682016040523d82523d6000602084013e610291565b606091505b5091509150816102e85760405162461bcd60e51b815260206004820181905260248201527f4d756c746963616c6c206167677265676174653a2063616c6c206661696c656460448201526064015b60405180910390fd5b808484815181106102fb576102fb610920565b60200260200101819052505050808061031390610968565b9150506101f1565b50915091565b600061032e600143610983565b40905090565b4380406060610343858561034c565b90509250925092565b6060815167ffffffffffffffff81111561036857610368610523565b6040519080825280602002602001820160405280156103ae57816020015b6040805180820190915260008152606060208201528152602001906001900390816103865790505b50905060005b82518110156104ff576000808483815181106103d2576103d2610920565b6020026020010151600001516001600160a01b03168584815181106103f9576103f9610920565b6020026020010151602001516040516104129190610936565b6000604051808303816000865af19150503d806000811461044f576040519150601f19603f3d011682016040523d82523d6000602084013e610454565b606091505b509150915085156104b657816104b65760405162461bcd60e51b815260206004820152602160248201527f4d756c746963616c6c32206167677265676174653a2063616c6c206661696c656044820152601960fa1b60648201526084016102df565b60405180604001604052808315158152602001828152508484815181106104df576104df610920565b6020026020010181905250505080806104f790610968565b9150506103b4565b5092915050565b6000806060610516600185610334565b9196909550909350915050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561055c5761055c610523565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561058b5761058b610523565b604052919050565b80356001600160a01b03811681146105aa57600080fd5b919050565b6000601f83818401126105c157600080fd5b8235602067ffffffffffffffff808311156105de576105de610523565b8260051b6105ed838201610562565b938452868101830193838101908986111561060757600080fd5b84890192505b858310156106dd578235848111156106255760008081fd5b89016040601f19828d03810182131561063e5760008081fd5b610646610539565b610651898501610593565b815282840135888111156106655760008081fd5b8085019450508d603f85011261067b5760008081fd5b888401358881111561068f5761068f610523565b61069e8a848e84011601610562565b92508083528e848287010111156106b55760008081fd5b808486018b85013760009083018a01528089019190915284525050918401919084019061060d565b9998505050505050505050565b6000602082840312156106fc57600080fd5b813567ffffffffffffffff81111561071357600080fd5b61071f848285016105af565b949350505050565b60005b8381101561074257818101518382015260200161072a565b83811115610751576000848401525b50505050565b6000815180845261076f816020860160208601610727565b601f01601f19169290920160200192915050565b600060408201848352602060408185015281855180845260608601915060608160051b870101935082870160005b828110156107df57605f198887030184526107cd868351610757565b955092840192908401906001016107b1565b509398975050505050505050565b6000806040838503121561080057600080fd5b8235801515811461081057600080fd5b9150602083013567ffffffffffffffff81111561082c57600080fd5b610838858286016105af565b9150509250929050565b6000815180845260208085019450848260051b860182860160005b8581101561089d5783830389528151805115158452850151604086850181905261088981860183610757565b9a87019a945050509084019060010161085d565b5090979650505050505050565b8381528260208201526060604082015260006108c96060830184610842565b95945050505050565b6000602082840312156108e457600080fd5b6108ed82610593565b9392505050565b6020815260006108ed6020830184610842565b60006020828403121561091957600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b60008251610948818460208701610727565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b600060001982141561097c5761097c610952565b5060010190565b60008282101561099557610995610952565b50039056fea2646970667358221220d6e6de3466f8d67fbc495bf6e5b50a558b6c659aa91c02374d57fd4ff42dccd964736f6c63430008090033", + ), + }, +} diff --git a/contracts/oasys/deployments4.go b/contracts/oasys/deployments4.go new file mode 100644 index 000000000..35463cacb --- /dev/null +++ b/contracts/oasys/deployments4.go @@ -0,0 +1,37 @@ +package oasys + +var deployments4 = []*deployment{ + { + contract: stakeManager, + // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/2e5de435195ac05e208ce95d654a998cbe0fb3a1/contracts/StakeManager.sol + code: mustDecodeCode("0x6080604052600436106101f95760003560e01c8063724319911161010d578063ad71bd36116100a0578063e1aca3411161006f578063e1aca34114610688578063f3621e43146106a8578063f65a5ed2146106c8578063f8d6b1ab146106e8578063fa52c7d81461070857600080fd5b8063ad71bd36146105d0578063cbc0fac6146105f0578063d1f18ee114610610578063dbd61d871461066857600080fd5b806388325234116100dc57806388325234146105375780639043150b146105725780639168ae721461057a578063ac7475ed146105b057600080fd5b8063724319911461049857806374e2b63c146104c95780637b520aa8146104ee5780637befa74f1461052457600080fd5b80632b42ed8c1161019057806345367f231161015f57806345367f23146103e957806346dfce7b14610409578063485cc955146104385780635efc766e146104585780636b2b33691461047857600080fd5b80632b42ed8c146103405780632b47da521461037157806333f32d78146103a9578063428e8562146103c957600080fd5b8063195afea1116101cc578063195afea11461029d5780631c1b4f3a146102bd5780632168e8b4146102dd578063222263671461030b57600080fd5b806302fb4d85146101fe578063158ef93e146102205780631903cf161461024f578063190b92571461026f575b600080fd5b34801561020a57600080fd5b5061021e610219366004614408565b610777565b005b34801561022c57600080fd5b5060005461023a9060ff1681565b60405190151581526020015b60405180910390f35b34801561025b57600080fd5b5061021e61026a3660046144c6565b61097d565b34801561027b57600080fd5b5061028f61028a366004614570565b610b76565b604051908152602001610246565b3480156102a957600080fd5b5061028f6102b8366004614408565b610b97565b3480156102c957600080fd5b5061028f6102d8366004614570565b610bce565b3480156102e957600080fd5b506102fd6102f8366004614589565b610bde565b6040516102469291906145ef565b34801561031757600080fd5b5061032b610326366004614408565b610cc4565b60408051928352602083019190915201610246565b34801561034c57600080fd5b5061036061035b366004614611565b610d92565b60405161024695949392919061467c565b34801561037d57600080fd5b50600154610391906001600160a01b031681565b6040516001600160a01b039091168152602001610246565b3480156103b557600080fd5b5061028f6103c43660046146dc565b6110df565b3480156103d557600080fd5b5061021e6103e43660046144c6565b61129e565b3480156103f557600080fd5b5061028f610404366004614570565b611497565b34801561041557600080fd5b50610429610424366004614611565b61152d565b6040516102469392919061477b565b34801561044457600080fd5b5061021e6104533660046147b1565b61178a565b34801561046457600080fd5b50610391610473366004614570565b611809565b34801561048457600080fd5b5061021e6104933660046147ea565b611833565b3480156104a457600080fd5b506104b86104b3366004614807565b61197b565b604051610246959493929190614833565b3480156104d557600080fd5b506000546103919061010090046001600160a01b031681565b3480156104fa57600080fd5b506103916105093660046147ea565b6006602052600090815260409020546001600160a01b031681565b61021e6105323660046148bc565b611d37565b34801561054357600080fd5b506105576105523660046147ea565b611faf565b60408051938452602084019290925290820152606001610246565b61021e61202f565b34801561058657600080fd5b506103916105953660046147ea565b6007602052600090815260409020546001600160a01b031681565b3480156105bc57600080fd5b5061021e6105cb3660046147ea565b612064565b3480156105dc57600080fd5b506102fd6105eb366004614589565b61212b565b3480156105fc57600080fd5b5061021e61060b366004614408565b612209565b34801561061c57600080fd5b5061063061062b366004614408565b6122bb565b604080516001600160a01b0390961686529315156020860152911515928401929092529015156060830152608082015260a001610246565b34801561067457600080fd5b5061028f610683366004614901565b61244b565b34801561069457600080fd5b5061021e6106a33660046148bc565b612493565b3480156106b457600080fd5b5061021e6106c3366004614901565b6126cd565b3480156106d457600080fd5b506103916106e3366004614570565b6127d0565b3480156106f457600080fd5b5061021e6107033660046147ea565b6127e0565b34801561071457600080fd5b506107516107233660046147ea565b6004602052600090815260409020805460018201546006909201546001600160a01b03918216929091169083565b604080516001600160a01b03948516815293909216602084015290820152606001610246565b6001600160a01b0380831660009081526006602090815260408083205484168084526004909252909120549091166107c2576040516372898ae960e11b815260040160405180910390fd5b3341146107e257604051631cf4735960e01b815260040160405180910390fd5b6001600160a01b038084166000908152600660209081526040808320548416835260049182905280832083548251633fa4f24560e01b8152925191956108f5946101009092041692633fa4f2459281830192610120928290030181865afa158015610851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108759190614931565b600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ec91906149ac565b8491908761284a565b82546040519192506001600160a01b0316907f1647efd0ce9727dc31dc201c9d8d35ac687f7370adcacbd454afc6485ddabfda90600090a280156109765781546040518281526001600160a01b03909116907feb7d7a49847ec491969db21a0e31b234565a9923145a2d1b56a75c9e95825802906020015b60405180910390a25b5050505050565b6001600160a01b038281166000908152600460205260409020805484921633148015906109b7575060018101546001600160a01b03163314155b156109d557604051630101292160e31b815260040160405180910390fd5b6001600160a01b03808516600090815260046020526040902054859116610a0f576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8691906149c5565b15610aa457604051631e59ccd960e01b815260040160405180910390fd5b610b3d600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610afa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1e91906149ac565b6001600160a01b03871660009081526004602052604090209086612932565b846001600160a01b03167fc11dfc9c24621433bb10587dc4bbae26a33a4aff53914e0d4c9fddf224a8cb7d8560405161096d91906149e7565b60028181548110610b8657600080fd5b600091825260209091200154905081565b600080546001600160a01b038481168352600460205260408320610bc49290916101009091041684612944565b5090505b92915050565b60038181548110610b8657600080fd5b60606000610bf28484600580549050612ad7565b9093509050826001600160401b03811115610c0f57610c0f614434565b604051908082528060200260200182016040528015610c38578160200160208202803683370190505b50915060005b83811015610cbc576005610c528287614a10565b81548110610c6257610c62614a28565b9060005260206000200160009054906101000a90046001600160a01b0316838281518110610c9257610c92614a28565b6001600160a01b039092166020928302919091019091015280610cb481614a3e565b915050610c3e565b509250929050565b600080610d8760008411610d4e57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906149ac565b610d50565b835b6001600160a01b038616600090815260046020908152604080832093835260098401825280832054600a9094019091529020549091565b909590945092505050565b6001600160a01b038416600090815260076020526040812060609182918291829188610e3457600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2f91906149ac565b610e36565b885b9850610e488888600580549050612ad7565b9097509150866001600160401b03811115610e6557610e65614434565b604051908082528060200260200182016040528015610e8e578160200160208202803683370190505b509550866001600160401b03811115610ea957610ea9614434565b604051908082528060200260200182016040528015610ed2578160200160208202803683370190505b509450866001600160401b03811115610eed57610eed614434565b604051908082528060200260200182016040528015610f16578160200160208202803683370190505b509350866001600160401b03811115610f3157610f31614434565b604051908082528060200260200182016040528015610f5a578160200160208202803683370190505b50925060005b878110156110d2576005610f74828b614a10565b81548110610f8457610f84614a28565b9060005260206000200160009054906101000a90046001600160a01b0316878281518110610fb457610fb4614a28565b60200260200101906001600160a01b031690816001600160a01b031681525050611005878281518110610fe957610fe9614a28565b602002602001015160008c85612b0e909392919063ffffffff16565b86828151811061101757611017614a28565b60200260200101818152505061105487828151811061103857611038614a28565b602002602001015160018c85612b0e909392919063ffffffff16565b85828151811061106657611066614a28565b6020026020010181815250506110a387828151811061108757611087614a28565b602002602001015160028c85612b0e909392919063ffffffff16565b8482815181106110b5576110b5614a28565b6020908102919091010152806110ca81614a3e565b915050610f60565b5050945094509450945094565b600080600183600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c91906149ac565b6111669190614a59565b6111709190614a59565b845190915060005b848110156112955761118b600184614a10565b6000805460405163fcbb371b60e01b81526004810184905292955090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa1580156111df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112039190614931565b905060005b83811015611280576112628286600460008c868151811061122b5761122b614a28565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020612bcf9092919063ffffffff16565b61126c9087614a10565b95508061127881614a3e565b915050611208565b5050808061128d90614a3e565b915050611178565b50505092915050565b6001600160a01b038281166000908152600460205260409020805484921633148015906112d8575060018101546001600160a01b03163314155b156112f657604051630101292160e31b815260040160405180910390fd5b6001600160a01b03808516600090815260046020526040902054859116611330576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015611383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a791906149c5565b156113c557604051631e59ccd960e01b815260040160405180910390fd5b61145e600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561141b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143f91906149ac565b6001600160a01b03871660009081526004602052604090209086612d01565b846001600160a01b03167f0ad9bf1b8c026a174a2f30954417002a6ea00c9b08c1b8846c7951c687be80958560405161096d91906149e7565b600080821161151c57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151791906149ac565b61151e565b815b9150610bc86002600384612d0e565b6001600160a01b03841660009081526004602052604081206060918291866115cb57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c691906149ac565b6115cd565b865b96506115e186868360070180549050612ad7565b9095509150846001600160401b038111156115fe576115fe614434565b604051908082528060200260200182016040528015611627578160200160208202803683370190505b509350846001600160401b0381111561164257611642614434565b60405190808252806020026020018201604052801561166b578160200160208202803683370190505b50925060005b8581101561177e57600060078184820161168b858c614a10565b8154811061169b5761169b614a28565b60009182526020808320909101546001600160a01b039081168452908301939093526040909101902080548851919350909116908790849081106116e1576116e1614a28565b6001600160a01b03928316602091820292909201015283546117089183911660028c612b0e565b83546117219083906001600160a01b031660018d612b0e565b845461173a9084906001600160a01b031660008e612b0e565b6117449190614a10565b61174e9190614a10565b85838151811061176057611760614a28565b6020908102919091010152508061177681614a3e565b915050611671565b50509450945094915050565b3341146117aa57604051631cf4735960e01b815260040160405180910390fd5b60005460ff16156117cd5760405162dc149f60e41b815260040160405180910390fd5b6000805460016001600160a81b03199091166101006001600160a01b039586160217811790915580546001600160a01b03191691909216179055565b6005818154811061181957600080fd5b6000918252602090912001546001600160a01b0316905081565b60015460405163322433e360e01b81523360048201819052916001600160a01b03169063322433e390602401602060405180830381865afa15801561187c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a091906149c5565b6118bd5760405163423057c560e11b815260040160405180910390fd5b6001600160a01b03811660009081526004602052604090206118df9083612de0565b60058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b038381166001600160a01b03199283168117909355841660009081526006602090815260409182902080549093168417909255519182527fd5828184f48f65962d10eac907318df85953d4e3542a0f09b5932ee3fe398bdd910160405180910390a15050565b606080606080600080600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fb91906149ac565b905060008911611a0b5780611a0d565b885b6000805460405163fcbb371b60e01b815260048101849052929b5090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015611a61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a859190614931565b9050611a978989600580549050612ad7565b9098509250876001600160401b03811115611ab457611ab4614434565b604051908082528060200260200182016040528015611add578160200160208202803683370190505b509650876001600160401b03811115611af857611af8614434565b604051908082528060200260200182016040528015611b21578160200160208202803683370190505b509550876001600160401b03811115611b3c57611b3c614434565b604051908082528060200260200182016040528015611b65578160200160208202803683370190505b509450876001600160401b03811115611b8057611b80614434565b604051908082528060200260200182016040528015611ba9578160200160208202803683370190505b50935060005b88811015611d295760006004816005611bc8858f614a10565b81548110611bd857611bd8614a28565b60009182526020808320909101546001600160a01b039081168452908301939093526040909101902080548b51919350909116908a9084908110611c1e57611c1e614a28565b6001600160a01b03928316602091820292909201015260018201548951911690899084908110611c5057611c50614a28565b6001600160a01b0390921660209283029190910190910152611c72818d612e22565b878381518110611c8457611c84614a28565b6020908102919091010152611cad818d6000908152600291909101602052604090205460ff1690565b158015611ccb575060008c815260038201602052604090205460ff16155b8015611cf457508260c00151878381518110611ce957611ce9614a28565b602002602001015110155b868381518110611d0657611d06614a28565b911515602092830291909101909101525080611d2181614a3e565b915050611baf565b505050939792965093509350565b6001600160a01b03808416600090815260046020526040902054849116611d71576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de891906149c5565b15611e0657604051631e59ccd960e01b815260040160405180910390fd5b81611e2457604051637bc90c0560e11b815260040160405180910390fd5b611eb56003600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea091906149ac565b611eab906001614a10565b6002919085612e35565b611ec0833384612e86565b33600090815260076020526040902080546001600160a01b0316611f2c578054336001600160a01b031991821681178355600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180549092161790555b600080546001600160a01b03878116835260046020526040909220611f5b928492610100900416908787612f97565b846001600160a01b0316336001600160a01b03167f8fc656e319452025372383dc27d933046d412b8253de50a10739eeaa59862be68686604051611fa0929190614aa8565b60405180910390a35050505050565b6001600160a01b038082166000908152600760205260408120815491928392839291611fe491839161010090910416846130ca565b60005490945061200590829061010090046001600160a01b031660016130ca565b60005490935061202690829061010090046001600160a01b031660026130ca565b93959294505050565b6040513481527f1de49774d094a85fc1bbbd16e8d09a865fb848218f41e2da4369f528c42ee42e9060200160405180910390a1565b336000818152600460205260409020546001600160a01b031661209a576040516372898ae960e11b815260040160405180910390fd5b33600081815260046020526040902060018101546001600160a01b03166120c182866132f0565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916888616908117909155825194861685529084019290925290917f758820d0b14a01c1fa60b8d2bbef25ed1b6a5af4802e5dec3f08679255ba8bf3910161096d565b6060600061213f8484600880549050612ad7565b9093509050826001600160401b0381111561215c5761215c614434565b604051908082528060200260200182016040528015612185578160200160208202803683370190505b50915060005b83811015610cbc57600861219f8287614a10565b815481106121af576121af614a28565b9060005260206000200160009054906101000a90046001600160a01b03168382815181106121df576121df614a28565b6001600160a01b03909216602092830291909101909101528061220181614a3e565b91505061218b565b6001600160a01b03808316600090815260046020526040902054839116612243576040516372898ae960e11b815260040160405180910390fd5b600080546001600160a01b038581168352600460205260408320612270929091610100909104168561336a565b9050836001600160a01b03167f882d5671e5b36af50883197c33d48ba56ce337589958e871ba82fb0a54adf3e8826040516122ad91815260200190565b60405180910390a250505050565b600080600080600080600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233b91906149ac565b90506000871161234b578061234d565b865b6000805460405163fcbb371b60e01b81526004810184905292995090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa1580156123a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c59190614931565b6001600160a01b038a1660009081526004602090815260408083208c8452600281018352818420546003820190935292205460ff91821615995016965090915061240f818a612e22565b935086801561241c575085155b801561242c57508160c001518410155b6001909101546001600160a01b03169750935050509295509295909350565b600080546001600160a01b0384811683526004602090815260408085208884168652600790925284206124889390926101009091041690856133a4565b5090505b9392505050565b6001600160a01b038084166000908152600460205260409020548491166124cd576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166125035760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015612556573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257a91906149c5565b1561259857604051631e59ccd960e01b815260040160405180910390fd5b826125b657604051637bc90c0560e11b815260040160405180910390fd5b6126476003600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561260e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263291906149ac565b61263d906001614a10565b60029190866135ae565b50600080546001600160a01b03878116835260046020908152604080852033865260079092529093206126869390926101009004909116908787613647565b9250846001600160a01b0316336001600160a01b03167ff2812c3df2511a467cbe777b1ee98b1ddb9918bb0f09568a269d2fb58233cb528686604051611fa0929190614aa8565b6001600160a01b03808316600090815260046020526040902054839116612707576040516372898ae960e11b815260040160405180910390fd5b6001600160a01b038085166000908152600760205260409020548591166127415760405163cf83d93d60e01b815260040160405180910390fd5b600080546001600160a01b0386811683526004602090815260408085208a841686526007909252842061277e93909261010090910416908761383f565b604080516001600160a01b03888116825260208201849052929350918816917f2ef606d064225d24c1514dc94907c134faee1237445c2f63f410cce0852b2054910160405180910390a2505050505050565b6008818154811061181957600080fd5b6001600160a01b0380821660009081526007602052604090205482911661281a5760405163cf83d93d60e01b815260040160405180910390fd5b600080546001600160a01b03848116835260076020526040909220612846929091610100900416613891565b5050565b600082815260098501602052604081205461287357600083815260098601602052604090208290555b6000838152600a8601602052604081205461288f906001614a10565b6000858152600a88016020526040902081905560e086015190915081108015906128db57506003860160006128c5866001614a10565b815260208101919091526040016000205460ff16155b15612929576101008501516128f09085614a10565b91505b81841015612929578361290581614a3e565b60008181526003890160205260409020805460ff1916600117905594506128f39050565b50949350505050565b61293f83838360006138b5565b505050565b6000808460060154905060006001856001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b491906149ac565b6129be9190614a59565b90508315806129d55750806129d38386614a10565b115b156129e7576129e48282614a59565b93505b60005b84811015612acd576129fd600184614a10565b60405163fcbb371b60e01b8152600481018290529093506000906001600160a01b0388169063fcbb371b9060240161012060405180830381865afa158015612a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6d9190614931565b90506000612a7c898387612bcf565b905080612a8a575050612abb565b60a0820151612a9a575050612abb565b612aac818360a0015160646019613943565b612ab69087614a10565b955050505b80612ac581614a3e565b9150506129ea565b5050935093915050565b60008082612ae58587614a10565b10612af757612af48584614a59565b93505b83612b028187614a10565b91509150935093915050565b6000612bc4856002016000856002811115612b2b57612b2b614a70565b6002811115612b3c57612b3c614a70565b81526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002083876001016000876002811115612b8657612b86614a70565b6002811115612b9757612b97614a70565b8152602080820192909252604090810160009081206001600160a01b038b16825290925290209190612d0e565b90505b949350505050565b600081815260028401602052604081205460ff1680612bfe5750600082815260038501602052604090205460ff165b15612c0b5750600061248c565b6000612c178584612e22565b905080612c2857600091505061248c565b6000612c366019600a614b9f565b612c4786608001516064601961396f565b612c519084614bab565b612c5b9190614bca565b905080612c6d5760009250505061248c565b612c9085606001518660400151612c849190614bab565b6301e13380601961396f565b612c9a9082614bab565b9050612ca86019600a614b9f565b612cb29082614bca565b6000858152600a880160205260409020549091508015612cf7576000858152600988016020526040902054612cf383612ceb8484614a59565b836019613943565b9250505b5095945050505050565b61293f83838360016138b5565b8254600090801580612d3c57508285600081548110612d2f57612d2f614a28565b9060005260206000200154115b15612d4b57600091505061248c565b8285612d58600184614a59565b81548110612d6857612d68614a28565b906000526020600020015411612da75783612d84600183614a59565b81548110612d9457612d94614a28565b906000526020600020015491505061248c565b6000612db686856000856139b5565b9050848181548110612dca57612dca614a28565b9060005260206000200154925050509392505050565b81546001600160a01b031615612e0857604051621d934160e11b815260040160405180910390fd5b81546001600160a01b0319163317825561284682826132f0565b600061248c600484016005850184612d0e565b612e40848484613a5d565b835481908490612e5290600190614a59565b81548110612e6257612e62614a28565b906000526020600020016000828254612e7b9190614a10565b909155505050505050565b6000836002811115612e9a57612e9a614a70565b1415612ec05780341461293f57604051630fe5b06560e11b815260040160405180910390fd5b3415612edf5760405163a745ac8560e01b815260040160405180910390fd5b6000612eea84613b15565b6040516323b872dd60e01b81526001600160a01b0385811660048301523060248301526044820185905291909116906323b872dd906064015b6020604051808303816000875af1158015612f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6691906149c5565b905080612f915783604051630db5347560e11b8152600401612f889190614bec565b60405180910390fd5b50505050565b6130b1856002016000846002811115612fb257612fb2614a70565b6002811115612fc357612fc3614a70565b81526020808201929092526040908101600090812087546001600160a01b03908116835290845290829020825163900cf0cf60e01b8152925190939189169263900cf0cf9260048083019391928290030181865afa158015613029573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304d91906149ac565b613058906001614a10565b8388600101600087600281111561307157613071614a70565b600281111561308257613082614a70565b8152602080820192909252604090810160009081208a546001600160a01b031682529092529020929190612e35565b845461097690849086906001600160a01b031684613b80565b6000808460030160008460028111156130e5576130e5614a70565b60028111156130f6576130f6614a70565b815260208101919091526040016000205490508061311857600091505061248c565b6000846001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613158573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317c91906149ac565b9050600061318b600184614a59565b90506000811180156131ee5750818760030160008760028111156131b1576131b1614a70565b60028111156131c2576131c2614a70565b815260200190815260200160002082815481106131e1576131e1614a28565b9060005260206000200154115b1561320157806131fd81614bfa565b9150505b8187600301600087600281111561321a5761321a614a70565b600281111561322b5761322b614a70565b8152602001908152602001600020828154811061324a5761324a614a28565b90600052602060002001541115613267576000935050505061248c565b6000805b8281116132e45788600401600088600281111561328a5761328a614a70565b600281111561329b5761329b614a70565b815260200190815260200160002081815481106132ba576132ba614a28565b9060005260206000200154826132d09190614a10565b9150806132dc81614a3e565b91505061326b565b50979650505050505050565b6001600160a01b03811661331757604051637138356f60e01b815260040160405180910390fd5b81546001600160a01b03828116911614156133455760405163e037058f60e01b815260040160405180910390fd5b60019190910180546001600160a01b0319166001600160a01b03909216919091179055565b600080600061337a868686612944565b6006880181905590925090508115612488578554612488906000906001600160a01b031684613c6e565b81546001600160a01b039081166000908152600586016020908152604080832054815163900cf0cf60e01b81529151939490938593600193928a169263900cf0cf92600480830193928290030181865afa158015613406573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061342a91906149ac565b6134349190614a59565b905083158061344b5750806134498386614a10565b115b1561345d5761345a8282614a59565b93505b60005b848110156135a357613473600184614a10565b8654909350600090613492908a906001600160a01b0316600287612b0e565b87546134ab908b906001600160a01b0316600188612b0e565b88546134c4908c906001600160a01b0316600089612b0e565b6134ce9190614a10565b6134d89190614a10565b9050806134e55750613591565b60405163fcbb371b60e01b81526004810185905260009061355e906001600160a01b038b169063fcbb371b9060240161012060405180830381865afa158015613532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135569190614931565b899087613d42565b90508061356c575050613591565b613582818361357b8b89612e22565b6019613943565b61358c9087614a10565b955050505b8061359b81614a3e565b915050613460565b505094509492505050565b60006135bb858585613a5d565b84546000856135cb600184614a59565b815481106135db576135db614a28565b90600052602060002001549050808411156135f657806135f8565b835b9350831561363c57838661360d600185614a59565b8154811061361d5761361d614a28565b9060005260206000200160008282546136369190614a59565b90915550505b509195945050505050565b600080856001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ac91906149ac565b85549091506000906136ca9089906001600160a01b03168785612b0e565b86549091506000906136f2908a906001600160a01b0316886136ed876001614a10565b612b0e565b90506137ab89600201600088600281111561370f5761370f614a70565b600281111561372057613720614a70565b8152602080820192909252604090810160009081208b546001600160a01b031682529092529020613752856001614a10565b878c60010160008b600281111561376b5761376b614a70565b600281111561377c5761377c614a70565b8152602080820192909252604090810160009081208e546001600160a01b0316825290925290209291906135ae565b9450846137be5760009350505050613836565b6137c9878987613d8d565b846000838311156137fe576137de8484614a59565b90508087106137ed57806137ef565b865b90506137fb8183614a59565b91505b8115613810576138108b8b8a85613e0d565b801561382d578a5461382d9089906001600160a01b031683613c6e565b86955050505050505b95945050505050565b6000806000613850878787876133a4565b86546001600160a01b0316600090815260058a016020526040902081905590925090508115612cf7578654612cf7906000906001600160a01b031684613c6e565b61389d8282600161404c565b6138a98282600261404c565b6128468282600061404c565b815160005b8181101561393b5760008482815181106138d6576138d6614a28565b6020026020010151905085811180156139065750600081815260028801602052604090205460ff16151584151514155b156139285760008181526002880160205260409020805460ff19168515151790555b508061393381614a3e565b9150506138ba565b505050505050565b600061395082600a614b9f565b61395b85858561396f565b6139659087614bab565b612bc49190614bca565b60008061397d836001614a10565b61398890600a614b9f565b6139929086614bab565b9050600a6139a08583614bca565b6139ab906005614a10565b6138369190614bca565b6000818314156139d1576139ca600183614a59565b9050612bc7565b600060026139df8486614a10565b6139e99190614bca565b9050848682815481106139fe576139fe614a28565b90600052602060002001541115613a2357613a1b868686846139b5565b915050612bc7565b84868281548110613a3657613a36614a28565b90600052602060002001541015612bc457613a1b8686613a57846001614a10565b866139b5565b825480613a8757508254600181810185556000948552602085209091019190915581540181559052565b600084613a95600184614a59565b81548110613aa557613aa5614a28565b906000526020600020015490508281146109765784546001818101875560008781526020902090910184905584908190613adf9085614a59565b81548110613aef57613aef614a28565b600091825260208083209091015483546001810185559383529120909101555050505050565b60006001826002811115613b2b57613b2b614a70565b1415613b3f57506001602960991b01919050565b6002826002811115613b5357613b53614a70565b1415613b6757506002602960991b01919050565b604051638698bf3760e01b815260040160405180910390fd5b6001600160a01b038216600090815260088501602052604090205460ff16613bee576001600160a01b038216600081815260088601602090815260408220805460ff191660019081179091556007880180549182018155835291200180546001600160a01b03191690911790555b612f9184600501846001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c5791906149ac565b613c62906001614a10565b60048701919084612e35565b600080846002811115613c8357613c83614a70565b1415613ce2576040516001600160a01b038416908390600081818185875af1925050503d8060008114613cd2576040519150601f19603f3d011682016040523d82523d6000602084013e613cd7565b606091505b505080915050613d22565b613ceb84613b15565b60405163a9059cbb60e01b81526001600160a01b03858116600483015260248201859052919091169063a9059cbb90604401612f23565b80612f915783604051630db5347560e11b8152600401612f889190614bec565b600080613d50858585612bcf565b905080613d6157600091505061248c565b60a0840151613d7157905061248c565b613d83818560a0015160646019613943565b6138369082614a59565b612f9183600501836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613df691906149ac565b613e01906001614a10565b600486019190846135ae565b6000836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e7191906149ac565b613e7c906001614a10565b90506000856003016000856002811115613e9857613e98614a70565b6002811115613ea957613ea9614a70565b81526020810191909152604001600020549050801580613f27575081866003016000866002811115613edd57613edd614a70565b6002811115613eee57613eee614a70565b8152602001908152602001600020600183613f099190614a59565b81548110613f1957613f19614a28565b906000526020600020015414155b15613fd157856003016000856002811115613f4457613f44614a70565b6002811115613f5557613f55614a70565b8152602080820192909252604001600090812080546001810182559082529181209091018390556004870190856002811115613f9357613f93614a70565b6002811115613fa457613fa4614a70565b8152602080820192909252604001600090812080546001810182559082529190200183905550612f919050565b82866004016000866002811115613fea57613fea614a70565b6002811115613ffb57613ffb614a70565b81526020019081526020016000206001836140169190614a59565b8154811061402657614026614a28565b90600052602060002001600082825461403f9190614a10565b9091555050505050505050565b60006140598484846130ca565b9050806140665750505050565b600084600301600084600281111561408057614080614a70565b600281111561409157614091614a70565b8152602001908152602001600020805490509050836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061410791906149ac565b85600301600085600281111561411f5761411f614a70565b600281111561413057614130614a70565b815260200190815260200160002060018361414b9190614a59565b8154811061415b5761415b614a28565b9060005260206000200154116141f65784600301600084600281111561418357614183614a70565b600281111561419457614194614a70565b815260200190815260200160002060006141ae9190614372565b8460040160008460028111156141c6576141c6614a70565b60028111156141d7576141d7614a70565b815260200190815260200160002060006141f19190614372565b61435b565b604051806020016040528086600301600086600281111561421957614219614a70565b600281111561422a5761422a614a70565b81526020019081526020016000206001846142459190614a59565b8154811061425557614255614a28565b906000526020600020015481525085600301600085600281111561427b5761427b614a70565b600281111561428c5761428c614a70565b815260208101919091526040016000206142a7916001614393565b5060405180602001604052808660040160008660028111156142cb576142cb614a70565b60028111156142dc576142dc614a70565b81526020019081526020016000206001846142f79190614a59565b8154811061430757614307614a28565b906000526020600020015481525085600401600085600281111561432d5761432d614a70565b600281111561433e5761433e614a70565b81526020810191909152604001600020614359916001614393565b505b84546109769084906001600160a01b031684613c6e565b508054600082559060005260206000209081019061439091906143de565b50565b8280548282559060005260206000209081019282156143ce579160200282015b828111156143ce5782518255916020019190600101906143b3565b506143da9291506143de565b5090565b5b808211156143da57600081556001016143df565b6001600160a01b038116811461439057600080fd5b6000806040838503121561441b57600080fd5b8235614426816143f3565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b038111828210171561446d5761446d614434565b60405290565b604051601f8201601f191681016001600160401b038111828210171561449b5761449b614434565b604052919050565b60006001600160401b038211156144bc576144bc614434565b5060051b60200190565b600080604083850312156144d957600080fd5b82356144e4816143f3565b91506020838101356001600160401b0381111561450057600080fd5b8401601f8101861361451157600080fd5b803561452461451f826144a3565b614473565b81815260059190911b8201830190838101908883111561454357600080fd5b928401925b8284101561456157833582529284019290840190614548565b80955050505050509250929050565b60006020828403121561458257600080fd5b5035919050565b6000806040838503121561459c57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b838110156145e45781516001600160a01b0316875295820195908201906001016145bf565b509495945050505050565b60408152600061460260408301856145ab565b90508260208301529392505050565b6000806000806080858703121561462757600080fd5b8435614632816143f3565b966020860135965060408601359560600135945092505050565b600081518084526020808501945080840160005b838110156145e457815187529582019590820190600101614660565b60a08152600061468f60a08301886145ab565b82810360208401526146a1818861464c565b905082810360408401526146b5818761464c565b905082810360608401526146c9818661464c565b9150508260808301529695505050505050565b600080604083850312156146ef57600080fd5b82356001600160401b0381111561470557600080fd5b8301601f8101851361471657600080fd5b8035602061472661451f836144a3565b82815260059290921b8301810191818101908884111561474557600080fd5b938201935b8385101561476c57843561475d816143f3565b8252938201939082019061474a565b98969091013596505050505050565b60608152600061478e60608301866145ab565b82810360208401526147a0818661464c565b915050826040830152949350505050565b600080604083850312156147c457600080fd5b82356147cf816143f3565b915060208301356147df816143f3565b809150509250929050565b6000602082840312156147fc57600080fd5b813561248c816143f3565b60008060006060848603121561481c57600080fd5b505081359360208301359350604090920135919050565b60a08152600061484660a08301886145ab565b60208382038185015261485982896145ab565b9150838203604085015261486d828861464c565b8481036060860152865180825282880193509082019060005b818110156148a4578451151583529383019391830191600101614886565b50508093505050508260808301529695505050505050565b6000806000606084860312156148d157600080fd5b83356148dc816143f3565b92506020840135600381106148f057600080fd5b929592945050506040919091013590565b60008060006060848603121561491657600080fd5b8335614921816143f3565b925060208401356148f0816143f3565b6000610120828403121561494457600080fd5b61494c61444a565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b6000602082840312156149be57600080fd5b5051919050565b6000602082840312156149d757600080fd5b8151801515811461248c57600080fd5b60208152600061248c602083018461464c565b634e487b7160e01b600052601160045260246000fd5b60008219821115614a2357614a236149fa565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415614a5257614a526149fa565b5060010190565b600082821015614a6b57614a6b6149fa565b500390565b634e487b7160e01b600052602160045260246000fd5b60038110614aa457634e487b7160e01b600052602160045260246000fd5b9052565b60408101614ab68285614a86565b8260208301529392505050565b600181815b80851115610cbc578160001904821115614ae457614ae46149fa565b80851615614af157918102915b93841c9390800290614ac8565b600082614b0d57506001610bc8565b81614b1a57506000610bc8565b8160018114614b305760028114614b3a57614b56565b6001915050610bc8565b60ff841115614b4b57614b4b6149fa565b50506001821b610bc8565b5060208310610133831016604e8410600b8410161715614b79575081810a610bc8565b614b838383614ac3565b8060001904821115614b9757614b976149fa565b029392505050565b600061248c8383614afe565b6000816000190483118215151615614bc557614bc56149fa565b500290565b600082614be757634e487b7160e01b600052601260045260246000fd5b500490565b60208101610bc88284614a86565b600081614c0957614c096149fa565b50600019019056fea26469706673582212205f926883f5ba045108b667c46a75c1d10523ca1f0a147c50e9da04438be700d764736f6c634300080c0033"), + }, + { + contract: lockedOAS, + // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/2e5de435195ac05e208ce95d654a998cbe0fb3a1/contracts/token/LOAS.sol + code: mustDecodeCode("0x60806040526004361061012a5760003560e01c806370a08231116100ab578063a457c2d71161006f578063a457c2d714610353578063a9059cbb14610373578063d97830b114610393578063dd62ed3e14610430578063f94a138b14610476578063ffc3a7691461049657600080fd5b806370a082311461027a578063775ad527146102b05780637de6b1db146102d057806392de7482146102f057806395d89b411461033e57600080fd5b8063313ce567116100f2578063313ce567146101eb578063379607f5146102075780633950935114610227578063546cec3e146102475780636dec93f11461025a57600080fd5b806306fdde031461012f578063095ea7b31461015a57806318160ddd1461018a57806323b872dd146101a95780632e87d48c146101c9575b600080fd5b34801561013b57600080fd5b506101446104b6565b6040516101519190611559565b60405180910390f35b34801561016657600080fd5b5061017a6101753660046115ca565b610548565b6040519015158152602001610151565b34801561019657600080fd5b506002545b604051908152602001610151565b3480156101b557600080fd5b5061017a6101c43660046115f4565b610560565b3480156101d557600080fd5b506101e96101e436600461170b565b610584565b005b3480156101f757600080fd5b5060405160128152602001610151565b34801561021357600080fd5b506101e9610222366004611758565b610607565b34801561023357600080fd5b5061017a6102423660046115ca565b610773565b6101e9610255366004611788565b6107b2565b34801561026657600080fd5b5061019b6102753660046117cb565b61099a565b34801561028657600080fd5b5061019b6102953660046117cb565b6001600160a01b031660009081526020819052604090205490565b3480156102bc57600080fd5b506101e96102cb3660046117e6565b610a98565b3480156102dc57600080fd5b506101e96102eb366004611758565b610ae3565b3480156102fc57600080fd5b5061032661030b3660046117cb565b6006602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610151565b34801561034a57600080fd5b50610144610c24565b34801561035f57600080fd5b5061017a61036e3660046115ca565b610c33565b34801561037f57600080fd5b5061017a61038e3660046115ca565b610cca565b34801561039f57600080fd5b506103f36103ae3660046117cb565b6005602052600090815260409020805460018201546002830154600390930154919290916001600160401b0380831692600160401b900416906001600160a01b031685565b6040805195865260208601949094526001600160401b03928316938501939093521660608301526001600160a01b0316608082015260a001610151565b34801561043c57600080fd5b5061019b61044b3660046117e6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561048257600080fd5b5061017a610491366004611874565b610cd8565b3480156104a257600080fd5b5061017a6104b13660046118fb565b610dc1565b6060600380546104c590611954565b80601f01602080910402602001604051908101604052809291908181526020018280546104f190611954565b801561053e5780601f106105135761010080835404028352916020019161053e565b820191906000526020600020905b81548152906001019060200180831161052157829003601f168201915b5050505050905090565b600033610556818585610e80565b5060019392505050565b60003361056e858285610fa4565b610579858585611036565b506001949350505050565b6001600160a01b038281166000908152600560205260409020600301541633146105c15760405163d8d5894f60e01b815260040160405180910390fd5b60005b8151811015610602576105f0838383815181106105e3576105e361198f565b602002602001015161120f565b806105fa816119bb565b9150506105c4565b505050565b8061062557604051637bc90c0560e11b815260040160405180910390fd5b336000818152600660208181526040808420546001600160a01b0316808552600583529084206001810154958552929091529092906106639061099a565b61066d91906119d6565b905080831115610690576040516377dfdf2160e01b815260040160405180910390fd5b828260010160008282546106a491906119ed565b909155506106b4905033846112a2565b604051600090339085908381818185875af1925050503d80600081146106f6576040519150601f19603f3d011682016040523d82523d6000602084013e6106fb565b606091505b505090508061071d576040516312171d8360e31b815260040160405180910390fd5b336000908152600660209081526040918290205491518681526001600160a01b03909216917f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4910160405180910390a250505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061055690829086906107ad9087906119ed565b610e80565b6001600160a01b0383166107d95760405163ac6b05f560e01b815260040160405180910390fd5b6001600160a01b03838116600090815260066020526040902054161561081257604051630fb356f360e21b815260040160405180910390fd5b42826001600160401b031611158061083c5750806001600160401b0316826001600160401b031610155b1561085a57604051636385801560e11b815260040160405180910390fd5b3461087857604051637bc90c0560e11b815260040160405180910390fd5b61088283346113fc565b6040805160a08101825234808252600060208084018281526001600160401b038089168688019081528882166060880190815233608089019081526001600160a01b038d8116808952600588528b89209a518b55955160018b0155925160028a01805493518616600160401b026fffffffffffffffffffffffffffffffff19909416919095161791909117909255905160039096018054969091166001600160a01b031996871617905560069091529084902080549093168117909255915190917fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb9161098d9190869086909283526001600160401b03918216602084015216604082015260600190565b60405180910390a2505050565b6001600160a01b038082166000908152600560209081526040808320815160a081018352815480825260018301549482019490945260028201546001600160401b0380821694830194909452600160401b90049092166060830152600301549093166080840152909190610a115750600092915050565b80604001516001600160401b0316421015610a2f5750600092915050565b600081604001518260600151610a459190611a05565b6001600160401b031682604001516001600160401b031642610a6791906119d6565b8351610a739190611a2d565b610a7d9190611a4c565b8251909150811115610a9157505192915050565b9392505050565b6001600160a01b03828116600090815260056020526040902060030154163314610ad55760405163d8d5894f60e01b815260040160405180910390fd5b610adf828261120f565b5050565b80610b0157604051637bc90c0560e11b815260040160405180910390fd5b336000908152600660209081526040808320546001600160a01b031683526005909152902060018101548154610b3791906119d6565b821115610b57576040516377dfdf2160e01b815260040160405180910390fd5b610b6133836112a2565b60038101546040516000916001600160a01b03169084908381818185875af1925050503d8060008114610bb0576040519150601f19603f3d011682016040523d82523d6000602084013e610bb5565b606091505b5050905080610bd7576040516312171d8360e31b815260040160405180910390fd5b336000908152600660209081526040918290205491518581526001600160a01b03909216917f443630e54cc5dd8826c25d7467193a3b7a0a67b4ed73c14fb477e8e7eed3fd48910161098d565b6060600480546104c590611954565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610cbd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6105798286868403610e80565b600033610556818585611036565b600082518451148015610cec575081518351145b610d4c5760405162461bcd60e51b815260206004820152602b60248201527f4c4f41533a2062756c6b207472616e7366657246726f6d2061726773206d757360448201526a7420626520657175616c7360a81b6064820152608401610cb4565b60005b845181101561057957610dae858281518110610d6d57610d6d61198f565b6020026020010151858381518110610d8757610d8761198f565b6020026020010151858481518110610da157610da161198f565b6020026020010151610560565b5080610db9816119bb565b915050610d4f565b60008151835114610e245760405162461bcd60e51b815260206004820152602760248201527f4c4f41533a2062756c6b207472616e736665722061726773206d75737420626560448201526620657175616c7360c81b6064820152608401610cb4565b3360005b845181101561057957610e6e82868381518110610e4757610e4761198f565b6020026020010151868481518110610e6157610e6161198f565b6020026020010151611036565b80610e78816119bb565b915050610e28565b6001600160a01b038316610ee25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cb4565b6001600160a01b038216610f435760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cb4565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461103057818110156110235760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610cb4565b6110308484848403610e80565b50505050565b6001600160a01b03831661109a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cb4565b6001600160a01b0382166110fc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cb4565b6111078383836114e7565b6001600160a01b0383166000908152602081905260409020548181101561117f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610cb4565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906111b69084906119ed565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161120291815260200190565b60405180910390a3611030565b6001600160a01b03818116600090815260066020526040902054161561124857604051630fb356f360e21b815260040160405180910390fd5b6001600160a01b0381811660008181526006602052604080822080546001600160a01b0319169487169485179055519192917fdc5d0ac53741544fef2e2ae9b2c8006a9e56f9708377f300d8e825f8d411617d9190a35050565b6001600160a01b0382166113025760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610cb4565b61130e826000836114e7565b6001600160a01b038216600090815260208190526040902054818110156113825760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610cb4565b6001600160a01b03831660009081526020819052604081208383039055600280548492906113b19084906119d6565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6001600160a01b0382166114525760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610cb4565b61145e600083836114e7565b806002600082825461147091906119ed565b90915550506001600160a01b0382166000908152602081905260408120805483929061149d9084906119ed565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038316158061150457506001600160a01b038216155b1561150e57505050565b6001600160a01b0380831660009081526006602052604080822054868416835291205482169116141561154057505050565b6040516325cdf54f60e21b815260040160405180910390fd5b600060208083528351808285015260005b818110156115865785810183015185820160400152820161156a565b81811115611598576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b03811681146115c557600080fd5b919050565b600080604083850312156115dd57600080fd5b6115e6836115ae565b946020939093013593505050565b60008060006060848603121561160957600080fd5b611612846115ae565b9250611620602085016115ae565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561166e5761166e611630565b604052919050565b60006001600160401b0382111561168f5761168f611630565b5060051b60200190565b600082601f8301126116aa57600080fd5b813560206116bf6116ba83611676565b611646565b82815260059290921b840181019181810190868411156116de57600080fd5b8286015b84811015611700576116f3816115ae565b83529183019183016116e2565b509695505050505050565b6000806040838503121561171e57600080fd5b611727836115ae565b915060208301356001600160401b0381111561174257600080fd5b61174e85828601611699565b9150509250929050565b60006020828403121561176a57600080fd5b5035919050565b80356001600160401b03811681146115c557600080fd5b60008060006060848603121561179d57600080fd5b6117a6846115ae565b92506117b460208501611771565b91506117c260408501611771565b90509250925092565b6000602082840312156117dd57600080fd5b610a91826115ae565b600080604083850312156117f957600080fd5b611802836115ae565b9150611810602084016115ae565b90509250929050565b600082601f83011261182a57600080fd5b8135602061183a6116ba83611676565b82815260059290921b8401810191818101908684111561185957600080fd5b8286015b84811015611700578035835291830191830161185d565b60008060006060848603121561188957600080fd5b83356001600160401b03808211156118a057600080fd5b6118ac87838801611699565b945060208601359150808211156118c257600080fd5b6118ce87838801611699565b935060408601359150808211156118e457600080fd5b506118f186828701611819565b9150509250925092565b6000806040838503121561190e57600080fd5b82356001600160401b038082111561192557600080fd5b61193186838701611699565b9350602085013591508082111561194757600080fd5b5061174e85828601611819565b600181811c9082168061196857607f821691505b6020821081141561198957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156119cf576119cf6119a5565b5060010190565b6000828210156119e8576119e86119a5565b500390565b60008219821115611a0057611a006119a5565b500190565b60006001600160401b0383811690831681811015611a2557611a256119a5565b039392505050565b6000816000190483118215151615611a4757611a476119a5565b500290565b600082611a6957634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122098acdeeec3a23c1e097c992e1292dc7bc53f7ef784a6acd433995fdce6ee1c1464736f6c634300080c0033"), + storage: storage{ + // string private _name + "0x03": "Locked OAS", + // string private _symbol + "0x04": "LOAS", + }, + }, + { + contract: l1StandardERC20Factory, + // commit: https://github.com/oasysgames/oasys-optimism/blob/b7cd941581f372f4677751aabdeb0ed9291eb0d9/packages/contracts/contracts/oasys/L1/token/L1StandardERC20.sol + code: mustDecodeCode("0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80630b6ec17814610030575b600080fd5b61004361003e3660046101c2565b610045565b005b6000338383604051610056906100db565b610062939291906102a0565b604051809103906000f08015801561007e573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff16826040516100a691906102eb565b604051908190038120907fd714a43f627528ad95fc3dcf6c453cf595be2f4d75c58c4273f17208ed899f4490600090a3505050565b612a2f8061030883390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261012857600080fd5b813567ffffffffffffffff80821115610143576101436100e8565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610189576101896100e8565b816040528381528660208588010111156101a257600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156101d557600080fd5b823567ffffffffffffffff808211156101ed57600080fd5b6101f986838701610117565b9350602085013591508082111561020f57600080fd5b5061021c85828601610117565b9150509250929050565b60005b83811015610241578181015183820152602001610229565b83811115610250576000848401525b50505050565b6000815180845261026e816020860160208601610226565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006102cf6060830185610256565b82810360408401526102e18185610256565b9695505050505050565b600082516102fd818460208701610226565b919091019291505056fe60806040523480156200001157600080fd5b5060405162002a2f38038062002a2f8339810160408190526200003491620003b6565b8151829082906200004d90600590602085019062000243565b5080516200006390600690602084019062000243565b50506007805460ff19169055506200007d600084620000de565b620000a97f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a684620000de565b620000d57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a84620000de565b5050506200047d565b620000f582826200012160201b62000e541760201c565b60008281526001602090815260409091206200011c91839062000e5e62000131821b17901c565b505050565b6200012d828262000151565b5050565b600062000148836001600160a01b038416620001f1565b90505b92915050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166200012d576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001ad3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008181526001830160205260408120546200023a575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200014b565b5060006200014b565b828054620002519062000440565b90600052602060002090601f016020900481019282620002755760008555620002c0565b82601f106200029057805160ff1916838001178555620002c0565b82800160010185558215620002c0579182015b82811115620002c0578251825591602001919060010190620002a3565b50620002ce929150620002d2565b5090565b5b80821115620002ce5760008155600101620002d3565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200031157600080fd5b81516001600160401b03808211156200032e576200032e620002e9565b604051601f8301601f19908116603f01168101908282118183101715620003595762000359620002e9565b816040528381526020925086838588010111156200037657600080fd5b600091505b838210156200039a57858201830151818301840152908201906200037b565b83821115620003ac5760008385830101525b9695505050505050565b600080600060608486031215620003cc57600080fd5b83516001600160a01b0381168114620003e457600080fd5b60208501519093506001600160401b03808211156200040257600080fd5b6200041087838801620002ff565b935060408601519150808211156200042757600080fd5b506200043686828701620002ff565b9150509250925092565b600181811c908216806200045557607f821691505b602082108114156200047757634e487b7160e01b600052602260045260246000fd5b50919050565b6125a2806200048d6000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806379cc67901161010f578063ca15c873116100a2578063e467f7e011610071578063e467f7e01461049b578063e63ab1e9146104ae578063f94a138b146104d5578063ffc3a769146104e857600080fd5b8063ca15c87314610408578063d53913931461041b578063d547741f14610442578063dd62ed3e1461045557600080fd5b806395d89b41116100de57806395d89b41146103d2578063a217fddf146103da578063a457c2d7146103e2578063a9059cbb146103f557600080fd5b806379cc67901461033b5780638456cb591461034e5780639010d07c1461035657806391d148541461038e57600080fd5b8063313ce5671161018757806340c10f191161015657806340c10f19146102d457806342966c68146102e75780635c975abb146102fa57806370a082311461030557600080fd5b8063313ce5671461029757806336568abe146102a657806339509351146102b95780633f4ba83a146102cc57600080fd5b806318160ddd116101c357806318160ddd1461023a57806323b872dd1461024c578063248a9ca31461025f5780632f2ff15d1461028257600080fd5b806301ffc9a7146101ea57806306fdde0314610212578063095ea7b314610227575b600080fd5b6101fd6101f8366004611edb565b6104fb565b60405190151581526020015b60405180910390f35b61021a610557565b6040516102099190611f49565b6101fd610235366004611fc3565b6105e9565b6004545b604051908152602001610209565b6101fd61025a366004611fed565b6105ff565b61023e61026d366004612029565b60009081526020819052604090206001015490565b610295610290366004612042565b6106d0565b005b60405160128152602001610209565b6102956102b4366004612042565b6106f7565b6101fd6102c7366004611fc3565b610719565b610295610762565b6102956102e2366004611fc3565b610808565b6102956102f5366004612029565b6108b2565b60075460ff166101fd565b61023e61031336600461206e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b610295610349366004611fc3565b6108bf565b610295610959565b610369610364366004612089565b6109fd565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610209565b6101fd61039c366004612042565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61021a610a1c565b61023e600081565b6101fd6103f0366004611fc3565b610a2b565b6101fd610403366004611fc3565b610ae9565b61023e610416366004612029565b610af6565b61023e7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610295610450366004612042565b610b0d565b61023e6104633660046120ab565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020908152604080832093909416825291909152205490565b6102956104a9366004612244565b610b17565b61023e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6101fd6104e33660046122a8565b610c84565b6101fd6104f6366004612244565b610d7f565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f000000000000000000000000000000000000000000000000000000001480610551575061055182610e80565b92915050565b60606005805461056690612330565b80601f016020809104026020016040519081016040528092919081815260200182805461059290612330565b80156105df5780601f106105b4576101008083540402835291602001916105df565b820191906000526020600020905b8154815290600101906020018083116105c257829003601f168201915b5050505050905090565b60006105f6338484610f17565b50600192915050565b600061060c848484611096565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360209081526040808320338452909152902054828110156106b85760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6106c58533858403610f17565b506001949350505050565b6106da8282611308565b60008281526001602052604090206106f29082610e5e565b505050565b610701828261132e565b60008281526001602052604090206106f290826113c3565b33600081815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105f691859061075d9086906123b3565b610f17565b61078c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a3361039c565b6107fe5760405162461bcd60e51b815260206004820152603160248201527f4c315374616e6461726445524332303a206d757374206861766520706175736560448201527f7220726f6c6520746f20756e706175736500000000000000000000000000000060648201526084016106af565b6108066113e5565b565b6108327f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a63361039c565b6108a45760405162461bcd60e51b815260206004820152602e60248201527f4c315374616e6461726445524332303a206d7573742068617665206d696e746560448201527f7220726f6c6520746f206d696e7400000000000000000000000000000000000060648201526084016106af565b6108ae82826114ac565b5050565b6108bc33826115be565b50565b60006108cb8333610463565b9050818110156109425760405162461bcd60e51b8152602060048201526024808201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760448201527f616e63650000000000000000000000000000000000000000000000000000000060648201526084016106af565b61094f8333848403610f17565b6106f283836115be565b6109837f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a3361039c565b6109f55760405162461bcd60e51b815260206004820152602f60248201527f4c315374616e6461726445524332303a206d757374206861766520706175736560448201527f7220726f6c6520746f207061757365000000000000000000000000000000000060648201526084016106af565b610806611783565b6000828152600160205260408120610a159083611829565b9392505050565b60606006805461056690612330565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205482811015610ad25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016106af565b610adf3385858403610f17565b5060019392505050565b60006105f6338484611096565b600081815260016020526040812061055190611835565b610701828261183f565b8051825114610b8e5760405162461bcd60e51b815260206004820152602e60248201527f4c315374616e6461726445524332303a2062756c6b206d696e7420617267732060448201527f6d75737420626520657175616c7300000000000000000000000000000000000060648201526084016106af565b610bb87f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a63361039c565b610c2a5760405162461bcd60e51b815260206004820152602e60248201527f4c315374616e6461726445524332303a206d7573742068617665206d696e746560448201527f7220726f6c6520746f206d696e7400000000000000000000000000000000000060648201526084016106af565b60005b82518110156106f257610c72838281518110610c4b57610c4b6123cb565b6020026020010151838381518110610c6557610c656123cb565b60200260200101516114ac565b80610c7c816123fa565b915050610c2d565b600082518451148015610c98575081518351145b610d0a5760405162461bcd60e51b815260206004820152603260248201527f4c315374616e6461726445524332303a2062756c6b207472616e73666572206160448201527f726773206d75737420626520657175616c73000000000000000000000000000060648201526084016106af565b60005b84518110156106c557610d6c858281518110610d2b57610d2b6123cb565b6020026020010151858381518110610d4557610d456123cb565b6020026020010151858481518110610d5f57610d5f6123cb565b60200260200101516105ff565b5080610d77816123fa565b915050610d0d565b60008151835114610df85760405162461bcd60e51b815260206004820152603260248201527f4c315374616e6461726445524332303a2062756c6b207472616e73666572206160448201527f726773206d75737420626520657175616c73000000000000000000000000000060648201526084016106af565b3360005b84518110156106c557610e4282868381518110610e1b57610e1b6123cb565b6020026020010151868481518110610e3557610e356123cb565b6020026020010151611096565b80610e4c816123fa565b915050610dfc565b6108ae8282611865565b6000610a158373ffffffffffffffffffffffffffffffffffffffff8416611955565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061055157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610551565b73ffffffffffffffffffffffffffffffffffffffff8316610f9f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106af565b73ffffffffffffffffffffffffffffffffffffffff82166110285760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016106af565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff831661111f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016106af565b73ffffffffffffffffffffffffffffffffffffffff82166111a85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016106af565b6111b38383836119a4565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600260205260409020548181101561124f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016106af565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600260205260408082208585039055918516815290812080548492906112939084906123b3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112f991815260200190565b60405180910390a35b50505050565b60008281526020819052604090206001015461132481336119af565b6106f28383611865565b73ffffffffffffffffffffffffffffffffffffffff811633146113b95760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016106af565b6108ae8282611a65565b6000610a158373ffffffffffffffffffffffffffffffffffffffff8416611b1c565b60075460ff166114375760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106af565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff821661150f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106af565b61151b600083836119a4565b806004600082825461152d91906123b3565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040812080548392906115679084906123b3565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166116475760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016106af565b611653826000836119a4565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054818110156116ef5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016106af565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040812083830390556004805484929061172b908490612433565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b60075460ff16156117d65760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106af565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586114823390565b6000610a158383611c0f565b6000610551825490565b60008281526020819052604090206001015461185b81336119af565b6106f28383611a65565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166108ae5760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118f73390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600081815260018301602052604081205461199c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610551565b506000610551565b6106f2838383611c39565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166108ae57611a058173ffffffffffffffffffffffffffffffffffffffff166014611cb2565b611a10836020611cb2565b604051602001611a2192919061244a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262461bcd60e51b82526106af91600401611f49565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156108ae5760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008181526001830160205260408120548015611c05576000611b40600183612433565b8554909150600090611b5490600190612433565b9050818114611bb9576000866000018281548110611b7457611b746123cb565b9060005260206000200154905080876000018481548110611b9757611b976123cb565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611bca57611bca6124cb565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610551565b6000915050610551565b6000826000018281548110611c2657611c266123cb565b9060005260206000200154905092915050565b60075460ff16156106f25760405162461bcd60e51b815260206004820152602a60248201527f45524332305061757361626c653a20746f6b656e207472616e7366657220776860448201527f696c65207061757365640000000000000000000000000000000000000000000060648201526084016106af565b60606000611cc18360026124fa565b611ccc9060026123b3565b67ffffffffffffffff811115611ce457611ce46120d5565b6040519080825280601f01601f191660200182016040528015611d0e576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611d4557611d456123cb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611da857611da86123cb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000611de48460026124fa565b611def9060016123b3565b90505b6001811115611e8c577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611e3057611e306123cb565b1a60f81b828281518110611e4657611e466123cb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93611e8581612537565b9050611df2565b508315610a155760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106af565b600060208284031215611eed57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610a1557600080fd5b60005b83811015611f38578181015183820152602001611f20565b838111156113025750506000910152565b6020815260008251806020840152611f68816040850160208701611f1d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fbe57600080fd5b919050565b60008060408385031215611fd657600080fd5b611fdf83611f9a565b946020939093013593505050565b60008060006060848603121561200257600080fd5b61200b84611f9a565b925061201960208501611f9a565b9150604084013590509250925092565b60006020828403121561203b57600080fd5b5035919050565b6000806040838503121561205557600080fd5b8235915061206560208401611f9a565b90509250929050565b60006020828403121561208057600080fd5b610a1582611f9a565b6000806040838503121561209c57600080fd5b50508035926020909101359150565b600080604083850312156120be57600080fd5b6120c783611f9a565b915061206560208401611f9a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561214b5761214b6120d5565b604052919050565b600067ffffffffffffffff82111561216d5761216d6120d5565b5060051b60200190565b600082601f83011261218857600080fd5b8135602061219d61219883612153565b612104565b82815260059290921b840181019181810190868411156121bc57600080fd5b8286015b848110156121de576121d181611f9a565b83529183019183016121c0565b509695505050505050565b600082601f8301126121fa57600080fd5b8135602061220a61219883612153565b82815260059290921b8401810191818101908684111561222957600080fd5b8286015b848110156121de578035835291830191830161222d565b6000806040838503121561225757600080fd5b823567ffffffffffffffff8082111561226f57600080fd5b61227b86838701612177565b9350602085013591508082111561229157600080fd5b5061229e858286016121e9565b9150509250929050565b6000806000606084860312156122bd57600080fd5b833567ffffffffffffffff808211156122d557600080fd5b6122e187838801612177565b945060208601359150808211156122f757600080fd5b61230387838801612177565b9350604086013591508082111561231957600080fd5b50612326868287016121e9565b9150509250925092565b600181811c9082168061234457607f821691505b6020821081141561237e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156123c6576123c6612384565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561242c5761242c612384565b5060010190565b60008282101561244557612445612384565b500390565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612482816017850160208801611f1d565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516124bf816028840160208801611f1d565b01602801949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561253257612532612384565b500290565b60008161254657612546612384565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea2646970667358221220ec545ac9887190495c294687b26d57b2c56e4c0e69049d9d3eb841ced00b0d9d64736f6c63430008090033a2646970667358221220780f31feb8cb831c155bad22eadde1376c52e08c7d33c1a8360fe6d9d56c34a264736f6c63430008090033"), + }, + { + contract: l1StandardERC721Factory, + // commit: https://github.com/oasysgames/oasys-optimism/blob/b7cd941581f372f4677751aabdeb0ed9291eb0d9/packages/contracts/contracts/oasys/L1/token/L1StandardERC721.sol + code: mustDecodeCode("0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c4af445814610030575b600080fd5b61004361003e3660046101c6565b610045565b005b600033848484604051610057906100de565b61006494939291906102c8565b604051809103906000f080158015610080573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff16836040516100a89190610328565b604051908190038120907fbda470470721b5a2c56d61dc0aa9496dd02d39170f9dff803c35efbab673652290600090a350505050565b6141d7806200034583390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261012c57600080fd5b813567ffffffffffffffff80821115610147576101476100ec565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561018d5761018d6100ec565b816040528381528660208588010111156101a657600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156101db57600080fd5b833567ffffffffffffffff808211156101f357600080fd5b6101ff8783880161011b565b9450602086013591508082111561021557600080fd5b6102218783880161011b565b9350604086013591508082111561023757600080fd5b506102448682870161011b565b9150509250925092565b60005b83811015610269578181015183820152602001610251565b83811115610278576000848401525b50505050565b6000815180845261029681602086016020860161024e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff851681526080602082015260006102f7608083018661027e565b8281036040840152610309818661027e565b9050828103606084015261031d818561027e565b979650505050505050565b6000825161033a81846020870161024e565b919091019291505056fe60806040523480156200001157600080fd5b50604051620041d7380380620041d783398101604081905262000034916200042a565b8251839083906200004d906002906020850190620002b7565b50805162000063906003906020840190620002b7565b5050600c805460ff191690555080516200008590600f906020840190620002b7565b506200009360008562000100565b620000bf7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a68562000100565b620000eb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8562000100565b620000f68462000143565b5050505062000519565b6200011782826200019560201b620016e01760201c565b60008281526001602090815260409091206200013e918390620016ea620001a5821b17901c565b505050565b600e80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620001a18282620001c5565b5050565b6000620001bc836001600160a01b03841662000265565b90505b92915050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620001a1576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002213390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000818152600183016020526040812054620002ae57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620001bf565b506000620001bf565b828054620002c590620004dc565b90600052602060002090601f016020900481019282620002e9576000855562000334565b82601f106200030457805160ff191683800117855562000334565b8280016001018555821562000334579182015b828111156200033457825182559160200191906001019062000317565b506200034292915062000346565b5090565b5b8082111562000342576000815560010162000347565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200038557600080fd5b81516001600160401b0380821115620003a257620003a26200035d565b604051601f8301601f19908116603f01168101908282118183101715620003cd57620003cd6200035d565b81604052838152602092508683858801011115620003ea57600080fd5b600091505b838210156200040e5785820183015181830184015290820190620003ef565b83821115620004205760008385830101525b9695505050505050565b600080600080608085870312156200044157600080fd5b84516001600160a01b03811681146200045957600080fd5b60208601519094506001600160401b03808211156200047757600080fd5b620004858883890162000373565b945060408701519150808211156200049c57600080fd5b620004aa8883890162000373565b93506060870151915080821115620004c157600080fd5b50620004d08782880162000373565b91505092959194509250565b600181811c90821680620004f157607f821691505b602082108114156200051357634e487b7160e01b600052602260045260246000fd5b50919050565b613cae80620005296000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c806370a082311161017b578063b88d4fde116100d8578063e467f7e01161008c578063e985e9c511610071578063e985e9c5146105e4578063f2fde38b14610620578063f94a138b1461063357600080fd5b8063e467f7e0146105aa578063e63ab1e9146105bd57600080fd5b8063ca15c873116100bd578063ca15c8731461055d578063d539139314610570578063d547741f1461059757600080fd5b8063b88d4fde14610537578063c87b56dd1461054a57600080fd5b806395d89b411161012f578063a22cb46511610114578063a22cb465146104fe578063aafb2d4414610511578063b4e0ebf41461052457600080fd5b806395d89b41146104ee578063a217fddf146104f657600080fd5b80638da5cb5b116101605780638da5cb5b146104915780639010d07c146104a457806391d14854146104b757600080fd5b806370a08231146104765780638456cb591461048957600080fd5b80632f745c591161022957806342966c68116101dd57806355f804b3116101c257806355f804b3146104455780635c975abb146104585780636352211e1461046357600080fd5b806342966c681461041f5780634f6ccce71461043257600080fd5b80633f4ba83a1161020e5780633f4ba83a146103f157806340c10f19146103f957806342842e0e1461040c57600080fd5b80632f745c59146103cb57806336568abe146103de57600080fd5b8063162094c41161028057806323b872dd1161026557806323b872dd14610382578063248a9ca3146103955780632f2ff15d146103b857600080fd5b8063162094c41461035d57806318160ddd1461037057600080fd5b806306fdde03116102b157806306fdde031461030a578063081812fc1461031f578063095ea7b31461034a57600080fd5b806301ffc9a7146102cd57806303b03434146102f5575b600080fd5b6102e06102db36600461319b565b610646565b60405190151581526020015b60405180910390f35b610308610303366004613343565b610657565b005b61031261075a565b6040516102ec9190613441565b61033261032d366004613454565b6107ec565b6040516001600160a01b0390911681526020016102ec565b61030861035836600461346d565b610892565b61030861036b366004613525565b6109c4565b600a545b6040519081526020016102ec565b61030861039036600461356c565b610a48565b6103746103a3366004613454565b60009081526020819052604090206001015490565b6103086103c63660046135a8565b610ad0565b6103746103d936600461346d565b610af2565b6103086103ec3660046135a8565b610b9a565b610308610bbc565b61030861040736600461346d565b610c3c565b61030861041a36600461356c565b610cbc565b61030861042d366004613454565b610cd7565b610374610440366004613454565b610d5e565b6103086104533660046135d4565b610e02565b600c5460ff166102e0565b610332610471366004613454565b610e6c565b610374610484366004613609565b610ef7565b610308610f91565b600e54610332906001600160a01b031681565b6103326104b2366004613624565b61100f565b6102e06104c53660046135a8565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61031261102e565b610374600081565b61030861050c366004613646565b61103d565b61030861051f366004613682565b611120565b610308610532366004613757565b611267565b610308610545366004613871565b61138d565b610312610558366004613454565b611415565b61037461056b366004613454565b611420565b6103747f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6103086105a53660046135a8565b611437565b6103086105b83660046138d9565b611441565b6103747f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102e06105f2366004613933565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b61030861062e366004613609565b611588565b610308610641366004613343565b6115e8565b6000610651826116ff565b92915050565b81518351148015610669575080518251145b6106e05760405162461bcd60e51b815260206004820152602560248201527f4c315374616e646172644552433732313a2061726773206d757374206265206560448201527f7175616c7300000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b60005b8351811015610754576107428482815181106107015761070161395d565b602002602001015184838151811061071b5761071b61395d565b60200260200101518484815181106107355761073561395d565b6020026020010151610cbc565b8061074c816139bb565b9150506106e3565b50505050565b606060028054610769906139f4565b80601f0160208091040260200160405190810160405280929190818152602001828054610795906139f4565b80156107e25780601f106107b7576101008083540402835291602001916107e2565b820191906000526020600020905b8154815290600101906020018083116107c557829003601f168201915b5050505050905090565b6000818152600460205260408120546001600160a01b03166108765760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016106d7565b506000908152600660205260409020546001600160a01b031690565b600061089d82610e6c565b9050806001600160a01b0316836001600160a01b031614156109275760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084016106d7565b336001600160a01b0382161480610943575061094381336105f2565b6109b55760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016106d7565b6109bf8383611755565b505050565b6109ee7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336104c5565b610a3a5760405162461bcd60e51b815260206004820152601e60248201527f4c315374616e646172644552433732313a20696e76616c696420726f6c65000060448201526064016106d7565b610a4482826117db565b5050565b610a53335b82611884565b610ac55760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016106d7565b6109bf83838361198c565b610ada8282611b7c565b60008281526001602052604090206109bf90826116ea565b6000610afd83610ef7565b8210610b715760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e647300000000000000000000000000000000000000000060648201526084016106d7565b506001600160a01b03919091166000908152600860209081526040808320938352929052205490565b610ba48282611ba2565b60008281526001602052604090206109bf9082611c2a565b610be67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a336104c5565b610c325760405162461bcd60e51b815260206004820152601e60248201527f4c315374616e646172644552433732313a20696e76616c696420726f6c65000060448201526064016106d7565b610c3a611c3f565b565b610c667f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336104c5565b610cb25760405162461bcd60e51b815260206004820152601e60248201527f4c315374616e646172644552433732313a20696e76616c696420726f6c65000060448201526064016106d7565b610a448282611cf9565b6109bf8383836040518060200160405280600081525061138d565b610ce033610a4d565b610d525760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f7665640000000000000000000000000000000060648201526084016106d7565b610d5b81611e5f565b50565b6000610d69600a5490565b8210610ddd5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e6473000000000000000000000000000000000000000060648201526084016106d7565b600a8281548110610df057610df061395d565b90600052602060002001549050919050565b610e0d6000336104c5565b610e595760405162461bcd60e51b815260206004820152601e60248201527f4c315374616e646172644552433732313a20696e76616c696420726f6c65000060448201526064016106d7565b8051610a4490600f90602084019061309e565b6000818152600460205260408120546001600160a01b0316806106515760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e000000000000000000000000000000000000000000000060648201526084016106d7565b60006001600160a01b038216610f755760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f20616464726573730000000000000000000000000000000000000000000060648201526084016106d7565b506001600160a01b031660009081526005602052604090205490565b610fbb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a336104c5565b6110075760405162461bcd60e51b815260206004820152601e60248201527f4c315374616e646172644552433732313a20696e76616c696420726f6c65000060448201526064016106d7565b610c3a611e68565b60008281526001602052604081206110279083611f0e565b9392505050565b606060038054610769906139f4565b6001600160a01b0382163314156110965760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106d7565b3360008181526007602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b80518251146111975760405162461bcd60e51b815260206004820152602560248201527f4c315374616e646172644552433732313a2061726773206d757374206265206560448201527f7175616c7300000000000000000000000000000000000000000000000000000060648201526084016106d7565b6111c17f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336104c5565b61120d5760405162461bcd60e51b815260206004820152601e60248201527f4c315374616e646172644552433732313a20696e76616c696420726f6c65000060448201526064016106d7565b60005b82518110156109bf5761125583828151811061122e5761122e61395d565b60200260200101518383815181106112485761124861395d565b60200260200101516117db565b8061125f816139bb565b915050611210565b82518451148015611279575081518351145b8015611286575080518251145b6112f85760405162461bcd60e51b815260206004820152602560248201527f4c315374616e646172644552433732313a2061726773206d757374206265206560448201527f7175616c7300000000000000000000000000000000000000000000000000000060648201526084016106d7565b60005b8451811015611386576113748582815181106113195761131961395d565b60200260200101518583815181106113335761133361395d565b602002602001015185848151811061134d5761134d61395d565b60200260200101518585815181106113675761136761395d565b602002602001015161138d565b8061137e816139bb565b9150506112fb565b5050505050565b6113973383611884565b6114095760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016106d7565b61075484848484611f1a565b606061065182611fa3565b600081815260016020526040812061065190612121565b610ba4828261212b565b80518251146114b85760405162461bcd60e51b815260206004820152602560248201527f4c315374616e646172644552433732313a2061726773206d757374206265206560448201527f7175616c7300000000000000000000000000000000000000000000000000000060648201526084016106d7565b6114e27f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336104c5565b61152e5760405162461bcd60e51b815260206004820152601e60248201527f4c315374616e646172644552433732313a20696e76616c696420726f6c65000060448201526064016106d7565b60005b82518110156109bf5761157683828151811061154f5761154f61395d565b60200260200101518383815181106115695761156961395d565b6020026020010151611cf9565b80611580816139bb565b915050611531565b6115936000336104c5565b6115df5760405162461bcd60e51b815260206004820152601e60248201527f4c315374616e646172644552433732313a20696e76616c696420726f6c65000060448201526064016106d7565b610d5b81612151565b815183511480156115fa575080518251145b61166c5760405162461bcd60e51b815260206004820152602560248201527f4c315374616e646172644552433732313a2061726773206d757374206265206560448201527f7175616c7300000000000000000000000000000000000000000000000000000060648201526084016106d7565b60005b8351811015610754576116ce84828151811061168d5761168d61395d565b60200260200101518483815181106116a7576116a761395d565b60200260200101518484815181106116c1576116c161395d565b6020026020010151610a48565b806116d8816139bb565b91505061166f565b610a4482826121bb565b6000611027836001600160a01b038416612277565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806106515750610651826122c6565b600081815260066020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03841690811790915581906117a282610e6c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000828152600460205260409020546001600160a01b03166118655760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201527f6578697374656e7420746f6b656e00000000000000000000000000000000000060648201526084016106d7565b6000828152600d6020908152604090912082516109bf9284019061309e565b6000818152600460205260408120546001600160a01b031661190e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016106d7565b600061191983610e6c565b9050806001600160a01b0316846001600160a01b031614806119545750836001600160a01b0316611949846107ec565b6001600160a01b0316145b8061198457506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661199f82610e6c565b6001600160a01b031614611a1b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e000000000000000000000000000000000000000000000060648201526084016106d7565b6001600160a01b038216611a965760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106d7565b611aa1838383612368565b611aac600082611755565b6001600160a01b0383166000908152600560205260408120805460019290611ad5908490613a48565b90915550506001600160a01b0382166000908152600560205260408120805460019290611b03908490613a5f565b909155505060008181526004602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600082815260208190526040902060010154611b988133612373565b6109bf83836121bb565b6001600160a01b0381163314611c205760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016106d7565b610a44828261240f565b6000611027836001600160a01b0384166124ac565b600c5460ff16611c915760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106d7565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038216611d4f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106d7565b6000818152600460205260409020546001600160a01b031615611db45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106d7565b611dc060008383612368565b6001600160a01b0382166000908152600560205260408120805460019290611de9908490613a5f565b909155505060008181526004602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b610d5b8161259f565b600c5460ff1615611ebb5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106d7565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611cdc3390565b600061102783836125df565b611f2584848461198c565b611f3184848484612609565b6107545760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016106d7565b6000818152600460205260409020546060906001600160a01b03166120305760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f722060448201527f6e6f6e6578697374656e7420746f6b656e00000000000000000000000000000060648201526084016106d7565b6000828152600d602052604081208054612049906139f4565b80601f0160208091040260200160405190810160405280929190818152602001828054612075906139f4565b80156120c25780601f10612097576101008083540402835291602001916120c2565b820191906000526020600020905b8154815290600101906020018083116120a557829003601f168201915b5050505050905060006120d36127d4565b90508051600014156120e6575092915050565b815115612118578082604051602001612100929190613a77565b60405160208183030381529060405292505050919050565b611984846127e3565b6000610651825490565b6000828152602081905260409020600101546121478133612373565b6109bf838361240f565b600e80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610a44576000828152602081815260408083206001600160a01b0385168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556122333390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008181526001830160205260408120546122be57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610651565b506000610651565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061235957507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806106515750610651826128cb565b6109bf838383612921565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610a44576123af816001600160a01b031660146129a5565b6123ba8360206129a5565b6040516020016123cb929190613aa6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262461bcd60e51b82526106d791600401613441565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1615610a44576000828152602081815260408083206001600160a01b038516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600081815260018301602052604081205480156125955760006124d0600183613a48565b85549091506000906124e490600190613a48565b90508181146125495760008660000182815481106125045761250461395d565b90600052602060002001549050808760000184815481106125275761252761395d565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061255a5761255a613b27565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610651565b6000915050610651565b6125a881612bce565b6000818152600d6020526040902080546125c1906139f4565b159050610d5b576000818152600d60205260408120610d5b91613122565b60008260000182815481106125f6576125f661395d565b9060005260206000200154905092915050565b60006001600160a01b0384163b156127c9576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290612666903390899088908890600401613b56565b602060405180830381600087803b15801561268057600080fd5b505af19250505080156126ce575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126cb91810190613b92565b60015b61277e573d8080156126fc576040519150601f19603f3d011682016040523d82523d6000602084013e612701565b606091505b5080516127765760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016106d7565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611984565b506001949350505050565b6060600f8054610769906139f4565b6000818152600460205260409020546060906001600160a01b03166128705760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e000000000000000000000000000000000060648201526084016106d7565b600061287a6127d4565b9050600081511161289a5760405180602001604052806000815250611027565b806128a484612c8d565b6040516020016128b5929190613a77565b6040516020818303038152906040529392505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f000000000000000000000000000000000000000000000000000000001480610651575061065182612dbf565b61292c838383612e56565b600c5460ff16156109bf5760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201527f68696c652070617573656400000000000000000000000000000000000000000060648201526084016106d7565b606060006129b4836002613baf565b6129bf906002613a5f565b67ffffffffffffffff8111156129d7576129d76131b8565b6040519080825280601f01601f191660200182016040528015612a01576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612a3857612a3861395d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612a9b57612a9b61395d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000612ad7846002613baf565b612ae2906001613a5f565b90505b6001811115612b7f577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612b2357612b2361395d565b1a60f81b828281518110612b3957612b3961395d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93612b7881613bec565b9050612ae5565b5083156110275760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106d7565b6000612bd982610e6c565b9050612be781600084612368565b612bf2600083611755565b6001600160a01b0381166000908152600560205260408120805460019290612c1b908490613a48565b909155505060008281526004602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b606081612ccd57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612cf75780612ce1816139bb565b9150612cf09050600a83613c50565b9150612cd1565b60008167ffffffffffffffff811115612d1257612d126131b8565b6040519080825280601f01601f191660200182016040528015612d3c576020820181803683370190505b5090505b841561198457612d51600183613a48565b9150612d5e600a86613c64565b612d69906030613a5f565b60f81b818381518110612d7e57612d7e61395d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612db8600a86613c50565b9450612d40565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061065157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610651565b6001600160a01b038316612eb157612eac81600a80546000838152600b60205260408120829055600182018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80155565b612ed4565b816001600160a01b0316836001600160a01b031614612ed457612ed48382612f0e565b6001600160a01b038216612eeb576109bf81612fab565b826001600160a01b0316826001600160a01b0316146109bf576109bf828261305a565b60006001612f1b84610ef7565b612f259190613a48565b600083815260096020526040902054909150808214612f78576001600160a01b03841660009081526008602090815260408083208584528252808320548484528184208190558352600990915290208190555b5060009182526009602090815260408084208490556001600160a01b039094168352600881528383209183525290812055565b600a54600090612fbd90600190613a48565b6000838152600b6020526040812054600a8054939450909284908110612fe557612fe561395d565b9060005260206000200154905080600a83815481106130065761300661395d565b6000918252602080832090910192909255828152600b9091526040808220849055858252812055600a80548061303e5761303e613b27565b6001900381819060005260206000200160009055905550505050565b600061306583610ef7565b6001600160a01b039093166000908152600860209081526040808320868452825280832085905593825260099052919091209190915550565b8280546130aa906139f4565b90600052602060002090601f0160209004810192826130cc5760008555613112565b82601f106130e557805160ff1916838001178555613112565b82800160010185558215613112579182015b828111156131125782518255916020019190600101906130f7565b5061311e929150613158565b5090565b50805461312e906139f4565b6000825580601f1061313e575050565b601f016020900490600052602060002090810190610d5b91905b5b8082111561311e5760008155600101613159565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610d5b57600080fd5b6000602082840312156131ad57600080fd5b81356110278161316d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561322e5761322e6131b8565b604052919050565b600067ffffffffffffffff821115613250576132506131b8565b5060051b60200190565b80356001600160a01b038116811461327157600080fd5b919050565b600082601f83011261328757600080fd5b8135602061329c61329783613236565b6131e7565b82815260059290921b840181019181810190868411156132bb57600080fd5b8286015b848110156132dd576132d08161325a565b83529183019183016132bf565b509695505050505050565b600082601f8301126132f957600080fd5b8135602061330961329783613236565b82815260059290921b8401810191818101908684111561332857600080fd5b8286015b848110156132dd578035835291830191830161332c565b60008060006060848603121561335857600080fd5b833567ffffffffffffffff8082111561337057600080fd5b61337c87838801613276565b9450602086013591508082111561339257600080fd5b61339e87838801613276565b935060408601359150808211156133b457600080fd5b506133c1868287016132e8565b9150509250925092565b60005b838110156133e65781810151838201526020016133ce565b838111156107545750506000910152565b6000815180845261340f8160208601602086016133cb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061102760208301846133f7565b60006020828403121561346657600080fd5b5035919050565b6000806040838503121561348057600080fd5b6134898361325a565b946020939093013593505050565b600082601f8301126134a857600080fd5b813567ffffffffffffffff8111156134c2576134c26131b8565b6134f360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016131e7565b81815284602083860101111561350857600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561353857600080fd5b82359150602083013567ffffffffffffffff81111561355657600080fd5b61356285828601613497565b9150509250929050565b60008060006060848603121561358157600080fd5b61358a8461325a565b92506135986020850161325a565b9150604084013590509250925092565b600080604083850312156135bb57600080fd5b823591506135cb6020840161325a565b90509250929050565b6000602082840312156135e657600080fd5b813567ffffffffffffffff8111156135fd57600080fd5b61198484828501613497565b60006020828403121561361b57600080fd5b6110278261325a565b6000806040838503121561363757600080fd5b50508035926020909101359150565b6000806040838503121561365957600080fd5b6136628361325a565b91506020830135801515811461367757600080fd5b809150509250929050565b6000806040838503121561369557600080fd5b823567ffffffffffffffff808211156136ad57600080fd5b6136b9868387016132e8565b93506020915081850135818111156136d057600080fd5b8501601f810187136136e157600080fd5b80356136ef61329782613236565b81815260059190911b8201840190848101908983111561370e57600080fd5b8584015b838110156137465780358681111561372a5760008081fd5b6137388c8983890101613497565b845250918601918601613712565b508096505050505050509250929050565b6000806000806080858703121561376d57600080fd5b843567ffffffffffffffff8082111561378557600080fd5b61379188838901613276565b95506020915081870135818111156137a857600080fd5b6137b489828a01613276565b9550506040870135818111156137c957600080fd5b6137d589828a016132e8565b9450506060870135818111156137ea57600080fd5b8701601f810189136137fb57600080fd5b803561380961329782613236565b81815260059190911b8201840190848101908b83111561382857600080fd5b8584015b83811015613860578035868111156138445760008081fd5b6138528e8983890101613497565b84525091860191860161382c565b50989b979a50959850505050505050565b6000806000806080858703121561388757600080fd5b6138908561325a565b935061389e6020860161325a565b925060408501359150606085013567ffffffffffffffff8111156138c157600080fd5b6138cd87828801613497565b91505092959194509250565b600080604083850312156138ec57600080fd5b823567ffffffffffffffff8082111561390457600080fd5b61391086838701613276565b9350602085013591508082111561392657600080fd5b50613562858286016132e8565b6000806040838503121561394657600080fd5b61394f8361325a565b91506135cb6020840161325a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139ed576139ed61398c565b5060010190565b600181811c90821680613a0857607f821691505b60208210811415613a42577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082821015613a5a57613a5a61398c565b500390565b60008219821115613a7257613a7261398c565b500190565b60008351613a898184602088016133cb565b835190830190613a9d8183602088016133cb565b01949350505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613ade8160178501602088016133cb565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351613b1b8160288401602088016133cb565b01602801949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006001600160a01b03808716835280861660208401525083604083015260806060830152613b8860808301846133f7565b9695505050505050565b600060208284031215613ba457600080fd5b81516110278161316d565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613be757613be761398c565b500290565b600081613bfb57613bfb61398c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082613c5f57613c5f613c21565b500490565b600082613c7357613c73613c21565b50069056fea2646970667358221220c820b4e1ce66127f656ca82e3d097696161e24564bfe76b1f003602207c192b864736f6c63430008090033a264697066735822122014cd4ecd8ae6746ba07e6e813e0e41d947bb8c2cae27c7dbadbe97ea6107406864736f6c63430008090033"), + }, + { + contract: tealswapRouter, + // commit: https://github.com/oasysgames/oasys-ecosystem-contract/blob/f346dc9ae3e6f65c4e026687455fdb2eeff47ee8/contracts/Tealswap/periphery/TealswapRouter.sol + code: mustDecodeCode( + "0x6080604052600436106101855760003560e01c806396ed28f9116100d1578063c45a01551161008a578063ded9382a11610064578063ded9382a14610490578063e8e33700146104b0578063f305d719146104eb578063fb3bdb41146104fe57600080fd5b8063c45a015514610435578063d06ca61f14610450578063d52bb6f41461047057600080fd5b806396ed28f91461036f578063ad5c4648146103a7578063ad615dec146103c2578063af2979eb146103e2578063b6f9de9514610402578063baa2abde1461041557600080fd5b806352707d8c1161013e5780635c11d795116101185780635c11d795146102fc578063791ac9471461031c5780637ff36ab51461033c5780638803dbee1461034f57600080fd5b806352707d8c1461028e578063571fd012146102bc5780635b0d5984146102dc57600080fd5b806302751cec146101a757806318cbafe5146101e15780631f00ca741461020e5780632195995c1461022e57806338ed17391461024e5780634a25d94a1461026e57600080fd5b366101a257336001602960991b01146101a0576101a0613501565b005b600080fd5b3480156101b357600080fd5b506101c76101c236600461353f565b610511565b604080519283526020830191909152015b60405180910390f35b3480156101ed57600080fd5b506102016101fc3660046135e2565b6105d2565b6040516101d89190613655565b34801561021a57600080fd5b506102016102293660046136af565b610894565b34801561023a57600080fd5b506101c761024936600461379f565b6108af565b34801561025a57600080fd5b506102016102693660046135e2565b61096f565b34801561027a57600080fd5b506102016102893660046135e2565b610a74565b34801561029a57600080fd5b506102ae6102a9366004613849565b610b77565b6040519081526020016101d8565b3480156102c857600080fd5b506102ae6102d7366004613849565b610b8e565b3480156102e857600080fd5b506102ae6102f736600461387b565b610b9c565b34801561030857600080fd5b506101a06103173660046135e2565b610c57565b34801561032857600080fd5b506101a06103373660046135e2565b610ebf565b61020161034a366004613911565b61108f565b34801561035b57600080fd5b5061020161036a3660046135e2565b61132f565b34801561037b57600080fd5b5061038f61038a366004613978565b6113d3565b6040516001600160a01b0390911681526020016101d8565b3480156103b357600080fd5b5061038f6001602960991b0181565b3480156103ce57600080fd5b506102ae6103dd3660046139b1565b61145c565b3480156103ee57600080fd5b506102ae6103fd36600461353f565b611471565b6101a0610410366004613911565b611594565b34801561042157600080fd5b506101c76104303660046139dd565b61187a565b34801561044157600080fd5b5061038f6018602960991b0181565b34801561045c57600080fd5b5061020161046b3660046136af565b611a47565b34801561047c57600080fd5b506101c761048b366004613978565b611a5b565b34801561049c57600080fd5b506101c76104ab36600461387b565b611a7c565b3480156104bc57600080fd5b506104d06104cb366004613a4f565b611b3d565b604080519384526020840192909252908201526060016101d8565b6104d06104f936600461353f565b611c31565b61020161050c366004613911565b611e2f565b600080824281101561053e5760405162461bcd60e51b815260040161053590613acb565b60405180910390fd5b610554896001602960991b018a8a8a308a61187a565b9093509150610564898685612105565b604051632e1a7d4d60e01b8152600481018390526001602960991b0190632e1a7d4d90602401600060405180830381600087803b1580156105a457600080fd5b505af11580156105b8573d6000803e3d6000fd5b505050506105c68583612236565b50965096945050505050565b606081428110156105f55760405162461bcd60e51b815260040161053590613acb565b6001602960991b01868661060a600182613b18565b81811061061957610619613b2f565b905060200201602081019061062e9190613b45565b6001600160a01b0316146106545760405162461bcd60e51b815260040161053590613b62565b6106996018602960991b018988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061231592505050565b91508682600184516106ab9190613b18565b815181106106bb576106bb613b2f565b602002602001015110156106e15760405162461bcd60e51b815260040161053590613b99565b61078d868660008181106106f7576106f7613b2f565b905060200201602081019061070c9190613b45565b3361076d6018602960991b018a8a600081811061072b5761072b613b2f565b90506020020160208101906107409190613b45565b8b8b600181811061075357610753613b2f565b90506020020160208101906107689190613b45565b61253a565b8560008151811061078057610780613b2f565b6020026020010151612613565b6107cc82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250612751915050565b6001602960991b016001600160a01b0316632e1a7d4d83600185516107f19190613b18565b8151811061080157610801613b2f565b60200260200101516040518263ffffffff1660e01b815260040161082791815260200190565b600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b5050505061088984836001855161086c9190613b18565b8151811061087c5761087c613b2f565b6020026020010151612236565b509695505050505050565b60606108a86018602960991b01848461290a565b9392505050565b60008060006108c66018602960991b018f8f61253a565b90506000876108d5578c6108d9565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90610914903390309086908f908e908e908e90600401613be3565b600060405180830381600087803b15801561092e57600080fd5b505af1158015610942573d6000803e3d6000fd5b505050506109558f8f8f8f8f8f8f61187a565b809450819550505050509b509b9950505050505050505050565b606081428110156109925760405162461bcd60e51b815260040161053590613acb565b6109d76018602960991b018988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061231592505050565b91508682600184516109e99190613b18565b815181106109f9576109f9613b2f565b60200260200101511015610a1f5760405162461bcd60e51b815260040161053590613b99565b610a35868660008181106106f7576106f7613b2f565b61088982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612751915050565b60608142811015610a975760405162461bcd60e51b815260040161053590613acb565b6001602960991b018686610aac600182613b18565b818110610abb57610abb613b2f565b9050602002016020810190610ad09190613b45565b6001600160a01b031614610af65760405162461bcd60e51b815260040161053590613b62565b610b3b6018602960991b018988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061290a92505050565b91508682600081518110610b5157610b51613b2f565b602002602001015111156106e15760405162461bcd60e51b815260040161053590613c24565b6000610b8585858585612b08565b95945050505050565b6000610b8585858585612bf1565b600080610bb86018602960991b018d6001602960991b0161253a565b9050600086610bc7578b610bcb565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90610c06903390309086908e908d908d908d90600401613be3565b600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b50505050610c468d8d8d8d8d8d611471565b9d9c50505050505050505050505050565b8042811015610c785760405162461bcd60e51b815260040161053590613acb565b610cf085856000818110610c8e57610c8e613b2f565b9050602002016020810190610ca39190613b45565b33610cea6018602960991b0189896000818110610cc257610cc2613b2f565b9050602002016020810190610cd79190613b45565b8a8a600181811061075357610753613b2f565b8a612613565b60008585610cff600182613b18565b818110610d0e57610d0e613b2f565b9050602002016020810190610d239190613b45565b6040516370a0823160e01b81526001600160a01b03868116600483015291909116906370a082319060240160206040518083038186803b158015610d6657600080fd5b505afa158015610d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9e9190613c6a565b9050610dde868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250612ce0915050565b86818787610ded600182613b18565b818110610dfc57610dfc613b2f565b9050602002016020810190610e119190613b45565b6040516370a0823160e01b81526001600160a01b03888116600483015291909116906370a08231906024015b60206040518083038186803b158015610e5557600080fd5b505afa158015610e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8d9190613c6a565b610e979190613b18565b1015610eb55760405162461bcd60e51b815260040161053590613b99565b5050505050505050565b8042811015610ee05760405162461bcd60e51b815260040161053590613acb565b6001602960991b018585610ef5600182613b18565b818110610f0457610f04613b2f565b9050602002016020810190610f199190613b45565b6001600160a01b031614610f3f5760405162461bcd60e51b815260040161053590613b62565b610f5585856000818110610c8e57610c8e613b2f565b610f93858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250612ce0915050565b6040516370a0823160e01b81523060048201526000906001602960991b01906370a082319060240160206040518083038186803b158015610fd357600080fd5b505afa158015610fe7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100b9190613c6a565b90508681101561102d5760405162461bcd60e51b815260040161053590613b99565b604051632e1a7d4d60e01b8152600481018290526001602960991b0190632e1a7d4d90602401600060405180830381600087803b15801561106d57600080fd5b505af1158015611081573d6000803e3d6000fd5b50505050610eb58482612236565b606081428110156110b25760405162461bcd60e51b815260040161053590613acb565b6001602960991b0186866000816110cb576110cb613b2f565b90506020020160208101906110e09190613b45565b6001600160a01b0316146111065760405162461bcd60e51b815260040161053590613b62565b61114b6018602960991b013488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061231592505050565b915086826001845161115d9190613b18565b8151811061116d5761116d613b2f565b602002602001015110156111935760405162461bcd60e51b815260040161053590613b99565b6001602960991b016001600160a01b031663d0e30db0836000815181106111bc576111bc613b2f565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156111ef57600080fd5b505af1158015611203573d6000803e3d6000fd5b50505050506001602960991b016001600160a01b031663a9059cbb61123c6018602960991b0189896000818110610cc257610cc2613b2f565b8460008151811061124f5761124f613b2f565b60200260200101516040518363ffffffff1660e01b81526004016112889291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b1580156112a257600080fd5b505af11580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da9190613c83565b6112e6576112e6613501565b61132582878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612751915050565b5095945050505050565b606081428110156113525760405162461bcd60e51b815260040161053590613acb565b6113976018602960991b018988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061290a92505050565b915086826000815181106113ad576113ad613b2f565b60200260200101511115610a1f5760405162461bcd60e51b815260040161053590613c24565b60405163e6a4390560e01b81526001600160a01b038084166004830152821660248201526000906018602960991b019063e6a439059060440160206040518083038186803b15801561142457600080fd5b505afa158015611438573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a89190613ca0565b6000611469848484613017565b949350505050565b600081428110156114945760405162461bcd60e51b815260040161053590613acb565b6114aa886001602960991b01898989308961187a565b6040516370a0823160e01b81523060048201529093506115329150899086906001600160a01b038316906370a082319060240160206040518083038186803b1580156114f557600080fd5b505afa158015611509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152d9190613c6a565b612105565b604051632e1a7d4d60e01b8152600481018390526001602960991b0190632e1a7d4d90602401600060405180830381600087803b15801561157257600080fd5b505af1158015611586573d6000803e3d6000fd5b505050506108898483612236565b80428110156115b55760405162461bcd60e51b815260040161053590613acb565b6001602960991b0185856000816115ce576115ce613b2f565b90506020020160208101906115e39190613b45565b6001600160a01b0316146116095760405162461bcd60e51b815260040161053590613b62565b60003490506001602960991b016001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561165057600080fd5b505af1158015611664573d6000803e3d6000fd5b50505050506001602960991b016001600160a01b031663a9059cbb61169d6018602960991b0189896000818110610cc257610cc2613b2f565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b1580156116e557600080fd5b505af11580156116f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171d9190613c83565b61172957611729613501565b60008686611738600182613b18565b81811061174757611747613b2f565b905060200201602081019061175c9190613b45565b6040516370a0823160e01b81526001600160a01b03878116600483015291909116906370a082319060240160206040518083038186803b15801561179f57600080fd5b505afa1580156117b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d79190613c6a565b9050611817878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612ce0915050565b87818888611826600182613b18565b81811061183557611835613b2f565b905060200201602081019061184a9190613b45565b6040516370a0823160e01b81526001600160a01b03898116600483015291909116906370a0823190602401610e3d565b600080824281101561189e5760405162461bcd60e51b815260040161053590613acb565b60006118b26018602960991b018c8c61253a565b6040516323b872dd60e01b81523360048201526001600160a01b03821660248201819052604482018c90529192506323b872dd90606401602060405180830381600087803b15801561190357600080fd5b505af1158015611917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193b9190613c83565b5060405163226bf2d160e21b81526001600160a01b03878116600483015260009182918416906389afcb44906024016040805180830381600087803b15801561198357600080fd5b505af1158015611997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bb9190613cbd565b9150915060006119cb8e8e6130b5565b509050806001600160a01b03168e6001600160a01b0316146119ee5781836119f1565b82825b90975095508a871015611a165760405162461bcd60e51b815260040161053590613ce1565b89861015611a365760405162461bcd60e51b815260040161053590613d26565b505050505097509795505050505050565b60606108a86018602960991b018484612315565b600080611a706018602960991b0185856131a4565b915091505b9250929050565b6000806000611a9a6018602960991b018e6001602960991b0161253a565b9050600087611aa9578c611aad565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90611ae8903390309086908f908e908e908e90600401613be3565b600060405180830381600087803b158015611b0257600080fd5b505af1158015611b16573d6000803e3d6000fd5b50505050611b288e8e8e8e8e8e610511565b909f909e509c50505050505050505050505050565b60008060008342811015611b635760405162461bcd60e51b815260040161053590613acb565b611b718c8c8c8c8c8c6131ec565b90945092506000611b8a6018602960991b018e8e61253a565b9050611b988d338388612613565b611ba48c338387612613565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b158015611be757600080fd5b505af1158015611bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1f9190613c6a565b92505050985098509895505050505050565b60008060008342811015611c575760405162461bcd60e51b815260040161053590613acb565b611c6c8a6001602960991b018b348c8c6131ec565b90945092506000611c8c6018602960991b018c6001602960991b0161253a565b9050611c9a8b338388612613565b6001602960991b016001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015611cdc57600080fd5b505af1158015611cf0573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b0385166004820152602481018890526001602960991b01935063a9059cbb92506044019050602060405180830381600087803b158015611d4557600080fd5b505af1158015611d59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7d9190613c83565b611d8957611d89613501565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b158015611dcc57600080fd5b505af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e049190613c6a565b925083341115611e2157611e2133611e1c8634613b18565b612236565b505096509650969350505050565b60608142811015611e525760405162461bcd60e51b815260040161053590613acb565b6001602960991b018686600081611e6b57611e6b613b2f565b9050602002016020810190611e809190613b45565b6001600160a01b031614611ea65760405162461bcd60e51b815260040161053590613b62565b611eeb6018602960991b018888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061290a92505050565b91503482600081518110611f0157611f01613b2f565b60200260200101511115611f275760405162461bcd60e51b815260040161053590613c24565b6001602960991b016001600160a01b031663d0e30db083600081518110611f5057611f50613b2f565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611f8357600080fd5b505af1158015611f97573d6000803e3d6000fd5b50505050506001602960991b016001600160a01b031663a9059cbb611fd06018602960991b0189896000818110610cc257610cc2613b2f565b84600081518110611fe357611fe3613b2f565b60200260200101516040518363ffffffff1660e01b815260040161201c9291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561203657600080fd5b505af115801561204a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206e9190613c83565b61207a5761207a613501565b6120b982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612751915050565b816000815181106120cc576120cc613b2f565b60200260200101513411156113255761132533836000815181106120f2576120f2613b2f565b602002602001015134611e1c9190613b18565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916121619190613d97565b6000604051808303816000865af19150503d806000811461219e576040519150601f19603f3d011682016040523d82523d6000602084013e6121a3565b606091505b50915091508180156121cd5750805115806121cd5750808060200190518101906121cd9190613c83565b61222f5760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b6064820152608401610535565b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040516122609190613d97565b60006040518083038185875af1925050503d806000811461229d576040519150601f19603f3d011682016040523d82523d6000602084013e6122a2565b606091505b50509050806123105760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527308115512081d1c985b9cd9995c8819985a5b195960621b6064820152608401610535565b505050565b60606002825110156123695760405162461bcd60e51b815260206004820152601d60248201527f5465616c737761704c6962726172793a20494e56414c49445f504154480000006044820152606401610535565b815167ffffffffffffffff81111561238357612383613699565b6040519080825280602002602001820160405280156123ac578160200160208202803683370190505b50905082816000815181106123c3576123c3613b2f565b60200260200101818152505060005b600183516123e09190613b18565b8110156125325760006124318483815181106123fe576123fe613b2f565b6020026020010151858460016124149190613db3565b8151811061242457612424613b2f565b60200260200101516130b5565b509050600061247f8786858151811061244c5761244c613b2f565b6020026020010151878660016124629190613db3565b8151811061247257612472613b2f565b602002602001015161253a565b90506000806124bc83856001600160a01b03168988815181106124a4576124a4613b2f565b60200260200101516001600160a01b031614156133de565b9150915060006124cb84613488565b90506124f28787815181106124e2576124e2613b2f565b6020026020010151848484612b08565b876124fe886001613db3565b8151811061250e5761250e613b2f565b6020026020010181815250505050505050808061252a90613dcb565b9150506123d2565b509392505050565b600080600061254985856130b5565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016125f19291906001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527f4c617d0b01ec3bdb54c1da74a5e8c2a1a6197da15cfaab3f15b42ef728438fe1603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916126779190613d97565b6000604051808303816000865af19150503d80600081146126b4576040519150601f19603f3d011682016040523d82523d6000602084013e6126b9565b606091505b50915091508180156126e35750805115806126e35750808060200190518101906126e39190613c83565b6127495760405162461bcd60e51b815260206004820152603160248201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472604482015270185b9cd9995c919c9bdb4819985a5b1959607a1b6064820152608401610535565b505050505050565b60005b600183516127629190613b18565b8110156129045760008084838151811061277e5761277e613b2f565b6020026020010151858460016127949190613db3565b815181106127a4576127a4613b2f565b60200260200101519150915060006127bc83836130b5565b5090506000876127cd866001613db3565b815181106127dd576127dd613b2f565b60200260200101519050600080836001600160a01b0316866001600160a01b03161461280b5782600061280f565b6000835b91509150600060028a516128239190613b18565b881061282f5788612847565b6128476018602960991b01878c6124628c6002613db3565b905061285b6018602960991b01888861253a565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015612898576020820181803683370190505b506040518563ffffffff1660e01b81526004016128b89493929190613de6565b600060405180830381600087803b1580156128d257600080fd5b505af11580156128e6573d6000803e3d6000fd5b505050505050505050505080806128fc90613dcb565b915050612754565b50505050565b606060028251101561295e5760405162461bcd60e51b815260206004820152601d60248201527f5465616c737761704c6962726172793a20494e56414c49445f504154480000006044820152606401610535565b815167ffffffffffffffff81111561297857612978613699565b6040519080825280602002602001820160405280156129a1578160200160208202803683370190505b5090508281600183516129b49190613b18565b815181106129c4576129c4613b2f565b6020026020010181815250506000600183516129e09190613b18565b90505b8015612532576000612a24846129fa600185613b18565b81518110612a0a57612a0a613b2f565b602002602001015185848151811061242457612424613b2f565b5090506000612a638786612a39600187613b18565b81518110612a4957612a49613b2f565b602002602001015187868151811061247257612472613b2f565b9050600080612a92836001600160a01b03861689612a8260018a613b18565b815181106124a4576124a4613b2f565b915091506000612aa184613488565b9050612ac8878781518110612ab857612ab8613b2f565b6020026020010151848484612bf1565b87612ad4600189613b18565b81518110612ae457612ae4613b2f565b60200260200101818152505050505050508080612b0090613e36565b9150506129e3565b6000808511612b6c5760405162461bcd60e51b815260206004820152602a60248201527f5465616c737761704c6962726172793a20494e53554646494349454e545f494e60448201526914155517d05353d5539560b21b6064820152608401610535565b600084118015612b7c5750600083115b612b985760405162461bcd60e51b815260040161053590613e4d565b6000612ba683612710613b18565b612bb09087613e94565b90506000612bbe8583613e94565b9050600082612bcf88612710613e94565b612bd99190613db3565b9050612be58183613eb3565b98975050505050505050565b6000808511612c565760405162461bcd60e51b815260206004820152602b60248201527f5465616c737761704c6962726172793a20494e53554646494349454e545f4f5560448201526a1514155517d05353d5539560aa1b6064820152608401610535565b600084118015612c665750600083115b612c825760405162461bcd60e51b815260040161053590613e4d565b6000612c8e8686613e94565b612c9a90612710613e94565b90506000612caa84612710613b18565b612cb48887613b18565b612cbe9190613e94565b9050612cca8183613eb3565b612cd5906001613db3565b979650505050505050565b60005b60018351612cf19190613b18565b81101561231057600080848381518110612d0d57612d0d613b2f565b602002602001015185846001612d239190613db3565b81518110612d3357612d33613b2f565b6020026020010151915091506000612d4b83836130b5565b5090506000612d626018602960991b01858561253a565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612da357600080fd5b505afa158015612db7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddb9190613eec565b506001600160701b031691506001600160701b03169150600080876001600160a01b03168a6001600160a01b031614612e15578284612e18565b83835b6040516370a0823160e01b81526001600160a01b038a8116600483015292945090925083918c16906370a082319060240160206040518083038186803b158015612e6157600080fd5b505afa158015612e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e999190613c6a565b612ea39190613b18565b9550612f218683838a6001600160a01b03166324a9d8536040518163ffffffff1660e01b815260040160206040518083038186803b158015612ee457600080fd5b505afa158015612ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1c9190613c6a565b612b08565b945050505050600080856001600160a01b0316886001600160a01b031614612f4b57826000612f4f565b6000835b91509150600060028c51612f639190613b18565b8a10612f6f578a612f87565b612f876018602960991b01898e6124628e6002613db3565b6040805160008152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f90612fc99086908690869060248101613de6565b600060405180830381600087803b158015612fe357600080fd5b505af1158015612ff7573d6000803e3d6000fd5b50505050505050505050505050808061300f90613dcb565b915050612ce3565b60008084116130745760405162461bcd60e51b8152602060048201526024808201527f5465616c737761704c6962726172793a20494e53554646494349454e545f414d60448201526313d5539560e21b6064820152608401610535565b6000831180156130845750600082115b6130a05760405162461bcd60e51b815260040161053590613e4d565b826130ab8386613e94565b6114699190613eb3565b600080826001600160a01b0316846001600160a01b031614156131265760405162461bcd60e51b8152602060048201526024808201527f5465616c737761704c6962726172793a204944454e544943414c5f41444452456044820152635353455360e01b6064820152608401610535565b826001600160a01b0316846001600160a01b031610613146578284613149565b83835b90925090506001600160a01b038216611a755760405162461bcd60e51b815260206004820152601d60248201527f5465616c737761704c6962726172793a205a45524f5f414444524553530000006044820152606401610535565b60008060006131b385856130b5565b5090506131df6131c487878761253a565b826001600160a01b0316876001600160a01b031614156133de565b9250925050935093915050565b60405163e6a4390560e01b81526001600160a01b03808816600483015286166024820152600090819081906018602960991b019063e6a439059060440160206040518083038186803b15801561324157600080fd5b505afa158015613255573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132799190613ca0565b6001600160a01b03161415613312576040516364e329cb60e11b81526001600160a01b03808a166004830152881660248201526018602960991b019063c9c6539690604401602060405180830381600087803b1580156132d857600080fd5b505af11580156132ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133109190613ca0565b505b6000806133276018602960991b018b8b6131a4565b91509150816000148015613339575080155b15613349578793508692506133d1565b6000613356898484613017565b905087811161338a578581101561337f5760405162461bcd60e51b815260040161053590613d26565b8894509250826133cf565b6000613397898486613017565b9050898111156133a9576133a9613501565b878110156133c95760405162461bcd60e51b815260040161053590613ce1565b94508793505b505b5050965096945050505050565b600080600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561341d57600080fd5b505afa158015613431573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134559190613eec565b506001600160701b031691506001600160701b031691508461347857818161347b565b80825b9097909650945050505050565b6000816001600160a01b03166324a9d8536040518163ffffffff1660e01b815260040160206040518083038186803b1580156134c357600080fd5b505afa1580156134d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fb9190613c6a565b92915050565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b038116811461352c57600080fd5b50565b803561353a81613517565b919050565b60008060008060008060c0878903121561355857600080fd5b863561356381613517565b9550602087013594506040870135935060608701359250608087013561358881613517565b8092505060a087013590509295509295509295565b60008083601f8401126135af57600080fd5b50813567ffffffffffffffff8111156135c757600080fd5b6020830191508360208260051b8501011115611a7557600080fd5b60008060008060008060a087890312156135fb57600080fd5b8635955060208701359450604087013567ffffffffffffffff81111561362057600080fd5b61362c89828a0161359d565b909550935050606087013561364081613517565b80925050608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b8181101561368d57835183529284019291840191600101613671565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156136c257600080fd5b8235915060208084013567ffffffffffffffff808211156136e257600080fd5b818601915086601f8301126136f657600080fd5b81358181111561370857613708613699565b8060051b604051601f19603f8301168101818110858211171561372d5761372d613699565b60405291825284820192508381018501918983111561374b57600080fd5b938501935b82851015613770576137618561352f565b84529385019392850192613750565b8096505050505050509250929050565b801515811461352c57600080fd5b803560ff8116811461353a57600080fd5b60008060008060008060008060008060006101608c8e0312156137c157600080fd5b8b356137cc81613517565b9a5060208c01356137dc81613517565b995060408c0135985060608c0135975060808c0135965060a08c013561380181613517565b955060c08c0135945060e08c013561381881613780565b93506138276101008d0161378e565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806000806080858703121561385f57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000806000806000806000806101408b8d03121561389b57600080fd5b8a356138a681613517565b995060208b0135985060408b0135975060608b0135965060808b01356138cb81613517565b955060a08b0135945060c08b01356138e281613780565b93506138f060e08c0161378e565b92506101008b013591506101208b013590509295989b9194979a5092959850565b60008060008060006080868803121561392957600080fd5b85359450602086013567ffffffffffffffff81111561394757600080fd5b6139538882890161359d565b909550935050604086013561396781613517565b949793965091946060013592915050565b6000806040838503121561398b57600080fd5b823561399681613517565b915060208301356139a681613517565b809150509250929050565b6000806000606084860312156139c657600080fd5b505081359360208301359350604090920135919050565b600080600080600080600060e0888a0312156139f857600080fd5b8735613a0381613517565b96506020880135613a1381613517565b955060408801359450606088013593506080880135925060a0880135613a3881613517565b8092505060c0880135905092959891949750929550565b600080600080600080600080610100898b031215613a6c57600080fd5b8835613a7781613517565b97506020890135613a8781613517565b965060408901359550606089013594506080890135935060a0890135925060c0890135613ab381613517565b8092505060e089013590509295985092959890939650565b60208082526017908201527f5465616c73776170526f757465723a2045585049524544000000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082821015613b2a57613b2a613b02565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613b5757600080fd5b81356108a881613517565b6020808252601c908201527f5465616c73776170526f757465723a20494e56414c49445f5041544800000000604082015260600190565b6020808252602a908201527f5465616c73776170526f757465723a20494e53554646494349454e545f4f555460408201526914155517d05353d5539560b21b606082015260800190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b60208082526026908201527f5465616c73776170526f757465723a204558434553534956455f494e5055545f604082015265105353d5539560d21b606082015260800190565b600060208284031215613c7c57600080fd5b5051919050565b600060208284031215613c9557600080fd5b81516108a881613780565b600060208284031215613cb257600080fd5b81516108a881613517565b60008060408385031215613cd057600080fd5b505080516020909101519092909150565b60208082526025908201527f5465616c73776170526f757465723a20494e53554646494349454e545f415f416040820152641353d5539560da1b606082015260800190565b60208082526025908201527f5465616c73776170526f757465723a20494e53554646494349454e545f425f416040820152641353d5539560da1b606082015260800190565b60005b83811015613d86578181015183820152602001613d6e565b838111156129045750506000910152565b60008251613da9818460208701613d6b565b9190910192915050565b60008219821115613dc657613dc6613b02565b500190565b6000600019821415613ddf57613ddf613b02565b5060010190565b84815283602082015260018060a01b03831660408201526080606082015260008251806080840152613e1f8160a0850160208701613d6b565b601f01601f19169190910160a00195945050505050565b600081613e4557613e45613b02565b506000190190565b60208082526027908201527f5465616c737761704c6962726172793a20494e53554646494349454e545f4c496040820152665155494449545960c81b606082015260800190565b6000816000190483118215151615613eae57613eae613b02565b500290565b600082613ed057634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160701b038116811461353a57600080fd5b600080600060608486031215613f0157600080fd5b613f0a84613ed5565b9250613f1860208501613ed5565b9150604084015163ffffffff81168114613f3157600080fd5b80915050925092509256fea2646970667358221220202d9a6c54c30c5fab572353ad8f7753e73c7dc5f92fce696c0a7c9715727f5164736f6c63430008090033", + ), + }, +} diff --git a/contracts/oasys/deployments5.go b/contracts/oasys/deployments5.go new file mode 100644 index 000000000..eda18bd49 --- /dev/null +++ b/contracts/oasys/deployments5.go @@ -0,0 +1,9 @@ +package oasys + +var deployments5 = []*deployment{ + { + contract: stakeManager, + // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/2548a7979a1bec95d05ae729b6c75ab0ff56ba45/contracts/StakeManager.sol + code: mustDecodeCode("0x6080604052600436106102465760003560e01c80637243199111610139578063cf5c13db116100b6578063e1aca3411161007a578063e1aca341146107cf578063f3621e43146107ef578063f65a5ed21461080f578063f8d6b1ab1461082f578063fa52c7d81461084f578063ff3d3f60146108be57600080fd5b8063cf5c13db146106cd578063d0051adf146106ed578063d1f18ee11461071e578063dbd61d8714610776578063df93c8421461079657600080fd5b80639043150b116100fd5780639043150b1461062f5780639168ae7214610637578063ac7475ed1461066d578063ad71bd361461068d578063cbc0fac6146106ad57600080fd5b8063724319911461055557806374e2b63c146105865780637b520aa8146105ab5780637befa74f146105e157806388325234146105f457600080fd5b80632b47da52116101c7578063485cc9551161018b578063485cc955146104a55780635c4fc4c5146104c55780635d94ccf6146104f55780635efc766e146105155780636b2b33691461053557600080fd5b80632b47da52146103de57806333f32d7814610416578063428e85621461043657806345367f231461045657806346dfce7b1461047657600080fd5b8063195afea11161020e578063195afea11461030a5780631c1b4f3a1461032a5780632168e8b41461034a57806322226367146103785780632b42ed8c146103ad57600080fd5b806302fb4d851461024b5780630ddda63c1461026d578063158ef93e1461028d5780631903cf16146102bc578063190b9257146102dc575b600080fd5b34801561025757600080fd5b5061026b610266366004614acc565b6108de565b005b34801561027957600080fd5b5061026b610288366004614af8565b610ae4565b34801561029957600080fd5b506000546102a79060ff1681565b60405190151581526020015b60405180910390f35b3480156102c857600080fd5b5061026b6102d7366004614ba3565b610cef565b3480156102e857600080fd5b506102fc6102f7366004614af8565b610ee8565b6040519081526020016102b3565b34801561031657600080fd5b506102fc610325366004614acc565b610f09565b34801561033657600080fd5b506102fc610345366004614af8565b610f40565b34801561035657600080fd5b5061036a610365366004614c4d565b610f50565b6040516102b3929190614cb3565b34801561038457600080fd5b50610398610393366004614acc565b611036565b604080519283526020830191909152016102b3565b3480156103b957600080fd5b506103cd6103c8366004614cd5565b611104565b6040516102b3959493929190614d40565b3480156103ea57600080fd5b506001546103fe906001600160a01b031681565b6040516001600160a01b0390911681526020016102b3565b34801561042257600080fd5b506102fc610431366004614da0565b611451565b34801561044257600080fd5b5061026b610451366004614ba3565b611610565b34801561046257600080fd5b506102fc610471366004614af8565b611809565b34801561048257600080fd5b50610496610491366004614cd5565b61189f565b6040516102b393929190614e3f565b3480156104b157600080fd5b5061026b6104c0366004614e75565b611afc565b3480156104d157600080fd5b506104e56104e0366004614acc565b611b7b565b6040516102b39493929190614ee6565b34801561050157600080fd5b5061026b610510366004614af8565b611c47565b34801561052157600080fd5b506103fe610530366004614af8565b611d51565b34801561054157600080fd5b5061026b610550366004614f11565b611d7b565b34801561056157600080fd5b50610575610570366004614f2e565b611ec3565b6040516102b3959493929190614f8c565b34801561059257600080fd5b506000546103fe9061010090046001600160a01b031681565b3480156105b757600080fd5b506103fe6105c6366004614f11565b6006602052600090815260409020546001600160a01b031681565b61026b6105ef366004614fd9565b61227f565b34801561060057600080fd5b5061061461060f366004614f11565b61244a565b604080519384526020840192909252908201526060016102b3565b61026b6124ca565b34801561064357600080fd5b506103fe610652366004614f11565b6007602052600090815260409020546001600160a01b031681565b34801561067957600080fd5b5061026b610688366004614f11565b6124ff565b34801561069957600080fd5b5061036a6106a8366004614c4d565b6125c6565b3480156106b957600080fd5b5061026b6106c8366004614acc565b6126a4565b3480156106d957600080fd5b5061026b6106e8366004614acc565b61274c565b3480156106f957600080fd5b5061070d61070836600461501e565b61294b565b6040516102b3959493929190615053565b34801561072a57600080fd5b5061073e610739366004614acc565b612c03565b604080516001600160a01b0390961686529315156020860152911515928401929092529015156060830152608082015260a0016102b3565b34801561078257600080fd5b506102fc6107913660046150bc565b612d93565b3480156107a257600080fd5b506102fc6107b1366004614f11565b6001600160a01b031660009081526007602052604090206006015490565b3480156107db57600080fd5b5061026b6107ea366004614fd9565b612ddb565b3480156107fb57600080fd5b5061026b61080a3660046150bc565b612df4565b34801561081b57600080fd5b506103fe61082a366004614af8565b612f00565b34801561083b57600080fd5b5061026b61084a366004614f11565b612f10565b34801561085b57600080fd5b5061089861086a366004614f11565b6004602052600090815260409020805460018201546006909201546001600160a01b03918216929091169083565b604080516001600160a01b039485168152939092166020840152908201526060016102b3565b3480156108ca57600080fd5b5061026b6108d9366004614fd9565b612f72565b6001600160a01b038083166000908152600660209081526040808320548416808452600490925290912054909116610929576040516372898ae960e11b815260040160405180910390fd5b33411461094957604051631cf4735960e01b815260040160405180910390fd5b6001600160a01b038084166000908152600660209081526040808320548416835260049182905280832083548251633fa4f24560e01b815292519195610a5c946101009092041692633fa4f2459281830192610120928290030181865afa1580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc91906150ec565b600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a539190615167565b84919087613253565b82546040519192506001600160a01b0316907f1647efd0ce9727dc31dc201c9d8d35ac687f7370adcacbd454afc6485ddabfda90600090a28015610add5781546040518281526001600160a01b03909116907feb7d7a49847ec491969db21a0e31b234565a9923145a2d1b56a75c9e95825802906020015b60405180910390a25b5050505050565b336000818152600460205260409020546001600160a01b0316610b1a576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316610b505760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc79190615180565b15610be557604051631e59ccd960e01b815260040160405180910390fd5b60008054338252600460205260408220610c0d9161010090046001600160a01b03168661333b565b905080610c2d57604051637bc90c0560e11b815260040160405180910390fd5b610cb13333600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca99190615167565b60008561335b565b604051818152339081907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba1043836906020015b60405180910390a350505050565b6001600160a01b03828116600090815260046020526040902080548492163314801590610d29575060018101546001600160a01b03163314155b15610d4757604051630101292160e31b815260040160405180910390fd5b6001600160a01b03808516600090815260046020526040902054859116610d81576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df89190615180565b15610e1657604051631e59ccd960e01b815260040160405180910390fd5b610eaf600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e909190615167565b6001600160a01b03871660009081526004602052604090209086613409565b846001600160a01b03167fc11dfc9c24621433bb10587dc4bbae26a33a4aff53914e0d4c9fddf224a8cb7d85604051610ad491906151a2565b60028181548110610ef857600080fd5b600091825260209091200154905081565b600080546001600160a01b038481168352600460205260408320610f36929091610100909104168461341b565b5090505b92915050565b60038181548110610ef857600080fd5b60606000610f6484846005805490506135ae565b9093509050826001600160401b03811115610f8157610f81614b11565b604051908082528060200260200182016040528015610faa578160200160208202803683370190505b50915060005b8381101561102e576005610fc482876151cb565b81548110610fd457610fd46151e3565b9060005260206000200160009054906101000a90046001600160a01b0316838281518110611004576110046151e3565b6001600160a01b039092166020928302919091019091015280611026816151f9565b915050610fb0565b509250929050565b6000806110f9600084116110c057600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611097573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bb9190615167565b6110c2565b835b6001600160a01b038616600090815260046020908152604080832093835260098401825280832054600a9094019091529020549091565b909590945092505050565b6001600160a01b0384166000908152600760205260408120606091829182918291886111a657600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561117d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a19190615167565b6111a8565b885b98506111ba88886005805490506135ae565b9097509150866001600160401b038111156111d7576111d7614b11565b604051908082528060200260200182016040528015611200578160200160208202803683370190505b509550866001600160401b0381111561121b5761121b614b11565b604051908082528060200260200182016040528015611244578160200160208202803683370190505b509450866001600160401b0381111561125f5761125f614b11565b604051908082528060200260200182016040528015611288578160200160208202803683370190505b509350866001600160401b038111156112a3576112a3614b11565b6040519080825280602002602001820160405280156112cc578160200160208202803683370190505b50925060005b878110156114445760056112e6828b6151cb565b815481106112f6576112f66151e3565b9060005260206000200160009054906101000a90046001600160a01b0316878281518110611326576113266151e3565b60200260200101906001600160a01b031690816001600160a01b03168152505061137787828151811061135b5761135b6151e3565b602002602001015160008c856135e5909392919063ffffffff16565b868281518110611389576113896151e3565b6020026020010181815250506113c68782815181106113aa576113aa6151e3565b602002602001015160018c856135e5909392919063ffffffff16565b8582815181106113d8576113d86151e3565b6020026020010181815250506114158782815181106113f9576113f96151e3565b602002602001015160028c856135e5909392919063ffffffff16565b848281518110611427576114276151e3565b60209081029190910101528061143c816151f9565b9150506112d2565b5050945094509450945094565b600080600183600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ce9190615167565b6114d89190615214565b6114e29190615214565b845190915060005b84811015611607576114fd6001846151cb565b6000805460405163fcbb371b60e01b81526004810184905292955090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157591906150ec565b905060005b838110156115f2576115d48286600460008c868151811061159d5761159d6151e3565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206136a69092919063ffffffff16565b6115de90876151cb565b9550806115ea816151f9565b91505061157a565b505080806115ff906151f9565b9150506114ea565b50505092915050565b6001600160a01b0382811660009081526004602052604090208054849216331480159061164a575060018101546001600160a01b03163314155b1561166857604051630101292160e31b815260040160405180910390fd5b6001600160a01b038085166000908152600460205260409020548591166116a2576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117199190615180565b1561173757604051631e59ccd960e01b815260040160405180910390fd5b6117d0600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561178d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b19190615167565b6001600160a01b03871660009081526004602052604090209086613813565b846001600160a01b03167f0ad9bf1b8c026a174a2f30954417002a6ea00c9b08c1b8846c7951c687be809585604051610ad491906151a2565b600080821161188e57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611865573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118899190615167565b611890565b815b9150610f3a6002600384613820565b6001600160a01b038416600090815260046020526040812060609182918661193d57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611914573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119389190615167565b61193f565b865b9650611953868683600701805490506135ae565b9095509150846001600160401b0381111561197057611970614b11565b604051908082528060200260200182016040528015611999578160200160208202803683370190505b509350846001600160401b038111156119b4576119b4614b11565b6040519080825280602002602001820160405280156119dd578160200160208202803683370190505b50925060005b85811015611af05760006007818482016119fd858c6151cb565b81548110611a0d57611a0d6151e3565b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190208054885191935090911690879084908110611a5357611a536151e3565b6001600160a01b0392831660209182029290920101528354611a7a9183911660028c6135e5565b8354611a939083906001600160a01b031660018d6135e5565b8454611aac9084906001600160a01b031660008e6135e5565b611ab691906151cb565b611ac091906151cb565b858381518110611ad257611ad26151e3565b60209081029190910101525080611ae8816151f9565b9150506119e3565b50509450945094915050565b334114611b1c57604051631cf4735960e01b815260040160405180910390fd5b60005460ff1615611b3f5760405162dc149f60e41b815260040160405180910390fd5b6000805460016001600160a81b03199091166101006001600160a01b039586160217811790915580546001600160a01b03191691909216179055565b6001600160a01b03821660009081526007602052604081206006018054829182918291829187908110611bb057611bb06151e3565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115611be357611be3614eae565b6002811115611bf457611bf4614eae565b81526020016001820154815260200160028201548152505090508060000151816020015182604001518360400151600014158015611c36575083604001514210155b929a91995097509095509350505050565b336000818152600760205260409020546001600160a01b0316611c7d5760405163cf83d93d60e01b815260040160405180910390fd5b336000908152600760205260408120600601805484908110611ca157611ca16151e3565b9060005260206000209060030201905060008160020154905080421015611cdb576040516303cb96db60e21b815260040160405180910390fd5b80611cf957604051630c8d9eab60e31b815260040160405180910390fd5b6000600283015560405184815233907fbf5f92dc2b945251eadf78c2ca629ae64053d979bfbc43a7b17a463707906bf99060200160405180910390a281546001830154611d4b9160ff169033906138f2565b50505050565b60058181548110611d6157600080fd5b6000918252602090912001546001600160a01b0316905081565b60015460405163322433e360e01b81523360048201819052916001600160a01b03169063322433e390602401602060405180830381865afa158015611dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de89190615180565b611e055760405163423057c560e11b815260040160405180910390fd5b6001600160a01b0381166000908152600460205260409020611e279083613a11565b60058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b038381166001600160a01b03199283168117909355841660009081526006602090815260409182902080549093168417909255519182527fd5828184f48f65962d10eac907318df85953d4e3542a0f09b5932ee3fe398bdd910160405180910390a15050565b606080606080600080600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f439190615167565b905060008911611f535780611f55565b885b6000805460405163fcbb371b60e01b815260048101849052929b5090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015611fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fcd91906150ec565b9050611fdf89896005805490506135ae565b9098509250876001600160401b03811115611ffc57611ffc614b11565b604051908082528060200260200182016040528015612025578160200160208202803683370190505b509650876001600160401b0381111561204057612040614b11565b604051908082528060200260200182016040528015612069578160200160208202803683370190505b509550876001600160401b0381111561208457612084614b11565b6040519080825280602002602001820160405280156120ad578160200160208202803683370190505b509450876001600160401b038111156120c8576120c8614b11565b6040519080825280602002602001820160405280156120f1578160200160208202803683370190505b50935060005b888110156122715760006004816005612110858f6151cb565b81548110612120576121206151e3565b60009182526020808320909101546001600160a01b039081168452908301939093526040909101902080548b51919350909116908a9084908110612166576121666151e3565b6001600160a01b03928316602091820292909201015260018201548951911690899084908110612198576121986151e3565b6001600160a01b03909216602092830291909101909101526121ba818d613a53565b8783815181106121cc576121cc6151e3565b60209081029190910101526121f5818d6000908152600291909101602052604090205460ff1690565b158015612213575060008c815260038201602052604090205460ff16155b801561223c57508260c00151878381518110612231576122316151e3565b602002602001015110155b86838151811061224e5761224e6151e3565b911515602092830291909101909101525080612269816151f9565b9150506120f7565b505050939792965093509350565b6001600160a01b038084166000908152600460205260409020548491166122b9576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa15801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615180565b1561234e57604051631e59ccd960e01b815260040160405180910390fd5b8161236c57604051637bc90c0560e11b815260040160405180910390fd5b612377833384613a66565b6124053385600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f39190615167565b6123fe9060016151cb565b868661335b565b836001600160a01b0316336001600160a01b03167f8fc656e319452025372383dc27d933046d412b8253de50a10739eeaa59862be68585604051610ce192919061522b565b6001600160a01b03808216600090815260076020526040812081549192839283929161247f9183916101009091041684613b07565b6000549094506124a090829061010090046001600160a01b03166001613b07565b6000549093506124c190829061010090046001600160a01b03166002613b07565b93959294505050565b6040513481527f1de49774d094a85fc1bbbd16e8d09a865fb848218f41e2da4369f528c42ee42e9060200160405180910390a1565b336000818152600460205260409020546001600160a01b0316612535576040516372898ae960e11b815260040160405180910390fd5b33600081815260046020526040902060018101546001600160a01b031661255c8286613d2d565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916888616908117909155825194861685529084019290925290917f758820d0b14a01c1fa60b8d2bbef25ed1b6a5af4802e5dec3f08679255ba8bf39101610ad4565b606060006125da84846008805490506135ae565b9093509050826001600160401b038111156125f7576125f7614b11565b604051908082528060200260200182016040528015612620578160200160208202803683370190505b50915060005b8381101561102e57600861263a82876151cb565b8154811061264a5761264a6151e3565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061267a5761267a6151e3565b6001600160a01b03909216602092830291909101909101528061269c816151f9565b915050612626565b336000818152600460205260409020546001600160a01b03166126da576040516372898ae960e11b815260040160405180910390fd5b600080543382526004602052604082206127029161010090046001600160a01b03168561333b565b60405181815290915033907f882d5671e5b36af50883197c33d48ba56ce337589958e871ba82fb0a54adf3e89060200160405180910390a28015611d4b57611d4b600033836138f2565b6001600160a01b03808316600090815260046020526040902054839116612786576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166127bc5760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa15801561280f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128339190615180565b1561285157604051631e59ccd960e01b815260040160405180910390fd5b600080546001600160a01b0386811683526004602090815260408085203386526007909252842061288c939092610100909104169087613da7565b9050806128ac57604051637bc90c0560e11b815260040160405180910390fd5b6129043386600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c85573d6000803e3d6000fd5b6040518181526001600160a01b0386169033907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba10438369060200160405180910390a35050505050565b6001600160a01b03831660009081526007602052604081206006810154606092839283928392919061298090899089906135ae565b9097509150866001600160401b0381111561299d5761299d614b11565b6040519080825280602002602001820160405280156129c6578160200160208202803683370190505b509550866001600160401b038111156129e1576129e1614b11565b604051908082528060200260200182016040528015612a0a578160200160208202803683370190505b509450866001600160401b03811115612a2557612a25614b11565b604051908082528060200260200182016040528015612a4e578160200160208202803683370190505b509350866001600160401b03811115612a6957612a69614b11565b604051908082528060200260200182016040528015612a92578160200160208202803683370190505b50925060005b87811015612bf657600060068301612ab0838c6151cb565b81548110612ac057612ac06151e3565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115612af357612af3614eae565b6002811115612b0457612b04614eae565b81526020016001820154815260200160028201548152505090508060000151888381518110612b3557612b356151e3565b60200260200101906002811115612b4e57612b4e614eae565b90816002811115612b6157612b61614eae565b815250508060200151878381518110612b7c57612b7c6151e3565b6020026020010181815250508060400151868381518110612b9f57612b9f6151e3565b6020908102919091010152604081015115801590612bc1575080604001514210155b858381518110612bd357612bd36151e3565b911515602092830291909101909101525080612bee816151f9565b915050612a98565b5050939792965093509350565b600080600080600080600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c839190615167565b905060008711612c935780612c95565b865b6000805460405163fcbb371b60e01b81526004810184905292995090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015612ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0d91906150ec565b6001600160a01b038a1660009081526004602090815260408083208c8452600281018352818420546003820190935292205460ff918216159950169650909150612d57818a613a53565b9350868015612d64575085155b8015612d7457508160c001518410155b6001909101546001600160a01b03169750935050509295509295909350565b600080546001600160a01b038481168352600460209081526040808520888416865260079092528420612dd0939092610100909104169085613de0565b5090505b9392505050565b604051634ee5a1b960e01b815260040160405180910390fd5b6001600160a01b03808316600090815260046020526040902054839116612e2e576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316612e645760405163cf83d93d60e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420612e9f939092610100909104169087613da7565b604080516001600160a01b03881681526020810183905291925033917f2ef606d064225d24c1514dc94907c134faee1237445c2f63f410cce0852b2054910160405180910390a28015612ef857612ef8600033836138f2565b505050505050565b60088181548110611d6157600080fd5b336000818152600760205260409020546001600160a01b0316612f465760405163cf83d93d60e01b815260040160405180910390fd5b6000805433825260076020526040909120612f6e9161010090046001600160a01b0316613fea565b5050565b6001600160a01b03808416600090815260046020526040902054849116612fac576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316612fe25760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015613035573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130599190615180565b1561307757604051631e59ccd960e01b815260040160405180910390fd5b33600090815260076020908152604080832083546001600160a01b038a811686526004909452919093206130b592849261010090041690888861400e565b9350836130d557604051637bc90c0560e11b815260040160405180910390fd5b8060060160405180606001604052808760028111156130f6576130f6614eae565b81526020810187905260400161310f42620d2f006151cb565b9052815460018181018455600093845260209093208251600390920201805492939092839160ff199091169083600281111561314d5761314d614eae565b0217905550602082015181600101556040820151816002015550506131f96003600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e49190615167565b6131ef9060016151cb565b6002919087614150565b5060068101546001600160a01b0387169033907fb649014faa7a0e23357e091fb8a67a128c33dc9480f846f7e41cb3a6c9d806109061323a90600190615214565b60405190815260200160405180910390a3505050505050565b600082815260098501602052604081205461327c57600083815260098601602052604090208290555b6000838152600a860160205260408120546132989060016151cb565b6000858152600a88016020526040902081905560e086015190915081108015906132e457506003860160006132ce8660016151cb565b815260208101919091526040016000205460ff16155b15613332576101008501516132f990856151cb565b91505b81841015613332578361330e816151f9565b60008181526003890160205260409020805460ff1916600117905594506132fc9050565b50949350505050565b600080600061334b86868661341b565b6006880155925050509392505050565b6001600160a01b03808616600090815260076020526040902080549091166133d45780546001600160a01b0387166001600160a01b031991821681178355600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180549092161790555b6001600160a01b03851660009081526004602052604090206133fb908290869086866141e9565b612ef86002600386856142b1565b6134168383836000614302565b505050565b6000808460060154905060006001856001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613467573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061348b9190615167565b6134959190615214565b90508315806134ac5750806134aa83866151cb565b115b156134be576134bb8282615214565b93505b60005b848110156135a4576134d46001846151cb565b60405163fcbb371b60e01b8152600481018290529093506000906001600160a01b0388169063fcbb371b9060240161012060405180830381865afa158015613520573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061354491906150ec565b905060006135538983876136a6565b905080613561575050613592565b60a0820151613571575050613592565b613583818360a0015160646019614388565b61358d90876151cb565b955050505b8061359c816151f9565b9150506134c1565b5050935093915050565b600080826135bc85876151cb565b106135ce576135cb8584615214565b93505b836135d981876151cb565b91509150935093915050565b600061369b85600201600085600281111561360257613602614eae565b600281111561361357613613614eae565b81526020019081526020016000206000866001600160a01b03166001600160a01b031681526020019081526020016000208387600101600087600281111561365d5761365d614eae565b600281111561366e5761366e614eae565b8152602080820192909252604090810160009081206001600160a01b038b16825290925290209190613820565b90505b949350505050565b600081815260028401602052604081205460ff16806136d55750600082815260038501602052604090205460ff165b156136e257506000612dd4565b60006136ee8584613a53565b90506049831061372f578360c0015181101561370e576000915050612dd4565b6298968061371e82610a34615246565b6137289190615265565b91506137c8565b8061373e576000915050612dd4565b61374a6019600a615363565b61375b8560800151606460196143b4565b6137659083615246565b61376f9190615265565b915081613780576000915050612dd4565b6137a3846060015185604001516137979190615246565b6301e1338060196143b4565b6137ad9083615246565b91506137bb6019600a615363565b6137c59083615265565b91505b6000838152600a86016020526040902054801561380a576000848152600987016020526040902054613806846137fe8484615214565b836019614388565b9350505b50509392505050565b6134168383836001614302565b825460009080158061384e57508285600081548110613841576138416151e3565b9060005260206000200154115b1561385d576000915050612dd4565b828561386a600184615214565b8154811061387a5761387a6151e3565b9060005260206000200154116138b95783613896600183615214565b815481106138a6576138a66151e3565b9060005260206000200154915050612dd4565b60006138c886856000856143fa565b90508481815481106138dc576138dc6151e3565b9060005260206000200154925050509392505050565b60008084600281111561390757613907614eae565b1415613966576040516001600160a01b038416908390600081818185875af1925050503d8060008114613956576040519150601f19603f3d011682016040523d82523d6000602084013e61395b565b606091505b5050809150506139e8565b61396f846144a2565b60405163a9059cbb60e01b81526001600160a01b03858116600483015260248201859052919091169063a9059cbb906044015b6020604051808303816000875af11580156139c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139e59190615180565b90505b80611d4b5783604051630db5347560e11b8152600401613a08919061536f565b60405180910390fd5b81546001600160a01b031615613a3957604051621d934160e11b815260040160405180910390fd5b81546001600160a01b03191633178255612f6e8282613d2d565b6000612dd4600484016005850184613820565b6000836002811115613a7a57613a7a614eae565b1415613aa05780341461341657604051630fe5b06560e11b815260040160405180910390fd5b3415613abf5760405163a745ac8560e01b815260040160405180910390fd5b6000613aca846144a2565b6040516323b872dd60e01b81526001600160a01b0385811660048301523060248301526044820185905291909116906323b872dd906064016139a2565b600080846003016000846002811115613b2257613b22614eae565b6002811115613b3357613b33614eae565b8152602081019190915260400160002054905080613b55576000915050612dd4565b6000846001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bb99190615167565b90506000613bc8600184615214565b9050600081118015613c2b575081876003016000876002811115613bee57613bee614eae565b6002811115613bff57613bff614eae565b81526020019081526020016000208281548110613c1e57613c1e6151e3565b9060005260206000200154115b15613c3e5780613c3a8161537d565b9150505b81876003016000876002811115613c5757613c57614eae565b6002811115613c6857613c68614eae565b81526020019081526020016000208281548110613c8757613c876151e3565b90600052602060002001541115613ca45760009350505050612dd4565b6000805b828111613d2157886004016000886002811115613cc757613cc7614eae565b6002811115613cd857613cd8614eae565b81526020019081526020016000208181548110613cf757613cf76151e3565b906000526020600020015482613d0d91906151cb565b915080613d19816151f9565b915050613ca8565b50979650505050505050565b6001600160a01b038116613d5457604051637138356f60e01b815260040160405180910390fd5b81546001600160a01b0382811691161415613d825760405163e037058f60e01b815260040160405180910390fd5b60019190910180546001600160a01b0319166001600160a01b03909216919091179055565b6000806000613db887878787613de0565b86546001600160a01b0316600090815260058a01602052604090205592505050949350505050565b81546001600160a01b039081166000908152600586016020908152604080832054815163900cf0cf60e01b81529151939490938593600193928a169263900cf0cf92600480830193928290030181865afa158015613e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e669190615167565b613e709190615214565b9050831580613e87575080613e8583866151cb565b115b15613e9957613e968282615214565b93505b60005b84811015613fdf57613eaf6001846151cb565b8654909350600090613ece908a906001600160a01b03166002876135e5565b8754613ee7908b906001600160a01b03166001886135e5565b8854613f00908c906001600160a01b03166000896135e5565b613f0a91906151cb565b613f1491906151cb565b905080613f215750613fcd565b60405163fcbb371b60e01b815260048101859052600090613f9a906001600160a01b038b169063fcbb371b9060240161012060405180830381865afa158015613f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f9291906150ec565b89908761450d565b905080613fa8575050613fcd565b613fbe8183613fb78b89613a53565b6019614388565b613fc890876151cb565b955050505b80613fd7816151f9565b915050613e9c565b505094509492505050565b613ff682826001614558565b61400282826002614558565b612f6e82826000614558565b600061412a86600201600085600281111561402b5761402b614eae565b600281111561403c5761403c614eae565b81526020808201929092526040908101600090812088546001600160a01b03908116835290845290829020825163900cf0cf60e01b815292519093918a169263900cf0cf9260048083019391928290030181865afa1580156140a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140c69190615167565b6140d19060016151cb565b848960010160008860028111156140ea576140ea614eae565b60028111156140fb576140fb614eae565b8152602080820192909252604090810160009081208b546001600160a01b031682529092529020929190614150565b91508161413957506000614147565b61414484868461487e565b50805b95945050505050565b600061415d8585856148fe565b845460008561416d600184615214565b8154811061417d5761417d6151e3565b9060005260206000200154905080841115614198578061419a565b835b935083156141de5783866141af600185615214565b815481106141bf576141bf6151e3565b9060005260206000200160008282546141d89190615214565b90915550505b509195945050505050565b61429885600201600084600281111561420457614204614eae565b600281111561421557614215614eae565b81526020808201929092526040908101600090812087546001600160a01b031682529092528120908690849060018a019087600281111561425857614258614eae565b600281111561426957614269614eae565b8152602080820192909252604090810160009081208a546001600160a01b0316825290925290209291906142b1565b8454610add90849086906001600160a01b0316846149b6565b6142bc8484846148fe565b8354819084906142ce90600190615214565b815481106142de576142de6151e3565b9060005260206000200160008282546142f791906151cb565b909155505050505050565b815160005b81811015612ef8576000848281518110614323576143236151e3565b6020026020010151905085811180156143535750600081815260028801602052604090205460ff16151584151514155b156143755760008181526002880160205260409020805460ff19168515151790555b5080614380816151f9565b915050614307565b600061439582600a615363565b6143a08585856143b4565b6143aa9087615246565b61369b9190615265565b6000806143c28360016151cb565b6143cd90600a615363565b6143d79086615246565b9050600a6143e58583615265565b6143f09060056151cb565b6141479190615265565b6000818314156144165761440f600183615214565b905061369e565b6000600261442484866151cb565b61442e9190615265565b905084868281548110614443576144436151e3565b9060005260206000200154111561446857614460868686846143fa565b91505061369e565b8486828154811061447b5761447b6151e3565b9060005260206000200154101561369b57614460868661449c8460016151cb565b866143fa565b600060018260028111156144b8576144b8614eae565b14156144cc57506001602960991b01919050565b60028260028111156144e0576144e0614eae565b14156144f457506002602960991b01919050565b604051638698bf3760e01b815260040160405180910390fd5b60008061451b8585856136a6565b90508061452c576000915050612dd4565b60a084015161453c579050612dd4565b61454e818560a0015160646019614388565b6141479082615214565b6000614565848484613b07565b9050806145725750505050565b600084600301600084600281111561458c5761458c614eae565b600281111561459d5761459d614eae565b8152602001908152602001600020805490509050836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156145ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146139190615167565b85600301600085600281111561462b5761462b614eae565b600281111561463c5761463c614eae565b81526020019081526020016000206001836146579190615214565b81548110614667576146676151e3565b9060005260206000200154116147025784600301600084600281111561468f5761468f614eae565b60028111156146a0576146a0614eae565b815260200190815260200160002060006146ba9190614a36565b8460040160008460028111156146d2576146d2614eae565b60028111156146e3576146e3614eae565b815260200190815260200160002060006146fd9190614a36565b614867565b604051806020016040528086600301600086600281111561472557614725614eae565b600281111561473657614736614eae565b81526020019081526020016000206001846147519190615214565b81548110614761576147616151e3565b906000526020600020015481525085600301600085600281111561478757614787614eae565b600281111561479857614798614eae565b815260208101919091526040016000206147b3916001614a57565b5060405180602001604052808660040160008660028111156147d7576147d7614eae565b60028111156147e8576147e8614eae565b81526020019081526020016000206001846148039190615214565b81548110614813576148136151e3565b906000526020600020015481525085600401600085600281111561483957614839614eae565b600281111561484a5761484a614eae565b81526020810191909152604001600020614865916001614a57565b505b8454610add9084906001600160a01b0316846138f2565b611d4b83600501836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156148c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148e79190615167565b6148f29060016151cb565b60048601919084614150565b82548061492857508254600181810185556000948552602085209091019190915581540181559052565b600084614936600184615214565b81548110614946576149466151e3565b90600052602060002001549050828114610add57845460018181018755600087815260209020909101849055849081906149809085615214565b81548110614990576149906151e3565b600091825260208083209091015483546001810185559383529120909101555050505050565b6001600160a01b038216600090815260088501602052604090205460ff16614a24576001600160a01b038216600081815260088601602090815260408220805460ff191660019081179091556007880180549182018155835291200180546001600160a01b03191690911790555b611d4b600485016005860185846142b1565b5080546000825590600052602060002090810190614a549190614aa2565b50565b828054828255906000526020600020908101928215614a92579160200282015b82811115614a92578251825591602001919060010190614a77565b50614a9e929150614aa2565b5090565b5b80821115614a9e5760008155600101614aa3565b6001600160a01b0381168114614a5457600080fd5b60008060408385031215614adf57600080fd5b8235614aea81614ab7565b946020939093013593505050565b600060208284031215614b0a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715614b4a57614b4a614b11565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614b7857614b78614b11565b604052919050565b60006001600160401b03821115614b9957614b99614b11565b5060051b60200190565b60008060408385031215614bb657600080fd5b8235614bc181614ab7565b91506020838101356001600160401b03811115614bdd57600080fd5b8401601f81018613614bee57600080fd5b8035614c01614bfc82614b80565b614b50565b81815260059190911b82018301908381019088831115614c2057600080fd5b928401925b82841015614c3e57833582529284019290840190614c25565b80955050505050509250929050565b60008060408385031215614c6057600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015614ca85781516001600160a01b031687529582019590820190600101614c83565b509495945050505050565b604081526000614cc66040830185614c6f565b90508260208301529392505050565b60008060008060808587031215614ceb57600080fd5b8435614cf681614ab7565b966020860135965060408601359560600135945092505050565b600081518084526020808501945080840160005b83811015614ca857815187529582019590820190600101614d24565b60a081526000614d5360a0830188614c6f565b8281036020840152614d658188614d10565b90508281036040840152614d798187614d10565b90508281036060840152614d8d8186614d10565b9150508260808301529695505050505050565b60008060408385031215614db357600080fd5b82356001600160401b03811115614dc957600080fd5b8301601f81018513614dda57600080fd5b80356020614dea614bfc83614b80565b82815260059290921b83018101918181019088841115614e0957600080fd5b938201935b83851015614e30578435614e2181614ab7565b82529382019390820190614e0e565b98969091013596505050505050565b606081526000614e526060830186614c6f565b8281036020840152614e648186614d10565b915050826040830152949350505050565b60008060408385031215614e8857600080fd5b8235614e9381614ab7565b91506020830135614ea381614ab7565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60038110614ee257634e487b7160e01b600052602160045260246000fd5b9052565b60808101614ef48287614ec4565b846020830152836040830152821515606083015295945050505050565b600060208284031215614f2357600080fd5b8135612dd481614ab7565b600080600060608486031215614f4357600080fd5b505081359360208301359350604090920135919050565b600081518084526020808501945080840160005b83811015614ca8578151151587529582019590820190600101614f6e565b60a081526000614f9f60a0830188614c6f565b8281036020840152614fb18188614c6f565b90508281036040840152614fc58187614d10565b90508281036060840152614d8d8186614f5a565b600080600060608486031215614fee57600080fd5b8335614ff981614ab7565b925060208401356003811061500d57600080fd5b929592945050506040919091013590565b60008060006060848603121561503357600080fd5b833561503e81614ab7565b95602085013595506040909401359392505050565b60a0808252865190820181905260009060209060c0840190828a01845b8281101561509357615083848351614ec4565b9284019290840190600101615070565b505050838103828501526150a78189614d10565b9150508281036040840152614fc58187614d10565b6000806000606084860312156150d157600080fd5b83356150dc81614ab7565b9250602084013561500d81614ab7565b600061012082840312156150ff57600080fd5b615107614b27565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b60006020828403121561517957600080fd5b5051919050565b60006020828403121561519257600080fd5b81518015158114612dd457600080fd5b602081526000612dd46020830184614d10565b634e487b7160e01b600052601160045260246000fd5b600082198211156151de576151de6151b5565b500190565b634e487b7160e01b600052603260045260246000fd5b600060001982141561520d5761520d6151b5565b5060010190565b600082821015615226576152266151b5565b500390565b604081016152398285614ec4565b8260208301529392505050565b6000816000190483118215151615615260576152606151b5565b500290565b60008261528257634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561102e5781600019048211156152a8576152a86151b5565b808516156152b557918102915b93841c939080029061528c565b6000826152d157506001610f3a565b816152de57506000610f3a565b81600181146152f457600281146152fe5761531a565b6001915050610f3a565b60ff84111561530f5761530f6151b5565b50506001821b610f3a565b5060208310610133831016604e8410600b841016171561533d575081810a610f3a565b6153478383615287565b806000190482111561535b5761535b6151b5565b029392505050565b6000612dd483836152c2565b60208101610f3a8284614ec4565b60008161538c5761538c6151b5565b50600019019056fea26469706673582212205e56660e794cf6ac8fef932c6bc6ddc03d16240bf42c38f16cc5710cdd39fbf664736f6c634300080c0033"), + }, +} diff --git a/contracts/oasys/deployments6.go b/contracts/oasys/deployments6.go new file mode 100644 index 000000000..168074dce --- /dev/null +++ b/contracts/oasys/deployments6.go @@ -0,0 +1,14 @@ +package oasys + +var deployments6 = []*deployment{ + { + contract: stakeManager, + // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/56d52dd025b33876976d1322d2742d1975c8ff08/contracts/StakeManager.sol + code: mustDecodeCode("0x60806040526004361061025c5760003560e01c80637243199111610144578063cf5c13db116100b6578063e1aca3411161007a578063e1aca34114610825578063f3621e4314610845578063f65a5ed214610865578063f8d6b1ab14610885578063fa52c7d8146108a5578063ff3d3f601461091457600080fd5b8063cf5c13db14610723578063d0051adf14610743578063d1f18ee114610774578063dbd61d87146107cc578063df93c842146107ec57600080fd5b80639043150b116101085780639043150b146106655780639168ae721461066d5780639c508219146106a3578063ac7475ed146106c3578063ad71bd36146106e3578063cbc0fac61461070357600080fd5b8063724319911461058b57806374e2b63c146105bc5780637b520aa8146105e15780637befa74f14610617578063883252341461062a57600080fd5b80632b47da52116101dd57806346dfce7b116101a157806346dfce7b146104ac578063485cc955146104db5780635c4fc4c5146104fb5780635d94ccf61461052b5780635efc766e1461054b5780636b2b33691461056b57600080fd5b80632b47da52146103f45780632ee462b31461042c57806333f32d781461044c578063428e85621461046c57806345367f231461048c57600080fd5b8063195afea111610224578063195afea1146103205780631c1b4f3a146103405780632168e8b414610360578063222263671461038e5780632b42ed8c146103c357600080fd5b806302fb4d85146102615780630ddda63c14610283578063158ef93e146102a35780631903cf16146102d2578063190b9257146102f2575b600080fd5b34801561026d57600080fd5b5061028161027c366004614f04565b610934565b005b34801561028f57600080fd5b5061028161029e366004614f30565b610b3a565b3480156102af57600080fd5b506000546102bd9060ff1681565b60405190151581526020015b60405180910390f35b3480156102de57600080fd5b506102816102ed366004614fdb565b610d45565b3480156102fe57600080fd5b5061031261030d366004614f30565b610f3e565b6040519081526020016102c9565b34801561032c57600080fd5b5061031261033b366004614f04565b610f5f565b34801561034c57600080fd5b5061031261035b366004614f30565b610f96565b34801561036c57600080fd5b5061038061037b366004615085565b610fa6565b6040516102c99291906150eb565b34801561039a57600080fd5b506103ae6103a9366004614f04565b61108c565b604080519283526020830191909152016102c9565b3480156103cf57600080fd5b506103e36103de36600461510d565b61115a565b6040516102c9959493929190615178565b34801561040057600080fd5b50600154610414906001600160a01b031681565b6040516001600160a01b0390911681526020016102c9565b34801561043857600080fd5b50610312610447366004614f04565b6114a7565b34801561045857600080fd5b506103126104673660046151d8565b61155a565b34801561047857600080fd5b50610281610487366004614fdb565b611719565b34801561049857600080fd5b506103126104a7366004614f30565b611912565b3480156104b857600080fd5b506104cc6104c736600461510d565b6119a8565b6040516102c993929190615277565b3480156104e757600080fd5b506102816104f63660046152ad565b611c05565b34801561050757600080fd5b5061051b610516366004614f04565b611c84565b6040516102c9949392919061531e565b34801561053757600080fd5b50610281610546366004614f30565b611d50565b34801561055757600080fd5b50610414610566366004614f30565b611e5a565b34801561057757600080fd5b50610281610586366004615349565b611e84565b34801561059757600080fd5b506105ab6105a6366004615366565b611fcc565b6040516102c99594939291906153c4565b3480156105c857600080fd5b506000546104149061010090046001600160a01b031681565b3480156105ed57600080fd5b506104146105fc366004615349565b6006602052600090815260409020546001600160a01b031681565b610281610625366004615411565b612388565b34801561063657600080fd5b5061064a610645366004615349565b612553565b604080519384526020840192909252908201526060016102c9565b6102816125d3565b34801561067957600080fd5b50610414610688366004615349565b6007602052600090815260409020546001600160a01b031681565b3480156106af57600080fd5b506103126106be366004614f04565b612608565b3480156106cf57600080fd5b506102816106de366004615349565b6126e4565b3480156106ef57600080fd5b506103806106fe366004615085565b6127ab565b34801561070f57600080fd5b5061028161071e366004614f04565b612889565b34801561072f57600080fd5b5061028161073e366004614f04565b612931565b34801561074f57600080fd5b5061076361075e366004615456565b612b30565b6040516102c995949392919061548b565b34801561078057600080fd5b5061079461078f366004614f04565b612de8565b604080516001600160a01b0390961686529315156020860152911515928401929092529015156060830152608082015260a0016102c9565b3480156107d857600080fd5b506103126107e73660046154f4565b612f78565b3480156107f857600080fd5b50610312610807366004615349565b6001600160a01b031660009081526007602052604090206006015490565b34801561083157600080fd5b50610281610840366004615411565b612fbe565b34801561085157600080fd5b506102816108603660046154f4565b612fd7565b34801561087157600080fd5b50610414610880366004614f30565b6130e3565b34801561089157600080fd5b506102816108a0366004615349565b6130f3565b3480156108b157600080fd5b506108ee6108c0366004615349565b6004602052600090815260409020805460018201546006909201546001600160a01b03918216929091169083565b604080516001600160a01b039485168152939092166020840152908201526060016102c9565b34801561092057600080fd5b5061028161092f366004615411565b613155565b6001600160a01b03808316600090815260066020908152604080832054841680845260049092529091205490911661097f576040516372898ae960e11b815260040160405180910390fd5b33411461099f57604051631cf4735960e01b815260040160405180910390fd5b6001600160a01b038084166000908152600660209081526040808320548416835260049182905280832083548251633fa4f24560e01b815292519195610ab2946101009092041692633fa4f2459281830192610120928290030181865afa158015610a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a329190615524565b600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa9919061559f565b84919087613436565b82546040519192506001600160a01b0316907f1647efd0ce9727dc31dc201c9d8d35ac687f7370adcacbd454afc6485ddabfda90600090a28015610b335781546040518281526001600160a01b03909116907feb7d7a49847ec491969db21a0e31b234565a9923145a2d1b56a75c9e95825802906020015b60405180910390a25b5050505050565b336000818152600460205260409020546001600160a01b0316610b70576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316610ba65760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1d91906155b8565b15610c3b57604051631e59ccd960e01b815260040160405180910390fd5b60008054338252600460205260408220610c639161010090046001600160a01b031686613515565b905080610c8357604051637bc90c0560e11b815260040160405180910390fd5b610d073333600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cff919061559f565b600085613535565b604051818152339081907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba1043836906020015b60405180910390a350505050565b6001600160a01b03828116600090815260046020526040902080548492163314801590610d7f575060018101546001600160a01b03163314155b15610d9d57604051630101292160e31b815260040160405180910390fd5b6001600160a01b03808516600090815260046020526040902054859116610dd7576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e91906155b8565b15610e6c57604051631e59ccd960e01b815260040160405180910390fd5b610f05600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee6919061559f565b6001600160a01b038716600090815260046020526040902090866135e3565b846001600160a01b03167fc11dfc9c24621433bb10587dc4bbae26a33a4aff53914e0d4c9fddf224a8cb7d85604051610b2a91906155da565b60028181548110610f4e57600080fd5b600091825260209091200154905081565b600080546001600160a01b038481168352600460205260408320610f8c92909161010090910416846135f5565b5090505b92915050565b60038181548110610f4e57600080fd5b60606000610fba8484600580549050613788565b9093509050826001600160401b03811115610fd757610fd7614f49565b604051908082528060200260200182016040528015611000578160200160208202803683370190505b50915060005b8381101561108457600561101a8287615603565b8154811061102a5761102a61561b565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061105a5761105a61561b565b6001600160a01b03909216602092830291909101909101528061107c81615631565b915050611006565b509250929050565b60008061114f6000841161111657600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611111919061559f565b611118565b835b6001600160a01b038616600090815260046020908152604080832093835260098401825280832054600a9094019091529020549091565b909590945092505050565b6001600160a01b0384166000908152600760205260408120606091829182918291886111fc57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f7919061559f565b6111fe565b885b98506112108888600580549050613788565b9097509150866001600160401b0381111561122d5761122d614f49565b604051908082528060200260200182016040528015611256578160200160208202803683370190505b509550866001600160401b0381111561127157611271614f49565b60405190808252806020026020018201604052801561129a578160200160208202803683370190505b509450866001600160401b038111156112b5576112b5614f49565b6040519080825280602002602001820160405280156112de578160200160208202803683370190505b509350866001600160401b038111156112f9576112f9614f49565b604051908082528060200260200182016040528015611322578160200160208202803683370190505b50925060005b8781101561149a57600561133c828b615603565b8154811061134c5761134c61561b565b9060005260206000200160009054906101000a90046001600160a01b031687828151811061137c5761137c61561b565b60200260200101906001600160a01b031690816001600160a01b0316815250506113cd8782815181106113b1576113b161561b565b602002602001015160008c856137bf909392919063ffffffff16565b8682815181106113df576113df61561b565b60200260200101818152505061141c8782815181106114005761140061561b565b602002602001015160018c856137bf909392919063ffffffff16565b85828151811061142e5761142e61561b565b60200260200101818152505061146b87828151811061144f5761144f61561b565b602002602001015160028c856137bf909392919063ffffffff16565b84828151811061147d5761147d61561b565b60209081029190910101528061149281615631565b915050611328565b5050945094509450945094565b600080821161152c57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611503573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611527919061559f565b61152e565b815b6001600160a01b0384166000908152600460205260409020909250611553908361387e565b9392505050565b600080600183600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d7919061559f565b6115e1919061564c565b6115eb919061564c565b845190915060005b8481101561171057611606600184615603565b6000805460405163fcbb371b60e01b81526004810184905292955090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa15801561165a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167e9190615524565b905060005b838110156116fb576116dd8286600460008c86815181106116a6576116a661561b565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206138919092919063ffffffff16565b6116e79087615603565b9550806116f381615631565b915050611683565b5050808061170890615631565b9150506115f3565b50505092915050565b6001600160a01b03828116600090815260046020526040902080548492163314801590611753575060018101546001600160a01b03163314155b1561177157604051630101292160e31b815260040160405180910390fd5b6001600160a01b038085166000908152600460205260409020548591166117ab576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182291906155b8565b1561184057604051631e59ccd960e01b815260040160405180910390fd5b6118d9600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ba919061559f565b6001600160a01b038716600090815260046020526040902090866139fe565b846001600160a01b03167f0ad9bf1b8c026a174a2f30954417002a6ea00c9b08c1b8846c7951c687be809585604051610b2a91906155da565b600080821161199757600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561196e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611992919061559f565b611999565b815b9150610f906002600384613a0b565b6001600160a01b0384166000908152600460205260408120606091829186611a4657600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a41919061559f565b611a48565b865b9650611a5c86868360070180549050613788565b9095509150846001600160401b03811115611a7957611a79614f49565b604051908082528060200260200182016040528015611aa2578160200160208202803683370190505b509350846001600160401b03811115611abd57611abd614f49565b604051908082528060200260200182016040528015611ae6578160200160208202803683370190505b50925060005b85811015611bf9576000600781848201611b06858c615603565b81548110611b1657611b1661561b565b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190208054885191935090911690879084908110611b5c57611b5c61561b565b6001600160a01b0392831660209182029290920101528354611b839183911660028c6137bf565b8354611b9c9083906001600160a01b031660018d6137bf565b8454611bb59084906001600160a01b031660008e6137bf565b611bbf9190615603565b611bc99190615603565b858381518110611bdb57611bdb61561b565b60209081029190910101525080611bf181615631565b915050611aec565b50509450945094915050565b334114611c2557604051631cf4735960e01b815260040160405180910390fd5b60005460ff1615611c485760405162dc149f60e41b815260040160405180910390fd5b6000805460016001600160a81b03199091166101006001600160a01b039586160217811790915580546001600160a01b03191691909216179055565b6001600160a01b03821660009081526007602052604081206006018054829182918291829187908110611cb957611cb961561b565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115611cec57611cec6152e6565b6002811115611cfd57611cfd6152e6565b81526020016001820154815260200160028201548152505090508060000151816020015182604001518360400151600014158015611d3f575083604001514210155b929a91995097509095509350505050565b336000818152600760205260409020546001600160a01b0316611d865760405163cf83d93d60e01b815260040160405180910390fd5b336000908152600760205260408120600601805484908110611daa57611daa61561b565b9060005260206000209060030201905060008160020154905080421015611de4576040516303cb96db60e21b815260040160405180910390fd5b80611e0257604051630c8d9eab60e31b815260040160405180910390fd5b6000600283015560405184815233907fbf5f92dc2b945251eadf78c2ca629ae64053d979bfbc43a7b17a463707906bf99060200160405180910390a281546001830154611e549160ff16903390613b24565b50505050565b60058181548110611e6a57600080fd5b6000918252602090912001546001600160a01b0316905081565b60015460405163322433e360e01b81523360048201819052916001600160a01b03169063322433e390602401602060405180830381865afa158015611ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef191906155b8565b611f0e5760405163423057c560e11b815260040160405180910390fd5b6001600160a01b0381166000908152600460205260409020611f309083613c43565b60058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b038381166001600160a01b03199283168117909355841660009081526006602090815260409182902080549093168417909255519182527fd5828184f48f65962d10eac907318df85953d4e3542a0f09b5932ee3fe398bdd910160405180910390a15050565b606080606080600080600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612028573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204c919061559f565b90506000891161205c578061205e565b885b6000805460405163fcbb371b60e01b815260048101849052929b5090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa1580156120b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d69190615524565b90506120e88989600580549050613788565b9098509250876001600160401b0381111561210557612105614f49565b60405190808252806020026020018201604052801561212e578160200160208202803683370190505b509650876001600160401b0381111561214957612149614f49565b604051908082528060200260200182016040528015612172578160200160208202803683370190505b509550876001600160401b0381111561218d5761218d614f49565b6040519080825280602002602001820160405280156121b6578160200160208202803683370190505b509450876001600160401b038111156121d1576121d1614f49565b6040519080825280602002602001820160405280156121fa578160200160208202803683370190505b50935060005b8881101561237a5760006004816005612219858f615603565b815481106122295761222961561b565b60009182526020808320909101546001600160a01b039081168452908301939093526040909101902080548b51919350909116908a908490811061226f5761226f61561b565b6001600160a01b039283166020918202929092010152600182015489519116908990849081106122a1576122a161561b565b6001600160a01b03909216602092830291909101909101526122c3818d61387e565b8783815181106122d5576122d561561b565b60209081029190910101526122fe818d6000908152600291909101602052604090205460ff1690565b15801561231c575060008c815260038201602052604090205460ff16155b801561234557508260c0015187838151811061233a5761233a61561b565b602002602001015110155b8683815181106123575761235761561b565b91151560209283029190910190910152508061237281615631565b915050612200565b505050939792965093509350565b6001600160a01b038084166000908152600460205260409020548491166123c2576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015612415573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243991906155b8565b1561245757604051631e59ccd960e01b815260040160405180910390fd5b8161247557604051637bc90c0560e11b815260040160405180910390fd5b612480833384613c85565b61250e3385600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124fc919061559f565b612507906001615603565b8686613535565b836001600160a01b0316336001600160a01b03167f8fc656e319452025372383dc27d933046d412b8253de50a10739eeaa59862be68585604051610d37929190615663565b6001600160a01b0380821660009081526007602052604081208154919283928392916125889183916101009091041684613d26565b6000549094506125a990829061010090046001600160a01b03166001613d26565b6000549093506125ca90829061010090046001600160a01b03166002613d26565b93959294505050565b6040513481527f1de49774d094a85fc1bbbd16e8d09a865fb848218f41e2da4369f528c42ee42e9060200160405180910390a1565b6001600160a01b03808316600081815260066020908152604080832054851683526004909152812060018101549193909291161461264a576000915050610f90565b600083116126ce57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c9919061559f565b6126d0565b825b92506126dc818461387e565b949350505050565b336000818152600460205260409020546001600160a01b031661271a576040516372898ae960e11b815260040160405180910390fd5b33600081815260046020526040902060018101546001600160a01b03166127418286613f4c565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916888616908117909155825194861685529084019290925290917f758820d0b14a01c1fa60b8d2bbef25ed1b6a5af4802e5dec3f08679255ba8bf39101610b2a565b606060006127bf8484600880549050613788565b9093509050826001600160401b038111156127dc576127dc614f49565b604051908082528060200260200182016040528015612805578160200160208202803683370190505b50915060005b8381101561108457600861281f8287615603565b8154811061282f5761282f61561b565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061285f5761285f61561b565b6001600160a01b03909216602092830291909101909101528061288181615631565b91505061280b565b336000818152600460205260409020546001600160a01b03166128bf576040516372898ae960e11b815260040160405180910390fd5b600080543382526004602052604082206128e79161010090046001600160a01b031685613515565b60405181815290915033907f882d5671e5b36af50883197c33d48ba56ce337589958e871ba82fb0a54adf3e89060200160405180910390a28015611e5457611e5460003383613b24565b6001600160a01b0380831660009081526004602052604090205483911661296b576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166129a15760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1891906155b8565b15612a3657604051631e59ccd960e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420612a71939092610100909104169087613fc6565b905080612a9157604051637bc90c0560e11b815260040160405180910390fd5b612ae93386600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cdb573d6000803e3d6000fd5b6040518181526001600160a01b0386169033907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba10438369060200160405180910390a35050505050565b6001600160a01b038316600090815260076020526040812060068101546060928392839283929190612b659089908990613788565b9097509150866001600160401b03811115612b8257612b82614f49565b604051908082528060200260200182016040528015612bab578160200160208202803683370190505b509550866001600160401b03811115612bc657612bc6614f49565b604051908082528060200260200182016040528015612bef578160200160208202803683370190505b509450866001600160401b03811115612c0a57612c0a614f49565b604051908082528060200260200182016040528015612c33578160200160208202803683370190505b509350866001600160401b03811115612c4e57612c4e614f49565b604051908082528060200260200182016040528015612c77578160200160208202803683370190505b50925060005b87811015612ddb57600060068301612c95838c615603565b81548110612ca557612ca561561b565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115612cd857612cd86152e6565b6002811115612ce957612ce96152e6565b81526020016001820154815260200160028201548152505090508060000151888381518110612d1a57612d1a61561b565b60200260200101906002811115612d3357612d336152e6565b90816002811115612d4657612d466152e6565b815250508060200151878381518110612d6157612d6161561b565b6020026020010181815250508060400151868381518110612d8457612d8461561b565b6020908102919091010152604081015115801590612da6575080604001514210155b858381518110612db857612db861561b565b911515602092830291909101909101525080612dd381615631565b915050612c7d565b5050939792965093509350565b600080600080600080600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e68919061559f565b905060008711612e785780612e7a565b865b6000805460405163fcbb371b60e01b81526004810184905292995090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015612ece573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef29190615524565b6001600160a01b038a1660009081526004602090815260408083208c8452600281018352818420546003820190935292205460ff918216159950169650909150612f3c818a61387e565b9350868015612f49575085155b8015612f5957508160c001518410155b6001909101546001600160a01b03169750935050509295509295909350565b600080546001600160a01b038481168352600460209081526040808520888416865260079092528420612fb5939092610100909104169085613fff565b50949350505050565b604051634ee5a1b960e01b815260040160405180910390fd5b6001600160a01b03808316600090815260046020526040902054839116613011576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166130475760405163cf83d93d60e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420613082939092610100909104169087613fc6565b604080516001600160a01b03881681526020810183905291925033917f2ef606d064225d24c1514dc94907c134faee1237445c2f63f410cce0852b2054910160405180910390a280156130db576130db60003383613b24565b505050505050565b60088181548110611e6a57600080fd5b336000818152600760205260409020546001600160a01b03166131295760405163cf83d93d60e01b815260040160405180910390fd5b60008054338252600760205260409091206131519161010090046001600160a01b0316614209565b5050565b6001600160a01b0380841660009081526004602052604090205484911661318f576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166131c55760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015613218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061323c91906155b8565b1561325a57604051631e59ccd960e01b815260040160405180910390fd5b33600090815260076020908152604080832083546001600160a01b038a8116865260049094529190932061329892849261010090041690888861422d565b9350836132b857604051637bc90c0560e11b815260040160405180910390fd5b8060060160405180606001604052808760028111156132d9576132d96152e6565b8152602081018790526040016132f242620d2f00615603565b9052815460018181018455600093845260209093208251600390920201805492939092839160ff1990911690836002811115613330576133306152e6565b0217905550602082015181600101556040820151816002015550506133dc6003600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c7919061559f565b6133d2906001615603565b6002919087614363565b5060068101546001600160a01b0387169033907fb649014faa7a0e23357e091fb8a67a128c33dc9480f846f7e41cb3a6c9d806109061341d9060019061564c565b60405190815260200160405180910390a3505050505050565b600082815260098501602052604081205461345f57600083815260098601602052604090208290555b6000838152600a8601602052604081205461347b906001615603565b6000858152600a88016020526040902081905560e086015190915081108015906134c757506003860160006134b1866001615603565b815260208101919091526040016000205460ff16155b15612fb5576101008501516134dc9085615603565b91505b81841015612fb557836134f181615631565b60008181526003890160205260409020805460ff1916600117905594506134df9050565b60008060006135258686866135f5565b6006880155925050509392505050565b6001600160a01b03808616600090815260076020526040902080549091166135ae5780546001600160a01b0387166001600160a01b031991821681178355600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180549092161790555b6001600160a01b03851660009081526004602052604090206135d59082908690868661443e565b6130db600260038685614506565b6135f083838360006145ec565b505050565b6000808460060154905060006001856001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613641573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613665919061559f565b61366f919061564c565b90508315806136865750806136848386615603565b115b1561369857613695828261564c565b93505b60005b8481101561377e576136ae600184615603565b60405163fcbb371b60e01b8152600481018290529093506000906001600160a01b0388169063fcbb371b9060240161012060405180830381865afa1580156136fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061371e9190615524565b9050600061372d898387613891565b90508061373b57505061376c565b60a082015161374b57505061376c565b61375d818360a0015160646019614672565b6137679087615603565b955050505b8061377681615631565b91505061369b565b5050935093915050565b600080826137968587615603565b106137a8576137a5858461564c565b93505b836137b38187615603565b91509150935093915050565b60006138758560020160008560028111156137dc576137dc6152e6565b60028111156137ed576137ed6152e6565b81526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002083876001016000876002811115613837576138376152e6565b6002811115613848576138486152e6565b8152602080820192909252604090810160009081206001600160a01b038b16825290925290209190613a0b565b95945050505050565b6000611553600484016005850184613a0b565b600081815260028401602052604081205460ff16806138c05750600082815260038501602052604090205460ff165b156138cd57506000611553565b60006138d9858461387e565b90506049831061391a578360c001518110156138f9576000915050611553565b6298968061390982610a3461567e565b613913919061569d565b91506139b3565b80613929576000915050611553565b6139356019600a61579b565b61394685608001516064601961469e565b613950908361567e565b61395a919061569d565b91508161396b576000915050611553565b61398e84606001518560400151613982919061567e565b6301e13380601961469e565b613998908361567e565b91506139a66019600a61579b565b6139b0908361569d565b91505b6000838152600a8601602052604090205480156139f55760008481526009870160205260409020546139f1846139e9848461564c565b836019614672565b9350505b50509392505050565b6135f083838360016145ec565b8254600090801580613a3957508285600081548110613a2c57613a2c61561b565b9060005260206000200154115b15613a48576000915050611553565b8285613a5560018461564c565b81548110613a6557613a6561561b565b906000526020600020015411613aa45783613a8160018361564c565b81548110613a9157613a9161561b565b9060005260206000200154915050611553565b600181118015613ada57508285613abc60028461564c565b81548110613acc57613acc61561b565b906000526020600020015411155b15613aeb5783613a8160028361564c565b6000613afa86856000856146da565b9050848181548110613b0e57613b0e61561b565b9060005260206000200154925050509392505050565b600080846002811115613b3957613b396152e6565b1415613b98576040516001600160a01b038416908390600081818185875af1925050503d8060008114613b88576040519150601f19603f3d011682016040523d82523d6000602084013e613b8d565b606091505b505080915050613c1a565b613ba184614782565b60405163a9059cbb60e01b81526001600160a01b03858116600483015260248201859052919091169063a9059cbb906044015b6020604051808303816000875af1158015613bf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1791906155b8565b90505b80611e545783604051630db5347560e11b8152600401613c3a91906157a7565b60405180910390fd5b81546001600160a01b031615613c6b57604051621d934160e11b815260040160405180910390fd5b81546001600160a01b031916331782556131518282613f4c565b6000836002811115613c9957613c996152e6565b1415613cbf578034146135f057604051630fe5b06560e11b815260040160405180910390fd5b3415613cde5760405163a745ac8560e01b815260040160405180910390fd5b6000613ce984614782565b6040516323b872dd60e01b81526001600160a01b0385811660048301523060248301526044820185905291909116906323b872dd90606401613bd4565b600080846003016000846002811115613d4157613d416152e6565b6002811115613d5257613d526152e6565b8152602081019190915260400160002054905080613d74576000915050611553565b6000846001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dd8919061559f565b90506000613de760018461564c565b9050600081118015613e4a575081876003016000876002811115613e0d57613e0d6152e6565b6002811115613e1e57613e1e6152e6565b81526020019081526020016000208281548110613e3d57613e3d61561b565b9060005260206000200154115b15613e5d5780613e59816157b5565b9150505b81876003016000876002811115613e7657613e766152e6565b6002811115613e8757613e876152e6565b81526020019081526020016000208281548110613ea657613ea661561b565b90600052602060002001541115613ec35760009350505050611553565b6000805b828111613f4057886004016000886002811115613ee657613ee66152e6565b6002811115613ef757613ef76152e6565b81526020019081526020016000208181548110613f1657613f1661561b565b906000526020600020015482613f2c9190615603565b915080613f3881615631565b915050613ec7565b50979650505050505050565b6001600160a01b038116613f7357604051637138356f60e01b815260040160405180910390fd5b81546001600160a01b0382811691161415613fa15760405163e037058f60e01b815260040160405180910390fd5b60019190910180546001600160a01b0319166001600160a01b03909216919091179055565b6000806000613fd787878787613fff565b86546001600160a01b0316600090815260058a01602052604090205592505050949350505050565b81546001600160a01b039081166000908152600586016020908152604080832054815163900cf0cf60e01b81529151939490938593600193928a169263900cf0cf92600480830193928290030181865afa158015614061573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614085919061559f565b61408f919061564c565b90508315806140a65750806140a48386615603565b115b156140b8576140b5828261564c565b93505b60005b848110156141fe576140ce600184615603565b86549093506000906140ed908a906001600160a01b03166002876137bf565b8754614106908b906001600160a01b03166001886137bf565b885461411f908c906001600160a01b03166000896137bf565b6141299190615603565b6141339190615603565b90508061414057506141ec565b60405163fcbb371b60e01b8152600481018590526000906141b9906001600160a01b038b169063fcbb371b9060240161012060405180830381865afa15801561418d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141b19190615524565b8990876147ed565b9050806141c75750506141ec565b6141dd81836141d68b8961387e565b6019614672565b6141e79087615603565b955050505b806141f681615631565b9150506140bb565b505094509492505050565b61421582826001614838565b61422182826002614838565b61315182826000614838565b600061434986600201600085600281111561424a5761424a6152e6565b600281111561425b5761425b6152e6565b81526020808201929092526040908101600090812088546001600160a01b03908116835290845290829020825163900cf0cf60e01b815292519093918a169263900cf0cf9260048083019391928290030181865afa1580156142c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142e5919061559f565b6142f0906001615603565b84896001016000886002811115614309576143096152e6565b600281111561431a5761431a6152e6565b8152602080820192909252604090810160009081208b546001600160a01b031682529092529020929190614363565b91508161435857506000613875565b612fb5848684614b5e565b835460009080158061439a57508561437c60018361564c565b8154811061438c5761438c61561b565b906000526020600020015484105b156143b857604051630eae4c9760e01b815260040160405180910390fd5b60006143c5878787614bde565b905060008682815481106143db576143db61561b565b90600052602060002001549050808511156143f657806143f8565b845b9450841561443257848783815481106144135761441361561b565b90600052602060002001600082825461442c919061564c565b90915550505b50929695505050505050565b6144ed856002016000846002811115614459576144596152e6565b600281111561446a5761446a6152e6565b81526020808201929092526040908101600090812087546001600160a01b031682529092528120908690849060018a01908760028111156144ad576144ad6152e6565b60028111156144be576144be6152e6565b8152602080820192909252604090810160009081208a546001600160a01b031682529092529020929190614506565b8454610b3390849086906001600160a01b031684614dee565b835460018111801561453d57508461451f60018361564c565b8154811061452f5761452f61561b565b906000526020600020015483105b801561456e57508461455060028361564c565b815481106145605761456061561b565b906000526020600020015483105b1561458c57604051630eae4c9760e01b815260040160405180910390fd5b6000614599868686614bde565b8654925090505b818110156130db57828582815481106145bb576145bb61561b565b9060005260206000200160008282546145d49190615603565b909155508190506145e481615631565b9150506145a0565b815160005b818110156130db57600084828151811061460d5761460d61561b565b60200260200101519050858111801561463d5750600081815260028801602052604090205460ff16151584151514155b1561465f5760008181526002880160205260409020805460ff19168515151790555b508061466a81615631565b9150506145f1565b600061467f82600a61579b565b61468a85858561469e565b614694908761567e565b613875919061569d565b6000806146ac836001615603565b6146b790600a61579b565b6146c1908661567e565b9050600a6146cf858361569d565b614694906005615603565b6000818314156146f6576146ef60018361564c565b90506126dc565b600060026147048486615603565b61470e919061569d565b9050848682815481106147235761472361561b565b9060005260206000200154111561474857614740868686846146da565b9150506126dc565b8486828154811061475b5761475b61561b565b9060005260206000200154101561387557614740868661477c846001615603565b866146da565b60006001826002811115614798576147986152e6565b14156147ac57506001602960991b01919050565b60028260028111156147c0576147c06152e6565b14156147d457506002602960991b01919050565b604051638698bf3760e01b815260040160405180910390fd5b6000806147fb858585613891565b90508061480c576000915050611553565b60a084015161481c579050611553565b61482e818560a0015160646019614672565b613875908261564c565b6000614845848484613d26565b9050806148525750505050565b600084600301600084600281111561486c5761486c6152e6565b600281111561487d5761487d6152e6565b8152602001908152602001600020805490509050836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156148cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148f3919061559f565b85600301600085600281111561490b5761490b6152e6565b600281111561491c5761491c6152e6565b8152602001908152602001600020600183614937919061564c565b815481106149475761494761561b565b9060005260206000200154116149e25784600301600084600281111561496f5761496f6152e6565b6002811115614980576149806152e6565b8152602001908152602001600020600061499a9190614e6e565b8460040160008460028111156149b2576149b26152e6565b60028111156149c3576149c36152e6565b815260200190815260200160002060006149dd9190614e6e565b614b47565b6040518060200160405280866003016000866002811115614a0557614a056152e6565b6002811115614a1657614a166152e6565b8152602001908152602001600020600184614a31919061564c565b81548110614a4157614a4161561b565b9060005260206000200154815250856003016000856002811115614a6757614a676152e6565b6002811115614a7857614a786152e6565b81526020810191909152604001600020614a93916001614e8f565b506040518060200160405280866004016000866002811115614ab757614ab76152e6565b6002811115614ac857614ac86152e6565b8152602001908152602001600020600184614ae3919061564c565b81548110614af357614af361561b565b9060005260206000200154815250856004016000856002811115614b1957614b196152e6565b6002811115614b2a57614b2a6152e6565b81526020810191909152604001600020614b45916001614e8f565b505b8454610b339084906001600160a01b031684613b24565b611e5483600501836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bc7919061559f565b614bd2906001615603565b60048601919084614363565b825460009080614c19575050825460018181018555600085815260208082209093018490558454918201855584815291822001819055611553565b6000614c2660018361564c565b90506000868281548110614c3c57614c3c61561b565b9060005260206000200154905080851415614c5b575091506115539050565b80851115614cc35786546001810188556000888152602090200185905585548690819084908110614c8e57614c8e61561b565b6000918252602080832090910154835460018181018655948452919092200155614cb9908390615603565b9350505050611553565b600082118015614cf8575086614cda60018461564c565b81548110614cea57614cea61561b565b906000526020600020015485145b15614d0857614cb960018361564c565b86878381548110614d1b57614d1b61561b565b6000918252602080832090910154835460018101855593835291209091015585548690819084908110614d5057614d5061561b565b6000918252602080832090910154835460018101855593835291209091015586548590889084908110614d8557614d8561561b565b6000918252602090912001558115614dc35785614da360018461564c565b81548110614db357614db361561b565b9060005260206000200154614dc6565b60005b868381548110614dd857614dd861561b565b6000918252602090912001555091506115539050565b6001600160a01b038216600090815260088501602052604090205460ff16614e5c576001600160a01b038216600081815260088601602090815260408220805460ff191660019081179091556007880180549182018155835291200180546001600160a01b03191690911790555b611e5460048501600586018584614506565b5080546000825590600052602060002090810190614e8c9190614eda565b50565b828054828255906000526020600020908101928215614eca579160200282015b82811115614eca578251825591602001919060010190614eaf565b50614ed6929150614eda565b5090565b5b80821115614ed65760008155600101614edb565b6001600160a01b0381168114614e8c57600080fd5b60008060408385031215614f1757600080fd5b8235614f2281614eef565b946020939093013593505050565b600060208284031215614f4257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715614f8257614f82614f49565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614fb057614fb0614f49565b604052919050565b60006001600160401b03821115614fd157614fd1614f49565b5060051b60200190565b60008060408385031215614fee57600080fd5b8235614ff981614eef565b91506020838101356001600160401b0381111561501557600080fd5b8401601f8101861361502657600080fd5b803561503961503482614fb8565b614f88565b81815260059190911b8201830190838101908883111561505857600080fd5b928401925b828410156150765783358252928401929084019061505d565b80955050505050509250929050565b6000806040838503121561509857600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b838110156150e05781516001600160a01b0316875295820195908201906001016150bb565b509495945050505050565b6040815260006150fe60408301856150a7565b90508260208301529392505050565b6000806000806080858703121561512357600080fd5b843561512e81614eef565b966020860135965060408601359560600135945092505050565b600081518084526020808501945080840160005b838110156150e05781518752958201959082019060010161515c565b60a08152600061518b60a08301886150a7565b828103602084015261519d8188615148565b905082810360408401526151b18187615148565b905082810360608401526151c58186615148565b9150508260808301529695505050505050565b600080604083850312156151eb57600080fd5b82356001600160401b0381111561520157600080fd5b8301601f8101851361521257600080fd5b8035602061522261503483614fb8565b82815260059290921b8301810191818101908884111561524157600080fd5b938201935b8385101561526857843561525981614eef565b82529382019390820190615246565b98969091013596505050505050565b60608152600061528a60608301866150a7565b828103602084015261529c8186615148565b915050826040830152949350505050565b600080604083850312156152c057600080fd5b82356152cb81614eef565b915060208301356152db81614eef565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b6003811061531a57634e487b7160e01b600052602160045260246000fd5b9052565b6080810161532c82876152fc565b846020830152836040830152821515606083015295945050505050565b60006020828403121561535b57600080fd5b813561155381614eef565b60008060006060848603121561537b57600080fd5b505081359360208301359350604090920135919050565b600081518084526020808501945080840160005b838110156150e05781511515875295820195908201906001016153a6565b60a0815260006153d760a08301886150a7565b82810360208401526153e981886150a7565b905082810360408401526153fd8187615148565b905082810360608401526151c58186615392565b60008060006060848603121561542657600080fd5b833561543181614eef565b925060208401356003811061544557600080fd5b929592945050506040919091013590565b60008060006060848603121561546b57600080fd5b833561547681614eef565b95602085013595506040909401359392505050565b60a0808252865190820181905260009060209060c0840190828a01845b828110156154cb576154bb8483516152fc565b92840192908401906001016154a8565b505050838103828501526154df8189615148565b91505082810360408401526153fd8187615148565b60008060006060848603121561550957600080fd5b833561551481614eef565b9250602084013561544581614eef565b6000610120828403121561553757600080fd5b61553f614f5f565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b6000602082840312156155b157600080fd5b5051919050565b6000602082840312156155ca57600080fd5b8151801515811461155357600080fd5b6020815260006115536020830184615148565b634e487b7160e01b600052601160045260246000fd5b60008219821115615616576156166155ed565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415615645576156456155ed565b5060010190565b60008282101561565e5761565e6155ed565b500390565b6040810161567182856152fc565b8260208301529392505050565b6000816000190483118215151615615698576156986155ed565b500290565b6000826156ba57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156110845781600019048211156156e0576156e06155ed565b808516156156ed57918102915b93841c93908002906156c4565b60008261570957506001610f90565b8161571657506000610f90565b816001811461572c576002811461573657615752565b6001915050610f90565b60ff841115615747576157476155ed565b50506001821b610f90565b5060208310610133831016604e8410600b8410161715615775575081810a610f90565b61577f83836156bf565b8060001904821115615793576157936155ed565b029392505050565b600061155383836156fa565b60208101610f9082846152fc565b6000816157c4576157c46155ed565b50600019019056fea26469706673582212200a3bb40da327dc2414c15b981a7b902457121dd4bc3e8627caf9d791841ae51864736f6c634300080c0033"), + }, + { + contract: sccVerifier, + // commit: https://github.com/oasysgames/oasys-optimism/blob/d6df48a68a33ac67c4222851b64cf5036150c495/packages/contracts/contracts/oasys/L1/rollup/OasysStateCommitmentChainVerifier.sol + code: mustDecodeCode("0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063d17f1fb11461003b578063dea2619d14610050575b600080fd5b61004e610049366004610bd9565b610063565b005b61004e61005e366004610bd9565b610152565b6100708383600084610234565b6040517f9594dd6400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690639594dd64906100c2908590600401610d29565b600060405180830381600087803b1580156100dc57600080fd5b505af11580156100f0573d6000803e3d6000fd5b5050505081600001518373ffffffffffffffffffffffffffffffffffffffff167f2d6c30e420d4abe074221e2e344cec3bd0f565a2e09435a3d9d738f69332a6dd846020015160405161014591815260200190565b60405180910390a3505050565b61015f8383600184610234565b6040517fe0c2b41800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063e0c2b418906101b1908590600401610d29565b600060405180830381600087803b1580156101cb57600080fd5b505af11580156101df573d6000803e3d6000fd5b5050505081600001518373ffffffffffffffffffffffffffffffffffffffff167f4785b50466d5e0124a77ed43985b62f3b454caff4b6cfc6aa94ab02c5e5df1f5846020015160405161014591815260200190565b8251602080850151604080514681850152606089901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016818301526054810194909452607484019190915284151560f81b6094840152805160758185030181526095909301905281519101206000906102ae90836102c0565b90506102b9816105aa565b5050505050565b6060815167ffffffffffffffff8111156102dc576102dc610a05565b604051908082528060200260200182016040528015610305578160200160208202803683370190505b506040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101859052909150600090605c016040516020818303038152906040528051906020012090506000805b84518110156105a157600085828151811061037857610378610d74565b6020026020010151905060008061038f8684610835565b909250905060018160048111156103a8576103a8610da3565b14156103eb57826040517ff31b6ee50000000000000000000000000000000000000000000000000000000081526004016103e29190610dd2565b60405180910390fd5b60028160048111156103ff576103ff610da3565b141561043957826040517ff31b6ee50000000000000000000000000000000000000000000000000000000081526004016103e29190610e24565b600381600481111561044d5761044d610da3565b141561048757826040517ff31b6ee50000000000000000000000000000000000000000000000000000000081526004016103e29190610e76565b600481600481111561049b5761049b610da3565b14156104d557826040517ff31b6ee50000000000000000000000000000000000000000000000000000000081526004016103e29190610eee565b8473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1611610552576040517f3d1fd1b000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016103e2565b8187858151811061056557610565610d74565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015250925081905061059981610f95565b91505061035b565b50505092915050565b600061100090506000611001905060008273ffffffffffffffffffffffffffffffffffffffff1663900cf0cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561060057600080fd5b505afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106389190610fce565b84519091506000805b8281101561072c578473ffffffffffffffffffffffffffffffffffffffff16639c50821988838151811061067757610677610d74565b6020026020010151866040518363ffffffff1660e01b81526004016106be92919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60206040518083038186803b1580156106d657600080fd5b505afa1580156106ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070e9190610fce565b6107189083610fe7565b91508061072481610f95565b915050610641565b506040517f45367f230000000000000000000000000000000000000000000000000000000081526004810184905260009060649073ffffffffffffffffffffffffffffffffffffffff8716906345367f239060240160206040518083038186803b15801561079957600080fd5b505afa1580156107ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d19190610fce565b6107dc906033610fff565b6107e6919061103c565b90508082101561082c576040517f09b3dd4a00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016103e2565b50505050505050565b60008082516041141561086c5760208301516040840151606085015160001a610860878285856108a5565b9450945050505061089e565b825160401415610896576020830151604084015161088b8683836109bd565b93509350505061089e565b506000905060025b9250929050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156108dc57506000905060036109b4565b8460ff16601b141580156108f457508460ff16601c14155b1561090557506000905060046109b4565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610959573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166109ad576000600192509250506109b4565b9150600090505b94509492505050565b6000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831660ff84901c601b016109f7878288856108a5565b935093505050935093915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715610a5757610a57610a05565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610aa457610aa4610a05565b604052919050565b600082601f830112610abd57600080fd5b813567ffffffffffffffff811115610ad757610ad7610a05565b610b0860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610a5d565b818152846020838601011115610b1d57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610b4b57600080fd5b8135602067ffffffffffffffff80831115610b6857610b68610a05565b8260051b610b77838201610a5d565b9384528581018301938381019088861115610b9157600080fd5b84880192505b85831015610bcd57823584811115610baf5760008081fd5b610bbd8a87838c0101610aac565b8352509184019190840190610b97565b98975050505050505050565b600080600060608486031215610bee57600080fd5b833573ffffffffffffffffffffffffffffffffffffffff81168114610c1257600080fd5b9250602084013567ffffffffffffffff80821115610c2f57600080fd5b9085019060a08288031215610c4357600080fd5b610c4b610a34565b82358152602083013560208201526040830135604082015260608301356060820152608083013582811115610c7f57600080fd5b610c8b89828601610aac565b60808301525093506040860135915080821115610ca757600080fd5b50610cb486828701610b3a565b9150509250925092565b6000815180845260005b81811015610ce457602081850181015186830182015201610cc8565b81811115610cf6576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152815160208201526020820151604082015260408201516060820152606082015160808201526000608083015160a080840152610d6c60c0840182610cbe565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b604081526000610de56040830184610cbe565b8281036020840152601881527f45434453413a20696e76616c6964207369676e6174757265000000000000000060208201526040810191505092915050565b604081526000610e376040830184610cbe565b8281036020840152601f81527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060208201526040810191505092915050565b604081526000610e896040830184610cbe565b8281036020840152602281527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60208201527f756500000000000000000000000000000000000000000000000000000000000060408201526060810191505092915050565b604081526000610f016040830184610cbe565b8281036020840152602281527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60208201527f756500000000000000000000000000000000000000000000000000000000000060408201526060810191505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610fc757610fc7610f66565b5060010190565b600060208284031215610fe057600080fd5b5051919050565b60008219821115610ffa57610ffa610f66565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561103757611037610f66565b500290565b600082611072577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220a5d5618bfbba3887dcc2791601a94d5894ba03dc22eb33326b5607d801da74e764736f6c63430008090033"), + }, +} diff --git a/contracts/oasys/deployments7.go b/contracts/oasys/deployments7.go new file mode 100644 index 000000000..987821d5b --- /dev/null +++ b/contracts/oasys/deployments7.go @@ -0,0 +1,49 @@ +package oasys + +var deployments7 = []*deployment{ + { + contract: bitbankExchangeDeposit, + // commit: + // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/contracts/bitbank/ExchangeDeposit.sol + // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/outputs/bitbank.json#L6-L10 + code: mustDecodeCode("0x6080604052600436106100a05760003560e01c806388bc06731161006457806388bc0673146104c7578063ab413f1c146104dc578063cb56d18e146104f1578063d4dca69b14610524578063dca67d7b14610539578063fc6f94681461056c5761021d565b80632663d52d146103fb5780632ffdb1c51461042757806341c0e1b51461044e5780635c60da1b146104635780636296aa3f146104945761021d565b3661021d576000546001600160a01b03166100f2576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b60015434101561013c576040805162461bcd60e51b815260206004820152601060248201526f105b5bdd5b9d081d1bdbc81cdb585b1b60821b604482015290519081900360640190fd5b600080546040516001600160a01b039091169034908381818185875af1925050503d8060008114610189576040519150601f19603f3d011682016040523d82523d6000602084013e61018e565b606091505b50509050806101e4576040805162461bcd60e51b815260206004820152601760248201527f466f7277617264696e672066756e6473206661696c6564000000000000000000604482015290519081900360640190fd5b60408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a250005b6000610227610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561025f57600080fd5b505afa158015610273573d6000803e3d6000fd5b505050506040513d602081101561028957600080fd5b50516001600160a01b031614156102d7576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b60006102e16105bc565b90506001600160a01b03811661033e576040805162461bcd60e51b815260206004820152601960248201527f46616c6c6261636b20636f6e7472616374206e6f742073657400000000000000604482015290519081900360640190fd5b6000816001600160a01b03166000366040518083838082843760405192019450600093509091505080830381855af49150503d806000811461039c576040519150601f19603f3d011682016040523d82523d6000602084013e6103a1565b606091505b50509050806103f7576040805162461bcd60e51b815260206004820152601860248201527f46616c6c6261636b20636f6e7472616374206661696c65640000000000000000604482015290519081900360640190fd5b5050005b34801561040757600080fd5b506104256004803603602081101561041e57600080fd5b5035610664565b005b34801561043357600080fd5b5061043c6107e8565b60408051918252519081900360200190f35b34801561045a57600080fd5b506104256107ee565b34801561046f57600080fd5b5061047861097f565b604080516001600160a01b039092168252519081900360200190f35b3480156104a057600080fd5b50610425600480360360208110156104b757600080fd5b50356001600160a01b031661098e565b3480156104d357600080fd5b50610425610b8a565b3480156104e857600080fd5b50610478610c42565b3480156104fd57600080fd5b506104256004803603602081101561051457600080fd5b50356001600160a01b0316610c51565b34801561053057600080fd5b50610478610e66565b34801561054557600080fd5b506104256004803603602081101561055c57600080fd5b50356001600160a01b0316610e8a565b34801561057857600080fd5b50610478610f32565b600061058b610f56565b6105b5577f00000000000000000000000052000000000000000000000000000000000000246105b7565b305b905090565b60006105c6610f56565b610654577f00000000000000000000000052000000000000000000000000000000000000246001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561062357600080fd5b505afa158015610637573d6000803e3d6000fd5b505050506040513d602081101561064d57600080fd5b50516105b7565b506002546001600160a01b031690565b61066c610f56565b6106b6576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b60006106c0610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106f857600080fd5b505afa15801561070c573d6000803e3d6000fd5b505050506040513d602081101561072257600080fd5b50516001600160a01b03161415610770576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000e643b5fad9efe257d59c17fe19a9bbac809016b916146107e3576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b600155565b60015481565b6107f6610f56565b610840576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b600061084a610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561088257600080fd5b505afa158015610896573d6000803e3d6000fd5b505050506040513d60208110156108ac57600080fd5b50516001600160a01b031614156108fa576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000e643b5fad9efe257d59c17fe19a9bbac809016b9161461096d576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b600080546001600160a01b0319169055565b6002546001600160a01b031681565b610996610f56565b6109e0576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b60006109ea610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2257600080fd5b505afa158015610a36573d6000803e3d6000fd5b505050506040513d6020811015610a4c57600080fd5b50516001600160a01b03161415610a9a576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000e643b5fad9efe257d59c17fe19a9bbac809016b91614610b0d576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b6001600160a01b038116610b68576040805162461bcd60e51b815260206004820152601960248201527f30783020697320616e20696e76616c6964206164647265737300000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4780610b965750610c40565b6000610ba0610f85565b6040516001600160a01b0391909116908390600081818185875af1925050503d8060008114610beb576040519150601f19603f3d011682016040523d82523d6000602084013e610bf0565b606091505b5050905080610c3d576040805162461bcd60e51b8152602060048201526014602482015273086deead8c840dcdee840cec2e8d0cae4408aa8960631b604482015290519081900360640190fd5b50505b565b6000546001600160a01b031681565b610c59610f56565b610ca3576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b6000610cad610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ce557600080fd5b505afa158015610cf9573d6000803e3d6000fd5b505050506040513d6020811015610d0f57600080fd5b50516001600160a01b03161415610d5d576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000e643b5fad9efe257d59c17fe19a9bbac809016b91614610dd0576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b6001600160a01b0381161580610df35750610df3816001600160a01b0316611080565b610e44576040805162461bcd60e51b815260206004820152601f60248201527f696d706c656d656e746174696f6e206d75737420626520636f6e747261637400604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000520000000000000000000000000000000000002481565b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610ed457600080fd5b505afa158015610ee8573d6000803e3d6000fd5b505050506040513d6020811015610efe57600080fd5b5051905080610f0d5750610f2f565b610c3d610f18610f85565b6001600160a01b038416908363ffffffff61108616565b50565b7f000000000000000000000000e643b5fad9efe257d59c17fe19a9bbac809016b981565b7f00000000000000000000000052000000000000000000000000000000000000246001600160a01b0316301490565b600080610f90610581565b90506000816001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fcd57600080fd5b505afa158015610fe1573d6000803e3d6000fd5b505050506040513d6020811015610ff757600080fd5b5051905060006001600160a01b038216156110125781611078565b826001600160a01b031663fc6f94686040518163ffffffff1660e01b815260040160206040518083038186803b15801561104b57600080fd5b505afa15801561105f573d6000803e3d6000fd5b505050506040513d602081101561107557600080fd5b50515b935050505090565b3b151590565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526110d89084906110dd565b505050565b6060611132826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661118e9092919063ffffffff16565b8051909150156110d85780806020019051602081101561115157600080fd5b50516110d85760405162461bcd60e51b815260040180806020018281038252602a815260200180611351602a913960400191505060405180910390fd5b606061119d84846000856111a5565b949350505050565b60606111b085611080565b611201576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106112405780518252601f199092019160209182019101611221565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146112a2576040519150601f19603f3d011682016040523d82523d6000602084013e6112a7565b606091505b509150915081156112bb57915061119d9050565b8051156112cb5780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156113155781810151838201526020016112fd565b50505050905090810190601f1680156113425780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220186bde0d9b36823fed4f13c80a6d371e15ae371d5d8c928dcf853bd9560c276c64736f6c634300060b0033"), + storage: storage{ + // address payable public coldAddress + "0x00": "0x0000000000000000000000003727cfcbd85390bb11b3ff421878123adb866be8", + // uint256 public minimumInput + "0x01": "0x000000000000000000000000000000000000000000000000002386f26fc10000", + }, + }, + { + contract: bitbankProxyFactory, + // commit + // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/contracts/bitbank/ProxyFactory.sol + // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/outputs/bitbank.json#L16 + code: mustDecodeCode("0x608060405234801561001057600080fd5b50600436106100365760003560e01c80630cdd42341461003b578063d508e6231461005f575b600080fd5b61004361007c565b604080516001600160a01b039092168252519081900360200190f35b6100436004803603602081101561007557600080fd5b50356100a0565b7f000000000000000000000000520000000000000000000000000000000000002481565b600060606040518060800160405280604a815260200161010d604a91396020810180517f0000000000000000000000005200000000000000000000000000000000000024600881901b909117825291925084604a826000f59350508261010557600080fd5b505091905056fe604080600a3d393df3fe7300000000000000000000000000000000000000003d366025573d3d3d3d34865af16031565b363d3d373d3d363d855af45b3d82803e603c573d81fd5b3d81f3a264697066735822122084aed37c49a27a5f93f4288da7680e1280b7fb0971d6731dcb31a3c61010490464736f6c634300060b0033"), + }, + { + contract: bitbankExchangeDepositStaging, + // commit: + // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/contracts/bitbank/ExchangeDeposit.sol + // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/outputs/bitbank.json#L23-L27 + code: mustDecodeCode("0x6080604052600436106100a05760003560e01c806388bc06731161006457806388bc0673146104c7578063ab413f1c146104dc578063cb56d18e146104f1578063d4dca69b14610524578063dca67d7b14610539578063fc6f94681461056c5761021d565b80632663d52d146103fb5780632ffdb1c51461042757806341c0e1b51461044e5780635c60da1b146104635780636296aa3f146104945761021d565b3661021d576000546001600160a01b03166100f2576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b60015434101561013c576040805162461bcd60e51b815260206004820152601060248201526f105b5bdd5b9d081d1bdbc81cdb585b1b60821b604482015290519081900360640190fd5b600080546040516001600160a01b039091169034908381818185875af1925050503d8060008114610189576040519150601f19603f3d011682016040523d82523d6000602084013e61018e565b606091505b50509050806101e4576040805162461bcd60e51b815260206004820152601760248201527f466f7277617264696e672066756e6473206661696c6564000000000000000000604482015290519081900360640190fd5b60408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a250005b6000610227610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561025f57600080fd5b505afa158015610273573d6000803e3d6000fd5b505050506040513d602081101561028957600080fd5b50516001600160a01b031614156102d7576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b60006102e16105bc565b90506001600160a01b03811661033e576040805162461bcd60e51b815260206004820152601960248201527f46616c6c6261636b20636f6e7472616374206e6f742073657400000000000000604482015290519081900360640190fd5b6000816001600160a01b03166000366040518083838082843760405192019450600093509091505080830381855af49150503d806000811461039c576040519150601f19603f3d011682016040523d82523d6000602084013e6103a1565b606091505b50509050806103f7576040805162461bcd60e51b815260206004820152601860248201527f46616c6c6261636b20636f6e7472616374206661696c65640000000000000000604482015290519081900360640190fd5b5050005b34801561040757600080fd5b506104256004803603602081101561041e57600080fd5b5035610664565b005b34801561043357600080fd5b5061043c6107e8565b60408051918252519081900360200190f35b34801561045a57600080fd5b506104256107ee565b34801561046f57600080fd5b5061047861097f565b604080516001600160a01b039092168252519081900360200190f35b3480156104a057600080fd5b50610425600480360360208110156104b757600080fd5b50356001600160a01b031661098e565b3480156104d357600080fd5b50610425610b8a565b3480156104e857600080fd5b50610478610c42565b3480156104fd57600080fd5b506104256004803603602081101561051457600080fd5b50356001600160a01b0316610c51565b34801561053057600080fd5b50610478610e66565b34801561054557600080fd5b506104256004803603602081101561055c57600080fd5b50356001600160a01b0316610e8a565b34801561057857600080fd5b50610478610f32565b600061058b610f56565b6105b5577f00000000000000000000000052000000000000000000000000000000000000266105b7565b305b905090565b60006105c6610f56565b610654577f00000000000000000000000052000000000000000000000000000000000000266001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561062357600080fd5b505afa158015610637573d6000803e3d6000fd5b505050506040513d602081101561064d57600080fd5b50516105b7565b506002546001600160a01b031690565b61066c610f56565b6106b6576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b60006106c0610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106f857600080fd5b505afa15801561070c573d6000803e3d6000fd5b505050506040513d602081101561072257600080fd5b50516001600160a01b03161415610770576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000d4973c24a370face9a53f477f7e369e39886580516146107e3576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b600155565b60015481565b6107f6610f56565b610840576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b600061084a610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561088257600080fd5b505afa158015610896573d6000803e3d6000fd5b505050506040513d60208110156108ac57600080fd5b50516001600160a01b031614156108fa576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000d4973c24a370face9a53f477f7e369e398865805161461096d576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b600080546001600160a01b0319169055565b6002546001600160a01b031681565b610996610f56565b6109e0576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b60006109ea610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2257600080fd5b505afa158015610a36573d6000803e3d6000fd5b505050506040513d6020811015610a4c57600080fd5b50516001600160a01b03161415610a9a576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000d4973c24a370face9a53f477f7e369e3988658051614610b0d576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b6001600160a01b038116610b68576040805162461bcd60e51b815260206004820152601960248201527f30783020697320616e20696e76616c6964206164647265737300000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4780610b965750610c40565b6000610ba0610f85565b6040516001600160a01b0391909116908390600081818185875af1925050503d8060008114610beb576040519150601f19603f3d011682016040523d82523d6000602084013e610bf0565b606091505b5050905080610c3d576040805162461bcd60e51b8152602060048201526014602482015273086deead8c840dcdee840cec2e8d0cae4408aa8960631b604482015290519081900360640190fd5b50505b565b6000546001600160a01b031681565b610c59610f56565b610ca3576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b6000610cad610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ce557600080fd5b505afa158015610cf9573d6000803e3d6000fd5b505050506040513d6020811015610d0f57600080fd5b50516001600160a01b03161415610d5d576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000d4973c24a370face9a53f477f7e369e3988658051614610dd0576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b6001600160a01b0381161580610df35750610df3816001600160a01b0316611080565b610e44576040805162461bcd60e51b815260206004820152601f60248201527f696d706c656d656e746174696f6e206d75737420626520636f6e747261637400604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000520000000000000000000000000000000000002681565b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610ed457600080fd5b505afa158015610ee8573d6000803e3d6000fd5b505050506040513d6020811015610efe57600080fd5b5051905080610f0d5750610f2f565b610c3d610f18610f85565b6001600160a01b038416908363ffffffff61108616565b50565b7f000000000000000000000000d4973c24a370face9a53f477f7e369e39886580581565b7f00000000000000000000000052000000000000000000000000000000000000266001600160a01b0316301490565b600080610f90610581565b90506000816001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fcd57600080fd5b505afa158015610fe1573d6000803e3d6000fd5b505050506040513d6020811015610ff757600080fd5b5051905060006001600160a01b038216156110125781611078565b826001600160a01b031663fc6f94686040518163ffffffff1660e01b815260040160206040518083038186803b15801561104b57600080fd5b505afa15801561105f573d6000803e3d6000fd5b505050506040513d602081101561107557600080fd5b50515b935050505090565b3b151590565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526110d89084906110dd565b505050565b6060611132826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661118e9092919063ffffffff16565b8051909150156110d85780806020019051602081101561115157600080fd5b50516110d85760405162461bcd60e51b815260040180806020018281038252602a815260200180611351602a913960400191505060405180910390fd5b606061119d84846000856111a5565b949350505050565b60606111b085611080565b611201576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106112405780518252601f199092019160209182019101611221565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146112a2576040519150601f19603f3d011682016040523d82523d6000602084013e6112a7565b606091505b509150915081156112bb57915061119d9050565b8051156112cb5780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156113155781810151838201526020016112fd565b50505050905090810190601f1680156113425780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220186bde0d9b36823fed4f13c80a6d371e15ae371d5d8c928dcf853bd9560c276c64736f6c634300060b0033"), + storage: storage{ + // address payable public coldAddress + "0x00": "0x000000000000000000000000a3a80b4daa8be824b73f689eb87fb0955446dece", + // uint256 public minimumInput + "0x01": "0x000000000000000000000000000000000000000000000000002386f26fc10000", + }, + }, + { + contract: bitbankProxyFactoryStaging, + // commit: + // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/contracts/bitbank/ProxyFactory.sol + // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/outputs/bitbank.json#L33 + code: mustDecodeCode("0x608060405234801561001057600080fd5b50600436106100365760003560e01c80630cdd42341461003b578063d508e6231461005f575b600080fd5b61004361007c565b604080516001600160a01b039092168252519081900360200190f35b6100436004803603602081101561007557600080fd5b50356100a0565b7f000000000000000000000000520000000000000000000000000000000000002681565b600060606040518060800160405280604a815260200161010d604a91396020810180517f0000000000000000000000005200000000000000000000000000000000000026600881901b909117825291925084604a826000f59350508261010557600080fd5b505091905056fe604080600a3d393df3fe7300000000000000000000000000000000000000003d366025573d3d3d3d34865af16031565b363d3d373d3d363d855af45b3d82803e603c573d81fd5b3d81f3a264697066735822122084aed37c49a27a5f93f4288da7680e1280b7fb0971d6731dcb31a3c61010490464736f6c634300060b0033"), + }, + { + contract: oasMultiTransfer, + // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/2c8697e48049f692080650f9d4a6b70dabfa2a3c/contracts/util/OASMultiTransfer.sol + code: mustDecodeCode("0x60806040526004361061001e5760003560e01c8063ffc3a76914610023575b600080fd5b610036610031366004610323565b610038565b005b805182511461005a5760405163a9cb9e0d60e01b815260040160405180910390fd5b60005b82518110156101cd5760006001600160a01b0316838281518110610083576100836103f2565b60200260200101516001600160a01b0316141561009f576101bb565b8181815181106100b1576100b16103f2565b6020026020010151600014156100c6576101bb565b60008382815181106100da576100da6103f2565b60200260200101516001600160a01b03168383815181106100fd576100fd6103f2565b602002602001015160405160006040518083038185875af1925050503d8060008114610145576040519150601f19603f3d011682016040523d82523d6000602084013e61014a565b606091505b50509050806101b957838281518110610165576101656103f2565b602002602001015183838151811061017f5761017f6103f2565b6020908102919091010151604051630e21dcbb60e11b81526001600160a01b03909216600483015260248201526044015b60405180910390fd5b505b806101c581610408565b91505061005d565b50476101d7575050565b604051600090339047908381818185875af1925050503d8060008114610219576040519150601f19603f3d011682016040523d82523d6000602084013e61021e565b606091505b505090508061024857604051630e21dcbb60e11b81523360048201524760248201526044016101b0565b505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561028c5761028c61024d565b604052919050565b600067ffffffffffffffff8211156102ae576102ae61024d565b5060051b60200190565b600082601f8301126102c957600080fd5b813560206102de6102d983610294565b610263565b82815260059290921b840181019181810190868411156102fd57600080fd5b8286015b848110156103185780358352918301918301610301565b509695505050505050565b6000806040838503121561033657600080fd5b823567ffffffffffffffff8082111561034e57600080fd5b818501915085601f83011261036257600080fd5b813560206103726102d983610294565b82815260059290921b8401810191818101908984111561039157600080fd5b948201945b838610156103c55785356001600160a01b03811681146103b65760008081fd5b82529482019490820190610396565b965050860135925050808211156103db57600080fd5b506103e8858286016102b8565b9150509250929050565b634e487b7160e01b600052603260045260246000fd5b600060001982141561042a57634e487b7160e01b600052601160045260246000fd5b506001019056fea2646970667358221220463aa93b36bbf049bb9add61fc6e9f93ee69240841579c4af23fc9a58a9a1a0d64736f6c634300080c0033"), + }, +} diff --git a/contracts/oasys/deployments8.go b/contracts/oasys/deployments8.go new file mode 100644 index 000000000..64d69475e --- /dev/null +++ b/contracts/oasys/deployments8.go @@ -0,0 +1,44 @@ +package oasys + +var deployments8 = []*deployment{ + { + contract: bitbankExchangeDepositYokohama, + // commit: + // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/contracts/bitbank/ExchangeDeposit.sol + // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/outputs/bitbank.json#L40-L44 + code: mustDecodeCode("0x6080604052600436106100a05760003560e01c806388bc06731161006457806388bc0673146104c7578063ab413f1c146104dc578063cb56d18e146104f1578063d4dca69b14610524578063dca67d7b14610539578063fc6f94681461056c5761021d565b80632663d52d146103fb5780632ffdb1c51461042757806341c0e1b51461044e5780635c60da1b146104635780636296aa3f146104945761021d565b3661021d576000546001600160a01b03166100f2576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b60015434101561013c576040805162461bcd60e51b815260206004820152601060248201526f105b5bdd5b9d081d1bdbc81cdb585b1b60821b604482015290519081900360640190fd5b600080546040516001600160a01b039091169034908381818185875af1925050503d8060008114610189576040519150601f19603f3d011682016040523d82523d6000602084013e61018e565b606091505b50509050806101e4576040805162461bcd60e51b815260206004820152601760248201527f466f7277617264696e672066756e6473206661696c6564000000000000000000604482015290519081900360640190fd5b60408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a250005b6000610227610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561025f57600080fd5b505afa158015610273573d6000803e3d6000fd5b505050506040513d602081101561028957600080fd5b50516001600160a01b031614156102d7576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b60006102e16105bc565b90506001600160a01b03811661033e576040805162461bcd60e51b815260206004820152601960248201527f46616c6c6261636b20636f6e7472616374206e6f742073657400000000000000604482015290519081900360640190fd5b6000816001600160a01b03166000366040518083838082843760405192019450600093509091505080830381855af49150503d806000811461039c576040519150601f19603f3d011682016040523d82523d6000602084013e6103a1565b606091505b50509050806103f7576040805162461bcd60e51b815260206004820152601860248201527f46616c6c6261636b20636f6e7472616374206661696c65640000000000000000604482015290519081900360640190fd5b5050005b34801561040757600080fd5b506104256004803603602081101561041e57600080fd5b5035610664565b005b34801561043357600080fd5b5061043c6107e8565b60408051918252519081900360200190f35b34801561045a57600080fd5b506104256107ee565b34801561046f57600080fd5b5061047861097f565b604080516001600160a01b039092168252519081900360200190f35b3480156104a057600080fd5b50610425600480360360208110156104b757600080fd5b50356001600160a01b031661098e565b3480156104d357600080fd5b50610425610b8a565b3480156104e857600080fd5b50610478610c42565b3480156104fd57600080fd5b506104256004803603602081101561051457600080fd5b50356001600160a01b0316610c51565b34801561053057600080fd5b50610478610e66565b34801561054557600080fd5b506104256004803603602081101561055c57600080fd5b50356001600160a01b0316610e8a565b34801561057857600080fd5b50610478610f32565b600061058b610f56565b6105b5577f00000000000000000000000052000000000000000000000000000000000000286105b7565b305b905090565b60006105c6610f56565b610654577f00000000000000000000000052000000000000000000000000000000000000286001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561062357600080fd5b505afa158015610637573d6000803e3d6000fd5b505050506040513d602081101561064d57600080fd5b50516105b7565b506002546001600160a01b031690565b61066c610f56565b6106b6576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b60006106c0610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106f857600080fd5b505afa15801561070c573d6000803e3d6000fd5b505050506040513d602081101561072257600080fd5b50516001600160a01b03161415610770576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f0000000000000000000000000434fa25152dbd34a906a192b6ca5b4a8e0030ee16146107e3576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b600155565b60015481565b6107f6610f56565b610840576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b600061084a610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561088257600080fd5b505afa158015610896573d6000803e3d6000fd5b505050506040513d60208110156108ac57600080fd5b50516001600160a01b031614156108fa576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f0000000000000000000000000434fa25152dbd34a906a192b6ca5b4a8e0030ee161461096d576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b600080546001600160a01b0319169055565b6002546001600160a01b031681565b610996610f56565b6109e0576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b60006109ea610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2257600080fd5b505afa158015610a36573d6000803e3d6000fd5b505050506040513d6020811015610a4c57600080fd5b50516001600160a01b03161415610a9a576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f0000000000000000000000000434fa25152dbd34a906a192b6ca5b4a8e0030ee1614610b0d576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b6001600160a01b038116610b68576040805162461bcd60e51b815260206004820152601960248201527f30783020697320616e20696e76616c6964206164647265737300000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4780610b965750610c40565b6000610ba0610f85565b6040516001600160a01b0391909116908390600081818185875af1925050503d8060008114610beb576040519150601f19603f3d011682016040523d82523d6000602084013e610bf0565b606091505b5050905080610c3d576040805162461bcd60e51b8152602060048201526014602482015273086deead8c840dcdee840cec2e8d0cae4408aa8960631b604482015290519081900360640190fd5b50505b565b6000546001600160a01b031681565b610c59610f56565b610ca3576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b6000610cad610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ce557600080fd5b505afa158015610cf9573d6000803e3d6000fd5b505050506040513d6020811015610d0f57600080fd5b50516001600160a01b03161415610d5d576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f0000000000000000000000000434fa25152dbd34a906a192b6ca5b4a8e0030ee1614610dd0576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b6001600160a01b0381161580610df35750610df3816001600160a01b0316611080565b610e44576040805162461bcd60e51b815260206004820152601f60248201527f696d706c656d656e746174696f6e206d75737420626520636f6e747261637400604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000520000000000000000000000000000000000002881565b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610ed457600080fd5b505afa158015610ee8573d6000803e3d6000fd5b505050506040513d6020811015610efe57600080fd5b5051905080610f0d5750610f2f565b610c3d610f18610f85565b6001600160a01b038416908363ffffffff61108616565b50565b7f0000000000000000000000000434fa25152dbd34a906a192b6ca5b4a8e0030ee81565b7f00000000000000000000000052000000000000000000000000000000000000286001600160a01b0316301490565b600080610f90610581565b90506000816001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fcd57600080fd5b505afa158015610fe1573d6000803e3d6000fd5b505050506040513d6020811015610ff757600080fd5b5051905060006001600160a01b038216156110125781611078565b826001600160a01b031663fc6f94686040518163ffffffff1660e01b815260040160206040518083038186803b15801561104b57600080fd5b505afa15801561105f573d6000803e3d6000fd5b505050506040513d602081101561107557600080fd5b50515b935050505090565b3b151590565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526110d89084906110dd565b505050565b6060611132826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661118e9092919063ffffffff16565b8051909150156110d85780806020019051602081101561115157600080fd5b50516110d85760405162461bcd60e51b815260040180806020018281038252602a815260200180611351602a913960400191505060405180910390fd5b606061119d84846000856111a5565b949350505050565b60606111b085611080565b611201576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106112405780518252601f199092019160209182019101611221565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146112a2576040519150601f19603f3d011682016040523d82523d6000602084013e6112a7565b606091505b509150915081156112bb57915061119d9050565b8051156112cb5780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156113155781810151838201526020016112fd565b50505050905090810190601f1680156113425780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220186bde0d9b36823fed4f13c80a6d371e15ae371d5d8c928dcf853bd9560c276c64736f6c634300060b0033"), + storage: storage{ + // address payable public coldAddress + "0x00": "0x0000000000000000000000006f83f131b8c3f29f24fd146c6b75bce0844dc6d3", + // uint256 public minimumInput + "0x01": "0x000000000000000000000000000000000000000000000000002386f26fc10000", + }, + }, + { + contract: bitbankProxyFactoryYokohama, + // commit: + // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/contracts/bitbank/ProxyFactory.sol + // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/outputs/bitbank.json#L50 + code: mustDecodeCode("0x608060405234801561001057600080fd5b50600436106100365760003560e01c80630cdd42341461003b578063d508e6231461005f575b600080fd5b61004361007c565b604080516001600160a01b039092168252519081900360200190f35b6100436004803603602081101561007557600080fd5b50356100a0565b7f000000000000000000000000520000000000000000000000000000000000002881565b600060606040518060800160405280604a815260200161010d604a91396020810180517f0000000000000000000000005200000000000000000000000000000000000028600881901b909117825291925084604a826000f59350508261010557600080fd5b505091905056fe604080600a3d393df3fe7300000000000000000000000000000000000000003d366025573d3d3d3d34865af16031565b363d3d373d3d363d855af45b3d82803e603c573d81fd5b3d81f3a264697066735822122084aed37c49a27a5f93f4288da7680e1280b7fb0971d6731dcb31a3c61010490464736f6c634300060b0033"), + }, + { + contract: bitbankExchangeDepositDev, + // commit: + // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/contracts/bitbank/ExchangeDeposit.sol + // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/outputs/bitbank.json#L57-L61 + code: mustDecodeCode("0x6080604052600436106100a05760003560e01c806388bc06731161006457806388bc0673146104c7578063ab413f1c146104dc578063cb56d18e146104f1578063d4dca69b14610524578063dca67d7b14610539578063fc6f94681461056c5761021d565b80632663d52d146103fb5780632ffdb1c51461042757806341c0e1b51461044e5780635c60da1b146104635780636296aa3f146104945761021d565b3661021d576000546001600160a01b03166100f2576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b60015434101561013c576040805162461bcd60e51b815260206004820152601060248201526f105b5bdd5b9d081d1bdbc81cdb585b1b60821b604482015290519081900360640190fd5b600080546040516001600160a01b039091169034908381818185875af1925050503d8060008114610189576040519150601f19603f3d011682016040523d82523d6000602084013e61018e565b606091505b50509050806101e4576040805162461bcd60e51b815260206004820152601760248201527f466f7277617264696e672066756e6473206661696c6564000000000000000000604482015290519081900360640190fd5b60408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a250005b6000610227610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561025f57600080fd5b505afa158015610273573d6000803e3d6000fd5b505050506040513d602081101561028957600080fd5b50516001600160a01b031614156102d7576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b60006102e16105bc565b90506001600160a01b03811661033e576040805162461bcd60e51b815260206004820152601960248201527f46616c6c6261636b20636f6e7472616374206e6f742073657400000000000000604482015290519081900360640190fd5b6000816001600160a01b03166000366040518083838082843760405192019450600093509091505080830381855af49150503d806000811461039c576040519150601f19603f3d011682016040523d82523d6000602084013e6103a1565b606091505b50509050806103f7576040805162461bcd60e51b815260206004820152601860248201527f46616c6c6261636b20636f6e7472616374206661696c65640000000000000000604482015290519081900360640190fd5b5050005b34801561040757600080fd5b506104256004803603602081101561041e57600080fd5b5035610664565b005b34801561043357600080fd5b5061043c6107e8565b60408051918252519081900360200190f35b34801561045a57600080fd5b506104256107ee565b34801561046f57600080fd5b5061047861097f565b604080516001600160a01b039092168252519081900360200190f35b3480156104a057600080fd5b50610425600480360360208110156104b757600080fd5b50356001600160a01b031661098e565b3480156104d357600080fd5b50610425610b8a565b3480156104e857600080fd5b50610478610c42565b3480156104fd57600080fd5b506104256004803603602081101561051457600080fd5b50356001600160a01b0316610c51565b34801561053057600080fd5b50610478610e66565b34801561054557600080fd5b506104256004803603602081101561055c57600080fd5b50356001600160a01b0316610e8a565b34801561057857600080fd5b50610478610f32565b600061058b610f56565b6105b5577f000000000000000000000000520000000000000000000000000000000000002a6105b7565b305b905090565b60006105c6610f56565b610654577f000000000000000000000000520000000000000000000000000000000000002a6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561062357600080fd5b505afa158015610637573d6000803e3d6000fd5b505050506040513d602081101561064d57600080fd5b50516105b7565b506002546001600160a01b031690565b61066c610f56565b6106b6576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b60006106c0610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106f857600080fd5b505afa15801561070c573d6000803e3d6000fd5b505050506040513d602081101561072257600080fd5b50516001600160a01b03161415610770576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000fb0a2b538bd0c86db72f3b18cf1cec634df2dade16146107e3576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b600155565b60015481565b6107f6610f56565b610840576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b600061084a610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561088257600080fd5b505afa158015610896573d6000803e3d6000fd5b505050506040513d60208110156108ac57600080fd5b50516001600160a01b031614156108fa576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000fb0a2b538bd0c86db72f3b18cf1cec634df2dade161461096d576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b600080546001600160a01b0319169055565b6002546001600160a01b031681565b610996610f56565b6109e0576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b60006109ea610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2257600080fd5b505afa158015610a36573d6000803e3d6000fd5b505050506040513d6020811015610a4c57600080fd5b50516001600160a01b03161415610a9a576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000fb0a2b538bd0c86db72f3b18cf1cec634df2dade1614610b0d576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b6001600160a01b038116610b68576040805162461bcd60e51b815260206004820152601960248201527f30783020697320616e20696e76616c6964206164647265737300000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4780610b965750610c40565b6000610ba0610f85565b6040516001600160a01b0391909116908390600081818185875af1925050503d8060008114610beb576040519150601f19603f3d011682016040523d82523d6000602084013e610bf0565b606091505b5050905080610c3d576040805162461bcd60e51b8152602060048201526014602482015273086deead8c840dcdee840cec2e8d0cae4408aa8960631b604482015290519081900360640190fd5b50505b565b6000546001600160a01b031681565b610c59610f56565b610ca3576040805162461bcd60e51b815260206004820152601660248201527510d85b1b1a5b99c815dc9bdb99c810dbdb9d1c9858dd60521b604482015290519081900360640190fd5b6000610cad610581565b6001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ce557600080fd5b505afa158015610cf9573d6000803e3d6000fd5b505050506040513d6020811015610d0f57600080fd5b50516001600160a01b03161415610d5d576040805162461bcd60e51b815260206004820152600d60248201526c09240c2da40c8cac2c840745a5609b1b604482015290519081900360640190fd5b336001600160a01b037f000000000000000000000000fb0a2b538bd0c86db72f3b18cf1cec634df2dade1614610dd0576040805162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b604482015290519081900360640190fd5b6001600160a01b0381161580610df35750610df3816001600160a01b0316611080565b610e44576040805162461bcd60e51b815260206004820152601f60248201527f696d706c656d656e746174696f6e206d75737420626520636f6e747261637400604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000520000000000000000000000000000000000002a81565b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610ed457600080fd5b505afa158015610ee8573d6000803e3d6000fd5b505050506040513d6020811015610efe57600080fd5b5051905080610f0d5750610f2f565b610c3d610f18610f85565b6001600160a01b038416908363ffffffff61108616565b50565b7f000000000000000000000000fb0a2b538bd0c86db72f3b18cf1cec634df2dade81565b7f000000000000000000000000520000000000000000000000000000000000002a6001600160a01b0316301490565b600080610f90610581565b90506000816001600160a01b031663ab413f1c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fcd57600080fd5b505afa158015610fe1573d6000803e3d6000fd5b505050506040513d6020811015610ff757600080fd5b5051905060006001600160a01b038216156110125781611078565b826001600160a01b031663fc6f94686040518163ffffffff1660e01b815260040160206040518083038186803b15801561104b57600080fd5b505afa15801561105f573d6000803e3d6000fd5b505050506040513d602081101561107557600080fd5b50515b935050505090565b3b151590565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526110d89084906110dd565b505050565b6060611132826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661118e9092919063ffffffff16565b8051909150156110d85780806020019051602081101561115157600080fd5b50516110d85760405162461bcd60e51b815260040180806020018281038252602a815260200180611351602a913960400191505060405180910390fd5b606061119d84846000856111a5565b949350505050565b60606111b085611080565b611201576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106112405780518252601f199092019160209182019101611221565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146112a2576040519150601f19603f3d011682016040523d82523d6000602084013e6112a7565b606091505b509150915081156112bb57915061119d9050565b8051156112cb5780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156113155781810151838201526020016112fd565b50505050905090810190601f1680156113425780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220186bde0d9b36823fed4f13c80a6d371e15ae371d5d8c928dcf853bd9560c276c64736f6c634300060b0033"), + storage: storage{ + // address payable public coldAddress + "0x00": "0x000000000000000000000000ba7b3124bd11c738e22c2ee61f46cb2108d2356b", + // uint256 public minimumInput + "0x01": "0x000000000000000000000000000000000000000000000000002386f26fc10000", + }, + }, + { + contract: bitbankProxyFactoryDev, + // commit: + // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/contracts/bitbank/ProxyFactory.sol + // https://github.com/oasysgames/oasys-ecosystem-contract/blob/03d0739078c9c6a654a041d61b32a41393d1c1e5/outputs/bitbank.json#L67 + code: mustDecodeCode("0x608060405234801561001057600080fd5b50600436106100365760003560e01c80630cdd42341461003b578063d508e6231461005f575b600080fd5b61004361007c565b604080516001600160a01b039092168252519081900360200190f35b6100436004803603602081101561007557600080fd5b50356100a0565b7f000000000000000000000000520000000000000000000000000000000000002a81565b600060606040518060800160405280604a815260200161010d604a91396020810180517f000000000000000000000000520000000000000000000000000000000000002a600881901b909117825291925084604a826000f59350508261010557600080fd5b505091905056fe604080600a3d393df3fe7300000000000000000000000000000000000000003d366025573d3d3d3d34865af16031565b363d3d373d3d363d855af45b3d82803e603c573d81fd5b3d81f3a264697066735822122084aed37c49a27a5f93f4288da7680e1280b7fb0971d6731dcb31a3c61010490464736f6c634300060b0033"), + }, +} diff --git a/contracts/oasys/deployments9.go b/contracts/oasys/deployments9.go new file mode 100644 index 000000000..d6df875e8 --- /dev/null +++ b/contracts/oasys/deployments9.go @@ -0,0 +1,119 @@ +package oasys + +import ( + "math/big" + + "github.com/ethereum/go-ethereum/params" +) + +var deployments9 = []*deployment{ + { + // commit: https://github.com/oasysgames/oasys-optimism/blob/5186190c3250121179064b70d8e2fbd2d0a03ce3/packages/contracts/contracts/oasys/L1/build/L1BuildAgent.sol + contract: l1BuildAgent, + code: mustDecodeCode(`0x608060405234801561001057600080fd5b50600436106100df5760003560e01c806365c11a6c1161008c5780639f05c9ea116100665780639f05c9ea14610222578063a708ca6b14610242578063b61f370e14610255578063c86fc4c91461027557600080fd5b806365c11a6c146101cf57806366ed9d1b146101ef57806385c89dad1461020f57600080fd5b8063408d2693116100bd578063408d2693146101565780634dbbce2a1461018c57806364f57cb3146101ad57600080fd5b80630d5242f7146100e45780631ee5c97d1461012157806328f833b714610136575b600080fd5b6100f76100f23660046110e0565b610288565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013461012f3660046111e2565b6103b3565b005b6000546100f79073ffffffffffffffffffffffffffffffffffffffff1681565b6100f761016436600461121e565b60009081526005602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b61019f61019a36600461121e565b6107ce565b604051610118929190611288565b6101c06101bb366004611373565b61092b565b60405161011893929190611395565b6004546100f79073ffffffffffffffffffffffffffffffffffffffff1681565b6003546100f79073ffffffffffffffffffffffffffffffffffffffff1681565b61013461021d3660046113f5565b610add565b6001546100f79073ffffffffffffffffffffffffffffffffffffffff1681565b610134610250366004611453565b610c9c565b6002546100f79073ffffffffffffffffffffffffffffffffffffffff1681565b6101346102833660046114a0565b610dc6565b805160208083019190912060008481526006909252604082208054835b8181101561034557838382815481106102c0576102c061150d565b906000526020600020016040516102d79190611590565b604051809103902014156103335760008781526007602052604090208054829081106103055761030561150d565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1694506103ad9350505050565b8061033d81611692565b9150506102a5565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f7420666f756e64000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b92915050565b60008381526005602052604090205473ffffffffffffffffffffffffffffffffffffffff161561043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f616c7265616479206275696c740000000000000000000000000000000000000060448201526064016103a4565b6000546040517ff3701da200000000000000000000000000000000000000000000000000000000815233600482018190529173ffffffffffffffffffffffffffffffffffffffff169063f3701da290602401600060405180830381600087803b1580156104ab57600080fd5b505af11580156104bf573d6000803e3d6000fd5b50506001546040517f1ee5c97d0000000000000000000000000000000000000000000000000000000081526004810188905273ffffffffffffffffffffffffffffffffffffffff878116602483015286811660448301529091169250631ee5c97d9150606401600060405180830381600087803b15801561053f57600080fd5b505af1158015610553573d6000803e3d6000fd5b50506002546040517f7ef7cca20000000000000000000000000000000000000000000000000000000081526004810188905273ffffffffffffffffffffffffffffffffffffffff85811660248301529091169250637ef7cca29150604401600060405180830381600087803b1580156105cb57600080fd5b505af11580156105df573d6000803e3d6000fd5b50506003546040517f7ef7cca20000000000000000000000000000000000000000000000000000000081526004810188905273ffffffffffffffffffffffffffffffffffffffff85811660248301529091169250637ef7cca29150604401600060405180830381600087803b15801561065757600080fd5b505af115801561066b573d6000803e3d6000fd5b5050600480546040517f7ef7cca200000000000000000000000000000000000000000000000000000000815291820188905273ffffffffffffffffffffffffffffffffffffffff8581166024840152169250637ef7cca29150604401600060405180830381600087803b1580156106e157600080fd5b505af11580156106f5573d6000803e3d6000fd5b50506008805460018082019092557ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915560098054928301815560009081527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af9092018890556040518894509092507fd8406a18b0c7572d0adae5f0a479d5d802035e2c506e9353b092d25997f61a629190a350505050565b60008181526006602090815260408083206007835281842081548351818602810186019094528084526060958695939492938592919084015b828210156108b35783829060005260206000200180546108269061153c565b80601f01602080910402602001604051908101604052809291908181526020018280546108529061153c565b801561089f5780601f106108745761010080835404028352916020019161089f565b820191906000526020600020905b81548152906001019060200180831161088257829003601f168201915b505050505081526020019060010190610807565b5050505091508080548060200260200160405190810160405280929190818152602001828054801561091b57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116108f0575b5050505050905091509150915091565b60085460609081906000908061094186886116cb565b106109535761095086826116e3565b94505b60008567ffffffffffffffff81111561096e5761096e6110b1565b604051908082528060200260200182016040528015610997578160200160208202803683370190505b50905060008667ffffffffffffffff8111156109b5576109b56110b1565b6040519080825280602002602001820160405280156109de578160200160208202803683370190505b50905060005b87811015610ac05760086109f8828b6116cb565b81548110610a0857610a0861150d565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838281518110610a4557610a4561150d565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526009610a76828b6116cb565b81548110610a8657610a8661150d565b9060005260206000200154828281518110610aa357610aa361150d565b602090810291909101015280610ab881611692565b9150506109e4565b508181610acd898b6116cb565b9550955095505050509250925092565b60035473ffffffffffffffffffffffffffffffffffffffff163314610b5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f6f6e6c7920746865204c314275696c6453746570332063616e2063616c6c000060448201526064016103a4565b610b9e856040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000081525086610f7f565b610bc18560405180606001604052806021815260200161171c6021913985610f7f565b610c01856040518060400160405280601b81526020017f50726f78795f5f4f564d5f4c315374616e64617264427269646765000000000081525084610f7f565b610c41856040518060400160405280601981526020017f50726f78795f5f4f564d5f4c314552433732314272696467650000000000000081525083610f7f565b610c95856040518060400160405280601681526020017f4c3243726f7373446f6d61696e4d657373656e67657200000000000000000000815250734200000000000000000000000000000000000007610f7f565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff163314610d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f6f6e6c7920746865204c314275696c6453746570322063616e2063616c6c000060448201526064016103a4565b610d5d846040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e00000000000000000000000081525085610f7f565b610d80846040518060600160405280602181526020016116fb6021913984610f7f565b610dc0846040518060400160405280600b81526020017f426f6e644d616e6167657200000000000000000000000000000000000000000081525083610f7f565b50505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610e47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f6f6e6c7920746865204c314275696c6453746570312063616e2063616c6c000060448201526064016103a4565b60008681526005602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790558151808301909252600d82527f4f564d5f53657175656e6365720000000000000000000000000000000000000090820152610ed490879086610f7f565b610f14866040518060400160405280600c81526020017f4f564d5f50726f706f736572000000000000000000000000000000000000000081525085610f7f565b610f54866040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e0000000000000081525084610f7f565b610f778660405180606001604052806021815260200161173d6021913983610f7f565b505050505050565b600083815260066020908152604082208054600181018255908352918190208451610fb1939190910191850190611018565b50600092835260076020908152604084208054600181018255908552932090920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915550565b8280546110249061153c565b90600052602060002090601f016020900481019282611046576000855561108c565b82601f1061105f57805160ff191683800117855561108c565b8280016001018555821561108c579182015b8281111561108c578251825591602001919060010190611071565b5061109892915061109c565b5090565b5b80821115611098576000815560010161109d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156110f357600080fd5b82359150602083013567ffffffffffffffff8082111561111257600080fd5b818501915085601f83011261112657600080fd5b813581811115611138576111386110b1565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561117e5761117e6110b1565b8160405282815288602084870101111561119757600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111dd57600080fd5b919050565b6000806000606084860312156111f757600080fd5b83359250611207602085016111b9565b9150611215604085016111b9565b90509250925092565b60006020828403121561123057600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561127d57815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161124b565b509495945050505050565b6000604082016040835280855180835260608501915060608160051b860101925060208088016000805b84811015611353577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089880301865282518051808952835b81811015611305578281018701518a820188015286016112ea565b81811115611315578487838c0101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016979097018401965094830194918301916001016112b2565b5050508584038187015250505061136a8185611237565b95945050505050565b6000806040838503121561138657600080fd5b50508035926020909101359150565b6060815260006113a86060830186611237565b82810360208481019190915285518083528682019282019060005b818110156113df578451835293830193918301916001016113c3565b5050809350505050826040830152949350505050565b600080600080600060a0868803121561140d57600080fd5b8535945061141d602087016111b9565b935061142b604087016111b9565b9250611439606087016111b9565b9150611447608087016111b9565b90509295509295909350565b6000806000806080858703121561146957600080fd5b84359350611479602086016111b9565b9250611487604086016111b9565b9150611495606086016111b9565b905092959194509250565b60008060008060008060c087890312156114b957600080fd5b863595506114c9602088016111b9565b94506114d7604088016111b9565b93506114e5606088016111b9565b92506114f3608088016111b9565b915061150160a088016111b9565b90509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600181811c9082168061155057607f821691505b6020821081141561158a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080835481600182811c9150808316806115ac57607f831692505b60208084108214156115e5577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b8180156115f9576001811461162857611655565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650611655565b60008a81526020902060005b8681101561164d5781548b820152908501908301611634565b505084890196505b509498975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156116c4576116c4611663565b5060010190565b600082198211156116de576116de611663565b500190565b6000828210156116f5576116f5611663565b50039056fe436861696e53746f72616765436f6e7461696e65722d5343432d6261746368657350726f78795f5f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572436861696e53746f72616765436f6e7461696e65722d4354432d62617463686573a2646970667358221220c70f07fcb4927676b1a2cfebe530cc3e52ee51485f36a55a2a0c016a958a4cfe64736f6c63430008090033`), + }, + { + contract: l1BuildParam, + storage: storage{ + // bytes public l1ERC721BridgeCode, commit: https://github.com/oasysgames/oasys-optimism/blob/5186190c3250121179064b70d8e2fbd2d0a03ce3/packages/contracts/contracts/oasys/L1/messaging/L1ERC721BridgeV2.sol + "0x06": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80635d93a3fc1161005b5780635d93a3fc146100f45780638f45e47714610138578063c1bcfa4f1461014b578063dbfc9c3f1461015e57600080fd5b806330389967146100825780633cb747bf14610097578063485cc955146100e1575b600080fd5b610095610090366004610b04565b61017e565b005b6000546100b79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100956100ef366004610b87565b610204565b610128610102366004610bc0565b600260209081526000938452604080852082529284528284209052825290205460ff1681565b60405190151581526020016100d8565b610095610146366004610c01565b6102d7565b610095610159366004610c99565b610727565b6001546100b79073ffffffffffffffffffffffffffffffffffffffff1681565b333b156101ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4163636f756e74206e6f7420454f41000000000000000000000000000000000060448201526064015b60405180910390fd5b6101fc8686333388888888610740565b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1615610284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e697469616c697a65206f6e6c79206f6e636500000000000000000000000060448201526064016101e3565b6000805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560018054929093169116179055565b60015473ffffffffffffffffffffffffffffffffffffffff1661030f60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e7469636174656400000000000000000000000000000000000060648201526084016101e3565b8073ffffffffffffffffffffffffffffffffffffffff166103ff60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b815260040160206040518083038186803b15801561044457600080fd5b505afa158015610458573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047c9190610d10565b73ffffffffffffffffffffffffffffffffffffffff161461051f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d6573736167650000000000000000000000000000000060648201526084016101e3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b1683529281528282208783529052205460ff166105c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4e6f74206465706f73697465640000000000000000000000000000000000000060448201526064016101e3565b73ffffffffffffffffffffffffffffffffffffffff88811660008181526002602090815260408083208c8616845282528083208984529091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f23b872dd000000000000000000000000000000000000000000000000000000008152306004820152918716602483015260448201869052906323b872dd90606401600060405180830381600087803b15801561068357600080fd5b505af1158015610697573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f7fb3671da6a9a3c4b54a15e06575a4fa57d6264ad848930a6ea490e03e7514c1888888886040516107159493929190610d7d565b60405180910390a45050505050505050565b6107378787338888888888610740565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b1683529281528282208783529052205460ff16156107e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f416c7265616479206465706f736974656400000000000000000000000000000060448201526064016101e3565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152306024830152604482018690528916906323b872dd90606401600060405180830381600087803b15801561085b57600080fd5b505af115801561086f573d6000803e3d6000fd5b50505050600063662a633a60e01b8989898989888860405160240161089a9796959493929190610dbd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260015490915061093e9073ffffffffffffffffffffffffffffffffffffffff1685836109f5565b73ffffffffffffffffffffffffffffffffffffffff808a1660008181526002602090815260408083208d86168085529083528184208b85529092529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559051928a16929091907fd660bea642cb3af692ff947912f15e82ec86ad0796523ba971c5f369a6f989c5906109e2908b908b908a908a90610d7d565b60405180910390a4505050505050505050565b6000546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b90610a4f90869085908790600401610e1a565b600060405180830381600087803b158015610a6957600080fd5b505af1158015610737573d6000803e3d6000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114610a9f57600080fd5b50565b803563ffffffff81168114610ab657600080fd5b919050565b60008083601f840112610acd57600080fd5b50813567ffffffffffffffff811115610ae557600080fd5b602083019150836020828501011115610afd57600080fd5b9250929050565b60008060008060008060a08789031215610b1d57600080fd5b8635610b2881610a7d565b95506020870135610b3881610a7d565b945060408701359350610b4d60608801610aa2565b9250608087013567ffffffffffffffff811115610b6957600080fd5b610b7589828a01610abb565b979a9699509497509295939492505050565b60008060408385031215610b9a57600080fd5b8235610ba581610a7d565b91506020830135610bb581610a7d565b809150509250929050565b600080600060608486031215610bd557600080fd5b8335610be081610a7d565b92506020840135610bf081610a7d565b929592945050506040919091013590565b600080600080600080600060c0888a031215610c1c57600080fd5b8735610c2781610a7d565b96506020880135610c3781610a7d565b95506040880135610c4781610a7d565b94506060880135610c5781610a7d565b93506080880135925060a088013567ffffffffffffffff811115610c7a57600080fd5b610c868a828b01610abb565b989b979a50959850939692959293505050565b600080600080600080600060c0888a031215610cb457600080fd5b8735610cbf81610a7d565b96506020880135610ccf81610a7d565b95506040880135610cdf81610a7d565b945060608801359350610cf460808901610aa2565b925060a088013567ffffffffffffffff811115610c7a57600080fd5b600060208284031215610d2257600080fd5b8151610d2d81610a7d565b9392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000610db3606083018486610d34565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a0830152610e0d60c083018486610d34565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815260006020606081840152845180606085015260005b81811015610e6457868101830151858201608001528201610e48565b81811115610e76576000608083870101525b5063ffffffff9490941660408401525050601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016016080019291505056fea26469706673582212206c2b77a3fea5aa85a79d440bfa071416f63f3deba4bc3abec3d3ca8768451e0164736f6c63430008090033", + }, + }, + { + // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/c40adc981d07ccedd2cf2d3932ea9503761f6191/contracts/lib/AddressList.sol + contract: candidateValidatorManagerHighStakes, + code: mustDecodeCode(`0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806345788ce21161007157806345788ce21461016357806350fd73671461018e578063715018a6146101af5780638da5cb5b146101b9578063ab73e316146101ca578063f2fde38b146101dd57600080fd5b80630a3b0a4f146100b95780631907ebde146100e15780631f7b6d321461010157806321887c3d14610112578063225e25251461013d57806329092d0e14610150575b600080fd5b6100cc6100c7366004610975565b6101f0565b60405190151581526020015b60405180910390f35b6100f46100ef36600461099e565b610233565b6040516100d89190610a13565b6002546040519081526020016100d8565b6100cc610120366004610975565b6001600160a01b0316600090815260016020526040902054151590565b6100f461014b36600461099e565b61031c565b6100cc61015e366004610975565b6103fd565b610176610171366004610975565b610431565b6040516001600160a01b0390911681526020016100d8565b6101a161019c366004610a59565b610493565b6040516100d8929190610a7b565b6101b7610594565b005b6000546001600160a01b0316610176565b6101766101d8366004610975565b6105ca565b6101b76101eb366004610975565b610614565b600080546001600160a01b031633146102245760405162461bcd60e51b815260040161021b90610acc565b60405180910390fd5b61022d826106af565b92915050565b6000546060906001600160a01b031633146102605760405162461bcd60e51b815260040161021b90610acc565b818067ffffffffffffffff81111561027a5761027a610b01565b6040519080825280602002602001820160405280156102a3578160200160208202803683370190505b50915060005b81811015610314576102e08585838181106102c6576102c6610b17565b90506020020160208101906102db9190610975565b61078f565b8382815181106102f2576102f2610b17565b911515602092830291909101909101528061030c81610b43565b9150506102a9565b505092915050565b6000546060906001600160a01b031633146103495760405162461bcd60e51b815260040161021b90610acc565b818067ffffffffffffffff81111561036357610363610b01565b60405190808252806020026020018201604052801561038c578160200160208202803683370190505b50915060005b81811015610314576103c98585838181106103af576103af610b17565b90506020020160208101906103c49190610975565b6106af565b8382815181106103db576103db610b17565b91151560209283029190910190910152806103f581610b43565b915050610392565b600080546001600160a01b031633146104285760405162461bcd60e51b815260040161021b90610acc565b61022d8261078f565b6001600160a01b038116600090815260016020526040812054600281101561045a57600061048c565b60026104668183610b5e565b8154811061047657610476610b17565b6000918252602090912001546001600160a01b03165b9392505050565b600254606090600090806104a78587610b75565b106104b9576104b68582610b5e565b93505b6104c38486610b75565b91508367ffffffffffffffff8111156104de576104de610b01565b604051908082528060200260200182016040528015610507578160200160208202803683370190505b50925060005b8481101561058b5760026105218288610b75565b8154811061053157610531610b17565b9060005260206000200160009054906101000a90046001600160a01b031684828151811061056157610561610b17565b6001600160a01b03909216602092830291909101909101528061058381610b43565b91505061050d565b50509250929050565b6000546001600160a01b031633146105be5760405162461bcd60e51b815260040161021b90610acc565b6105c86000610925565b565b6001600160a01b03811660009081526001602081905260408220549081108015906105f6575060025481105b61060157600061048c565b6002818154811061047657610476610b17565b6000546001600160a01b0316331461063e5760405162461bcd60e51b815260040161021b90610acc565b6001600160a01b0381166106a35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161021b565b6106ac81610925565b50565b60006001600160a01b0382166106d85760405163e99d5ac560e01b815260040160405180910390fd5b6001600160a01b03821660009081526001602052604090205480156107005750600092915050565b60028054600180820183557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180546001600160a01b0319166001600160a01b03871690811790915591546000838152602092909252604080832091909155517fdcfefddfe354ab15def7a2a6a8758e2ad4100c920318c627db94e29d833e15679190a250600192915050565b60006001600160a01b0382166107b85760405163e99d5ac560e01b815260040160405180910390fd5b6001600160a01b038216600090815260016020526040902054806107df5750600092915050565b6001600160a01b0383166000908152600160208190526040822082905560028054909161080b91610b5e565b8154811061081b5761081b610b17565b600091825260209091200154600280546001600160a01b039092169250908061084657610846610b8d565b600082815260209020810160001990810180546001600160a01b03191690550190556001600160a01b03818116908516146108e7576001600160a01b038116600090815260016020819052604090912083905581906002906108a89085610b5e565b815481106108b8576108b8610b17565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6040516001600160a01b038516907f066a905b79c0121afe61e3a44e0b14b6bc1ec16d854cdba09efdfc9b6aa9af8190600090a25060019392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561098757600080fd5b81356001600160a01b038116811461048c57600080fd5b600080602083850312156109b157600080fd5b823567ffffffffffffffff808211156109c957600080fd5b818501915085601f8301126109dd57600080fd5b8135818111156109ec57600080fd5b8660208260051b8501011115610a0157600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b81811015610a4d578351151583529284019291840191600101610a2f565b50909695505050505050565b60008060408385031215610a6c57600080fd5b50508035926020909101359150565b604080825283519082018190526000906020906060840190828701845b82811015610abd5781516001600160a01b031684529284019290840190600101610a98565b50505092019290925292915050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415610b5757610b57610b2d565b5060010190565b600082821015610b7057610b70610b2d565b500390565b60008219821115610b8857610b88610b2d565b500190565b634e487b7160e01b600052603160045260246000fdfea264697066735822122045cb0552c2bcaf2e2a3f729cc78f6fc14d52c75562ab8ee201df8fca2eaae61864736f6c634300080c0033`), + storage: storage{ + // address private _owner + "0x00": candidateValidatorManager.address, + // mapping(address => uint256) private _ids + "0x01": genesismap{ + params.OasysMainnetGenesisHash: mapping{ + keyFn: addressKeyFn, + values: map[string]interface{}{ + "0x86652fE437425AC63211C55b6b067B3181BBcB17": big.NewInt(1), + "0xa505014a84e8BdC4A620470A53EAd872b0c1CA5b": big.NewInt(2), + "0xF5100e233E0A5AF82e9C6f3DEdF6Ca2E45099eF8": big.NewInt(3), + "0x4e5E774D3837bd9302B83CAD94a112575411F07B": big.NewInt(4), + "0x3C8075380217Eb85d4109226406cACda4c3BdB75": big.NewInt(5), + "0x9b64BE0ec5a334968b37BbD687EaDbc757DA6875": big.NewInt(6), + "0x3d821c7399ea97dA12e55727A378B4F5eb0289F8": big.NewInt(7), + "0xAf76F079631Ca0f3C090A98A2987b8D232C26447": big.NewInt(8), + "0xD47620F7904686E1B61bC2b16AD4Ef333623C3A4": big.NewInt(9), + "0xeC21628Fd017bbB0c751CB14BCbC6b81EB437241": big.NewInt(10), + "0x324D14607bB6853Fb0E15a02C80D59045714520F": big.NewInt(11), + "0x5F6831BDA9d0483054EB50A48966d65D2b156C7b": big.NewInt(12), + "0x6e28e5AF24dA4Cb7Bd669332244271eDce95f747": big.NewInt(13), + "0x5Ed4f15045aCfDd0392a7A0706503ae1aA2B82dc": big.NewInt(14), + "0x5646b6E8a0856766f0ace6D008f6919ad42Df82c": big.NewInt(15), + "0x025e6bEc8c34dBb38120840610004e8968790b7e": big.NewInt(16), + "0xB441A6A51BF69366d903c072D3B5594Ca02Ff1e0": big.NewInt(17), + "0x362EE93C00D8Bffc1e0284116d7CC9513cdE959F": big.NewInt(18), + "0x272d6bd040c2B8454f4f6F43115758fBe318ee2c": big.NewInt(19), + "0x80e358CBB533F6c8d07d2dc5604a55aA925A95df": big.NewInt(20), + "0xFCB42091aCBEf803e333A1b5C7079A43b0CFDE59": big.NewInt(21), + "0xaAF5a641256131484D00ACC565D84683025f2444": big.NewInt(22), + "0x18050B80d427B373C96AB24B78996310C0733c13": big.NewInt(23), + "0x4e5963c92bFE4De6f319b0859B2Efcf95267E3Ae": big.NewInt(24), + }, + }, + params.OasysTestnetGenesisHash: mapping{ + keyFn: addressKeyFn, + values: map[string]interface{}{ + "0xF886672205399c186638abfA9Dc155dEe9CBBD2e": big.NewInt(1), + }, + }, + }, + // address[] private _addresses + "0x02": genesismap{ + params.OasysMainnetGenesisHash: array{ + values: map[int64]interface{}{ + 0: "0x86652fE437425AC63211C55b6b067B3181BBcB17", + 1: "0xa505014a84e8BdC4A620470A53EAd872b0c1CA5b", + 2: "0xF5100e233E0A5AF82e9C6f3DEdF6Ca2E45099eF8", + 3: "0x4e5E774D3837bd9302B83CAD94a112575411F07B", + 4: "0x3C8075380217Eb85d4109226406cACda4c3BdB75", + 5: "0x9b64BE0ec5a334968b37BbD687EaDbc757DA6875", + 6: "0x3d821c7399ea97dA12e55727A378B4F5eb0289F8", + 7: "0xAf76F079631Ca0f3C090A98A2987b8D232C26447", + 8: "0xD47620F7904686E1B61bC2b16AD4Ef333623C3A4", + 9: "0xeC21628Fd017bbB0c751CB14BCbC6b81EB437241", + 10: "0x324D14607bB6853Fb0E15a02C80D59045714520F", + 11: "0x5F6831BDA9d0483054EB50A48966d65D2b156C7b", + 12: "0x6e28e5AF24dA4Cb7Bd669332244271eDce95f747", + 13: "0x5Ed4f15045aCfDd0392a7A0706503ae1aA2B82dc", + 14: "0x5646b6E8a0856766f0ace6D008f6919ad42Df82c", + 15: "0x025e6bEc8c34dBb38120840610004e8968790b7e", + 16: "0xB441A6A51BF69366d903c072D3B5594Ca02Ff1e0", + 17: "0x362EE93C00D8Bffc1e0284116d7CC9513cdE959F", + 18: "0x272d6bd040c2B8454f4f6F43115758fBe318ee2c", + 19: "0x80e358CBB533F6c8d07d2dc5604a55aA925A95df", + 20: "0xFCB42091aCBEf803e333A1b5C7079A43b0CFDE59", + 21: "0xaAF5a641256131484D00ACC565D84683025f2444", + 22: "0x18050B80d427B373C96AB24B78996310C0733c13", + 23: "0x4e5963c92bFE4De6f319b0859B2Efcf95267E3Ae", + }, + }, + params.OasysTestnetGenesisHash: array{ + values: map[int64]interface{}{ + 0: "0xF886672205399c186638abfA9Dc155dEe9CBBD2e", + }, + }, + }, + }, + }, + { + // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/c40adc981d07ccedd2cf2d3932ea9503761f6191/contracts/CandidateValidatorManager.sol + contract: candidateValidatorManager, + code: mustDecodeCode(`0x608060405234801561001057600080fd5b50600436106100625760003560e01c80630c53b46c1461006757806321b81652146100ab5780632d73a02f146100d157806374e2b63c146100e45780637542ff951461010b578063ad24c33a14610132575b600080fd5b61008e7f000000000000000000000000520000000000000000000000000000000000002d81565b6040516001600160a01b0390911681526020015b60405180910390f35b6100be6100b9366004610ce8565b610147565b6040516100a29796959493929190610d8a565b6100be6100df366004610ce8565b6102ae565b61008e7f000000000000000000000000000000000000000000000000000000000000100081565b61008e7f000000000000000000000000000000000000000000000000000000000000100181565b610145610140366004610e4d565b610395565b005b60608060608060608060007f00000000000000000000000000000000000000000000000000000000000010006001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d49190610e71565b8a10156101f457604051630eae4c9760e01b815260040160405180910390fd5b6040516350fd736760e01b8152600481018a9052602481018990527f000000000000000000000000520000000000000000000000000000000000002d6001600160a01b0316906350fd7367906044015b600060405180830381865afa158015610261573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102899190810190610efb565b9097509050610298878b610411565b9a9e939d50919b50995097965090945092505050565b60608080808080600089610341577f00000000000000000000000000000000000000000000000000000000000010006001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561031a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033e9190610e71565b99505b60405163085a3a2d60e21b8152600481018a9052602481018990527f00000000000000000000000000000000000000000000000000000000000010016001600160a01b031690632168e8b490604401610244565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000100116146103de57604051630101292160e31b815260040160405180910390fd5b6001600160a01b0381166104055760405163e99d5ac560e01b815260040160405180910390fd5b61040e81610700565b50565b60608060608060606000875190508067ffffffffffffffff81111561043857610438610e8a565b604051908082528060200260200182016040528015610461578160200160208202803683370190505b5095508067ffffffffffffffff81111561047d5761047d610e8a565b6040519080825280602002602001820160405280156104a6578160200160208202803683370190505b5094508067ffffffffffffffff8111156104c2576104c2610e8a565b6040519080825280602002602001820160405280156104eb578160200160208202803683370190505b5093508067ffffffffffffffff81111561050757610507610e8a565b604051908082528060200260200182016040528015610530578160200160208202803683370190505b5092508067ffffffffffffffff81111561054c5761054c610e8a565b604051908082528060200260200182016040528015610575578160200160208202803683370190505b50915060005b818110156106f4577f00000000000000000000000000000000000000000000000000000000000010016001600160a01b031663d1f18ee18a83815181106105c4576105c4610fb5565b60200260200101518a6040518363ffffffff1660e01b81526004016105fe9291906001600160a01b03929092168252602082015260400190565b60a060405180830381865afa15801561061b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063f9190610fe0565b8b868151811061065157610651610fb5565b602002602001018b878151811061066a5761066a610fb5565b602002602001018b888151811061068357610683610fb5565b602002602001018a898151811061069c5761069c610fb5565b602002602001018c8a815181106106b5576106b5610fb5565b60209081029190910101949094529315159092529215159091529115159091526001600160a01b039091169052806106ec81611056565b91505061057b565b50509295509295909350565b60007f00000000000000000000000000000000000000000000000000000000000010006001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610760573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107849190610e71565b90506000610793826001611071565b60405163fcbb371b60e01b8152600481018490529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000001000169063fcbb371b9060240161012060405180830381865afa1580156107ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108239190611089565b60c0015160405163fcbb371b60e01b8152600481018490529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000001000169063fcbb371b9060240161012060405180830381865afa158015610893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b79190611089565b60c00151604080516060810182526001600160a01b0380891680835292516322bc467160e11b81526004810193909352929350600092909160208301917f000000000000000000000000520000000000000000000000000000000000002d16906345788ce290602401602060405180830381865afa15801561093d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109619190611104565b6001600160a01b0390811682526040516355b9f18b60e11b815289821660048201526020909201917f000000000000000000000000520000000000000000000000000000000000002d9091169063ab73e31690602401602060405180830381865afa1580156109d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f89190611104565b6001600160a01b03169052905060005b60038160ff161015610cdf576000828260ff1660038110610a2b57610a2b610fb5565b602002015190506001600160a01b038116610a465750610ccd565b604051632ee462b360e01b81526001600160a01b0382811660048301526024820189905260009187917f00000000000000000000000000000000000000000000000000000000000010011690632ee462b390604401602060405180830381865afa158015610ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adc9190610e71565b101590506000857f00000000000000000000000000000000000000000000000000000000000010016001600160a01b0316632ee462b3858b6040518363ffffffff1660e01b8152600401610b459291906001600160a01b03929092168252602082015260400190565b602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b869190610e71565b101590508180610b935750805b15610c2a57604051630a3b0a4f60e01b81526001600160a01b0384811660048301527f000000000000000000000000520000000000000000000000000000000000002d1690630a3b0a4f906024016020604051808303816000875af1158015610c00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c249190611121565b50610cc9565b81158015610c36575080155b15610cc957604051631484968760e11b81526001600160a01b0384811660048301527f000000000000000000000000520000000000000000000000000000000000002d16906329092d0e906024016020604051808303816000875af1158015610ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc79190611121565b505b5050505b80610cd78161113c565b915050610a08565b50505050505050565b600080600060608486031215610cfd57600080fd5b505081359360208301359350604090920135919050565b600081518084526020808501945080840160005b83811015610d4d5781516001600160a01b031687529582019590820190600101610d28565b509495945050505050565b600081518084526020808501945080840160005b83811015610d4d578151151587529582019590820190600101610d6c565b60e081526000610d9d60e083018a610d14565b602083820381850152610db0828b610d14565b91508382036040850152610dc4828a610d58565b91508382036060850152610dd88289610d58565b8481036080860152875180825282890193509082019060005b81811015610e0d57845183529383019391830191600101610df1565b505084810360a0860152610e218188610d58565b93505050508260c083015298975050505050505050565b6001600160a01b038116811461040e57600080fd5b600060208284031215610e5f57600080fd5b8135610e6a81610e38565b9392505050565b600060208284031215610e8357600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715610ec457610ec4610e8a565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610ef357610ef3610e8a565b604052919050565b60008060408385031215610f0e57600080fd5b825167ffffffffffffffff80821115610f2657600080fd5b818501915085601f830112610f3a57600080fd5b8151602082821115610f4e57610f4e610e8a565b8160051b9250610f5f818401610eca565b8281529284018101928181019089851115610f7957600080fd5b948201945b84861015610fa35785519350610f9384610e38565b8382529482019490820190610f7e565b97909101519698969750505050505050565b634e487b7160e01b600052603260045260246000fd5b80518015158114610fdb57600080fd5b919050565b600080600080600060a08688031215610ff857600080fd5b855161100381610e38565b945061101160208701610fcb565b935061101f60408701610fcb565b925061102d60608701610fcb565b9150608086015190509295509295909350565b634e487b7160e01b600052601160045260246000fd5b600060001982141561106a5761106a611040565b5060010190565b6000821982111561108457611084611040565b500190565b6000610120828403121561109c57600080fd5b6110a4610ea0565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b60006020828403121561111657600080fd5b8151610e6a81610e38565b60006020828403121561113357600080fd5b610e6a82610fcb565b600060ff821660ff81141561115357611153611040565b6001019291505056fea264697066735822122082a01584713028389853236ce27242ae2ad212676d5e675565ce1b9469a72f2f64736f6c634300080c0033`), + }, + { + // commit: https://github.com/oasysgames/oasys-genesis-contract/blob/c40adc981d07ccedd2cf2d3932ea9503761f6191/contracts/StakeManager.sol + contract: stakeManager, + code: mustDecodeCode(`0x6080604052600436106102675760003560e01c806374e2b63c11610144578063cf5c13db116100b6578063e1aca3411161007a578063e1aca34114610850578063f3621e4314610870578063f65a5ed214610890578063f8d6b1ab146108b0578063fa52c7d8146108d0578063ff3d3f601461093f57600080fd5b8063cf5c13db1461074e578063d0051adf1461076e578063d1f18ee11461079f578063dbd61d87146107f7578063df93c8421461081757600080fd5b80639168ae72116101085780639168ae72146106785780639c508219146106ae578063a6a41f44146106ce578063ac7475ed146106ee578063ad71bd361461070e578063cbc0fac61461072e57600080fd5b806374e2b63c146105c75780637b520aa8146105ec5780637befa74f1461062257806388325234146106355780639043150b1461067057600080fd5b80632ee462b3116101dd578063485cc955116101a1578063485cc955146104e65780635c4fc4c5146105065780635d94ccf6146105365780635efc766e146105565780636b2b336914610576578063724319911461059657600080fd5b80632ee462b31461043757806333f32d7814610457578063428e85621461047757806345367f231461049757806346dfce7b146104b757600080fd5b8063195afea11161022f578063195afea11461032b5780631c1b4f3a1461034b5780632168e8b41461036b57806322226367146103995780632b42ed8c146103ce5780632b47da52146103ff57600080fd5b806302fb4d851461026c5780630ddda63c1461028e578063158ef93e146102ae5780631903cf16146102dd578063190b9257146102fd575b600080fd5b34801561027857600080fd5b5061028c610287366004614cb3565b61095f565b005b34801561029a57600080fd5b5061028c6102a9366004614cdf565b610b65565b3480156102ba57600080fd5b506000546102c89060ff1681565b60405190151581526020015b60405180910390f35b3480156102e957600080fd5b5061028c6102f8366004614d8a565b610d70565b34801561030957600080fd5b5061031d610318366004614cdf565b610f69565b6040519081526020016102d4565b34801561033757600080fd5b5061031d610346366004614cb3565b610f8a565b34801561035757600080fd5b5061031d610366366004614cdf565b610fc1565b34801561037757600080fd5b5061038b610386366004614e34565b610fd1565b6040516102d4929190614e9a565b3480156103a557600080fd5b506103b96103b4366004614cb3565b6110b7565b604080519283526020830191909152016102d4565b3480156103da57600080fd5b506103ee6103e9366004614ebc565b611185565b6040516102d4959493929190614f27565b34801561040b57600080fd5b5060015461041f906001600160a01b031681565b6040516001600160a01b0390911681526020016102d4565b34801561044357600080fd5b5061031d610452366004614cb3565b6114d2565b34801561046357600080fd5b5061031d610472366004614f87565b611585565b34801561048357600080fd5b5061028c610492366004614d8a565b611744565b3480156104a357600080fd5b5061031d6104b2366004614cdf565b61193d565b3480156104c357600080fd5b506104d76104d2366004614ebc565b6119d3565b6040516102d493929190615026565b3480156104f257600080fd5b5061028c61050136600461505c565b611c30565b34801561051257600080fd5b50610526610521366004614cb3565b611caf565b6040516102d494939291906150cd565b34801561054257600080fd5b5061028c610551366004614cdf565b611d7b565b34801561056257600080fd5b5061041f610571366004614cdf565b611e85565b34801561058257600080fd5b5061028c6105913660046150f8565b611eaf565b3480156105a257600080fd5b506105b66105b1366004615115565b611fa8565b6040516102d4959493929190615173565b3480156105d357600080fd5b5060005461041f9061010090046001600160a01b031681565b3480156105f857600080fd5b5061041f6106073660046150f8565b6006602052600090815260409020546001600160a01b031681565b61028c6106303660046151c0565b612048565b34801561064157600080fd5b506106556106503660046150f8565b612213565b604080519384526020840192909252908201526060016102d4565b61028c612293565b34801561068457600080fd5b5061041f6106933660046150f8565b6007602052600090815260409020546001600160a01b031681565b3480156106ba57600080fd5b5061031d6106c9366004614cb3565b6122c8565b3480156106da57600080fd5b5060095461041f906001600160a01b031681565b3480156106fa57600080fd5b5061028c6107093660046150f8565b6123a4565b34801561071a57600080fd5b5061038b610729366004614e34565b6124aa565b34801561073a57600080fd5b5061028c610749366004614cb3565b612588565b34801561075a57600080fd5b5061028c610769366004614cb3565b612630565b34801561077a57600080fd5b5061078e610789366004615205565b61282f565b6040516102d495949392919061523a565b3480156107ab57600080fd5b506107bf6107ba366004614cb3565b612ae7565b604080516001600160a01b0390961686529315156020860152911515928401929092529015156060830152608082015260a0016102d4565b34801561080357600080fd5b5061031d6108123660046152a3565b612c61565b34801561082357600080fd5b5061031d6108323660046150f8565b6001600160a01b031660009081526007602052604090206006015490565b34801561085c57600080fd5b5061028c61086b3660046151c0565b612ca7565b34801561087c57600080fd5b5061028c61088b3660046152a3565b612cc0565b34801561089c57600080fd5b5061041f6108ab366004614cdf565b612dcc565b3480156108bc57600080fd5b5061028c6108cb3660046150f8565b612ddc565b3480156108dc57600080fd5b506109196108eb3660046150f8565b6004602052600090815260409020805460018201546006909201546001600160a01b03918216929091169083565b604080516001600160a01b039485168152939092166020840152908201526060016102d4565b34801561094b57600080fd5b5061028c61095a3660046151c0565b612e3e565b6001600160a01b0380831660009081526006602090815260408083205484168084526004909252909120549091166109aa576040516372898ae960e11b815260040160405180910390fd5b3341146109ca57604051631cf4735960e01b815260040160405180910390fd5b6001600160a01b038084166000908152600660209081526040808320548416835260049182905280832083548251633fa4f24560e01b815292519195610add946101009092041692633fa4f2459281830192610120928290030181865afa158015610a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5d91906152d3565b600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad4919061534e565b8491908761317e565b82546040519192506001600160a01b0316907f1647efd0ce9727dc31dc201c9d8d35ac687f7370adcacbd454afc6485ddabfda90600090a28015610b5e5781546040518281526001600160a01b03909116907feb7d7a49847ec491969db21a0e31b234565a9923145a2d1b56a75c9e95825802906020015b60405180910390a25b5050505050565b336000818152600460205260409020546001600160a01b0316610b9b576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316610bd15760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c48919061537c565b15610c6657604051631e59ccd960e01b815260040160405180910390fd5b60008054338252600460205260408220610c8e9161010090046001600160a01b03168661325d565b905080610cae57604051637bc90c0560e11b815260040160405180910390fd5b610d323333600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a919061534e565b60008561327d565b604051818152339081907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba1043836906020015b60405180910390a350505050565b6001600160a01b03828116600090815260046020526040902080548492163314801590610daa575060018101546001600160a01b03163314155b15610dc857604051630101292160e31b815260040160405180910390fd5b6001600160a01b03808516600090815260046020526040902054859116610e02576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e79919061537c565b15610e9757604051631e59ccd960e01b815260040160405180910390fd5b610f30600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f11919061534e565b6001600160a01b03871660009081526004602052604090209086613392565b846001600160a01b03167fc11dfc9c24621433bb10587dc4bbae26a33a4aff53914e0d4c9fddf224a8cb7d85604051610b559190615397565b60028181548110610f7957600080fd5b600091825260209091200154905081565b600080546001600160a01b038481168352600460205260408320610fb792909161010090910416846133a4565b5090505b92915050565b60038181548110610f7957600080fd5b60606000610fe58484600580549050613537565b9093509050826001600160401b0381111561100257611002614cf8565b60405190808252806020026020018201604052801561102b578160200160208202803683370190505b50915060005b838110156110af57600561104582876153c0565b81548110611055576110556153d8565b9060005260206000200160009054906101000a90046001600160a01b0316838281518110611085576110856153d8565b6001600160a01b0390921660209283029190910190910152806110a7816153ee565b915050611031565b509250929050565b60008061117a6000841161114157600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113c919061534e565b611143565b835b6001600160a01b038616600090815260046020908152604080832093835260098401825280832054600a9094019091529020549091565b909590945092505050565b6001600160a01b03841660009081526007602052604081206060918291829182918861122757600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611222919061534e565b611229565b885b985061123b8888600580549050613537565b9097509150866001600160401b0381111561125857611258614cf8565b604051908082528060200260200182016040528015611281578160200160208202803683370190505b509550866001600160401b0381111561129c5761129c614cf8565b6040519080825280602002602001820160405280156112c5578160200160208202803683370190505b509450866001600160401b038111156112e0576112e0614cf8565b604051908082528060200260200182016040528015611309578160200160208202803683370190505b509350866001600160401b0381111561132457611324614cf8565b60405190808252806020026020018201604052801561134d578160200160208202803683370190505b50925060005b878110156114c5576005611367828b6153c0565b81548110611377576113776153d8565b9060005260206000200160009054906101000a90046001600160a01b03168782815181106113a7576113a76153d8565b60200260200101906001600160a01b031690816001600160a01b0316815250506113f88782815181106113dc576113dc6153d8565b602002602001015160008c8561356e909392919063ffffffff16565b86828151811061140a5761140a6153d8565b60200260200101818152505061144787828151811061142b5761142b6153d8565b602002602001015160018c8561356e909392919063ffffffff16565b858281518110611459576114596153d8565b60200260200101818152505061149687828151811061147a5761147a6153d8565b602002602001015160028c8561356e909392919063ffffffff16565b8482815181106114a8576114a86153d8565b6020908102919091010152806114bd816153ee565b915050611353565b5050945094509450945094565b600080821161155757600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561152e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611552919061534e565b611559565b815b6001600160a01b038416600090815260046020526040902090925061157e908361362d565b9392505050565b600080600183600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611602919061534e565b61160c9190615409565b6116169190615409565b845190915060005b8481101561173b576116316001846153c0565b6000805460405163fcbb371b60e01b81526004810184905292955090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015611685573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a991906152d3565b905060005b83811015611726576117088286600460008c86815181106116d1576116d16153d8565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206136409092919063ffffffff16565b61171290876153c0565b95508061171e816153ee565b9150506116ae565b50508080611733906153ee565b91505061161e565b50505092915050565b6001600160a01b0382811660009081526004602052604090208054849216331480159061177e575060018101546001600160a01b03163314155b1561179c57604051630101292160e31b815260040160405180910390fd5b6001600160a01b038085166000908152600460205260409020548591166117d6576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015611829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184d919061537c565b1561186b57604051631e59ccd960e01b815260040160405180910390fd5b611904600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e5919061534e565b6001600160a01b038716600090815260046020526040902090866137ad565b846001600160a01b03167f0ad9bf1b8c026a174a2f30954417002a6ea00c9b08c1b8846c7951c687be809585604051610b559190615397565b60008082116119c257600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bd919061534e565b6119c4565b815b9150610fbb60026003846137ba565b6001600160a01b0384166000908152600460205260408120606091829186611a7157600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6c919061534e565b611a73565b865b9650611a8786868360070180549050613537565b9095509150846001600160401b03811115611aa457611aa4614cf8565b604051908082528060200260200182016040528015611acd578160200160208202803683370190505b509350846001600160401b03811115611ae857611ae8614cf8565b604051908082528060200260200182016040528015611b11578160200160208202803683370190505b50925060005b85811015611c24576000600781848201611b31858c6153c0565b81548110611b4157611b416153d8565b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190208054885191935090911690879084908110611b8757611b876153d8565b6001600160a01b0392831660209182029290920101528354611bae9183911660028c61356e565b8354611bc79083906001600160a01b031660018d61356e565b8454611be09084906001600160a01b031660008e61356e565b611bea91906153c0565b611bf491906153c0565b858381518110611c0657611c066153d8565b60209081029190910101525080611c1c816153ee565b915050611b17565b50509450945094915050565b334114611c5057604051631cf4735960e01b815260040160405180910390fd5b60005460ff1615611c735760405162dc149f60e41b815260040160405180910390fd5b6000805460016001600160a81b03199091166101006001600160a01b039586160217811790915580546001600160a01b03191691909216179055565b6001600160a01b03821660009081526007602052604081206006018054829182918291829187908110611ce457611ce46153d8565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115611d1757611d17615095565b6002811115611d2857611d28615095565b81526020016001820154815260200160028201548152505090508060000151816020015182604001518360400151600014158015611d6a575083604001514210155b929a91995097509095509350505050565b336000818152600760205260409020546001600160a01b0316611db15760405163cf83d93d60e01b815260040160405180910390fd5b336000908152600760205260408120600601805484908110611dd557611dd56153d8565b9060005260206000209060030201905060008160020154905080421015611e0f576040516303cb96db60e21b815260040160405180910390fd5b80611e2d57604051630c8d9eab60e31b815260040160405180910390fd5b6000600283015560405184815233907fbf5f92dc2b945251eadf78c2ca629ae64053d979bfbc43a7b17a463707906bf99060200160405180910390a281546001830154611e7f9160ff169033906138d3565b50505050565b60058181548110611e9557600080fd5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b0381811660009081526006602052604090205433911615611eea5760405163055ee1f160e31b815260040160405180910390fd5b6001600160a01b0381166000908152600460205260409020611f0c90836139f2565b60058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b038381166001600160a01b03199283168117909355841660009081526006602090815260409182902080549093168417909255519182527fd5828184f48f65962d10eac907318df85953d4e3542a0f09b5932ee3fe398bdd910160405180910390a15050565b600954604051632d73a02f60e01b81526004810185905260248101849052604481018390526060918291829182916000916001600160a01b031690632d73a02f90606401600060405180830381865afa158015612009573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612031919081019061554c565b959e949d50909b5099509297509095505050505050565b6001600160a01b03808416600090815260046020526040902054849116612082576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f9919061537c565b1561211757604051631e59ccd960e01b815260040160405180910390fd5b8161213557604051637bc90c0560e11b815260040160405180910390fd5b612140833384613a34565b6121ce3385600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bc919061534e565b6121c79060016153c0565b868661327d565b836001600160a01b0316336001600160a01b03167f8fc656e319452025372383dc27d933046d412b8253de50a10739eeaa59862be68585604051610d6292919061564b565b6001600160a01b0380821660009081526007602052604081208154919283928392916122489183916101009091041684613ad5565b60005490945061226990829061010090046001600160a01b03166001613ad5565b60005490935061228a90829061010090046001600160a01b03166002613ad5565b93959294505050565b6040513481527f1de49774d094a85fc1bbbd16e8d09a865fb848218f41e2da4369f528c42ee42e9060200160405180910390a1565b6001600160a01b03808316600081815260066020908152604080832054851683526004909152812060018101549193909291161461230a576000915050610fbb565b6000831161238e57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612365573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612389919061534e565b612390565b825b925061239c818461362d565b949350505050565b336000818152600460205260409020546001600160a01b03166123da576040516372898ae960e11b815260040160405180910390fd5b6001600160a01b03828116600090815260066020526040902054339116156124155760405163055ee1f160e31b815260040160405180910390fd5b6001600160a01b03808216600090815260046020526040902060018101549091166124408286613cfb565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916888616908117909155825194861685529084019290925290917f758820d0b14a01c1fa60b8d2bbef25ed1b6a5af4802e5dec3f08679255ba8bf39101610b55565b606060006124be8484600880549050613537565b9093509050826001600160401b038111156124db576124db614cf8565b604051908082528060200260200182016040528015612504578160200160208202803683370190505b50915060005b838110156110af57600861251e82876153c0565b8154811061252e5761252e6153d8565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061255e5761255e6153d8565b6001600160a01b039092166020928302919091019091015280612580816153ee565b91505061250a565b336000818152600460205260409020546001600160a01b03166125be576040516372898ae960e11b815260040160405180910390fd5b600080543382526004602052604082206125e69161010090046001600160a01b03168561325d565b60405181815290915033907f882d5671e5b36af50883197c33d48ba56ce337589958e871ba82fb0a54adf3e89060200160405180910390a28015611e7f57611e7f600033836138d3565b6001600160a01b0380831660009081526004602052604090205483911661266a576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166126a05760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612717919061537c565b1561273557604051631e59ccd960e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420612770939092610100909104169087613d75565b90508061279057604051637bc90c0560e11b815260040160405180910390fd5b6127e83386600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d06573d6000803e3d6000fd5b6040518181526001600160a01b0386169033907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba10438369060200160405180910390a35050505050565b6001600160a01b0383166000908152600760205260408120600681015460609283928392839291906128649089908990613537565b9097509150866001600160401b0381111561288157612881614cf8565b6040519080825280602002602001820160405280156128aa578160200160208202803683370190505b509550866001600160401b038111156128c5576128c5614cf8565b6040519080825280602002602001820160405280156128ee578160200160208202803683370190505b509450866001600160401b0381111561290957612909614cf8565b604051908082528060200260200182016040528015612932578160200160208202803683370190505b509350866001600160401b0381111561294d5761294d614cf8565b604051908082528060200260200182016040528015612976578160200160208202803683370190505b50925060005b87811015612ada57600060068301612994838c6153c0565b815481106129a4576129a46153d8565b6000918252602090912060408051606081019091526003909202018054829060ff1660028111156129d7576129d7615095565b60028111156129e8576129e8615095565b81526020016001820154815260200160028201548152505090508060000151888381518110612a1957612a196153d8565b60200260200101906002811115612a3257612a32615095565b90816002811115612a4557612a45615095565b815250508060200151878381518110612a6057612a606153d8565b6020026020010181815250508060400151868381518110612a8357612a836153d8565b6020908102919091010152604081015115801590612aa5575080604001514210155b858381518110612ab757612ab76153d8565b911515602092830291909101909101525080612ad2816153ee565b91505061297c565b5050939792965093509350565b60008080808085612b6c57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b69919061534e565b95505b6001600160a01b03878116600090815260046020908152604080832060018101548b855260028201909352922054921696509060ff1660008881526003830160205260409020549015955060ff169350612bc6818861362d565b9150848015612bd3575083155b8015612c54575060005460405163fcbb371b60e01b8152600481018990526101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015612c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4c91906152d3565b60c001518210155b9250509295509295909350565b600080546001600160a01b038481168352600460209081526040808520888416865260079092528420612c9e939092610100909104169085613dae565b50949350505050565b604051634ee5a1b960e01b815260040160405180910390fd5b6001600160a01b03808316600090815260046020526040902054839116612cfa576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316612d305760405163cf83d93d60e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420612d6b939092610100909104169087613d75565b604080516001600160a01b03881681526020810183905291925033917f2ef606d064225d24c1514dc94907c134faee1237445c2f63f410cce0852b2054910160405180910390a28015612dc457612dc4600033836138d3565b505050505050565b60088181548110611e9557600080fd5b336000818152600760205260409020546001600160a01b0316612e125760405163cf83d93d60e01b815260040160405180910390fd5b6000805433825260076020526040909120612e3a9161010090046001600160a01b0316613fb8565b5050565b6001600160a01b03808416600090815260046020526040902054849116612e78576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316612eae5760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f25919061537c565b15612f4357604051631e59ccd960e01b815260040160405180910390fd5b33600090815260076020908152604080832083546001600160a01b038a81168652600490945291909320612f81928492610100900416908888613fdc565b935083612fa157604051637bc90c0560e11b815260040160405180910390fd5b806006016040518060600160405280876002811115612fc257612fc2615095565b815260208101879052604001612fdb42620d2f006153c0565b9052815460018181018455600093845260209093208251600390920201805492939092839160ff199091169083600281111561301957613019615095565b0217905550602082015181600101556040820151816002015550506130c56003600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561308c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b0919061534e565b6130bb9060016153c0565b6002919087614112565b50600954604051635692619d60e11b81526001600160a01b0388811660048301529091169063ad24c33a90602401600060405180830381600087803b15801561310d57600080fd5b505af1158015613121573d6000803e3d6000fd5b50505060068201546001600160a01b038816915033907fb649014faa7a0e23357e091fb8a67a128c33dc9480f846f7e41cb3a6c9d806109061316590600190615409565b60405190815260200160405180910390a3505050505050565b60008281526009850160205260408120546131a757600083815260098601602052604090208290555b6000838152600a860160205260408120546131c39060016153c0565b6000858152600a88016020526040902081905560e0860151909150811080159061320f57506003860160006131f98660016153c0565b815260208101919091526040016000205460ff16155b15612c9e5761010085015161322490856153c0565b91505b81841015612c9e5783613239816153ee565b60008181526003890160205260409020805460ff1916600117905594506132279050565b600080600061326d8686866133a4565b6006880155925050509392505050565b6001600160a01b03808616600090815260076020526040902080549091166132f65780546001600160a01b0387166001600160a01b031991821681178355600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180549092161790555b6001600160a01b038516600090815260046020526040902061331d908290869086866141ed565b61332b6002600386856142b5565b600954604051635692619d60e11b81526001600160a01b0387811660048301529091169063ad24c33a90602401600060405180830381600087803b15801561337257600080fd5b505af1158015613386573d6000803e3d6000fd5b50505050505050505050565b61339f838383600061439b565b505050565b6000808460060154905060006001856001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613414919061534e565b61341e9190615409565b905083158061343557508061343383866153c0565b115b15613447576134448282615409565b93505b60005b8481101561352d5761345d6001846153c0565b60405163fcbb371b60e01b8152600481018290529093506000906001600160a01b0388169063fcbb371b9060240161012060405180830381865afa1580156134a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134cd91906152d3565b905060006134dc898387613640565b9050806134ea57505061351b565b60a08201516134fa57505061351b565b61350c818360a0015160646019614421565b61351690876153c0565b955050505b80613525816153ee565b91505061344a565b5050935093915050565b6000808261354585876153c0565b10613557576135548584615409565b93505b8361356281876153c0565b91509150935093915050565b600061362485600201600085600281111561358b5761358b615095565b600281111561359c5761359c615095565b81526020019081526020016000206000866001600160a01b03166001600160a01b03168152602001908152602001600020838760010160008760028111156135e6576135e6615095565b60028111156135f7576135f7615095565b8152602080820192909252604090810160009081206001600160a01b038b168252909252902091906137ba565b95945050505050565b600061157e6004840160058501846137ba565b600081815260028401602052604081205460ff168061366f5750600082815260038501602052604090205460ff165b1561367c5750600061157e565b6000613688858461362d565b9050604983106136c9578360c001518110156136a857600091505061157e565b629896806136b882610a34615666565b6136c29190615685565b9150613762565b806136d857600091505061157e565b6136e46019600a615783565b6136f585608001516064601961444d565b6136ff9083615666565b6137099190615685565b91508161371a57600091505061157e565b61373d846060015185604001516137319190615666565b6301e13380601961444d565b6137479083615666565b91506137556019600a615783565b61375f9083615685565b91505b6000838152600a8601602052604090205480156137a45760008481526009870160205260409020546137a0846137988484615409565b836019614421565b9350505b50509392505050565b61339f838383600161439b565b82546000908015806137e8575082856000815481106137db576137db6153d8565b9060005260206000200154115b156137f757600091505061157e565b8285613804600184615409565b81548110613814576138146153d8565b9060005260206000200154116138535783613830600183615409565b81548110613840576138406153d8565b906000526020600020015491505061157e565b6001811180156138895750828561386b600284615409565b8154811061387b5761387b6153d8565b906000526020600020015411155b1561389a5783613830600283615409565b60006138a98685600085614489565b90508481815481106138bd576138bd6153d8565b9060005260206000200154925050509392505050565b6000808460028111156138e8576138e8615095565b1415613947576040516001600160a01b038416908390600081818185875af1925050503d8060008114613937576040519150601f19603f3d011682016040523d82523d6000602084013e61393c565b606091505b5050809150506139c9565b61395084614531565b60405163a9059cbb60e01b81526001600160a01b03858116600483015260248201859052919091169063a9059cbb906044015b6020604051808303816000875af11580156139a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139c6919061537c565b90505b80611e7f5783604051630db5347560e11b81526004016139e9919061578f565b60405180910390fd5b81546001600160a01b031615613a1a57604051621d934160e11b815260040160405180910390fd5b81546001600160a01b03191633178255612e3a8282613cfb565b6000836002811115613a4857613a48615095565b1415613a6e5780341461339f57604051630fe5b06560e11b815260040160405180910390fd5b3415613a8d5760405163a745ac8560e01b815260040160405180910390fd5b6000613a9884614531565b6040516323b872dd60e01b81526001600160a01b0385811660048301523060248301526044820185905291909116906323b872dd90606401613983565b600080846003016000846002811115613af057613af0615095565b6002811115613b0157613b01615095565b8152602081019190915260400160002054905080613b2357600091505061157e565b6000846001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b87919061534e565b90506000613b96600184615409565b9050600081118015613bf9575081876003016000876002811115613bbc57613bbc615095565b6002811115613bcd57613bcd615095565b81526020019081526020016000208281548110613bec57613bec6153d8565b9060005260206000200154115b15613c0c5780613c088161579d565b9150505b81876003016000876002811115613c2557613c25615095565b6002811115613c3657613c36615095565b81526020019081526020016000208281548110613c5557613c556153d8565b90600052602060002001541115613c72576000935050505061157e565b6000805b828111613cef57886004016000886002811115613c9557613c95615095565b6002811115613ca657613ca6615095565b81526020019081526020016000208181548110613cc557613cc56153d8565b906000526020600020015482613cdb91906153c0565b915080613ce7816153ee565b915050613c76565b50979650505050505050565b6001600160a01b038116613d2257604051637138356f60e01b815260040160405180910390fd5b81546001600160a01b0382811691161415613d505760405163e037058f60e01b815260040160405180910390fd5b60019190910180546001600160a01b0319166001600160a01b03909216919091179055565b6000806000613d8687878787613dae565b86546001600160a01b0316600090815260058a01602052604090205592505050949350505050565b81546001600160a01b039081166000908152600586016020908152604080832054815163900cf0cf60e01b81529151939490938593600193928a169263900cf0cf92600480830193928290030181865afa158015613e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e34919061534e565b613e3e9190615409565b9050831580613e55575080613e5383866153c0565b115b15613e6757613e648282615409565b93505b60005b84811015613fad57613e7d6001846153c0565b8654909350600090613e9c908a906001600160a01b031660028761356e565b8754613eb5908b906001600160a01b031660018861356e565b8854613ece908c906001600160a01b031660008961356e565b613ed891906153c0565b613ee291906153c0565b905080613eef5750613f9b565b60405163fcbb371b60e01b815260048101859052600090613f68906001600160a01b038b169063fcbb371b9060240161012060405180830381865afa158015613f3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f6091906152d3565b89908761459c565b905080613f76575050613f9b565b613f8c8183613f858b8961362d565b6019614421565b613f9690876153c0565b955050505b80613fa5816153ee565b915050613e6a565b505094509492505050565b613fc4828260016145e7565b613fd0828260026145e7565b612e3a828260006145e7565b60006140f8866002016000856002811115613ff957613ff9615095565b600281111561400a5761400a615095565b81526020808201929092526040908101600090812088546001600160a01b03908116835290845290829020825163900cf0cf60e01b815292519093918a169263900cf0cf9260048083019391928290030181865afa158015614070573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614094919061534e565b61409f9060016153c0565b848960010160008860028111156140b8576140b8615095565b60028111156140c9576140c9615095565b8152602080820192909252604090810160009081208b546001600160a01b031682529092529020929190614112565b91508161410757506000613624565b612c9e84868461490d565b835460009080158061414957508561412b600183615409565b8154811061413b5761413b6153d8565b906000526020600020015484105b1561416757604051630eae4c9760e01b815260040160405180910390fd5b600061417487878761498d565b9050600086828154811061418a5761418a6153d8565b90600052602060002001549050808511156141a557806141a7565b845b945084156141e157848783815481106141c2576141c26153d8565b9060005260206000200160008282546141db9190615409565b90915550505b50929695505050505050565b61429c85600201600084600281111561420857614208615095565b600281111561421957614219615095565b81526020808201929092526040908101600090812087546001600160a01b031682529092528120908690849060018a019087600281111561425c5761425c615095565b600281111561426d5761426d615095565b8152602080820192909252604090810160009081208a546001600160a01b0316825290925290209291906142b5565b8454610b5e90849086906001600160a01b031684614b9d565b83546001811180156142ec5750846142ce600183615409565b815481106142de576142de6153d8565b906000526020600020015483105b801561431d5750846142ff600283615409565b8154811061430f5761430f6153d8565b906000526020600020015483105b1561433b57604051630eae4c9760e01b815260040160405180910390fd5b600061434886868661498d565b8654925090505b81811015612dc4578285828154811061436a5761436a6153d8565b90600052602060002001600082825461438391906153c0565b90915550819050614393816153ee565b91505061434f565b815160005b81811015612dc45760008482815181106143bc576143bc6153d8565b6020026020010151905085811180156143ec5750600081815260028801602052604090205460ff16151584151514155b1561440e5760008181526002880160205260409020805460ff19168515151790555b5080614419816153ee565b9150506143a0565b600061442e82600a615783565b61443985858561444d565b6144439087615666565b6136249190615685565b60008061445b8360016153c0565b61446690600a615783565b6144709086615666565b9050600a61447e8583615685565b6144439060056153c0565b6000818314156144a55761449e600183615409565b905061239c565b600060026144b384866153c0565b6144bd9190615685565b9050848682815481106144d2576144d26153d8565b906000526020600020015411156144f7576144ef86868684614489565b91505061239c565b8486828154811061450a5761450a6153d8565b90600052602060002001541015613624576144ef868661452b8460016153c0565b86614489565b6000600182600281111561454757614547615095565b141561455b57506001602960991b01919050565b600282600281111561456f5761456f615095565b141561458357506002602960991b01919050565b604051638698bf3760e01b815260040160405180910390fd5b6000806145aa858585613640565b9050806145bb57600091505061157e565b60a08401516145cb57905061157e565b6145dd818560a0015160646019614421565b6136249082615409565b60006145f4848484613ad5565b9050806146015750505050565b600084600301600084600281111561461b5761461b615095565b600281111561462c5761462c615095565b8152602001908152602001600020805490509050836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561467e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146a2919061534e565b8560030160008560028111156146ba576146ba615095565b60028111156146cb576146cb615095565b81526020019081526020016000206001836146e69190615409565b815481106146f6576146f66153d8565b9060005260206000200154116147915784600301600084600281111561471e5761471e615095565b600281111561472f5761472f615095565b815260200190815260200160002060006147499190614c1d565b84600401600084600281111561476157614761615095565b600281111561477257614772615095565b8152602001908152602001600020600061478c9190614c1d565b6148f6565b60405180602001604052808660030160008660028111156147b4576147b4615095565b60028111156147c5576147c5615095565b81526020019081526020016000206001846147e09190615409565b815481106147f0576147f06153d8565b906000526020600020015481525085600301600085600281111561481657614816615095565b600281111561482757614827615095565b81526020810191909152604001600020614842916001614c3e565b50604051806020016040528086600401600086600281111561486657614866615095565b600281111561487757614877615095565b81526020019081526020016000206001846148929190615409565b815481106148a2576148a26153d8565b90600052602060002001548152508560040160008560028111156148c8576148c8615095565b60028111156148d9576148d9615095565b815260208101919091526040016000206148f4916001614c3e565b505b8454610b5e9084906001600160a01b0316846138d3565b611e7f83600501836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614952573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614976919061534e565b6149819060016153c0565b60048601919084614112565b8254600090806149c857505082546001818101855560008581526020808220909301849055845491820185558481529182200181905561157e565b60006149d5600183615409565b905060008682815481106149eb576149eb6153d8565b9060005260206000200154905080851415614a0a5750915061157e9050565b80851115614a725786546001810188556000888152602090200185905585548690819084908110614a3d57614a3d6153d8565b6000918252602080832090910154835460018181018655948452919092200155614a689083906153c0565b935050505061157e565b600082118015614aa7575086614a89600184615409565b81548110614a9957614a996153d8565b906000526020600020015485145b15614ab757614a68600183615409565b86878381548110614aca57614aca6153d8565b6000918252602080832090910154835460018101855593835291209091015585548690819084908110614aff57614aff6153d8565b6000918252602080832090910154835460018101855593835291209091015586548590889084908110614b3457614b346153d8565b6000918252602090912001558115614b725785614b52600184615409565b81548110614b6257614b626153d8565b9060005260206000200154614b75565b60005b868381548110614b8757614b876153d8565b60009182526020909120015550915061157e9050565b6001600160a01b038216600090815260088501602052604090205460ff16614c0b576001600160a01b038216600081815260088601602090815260408220805460ff191660019081179091556007880180549182018155835291200180546001600160a01b03191690911790555b611e7f600485016005860185846142b5565b5080546000825590600052602060002090810190614c3b9190614c89565b50565b828054828255906000526020600020908101928215614c79579160200282015b82811115614c79578251825591602001919060010190614c5e565b50614c85929150614c89565b5090565b5b80821115614c855760008155600101614c8a565b6001600160a01b0381168114614c3b57600080fd5b60008060408385031215614cc657600080fd5b8235614cd181614c9e565b946020939093013593505050565b600060208284031215614cf157600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715614d3157614d31614cf8565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614d5f57614d5f614cf8565b604052919050565b60006001600160401b03821115614d8057614d80614cf8565b5060051b60200190565b60008060408385031215614d9d57600080fd5b8235614da881614c9e565b91506020838101356001600160401b03811115614dc457600080fd5b8401601f81018613614dd557600080fd5b8035614de8614de382614d67565b614d37565b81815260059190911b82018301908381019088831115614e0757600080fd5b928401925b82841015614e2557833582529284019290840190614e0c565b80955050505050509250929050565b60008060408385031215614e4757600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015614e8f5781516001600160a01b031687529582019590820190600101614e6a565b509495945050505050565b604081526000614ead6040830185614e56565b90508260208301529392505050565b60008060008060808587031215614ed257600080fd5b8435614edd81614c9e565b966020860135965060408601359560600135945092505050565b600081518084526020808501945080840160005b83811015614e8f57815187529582019590820190600101614f0b565b60a081526000614f3a60a0830188614e56565b8281036020840152614f4c8188614ef7565b90508281036040840152614f608187614ef7565b90508281036060840152614f748186614ef7565b9150508260808301529695505050505050565b60008060408385031215614f9a57600080fd5b82356001600160401b03811115614fb057600080fd5b8301601f81018513614fc157600080fd5b80356020614fd1614de383614d67565b82815260059290921b83018101918181019088841115614ff057600080fd5b938201935b8385101561501757843561500881614c9e565b82529382019390820190614ff5565b98969091013596505050505050565b6060815260006150396060830186614e56565b828103602084015261504b8186614ef7565b915050826040830152949350505050565b6000806040838503121561506f57600080fd5b823561507a81614c9e565b9150602083013561508a81614c9e565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b600381106150c957634e487b7160e01b600052602160045260246000fd5b9052565b608081016150db82876150ab565b846020830152836040830152821515606083015295945050505050565b60006020828403121561510a57600080fd5b813561157e81614c9e565b60008060006060848603121561512a57600080fd5b505081359360208301359350604090920135919050565b600081518084526020808501945080840160005b83811015614e8f578151151587529582019590820190600101615155565b60a08152600061518660a0830188614e56565b82810360208401526151988188614e56565b905082810360408401526151ac8187614ef7565b90508281036060840152614f748186615141565b6000806000606084860312156151d557600080fd5b83356151e081614c9e565b92506020840135600381106151f457600080fd5b929592945050506040919091013590565b60008060006060848603121561521a57600080fd5b833561522581614c9e565b95602085013595506040909401359392505050565b60a0808252865190820181905260009060209060c0840190828a01845b8281101561527a5761526a8483516150ab565b9284019290840190600101615257565b5050508381038285015261528e8189614ef7565b91505082810360408401526151ac8187614ef7565b6000806000606084860312156152b857600080fd5b83356152c381614c9e565b925060208401356151f481614c9e565b600061012082840312156152e657600080fd5b6152ee614d0e565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b60006020828403121561536057600080fd5b5051919050565b8051801515811461537757600080fd5b919050565b60006020828403121561538e57600080fd5b61157e82615367565b60208152600061157e6020830184614ef7565b634e487b7160e01b600052601160045260246000fd5b600082198211156153d3576153d36153aa565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415615402576154026153aa565b5060010190565b60008282101561541b5761541b6153aa565b500390565b600082601f83011261543157600080fd5b81516020615441614de383614d67565b82815260059290921b8401810191818101908684111561546057600080fd5b8286015b8481101561548457805161547781614c9e565b8352918301918301615464565b509695505050505050565b600082601f8301126154a057600080fd5b815160206154b0614de383614d67565b82815260059290921b840181019181810190868411156154cf57600080fd5b8286015b84811015615484576154e481615367565b83529183019183016154d3565b600082601f83011261550257600080fd5b81516020615512614de383614d67565b82815260059290921b8401810191818101908684111561553157600080fd5b8286015b848110156154845780518352918301918301615535565b600080600080600080600060e0888a03121561556757600080fd5b87516001600160401b038082111561557e57600080fd5b61558a8b838c01615420565b985060208a01519150808211156155a057600080fd5b6155ac8b838c01615420565b975060408a01519150808211156155c257600080fd5b6155ce8b838c0161548f565b965060608a01519150808211156155e457600080fd5b6155f08b838c0161548f565b955060808a015191508082111561560657600080fd5b6156128b838c016154f1565b945060a08a015191508082111561562857600080fd5b506156358a828b0161548f565b92505060c0880151905092959891949750929550565b6040810161565982856150ab565b8260208301529392505050565b6000816000190483118215151615615680576156806153aa565b500290565b6000826156a257634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156110af5781600019048211156156c8576156c86153aa565b808516156156d557918102915b93841c93908002906156ac565b6000826156f157506001610fbb565b816156fe57506000610fbb565b8160018114615714576002811461571e5761573a565b6001915050610fbb565b60ff84111561572f5761572f6153aa565b50506001821b610fbb565b5060208310610133831016604e8410600b841016171561575d575081810a610fbb565b61576783836156a7565b806000190482111561577b5761577b6153aa565b029392505050565b600061157e83836156e2565b60208101610fbb82846150ab565b6000816157ac576157ac6153aa565b50600019019056fea264697066735822122011bcd72f29891519cecf669abcb6b18e7aec1f45315d67eb5669e5a2a685d50d64736f6c634300080c0033`), + storage: storage{ + // ICandidateValidatorManager public candidateManager + "0x09": candidateValidatorManager.address, + }, + }, +} From 5bfd1c915f60c658a353ab3e0e52ea67a7e6e2b1 Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Mon, 19 Aug 2024 10:14:22 +0900 Subject: [PATCH 19/29] Moved `EnvironmentValue` to params package --- consensus/oasys/contract.go | 68 +--------------------- consensus/oasys/contract_test.go | 2 +- consensus/oasys/oasys.go | 15 ++--- consensus/oasys/scheduler.go | 6 +- consensus/oasys/scheduler_test.go | 7 ++- consensus/oasys/snapshot.go | 4 +- params/oasys.go | 96 +++++++++++++++++++++++++++++++ 7 files changed, 117 insertions(+), 81 deletions(-) create mode 100644 params/oasys.go diff --git a/consensus/oasys/contract.go b/consensus/oasys/contract.go index ae5c790cb..e816bfefb 100644 --- a/consensus/oasys/contract.go +++ b/consensus/oasys/contract.go @@ -150,54 +150,6 @@ func (c chainContext) GetHeader(hash common.Hash, number uint64) *types.Header { return c.Chain.GetHeader(hash, number) } -// environmentValue -type environmentValue struct { - // Block and epoch to which this setting applies - StartBlock *big.Int - StartEpoch *big.Int - // Block generation interval(by seconds) - BlockPeriod *big.Int - // Number of blocks in epoch - EpochPeriod *big.Int - // Annual rate of staking reward - RewardRate *big.Int - // Validator commission rate - CommissionRate *big.Int - // Amount of tokens required to become a validator - ValidatorThreshold *big.Int - // Number of not sealed to jailing the validator - JailThreshold *big.Int - // Number of epochs to jailing the validator - JailPeriod *big.Int -} - -func (p *environmentValue) IsEpoch(number uint64) bool { - return (number-p.StartBlock.Uint64())%p.EpochPeriod.Uint64() == 0 -} - -func (p *environmentValue) Epoch(number uint64) uint64 { - return p.StartEpoch.Uint64() + (number-p.StartBlock.Uint64())/p.EpochPeriod.Uint64() -} - -func (p *environmentValue) GetFirstBlock(number uint64) uint64 { - elapsedEpoch := p.Epoch(number) - p.StartEpoch.Uint64() - return p.StartBlock.Uint64() + elapsedEpoch*p.EpochPeriod.Uint64() -} - -func (p *environmentValue) Copy() *environmentValue { - return &environmentValue{ - StartBlock: new(big.Int).Set(p.StartBlock), - StartEpoch: new(big.Int).Set(p.StartEpoch), - BlockPeriod: new(big.Int).Set(p.BlockPeriod), - EpochPeriod: new(big.Int).Set(p.EpochPeriod), - RewardRate: new(big.Int).Set(p.RewardRate), - CommissionRate: new(big.Int).Set(p.CommissionRate), - ValidatorThreshold: new(big.Int).Set(p.ValidatorThreshold), - JailThreshold: new(big.Int).Set(p.JailThreshold), - JailPeriod: new(big.Int).Set(p.JailPeriod), - } -} - // nextValidators type nextValidators struct { Owners []common.Address @@ -228,20 +180,6 @@ func (p *nextValidators) Exists(validator common.Address) bool { return false } -func getInitialEnvironment(config *params.OasysConfig) *environmentValue { - return &environmentValue{ - StartBlock: common.Big0, - StartEpoch: common.Big1, - BlockPeriod: big.NewInt(int64(config.Period)), - EpochPeriod: big.NewInt(int64(config.Epoch)), - RewardRate: big.NewInt(10), - CommissionRate: big.NewInt(10), - ValidatorThreshold: new(big.Int).Mul(big.NewInt(params.Ether), big.NewInt(10_000_000)), - JailThreshold: big.NewInt(500), - JailPeriod: big.NewInt(2), - } -} - // callmsg type callmsg struct { ethereum.CallMsg @@ -303,7 +241,7 @@ func (c *Oasys) initializeSystemContracts( if !environment.verifyCode(state) { return errors.New("invalid contract code: Environment") } - data, err := environment.abi.Pack("initialize", getInitialEnvironment(c.config)) + data, err := environment.abi.Pack("initialize", params.InitialEnvironmentValue(c.chainConfig)) if err != nil { return err } @@ -611,7 +549,7 @@ func getRewards(ethAPI blockchainAPI, hash common.Hash) (*big.Int, error) { } // Call the `Environment.nextValue` method. -func getNextEnvironmentValue(ethAPI blockchainAPI, hash common.Hash) (*environmentValue, error) { +func getNextEnvironmentValue(ethAPI blockchainAPI, hash common.Hash) (*params.EnvironmentValue, error) { method := "nextValue" ctx, cancel := context.WithCancel(context.Background()) @@ -638,7 +576,7 @@ func getNextEnvironmentValue(ethAPI blockchainAPI, hash common.Hash) (*environme return nil, err } - var recv struct{ Result environmentValue } + var recv struct{ Result params.EnvironmentValue } if err := environment.abi.UnpackIntoInterface(&recv, method, rbytes); err != nil { return nil, err } diff --git a/consensus/oasys/contract_test.go b/consensus/oasys/contract_test.go index cb4a36375..18432758c 100644 --- a/consensus/oasys/contract_test.go +++ b/consensus/oasys/contract_test.go @@ -318,7 +318,7 @@ func TestGetRewards(t *testing.T) { } func TestGetNextEnvironmentValue(t *testing.T) { - want := &environmentValue{ + want := ¶ms.EnvironmentValue{ StartBlock: common.Big0, StartEpoch: common.Big1, BlockPeriod: big.NewInt(3), diff --git a/consensus/oasys/oasys.go b/consensus/oasys/oasys.go index 1cb13d6d1..bbf902171 100644 --- a/consensus/oasys/oasys.go +++ b/consensus/oasys/oasys.go @@ -311,7 +311,7 @@ func (c *Oasys) verifyHeader(chain consensus.ChainHeaderReader, header *types.He // rather depend on a batch of previous headers. The caller may optionally pass // in a batch of parents (ascending order) to avoid looking those up from the // database. This is useful for concurrently verifying a batch of new headers. -func (c *Oasys) verifyCascadingFields(chain consensus.ChainHeaderReader, header *types.Header, parents []*types.Header, env *environmentValue) error { +func (c *Oasys) verifyCascadingFields(chain consensus.ChainHeaderReader, header *types.Header, parents []*types.Header, env *params.EnvironmentValue) error { // The genesis block is the always valid dead-end number := header.Number.Uint64() if number == 0 { @@ -418,7 +418,8 @@ func (c *Oasys) snapshot(chain consensus.ChainHeaderReader, number uint64, hash return nil, err } - snap = newSnapshot(c.chainConfig, c.signatures, c.ethAPI, number, hash, validators, getInitialEnvironment(c.config)) + snap = newSnapshot(c.chainConfig, c.signatures, c.ethAPI, + number, hash, validators, params.InitialEnvironmentValue(c.chainConfig)) if err := snap.store(c.db); err != nil { return nil, err } @@ -989,7 +990,7 @@ func encodeSigHeader(w io.Writer, header *types.Header) { } } -func (c *Oasys) addBalanceToStakeManager(state *state.StateDB, hash common.Hash, number uint64, env *environmentValue) error { +func (c *Oasys) addBalanceToStakeManager(state *state.StateDB, hash common.Hash, number uint64, env *params.EnvironmentValue) error { if !env.IsEpoch(number) || env.Epoch(number) < 3 || env.Epoch(number) > 60 { return nil } @@ -1012,10 +1013,10 @@ func (c *Oasys) addBalanceToStakeManager(state *state.StateDB, hash common.Hash, return nil } -func (c *Oasys) environment(chain consensus.ChainHeaderReader, header *types.Header, parents []*types.Header) (*environmentValue, error) { +func (c *Oasys) environment(chain consensus.ChainHeaderReader, header *types.Header, parents []*types.Header) (*params.EnvironmentValue, error) { number := header.Number.Uint64() if number < c.config.Epoch { - return getInitialEnvironment(c.config), nil + return params.InitialEnvironmentValue(c.chainConfig), nil } snap, err := c.snapshot(chain, number-1, header.ParentHash, parents) @@ -1023,7 +1024,7 @@ func (c *Oasys) environment(chain consensus.ChainHeaderReader, header *types.Hea return nil, err } - var env *environmentValue + var env *params.EnvironmentValue if number%snap.Environment.EpochPeriod.Uint64() == 0 { if env, err = getNextEnvironmentValue(c.ethAPI, header.ParentHash); err != nil { log.Error("Failed to get environment value", "in", "environment", "hash", header.ParentHash, "number", number, "err", err) @@ -1047,7 +1048,7 @@ func (c *Oasys) environment(chain consensus.ChainHeaderReader, header *types.Hea } func (c *Oasys) scheduler(chain consensus.ChainHeaderReader, header *types.Header, - env *environmentValue, validators []common.Address, stakes []*big.Int) (*scheduler, error) { + env *params.EnvironmentValue, validators []common.Address, stakes []*big.Int) (*scheduler, error) { number := header.Number.Uint64() // Previous epoch does not exists. diff --git a/consensus/oasys/scheduler.go b/consensus/oasys/scheduler.go index 830a5550b..88b3ff208 100644 --- a/consensus/oasys/scheduler.go +++ b/consensus/oasys/scheduler.go @@ -40,7 +40,7 @@ func init() { type scheduler struct { mu sync.Mutex - env *environmentValue + env *params.EnvironmentValue // WARNING: Consensus engine should not use this value directly. chooser *weightedChooser @@ -64,7 +64,7 @@ type scheduler struct { // Note: The turn is random, so it will not always be [A,B,C]. } -func newScheduler(env *environmentValue, epochStart uint64, chooser *weightedChooser) *scheduler { +func newScheduler(env *params.EnvironmentValue, epochStart uint64, chooser *weightedChooser) *scheduler { period := env.EpochPeriod.Uint64() s := &scheduler{ env: env, @@ -261,7 +261,7 @@ func newWeightedChooser( func getPrevEpochLastBlockHash( config *params.OasysConfig, chain consensus.ChainHeaderReader, - env *environmentValue, + env *params.EnvironmentValue, header *types.Header, ) (common.Hash, error) { var ( diff --git a/consensus/oasys/scheduler_test.go b/consensus/oasys/scheduler_test.go index a1e540623..9fe21143c 100644 --- a/consensus/oasys/scheduler_test.go +++ b/consensus/oasys/scheduler_test.go @@ -5,6 +5,7 @@ import ( "testing" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/params" ) var ( @@ -118,7 +119,7 @@ var ( ) func TestBackOffTimes(t *testing.T) { - env := &environmentValue{ + env := ¶ms.EnvironmentValue{ StartBlock: common.Big0, StartEpoch: common.Big1, EpochPeriod: epochPeriod, @@ -142,7 +143,7 @@ func TestBackOffTimes(t *testing.T) { } func TestExpect(t *testing.T) { - env := &environmentValue{ + env := ¶ms.EnvironmentValue{ StartBlock: common.Big0, StartEpoch: common.Big1, EpochPeriod: epochPeriod, @@ -167,7 +168,7 @@ func TestExpect(t *testing.T) { } func TestDifficulty(t *testing.T) { - env := &environmentValue{ + env := ¶ms.EnvironmentValue{ StartBlock: common.Big0, StartEpoch: common.Big1, EpochPeriod: epochPeriod, diff --git a/consensus/oasys/snapshot.go b/consensus/oasys/snapshot.go index 4ec7cb116..a483f324e 100644 --- a/consensus/oasys/snapshot.go +++ b/consensus/oasys/snapshot.go @@ -27,7 +27,7 @@ type Snapshot struct { Hash common.Hash `json:"hash"` // Block hash where the snapshot was created Validators map[common.Address]*big.Int `json:"validators"` // Set of authorized validators and stakes at this moment - Environment *environmentValue `json:"environment"` + Environment *params.EnvironmentValue `json:"environment"` } // validatorsAscending implements the sort interface to allow sorting a list of addresses @@ -41,7 +41,7 @@ func (s validatorsAscending) Swap(i, j int) { s[i], s[j] = s[j], s[i] } // method does not initialize the set of recent validators, so only ever use if for // the genesis block. func newSnapshot(config *params.ChainConfig, sigcache *lru.ARCCache, ethAPI *ethapi.BlockChainAPI, - number uint64, hash common.Hash, validators []common.Address, environment *environmentValue) *Snapshot { + number uint64, hash common.Hash, validators []common.Address, environment *params.EnvironmentValue) *Snapshot { snap := &Snapshot{ config: config, sigcache: sigcache, diff --git a/params/oasys.go b/params/oasys.go new file mode 100644 index 000000000..717eca8f3 --- /dev/null +++ b/params/oasys.go @@ -0,0 +1,96 @@ +package params + +import ( + "math/big" + + "github.com/ethereum/go-ethereum/common" +) + +// EnvironmentValue is a representation of `Environment.EnvironmentValue`. +type EnvironmentValue struct { + // Block and epoch to which this setting applies + StartBlock *big.Int + StartEpoch *big.Int + // Block generation interval(by seconds) + BlockPeriod *big.Int + // Number of blocks in epoch + EpochPeriod *big.Int + // Annual rate of staking reward + RewardRate *big.Int + // Validator commission rate + CommissionRate *big.Int + // Amount of tokens required to become a validator + ValidatorThreshold *big.Int + // Number of not sealed to jailing the validator + JailThreshold *big.Int + // Number of epochs to jailing the validator + JailPeriod *big.Int +} + +// Determine if the given block number is the start block of the corresponding epoch. +func (p *EnvironmentValue) IsEpoch(number uint64) bool { + return (number-p.StartBlock.Uint64())%p.EpochPeriod.Uint64() == 0 +} + +// Calculate epoch number from the given block number. +func (p *EnvironmentValue) Epoch(number uint64) uint64 { + return p.StartEpoch.Uint64() + (number-p.StartBlock.Uint64())/p.EpochPeriod.Uint64() +} + +// Determine if the given block number is the start block of the corresponding epoch. +func (p *EnvironmentValue) GetFirstBlock(number uint64) uint64 { + elapsedEpoch := p.Epoch(number) - p.StartEpoch.Uint64() + return p.StartBlock.Uint64() + elapsedEpoch*p.EpochPeriod.Uint64() +} + +// Calculate the block number where the next environment should start based on this environment. +func (p *EnvironmentValue) NewValueStartBlock(newValueStartEpoch uint64) uint64 { + return p.StartBlock.Uint64() + + (newValueStartEpoch-p.StartEpoch.Uint64())*p.EpochPeriod.Uint64() +} + +// Safely copy all values and return a new pointer. +func (p *EnvironmentValue) Copy() *EnvironmentValue { + return &EnvironmentValue{ + StartBlock: new(big.Int).Set(p.StartBlock), + StartEpoch: new(big.Int).Set(p.StartEpoch), + BlockPeriod: new(big.Int).Set(p.BlockPeriod), + EpochPeriod: new(big.Int).Set(p.EpochPeriod), + RewardRate: new(big.Int).Set(p.RewardRate), + CommissionRate: new(big.Int).Set(p.CommissionRate), + ValidatorThreshold: new(big.Int).Set(p.ValidatorThreshold), + JailThreshold: new(big.Int).Set(p.JailThreshold), + JailPeriod: new(big.Int).Set(p.JailPeriod), + } +} + +// Returns the environment value in Genesis. +func InitialEnvironmentValue(cfg *ChainConfig) *EnvironmentValue { + return &EnvironmentValue{ + StartBlock: common.Big0, + StartEpoch: common.Big1, + BlockPeriod: big.NewInt(int64(cfg.Oasys.Period)), + EpochPeriod: big.NewInt(int64(cfg.Oasys.Epoch)), + RewardRate: big.NewInt(10), + CommissionRate: big.NewInt(10), + ValidatorThreshold: new(big.Int).Mul(big.NewInt(Ether), big.NewInt(10_000_000)), + JailThreshold: big.NewInt(500), + JailPeriod: big.NewInt(2), + } +} + +// Return the environment value updated in Sep 2024. +func ShortenedBlockTimeEnvironmentValue(cfg *ChainConfig) *EnvironmentValue { + prev := InitialEnvironmentValue(cfg) + next := prev.Copy() + + next.StartEpoch = cfg.OasysShortenedBlockTimeStartEpoch() + next.StartBlock = new(big.Int).SetUint64(prev.NewValueStartBlock(next.StartEpoch.Uint64())) + + if cfg.ChainID.Cmp(OasysMainnetChainConfig.ChainID) == 0 || + cfg.ChainID.Cmp(OasysTestnetChainConfig.ChainID) == 0 { + next.BlockPeriod = big.NewInt(6) + next.EpochPeriod = big.NewInt(14400) + } + return next +} From 73ec9ee71f336b27e4b0e43a4ce8703910a98a59 Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Mon, 19 Aug 2024 10:42:09 +0900 Subject: [PATCH 20/29] Support for storage values based on ChainConfig & Add deployments11 --- contracts/oasys/deployments.go | 8 +-- contracts/oasys/deployments0.go | 8 +-- contracts/oasys/deployments10.go | 14 ++--- contracts/oasys/deployments11.go | 35 ++++++++++++ contracts/oasys/deployments2.go | 24 ++++---- contracts/oasys/deployments9.go | 8 +-- contracts/oasys/oasys.go | 2 +- contracts/oasys/oasys_test.go | 58 ++++++++++++++++++-- contracts/oasys/storage.go | 94 +++++++++++++++++++++----------- 9 files changed, 182 insertions(+), 69 deletions(-) diff --git a/contracts/oasys/deployments.go b/contracts/oasys/deployments.go index 9da8cf67e..7e71680fe 100644 --- a/contracts/oasys/deployments.go +++ b/contracts/oasys/deployments.go @@ -71,9 +71,9 @@ type deployment struct { } // Deploy the contract. -func (d *deployment) deploy(state StateDB, block uint64) { +func (d *deployment) deploy(cfg *params.ChainConfig, state StateDB, block uint64) { d.deployCode(state) - d.deployStorage(state) + d.deployStorage(cfg, state) log.Info("Deploy contract", "block", block, "name", d.contract.name, "address", d.contract.address) } @@ -84,8 +84,8 @@ func (d *deployment) deployCode(state StateDB) { } } -func (d *deployment) deployStorage(state StateDB) { - storage, err := d.storage.build() +func (d *deployment) deployStorage(cfg *params.ChainConfig, state StateDB) { + storage, err := d.storage.build(cfg) if err != nil { panic(fmt.Errorf("failed to build %s contract storage map: %s", d.contract.name, err.Error())) diff --git a/contracts/oasys/deployments0.go b/contracts/oasys/deployments0.go index 28fbafd0d..05ea0f41f 100644 --- a/contracts/oasys/deployments0.go +++ b/contracts/oasys/deployments0.go @@ -33,7 +33,7 @@ var deployments0 = []*deployment{ // string private _symbol "0x04": "SOAS", // address[] public allowedAddresses - "0x05": array{ + "0x05": &array{ values: map[int64]interface{}{ 0: StakeManagerAddress, 1: l1BuildDeposit.address, @@ -102,7 +102,7 @@ var deployments0 = []*deployment{ // address public agentAddress "0x03": l1BuildAgent.address, // address[] public allowedTokens - "0x04": array{ + "0x04": &array{ values: map[int64]interface{}{ 0: stakableOAS.address, }, @@ -209,14 +209,14 @@ var deployments0 = []*deployment{ storage: storage{ // mapping(address => address) internal administrators "0x00": genesismap{ - params.OasysMainnetGenesisHash: mapping{ + params.OasysMainnetGenesisHash: &mapping{ keyFn: addressKeyFn, values: map[string]interface{}{ "0x0000000000000000000000000000000000000001": "0x2273e9bD041d1405cB3f9DCa42fafC9358b07f79", "0x2273e9bD041d1405cB3f9DCa42fafC9358b07f79": "0x0000000000000000000000000000000000000001", }, }, - defaultGenesisHash: mapping{ + defaultGenesisHash: &mapping{ keyFn: addressKeyFn, values: map[string]interface{}{ "0x0000000000000000000000000000000000000001": "0x377b21b3D7d6F9B1dBf00176f96cCf4CABD100d2", diff --git a/contracts/oasys/deployments10.go b/contracts/oasys/deployments10.go index 88061547b..b61115640 100644 --- a/contracts/oasys/deployments10.go +++ b/contracts/oasys/deployments10.go @@ -13,7 +13,7 @@ var deployments10 = []*deployment{ code: mustDecodeCode(`0x6080604052600436106100b25760003560e01c806336568abe1161006f57806336568abe146101e55780634de79ecc1461020557806365ddb0171461021a57806391d148541461022d578063a217fddf1461024d578063d547741f14610262578063da58f37e1461028257600080fd5b806301ffc9a7146100b757806309b1eca6146100ec5780630b19429e14610124578063248a9ca3146101665780632a50c146146101965780632f2ff15d146101c3575b600080fd5b3480156100c357600080fd5b506100d76100d2366004610d98565b6102a2565b60405190151581526020015b60405180910390f35b3480156100f857600080fd5b5061010c610107366004610e65565b6102d9565b6040516001600160a01b0390911681526020016100e3565b34801561013057600080fd5b506101587f0d8b58cba732a42811e1f217ab43cccb14f1a8263ebb61afbf13838fcdae9df981565b6040519081526020016100e3565b34801561017257600080fd5b50610158610181366004610eac565b60009081526020819052604090206001015490565b3480156101a257600080fd5b506101b66101b1366004610edc565b6102f4565b6040516100e39190610f47565b3480156101cf57600080fd5b506101e36101de366004610f8a565b610433565b005b3480156101f157600080fd5b506101e3610200366004610f8a565b61045d565b34801561021157600080fd5b50600154610158565b61010c610228366004610fb6565b6104db565b34801561023957600080fd5b506100d7610248366004610f8a565b610614565b34801561025957600080fd5b50610158600081565b34801561026e57600080fd5b506101e361027d366004610f8a565b61063d565b34801561028e57600080fd5b506101b661029d366004610eac565b610662565b60006001600160e01b03198216637965db0b60e01b14806102d357506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006102ed838380519060200120306107ca565b9392505050565b604080516060808201835260008083526020830152918101919091526001600160a01b0380831660009081526002602081815260409283902083516060810185528154861681526001820154909516918501919091529081018054919284019161035d90611070565b80601f016020809104026020016040519081016040528092919081815260200182805461038990611070565b80156103d65780601f106103ab576101008083540402835291602001916103d6565b820191906000526020600020905b8154815290600101906020018083116103b957829003601f168201915b5050509190925250505060208101519091506001600160a01b031661042e5760405162461bcd60e51b81526020600482015260096024820152681b9bdd08199bdd5b9960ba1b60448201526064015b60405180910390fd5b919050565b60008281526020819052604090206001015461044e816107f4565b6104588383610801565b505050565b6001600160a01b03811633146104cd5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610425565b6104d78282610885565b5050565b60007f0d8b58cba732a42811e1f217ab43cccb14f1a8263ebb61afbf13838fcdae9df9610507816107f4565b8734146105565760405162461bcd60e51b815260206004820152601a60248201527f5043433a20696e636f727265637420616d6f756e742073656e740000000000006044820152606401610425565b6105618888886108ea565b9150846001600160a01b0316826001600160a01b0316146105be5760405162461bcd60e51b81526020600482015260176024820152765043433a20756e6578706563746564206164647265737360481b6044820152606401610425565b7f388d923fb867b31389c9da49a5a9b552bd44cde0717beb38a215d99ef09778db33898989866040516105f59594939291906110aa565b60405180910390a1610609823386866109ea565b509695505050505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600082815260208190526040902060010154610658816107f4565b6104588383610885565b6040805160608082018352600080835260208301529181019190915260015461068c836001611103565b11156106cf5760405162461bcd60e51b8152602060048201526012602482015271696e646578206f7574206f662072616e676560701b6044820152606401610425565b60026000600184815481106106e6576106e6611116565b60009182526020808320909101546001600160a01b0390811684528382019490945260409283019091208251606081018452815485168152600182015490941691840191909152600281018054919284019161074190611070565b80601f016020809104026020016040519081016040528092919081815260200182805461076d90611070565b80156107ba5780601f1061078f576101008083540402835291602001916107ba565b820191906000526020600020905b81548152906001019060200180831161079d57829003601f168201915b5050505050815250509050919050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6107fe8133610b91565b50565b61080b8282610614565b6104d7576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556108413390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61088f8282610614565b156104d7576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008347101561093c5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610425565b815160000361098d5760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610425565b8282516020840186f590506001600160a01b0381166102ed5760405162461bcd60e51b8152602060048201526019602482015278437265617465323a204661696c6564206f6e206465706c6f7960381b6044820152606401610425565b6001600160a01b038481166000908152600260205260409020600101541615610a4a5760405162461bcd60e51b8152602060048201526012602482015271185b1c9958591e481c9959da5cdd195c995960721b6044820152606401610425565b826001600160a01b03167f8d3f2558914d24d1627609279aec4a8b1033bb2e86f4fc8118aba14785e3fc39858484604051610a879392919061112c565b60405180910390a26001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b03868116918217909255604080516060810182529182529185166020808301919091528251601f85018290048202810182018452848152919283019190859085908190840183828082843760009201829052509390945250506001600160a01b03808816825260026020818152604093849020865181549085166001600160a01b031991821617825591870151600182018054919095169216919091179092559184015190925090820190610b8890826111ba565b50505050505050565b610b9b8282610614565b6104d757610ba881610bea565b610bb3836020610bfc565b604051602001610bc492919061127a565b60408051601f198184030181529082905262461bcd60e51b8252610425916004016112e9565b60606102d36001600160a01b03831660145b60606000610c0b8360026112fc565b610c16906002611103565b67ffffffffffffffff811115610c2e57610c2e610dc2565b6040519080825280601f01601f191660200182016040528015610c58576020820181803683370190505b509050600360fc1b81600081518110610c7357610c73611116565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610ca257610ca2611116565b60200101906001600160f81b031916908160001a9053506000610cc68460026112fc565b610cd1906001611103565b90505b6001811115610d49576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610d0557610d05611116565b1a60f81b828281518110610d1b57610d1b611116565b60200101906001600160f81b031916908160001a90535060049490941c93610d4281611313565b9050610cd4565b5083156102ed5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610425565b600060208284031215610daa57600080fd5b81356001600160e01b0319811681146102ed57600080fd5b634e487b7160e01b600052604160045260246000fd5b600082601f830112610de957600080fd5b813567ffffffffffffffff80821115610e0457610e04610dc2565b604051601f8301601f19908116603f01168101908282118183101715610e2c57610e2c610dc2565b81604052838152866020858801011115610e4557600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215610e7857600080fd5b82359150602083013567ffffffffffffffff811115610e9657600080fd5b610ea285828601610dd8565b9150509250929050565b600060208284031215610ebe57600080fd5b5035919050565b80356001600160a01b038116811461042e57600080fd5b600060208284031215610eee57600080fd5b6102ed82610ec5565b60005b83811015610f12578181015183820152602001610efa565b50506000910152565b60008151808452610f33816020860160208601610ef7565b601f01601f19169290920160200192915050565b60208152600060018060a01b03808451166020840152806020850151166040840152506040830151606080840152610f826080840182610f1b565b949350505050565b60008060408385031215610f9d57600080fd5b82359150610fad60208401610ec5565b90509250929050565b60008060008060008060a08789031215610fcf57600080fd5b8635955060208701359450604087013567ffffffffffffffff80821115610ff557600080fd5b6110018a838b01610dd8565b955061100f60608a01610ec5565b9450608089013591508082111561102557600080fd5b818901915089601f83011261103957600080fd5b81358181111561104857600080fd5b8a602082850101111561105a57600080fd5b6020830194508093505050509295509295509295565b600181811c9082168061108457607f821691505b6020821081036110a457634e487b7160e01b600052602260045260246000fd5b50919050565b600060018060a01b03808816835286602084015285604084015260a060608401526110d860a0840186610f1b565b91508084166080840152509695505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102d3576102d36110ed565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b601f82111561045857600081815260208120601f850160051c810160208610156111935750805b601f850160051c820191505b818110156111b25782815560010161119f565b505050505050565b815167ffffffffffffffff8111156111d4576111d4610dc2565b6111e8816111e28454611070565b8461116c565b602080601f83116001811461121d57600084156112055750858301515b600019600386901b1c1916600185901b1785556111b2565b600085815260208120601f198616915b8281101561124c5788860151825594840194600190910190840161122d565b508582101561126a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516112ac816017850160208801610ef7565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516112dd816028840160208801610ef7565b01602801949350505050565b6020815260006102ed6020830184610f1b565b80820281158282048414176102d3576102d36110ed565b600081611322576113226110ed565b50600019019056fea26469706673582212206921a9f7c5bb12866f25cbc8403a852dd261b38e2deb870825f95c96e3b64db864736f6c63430008120033`), storage: storage{ // mapping(bytes32 => RoleData) private _roles - "0x00": mapping{ + "0x00": &mapping{ keyFn: func(key string) common.Hash { if key == "DEFAULT_ADMIN_ROLE" { return common.Hash{} @@ -21,16 +21,16 @@ var deployments10 = []*deployment{ return common.BytesToHash(crypto.Keccak256([]byte(key))) }, values: map[string]interface{}{ - "DEFAULT_ADMIN_ROLE": structValue{ + "DEFAULT_ADMIN_ROLE": structvalue{ // mapping(address => bool) members genesismap{ - params.OasysMainnetGenesisHash: mapping{ + params.OasysMainnetGenesisHash: &mapping{ keyFn: addressKeyFn, values: map[string]interface{}{ "0xe04EEaCb1f181cD23501f3De39014F4cbb7C1Cd8": "0x1", }, }, - params.OasysTestnetGenesisHash: mapping{ + params.OasysTestnetGenesisHash: &mapping{ keyFn: addressKeyFn, values: map[string]interface{}{ "0xbe32b47A35C31d294B3c58d92ca83876DdC38776": "0x1", @@ -38,16 +38,16 @@ var deployments10 = []*deployment{ }, }, }, - "CONTRACT_CREATOR_ROLE": structValue{ + "CONTRACT_CREATOR_ROLE": structvalue{ // mapping(address => bool) members genesismap{ - params.OasysMainnetGenesisHash: mapping{ + params.OasysMainnetGenesisHash: &mapping{ keyFn: addressKeyFn, values: map[string]interface{}{ "0xc0bACBDA16Bb494d8C5be6DE84540465Fd83333E": "0x1", }, }, - params.OasysTestnetGenesisHash: mapping{ + params.OasysTestnetGenesisHash: &mapping{ keyFn: addressKeyFn, values: map[string]interface{}{ "0xBb5a4FF43683a1281800A6Bc8a94365f055F444F": "0x1", diff --git a/contracts/oasys/deployments11.go b/contracts/oasys/deployments11.go index 0efecb7b5..290675954 100644 --- a/contracts/oasys/deployments11.go +++ b/contracts/oasys/deployments11.go @@ -1,10 +1,45 @@ package oasys +import ( + "github.com/ethereum/go-ethereum/params" +) + var deployments11 = []*deployment{ { // commit: https://github.com/ironbeer/oasys-genesis-contract/blob/4b5025986137ce4453b7e585bfa7bb6ad2a05e25/contracts/Environment.sol contract: environment, code: mustDecodeCode(`0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063900cf0cf11610071578063900cf0cf146101b9578063b4c2f727146101cf578063bd4eff19146101e2578063ccfb9935146101f5578063d4a53686146101fd578063fcbb371b1461020557600080fd5b806308a54356146100ae578063158ef93e146100c35780633fa4f245146100e55780634ba7ed391461015a5780635e383d2114610162575b600080fd5b6100c16100bc366004610e82565b610218565b005b6000546100d09060ff1681565b60405190151581526020015b60405180910390f35b6100ed61027e565b6040516100dc9190600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525092915050565b6100d06102f6565b610175610170366004610efd565b610327565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e0830152610100820152610120016100dc565b6101c1610385565b6040519081526020016100dc565b6101c16101dd366004610efd565b61039c565b6100c16101f0366004610e82565b6103bd565b6100ed61047e565b6100d0610563565b6100ed610213366004610efd565b61058e565b33411461023857604051631cf4735960e01b815260040160405180910390fd5b60005460ff161561025b5760405162dc149f60e41b815260040160405180910390fd5b6000805460ff191660019081178255908252602082015261027b8161060c565b50565b610286610dfe565b61028e6108d5565b604080516101208101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152600890910154610100820152919050565b6000806103016108d5565b60038101548154919250906103169043610f2c565b6103209190610f59565b1592915050565b6002818154811061033757600080fd5b90600052602060002090600902016000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080154905089565b60006103976103926108d5565b610907565b905090565b600181815481106103ac57600080fd5b600091825260209091200154905081565b3341146103dd57604051631cf4735960e01b815260040160405180910390fd5b6103e5610563565b1561040357604051631e59ccd960e01b815260040160405180910390fd5b61040b610385565b81602001511161042e57604051630eae4c9760e01b815260040160405180910390fd5b600061043861093b565b905061044681439054111590565b1561045c576104558183610979565b8252610471565b61046e826104686109b1565b90610979565b82525b61047a8261060c565b5050565b610486610dfe565b60006104906108d5565b9050600061049c61093b565b90506000826003015483600101546104b385610907565b6104bd9190610f2c565b6104c8906001610f6d565b6104d29190610f85565b83546104de9190610f6d565b90506104ec82829054111590565b6104f657826104f8565b815b604080516101208101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152600890910154610100820152949350505050565b60008061056e6108d5565b60038101548154919250906105839043610f2c565b610316906001610f6d565b610596610dfe565b6105a36001600284610a04565b604080516101208101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260089091015461010082015292915050565b61061581610aeb565b60015480158061065d575061065d436002610631600185610f2c565b8154811061064157610641610fa4565b906000526020600020906009020161097290919063ffffffff16565b1561081a57506020810180516001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6019190915560028054918201815560005282517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace60099092029182015590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf82015560408201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad082015560608201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad182015560808201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad282015560a08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad382015560c08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad482015560e08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad5820155610100909101517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad690910155565b6020820151600161082b8184610f2c565b8154811061083b5761083b610fa4565b600091825260209091200155816002610855600184610f2c565b8154811061086557610865610fa4565b9060005260206000209060090201600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007015561010082015181600801559050505050565b6000806108e061093b565b90506108ee81439054111590565b6108ff576108fa6109b1565b610901565b805b91505090565b600381015481546000919061091c9043610f2c565b6109269190610fba565b82600101546109359190610f6d565b92915050565b600280546000919061094f90600190610f2c565b8154811061095f5761095f610fa4565b9060005260206000209060090201905090565b9054111590565b60008260030154836001015483602001516109949190610f2c565b61099e9190610f85565b83546109aa9190610f6d565b9392505050565b60025460009060018114156109e85760026000815481106109d4576109d4610fa4565b906000526020600020906009020191505090565b60026109f48183610f2c565b815481106109d4576109d4610fa4565b82546000908285610a16600184610f2c565b81548110610a2657610a26610fa4565b906000526020600020015411610a685783610a42600183610f2c565b81548110610a5257610a52610fa4565b90600052602060002090600902019150506109aa565b600181118015610a9e57508285610a80600284610f2c565b81548110610a9057610a90610fa4565b906000526020600020015411155b15610aaf5783610a42600283610f2c565b6000610abe8685600085610d4b565b9050848181548110610ad257610ad2610fa4565b9060005260206000209060090201925050509392505050565b600181604001511015610b465760405163a1b63ceb60e01b815260206004820152601960248201527f626c6f636b506572696f6420697320746f6f20736d616c6c2e0000000000000060448201526064015b60405180910390fd5b600381606001511015610b9c5760405163a1b63ceb60e01b815260206004820152601960248201527f65706f6368506572696f6420697320746f6f20736d616c6c2e000000000000006044820152606401610b3d565b606481608001511115610bf25760405163a1b63ceb60e01b815260206004820152601860248201527f7265776172645261746520697320746f6f206c617267652e00000000000000006044820152606401610b3d565b60648160a001511115610c485760405163a1b63ceb60e01b815260206004820152601c60248201527f636f6d6d697373696f6e5261746520697320746f6f206c617267652e000000006044820152606401610b3d565b60018160c001511015610c9e5760405163a1b63ceb60e01b815260206004820181905260248201527f76616c696461746f725468726573686f6c6420697320746f6f20736d616c6c2e6044820152606401610b3d565b60018160e001511015610cf45760405163a1b63ceb60e01b815260206004820152601b60248201527f6a61696c5468726573686f6c6420697320746f6f20736d616c6c2e00000000006044820152606401610b3d565b6001816101000151101561027b5760405163a1b63ceb60e01b815260206004820152601860248201527f6a61696c506572696f6420697320746f6f20736d616c6c2e00000000000000006044820152606401610b3d565b600081831415610d6757610d60600183610f2c565b9050610df6565b60006002610d758486610f6d565b610d7f9190610fba565b905084868281548110610d9457610d94610fa4565b90600052602060002001541115610db957610db186868684610d4b565b915050610df6565b84868281548110610dcc57610dcc610fa4565b90600052602060002001541015610df357610db18686610ded846001610f6d565b86610d4b565b90505b949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051610120810167ffffffffffffffff81118282101715610e7c57634e487b7160e01b600052604160045260246000fd5b60405290565b60006101208284031215610e9557600080fd5b610e9d610e4a565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c082015260e083013560e08201526101008084013581830152508091505092915050565b600060208284031215610f0f57600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b600082821015610f3e57610f3e610f16565b500390565b634e487b7160e01b600052601260045260246000fd5b600082610f6857610f68610f43565b500690565b60008219821115610f8057610f80610f16565b500190565b6000816000190483118215151615610f9f57610f9f610f16565b500290565b634e487b7160e01b600052603260045260246000fd5b600082610fc957610fc9610f43565b50049056fea264697066735822122037767202f998a71461c6fd1f440560e015e745ebf87a689f7ca44aa0f1f791e664736f6c634300080c0033`), + storage: storage{ + // uint256[] public updates + "0x01": &array{ + length: 2, + values: map[int64]interface{}{ + 1: (chainconfig)(func(cfg *params.ChainConfig) interface{} { + return cfg.OasysShortenedBlockTimeStartEpoch() + }), + }, + }, + // EnvironmentValue[] public values + "0x02": &array{ + length: 2, + values: map[int64]interface{}{ + 1: (chainconfig)(func(cfg *params.ChainConfig) interface{} { + env := params.ShortenedBlockTimeEnvironmentValue(cfg) + return structvalue{ + env.StartBlock, + env.StartEpoch, + env.BlockPeriod, + env.EpochPeriod, + env.RewardRate, + env.CommissionRate, + env.ValidatorThreshold, + env.JailThreshold, + env.JailPeriod, + } + }), + }, + }, + }, }, { // commit: https://github.com/ironbeer/oasys-genesis-contract/blob/4b5025986137ce4453b7e585bfa7bb6ad2a05e25/contracts/StakeManager.sol diff --git a/contracts/oasys/deployments2.go b/contracts/oasys/deployments2.go index 85b713af6..337cbf7d3 100644 --- a/contracts/oasys/deployments2.go +++ b/contracts/oasys/deployments2.go @@ -19,7 +19,7 @@ var deployments2 = []*deployment{ "0x05": "0x1", // Pool > Pauser : mapping(address => bool) public pausers "0x07": genesismap{ - params.OasysMainnetGenesisHash: mapping{ + params.OasysMainnetGenesisHash: &mapping{ keyFn: addressKeyFn, values: map[string]interface{}{ "0x1b9dFC56e38b0F92448659C114e2347Bd803911c": "0x1", @@ -30,7 +30,7 @@ var deployments2 = []*deployment{ "0x1a0aEc0fC48F1B5cc538BE74A90E340b278189e4": "0x1", }, }, - defaultGenesisHash: mapping{ + defaultGenesisHash: &mapping{ keyFn: addressKeyFn, values: map[string]interface{}{ "0x58b529F9084D7eAA598EB3477Fe36064C5B7bbC1": "0x1", @@ -39,7 +39,7 @@ var deployments2 = []*deployment{ }, // Pool > VolumeControl > Governor : mapping(address => bool) public governors "0x08": genesismap{ - params.OasysMainnetGenesisHash: mapping{ + params.OasysMainnetGenesisHash: &mapping{ keyFn: addressKeyFn, values: map[string]interface{}{ "0x1b9dFC56e38b0F92448659C114e2347Bd803911c": "0x1", @@ -48,7 +48,7 @@ var deployments2 = []*deployment{ "0x8e9174ed59eA4b81E70d0aE0DE13242e2329106c": "0x1", }, }, - defaultGenesisHash: mapping{ + defaultGenesisHash: &mapping{ keyFn: addressKeyFn, values: map[string]interface{}{ "0x58b529F9084D7eAA598EB3477Fe36064C5B7bbC1": "0x1", @@ -74,7 +74,7 @@ var deployments2 = []*deployment{ }, // Pauser : mapping(address => bool) public pausers "0x02": genesismap{ - params.OasysMainnetGenesisHash: mapping{ + params.OasysMainnetGenesisHash: &mapping{ keyFn: addressKeyFn, values: map[string]interface{}{ "0x1b9dFC56e38b0F92448659C114e2347Bd803911c": "0x1", @@ -85,7 +85,7 @@ var deployments2 = []*deployment{ "0x1a0aEc0fC48F1B5cc538BE74A90E340b278189e4": "0x1", }, }, - defaultGenesisHash: mapping{ + defaultGenesisHash: &mapping{ keyFn: addressKeyFn, values: map[string]interface{}{ "0x58b529F9084D7eAA598EB3477Fe36064C5B7bbC1": "0x1", @@ -94,7 +94,7 @@ var deployments2 = []*deployment{ }, // VolumeControl > Governor : mapping(address => bool) public governors "0x03": genesismap{ - params.OasysMainnetGenesisHash: mapping{ + params.OasysMainnetGenesisHash: &mapping{ keyFn: addressKeyFn, values: map[string]interface{}{ "0x1b9dFC56e38b0F92448659C114e2347Bd803911c": "0x1", @@ -103,7 +103,7 @@ var deployments2 = []*deployment{ "0x8e9174ed59eA4b81E70d0aE0DE13242e2329106c": "0x1", }, }, - defaultGenesisHash: mapping{ + defaultGenesisHash: &mapping{ keyFn: addressKeyFn, values: map[string]interface{}{ "0x58b529F9084D7eAA598EB3477Fe36064C5B7bbC1": "0x1", @@ -127,7 +127,7 @@ var deployments2 = []*deployment{ }, // Pauser : mapping(address => bool) public pausers "0x01": genesismap{ - params.OasysMainnetGenesisHash: mapping{ + params.OasysMainnetGenesisHash: &mapping{ keyFn: addressKeyFn, values: map[string]interface{}{ "0x1b9dFC56e38b0F92448659C114e2347Bd803911c": "0x1", @@ -138,7 +138,7 @@ var deployments2 = []*deployment{ "0x1a0aEc0fC48F1B5cc538BE74A90E340b278189e4": "0x1", }, }, - defaultGenesisHash: mapping{ + defaultGenesisHash: &mapping{ keyFn: addressKeyFn, values: map[string]interface{}{ "0x58b529F9084D7eAA598EB3477Fe36064C5B7bbC1": "0x1", @@ -147,7 +147,7 @@ var deployments2 = []*deployment{ }, // VolumeControl > Governor : mapping(address => bool) public governors "0x02": genesismap{ - params.OasysMainnetGenesisHash: mapping{ + params.OasysMainnetGenesisHash: &mapping{ keyFn: addressKeyFn, values: map[string]interface{}{ "0x1b9dFC56e38b0F92448659C114e2347Bd803911c": "0x1", @@ -156,7 +156,7 @@ var deployments2 = []*deployment{ "0x8e9174ed59eA4b81E70d0aE0DE13242e2329106c": "0x1", }, }, - defaultGenesisHash: mapping{ + defaultGenesisHash: &mapping{ keyFn: addressKeyFn, values: map[string]interface{}{ "0x58b529F9084D7eAA598EB3477Fe36064C5B7bbC1": "0x1", diff --git a/contracts/oasys/deployments9.go b/contracts/oasys/deployments9.go index d6df875e8..19b03adb7 100644 --- a/contracts/oasys/deployments9.go +++ b/contracts/oasys/deployments9.go @@ -28,7 +28,7 @@ var deployments9 = []*deployment{ "0x00": candidateValidatorManager.address, // mapping(address => uint256) private _ids "0x01": genesismap{ - params.OasysMainnetGenesisHash: mapping{ + params.OasysMainnetGenesisHash: &mapping{ keyFn: addressKeyFn, values: map[string]interface{}{ "0x86652fE437425AC63211C55b6b067B3181BBcB17": big.NewInt(1), @@ -57,7 +57,7 @@ var deployments9 = []*deployment{ "0x4e5963c92bFE4De6f319b0859B2Efcf95267E3Ae": big.NewInt(24), }, }, - params.OasysTestnetGenesisHash: mapping{ + params.OasysTestnetGenesisHash: &mapping{ keyFn: addressKeyFn, values: map[string]interface{}{ "0xF886672205399c186638abfA9Dc155dEe9CBBD2e": big.NewInt(1), @@ -66,7 +66,7 @@ var deployments9 = []*deployment{ }, // address[] private _addresses "0x02": genesismap{ - params.OasysMainnetGenesisHash: array{ + params.OasysMainnetGenesisHash: &array{ values: map[int64]interface{}{ 0: "0x86652fE437425AC63211C55b6b067B3181BBcB17", 1: "0xa505014a84e8BdC4A620470A53EAd872b0c1CA5b", @@ -94,7 +94,7 @@ var deployments9 = []*deployment{ 23: "0x4e5963c92bFE4De6f319b0859B2Efcf95267E3Ae", }, }, - params.OasysTestnetGenesisHash: array{ + params.OasysTestnetGenesisHash: &array{ values: map[int64]interface{}{ 0: "0xF886672205399c186638abfA9Dc155dEe9CBBD2e", }, diff --git a/contracts/oasys/oasys.go b/contracts/oasys/oasys.go index 300221ac9..c3dac00b1 100644 --- a/contracts/oasys/oasys.go +++ b/contracts/oasys/oasys.go @@ -42,7 +42,7 @@ func Deploy(chainConfig *params.ChainConfig, state StateDB, block uint64) { if deploymentSet, ok := deploymentMap[block]; ok { for _, deployments := range deploymentSet { for _, d := range deployments { - d.deploy(state, block) + d.deploy(chainConfig, state, block) } } } diff --git a/contracts/oasys/oasys_test.go b/contracts/oasys/oasys_test.go index c4f9be7fe..b83902ab3 100644 --- a/contracts/oasys/oasys_test.go +++ b/contracts/oasys/oasys_test.go @@ -5,6 +5,7 @@ import ( "crypto/md5" "encoding/hex" "fmt" + "math/big" "testing" "github.com/ethereum/go-ethereum/common" @@ -1048,14 +1049,51 @@ func _deployments10(genesisHash common.Hash, contracts wantContracts) { } func _deployments11(genesisHash common.Hash, contracts wantContracts) { + // StakeManager + contracts["0x0000000000000000000000000000000000001001"].codeHash = "ea125544d254ee6a1129efb7d8a54a8e" + + // Environment contracts["0x0000000000000000000000000000000000001000"] = &wantContract{ name: "Environment", codeHash: "b5179d9d111d56ec8a1a865780cf5e91", - storage: map[string]string{}, } - // StakeManager - contracts["0x0000000000000000000000000000000000001001"].codeHash = "ea125544d254ee6a1129efb7d8a54a8e" + switch genesisHash { + case params.OasysMainnetGenesisHash, params.OasysTestnetGenesisHash: + contracts["0x0000000000000000000000000000000000001000"].storage = map[string]string{ + // uint256[] public updates + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7": "0x00000000000000000000000000000000000000000000000000000000000003e7", + // EnvironmentValue[] public values + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad7": "0x000000000000000000000000000000000000000000000000000000000057b700", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad8": "0x00000000000000000000000000000000000000000000000000000000000003e7", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad9": "0x0000000000000000000000000000000000000000000000000000000000000006", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ada": "0x0000000000000000000000000000000000000000000000000000000000003840", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5adb": "0x000000000000000000000000000000000000000000000000000000000000000a", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5adc": "0x000000000000000000000000000000000000000000000000000000000000000a", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5add": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ade": "0x00000000000000000000000000000000000000000000000000000000000001f4", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5adf": "0x0000000000000000000000000000000000000000000000000000000000000002", + } + default: + contracts["0x0000000000000000000000000000000000001000"].storage = map[string]string{ + // uint256[] public updates + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7": "0x000000000000000000000000000000000000000000000000000000000000000a", + // EnvironmentValue[] public values + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad7": "0x000000000000000000000000000000000000000000000000000000000000ca80", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad8": "0x000000000000000000000000000000000000000000000000000000000000000a", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad9": "0x000000000000000000000000000000000000000000000000000000000000000f", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ada": "0x0000000000000000000000000000000000000000000000000000000000001680", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5adb": "0x000000000000000000000000000000000000000000000000000000000000000a", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5adc": "0x000000000000000000000000000000000000000000000000000000000000000a", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5add": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ade": "0x00000000000000000000000000000000000000000000000000000000000001f4", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5adf": "0x0000000000000000000000000000000000000000000000000000000000000002", + } + } } func TestDeploy(t *testing.T) { @@ -1066,12 +1104,14 @@ func TestDeploy(t *testing.T) { testCases := []struct { network string + chainConfig *params.ChainConfig genesisHash common.Hash wants wantContracts wantDeployments wantDeployments }{ { "mainnet", + params.OasysMainnetChainConfig, params.OasysMainnetGenesisHash, wantContracts{}, wantDeployments{ @@ -1088,6 +1128,7 @@ func TestDeploy(t *testing.T) { }, { "testnet", + params.OasysTestnetChainConfig, params.OasysTestnetGenesisHash, wantContracts{}, wantDeployments{ @@ -1106,6 +1147,13 @@ func TestDeploy(t *testing.T) { }, { "others", + ¶ms.ChainConfig{ + ChainID: big.NewInt(12345), + Oasys: ¶ms.OasysConfig{ + Period: 15, + Epoch: 5760, + }, + }, common.Hash{}, wantContracts{}, wantDeployments{ @@ -1129,8 +1177,6 @@ func TestDeploy(t *testing.T) { for _, tc := range testCases { GenesisHash = tc.genesisHash - - chainConfig := ¶ms.ChainConfig{Oasys: ¶ms.OasysConfig{}} state := make(MockStateDB) for _, wantDeployment := range tc.wantDeployments { @@ -1139,7 +1185,7 @@ func TestDeploy(t *testing.T) { for _, deploy := range wantDeployment.deploy { deploy(tc.genesisHash, tc.wants) } - Deploy(chainConfig, state, wantDeployment.block) + Deploy(tc.chainConfig, state, wantDeployment.block) t.Run(testName, func(t *testing.T) { if len(state) != len(tc.wants) { diff --git a/contracts/oasys/storage.go b/contracts/oasys/storage.go index c9297bcbc..de930cd43 100644 --- a/contracts/oasys/storage.go +++ b/contracts/oasys/storage.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" ) const ( @@ -17,47 +18,77 @@ const ( hexPrefix = "0x" ) +// Represents Solidity storage type storage map[string]interface{} // Returns the contract storage slot map. // see: https://docs.soliditylang.org/en/v0.8.11/internals/layout_in_storage.html -func (s storage) build() (map[common.Hash]common.Hash, error) { +func (s storage) build(cfg *params.ChainConfig) (map[common.Hash]common.Hash, error) { storage := make(map[common.Hash]common.Hash) for slot, val := range s { - if err := setStorage(storage, common.HexToHash(slot), val); err != nil { + if err := setStorage(cfg, storage, common.HexToHash(slot), val); err != nil { return nil, err } } return storage, nil } +// Non-primitive values in Solidity(such as array,mapping,struct) +type dynamicSlotValue interface { + apply(cfg *params.ChainConfig, storage map[common.Hash]common.Hash, rootSlot common.Hash) error +} + // Different storage values for each genesis. type genesismap map[common.Hash]interface{} // Add values to storage. -func (g genesismap) add(storage map[common.Hash]common.Hash, rootSlot common.Hash) error { +func (g genesismap) apply(cfg *params.ChainConfig, storage map[common.Hash]common.Hash, rootSlot common.Hash) error { if val, ok := g[GenesisHash]; ok { - return setStorage(storage, rootSlot, val) + return setStorage(cfg, storage, rootSlot, val) } if val, ok := g[defaultGenesisHash]; ok { - return setStorage(storage, rootSlot, val) + return setStorage(cfg, storage, rootSlot, val) } return nil } +// Returns storage values based on the chain configuration. +type chainconfig func(cfg *params.ChainConfig) interface{} + +func (fn chainconfig) apply(cfg *params.ChainConfig, storage map[common.Hash]common.Hash, rootSlot common.Hash) error { + return setStorage(cfg, storage, rootSlot, fn(cfg)) +} + // `array` type storage. -type array []interface{} +// If `length` is explicitly specified, it will be written to the root slot. +// Otherwise, the length of values will be written. +type array struct { + length int64 + values map[int64]interface{} +} // Add array values to storage. -func (a *array) add(storage map[common.Hash]common.Hash, rootSlot common.Hash) error { - storage[rootSlot] = common.BigToHash(big.NewInt(int64(len(*a)))) +func (a *array) apply(cfg *params.ChainConfig, storage map[common.Hash]common.Hash, rootSlot common.Hash) error { + length := a.length + if length == 0 { + length = int64(len(a.values)) + } + storage[rootSlot] = common.BigToHash(big.NewInt(length)) + + startSlot := new(big.Int).SetBytes(crypto.Keccak256(rootSlot.Bytes())) + for index, val := range a.values { + offset := index - slot := new(big.Int).SetBytes(crypto.Keccak256(rootSlot.Bytes())) - for _, val := range *a { - if err := setStorage(storage, common.BigToHash(slot), val); err != nil { + // When the value is a struct, the starting slot will be + // `index + number of slots used by struct` + if size := structSize(cfg, val); size > 0 { + offset *= size + } + + slot := new(big.Int).Add(startSlot, big.NewInt(offset)) + if err := setStorage(cfg, storage, common.BigToHash(slot), val); err != nil { return err } - slot.Add(slot, common.Big1) } return nil @@ -74,11 +105,11 @@ var ( ) // Add mapping values to storage. -func (m *mapping) add(storage map[common.Hash]common.Hash, rootSlot common.Hash) error { +func (m *mapping) apply(cfg *params.ChainConfig, storage map[common.Hash]common.Hash, rootSlot common.Hash) error { for mkey, mval := range m.values { k := bytes.Join([][]byte{m.keyFn(mkey).Bytes(), rootSlot[:]}, nil) slot := common.BytesToHash(crypto.Keccak256(k)) - if err := setStorage(storage, slot, mval); err != nil { + if err := setStorage(cfg, storage, slot, mval); err != nil { return err } } @@ -87,16 +118,13 @@ func (m *mapping) add(storage map[common.Hash]common.Hash, rootSlot common.Hash) } // `struct` type value. -type structValue []struct { - pos int64 - value interface{} -} +type structvalue []interface{} // Add members to storage. -func (s structValue) add(storage map[common.Hash]common.Hash, rootSlot common.Hash) error { - for _, member := range s { - memberSlot := new(big.Int).Add(rootSlot.Big(), big.NewInt(member.pos)) - if err := setStorage(storage, common.BigToHash(memberSlot), member.value); err != nil { +func (s structvalue) apply(cfg *params.ChainConfig, storage map[common.Hash]common.Hash, rootSlot common.Hash) error { + for pos, member := range s { + memberSlot := new(big.Int).Add(rootSlot.Big(), big.NewInt(int64(pos))) + if err := setStorage(cfg, storage, common.BigToHash(memberSlot), member); err != nil { return err } } @@ -104,7 +132,7 @@ func (s structValue) add(storage map[common.Hash]common.Hash, rootSlot common.Ha return nil } -func setStorage(storage map[common.Hash]common.Hash, slot common.Hash, val interface{}) error { +func setStorage(cfg *params.ChainConfig, storage map[common.Hash]common.Hash, slot common.Hash, val interface{}) error { switch t := val.(type) { case common.Hash: storage[slot] = t @@ -112,14 +140,6 @@ func setStorage(storage map[common.Hash]common.Hash, slot common.Hash, val inter storage[slot] = common.BytesToHash(t.Bytes()) case *big.Int: storage[slot] = common.BigToHash(t) - case array: - return t.add(storage, slot) - case mapping: - return t.add(storage, slot) - case genesismap: - return t.add(storage, slot) - case structValue: - return t.add(storage, slot) case string: isHex := strings.HasPrefix(t, hexPrefix) if isHex { @@ -141,6 +161,8 @@ func setStorage(storage map[common.Hash]common.Hash, slot common.Hash, val inter storage[chunkSlot] = common.HexToHash(chunk) } } + case dynamicSlotValue: + return t.apply(cfg, storage, slot) default: return fmt.Errorf("unsupported type: %s, slot: %s", t, slot.String()) } @@ -168,3 +190,13 @@ func rightZeroPad(s string, l int) string { func leftZeroPad(s string, l int) string { return strings.Repeat("0", l-len(s)) + s } + +func structSize(cfg *params.ChainConfig, val interface{}) int64 { + if t, ok := val.(chainconfig); ok { + val = t(cfg) + } + if t, ok := val.(structvalue); ok { + return int64(len(t)) + } + return 0 +} From c1ed3c6ab83dc22ee52ce7f3743d2c4692e0c66d Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Mon, 19 Aug 2024 14:59:41 +0900 Subject: [PATCH 21/29] Add EnvironmentValue test --- params/oasys_test.go | 138 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 params/oasys_test.go diff --git a/params/oasys_test.go b/params/oasys_test.go new file mode 100644 index 000000000..776169d67 --- /dev/null +++ b/params/oasys_test.go @@ -0,0 +1,138 @@ +package params + +import ( + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/common" +) + +func TestEnvironmentValue(t *testing.T) { + env := &EnvironmentValue{ + StartBlock: common.Big0, + StartEpoch: common.Big1, + BlockPeriod: big.NewInt(15), + EpochPeriod: big.NewInt(5760), + RewardRate: big.NewInt(10), + CommissionRate: big.NewInt(10), + ValidatorThreshold: new(big.Int).Mul(big.NewInt(Ether), big.NewInt(10_000_000)), + JailThreshold: big.NewInt(500), + JailPeriod: big.NewInt(2), + } + + newVal := env.Copy() + newVal.StartEpoch = big.NewInt(3) + newVal.StartBlock = new(big.Int).SetUint64(env.NewValueStartBlock(newVal.StartEpoch.Uint64())) + + // epoch 1 + for i, number := range []uint64{0, 1, 2, 5757, 5758, 5759} { + if got := env.IsEpoch(number); (i == 0 && !got) || (i != 0 && got) { + t.Errorf("IsEpoch(%d): should be %v", number, !got) + } + if got := env.Epoch(number); got != 1 { + t.Errorf("Epoch(%d): want=1 got=%d", number, got) + } + if got := env.GetFirstBlock(number); got != 0 { + t.Errorf("GetFirstBlock(%d): want=0 got=%d", number, got) + } + if got := env.NewValueStartBlock(newVal.StartEpoch.Uint64()); got != 11520 { + t.Errorf("NewValueStartBlock(%d): want=11520 got=%d", number, got) + } + } + // epoch 2 + for i, number := range []uint64{5760, 5761, 5762, 11517, 11518, 11519} { + if got := env.IsEpoch(number); (i == 0 && !got) || (i != 0 && got) { + t.Errorf("IsEpoch(%d): should be %v", number, !got) + } + if got := env.Epoch(number); got != 2 { + t.Errorf("Epoch(%d): want=2 got=%d", number, got) + } + if got := env.GetFirstBlock(number); got != 5760 { + t.Errorf("GetFirstBlock(%d): want=5760 got=%d", number, got) + } + if got := env.NewValueStartBlock(newVal.StartEpoch.Uint64()); got != 11520 { + t.Errorf("NewValueStartBlock(%d): want=11520 got=%d", number, got) + } + } + // epoch 3 + for i, number := range []uint64{11520, 11521, 11522, 17277, 17278, 17279} { + if got := env.IsEpoch(number); (i == 0 && !got) || (i != 0 && got) { + t.Errorf("IsEpoch(%d): should be %v", number, !got) + } + if got := env.Epoch(number); got != 3 { + t.Errorf("Epoch(%d): want=3 got=%d", number, got) + } + if got := env.GetFirstBlock(number); got != 11520 { + t.Errorf("GetFirstBlock(%d): want=11520 got=%d", number, got) + } + if got := env.NewValueStartBlock(newVal.StartEpoch.Uint64()); got != 11520 { + t.Errorf("NewValueStartBlock(%d): want=11520 got=%d", number, got) + } + + if got := newVal.IsEpoch(number); (i == 0 && !got) || (i != 0 && got) { + t.Errorf("IsEpoch(%d): should be %v", number, !got) + } + if got := newVal.Epoch(number); got != 3 { + t.Errorf("Epoch(%d): want=3 got=%d", number, got) + } + if got := newVal.GetFirstBlock(number); got != 11520 { + t.Errorf("GetFirstBlock(%d): want=11520 got=%d", number, got) + } + } +} + +func TestNewEnvironmentValue(t *testing.T) { + compare := func(got, want *EnvironmentValue) { + if got.StartBlock.Cmp(want.StartBlock) != 0 { + t.Errorf("StartBlock: want=%d got=%d", want.StartBlock, got.StartBlock) + } + if got.StartEpoch.Cmp(want.StartEpoch) != 0 { + t.Errorf("StartEpoch: want=%d got=%d", want.StartEpoch, got.StartEpoch) + } + if got.BlockPeriod.Cmp(want.BlockPeriod) != 0 { + t.Errorf("BlockPeriod: want=%d got=%d", want.BlockPeriod, got.BlockPeriod) + } + if got.EpochPeriod.Cmp(want.EpochPeriod) != 0 { + t.Errorf("EpochPeriod: want=%d got=%d", want.EpochPeriod, got.EpochPeriod) + } + if got.RewardRate.Cmp(want.RewardRate) != 0 { + t.Errorf("RewardRate: want=%d got=%d", want.RewardRate, got.RewardRate) + } + if got.CommissionRate.Cmp(want.CommissionRate) != 0 { + t.Errorf("CommissionRate: want=%d got=%d", want.CommissionRate, got.CommissionRate) + } + if got.ValidatorThreshold.Cmp(want.ValidatorThreshold) != 0 { + t.Errorf("ValidatorThreshold: want=%d got=%d", want.ValidatorThreshold, got.ValidatorThreshold) + } + if got.JailThreshold.Cmp(want.JailThreshold) != 0 { + t.Errorf("JailThreshold: want=%d got=%d", want.JailThreshold, got.JailThreshold) + } + if got.JailPeriod.Cmp(want.JailPeriod) != 0 { + t.Errorf("JailPeriod: want=%d got=%d", want.JailPeriod, got.JailPeriod) + } + } + + compare(InitialEnvironmentValue(OasysMainnetChainConfig), &EnvironmentValue{ + StartBlock: common.Big0, + StartEpoch: common.Big1, + BlockPeriod: big.NewInt(15), + EpochPeriod: big.NewInt(5760), + RewardRate: big.NewInt(10), + CommissionRate: big.NewInt(10), + ValidatorThreshold: new(big.Int).Mul(big.NewInt(Ether), big.NewInt(10_000_000)), + JailThreshold: big.NewInt(500), + JailPeriod: big.NewInt(2), + }) + + compare(ShortenedBlockTimeEnvironmentValue(OasysMainnetChainConfig), &EnvironmentValue{ + StartBlock: big.NewInt(5748480), + StartEpoch: big.NewInt(999), + BlockPeriod: big.NewInt(6), + EpochPeriod: big.NewInt(14400), + RewardRate: big.NewInt(10), + CommissionRate: big.NewInt(10), + ValidatorThreshold: new(big.Int).Mul(big.NewInt(Ether), big.NewInt(10_000_000)), + JailThreshold: big.NewInt(500), + JailPeriod: big.NewInt(2), + }) +} From 471e244ca91235a9b3685ba537510d9634763de9 Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Mon, 19 Aug 2024 18:25:41 +0900 Subject: [PATCH 22/29] =?UTF-8?q?Fixed=20=E2=80=9Cunauthorized=20validator?= =?UTF-8?q?=E2=80=9D=20error=20after=20one=20epoch=20after=20new=20environ?= =?UTF-8?q?ment=20values=20are=20switched?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- consensus/oasys/snapshot.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/consensus/oasys/snapshot.go b/consensus/oasys/snapshot.go index a483f324e..e0146c843 100644 --- a/consensus/oasys/snapshot.go +++ b/consensus/oasys/snapshot.go @@ -129,7 +129,7 @@ func (s *Snapshot) apply(headers []*types.Header, chain consensus.ChainHeaderRea } var exists bool - if number > 0 && number%snap.Environment.EpochPeriod.Uint64() == 0 { + if number > 0 && snap.Environment.IsEpoch(number) { nextValidator, err := getNextValidators(s.config, s.ethAPI, header.ParentHash, snap.Environment.Epoch(number), number) if err != nil { log.Error("Failed to get validators", "in", "Snapshot.apply", "hash", header.ParentHash, "number", number, "err", err) From 3a2689064d4df960317b3871eabe900fd0ed2165 Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Mon, 19 Aug 2024 19:36:14 +0900 Subject: [PATCH 23/29] Change version label --- params/version.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/params/version.go b/params/version.go index a68d4a127..f35fa1d8c 100644 --- a/params/version.go +++ b/params/version.go @@ -22,8 +22,8 @@ import ( const ( VersionMajor = 1 // Major version component of the current release - VersionMinor = 4 // Minor version component of the current release - VersionPatch = 2 // Patch version component of the current release + VersionMinor = 5 // Minor version component of the current release + VersionPatch = 0 // Patch version component of the current release VersionMeta = "" // Version metadata to append to the version string ) From e9c26a356d6151d54029dd46b0adcb4b957cb744 Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Mon, 19 Aug 2024 19:37:44 +0900 Subject: [PATCH 24/29] Change chain config description --- params/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/params/config.go b/params/config.go index 462500599..b3f0f11ee 100644 --- a/params/config.go +++ b/params/config.go @@ -475,7 +475,7 @@ func (c *ChainConfig) Description() string { banner += fmt.Sprintf(" - Oasys Extend Difficulty: #%-8v (https://github.com/oasysgames/oasys-validator/releases/tag/v1.3.0)\n", c.OasysExtendDifficultyBlock()) } if c.OasysShortenedBlockTimeStartEpoch() != nil { - banner += fmt.Sprintf(" - Oasys Shorten BlockTime: Epoch#%-3v (https://github.com/oasysgames/oasys-validator/releases/tag/v1.4.2)\n", c.OasysShortenedBlockTimeStartEpoch()) + banner += fmt.Sprintf(" - Oasys Shorten BlockTime: Epoch#%-3v (https://github.com/oasysgames/oasys-validator/releases/tag/v1.5.0)\n", c.OasysShortenedBlockTimeStartEpoch()) } if c.ShanghaiTime != nil { banner += fmt.Sprintf(" - Shanghai: @%-10v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/shanghai.md)\n", *c.ShanghaiTime) From 287eee78f54ffb13958ee5f8b1755295d5174bc2 Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Tue, 20 Aug 2024 02:00:27 +0900 Subject: [PATCH 25/29] Improved storage deployments --- consensus/oasys/contract.go | 2 +- consensus/oasys/oasys.go | 4 +-- contracts/oasys/deployments11.go | 42 ++++++++++++++++++++------------ contracts/oasys/oasys_test.go | 4 +-- contracts/oasys/storage.go | 36 ++++++++++++++++++--------- params/config.go | 6 ++--- params/oasys.go | 31 +++++++++-------------- 7 files changed, 71 insertions(+), 54 deletions(-) diff --git a/consensus/oasys/contract.go b/consensus/oasys/contract.go index e816bfefb..b4ee65469 100644 --- a/consensus/oasys/contract.go +++ b/consensus/oasys/contract.go @@ -241,7 +241,7 @@ func (c *Oasys) initializeSystemContracts( if !environment.verifyCode(state) { return errors.New("invalid contract code: Environment") } - data, err := environment.abi.Pack("initialize", params.InitialEnvironmentValue(c.chainConfig)) + data, err := environment.abi.Pack("initialize", params.InitialEnvironmentValue(c.config)) if err != nil { return err } diff --git a/consensus/oasys/oasys.go b/consensus/oasys/oasys.go index bbf902171..ac5b9df08 100644 --- a/consensus/oasys/oasys.go +++ b/consensus/oasys/oasys.go @@ -419,7 +419,7 @@ func (c *Oasys) snapshot(chain consensus.ChainHeaderReader, number uint64, hash } snap = newSnapshot(c.chainConfig, c.signatures, c.ethAPI, - number, hash, validators, params.InitialEnvironmentValue(c.chainConfig)) + number, hash, validators, params.InitialEnvironmentValue(c.config)) if err := snap.store(c.db); err != nil { return nil, err } @@ -1016,7 +1016,7 @@ func (c *Oasys) addBalanceToStakeManager(state *state.StateDB, hash common.Hash, func (c *Oasys) environment(chain consensus.ChainHeaderReader, header *types.Header, parents []*types.Header) (*params.EnvironmentValue, error) { number := header.Number.Uint64() if number < c.config.Epoch { - return params.InitialEnvironmentValue(c.chainConfig), nil + return params.InitialEnvironmentValue(c.config), nil } snap, err := c.snapshot(chain, number-1, header.ParentHash, parents) diff --git a/contracts/oasys/deployments11.go b/contracts/oasys/deployments11.go index 290675954..544e8bcd4 100644 --- a/contracts/oasys/deployments11.go +++ b/contracts/oasys/deployments11.go @@ -1,6 +1,8 @@ package oasys import ( + "math/big" + "github.com/ethereum/go-ethereum/params" ) @@ -14,29 +16,39 @@ var deployments11 = []*deployment{ "0x01": &array{ length: 2, values: map[int64]interface{}{ - 1: (chainconfig)(func(cfg *params.ChainConfig) interface{} { - return cfg.OasysShortenedBlockTimeStartEpoch() - }), + 1: genesismap{ + params.OasysMainnetGenesisHash: big.NewInt(params.SHORT_BLOCK_TIME_FORK_EPOCH_MAINNET), + params.OasysTestnetGenesisHash: big.NewInt(params.SHORT_BLOCK_TIME_FORK_EPOCH_TESTNET), + defaultGenesisHash: big.NewInt(params.SHORT_BLOCK_TIME_FORK_EPOCH_OTHERS), + }, }, }, // EnvironmentValue[] public values "0x02": &array{ length: 2, values: map[int64]interface{}{ - 1: (chainconfig)(func(cfg *params.ChainConfig) interface{} { - env := params.ShortenedBlockTimeEnvironmentValue(cfg) + 1: func(cfg *params.ChainConfig) interface{} { + initial := params.InitialEnvironmentValue(cfg.Oasys) + + updated := initial.Copy() + updated.StartEpoch = cfg.OasysShortenedBlockTimeStartEpoch() + updated.StartBlock = new(big.Int).SetUint64( + initial.NewValueStartBlock(updated.StartEpoch.Uint64())) + updated.BlockPeriod = big.NewInt(params.SHORT_BLOCK_TIME_SECONDS) + updated.EpochPeriod = big.NewInt(params.SHORT_BLOCK_TIME_EPOCH_PERIOD) + return structvalue{ - env.StartBlock, - env.StartEpoch, - env.BlockPeriod, - env.EpochPeriod, - env.RewardRate, - env.CommissionRate, - env.ValidatorThreshold, - env.JailThreshold, - env.JailPeriod, + updated.StartBlock, + updated.StartEpoch, + updated.BlockPeriod, + updated.EpochPeriod, + updated.RewardRate, + updated.CommissionRate, + updated.ValidatorThreshold, + updated.JailThreshold, + updated.JailPeriod, } - }), + }, }, }, }, diff --git a/contracts/oasys/oasys_test.go b/contracts/oasys/oasys_test.go index b83902ab3..4138d9d1b 100644 --- a/contracts/oasys/oasys_test.go +++ b/contracts/oasys/oasys_test.go @@ -1085,8 +1085,8 @@ func _deployments11(genesisHash common.Hash, contracts wantContracts) { "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000002", "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad7": "0x000000000000000000000000000000000000000000000000000000000000ca80", "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad8": "0x000000000000000000000000000000000000000000000000000000000000000a", - "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad9": "0x000000000000000000000000000000000000000000000000000000000000000f", - "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ada": "0x0000000000000000000000000000000000000000000000000000000000001680", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad9": "0x0000000000000000000000000000000000000000000000000000000000000006", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ada": "0x0000000000000000000000000000000000000000000000000000000000003840", "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5adb": "0x000000000000000000000000000000000000000000000000000000000000000a", "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5adc": "0x000000000000000000000000000000000000000000000000000000000000000a", "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5add": "0x000000000000000000000000000000000000000000084595161401484a000000", diff --git a/contracts/oasys/storage.go b/contracts/oasys/storage.go index de930cd43..e362e2469 100644 --- a/contracts/oasys/storage.go +++ b/contracts/oasys/storage.go @@ -43,20 +43,21 @@ type genesismap map[common.Hash]interface{} // Add values to storage. func (g genesismap) apply(cfg *params.ChainConfig, storage map[common.Hash]common.Hash, rootSlot common.Hash) error { - if val, ok := g[GenesisHash]; ok { - return setStorage(cfg, storage, rootSlot, val) - } - if val, ok := g[defaultGenesisHash]; ok { + if val := g.value(); val != nil { return setStorage(cfg, storage, rootSlot, val) } return nil } -// Returns storage values based on the chain configuration. -type chainconfig func(cfg *params.ChainConfig) interface{} - -func (fn chainconfig) apply(cfg *params.ChainConfig, storage map[common.Hash]common.Hash, rootSlot common.Hash) error { - return setStorage(cfg, storage, rootSlot, fn(cfg)) +// Return the mapped value. +func (g genesismap) value() interface{} { + if val, ok := g[GenesisHash]; ok { + return val + } + if val, ok := g[defaultGenesisHash]; ok { + return val + } + return nil } // `array` type storage. @@ -163,6 +164,8 @@ func setStorage(cfg *params.ChainConfig, storage map[common.Hash]common.Hash, sl } case dynamicSlotValue: return t.apply(cfg, storage, slot) + case func(cfg *params.ChainConfig) interface{}: + return setStorage(cfg, storage, slot, t(cfg)) default: return fmt.Errorf("unsupported type: %s, slot: %s", t, slot.String()) } @@ -192,10 +195,19 @@ func leftZeroPad(s string, l int) string { } func structSize(cfg *params.ChainConfig, val interface{}) int64 { - if t, ok := val.(chainconfig); ok { - val = t(cfg) + // Resolve the value until reaching either primitive or Solidity's data structure. + var extract func(val interface{}) interface{} + extract = func(val interface{}) interface{} { + switch t := val.(type) { + case genesismap: + return extract(t.value()) + case func(cfg *params.ChainConfig) interface{}: + return extract(t(cfg)) + } + return val } - if t, ok := val.(structvalue); ok { + + if t, ok := extract(val).(structvalue); ok { return int64(len(t)) } return 0 diff --git a/params/config.go b/params/config.go index b3f0f11ee..6dd72bc04 100644 --- a/params/config.go +++ b/params/config.go @@ -608,12 +608,12 @@ func (c *ChainConfig) OasysShortenedBlockTimeStartEpoch() *big.Int { return nil } if c.ChainID.Cmp(OasysMainnetChainConfig.ChainID) == 0 { - return big.NewInt(999) // TODO + return big.NewInt(SHORT_BLOCK_TIME_FORK_EPOCH_MAINNET) } if c.ChainID.Cmp(OasysTestnetChainConfig.ChainID) == 0 { - return big.NewInt(999) // TODO + return big.NewInt(SHORT_BLOCK_TIME_FORK_EPOCH_TESTNET) } - return big.NewInt(10) + return big.NewInt(SHORT_BLOCK_TIME_FORK_EPOCH_OTHERS) } // IsTerminalPoWBlock returns whether the given block is the last block of PoW stage. diff --git a/params/oasys.go b/params/oasys.go index 717eca8f3..36dd3891d 100644 --- a/params/oasys.go +++ b/params/oasys.go @@ -6,6 +6,15 @@ import ( "github.com/ethereum/go-ethereum/common" ) +const ( + SHORT_BLOCK_TIME_SECONDS = 6 + SHORT_BLOCK_TIME_EPOCH_PERIOD = 14400 // 6 sec * 14400 block = 1 days + + SHORT_BLOCK_TIME_FORK_EPOCH_MAINNET = 999 // TODO + SHORT_BLOCK_TIME_FORK_EPOCH_TESTNET = 999 // TODO + SHORT_BLOCK_TIME_FORK_EPOCH_OTHERS = 10 // for local chain +) + // EnvironmentValue is a representation of `Environment.EnvironmentValue`. type EnvironmentValue struct { // Block and epoch to which this setting applies @@ -65,12 +74,12 @@ func (p *EnvironmentValue) Copy() *EnvironmentValue { } // Returns the environment value in Genesis. -func InitialEnvironmentValue(cfg *ChainConfig) *EnvironmentValue { +func InitialEnvironmentValue(cfg *OasysConfig) *EnvironmentValue { return &EnvironmentValue{ StartBlock: common.Big0, StartEpoch: common.Big1, - BlockPeriod: big.NewInt(int64(cfg.Oasys.Period)), - EpochPeriod: big.NewInt(int64(cfg.Oasys.Epoch)), + BlockPeriod: new(big.Int).SetUint64(cfg.Period), + EpochPeriod: new(big.Int).SetUint64(cfg.Epoch), RewardRate: big.NewInt(10), CommissionRate: big.NewInt(10), ValidatorThreshold: new(big.Int).Mul(big.NewInt(Ether), big.NewInt(10_000_000)), @@ -78,19 +87,3 @@ func InitialEnvironmentValue(cfg *ChainConfig) *EnvironmentValue { JailPeriod: big.NewInt(2), } } - -// Return the environment value updated in Sep 2024. -func ShortenedBlockTimeEnvironmentValue(cfg *ChainConfig) *EnvironmentValue { - prev := InitialEnvironmentValue(cfg) - next := prev.Copy() - - next.StartEpoch = cfg.OasysShortenedBlockTimeStartEpoch() - next.StartBlock = new(big.Int).SetUint64(prev.NewValueStartBlock(next.StartEpoch.Uint64())) - - if cfg.ChainID.Cmp(OasysMainnetChainConfig.ChainID) == 0 || - cfg.ChainID.Cmp(OasysTestnetChainConfig.ChainID) == 0 { - next.BlockPeriod = big.NewInt(6) - next.EpochPeriod = big.NewInt(14400) - } - return next -} From e716eacc4d09aebaaef49846247ad27b07da5967 Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Tue, 20 Aug 2024 11:47:14 +0900 Subject: [PATCH 26/29] Add comment --- consensus/oasys/oasys.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/consensus/oasys/oasys.go b/consensus/oasys/oasys.go index ac5b9df08..bbd94cee4 100644 --- a/consensus/oasys/oasys.go +++ b/consensus/oasys/oasys.go @@ -1071,7 +1071,7 @@ func (c *Oasys) scheduler(chain consensus.ChainHeaderReader, header *types.Heade var seed int64 if env.Epoch(number) >= c.chainConfig.OasysShortenedBlockTimeStartEpoch().Uint64() { - // prevent overflow + // This has nothing to do with reducing block time, but it has been fixed for possible overflow. seed = new(big.Int).Mod(seedHash.Big(), BigMaxInt64).Int64() } else { seed = seedHash.Big().Int64() From 0002fb57baf93f3c2519f7f9584d056c05a97efa Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Tue, 20 Aug 2024 11:59:42 +0900 Subject: [PATCH 27/29] Add comment --- contracts/oasys/storage.go | 1 + 1 file changed, 1 insertion(+) diff --git a/contracts/oasys/storage.go b/contracts/oasys/storage.go index e362e2469..d615dcae3 100644 --- a/contracts/oasys/storage.go +++ b/contracts/oasys/storage.go @@ -119,6 +119,7 @@ func (m *mapping) apply(cfg *params.ChainConfig, storage map[common.Hash]common. } // `struct` type value. +// Assumes that each contained value is exactly one slot in length (32 bytes). type structvalue []interface{} // Add members to storage. From f0d779fa49ad0c2446f12a730c3420de47580509 Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Wed, 21 Aug 2024 21:31:58 +0900 Subject: [PATCH 28/29] Fix epoch boundary check --- consensus/oasys/oasys.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/consensus/oasys/oasys.go b/consensus/oasys/oasys.go index bbd94cee4..9a4dc782f 100644 --- a/consensus/oasys/oasys.go +++ b/consensus/oasys/oasys.go @@ -1025,7 +1025,7 @@ func (c *Oasys) environment(chain consensus.ChainHeaderReader, header *types.Hea } var env *params.EnvironmentValue - if number%snap.Environment.EpochPeriod.Uint64() == 0 { + if snap.Environment.IsEpoch(number) { if env, err = getNextEnvironmentValue(c.ethAPI, header.ParentHash); err != nil { log.Error("Failed to get environment value", "in", "environment", "hash", header.ParentHash, "number", number, "err", err) return nil, err From 7f0f5a3120bc4960aac6392f82e806fe8797c9b2 Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Mon, 26 Aug 2024 11:55:29 +0900 Subject: [PATCH 29/29] Configured block time shortening epoch for the testnet --- contracts/oasys/deployments.go | 2 +- contracts/oasys/oasys_test.go | 21 +++++++++++++++++++-- params/oasys.go | 4 ++-- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/contracts/oasys/deployments.go b/contracts/oasys/deployments.go index 7e71680fe..dd98663ff 100644 --- a/contracts/oasys/deployments.go +++ b/contracts/oasys/deployments.go @@ -33,7 +33,7 @@ var deploymentSets = map[common.Hash]map[uint64]deploymentSet{ 955400: deploymentSet{deployments7, deployments8}, 1519840: deploymentSet{deployments9}, 1880660: deploymentSet{deployments10}, - 9999999: deploymentSet{deployments11}, // TODO + 4017600: deploymentSet{deployments11}, }, defaultGenesisHash: { 2: deploymentSet{ diff --git a/contracts/oasys/oasys_test.go b/contracts/oasys/oasys_test.go index 4138d9d1b..eb1493727 100644 --- a/contracts/oasys/oasys_test.go +++ b/contracts/oasys/oasys_test.go @@ -1059,7 +1059,7 @@ func _deployments11(genesisHash common.Hash, contracts wantContracts) { } switch genesisHash { - case params.OasysMainnetGenesisHash, params.OasysTestnetGenesisHash: + case params.OasysMainnetGenesisHash: contracts["0x0000000000000000000000000000000000001000"].storage = map[string]string{ // uint256[] public updates "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000002", @@ -1076,6 +1076,23 @@ func _deployments11(genesisHash common.Hash, contracts wantContracts) { "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ade": "0x00000000000000000000000000000000000000000000000000000000000001f4", "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5adf": "0x0000000000000000000000000000000000000000000000000000000000000002", } + case params.OasysTestnetGenesisHash: + contracts["0x0000000000000000000000000000000000001000"].storage = map[string]string{ + // uint256[] public updates + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7": "0x00000000000000000000000000000000000000000000000000000000000002bb", + // EnvironmentValue[] public values + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad7": "0x00000000000000000000000000000000000000000000000000000000003d5900", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad8": "0x00000000000000000000000000000000000000000000000000000000000002bb", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad9": "0x0000000000000000000000000000000000000000000000000000000000000006", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ada": "0x0000000000000000000000000000000000000000000000000000000000003840", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5adb": "0x000000000000000000000000000000000000000000000000000000000000000a", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5adc": "0x000000000000000000000000000000000000000000000000000000000000000a", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5add": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ade": "0x00000000000000000000000000000000000000000000000000000000000001f4", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5adf": "0x0000000000000000000000000000000000000000000000000000000000000002", + } default: contracts["0x0000000000000000000000000000000000001000"].storage = map[string]string{ // uint256[] public updates @@ -1142,7 +1159,7 @@ func TestDeploy(t *testing.T) { {955400, []deployFn{_deployments7, _deployments8}}, {1519840, []deployFn{_deployments9}}, {1880660, []deployFn{_deployments10}}, - {9999999, []deployFn{_deployments11}}, + {4017600, []deployFn{_deployments11}}, }, }, { diff --git a/params/oasys.go b/params/oasys.go index 36dd3891d..0090ead48 100644 --- a/params/oasys.go +++ b/params/oasys.go @@ -11,8 +11,8 @@ const ( SHORT_BLOCK_TIME_EPOCH_PERIOD = 14400 // 6 sec * 14400 block = 1 days SHORT_BLOCK_TIME_FORK_EPOCH_MAINNET = 999 // TODO - SHORT_BLOCK_TIME_FORK_EPOCH_TESTNET = 999 // TODO - SHORT_BLOCK_TIME_FORK_EPOCH_OTHERS = 10 // for local chain + SHORT_BLOCK_TIME_FORK_EPOCH_TESTNET = 699 + SHORT_BLOCK_TIME_FORK_EPOCH_OTHERS = 10 // for local chain ) // EnvironmentValue is a representation of `Environment.EnvironmentValue`.