diff --git a/.github/workflows/build-go.yml b/.github/workflows/build-go.yml index c0952f38a..6a35e1be1 100644 --- a/.github/workflows/build-go.yml +++ b/.github/workflows/build-go.yml @@ -35,6 +35,8 @@ jobs: run: make build_halo2_ipa_linux - name: Build Merkle Tree bindings run: make build_merkle_tree_linux + - name: Build Old Merkle Tree bindings + run: make build_merkle_tree_linux_old - name: Build operator run: go build operator/cmd/main.go - name: Build aggregator diff --git a/.github/workflows/build-rust.yml b/.github/workflows/build-rust.yml index f2574d792..aa0132177 100644 --- a/.github/workflows/build-rust.yml +++ b/.github/workflows/build-rust.yml @@ -12,7 +12,7 @@ on: jobs: build: - runs-on: ubuntu-latest + runs-on: aligned-runner steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/explorer.yml b/.github/workflows/explorer.yml index a63c80e0e..e8be3f08f 100644 --- a/.github/workflows/explorer.yml +++ b/.github/workflows/explorer.yml @@ -43,6 +43,8 @@ jobs: ssh -o "StrictHostKeyChecking=no" ${USERNAME}@${HOST_NAME} " cd ${APP_DIR} && git fetch && + git reset --hard HEAD && + git clean -fd && git checkout ${REF} && git pull && sudo systemctl restart ${SERVICE_NAME} diff --git a/.github/workflows/lint-contracts.yml b/.github/workflows/lint-contracts.yml new file mode 100644 index 000000000..361e9e3c1 --- /dev/null +++ b/.github/workflows/lint-contracts.yml @@ -0,0 +1,29 @@ +name: Lint contracts +on: + push: + branches: [main] + pull_request: + branches: ["*"] + paths: + - "contracts/src/core/*.sol" + - ".github/workflows/lint-contracts.yml" + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: "20" + + - name: Install dependencies + run: npm install + working-directory: contracts + + - name: Run Solhint + run: npm run lint:sol + working-directory: contracts diff --git a/.github/workflows/test-risc-zero.yml b/.github/workflows/test-risc-zero.yml index f4b44f09a..cbd8e644f 100644 --- a/.github/workflows/test-risc-zero.yml +++ b/.github/workflows/test-risc-zero.yml @@ -7,31 +7,31 @@ on: pull_request: branches: ["*"] paths: - - 'operator/risc_zero/**' - - '.github/workflows/test-risc-zero.yml' + - "operator/risc_zero/**" + - ".github/workflows/test-risc-zero.yml" jobs: - test: - runs-on: ubuntu-latest - steps: - - name: Clear device space - run: | - sudo rm -rf "$AGENT_TOOLSDIRECTORY" - sudo rm -rf /usr/local/lib/android - sudo rm -rf /opt/ghc - sudo rm -rf /usr/local/.ghcup - sudo rm -rf /usr/share/dotnet - sudo rm -rf /opt/ghc - sudo rm -rf "/usr/local/share/boost" - - uses: actions/checkout@v4 - - uses: actions/setup-go@v5 - with: - go-version: '1.22' - cache: false - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - - name: Test Risc Zero Rust - run: make test_risc_zero_rust_ffi - - name: Test Risc Zero go bindings - run: make test_risc_zero_go_bindings_linux + test: + runs-on: ubuntu-latest + steps: + - name: Clear device space + run: | + sudo rm -rf "$AGENT_TOOLSDIRECTORY" + sudo rm -rf /usr/local/lib/android + sudo rm -rf /opt/ghc + sudo rm -rf /usr/local/.ghcup + sudo rm -rf /usr/share/dotnet + sudo rm -rf /opt/ghc + sudo rm -rf "/usr/local/share/boost" + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + with: + go-version: "1.22" + cache: false + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + - name: Test Risc Zero Rust + run: make test_risc_zero_rust_ffi + - name: Test Risc Zero go bindings + run: make test_risc_zero_go_bindings_linux diff --git a/.gitmodules b/.gitmodules index b5ce81243..6aa60a52c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -16,3 +16,9 @@ [submodule "examples/validating-public-input/contracts/lib/forge-std"] path = examples/validating-public-input/contracts/lib/forge-std url = https://github.com/foundry-rs/forge-std +[submodule "contracts/lib/openzeppelin-contracts"] + path = contracts/lib/openzeppelin-contracts + url = https://github.com/OpenZeppelin/openzeppelin-contracts +[submodule "contracts/lib/openzeppelin-contracts-upgradeable"] + path = contracts/lib/openzeppelin-contracts-upgradeable + url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable diff --git a/Makefile b/Makefile index aec3a96e3..ad5254139 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ OS := $(shell uname -s) CONFIG_FILE?=config-files/config.yaml AGG_CONFIG_FILE?=config-files/config-aggregator.yaml -OPERATOR_VERSION=v0.5.2 +OPERATOR_VERSION=v0.7.0 ifeq ($(OS),Linux) BUILD_ALL_FFI = $(MAKE) build_all_ffi_linux @@ -55,6 +55,10 @@ anvil_upgrade_aligned_contracts: @echo "Upgrading Aligned Contracts..." . contracts/scripts/anvil/upgrade_aligned_contracts.sh +anvil_upgrade_batcher_payment_service: + @echo "Upgrading BatcherPayments contract..." + . contracts/scripts/anvil/upgrade_batcher_payment_service.sh + anvil_upgrade_registry_coordinator: @echo "Upgrading Registry Coordinator Contracts..." . contracts/scripts/anvil/upgrade_registry_coordinator.sh @@ -71,6 +75,17 @@ anvil_upgrade_index_registry: @echo "Upgrading Index Registry Contracts..." . contracts/scripts/anvil/upgrade_index_registry.sh +anvil_upgrade_add_aggregator: + @echo "Adding Aggregator to Aligned Contracts..." + . contracts/scripts/anvil/upgrade_add_aggregator_to_service_manager.sh + +anvil_add_type_hash_to_batcher_payment_service: + @echo "Adding Type Hash to Batcher Payment Service..." + . contracts/scripts/anvil/upgrade_add_type_hash_to_batcher_payment_service.sh + +lint_contracts: + @cd contracts && npm run lint:sol + anvil_start: @echo "Starting Anvil..." anvil --load-state contracts/scripts/anvil/state/alignedlayer-deployed-anvil-state.json @@ -136,7 +151,7 @@ operator_register_with_eigen_layer: operator_mint_mock_tokens: @echo "Minting tokens" - . ./scripts/mint_mock_token.sh $(CONFIG_FILE) 1000 + . ./scripts/mint_mock_token.sh $(CONFIG_FILE) 100000000000000000 operator_whitelist_devnet: @echo "Whitelisting operator" @@ -155,7 +170,7 @@ operator_deposit_into_mock_strategy: @go run operator/cmd/main.go deposit-into-strategy \ --config $(CONFIG_FILE) \ --strategy-address $(STRATEGY_ADDRESS) \ - --amount 1000 + --amount 100000000000000000 operator_deposit_into_strategy: @echo "Depositing into strategy" @@ -229,7 +244,7 @@ batcher_send_sp1_burst: --proving_system SP1 \ --proof ../../scripts/test_files/sp1/sp1_fibonacci.proof \ --vm_program ../../scripts/test_files/sp1/sp1_fibonacci.elf \ - --repetitions 15 \ + --repetitions $(BURST_SIZE) \ --proof_generator_addr 0x66f9664f97F2b50F62D13eA064982f936dE76657 \ --rpc_url $(RPC_URL) \ --payment_service_addr $(BATCHER_PAYMENTS_CONTRACT_ADDRESS) @@ -256,7 +271,7 @@ batcher_send_risc0_burst: --proof ../../scripts/test_files/risc_zero/fibonacci_proof_generator/risc_zero_fibonacci.proof \ --vm_program ../../scripts/test_files/risc_zero/fibonacci_proof_generator/fibonacci_id.bin \ --public_input ../../scripts/test_files/risc_zero/fibonacci_proof_generator/risc_zero_fibonacci.pub \ - --repetitions 15 \ + --repetitions $(BURST_SIZE) \ --proof_generator_addr 0x66f9664f97F2b50F62D13eA064982f936dE76657 \ --rpc_url $(RPC_URL) \ --payment_service_addr $(BATCHER_PAYMENTS_CONTRACT_ADDRESS) @@ -281,6 +296,7 @@ batcher_send_plonk_bn254_burst: batcher/target/release/aligned --vk ../../scripts/test_files/gnark_plonk_bn254_script/plonk.vk \ --proof_generator_addr 0x66f9664f97F2b50F62D13eA064982f936dE76657 \ --rpc_url $(RPC_URL) \ + --repetitions 4 \ --payment_service_addr $(BATCHER_PAYMENTS_CONTRACT_ADDRESS) batcher_send_plonk_bls12_381_task: batcher/target/release/aligned @@ -426,6 +442,14 @@ upgrade_stake_registry: ## Upgrade Stake Registry @echo "Upgrading Stake Registry..." @. contracts/scripts/.env && . contracts/scripts/upgrade_stake_registry.sh +upgrade_add_aggregator: ## Add Aggregator to Aligned Contracts + @echo "Adding Aggregator to Aligned Contracts..." + @. contracts/scripts/.env && . contracts/scripts/upgrade_add_aggregator_to_service_manager.sh + +upgrade_batcher_payments_add_type_hash: ## Add Type Hash to Batcher Payment Service + @echo "Adding Type Hash to Batcher Payment Service..." + @. contracts/scripts/.env && . contracts/scripts/upgrade_add_type_hash_to_batcher_payment_service.sh + deploy_verify_batch_inclusion_caller: @echo "Deploying VerifyBatchInclusionCaller contract..." @. examples/verify/.env && . examples/verify/scripts/deploy_verify_batch_inclusion_caller.sh @@ -441,6 +465,12 @@ upgrade_batcher_payment_service: build_aligned_contracts: @cd contracts/src/core && forge build +show_aligned_error_codes: + @echo "\nAlignedLayerServiceManager errors:" + @cd contracts/src/core && forge inspect IAlignedLayerServiceManager.sol:IAlignedLayerServiceManager errors + @echo "\nBatcherPaymentService errors:" + @cd contracts/src/core && forge inspect BatcherPaymentService.sol:BatcherPaymentService errors + __BUILD__: build_binaries: @echo "Building aggregator..." @@ -497,6 +527,7 @@ test_risc_zero_go_bindings_macos: build_risc_zero_macos test_risc_zero_go_bindings_linux: build_risc_zero_linux @echo "Testing RISC Zero Go bindings..." + LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(CURDIR)/operator/risc_zero/lib \ go test ./operator/risc_zero/... -v generate_risc_zero_fibonacci_proof: @@ -510,15 +541,29 @@ build_merkle_tree_macos: @cp operator/merkle_tree/lib/target/$(TARGET_REL_PATH)/libmerkle_tree.dylib operator/merkle_tree/lib/libmerkle_tree.dylib @cp operator/merkle_tree/lib/target/$(TARGET_REL_PATH)/libmerkle_tree.a operator/merkle_tree/lib/libmerkle_tree.a +build_merkle_tree_macos_old: + @cd operator/merkle_tree_old/lib && cargo build $(RELEASE_FLAG) + @cp operator/merkle_tree_old/lib/target/$(TARGET_REL_PATH)/libmerkle_tree.dylib operator/merkle_tree_old/lib/libmerkle_tree.dylib + @cp operator/merkle_tree_old/lib/target/$(TARGET_REL_PATH)/libmerkle_tree.a operator/merkle_tree_old/lib/libmerkle_tree.a + build_merkle_tree_linux: @cd operator/merkle_tree/lib && cargo build $(RELEASE_FLAG) @cp operator/merkle_tree/lib/target/$(TARGET_REL_PATH)/libmerkle_tree.so operator/merkle_tree/lib/libmerkle_tree.so @cp operator/merkle_tree/lib/target/$(TARGET_REL_PATH)/libmerkle_tree.a operator/merkle_tree/lib/libmerkle_tree.a +build_merkle_tree_linux_old: + @cd operator/merkle_tree_old/lib && cargo build $(RELEASE_FLAG) + @cp operator/merkle_tree_old/lib/target/$(TARGET_REL_PATH)/libmerkle_tree.so operator/merkle_tree_old/lib/libmerkle_tree.so + @cp operator/merkle_tree_old/lib/target/$(TARGET_REL_PATH)/libmerkle_tree.a operator/merkle_tree_old/lib/libmerkle_tree.a + test_merkle_tree_rust_ffi: @echo "Testing Merkle Tree Rust FFI source code..." @cd operator/merkle_tree/lib && RUST_MIN_STACK=83886080 cargo t --release +test_merkle_tree_rust_ffi_old: + @echo "Testing Old Merkle Tree Rust FFI source code..." + @cd operator/merkle_tree_old/lib && RUST_MIN_STACK=83886080 cargo t --release + test_merkle_tree_go_bindings_macos: build_merkle_tree_macos @echo "Testing Merkle Tree Go bindings..." go test ./operator/merkle_tree/... -v @@ -527,6 +572,14 @@ test_merkle_tree_go_bindings_linux: build_merkle_tree_linux @echo "Testing Merkle Tree Go bindings..." go test ./operator/merkle_tree/... -v +test_merkle_tree_old_go_bindings_macos: build_merkle_tree_macos_old + @echo "Testing Old Merkle Tree Go bindings..." + go test ./operator/merkle_tree_old/... -v + +test_merkle_tree_go_bindings_linux_old: build_merkle_tree_linux_old + @echo "Testing Merkle Tree Go bindings..." + go test ./operator/merkle_tree_old/... -v + __HALO2_KZG_FFI__: ## build_halo2_kzg_macos: @cd operator/halo2kzg/lib && cargo build $(RELEASE_FLAG) @@ -601,6 +654,7 @@ build_all_ffi_macos: ## Build all FFIs for macOS @$(MAKE) build_sp1_macos @$(MAKE) build_risc_zero_macos @$(MAKE) build_merkle_tree_macos + @$(MAKE) build_merkle_tree_macos_old @$(MAKE) build_halo2_ipa_macos @$(MAKE) build_halo2_kzg_macos @echo "All macOS FFIs built successfully." @@ -610,45 +664,46 @@ build_all_ffi_linux: ## Build all FFIs for Linux @$(MAKE) build_sp1_linux @$(MAKE) build_risc_zero_linux @$(MAKE) build_merkle_tree_linux + @$(MAKE) build_merkle_tree_linux_old @$(MAKE) build_halo2_ipa_linux @$(MAKE) build_halo2_kzg_linux @echo "All Linux FFIs built successfully." __EXPLORER__: -run_explorer: run_db ecto_setup_db +run_explorer: explorer_run_db explorer_ecto_setup_db @cd explorer/ && \ pnpm install --prefix assets && \ mix setup && \ ./start.sh -build_db: +explorer_build_db: @cd explorer && \ docker build -t explorer-postgres-image . -run_db: remove_db_container +explorer_run_db: explorer_remove_db_container @cd explorer && \ docker run -d --name explorer-postgres-container -p 5432:5432 -v explorer-postgres-data:/var/lib/postgresql/data explorer-postgres-image -ecto_setup_db: +explorer_ecto_setup_db: @cd explorer/ && \ ./ecto_setup_db.sh -remove_db_container: +explorer_remove_db_container: @cd explorer && \ docker stop explorer-postgres-container || true && \ docker rm explorer-postgres-container || true -clean_db: remove_db_container +explorer_clean_db: explorer_remove_db_container @cd explorer && \ docker volume rm explorer-postgres-data || true -dump_db: +explorer_dump_db: @cd explorer && \ docker exec -t explorer-postgres-container pg_dumpall -c -U explorer_user > dump.$$(date +\%Y\%m\%d_\%H\%M\%S).sql @echo "Dumped database successfully to /explorer" -recover_db: run_db +explorer_recover_db: explorer_run_db @read -p $$'\e[32mEnter the dump file to recover (e.g., dump.20230607_123456.sql): \e[0m' DUMP_FILE && \ cd explorer && \ docker cp $$DUMP_FILE explorer-postgres-container:/dump.sql && \ diff --git a/README.md b/README.md index 670d2ccdd..f09837125 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ - [Aligned Infrastructure Guide](#aligned-infrastructure-guide) - [Submitting Proofs to Aligned](#submitting-proofs-to-aligned) - [Integrating Aligned into your Project](#integrating-aligned-into-your-project) + - [Versioning and Networks](#versioning-and-networks) ## The Project @@ -181,3 +182,11 @@ For submitting proofs generated by your own project to the network via CLI, see ## Integrating Aligned into your Project If you are developing applications using Aligned, we offer a [Rust-SDK](docs/3_guides/1_SDK_how_to.md) for submitting proofs directly to the network within your applications. + +## Versioning and Networks + +Testnet code and documentation is always in sync with the default [Testnet Branch](https://github.com/yetanotherco/aligned_layer/tree/feat/testnet) + +Releases are provided for each version of the testnet. + +Latest version of the code, deployed on staging network, is always on [Staging Branch](https://github.com/yetanotherco/aligned_layer/tree/feat/staging) diff --git a/aggregator/internal/pkg/aggregator.go b/aggregator/internal/pkg/aggregator.go index 8d62d043e..477112f68 100644 --- a/aggregator/internal/pkg/aggregator.go +++ b/aggregator/internal/pkg/aggregator.go @@ -42,8 +42,7 @@ type BatchData struct { type Aggregator struct { AggregatorConfig *config.AggregatorConfig - NewBatchChan chan *servicemanager.ContractAlignedLayerServiceManagerNewBatch - NewBatchChanV2 chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2 + NewBatchChan chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV3 avsReader *chainio.AvsReader avsSubscriber *chainio.AvsSubscriber avsWriter *chainio.AvsWriter @@ -92,8 +91,7 @@ type Aggregator struct { } func NewAggregator(aggregatorConfig config.AggregatorConfig) (*Aggregator, error) { - newBatchChan := make(chan *servicemanager.ContractAlignedLayerServiceManagerNewBatch) - newBatchChanV2 := make(chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2) + newBatchChan := make(chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV3) avsReader, err := chainio.NewAvsReaderFromConfig(aggregatorConfig.BaseConfig, aggregatorConfig.EcdsaConfig) if err != nil { @@ -164,7 +162,6 @@ func NewAggregator(aggregatorConfig config.AggregatorConfig) (*Aggregator, error avsSubscriber: avsSubscriber, avsWriter: avsWriter, NewBatchChan: newBatchChan, - NewBatchChanV2: newBatchChanV2, batchesIdentifierHashByIdx: batchesIdentifierHashByIdx, batchesIdxByIdentifierHash: batchesIdxByIdentifierHash, @@ -210,7 +207,7 @@ func (agg *Aggregator) Start(ctx context.Context) error { case blsAggServiceResp := <-agg.blsAggregationService.GetResponseChannel(): agg.logger.Info("Received response from BLS aggregation service", "taskIndex", blsAggServiceResp.TaskIndex) - + go agg.handleBlsAggServiceResponse(blsAggServiceResp) } } @@ -218,8 +215,6 @@ func (agg *Aggregator) Start(ctx context.Context) error { const MaxSentTxRetries = 5 -var switchBlockNumber = uint64(2_268_375) // 2_268_375 is the block at sep 3th 15:00 - func (agg *Aggregator) handleBlsAggServiceResponse(blsAggServiceResp blsagg.BlsAggregationServiceResponse) { if blsAggServiceResp.Err != nil { agg.taskMutex.Lock() @@ -281,37 +276,18 @@ func (agg *Aggregator) handleBlsAggServiceResponse(blsAggServiceResp blsagg.BlsA agg.logger.Info("Sending aggregated response onchain", "taskIndex", blsAggServiceResp.TaskIndex, "batchIdentifierHash", "0x"+hex.EncodeToString(batchIdentifierHash[:])) - current_task_block := agg.batchCreatedBlockByIdx[blsAggServiceResp.TaskIndex] for i := 0; i < MaxSentTxRetries; i++ { - if current_task_block < switchBlockNumber { - agg.logger.Info("agg if V1") - _, err = agg.sendAggregatedResponse(batchData.BatchMerkleRoot, nonSignerStakesAndSignature) - if err == nil { - agg.logger.Info("Aggregator successfully responded to task", - "taskIndex", blsAggServiceResp.TaskIndex, - "batchIdentifierHash", "0x"+hex.EncodeToString(batchIdentifierHash[:])) - - return - } - - // Sleep for a bit before retrying - time.Sleep(2 * time.Second) - - } else { - agg.logger.Info("agg if V2") - _, err = agg.sendAggregatedResponseV2(batchData.BatchMerkleRoot, batchData.SenderAddress, nonSignerStakesAndSignature) - if err == nil { - agg.logger.Info("Aggregator successfully responded to task", - "taskIndex", blsAggServiceResp.TaskIndex, - "batchIdentifierHash", "0x"+hex.EncodeToString(batchIdentifierHash[:])) - - return - } - - // Sleep for a bit before retrying - time.Sleep(2 * time.Second) + _, err = agg.sendAggregatedResponse(batchIdentifierHash, batchData.BatchMerkleRoot, batchData.SenderAddress, nonSignerStakesAndSignature) + if err == nil { + agg.logger.Info("Aggregator successfully responded to task", + "taskIndex", blsAggServiceResp.TaskIndex, + "batchIdentifierHash", "0x"+hex.EncodeToString(batchIdentifierHash[:])) + + return } + // Sleep for a bit before retrying + time.Sleep(2 * time.Second) } agg.logger.Error("Aggregator failed to respond to task, this batch will be lost", @@ -324,34 +300,7 @@ func (agg *Aggregator) handleBlsAggServiceResponse(blsAggServiceResp blsagg.BlsA // / Sends response to contract and waits for transaction receipt // / Returns error if it fails to send tx or receipt is not found -func (agg *Aggregator) sendAggregatedResponse(batchMerkleRoot [32]byte, nonSignerStakesAndSignature servicemanager.IBLSSignatureCheckerNonSignerStakesAndSignature) (*gethtypes.Receipt, error) { - agg.walletMutex.Lock() - agg.logger.Infof("- Locked Wallet Resources: Sending aggregated response for batch", - "merkleRoot", hex.EncodeToString(batchMerkleRoot[:])) - - txHash, err := agg.avsWriter.SendAggregatedResponse(batchMerkleRoot, nonSignerStakesAndSignature) - if err != nil { - agg.walletMutex.Unlock() - agg.logger.Infof("- Unlocked Wallet Resources: Error sending aggregated response for batch %s. Error: %s", hex.EncodeToString(batchMerkleRoot[:]), err) - return nil, err - } - - agg.walletMutex.Unlock() - agg.logger.Infof("- Unlocked Wallet Resources: Sending aggregated response for batch %s", hex.EncodeToString(batchMerkleRoot[:])) - - receipt, err := utils.WaitForTransactionReceipt( - agg.AggregatorConfig.BaseConfig.EthRpcClient, context.Background(), *txHash) - if err != nil { - return nil, err - } - - agg.metrics.IncAggregatedResponses() - - return receipt, nil -} -func (agg *Aggregator) sendAggregatedResponseV2(batchMerkleRoot [32]byte, senderAddress [20]byte, nonSignerStakesAndSignature servicemanager.IBLSSignatureCheckerNonSignerStakesAndSignature) (*gethtypes.Receipt, error) { - batchIdentifier := append(batchMerkleRoot[:], senderAddress[:]...) - var batchIdentifierHash = *(*[32]byte)(crypto.Keccak256(batchIdentifier)) +func (agg *Aggregator) sendAggregatedResponse(batchIdentifierHash [32]byte, batchMerkleRoot [32]byte, senderAddress [20]byte, nonSignerStakesAndSignature servicemanager.IBLSSignatureCheckerNonSignerStakesAndSignature) (*gethtypes.Receipt, error) { agg.walletMutex.Lock() agg.logger.Infof("- Locked Wallet Resources: Sending aggregated response for batch", @@ -359,7 +308,7 @@ func (agg *Aggregator) sendAggregatedResponseV2(batchMerkleRoot [32]byte, sender "senderAddress", hex.EncodeToString(senderAddress[:]), "batchIdentifierHash", hex.EncodeToString(batchIdentifierHash[:])) - txHash, err := agg.avsWriter.SendAggregatedResponseV2(batchMerkleRoot, senderAddress, nonSignerStakesAndSignature) + txHash, err := agg.avsWriter.SendAggregatedResponse(batchIdentifierHash, batchMerkleRoot, senderAddress, nonSignerStakesAndSignature) if err != nil { agg.walletMutex.Unlock() agg.logger.Infof("- Unlocked Wallet Resources: Error sending aggregated response for batch %s. Error: %s", hex.EncodeToString(batchIdentifierHash[:]), err) @@ -380,53 +329,7 @@ func (agg *Aggregator) sendAggregatedResponseV2(batchMerkleRoot [32]byte, sender return receipt, nil } -func (agg *Aggregator) AddNewTask(batchMerkleRoot [32]byte, taskCreatedBlock uint32) { - agg.AggregatorConfig.BaseConfig.Logger.Info("Adding new task", - "Batch merkle root", "0x"+hex.EncodeToString(batchMerkleRoot[:])) - - agg.taskMutex.Lock() - agg.AggregatorConfig.BaseConfig.Logger.Info("- Locked Resources: Adding new task") - - // --- UPDATE BATCH - INDEX CACHES --- - batchIndex := agg.nextBatchIndex - if _, ok := agg.batchesIdxByIdentifierHash[batchMerkleRoot]; ok { - agg.logger.Warn("Batch already exists", "batchIndex", batchIndex, "batchIdentifierHash (actually batchMerkleRoot)", batchMerkleRoot) - agg.taskMutex.Unlock() - agg.AggregatorConfig.BaseConfig.Logger.Info("- Unlocked Resources: Adding new task") - return - } - - // This shouldn't happen, since both maps are updated together - if _, ok := agg.batchesIdentifierHashByIdx[batchIndex]; ok { - agg.logger.Warn("Batch already exists", "batchIndex", batchIndex, "batchIdentifierHash (actually batchMerkleRoot)", batchMerkleRoot) - agg.taskMutex.Unlock() - agg.AggregatorConfig.BaseConfig.Logger.Info("- Unlocked Resources: Adding new task") - return - } - - agg.batchesIdxByIdentifierHash[batchMerkleRoot] = batchIndex - agg.batchCreatedBlockByIdx[batchIndex] = uint64(taskCreatedBlock) - agg.batchesIdentifierHashByIdx[batchIndex] = batchMerkleRoot - agg.batchDataByIdentifierHash[batchMerkleRoot] = BatchData{ - BatchMerkleRoot: batchMerkleRoot, - SenderAddress: [20]byte{}, - } - agg.nextBatchIndex += 1 - - quorumNums := eigentypes.QuorumNums{eigentypes.QuorumNum(QUORUM_NUMBER)} - quorumThresholdPercentages := eigentypes.QuorumThresholdPercentages{eigentypes.QuorumThresholdPercentage(QUORUM_THRESHOLD)} - - err := agg.blsAggregationService.InitializeNewTask(batchIndex, taskCreatedBlock, quorumNums, quorumThresholdPercentages, 100*time.Second) - // FIXME(marian): When this errors, should we retry initializing new task? Logging fatal for now. - if err != nil { - agg.logger.Fatalf("BLS aggregation service error when initializing new task: %s", err) - } - - agg.taskMutex.Unlock() - agg.AggregatorConfig.BaseConfig.Logger.Info("- Unlocked Resources: Adding new task") - agg.logger.Info("New task added", "batchIndex", batchIndex, "batchIdentifierHash (actually batchMerkleRoot)", "0x"+hex.EncodeToString(batchMerkleRoot[:])) -} -func (agg *Aggregator) AddNewTaskV2(batchMerkleRoot [32]byte, senderAddress [20]byte, taskCreatedBlock uint32) { +func (agg *Aggregator) AddNewTask(batchMerkleRoot [32]byte, senderAddress [20]byte, taskCreatedBlock uint32) { batchIdentifier := append(batchMerkleRoot[:], senderAddress[:]...) var batchIdentifierHash = *(*[32]byte)(crypto.Keccak256(batchIdentifier)) diff --git a/aggregator/internal/pkg/server.go b/aggregator/internal/pkg/server.go index b8a992fee..ec7f4fa85 100644 --- a/aggregator/internal/pkg/server.go +++ b/aggregator/internal/pkg/server.go @@ -48,98 +48,7 @@ func (agg *Aggregator) ServeOperators() error { // Returns: // - 0: Success // - 1: Error -func (agg *Aggregator) ProcessOperatorSignedTaskResponse(signedTaskResponse *types.SignedTaskResponse, reply *uint8) error { - agg.AggregatorConfig.BaseConfig.Logger.Info("New task response", - "BatchMerkleRoot", "0x"+hex.EncodeToString(signedTaskResponse.BatchMerkleRoot[:]), - "operatorId", hex.EncodeToString(signedTaskResponse.OperatorId[:])) - - taskIndex := uint32(0) - ok := false - - for i := 0; i < waitForEventRetries; i++ { - agg.taskMutex.Lock() - agg.AggregatorConfig.BaseConfig.Logger.Info("- Locked Resources: Starting processing of Response") - taskIndex, ok = agg.batchesIdxByIdentifierHash[signedTaskResponse.BatchMerkleRoot] - if !ok { - agg.taskMutex.Unlock() - agg.logger.Info("- Unlocked Resources: Task not found in the internal map") - time.Sleep(waitForEventSleepSeconds) - } else { - break - } - } - - if !ok { - agg.logger.Warn("Task not found in the internal map, operator signature will be lost. Batch may not reach quorum") - *reply = 1 - return nil - } - - // Note: we already have lock here - agg.logger.Debug("- Checking if operator already responded") - batchResponses, ok := agg.operatorRespondedBatch[taskIndex] - if !ok { - batchResponses = make(map[eigentypes.Bytes32]struct{}) - agg.operatorRespondedBatch[taskIndex] = batchResponses - } - - if _, ok := batchResponses[signedTaskResponse.OperatorId]; ok { - *reply = 0 - agg.logger.Warn("Operator already responded, ignoring", - "operatorId", hex.EncodeToString(signedTaskResponse.OperatorId[:]), - "taskIndex", taskIndex, "batchMerkleRoot", hex.EncodeToString(signedTaskResponse.BatchMerkleRoot[:])) - - agg.taskMutex.Unlock() - return nil - } - - batchResponses[signedTaskResponse.OperatorId] = struct{}{} - - // Don't wait infinitely if it can't answer - // Create a context with a timeout of 5 seconds - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() // Ensure the cancel function is called to release resources - - // Create a channel to signal when the task is done - done := make(chan struct{}) - - agg.logger.Info("Starting bls signature process") - go func() { - err := agg.blsAggregationService.ProcessNewSignature( - context.Background(), taskIndex, signedTaskResponse.BatchMerkleRoot, - &signedTaskResponse.BlsSignature, signedTaskResponse.OperatorId, - ) - - if err != nil { - agg.logger.Warnf("BLS aggregation service error: %s", err) - // remove operator from the list of operators that responded - // so that it can try again - delete(batchResponses, signedTaskResponse.OperatorId) - } else { - agg.logger.Info("BLS process succeeded") - } - - close(done) - }() - - *reply = 1 - // Wait for either the context to be done or the task to complete - select { - case <-ctx.Done(): - // The context's deadline was exceeded or it was canceled - agg.logger.Info("Bls process timed out, operator signature will be lost. Batch may not reach quorum") - case <-done: - // The task completed successfully - agg.logger.Info("Bls context finished correctly") - *reply = 0 - } - - agg.AggregatorConfig.BaseConfig.Logger.Info("- Unlocked Resources: Task response processing finished") - agg.taskMutex.Unlock() - - return nil -} -func (agg *Aggregator) ProcessOperatorSignedTaskResponseV2(signedTaskResponse *types.SignedTaskResponseV2, reply *uint8) error { +func (agg *Aggregator) ProcessOperatorSignedTaskResponseV2(signedTaskResponse *types.SignedTaskResponse, reply *uint8) error { agg.AggregatorConfig.BaseConfig.Logger.Info("New task response", "BatchMerkleRoot", "0x"+hex.EncodeToString(signedTaskResponse.BatchMerkleRoot[:]), "SenderAddress", "0x"+hex.EncodeToString(signedTaskResponse.SenderAddress[:]), diff --git a/aggregator/internal/pkg/subscriber.go b/aggregator/internal/pkg/subscriber.go index 3ae5998e6..4aef715da 100644 --- a/aggregator/internal/pkg/subscriber.go +++ b/aggregator/internal/pkg/subscriber.go @@ -5,37 +5,18 @@ func (agg *Aggregator) SubscribeToNewTasks() error { if err != nil { return err } - err = agg.subscribeToNewTasksV2() - if err != nil { - return err - } - - var switchBlockNumber = uint32(2_268_375) // 2_268_375 is the block at sep 3th 15:00 for { select { case err := <-agg.taskSubscriber: agg.AggregatorConfig.BaseConfig.Logger.Info("Failed to subscribe to new tasks", "err", err) - - // TODO not sure if this is the best way, but no way to calculate blocknumber from here err = agg.subscribeToNewTasks() - errV2 := agg.subscribeToNewTasksV2() if err != nil { return err } - if errV2 != nil { - return err - } case newBatch := <-agg.NewBatchChan: - if newBatch.TaskCreatedBlock < switchBlockNumber { - agg.AggregatorConfig.BaseConfig.Logger.Info("Adding new task, V1") - agg.AddNewTask(newBatch.BatchMerkleRoot, newBatch.TaskCreatedBlock) - } - case newBatchV2 := <-agg.NewBatchChanV2: - if newBatchV2.TaskCreatedBlock >= switchBlockNumber { - agg.AggregatorConfig.BaseConfig.Logger.Info("Adding new task, V2") - agg.AddNewTaskV2(newBatchV2.BatchMerkleRoot, newBatchV2.SenderAddress, newBatchV2.TaskCreatedBlock) - } + agg.AggregatorConfig.BaseConfig.Logger.Info("Adding new task") + agg.AddNewTask(newBatch.BatchMerkleRoot, newBatch.SenderAddress, newBatch.TaskCreatedBlock) } } } @@ -43,18 +24,7 @@ func (agg *Aggregator) SubscribeToNewTasks() error { func (agg *Aggregator) subscribeToNewTasks() error { var err error - agg.taskSubscriber, err = agg.avsSubscriber.SubscribeToNewTasks(agg.NewBatchChan) - - if err != nil { - agg.AggregatorConfig.BaseConfig.Logger.Info("Failed to create task subscriber", "err", err) - } - - return err -} -func (agg *Aggregator) subscribeToNewTasksV2() error { - var err error - - agg.taskSubscriber, err = agg.avsSubscriber.SubscribeToNewTasksV2(agg.NewBatchChanV2) + agg.taskSubscriber, err = agg.avsSubscriber.SubscribeToNewTasksV3(agg.NewBatchChan) if err != nil { agg.AggregatorConfig.BaseConfig.Logger.Info("Failed to create task subscriber", "err", err) diff --git a/alerts/.env.example b/alerts/.env.example index c942e6e8f..e31c5a588 100644 --- a/alerts/.env.example +++ b/alerts/.env.example @@ -7,6 +7,9 @@ RPC_URL= CONTRACT_ADDRESS= NEW_BATCH_TOPIC= VERIFIED_BATCH_TOPIC= +PAGER_DUTY_KEY= +PAGER_DUTY_EMAIL= +PAGER_DUTY_SERVICE_ID= # Variables for process_errors_alerts.sh SERVICE= diff --git a/alerts/contract_alerts.sh b/alerts/contract_alerts.sh index 44861c4d6..3ca90d264 100755 --- a/alerts/contract_alerts.sh +++ b/alerts/contract_alerts.sh @@ -20,6 +20,12 @@ function send_telegram_message() { -d disable_notification=true } +# Function to send PagerDuty alert +# @param message +function send_pagerduty_alert() { + . pagerduty.sh "$1" +} + # Flags to avoid sending multiple alerts no_new_batches_alert=false no_verified_batches_alert=false @@ -38,6 +44,7 @@ do message="🚨 ALERT: No new batches in Service Manager since block $from_block" send_slack_message "$message" send_telegram_message "$message" + send_pagerduty_alert "$message" fi no_new_batches_alert=true else @@ -57,6 +64,7 @@ do message="🚨 ALERT: No verified batches in Service Manager since block $from_block" send_slack_message "$message" send_telegram_message "$message" + send_pagerduty_alert "$message" fi no_verified_batches_alert=true else diff --git a/alerts/pagerduty.sh b/alerts/pagerduty.sh new file mode 100755 index 000000000..145e8c4f3 --- /dev/null +++ b/alerts/pagerduty.sh @@ -0,0 +1,16 @@ +curl --request POST -s \ + --url https://api.pagerduty.com/incidents \ + --header 'Accept: application/json' \ + --header "Authorization: Token token=$PAGER_DUTY_KEY" \ + --header 'Content-Type: application/json' \ + --header "From: $PAGER_DUTY_EMAIL"\ + --data "{ + \"incident\": { + \"type\": \"incident\", + \"title\": \"$1\", + \"service\": { + \"id\": \"$PAGER_DUTY_SERVICE_ID\", + \"type\": \"service_reference\" + } + } +}" diff --git a/batcher/Cargo.lock b/batcher/Cargo.lock index 5eb958834..7e096f701 100644 --- a/batcher/Cargo.lock +++ b/batcher/Cargo.lock @@ -112,6 +112,7 @@ dependencies = [ "hex", "lambdaworks-crypto", "log", + "priority-queue", "risc0-zkvm", "serde", "serde_json", @@ -4861,6 +4862,17 @@ dependencies = [ "uint", ] +[[package]] +name = "priority-queue" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "560bcab673ff7f6ca9e270c17bf3affd8a05e3bd9207f123b0d45076fd8197e8" +dependencies = [ + "autocfg", + "equivalent", + "indexmap 2.2.6", +] + [[package]] name = "proc-macro-crate" version = "1.3.1" diff --git a/batcher/aligned-batcher/Cargo.toml b/batcher/aligned-batcher/Cargo.toml index 3926a32b6..3099c7ce1 100644 --- a/batcher/aligned-batcher/Cargo.toml +++ b/batcher/aligned-batcher/Cargo.toml @@ -33,3 +33,4 @@ halo2_proofs = { git = "https://github.com/yetanotherco/yet-another-halo2-fork.g bincode = "1.3.3" aligned-sdk = { path = "../aligned-sdk" } ciborium = "=0.2.2" +priority-queue = "2.1.0" diff --git a/batcher/aligned-batcher/src/eth/mod.rs b/batcher/aligned-batcher/src/eth/mod.rs index 6e725fd74..fe79db9ac 100644 --- a/batcher/aligned-batcher/src/eth/mod.rs +++ b/batcher/aligned-batcher/src/eth/mod.rs @@ -24,6 +24,30 @@ const INITIAL_BACKOFF: u64 = 1000; // Initial backoff for the retry client in mi const GAS_MULTIPLIER: f64 = 1.125; // Multiplier for the gas price for gas escalator const GAS_ESCALATOR_INTERVAL: u64 = 12; // Time in seconds between gas escalations +#[derive(Debug, Clone)] +pub struct CreateNewTaskFeeParams { + pub fee_for_aggregator: U256, + pub fee_per_proof: U256, + pub gas_price: U256, + pub respond_to_task_fee_limit: U256, +} + +impl CreateNewTaskFeeParams { + pub fn new( + fee_for_aggregator: U256, + fee_per_proof: U256, + gas_price: U256, + respond_to_task_fee_limit: U256, + ) -> Self { + CreateNewTaskFeeParams { + fee_for_aggregator, + fee_per_proof, + gas_price, + respond_to_task_fee_limit, + } + } +} + pub fn get_provider(eth_rpc_url: String) -> Result>, anyhow::Error> { let provider = Http::from_str(eth_rpc_url.as_str()) .map_err(|e| anyhow::Error::msg(format!("Failed to create provider: {}", e)))?; @@ -69,18 +93,20 @@ pub async fn try_create_new_task( batch_data_pointer: String, padded_leaves: Vec<[u8; 32]>, signatures: Vec, - gas_for_aggregator: U256, - gas_per_proof: U256, + fee_params: CreateNewTaskFeeParams, payment_service: &BatcherPaymentService, ) -> Result { - let call = payment_service.create_new_task( - batch_merkle_root, - batch_data_pointer, - padded_leaves, - signatures, - gas_for_aggregator, - gas_per_proof, - ); + let call = payment_service + .create_new_task( + batch_merkle_root, + batch_data_pointer, + padded_leaves, + signatures, + fee_params.fee_for_aggregator, + fee_params.fee_per_proof, + fee_params.respond_to_task_fee_limit, + ) + .gas_price(fee_params.gas_price); info!("Creating task for: {}", hex::encode(batch_merkle_root)); diff --git a/batcher/aligned-batcher/src/gnark/mod.rs b/batcher/aligned-batcher/src/gnark/mod.rs index 4391dbe48..99b25e878 100644 --- a/batcher/aligned-batcher/src/gnark/mod.rs +++ b/batcher/aligned-batcher/src/gnark/mod.rs @@ -47,7 +47,7 @@ pub fn verify_gnark( ProvingSystemId::Groth16Bn254 => unsafe { VerifyGroth16ProofBN254(proof, public_input, verification_key) }, - _ => panic!("Unsupported proving system"), + _ => false, } } diff --git a/batcher/aligned-batcher/src/lib.rs b/batcher/aligned-batcher/src/lib.rs index fbe321ed5..5bd0a35b9 100644 --- a/batcher/aligned-batcher/src/lib.rs +++ b/batcher/aligned-batcher/src/lib.rs @@ -6,6 +6,7 @@ use config::NonPayingConfig; use dotenv::dotenv; use ethers::contract::ContractError; use ethers::signers::Signer; +use priority_queue::PriorityQueue; use serde::Serialize; use std::collections::hash_map::Entry; @@ -21,7 +22,7 @@ use aligned_sdk::core::types::{ VerificationDataCommitment, }; use aws_sdk_s3::client::Client as S3Client; -use eth::{try_create_new_task, BatcherPaymentService, SignerMiddlewareT}; +use eth::{try_create_new_task, BatcherPaymentService, CreateNewTaskFeeParams, SignerMiddlewareT}; use ethers::prelude::{Middleware, Provider}; use ethers::providers::Ws; use ethers::types::{Address, Signature, TransactionReceipt, U256}; @@ -34,7 +35,7 @@ use tokio::net::{TcpListener, TcpStream}; use tokio::sync::{Mutex, RwLock}; use tokio_tungstenite::tungstenite::{Error, Message}; use tokio_tungstenite::WebSocketStream; -use types::batch_queue::BatchQueue; +use types::batch_queue::{BatchQueue, BatchQueueEntry, BatchQueueEntryPriority}; use types::errors::{BatcherError, BatcherSendError}; use crate::config::{ConfigFromYaml, ContractDeploymentOutput}; @@ -49,15 +50,27 @@ pub mod sp1; pub mod types; mod zk_utils; -const AGGREGATOR_COST: u128 = 400000; -const BATCHER_SUBMISSION_BASE_COST: u128 = 100000; -const ADDITIONAL_SUBMISSION_COST_PER_PROOF: u128 = 13_000; -const CONSTANT_COST: u128 = AGGREGATOR_COST + BATCHER_SUBMISSION_BASE_COST; -const MIN_BALANCE_PER_PROOF: u128 = ADDITIONAL_SUBMISSION_COST_PER_PROOF * 100_000_000_000; // 100 Gwei = 0.0000001 ether (high gas price) +const AGGREGATOR_GAS_COST: u128 = 400_000; +const BATCHER_SUBMISSION_BASE_GAS_COST: u128 = 125_000; +const ADDITIONAL_SUBMISSION_GAS_COST_PER_PROOF: u128 = 13_000; +const CONSTANT_GAS_COST: u128 = ((AGGREGATOR_GAS_COST * DEFAULT_AGGREGATOR_FEE_MULTIPLIER) + / DEFAULT_AGGREGATOR_FEE_DIVIDER) + + BATCHER_SUBMISSION_BASE_GAS_COST; +const DEFAULT_MAX_FEE_PER_PROOF: u128 = ADDITIONAL_SUBMISSION_GAS_COST_PER_PROOF * 100_000_000_000; // gas_price = 100 Gwei = 0.0000001 ether (high gas price) +const MIN_FEE_PER_PROOF: u128 = ADDITIONAL_SUBMISSION_GAS_COST_PER_PROOF * 100_000_000; // gas_price = 0.1 Gwei = 0.0000000001 ether (low gas price) +const RESPOND_TO_TASK_FEE_LIMIT_MULTIPLIER: u128 = 5; // to set the respondToTaskFeeLimit variable higher than fee_for_aggregator +const RESPOND_TO_TASK_FEE_LIMIT_DIVIDER: u128 = 2; +const DEFAULT_AGGREGATOR_FEE_MULTIPLIER: u128 = 3; // to set the feeForAggregator variable higher than what was calculated +const DEFAULT_AGGREGATOR_FEE_DIVIDER: u128 = 2; struct BatchState { batch_queue: BatchQueue, user_nonces: HashMap, + /// The minimum fee of a pending proof for a user. + /// This should always be the fee of the biggest pending nonce by the user. + /// This is used to check if a user is submitting a proof with a higher nonce and higher fee, + /// which is invalid and should be rejected. + user_min_fee: HashMap, user_proof_count_in_batch: HashMap, } @@ -66,6 +79,7 @@ impl BatchState { Self { batch_queue: BatchQueue::new(), user_nonces: HashMap::new(), + user_min_fee: HashMap::new(), user_proof_count_in_batch: HashMap::new(), } } @@ -84,6 +98,100 @@ impl BatchState { .and_modify(|count| *count += 1) .or_insert(1); } + + fn get_entry(&self, sender: Address, nonce: U256) -> Option<&BatchQueueEntry> { + self.batch_queue + .iter() + .map(|(entry, _)| entry) + .find(|entry| entry.sender == sender && entry.nonced_verification_data.nonce == nonce) + } + + /// Checks if the entry is valid + /// An entry is valid if there is no entry with the same sender, + /// lower nonce and a lower fee + /// If the entry is valid, it replaces the entry in the queue + /// to increment the max fee, then it updates the user min fee if necessary + /// If the entry is invalid, it returns a validity response message. + /// If the entry is valid, it returns None. + fn validate_and_increment_max_fee( + &mut self, + replacement_entry: BatchQueueEntry, + ) -> Option { + let replacement_max_fee = replacement_entry.nonced_verification_data.max_fee; + let nonce = replacement_entry.nonced_verification_data.nonce; + let sender = replacement_entry.sender; + + debug!( + "Checking validity of entry with sender: {:?}, nonce: {:?}, max_fee: {:?}", + sender, nonce, replacement_max_fee + ); + + // it is a valid entry only if there is no entry with the same sender, lower nonce and a lower fee + let is_valid = !self.batch_queue.iter().any(|(entry, _)| { + entry.sender == sender + && entry.nonced_verification_data.nonce < nonce + && entry.nonced_verification_data.max_fee < replacement_max_fee + }); + + if !is_valid { + return Some(ValidityResponseMessage::InvalidReplacementMessage); + } + + info!( + "Entry is valid, incrementing fee for sender: {:?}, nonce: {:?}, max_fee: {:?}", + sender, nonce, replacement_max_fee + ); + + // remove the old entry and insert the new one + // note that the entries are considered equal for the priority queue + // if they have the same nonce and sender, so we can remove the old entry + // by calling remove with the new entry + self.batch_queue.remove(&replacement_entry); + self.batch_queue.push( + replacement_entry.clone(), + BatchQueueEntryPriority::new(replacement_max_fee, nonce), + ); + + let user_min_fee = self + .batch_queue + .iter() + .filter(|(e, _)| e.sender == sender) + .map(|(e, _)| e.nonced_verification_data.max_fee) + .min() + .unwrap_or(U256::max_value()); + + self.user_min_fee.insert(sender, user_min_fee); + + None + } + + /// Updates: + /// * The user proof count in batch + /// * The user min fee pending in batch (which is the one with the highest nonce) + /// based on whats currenlty in the batch queue. + /// This is necessary because the whole batch may not be included in the finalized batch, + /// This caches are needed to validate user messages. + fn update_user_proofs_in_batch_and_min_fee(&mut self) { + let mut updated_user_min_fee = HashMap::new(); + let mut updated_user_proof_count_in_batch = HashMap::new(); + + for (entry, _) in self.batch_queue.iter() { + *updated_user_proof_count_in_batch + .entry(entry.sender) + .or_insert(0) += 1; + + let min_fee = updated_user_min_fee + .entry(entry.sender) + .or_insert(entry.nonced_verification_data.max_fee); + + if entry.nonced_verification_data.max_fee < *min_fee { + *min_fee = entry.nonced_verification_data.max_fee; + } + } + + self.user_proof_count_in_batch = updated_user_proof_count_in_batch; + self.user_min_fee = updated_user_min_fee; + } } pub struct Batcher { @@ -326,7 +434,7 @@ impl Batcher { info!( "Received message with nonce: {}", - U256::from_big_endian(client_msg.verification_data.nonce.as_slice()) + client_msg.verification_data.nonce ); if client_msg.verification_data.chain_id != self.chain_id { @@ -364,7 +472,6 @@ impl Batcher { return Ok(()); } - let nonce = U256::from_big_endian(client_msg.verification_data.nonce.as_slice()); let nonced_verification_data = client_msg.verification_data; if nonced_verification_data.verification_data.proof.len() > self.max_proof_size { error!("Proof size exceeds the maximum allowed size."); @@ -382,18 +489,95 @@ impl Batcher { return Ok(()); // Send error message to the client and return } - // Doing nonce verification after proof verification to avoid unnecessary nonce increment - if !self.check_nonce_and_increment(addr, nonce).await { - send_message(ws_conn_sink.clone(), ValidityResponseMessage::InvalidNonce).await; - return Ok(()); // Send error message to the client and return + // Nonce and max fee verification + let nonce = nonced_verification_data.nonce; + let max_fee = nonced_verification_data.max_fee; + + if max_fee < U256::from(MIN_FEE_PER_PROOF) { + error!("The max fee signed in the message is less than the accepted minimum fee to be included in the batch."); + send_message(ws_conn_sink.clone(), ValidityResponseMessage::InvalidMaxFee) + .await; + return Ok(()); } - self.add_to_batch( - nonced_verification_data, - ws_conn_sink.clone(), - client_msg.signature, - ) - .await; + let mut batch_state = self.batch_state.lock().await; + + let expected_user_nonce = match batch_state.user_nonces.get(&addr) { + Some(nonce) => *nonce, + None => { + let user_nonce = match self.get_user_nonce(addr).await { + Ok(nonce) => nonce, + Err(e) => { + error!("Failed to get user nonce for address {:?}: {:?}", addr, e); + send_message( + ws_conn_sink.clone(), + ValidityResponseMessage::InvalidNonce, + ) + .await; + + return Ok(()); + } + }; + + batch_state.user_nonces.insert(addr, user_nonce); + user_nonce + } + }; + + let min_fee = match batch_state.user_min_fee.get(&addr) { + Some(fee) => *fee, + None => U256::max_value(), + }; + + match expected_user_nonce.cmp(&nonce) { + std::cmp::Ordering::Less => { + // invalid, expected user nonce < nonce + warn!( + "Invalid nonce for address {addr}, had nonce {:?} < {:?}", + expected_user_nonce, nonce + ); + send_message(ws_conn_sink.clone(), ValidityResponseMessage::InvalidNonce) + .await; + return Ok(()); + } + std::cmp::Ordering::Equal => { + // if we are here nonce == expected_user_nonce + if !self + .handle_expected_nonce_message( + batch_state, + min_fee, + nonced_verification_data, + ws_conn_sink.clone(), + client_msg.signature, + addr, + ) + .await + { + // message should not be added to batch + return Ok(()); + }; + } + std::cmp::Ordering::Greater => { + // might be replacement message + // if the message is already in the batch + // we can check if we need to increment the fee + // get the entry with the same sender and nonce + if !self + .handle_replacement_message( + batch_state, + nonced_verification_data, + ws_conn_sink.clone(), + client_msg.signature, + addr, + expected_user_nonce, + ) + .await + { + // message should not be added to batch + return Ok(()); + } + } + } info!("Verification data message handled"); @@ -423,7 +607,7 @@ impl Batcher { let user_balance = self.get_user_balance(addr).await; - let min_balance = U256::from(user_proofs_in_batch) * U256::from(MIN_BALANCE_PER_PROOF); + let min_balance = U256::from(user_proofs_in_batch) * U256::from(MIN_FEE_PER_PROOF); if user_balance < min_balance { return false; } @@ -432,34 +616,119 @@ impl Batcher { true } - async fn check_nonce_and_increment(&self, addr: Address, nonce: U256) -> bool { - let mut batch_state = self.batch_state.lock().await; + /// Handles a message with an expected nonce. + /// If the max_fee is valid, it is added to the batch. + /// If the max_fee is invalid, a message is sent to the client. + /// Returns true if the message was added to the batch, false otherwise. + async fn handle_expected_nonce_message( + &self, + mut batch_state: tokio::sync::MutexGuard<'_, BatchState>, + min_fee: U256, + nonced_verification_data: NoncedVerificationData, + ws_conn_sink: Arc, Message>>>, + signature: Signature, + addr: Address, + ) -> bool { + let max_fee = nonced_verification_data.max_fee; + if max_fee > min_fee { + warn!( + "Invalid max fee for address {addr}, had fee {:?} < {:?}", + min_fee, max_fee + ); + send_message(ws_conn_sink.clone(), ValidityResponseMessage::InvalidMaxFee).await; + return false; + } - let expected_user_nonce = match batch_state.user_nonces.get(&addr) { - Some(nonce) => *nonce, - None => { - let user_nonce = match self.get_user_nonce(addr).await { - Ok(nonce) => nonce, - Err(e) => { - error!("Failed to get user nonce for address {:?}: {:?}", addr, e); - return false; - } - }; + let nonce = nonced_verification_data.nonce; + + batch_state.user_nonces.insert(addr, nonce + U256::one()); + batch_state.user_min_fee.insert(addr, max_fee); + + self.add_to_batch( + batch_state, + nonced_verification_data, + ws_conn_sink.clone(), + signature, + addr, + ) + .await; + + true + } + + /// Handles a replacement message + /// First checks if the message is already in the batch + /// If the message is in the batch, checks if the max fee is higher + /// If the max fee is higher, replaces the message in the batch + /// If the max fee is lower, sends an error message to the client + /// If the message is not in the batch, sends an error message to the client + /// Returns true if the message was replaced in the batch, false otherwise + async fn handle_replacement_message( + &self, + mut batch_state: tokio::sync::MutexGuard<'_, BatchState>, + nonced_verification_data: NoncedVerificationData, + ws_conn_sink: Arc, Message>>>, + signature: Signature, + addr: Address, + expected_user_nonce: U256, + ) -> bool { + let replacement_max_fee = nonced_verification_data.max_fee; + let nonce = nonced_verification_data.nonce; + + let mut replacement_entry = match batch_state.get_entry(addr, nonce) { + Some(entry) => { + if entry.nonced_verification_data.max_fee < replacement_max_fee { + entry.clone() + } else { + warn!( + "Invalid replacement message for address {addr}, had fee {:?} < {:?}", + entry.nonced_verification_data.max_fee, replacement_max_fee + ); + send_message( + ws_conn_sink.clone(), + ValidityResponseMessage::InvalidReplacementMessage, + ) + .await; - batch_state.user_nonces.insert(addr, user_nonce); - user_nonce + return false; + } + } + None => { + warn!( + "Invalid nonce for address {addr} Expected: {:?}, got: {:?}", + expected_user_nonce, nonce + ); + send_message(ws_conn_sink.clone(), ValidityResponseMessage::InvalidNonce).await; + return false; } }; - if nonce != expected_user_nonce { - error!( - "Invalid nonce for address {addr} Expected: {:?}, got: {:?}", - expected_user_nonce, nonce - ); + info!( + "Replacing message for address {} with nonce {} and max fee {}", + addr, nonce, replacement_max_fee + ); + + replacement_entry.signature = signature; + replacement_entry.verification_data_commitment = + nonced_verification_data.verification_data.clone().into(); + replacement_entry.nonced_verification_data = nonced_verification_data; + + // close old sink and replace with new one + { + let mut old_sink = replacement_entry.messaging_sink.write().await; + if let Err(e) = old_sink.close().await { + // we dont want to exit here, just log the error + warn!("Error closing sink: {:?}", e); + } + } + replacement_entry.messaging_sink = ws_conn_sink.clone(); + + if let Some(msg) = batch_state.validate_and_increment_max_fee(replacement_entry) { + warn!("Invalid max fee"); + send_message(ws_conn_sink.clone(), msg).await; return false; } - batch_state.user_nonces.insert(addr, nonce + U256::one()); true } @@ -475,21 +744,30 @@ impl Batcher { /// Adds verification data to the current batch queue. async fn add_to_batch( - self: Arc, + &self, + mut batch_state: tokio::sync::MutexGuard<'_, BatchState>, verification_data: NoncedVerificationData, ws_conn_sink: Arc, Message>>>, proof_submitter_sig: Signature, + proof_submiter_addr: Address, ) { - let mut batch_state = self.batch_state.lock().await; info!("Calculating verification data commitments..."); let verification_data_comm = verification_data.clone().into(); info!("Adding verification data to batch..."); - batch_state.batch_queue.push(( - verification_data, - verification_data_comm, - ws_conn_sink, - proof_submitter_sig, - )); + + let max_fee = verification_data.max_fee; + let nonce = verification_data.nonce; + + batch_state.batch_queue.push( + BatchQueueEntry::new( + verification_data, + verification_data_comm, + ws_conn_sink, + proof_submitter_sig, + proof_submiter_addr, + ), + BatchQueueEntryPriority::new(max_fee, nonce), + ); info!( "Current batch queue length: {}", batch_state.batch_queue.len() @@ -500,13 +778,19 @@ impl Batcher { /// There are essentially two conditions to be checked: /// * Has the current batch reached the minimum size to be posted? /// * Has the received block number surpassed the maximum interval with respect to the last posted batch block? + /// Then the batch will be made as big as possible given this two conditions: + /// * The serialized batch size needs to be smaller than the maximum batch size + /// * The batch submission fee is less than the lowest `max fee` included the batch, + /// * And the batch submission fee is more than the highest `max fee` not included the batch. /// An extra sanity check is made to check if the batch size is 0, since it does not make sense to post /// an empty batch, even if the block interval has been reached. - /// Once the batch meets the conditions for submission, it check if it needs to be splitted into smaller batches, - /// depending on the configured maximum batch size. The batch is splitted at the index where the max size is surpassed, - /// and all the elements up to that index are copied and cleared from the batch queue. The copy is then passed to the + /// Once the batch meets the conditions for submission, the finalized batch is then passed to the /// `finalize_batch` function. - async fn is_batch_ready(&self, block_number: u64) -> Option { + async fn is_batch_ready( + &self, + block_number: u64, + gas_price: U256, + ) -> Option> { let mut batch_state = self.batch_state.lock().await; let current_batch_len = batch_state.batch_queue.len(); @@ -529,12 +813,6 @@ impl Batcher { return None; } - let batch_verification_data: Vec = batch_state - .batch_queue - .iter() - .map(|(vd, _, _, _)| vd.clone()) - .collect(); - // Check if a batch is currently being posted let mut batch_posting = self.posting_batch.lock().await; if *batch_posting { @@ -547,55 +825,98 @@ impl Batcher { // Set the batch posting flag to true *batch_posting = true; - let current_batch_size = match cbor_serialize(&batch_verification_data) { - Ok(serialized) => serialized.len(), - Err(e) => { - error!( - "Failed to serialize verification data: {:?}, resetting batch state", - e - ); - self.flush_queue_and_clear_nonce_cache().await; - return None; + let mut batch_queue_copy = batch_state.batch_queue.clone(); + + match self.try_build_batch(&mut batch_queue_copy, gas_price) { + Some(finalized_batch) => { + // Set the batch queue to batch queue copy + batch_state.batch_queue = batch_queue_copy; + batch_state.update_user_proofs_in_batch_and_min_fee(); + + Some(finalized_batch) } - }; + None => { + // We cant post a batch since users are not willing to pay the needed fee, wait for more proofs + info!("No working batch found. Waiting for more proofs..."); + *batch_posting = false; + None + } + } + } - // check if the current batch needs to be splitted into smaller batches - if current_batch_size > self.max_batch_size { - info!("Batch max size exceded. Splitting current batch..."); - let mut acc_batch_size = 0; - let mut finalized_batch_idx = 0; - for (idx, (verification_data, _, _, _)) in batch_state.batch_queue.iter().enumerate() { - acc_batch_size += match cbor_serialize(verification_data) { - Ok(serialized) => serialized.len(), + /// Tries to build a batch from the current batch queue. + /// The function iterates over the batch queue and tries to build a batch that satisfies the gas price + /// and the max_fee set by the users. + /// If a working batch is found, the function tries to make it as big as possible by adding more proofs, + /// until a user is not willing to pay the required fee. + /// The extra check is that the batch size does not surpass the maximum batch size. + /// Note that the batch queue is sorted descending by the max_fee set by the users. + /// We use a copy of the batch queue because we might not find a working batch, + /// and we want to keep the original batch queue intact. + /// Returns Some(working_batch) if found, None otherwise. + fn try_build_batch( + &self, + batch_queue_copy: &mut PriorityQueue, + gas_price: U256, + ) -> Option> { + let mut finalized_batch = vec![]; + let mut finalized_batch_size = 2; // at most two extra bytes for cbor encoding array markers + let mut finalized_batch_works = false; + + while let Some((entry, _)) = batch_queue_copy.peek() { + let serialized_vd_size = + match cbor_serialize(&entry.nonced_verification_data.verification_data) { + Ok(val) => val.len(), Err(e) => { - error!( - "Failed to serialize verification data: {:?}, resetting batch", - e - ); - self.flush_queue_and_clear_nonce_cache().await; - return None; + warn!("Serialization error: {:?}", e); + break; } }; - if acc_batch_size > self.max_batch_size { - finalized_batch_idx = idx; - break; - } + + if finalized_batch_size + serialized_vd_size > self.max_batch_size { + break; } - let finalized_batch = batch_state - .batch_queue - .drain(..finalized_batch_idx) - .collect(); - return Some(finalized_batch); - } - // A copy of the batch is made to be returned and the current batch is cleared - let finalized_batch = batch_state.batch_queue.clone(); - batch_state.batch_queue.clear(); + let num_proofs = finalized_batch.len() + 1; - // Clear the user proofs in batch as well - batch_state.user_proof_count_in_batch.clear(); + let gas_per_proof = (CONSTANT_GAS_COST + + ADDITIONAL_SUBMISSION_GAS_COST_PER_PROOF * num_proofs as u128) + / num_proofs as u128; + + let fee_per_proof = U256::from(gas_per_proof) * gas_price; - Some(finalized_batch) + debug!( + "Validating that batch submission fee {} is less than max fee {} for sender {}", + fee_per_proof, entry.nonced_verification_data.max_fee, entry.sender, + ); + + // it is sufficient to check this max fee because it will be the lowest since its sorted + if fee_per_proof < entry.nonced_verification_data.max_fee && num_proofs >= 2 { + finalized_batch_works = true; + } else if finalized_batch_works { + // Can not add latest element since it is not willing to pay the corresponding fee + // Could potentially still find another working solution later with more elements, + // maybe we can explore all lengths in a future version + // or do the reverse from this, try with whole batch, + // then with whole batch minus last element, etc + break; + } + + // Either max fee is insufficient but we have not found a working solution yet, + // or we can keep adding to a working batch, + // Either way we need to keep iterating + finalized_batch_size += serialized_vd_size; + + // We can unwrap here because we have already peeked to check there is a value + let (entry, _) = batch_queue_copy.pop().unwrap(); + finalized_batch.push(entry); + } + + if finalized_batch_works { + Some(finalized_batch) + } else { + None + } } /// Takes the finalized batch as input and builds the merkle tree, posts verification data batch @@ -604,12 +925,13 @@ impl Batcher { async fn finalize_batch( &self, block_number: u64, - finalized_batch: BatchQueue, + finalized_batch: Vec, + gas_price: U256, ) -> Result<(), BatcherError> { let nonced_batch_verifcation_data: Vec = finalized_batch .clone() .into_iter() - .map(|(data, _, _, _)| data) + .map(|entry| entry.nonced_verification_data) .collect(); let batch_verification_data: Vec = nonced_batch_verifcation_data @@ -624,7 +946,7 @@ impl Batcher { let batch_data_comm: Vec = finalized_batch .clone() .into_iter() - .map(|(_, data_comm, _, _)| data_comm) + .map(|entry| entry.verification_data_commitment) .collect(); let batch_merkle_tree: MerkleTree = @@ -645,31 +967,20 @@ impl Batcher { .map(VerificationCommitmentBatch::hash_data) .collect(); - let signatures = finalized_batch - .iter() - .map(|(_, _, _, sig)| sig) - .cloned() - .collect(); - - let nonces = finalized_batch - .iter() - .map(|(nonced_vd, _, _, _)| nonced_vd.nonce) - .collect(); - if let Err(e) = self .submit_batch( &batch_bytes, &batch_merkle_tree.root, leaves, - signatures, - nonces, + &finalized_batch, + gas_price, ) .await { - for (_, _, ws_sink, _) in finalized_batch.iter() { + for entry in finalized_batch.iter() { let merkle_root = hex::encode(batch_merkle_tree.root); send_message( - ws_sink.clone(), + entry.messaging_sink.clone(), ResponseMessage::CreateNewTaskError(merkle_root), ) .await @@ -687,21 +998,31 @@ impl Batcher { warn!("Resetting state... Flushing queue and nonces"); let mut batch_state = self.batch_state.lock().await; - for (_, _, ws_sink, _) in batch_state.batch_queue.iter() { - send_message(ws_sink.clone(), ResponseMessage::BatchReset).await; + for (entry, _) in batch_state.batch_queue.iter() { + send_message(entry.messaging_sink.clone(), ResponseMessage::BatchReset).await; } batch_state.batch_queue.clear(); batch_state.user_nonces.clear(); batch_state.user_proof_count_in_batch.clear(); + batch_state.user_min_fee.clear(); } /// Receives new block numbers, checks if conditions are met for submission and /// finalizes the batch. async fn handle_new_block(&self, block_number: u64) -> Result<(), BatcherError> { - while let Some(finalized_batch) = self.is_batch_ready(block_number).await { - let batch_finalization_result = - self.finalize_batch(block_number, finalized_batch).await; + let gas_price = match self.get_gas_price().await { + Some(price) => price, + None => { + error!("Failed to get gas price"); + return Err(BatcherError::GasPriceError); + } + }; + + while let Some(finalized_batch) = self.is_batch_ready(block_number, gas_price).await { + let batch_finalization_result = self + .finalize_batch(block_number, finalized_batch, gas_price) + .await; // Resetting this here to avoid doing it on every return path of `finalize_batch` function let mut batch_posting = self.posting_batch.lock().await; @@ -709,6 +1030,7 @@ impl Batcher { batch_finalization_result?; } + Ok(()) } @@ -718,9 +1040,25 @@ impl Batcher { batch_bytes: &[u8], batch_merkle_root: &[u8; 32], leaves: Vec<[u8; 32]>, - signatures: Vec, - nonces: Vec<[u8; 32]>, + finalized_batch: &[BatchQueueEntry], + gas_price: U256, ) -> Result<(), BatcherError> { + let signatures: Vec<_> = finalized_batch + .iter() + .map(|entry| &entry.signature) + .cloned() + .collect(); + + let nonces: Vec<_> = finalized_batch + .iter() + .map(|entry| entry.nonced_verification_data.nonce) + .collect(); + + let max_fees: Vec<_> = finalized_batch + .iter() + .map(|entry| entry.nonced_verification_data.max_fee) + .collect(); + let s3_client = self.s3_client.clone(); let batch_merkle_root_hex = hex::encode(batch_merkle_root); info!("Batch merkle root: 0x{}", batch_merkle_root_hex); @@ -743,14 +1081,29 @@ impl Batcher { let num_proofs_in_batch = leaves.len(); - let gas_per_proof = (CONSTANT_COST - + ADDITIONAL_SUBMISSION_COST_PER_PROOF * num_proofs_in_batch as u128) + let gas_per_proof = (CONSTANT_GAS_COST + + ADDITIONAL_SUBMISSION_GAS_COST_PER_PROOF * num_proofs_in_batch as u128) / num_proofs_in_batch as u128; + let fee_per_proof = U256::from(gas_per_proof) * gas_price; + let fee_for_aggregator = (U256::from(AGGREGATOR_GAS_COST) + * gas_price + * U256::from(DEFAULT_AGGREGATOR_FEE_MULTIPLIER)) + / U256::from(DEFAULT_AGGREGATOR_FEE_DIVIDER); + let respond_to_task_fee_limit = (fee_for_aggregator + * U256::from(RESPOND_TO_TASK_FEE_LIMIT_MULTIPLIER)) + / U256::from(RESPOND_TO_TASK_FEE_LIMIT_DIVIDER); + let fee_params = CreateNewTaskFeeParams::new( + fee_for_aggregator, + fee_per_proof, + gas_price, + respond_to_task_fee_limit, + ); + let signatures = signatures .iter() .enumerate() - .map(|(i, signature)| SignatureData::new(signature, nonces[i])) + .map(|(i, signature)| SignatureData::new(signature, nonces[i], max_fees[i])) .collect(); match self @@ -759,8 +1112,7 @@ impl Batcher { batch_data_pointer, leaves, signatures, - AGGREGATOR_COST.into(), - gas_per_proof.into(), + fee_params, ) .await { @@ -785,8 +1137,7 @@ impl Batcher { batch_data_pointer: String, leaves: Vec<[u8; 32]>, signatures: Vec, - gas_for_aggregator: U256, - gas_per_proof: U256, + fee_params: CreateNewTaskFeeParams, ) -> Result { // pad leaves to next power of 2 let padded_leaves = Self::pad_leaves(leaves); @@ -798,8 +1149,7 @@ impl Batcher { batch_data_pointer.clone(), padded_leaves.clone(), signatures.clone(), - gas_for_aggregator, - gas_per_proof, + fee_params.clone(), &self.payment_service, ) .await @@ -818,8 +1168,7 @@ impl Batcher { batch_data_pointer, padded_leaves, signatures, - gas_for_aggregator, - gas_per_proof, + fee_params, &self.payment_service_fallback, ) .await?; @@ -900,29 +1249,35 @@ impl Batcher { } }; - debug!("non paying nonce: {:?}", nonpaying_nonce); + info!("non paying nonce: {:?}", nonpaying_nonce); + + let nonce_value = *nonpaying_nonce; - let mut nonce_bytes = [0u8; 32]; - nonpaying_nonce.to_big_endian(&mut nonce_bytes); *nonpaying_nonce += U256::one(); NoncedVerificationData::new( client_msg.verification_data.verification_data.clone(), - nonce_bytes, + nonce_value, + DEFAULT_MAX_FEE_PER_PROOF.into(), // 13_000 gas per proof * 100 gwei gas price (upper bound) self.chain_id, + self.payment_service.address(), ) }; let client_msg = ClientMessage::new( nonced_verification_data.clone(), non_paying_config.replacement.clone(), - ); + ) + .await; + let batch_state = self.batch_state.lock().await; self.clone() .add_to_batch( + batch_state, nonced_verification_data, ws_conn_sink.clone(), client_msg.signature, + non_paying_config.address, ) .await; } else { @@ -974,20 +1329,34 @@ impl Batcher { unlock_block != U256::zero() } + + async fn get_gas_price(&self) -> Option { + match self.eth_ws_provider.get_gas_price().await { + Ok(gas_price) => Some(gas_price), // this is the block's max priority gas price, not the base fee + Err(_) => match self.eth_ws_provider_fallback.get_gas_price().await { + Ok(gas_price) => Some(gas_price), + Err(_) => { + warn!("Failed to get gas price"); + None + } + }, + } + } } async fn send_batch_inclusion_data_responses( - finalized_batch: BatchQueue, + finalized_batch: Vec, batch_merkle_tree: &MerkleTree, ) -> Result<(), BatcherError> { - for (vd_batch_idx, (_, _, ws_sink, _)) in finalized_batch.iter().enumerate() { + for (vd_batch_idx, entry) in finalized_batch.iter().enumerate() { let batch_inclusion_data = BatchInclusionData::new(vd_batch_idx, batch_merkle_tree); let response = ResponseMessage::BatchInclusionData(batch_inclusion_data); let serialized_response = cbor_serialize(&response) .map_err(|e| BatcherError::SerializationError(e.to_string()))?; - let sending_result = ws_sink + let sending_result = entry + .messaging_sink .write() .await .send(Message::binary(serialized_response)) diff --git a/batcher/aligned-batcher/src/types/batch_queue.rs b/batcher/aligned-batcher/src/types/batch_queue.rs index 2a9ae1e69..bc65d8846 100644 --- a/batcher/aligned-batcher/src/types/batch_queue.rs +++ b/batcher/aligned-batcher/src/types/batch_queue.rs @@ -1,16 +1,95 @@ -use ethers::types::Signature; +use ethers::types::{Address, Signature, U256}; use futures_util::stream::SplitSink; -use std::sync::Arc; +use priority_queue::PriorityQueue; +use std::{ + hash::{Hash, Hasher}, + sync::Arc, +}; use tokio::{net::TcpStream, sync::RwLock}; use tokio_tungstenite::{tungstenite::Message, WebSocketStream}; use aligned_sdk::core::types::{NoncedVerificationData, VerificationDataCommitment}; -pub(crate) type BatchQueueEntry = ( - NoncedVerificationData, - VerificationDataCommitment, - Arc, Message>>>, - Signature, -); +#[derive(Clone)] +pub(crate) struct BatchQueueEntry { + pub(crate) nonced_verification_data: NoncedVerificationData, + pub(crate) verification_data_commitment: VerificationDataCommitment, + pub(crate) messaging_sink: Arc, Message>>>, + pub(crate) signature: Signature, + pub(crate) sender: Address, +} -pub(crate) type BatchQueue = Vec; +#[derive(Clone)] +pub(crate) struct BatchQueueEntryPriority { + max_fee: U256, + nonce: U256, +} + +impl BatchQueueEntry { + pub fn new( + nonced_verification_data: NoncedVerificationData, + verification_data_commitment: VerificationDataCommitment, + messaging_sink: Arc, Message>>>, + signature: Signature, + sender: Address, + ) -> Self { + BatchQueueEntry { + nonced_verification_data, + verification_data_commitment, + messaging_sink, + signature, + sender, + } + } +} + +impl BatchQueueEntryPriority { + pub fn new(max_fee: U256, nonce: U256) -> Self { + BatchQueueEntryPriority { max_fee, nonce } + } +} + +impl Eq for BatchQueueEntry {} + +// We consider two entries to be equal if they have the same sender and nonce +impl PartialEq for BatchQueueEntry { + fn eq(&self, other: &Self) -> bool { + self.sender == other.sender + && self.nonced_verification_data.nonce == other.nonced_verification_data.nonce + } +} + +// We consider two entries to be equal if they have the same sender and nonce +impl Hash for BatchQueueEntry { + fn hash(&self, state: &mut H) { + self.sender.hash(state); + self.nonced_verification_data.nonce.hash(state); + } +} + +impl Eq for BatchQueueEntryPriority {} + +impl PartialEq for BatchQueueEntryPriority { + fn eq(&self, other: &Self) -> bool { + self.max_fee == other.max_fee && self.nonce == other.nonce + } +} + +impl PartialOrd for BatchQueueEntryPriority { + fn partial_cmp(&self, other: &Self) -> Option { + Some(self.cmp(other)) + } +} + +impl Ord for BatchQueueEntryPriority { + fn cmp(&self, other: &Self) -> std::cmp::Ordering { + let ord = self.max_fee.cmp(&other.max_fee); + if ord == std::cmp::Ordering::Equal { + self.nonce.cmp(&other.nonce).reverse() + } else { + ord + } + } +} + +pub(crate) type BatchQueue = PriorityQueue; diff --git a/batcher/aligned-batcher/src/types/errors.rs b/batcher/aligned-batcher/src/types/errors.rs index da9ce0c3d..92d3b84ce 100644 --- a/batcher/aligned-batcher/src/types/errors.rs +++ b/batcher/aligned-batcher/src/types/errors.rs @@ -13,6 +13,7 @@ pub enum BatcherError { TransactionSendError, MaxRetriesReachedError, SerializationError(String), + GasPriceError, } impl From for BatcherError { @@ -60,6 +61,9 @@ impl fmt::Debug for BatcherError { BatcherError::SerializationError(e) => { write!(f, "Serialization error: {}", e) } + BatcherError::GasPriceError => { + write!(f, "Gas price error") + } } } } diff --git a/batcher/aligned-sdk/Cargo.toml b/batcher/aligned-sdk/Cargo.toml index 6df535364..cd71f0916 100644 --- a/batcher/aligned-sdk/Cargo.toml +++ b/batcher/aligned-sdk/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2021" [dependencies] -ethers = { tag = "v2.0.15-fix-reconnections", features = ["ws", "rustls"], git = "https://github.com/yetanotherco/ethers-rs.git" } +ethers = { tag = "v2.0.15-fix-reconnections", features = ["ws", "rustls", "eip712"], git = "https://github.com/yetanotherco/ethers-rs.git" } log = { version = "0.4.21"} serde_json = "1.0.117" tokio-tungstenite = { version = "0.23.1", features = ["native-tls"] } diff --git a/batcher/aligned-sdk/abi/AlignedLayerServiceManager.json b/batcher/aligned-sdk/abi/AlignedLayerServiceManager.json index d54b9a32a..a97ba08c6 100644 --- a/batcher/aligned-sdk/abi/AlignedLayerServiceManager.json +++ b/batcher/aligned-sdk/abi/AlignedLayerServiceManager.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"__avsDirectory","type":"address","internalType":"contract IAVSDirectory"},{"name":"__rewardsCoordinator","type":"address","internalType":"contract IRewardsCoordinator"},{"name":"__registryCoordinator","type":"address","internalType":"contract IRegistryCoordinator"},{"name":"__stakeRegistry","type":"address","internalType":"contract IStakeRegistry"}],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"avsDirectory","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"batchesState","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"taskCreatedBlock","type":"uint32","internalType":"uint32"},{"name":"responded","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"blsApkRegistry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IBLSApkRegistry"}],"stateMutability":"view"},{"type":"function","name":"checkPublicInput","inputs":[{"name":"publicInput","type":"bytes","internalType":"bytes"},{"name":"hash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"checkSignatures","inputs":[{"name":"msgHash","type":"bytes32","internalType":"bytes32"},{"name":"referenceBlockNumber","type":"uint32","internalType":"uint32"},{"name":"params","type":"tuple","internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","components":[{"name":"nonSignerQuorumBitmapIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerPubkeys","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApks","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApkIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"totalStakeIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerStakeIndices","type":"uint32[][]","internalType":"uint32[][]"}]}],"outputs":[{"name":"","type":"tuple","internalType":"struct IBLSSignatureChecker.QuorumStakeTotals","components":[{"name":"signedStakeForQuorum","type":"uint96[]","internalType":"uint96[]"},{"name":"totalStakeForQuorum","type":"uint96[]","internalType":"uint96[]"}]},{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"createAVSRewardsSubmission","inputs":[{"name":"rewardsSubmissions","type":"tuple[]","internalType":"struct IRewardsCoordinator.RewardsSubmission[]","components":[{"name":"strategiesAndMultipliers","type":"tuple[]","internalType":"struct IRewardsCoordinator.StrategyAndMultiplier[]","components":[{"name":"strategy","type":"address","internalType":"contract IStrategy"},{"name":"multiplier","type":"uint96","internalType":"uint96"}]},{"name":"token","type":"address","internalType":"contract IERC20"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"startTimestamp","type":"uint32","internalType":"uint32"},{"name":"duration","type":"uint32","internalType":"uint32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"createNewTask","inputs":[{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"batchDataPointer","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"delegation","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IDelegationManager"}],"stateMutability":"view"},{"type":"function","name":"deregisterOperatorFromAVS","inputs":[{"name":"operator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getOperatorRestakedStrategies","inputs":[{"name":"operator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getRestakeableStrategies","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_initialOwner","type":"address","internalType":"address"},{"name":"_rewardsInitiator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"registerOperatorToAVS","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"operatorSignature","type":"tuple","internalType":"struct ISignatureUtils.SignatureWithSaltAndExpiry","components":[{"name":"signature","type":"bytes","internalType":"bytes"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"expiry","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registryCoordinator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IRegistryCoordinator"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"respondToTask","inputs":[{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"nonSignerStakesAndSignature","type":"tuple","internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","components":[{"name":"nonSignerQuorumBitmapIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerPubkeys","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApks","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApkIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"totalStakeIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerStakeIndices","type":"uint32[][]","internalType":"uint32[][]"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"respondToTaskV2","inputs":[{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"senderAddress","type":"address","internalType":"address"},{"name":"nonSignerStakesAndSignature","type":"tuple","internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","components":[{"name":"nonSignerQuorumBitmapIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerPubkeys","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApks","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApkIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"totalStakeIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerStakeIndices","type":"uint32[][]","internalType":"uint32[][]"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rewardsInitiator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"setRewardsInitiator","inputs":[{"name":"newRewardsInitiator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setStaleStakesForbidden","inputs":[{"name":"value","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stakeRegistry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IStakeRegistry"}],"stateMutability":"view"},{"type":"function","name":"staleStakesForbidden","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"trySignatureAndApkVerification","inputs":[{"name":"msgHash","type":"bytes32","internalType":"bytes32"},{"name":"apk","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]}],"outputs":[{"name":"pairingSuccessful","type":"bool","internalType":"bool"},{"name":"siganatureIsValid","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"updateAVSMetadataURI","inputs":[{"name":"_metadataURI","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifyBatchInclusion","inputs":[{"name":"proofCommitment","type":"bytes32","internalType":"bytes32"},{"name":"pubInputCommitment","type":"bytes32","internalType":"bytes32"},{"name":"provingSystemAuxDataCommitment","type":"bytes32","internalType":"bytes32"},{"name":"proofGeneratorAddr","type":"bytes20","internalType":"bytes20"},{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"merkleProof","type":"bytes","internalType":"bytes"},{"name":"verificationDataBatchIndex","type":"uint256","internalType":"uint256"},{"name":"senderAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"event","name":"BatchVerified","inputs":[{"name":"batchMerkleRoot","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"senderAddress","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"BatcherBalanceUpdated","inputs":[{"name":"batcher","type":"address","indexed":true,"internalType":"address"},{"name":"newBalance","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"NewBatch","inputs":[{"name":"batchMerkleRoot","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"taskCreatedBlock","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"batchDataPointer","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"NewBatchV2","inputs":[{"name":"batchMerkleRoot","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"senderAddress","type":"address","indexed":false,"internalType":"address"},{"name":"taskCreatedBlock","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"batchDataPointer","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RewardsInitiatorUpdated","inputs":[{"name":"prevRewardsInitiator","type":"address","indexed":false,"internalType":"address"},{"name":"newRewardsInitiator","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"StaleStakesForbiddenUpdate","inputs":[{"name":"value","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false}],"bytecode":{"object":"0x6101806040523480156200001257600080fd5b506040516200564d3803806200564d8339810160408190526200003591620002e5565b6001600160a01b0380851660805280841660a05280831660c052811660e0528184848284620000636200020a565b50505050806001600160a01b0316610100816001600160a01b031681525050806001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e791906200034d565b6001600160a01b0316610120816001600160a01b031681525050806001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000140573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016691906200034d565b6001600160a01b0316610140816001600160a01b031681525050610120516001600160a01b031663df5cf7236040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e891906200034d565b6001600160a01b03166101605250620002006200020a565b5050505062000374565b600054610100900460ff1615620002775760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620002ca576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620002e257600080fd5b50565b60008060008060808587031215620002fc57600080fd5b84516200030981620002cc565b60208601519094506200031c81620002cc565b60408601519093506200032f81620002cc565b60608601519092506200034281620002cc565b939692955090935050565b6000602082840312156200036057600080fd5b81516200036d81620002cc565b9392505050565b60805160a05160c05160e051610100516101205161014051610160516151cb620004826000396000818161061001526119dc01526000818161039d0152611bef0152600081816103e901528181611ddc0152611fcc015260008181610450015281816110f9015281816116980152818161183f0152611a90015260008181610e0e01528181610f690152818161100001528181612b1a01528181612c9d0152612d3c015260008181610c3501528181610cc401528181610d4401528181612515015281816125e101528181612a580152612bf801526000818161306a01528181613126015261321201526000818161041a015281816125690152818161263d01526126bc01526151cb6000f3fe6080604052600436106101bb5760003560e01c8063715018a6116100ec578063b099627e1161008a578063e481af9d11610064578063e481af9d14610632578063f2fde38b14610647578063fc299dee14610667578063fce36c7d1461068757600080fd5b8063b099627e14610589578063b98d0908146105e4578063df5cf723146105fe57600080fd5b80639926ee7d116100c65780639926ee7d14610509578063a364f4da14610529578063a98fb35514610549578063ab21739a1461056957600080fd5b8063715018a6146104b65780638da5cb5b146104cb57806395c6d604146104e957600080fd5b80634ae07c3711610159578063683048351161013357806368304835146103d75780636b3aa72e1461040b5780636d14a9871461043e57806370a082311461047257600080fd5b80634ae07c371461034a5780635c008994146103785780635df459461461038b57600080fd5b806333cfb7b71161019557806333cfb7b7146102bd5780633bc28c8c146102ea578063416c7e5e1461030a578063485cc9551461032a57600080fd5b806306045a911461022f578063171f1d5b146102645780632dd94eba1461029b57600080fd5b3661022a5733600090815260ca6020526040812080543492906101df90849061407d565b909155505033600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a2005b600080fd5b34801561023b57600080fd5b5061024f61024a3660046141b9565b6106a7565b60405190151581526020015b60405180910390f35b34801561027057600080fd5b5061028461027f36600461431a565b610786565b60408051921515835290151560208301520161025b565b3480156102a757600080fd5b506102bb6102b6366004614621565b610910565b005b3480156102c957600080fd5b506102dd6102d8366004614667565b610c10565b60405161025b9190614684565b3480156102f657600080fd5b506102bb610305366004614667565b6110e3565b34801561031657600080fd5b506102bb6103253660046146df565b6110f7565b34801561033657600080fd5b506102bb6103453660046146fc565b61122e565b34801561035657600080fd5b5061036a610365366004614735565b611343565b60405161025b9291906147cf565b6102bb610386366004614860565b612296565b34801561039757600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161025b565b3480156103e357600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561041757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103bf565b34801561044a57600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561047e57600080fd5b506104a861048d366004614667565b6001600160a01b0316600090815260ca602052604090205490565b60405190815260200161025b565b3480156104c257600080fd5b506102bb6124d1565b3480156104d757600080fd5b506033546001600160a01b03166103bf565b3480156104f557600080fd5b5061024f6105043660046148ab565b6124e5565b34801561051557600080fd5b506102bb6105243660046148f6565b61250a565b34801561053557600080fd5b506102bb610544366004614667565b6125d6565b34801561055557600080fd5b506102bb6105643660046149a1565b61269d565b34801561057557600080fd5b506102bb6105843660046149f1565b6126f1565b34801561059557600080fd5b506105c86105a4366004614a18565b60c96020526000908152604090205463ffffffff811690600160201b900460ff1682565b6040805163ffffffff909316835290151560208301520161025b565b3480156105f057600080fd5b5060975461024f9060ff1681565b34801561060a57600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561063e57600080fd5b506102dd612a52565b34801561065357600080fd5b506102bb610662366004614667565b612e1b565b34801561067357600080fd5b506065546103bf906001600160a01b031681565b34801561069357600080fd5b506102bb6106a2366004614a31565b612e91565b60008085836040516020016106bd929190614aa5565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff166106f957600091505061077a565b600081815260c96020526040902054600160201b900460ff1661072057600091505061077a565b60408051602081018c90529081018a9052606081018990526001600160601b03198816608082015260009060940160408051601f198184030181529190528051602082012090915061077487848389613249565b93505050505b98975050505050505050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878760000151886020015188600001516000600281106107ce576107ce614ac0565b60200201518951600160200201518a602001516000600281106107f3576107f3614ac0565b60200201518b6020015160016002811061080f5761080f614ac0565b602090810291909101518c518d83015160405161086c9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c61088f9190614ad6565b90506109026108a86108a18884613261565b86906132f8565b6108b061338c565b6108f86108e9856108e3604080518082018252600080825260209182015281518083019092526001825260029082015290565b90613261565b6108f28c61344c565b906132f8565b886201d4c06134dc565b909890975095505050505050565b737969c5ed335650692bc04293b07f5bf2e7a673c060005a600085815260c9602052604090205490915063ffffffff166109885760405162461bcd60e51b8152602060048201526014602482015273426174636820646f65736e27742065786973747360601b60448201526064015b60405180910390fd5b600084815260c96020526040902054600160201b900460ff16156109e85760405162461bcd60e51b815260206004820152601760248201527610985d18da08185b1c9958591e481c995cdc1bdb991959604a1b604482015260640161097f565b6001600160a01b038216600090815260ca6020526040902054610a465760405162461bcd60e51b81526020600482015260166024820152754261746368657220686173206e6f2062616c616e636560501b604482015260640161097f565b600084815260c960205260408120805464ff00000000198116600160201b179091558190610a7c90879063ffffffff1687611343565b91509150604360ff168260200151600081518110610a9c57610a9c614ac0565b6020026020010151610aae9190614af8565b6001600160601b031660648360000151600081518110610ad057610ad0614ac0565b60200260200101516001600160601b0316610aeb9190614b27565b1015610b095760405162461bcd60e51b815260040161097f90614b46565b6040516001600160a01b038516815286907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a610b598387614ba4565b610b66906201117061407d565b610b709190614b27565b6001600160a01b038716600090815260ca6020526040902054909150811115610bab5760405162461bcd60e51b815260040161097f90614bbb565b6001600160a01b038616600090815260ca602052604081208054839290610bd3908490614ba4565b9091555050604051339082156108fc029083906000818181858888f19350505050158015610c05573d6000803e3d6000fd5b505050505050505050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90602401602060405180830381865afa158015610c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca09190614c18565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa158015610d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2f9190614c31565b90506001600160c01b0381161580610dc957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc49190614c5a565b60ff16155b15610de95760408051600080825260208201909252905b50949350505050565b6000610dfd826001600160c01b0316613700565b90506000805b8251811015610ed3577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f5848381518110610e4d57610e4d614ac0565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb59190614c18565b610ebf908361407d565b915080610ecb81614c7d565b915050610e03565b506000816001600160401b03811115610eee57610eee614095565b604051908082528060200260200182016040528015610f17578160200160208202803683370190505b5090506000805b84518110156110d6576000858281518110610f3b57610f3b614ac0565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610fb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd49190614c18565b905060005b818110156110c0576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa15801561104e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110729190614cad565b6000015186868151811061108857611088614ac0565b6001600160a01b0390921660209283029190910190910152846110aa81614c7d565b95505080806110b890614c7d565b915050610fd9565b50505080806110ce90614c7d565b915050610f1e565b5090979650505050505050565b6110eb6137c2565b6110f48161381c565b50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611155573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111799190614cee565b6001600160a01b0316336001600160a01b0316146112255760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a40161097f565b6110f481613885565b600054610100900460ff161580801561124e5750600054600160ff909116105b806112685750303b158015611268575060005460ff166001145b6112cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161097f565b6000805460ff1916600117905580156112ee576000805461ff0019166101001790555b6112f883836138cc565b801561133e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040805180820190915260608082526020820152600082604001515160405180604001604052806001815260200160008152505114801561139f57508260a0015151604051806040016040528060018152602001600081525051145b80156113c657508260c0015151604051806040016040528060018152602001600081525051145b80156113ed57508260e0015151604051806040016040528060018152602001600081525051145b6114575760405162461bcd60e51b8152602060048201526041602482015260008051602061517683398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a40161097f565b825151602084015151146114cf5760405162461bcd60e51b815260206004820152604460248201819052600080516020615176833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a40161097f565b4363ffffffff168463ffffffff161061153e5760405162461bcd60e51b815260206004820152603c602482015260008051602061517683398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b00000000606482015260840161097f565b60408051808201825260008082526020808301829052835180850185526060808252818301528451808601865260018082529083019390935284518381528086019095529293919082810190803683370190505060208281019190915260408051808201825260018082526000919093015280518281528082019091529081602001602082028036833701905050815260408051808201909152606080825260208201528560200151516001600160401b038111156115ff576115ff614095565b604051908082528060200260200182016040528015611628578160200160208202803683370190505b5081526020860151516001600160401b0381111561164857611648614095565b604051908082528060200260200182016040528015611671578160200160208202803683370190505b508160200181905250600061171d60405180604001604052806001815260200160008152507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117189190614c5a565b61394d565b905060005b8760200151518110156119b8576117678860200151828151811061174857611748614ac0565b6020026020010151805160009081526020918201519091526040902090565b8360200151828151811061177d5761177d614ac0565b6020908102919091010152801561183d57602083015161179e600183614ba4565b815181106117ae576117ae614ac0565b602002602001015160001c836020015182815181106117cf576117cf614ac0565b602002602001015160001c1161183d576040805162461bcd60e51b815260206004820152602481019190915260008051602061517683398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f72746564606482015260840161097f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec63518460200151838151811061188257611882614ac0565b60200260200101518b8b6000015185815181106118a1576118a1614ac0565b60200260200101516040518463ffffffff1660e01b81526004016118de9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa1580156118fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191f9190614c31565b6001600160c01b03168360000151828151811061193e5761193e614ac0565b6020026020010181815250506119a46108a1611978848660000151858151811061196a5761196a614ac0565b6020026020010151166139e0565b8a60200151848151811061198e5761198e614ac0565b6020026020010151613a0b90919063ffffffff16565b9450806119b081614c7d565b915050611722565b50506119c383613aef565b60975490935060ff166000816119da576000611a5c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190614c18565b905060005b604051806040016040528060018152602001600081525051811015612167578215611bed578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c4260405180604001604052806001815260200160008152508581518110611ae557611ae5614ac0565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015611b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4d9190614c18565b611b57919061407d565b11611bed5760405162461bcd60e51b8152602060048201526066602482015260008051602061517683398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c40161097f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac60405180604001604052806001815260200160008152508381518110611c4457611c44614ac0565b602001015160f81c60f81b60f81c8c8c60a001518581518110611c6957611c69614ac0565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611cc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce99190614d0b565b6001600160401b031916611d0c8a60400151838151811061174857611748614ac0565b67ffffffffffffffff191614611da85760405162461bcd60e51b8152602060048201526061602482015260008051602061517683398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c40161097f565b611dd889604001518281518110611dc157611dc1614ac0565b6020026020010151876132f890919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c5660405180604001604052806001815260200160008152508381518110611e3157611e31614ac0565b602001015160f81c60f81b60f81c8c8c60c001518581518110611e5657611e56614ac0565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed69190614d36565b85602001518281518110611eec57611eec614ac0565b6001600160601b03909216602092830291909101820152850151805182908110611f1857611f18614ac0565b602002602001015185600001518281518110611f3657611f36614ac0565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a602001515181101561215257611fc586600001518281518110611f8057611f80614ac0565b602002602001015160405180604001604052806001815260200160008152508581518110611fb057611fb0614ac0565b016020015160f81c60ff161c60019081161490565b15612140577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae6040518060400160405280600181526020016000815250858151811061202157612021614ac0565b602001015160f81c60f81b60f81c8e8960200151858151811061204657612046614ac0565b60200260200101518f60e00151888151811061206457612064614ac0565b6020026020010151878151811061207d5761207d614ac0565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa1580156120e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121059190614d36565b875180518590811061211957612119614ac0565b6020026020010181815161212d9190614d53565b6001600160601b03169052506001909101905b8061214a81614c7d565b915050611f5a565b5050808061215f90614c7d565b915050611a61565b5050506000806121818a868a606001518b60800151610786565b91509150816121f25760405162461bcd60e51b8152602060048201526043602482015260008051602061517683398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a40161097f565b806122535760405162461bcd60e51b8152602060048201526039602482015260008051602061517683398151915260448201527f7265733a207369676e617475726520697320696e76616c696400000000000000606482015260840161097f565b5050600087826020015160405160200161226e929190614d7b565b60408051808303601f1901815291905280516020909101209299929850919650505050505050565b600062229cd74310156122aa5750826122d6565b83336040516020016122bd929190614aa5565b6040516020818303038152906040528051906020012090505b600081815260c9602052604090205463ffffffff16156123385760405162461bcd60e51b815260206004820152601b60248201527f42617463682077617320616c7265616479207375626d69747465640000000000604482015260640161097f565b34156123a75733600090815260ca60205260408120805434929061235d90849061407d565b909155505033600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a25b33600090815260ca60205260409020546124035760405162461bcd60e51b815260206004820152601860248201527f426174636865722062616c616e636520697320656d7074790000000000000000604482015260640161097f565b6040805180820182526000602080830182815263ffffffff43818116865287855260c9909352928590208451815492511515600160201b0264ffffffffff19909316941693909317179091559151909186917f1871c33134a542e0ab9facf7013d27b9ed95e64d299e9919ee091c9cfcb19fa5916124849188908890614dec565b60405180910390a2847f130d3e81af62e03ed6fff5e3bb343695ec513892cfad24d286486745dcc61437334387876040516124c29493929190614e15565b60405180910390a25050505050565b6124d96137c2565b6124e36000613b8a565b565b60008184846040516124f8929190614e50565b60405180910390201490509392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146125525760405162461bcd60e51b815260040161097f90614e60565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d906125a09085908590600401614f25565b600060405180830381600087803b1580156125ba57600080fd5b505af11580156125ce573d6000803e3d6000fd5b505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461261e5760405162461bcd60e51b815260040161097f90614e60565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da906024015b600060405180830381600087803b15801561268257600080fd5b505af1158015612696573d6000803e3d6000fd5b5050505050565b6126a56137c2565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb35590612668908490600401614f70565b60005a90506000848460405160200161270b929190614aa5565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff1661277c5760405162461bcd60e51b8152602060048201526014602482015273426174636820646f65736e27742065786973747360601b604482015260640161097f565b600081815260c96020526040902054600160201b900460ff16156127dc5760405162461bcd60e51b815260206004820152601760248201527610985d18da08185b1c9958591e481c995cdc1bdb991959604a1b604482015260640161097f565b6001600160a01b038416600090815260ca602052604090205461283a5760405162461bcd60e51b81526020600482015260166024820152754261746368657220686173206e6f2062616c616e636560501b604482015260640161097f565b600081815260c960205260408120805464ff00000000198116600160201b17909155819061287090849063ffffffff1687611343565b91509150604360ff16826020015160008151811061289057612890614ac0565b60200260200101516128a29190614af8565b6001600160601b0316606483600001516000815181106128c4576128c4614ac0565b60200260200101516001600160601b03166128df9190614b27565b10156128fd5760405162461bcd60e51b815260040161097f90614b46565b6040516001600160a01b038716815287907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a61294d8388614ba4565b61295a906201117061407d565b6129649190614b27565b6001600160a01b038916600090815260ca602052604090205490915081111561299f5760405162461bcd60e51b815260040161097f90614bbb565b6001600160a01b038816600090815260ca6020526040812080548392906129c7908490614ba4565b90915550506001600160a01b038816600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015612a46573d6000803e3d6000fd5b50505050505050505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad89190614c5a565b60ff16905080612af657505060408051600081526020810190915290565b6000805b82811015612bab57604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b8d9190614c18565b612b97908361407d565b915080612ba381614c7d565b915050612afa565b506000816001600160401b03811115612bc657612bc6614095565b604051908082528060200260200182016040528015612bef578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c789190614c5a565b60ff16811015612e1157604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612cec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d109190614c18565b905060005b81811015612dfc576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015612d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dae9190614cad565b60000151858581518110612dc457612dc4614ac0565b6001600160a01b039092166020928302919091019091015283612de681614c7d565b9450508080612df490614c7d565b915050612d15565b50508080612e0990614c7d565b915050612bf6565b5090949350505050565b612e236137c2565b6001600160a01b038116612e885760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161097f565b6110f481613b8a565b6065546001600160a01b03163314612f265760405162461bcd60e51b815260206004820152604c60248201527f536572766963654d616e61676572426173652e6f6e6c7952657761726473496e60448201527f69746961746f723a2063616c6c6572206973206e6f742074686520726577617260648201526b32399034b734ba34b0ba37b960a11b608482015260a40161097f565b60005b818110156131fa57828282818110612f4357612f43614ac0565b9050602002810190612f559190614f83565b612f66906040810190602001614667565b6001600160a01b03166323b872dd3330868686818110612f8857612f88614ac0565b9050602002810190612f9a9190614f83565b604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152013560448201526064016020604051808303816000875af1158015612ff1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130159190614fae565b50600083838381811061302a5761302a614ac0565b905060200281019061303c9190614f83565b61304d906040810190602001614667565b604051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa1580156130bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130df9190614c18565b90508383838181106130f3576130f3614ac0565b90506020028101906131059190614f83565b613116906040810190602001614667565b6001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000008387878781811061315857613158614ac0565b905060200281019061316a9190614f83565b60400135613178919061407d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156131c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e79190614fae565b5050806131f390614c7d565b9050612f29565b5060405163fce36c7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fce36c7d906125a09085908590600401615026565b600083613257868585613bdc565b1495945050505050565b604080518082019091526000808252602082015261327d613f8d565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa90508080156132b0576132b2565bfe5b50806132f05760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b604482015260640161097f565b505092915050565b6040805180820190915260008082526020820152613314613fab565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156132b05750806132f05760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b604482015260640161097f565b613394613fc9565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201909152600080825260208201526000808061347c60008051602061515683398151915286614ad6565b90505b61348881613cd6565b90935091506000805160206151568339815191528283098314156134c2576040805180820190915290815260208101919091529392505050565b60008051602061515683398151915260018208905061347f565b60408051808201825286815260208082018690528251808401909352868352820184905260009182919061350e613fee565b60005b60028110156136d3576000613527826006614b27565b905084826002811061353b5761353b614ac0565b6020020151518361354d83600061407d565b600c811061355d5761355d614ac0565b602002015284826002811061357457613574614ac0565b6020020151602001518382600161358b919061407d565b600c811061359b5761359b614ac0565b60200201528382600281106135b2576135b2614ac0565b60200201515151836135c583600261407d565b600c81106135d5576135d5614ac0565b60200201528382600281106135ec576135ec614ac0565b602002015151600160200201518361360583600361407d565b600c811061361557613615614ac0565b602002015283826002811061362c5761362c614ac0565b60200201516020015160006002811061364757613647614ac0565b60200201518361365883600461407d565b600c811061366857613668614ac0565b602002015283826002811061367f5761367f614ac0565b60200201516020015160016002811061369a5761369a614ac0565b6020020151836136ab83600561407d565b600c81106136bb576136bb614ac0565b602002015250806136cb81614c7d565b915050613511565b506136dc61400d565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606060008061370e846139e0565b61ffff166001600160401b0381111561372957613729614095565b6040519080825280601f01601f191660200182016040528015613753576020820181803683370190505b5090506000805b82518210801561376b575061010081105b15612e11576001811b9350858416156137b2578060f81b83838151811061379457613794614ac0565b60200101906001600160f81b031916908160001a9053508160010191505b6137bb81614c7d565b905061375a565b6033546001600160a01b031633146124e35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161097f565b606554604080516001600160a01b03928316815291831660208301527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b600054610100900460ff166139375760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161097f565b61394082613b8a565b6139498161381c565b5050565b60008061395984613d58565b9050808360ff166001901b116139d75760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c756500606482015260840161097f565b90505b92915050565b6000805b82156139da576139f5600184614ba4565b9092169180613a0381615133565b9150506139e4565b60408051808201909152600080825260208201526102008261ffff1610613a675760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b604482015260640161097f565b8161ffff1660011415613a7b5750816139da565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610613ae457600161ffff871660ff83161c81161415613ac757613ac484846132f8565b93505b613ad183846132f8565b92506201fffe600192831b169101613a97565b509195945050505050565b60408051808201909152600080825260208201528151158015613b1457506020820151155b15613b32575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206151568339815191528460200151613b659190614ad6565b613b7d90600080516020615156833981519152614ba4565b905292915050565b919050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208451613bec9190614ad6565b15613c735760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a40161097f565b8260205b85518111610de057613c8a600285614ad6565b613cab57816000528086015160205260406000209150600284049350613cc4565b8086015160005281602052604060002091506002840493505b613ccf60208261407d565b9050613c77565b60008080600080516020615156833981519152600360008051602061515683398151915286600080516020615156833981519152888909090890506000613d4c827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615156833981519152613ee5565b91959194509092505050565b600061010082511115613de15760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161097f565b8151613def57506000919050565b60008083600081518110613e0557613e05614ac0565b0160200151600160f89190911c81901b92505b8451811015613edc57848181518110613e3357613e33614ac0565b0160200151600160f89190911c1b9150828211613ec85760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161097f565b91811791613ed581614c7d565b9050613e18565b50909392505050565b600080613ef061400d565b613ef861402b565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280156132b0575082613f825760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c757265000000000000604482015260640161097f565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613fdc614049565b8152602001613fe9614049565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561409057614090614067565b500190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156140cd576140cd614095565b60405290565b60405161010081016001600160401b03811182821017156140cd576140cd614095565b604051601f8201601f191681016001600160401b038111828210171561411e5761411e614095565b604052919050565b60006001600160401b0383111561413f5761413f614095565b614152601f8401601f19166020016140f6565b905082815283838301111561416657600080fd5b828260208301376000602084830101529392505050565b600082601f83011261418e57600080fd5b61419d83833560208501614126565b9392505050565b6001600160a01b03811681146110f457600080fd5b600080600080600080600080610100898b0312156141d657600080fd5b88359750602089013596506040890135955060608901356001600160601b03198116811461420357600080fd5b94506080890135935060a08901356001600160401b0381111561422557600080fd5b6142318b828c0161417d565b93505060c0890135915060e0890135614249816141a4565b809150509295985092959890939650565b60006040828403121561426c57600080fd5b6142746140ab565b9050813581526020820135602082015292915050565b600082601f83011261429b57600080fd5b6142a36140ab565b8060408401858111156142b557600080fd5b845b818110156142cf5780358452602093840193016142b7565b509095945050505050565b6000608082840312156142ec57600080fd5b6142f46140ab565b9050614300838361428a565b815261430f836040840161428a565b602082015292915050565b600080600080610120858703121561433157600080fd5b84359350614342866020870161425a565b925061435186606087016142da565b91506143608660e0870161425a565b905092959194509250565b60006001600160401b0382111561438457614384614095565b5060051b60200190565b803563ffffffff81168114613b8557600080fd5b600082601f8301126143b357600080fd5b813560206143c86143c38361436b565b6140f6565b82815260059290921b840181019181810190868411156143e757600080fd5b8286015b84811015614409576143fc8161438e565b83529183019183016143eb565b509695505050505050565b600082601f83011261442557600080fd5b813560206144356143c38361436b565b82815260069290921b8401810191818101908684111561445457600080fd5b8286015b848110156144095761446a888261425a565b835291830191604001614458565b600082601f83011261448957600080fd5b813560206144996143c38361436b565b82815260059290921b840181019181810190868411156144b857600080fd5b8286015b848110156144095780356001600160401b038111156144db5760008081fd5b6144e98986838b01016143a2565b8452509183019183016144bc565b6000610180828403121561450a57600080fd5b6145126140d3565b905081356001600160401b038082111561452b57600080fd5b614537858386016143a2565b8352602084013591508082111561454d57600080fd5b61455985838601614414565b6020840152604084013591508082111561457257600080fd5b61457e85838601614414565b604084015261459085606086016142da565b60608401526145a28560e0860161425a565b60808401526101208401359150808211156145bc57600080fd5b6145c8858386016143a2565b60a08401526101408401359150808211156145e257600080fd5b6145ee858386016143a2565b60c084015261016084013591508082111561460857600080fd5b5061461584828501614478565b60e08301525092915050565b6000806040838503121561463457600080fd5b8235915060208301356001600160401b0381111561465157600080fd5b61465d858286016144f7565b9150509250929050565b60006020828403121561467957600080fd5b81356139d7816141a4565b6020808252825182820181905260009190848201906040850190845b818110156146c55783516001600160a01b0316835292840192918401916001016146a0565b50909695505050505050565b80151581146110f457600080fd5b6000602082840312156146f157600080fd5b81356139d7816146d1565b6000806040838503121561470f57600080fd5b823561471a816141a4565b9150602083013561472a816141a4565b809150509250929050565b60008060006060848603121561474a57600080fd5b8335925061475a6020850161438e565b915060408401356001600160401b0381111561477557600080fd5b614781868287016144f7565b9150509250925092565b600081518084526020808501945080840160005b838110156147c45781516001600160601b03168752958201959082019060010161479f565b509495945050505050565b60408152600083516040808401526147ea608084018261478b565b90506020850151603f19848303016060850152614807828261478b565b925050508260208301529392505050565b60008083601f84011261482a57600080fd5b5081356001600160401b0381111561484157600080fd5b60208301915083602082850101111561485957600080fd5b9250929050565b60008060006040848603121561487557600080fd5b8335925060208401356001600160401b0381111561489257600080fd5b61489e86828701614818565b9497909650939450505050565b6000806000604084860312156148c057600080fd5b83356001600160401b038111156148d657600080fd5b6148e286828701614818565b909790965060209590950135949350505050565b6000806040838503121561490957600080fd5b8235614914816141a4565b915060208301356001600160401b038082111561493057600080fd5b908401906060828703121561494457600080fd5b60405160608101818110838211171561495f5761495f614095565b60405282358281111561497157600080fd5b61497d8882860161417d565b82525060208301356020820152604083013560408201528093505050509250929050565b6000602082840312156149b357600080fd5b81356001600160401b038111156149c957600080fd5b8201601f810184136149da57600080fd5b6149e984823560208401614126565b949350505050565b600080600060608486031215614a0657600080fd5b83359250602084013561475a816141a4565b600060208284031215614a2a57600080fd5b5035919050565b60008060208385031215614a4457600080fd5b82356001600160401b0380821115614a5b57600080fd5b818501915085601f830112614a6f57600080fd5b813581811115614a7e57600080fd5b8660208260051b8501011115614a9357600080fd5b60209290920196919550909350505050565b91825260601b6001600160601b031916602082015260340190565b634e487b7160e01b600052603260045260246000fd5b600082614af357634e487b7160e01b600052601260045260246000fd5b500690565b60006001600160601b0380831681851681830481118215151615614b1e57614b1e614067565b02949350505050565b6000816000190483118215151615614b4157614b41614067565b500290565b602080825260409082018190527f5369676e61746f7269657320646f206e6f74206f776e206174206c6561737420908201527f7468726573686f6c642070657263656e74616765206f6620612071756f72756d606082015260800190565b600082821015614bb657614bb6614067565b500390565b6020808252603c908201527f4261746368657220686173206e6f742073756666696369656e742066756e647360408201527f20666f7220706179696e672074686973207472616e73616374696f6e00000000606082015260800190565b600060208284031215614c2a57600080fd5b5051919050565b600060208284031215614c4357600080fd5b81516001600160c01b03811681146139d757600080fd5b600060208284031215614c6c57600080fd5b815160ff811681146139d757600080fd5b6000600019821415614c9157614c91614067565b5060010190565b6001600160601b03811681146110f457600080fd5b600060408284031215614cbf57600080fd5b614cc76140ab565b8251614cd2816141a4565b81526020830151614ce281614c98565b60208201529392505050565b600060208284031215614d0057600080fd5b81516139d7816141a4565b600060208284031215614d1d57600080fd5b815167ffffffffffffffff19811681146139d757600080fd5b600060208284031215614d4857600080fd5b81516139d781614c98565b60006001600160601b0383811690831681811015614d7357614d73614067565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015614db657815185529382019390820190600101614d9a565b5092979650505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff84168152604060208201526000614e0c604083018486614dc3565b95945050505050565b6001600160a01b038516815263ffffffff84166020820152606060408201819052600090614e469083018486614dc3565b9695505050505050565b8183823760009101908152919050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015614efe57602081850181015186830182015201614ee2565b81811115614f10576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b0383168152604060208201526000825160606040840152614f4f60a0840182614ed8565b90506020840151606084015260408401516080840152809150509392505050565b60208152600061419d6020830184614ed8565b60008235609e19833603018112614f9957600080fd5b9190910192915050565b8035613b85816141a4565b600060208284031215614fc057600080fd5b81516139d7816146d1565b8183526000602080850194508260005b858110156147c4578135614fee816141a4565b6001600160a01b031687528183013561500681614c98565b6001600160601b0316878401526040968701969190910190600101614fdb565b60208082528181018390526000906040808401600586901b8501820187855b8881101561512557878303603f190184528135368b9003609e1901811261506b57600080fd5b8a0160a0813536839003601e1901811261508457600080fd5b820180356001600160401b0381111561509c57600080fd5b8060061b36038413156150ae57600080fd5b8287526150c0838801828c8501614fcb565b925050506150cf888301614fa3565b6001600160a01b031688860152818701358786015260606150f181840161438e565b63ffffffff1690860152608061510883820161438e565b63ffffffff16950194909452509285019290850190600101615045565b509098975050505050505050565b600061ffff8083168181141561514b5761514b614067565b600101939250505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47424c535369676e6174757265436865636b65722e636865636b5369676e617475a264697066735822122015291e7c0ca7fb3106e540fb13a51d69bcee5541091c650c9b3526c6fcc77b4964736f6c634300080c0033","sourceMap":"1015:10203:171:-:0;;;1837:455;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1590:30:115;;;;;1630:42;;;;;1682:44;;;;;1736:32;;;;2063:21:171;2126:14;2154:20;2063:21;2223:15;2276:22:114::1;:20;:22::i;:::-;1894:411:::0;;;;1793:20:108;-1:-1:-1;;;;;1771:42:108;;;-1:-1:-1;;;;;1771:42:108;;;;;1839:20;-1:-1:-1;;;;;1839:34:108;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1823:52:108;;;-1:-1:-1;;;;;1823:52:108;;;;;1902:20;-1:-1:-1;;;;;1902:35:108;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1885:54:108;;;-1:-1:-1;;;;;1885:54:108;;;;;1962:13;;-1:-1:-1;;;;;1962:24:108;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1949:39:108;;;-1:-1:-1;2263:22:171::2;:20;:22::i;:::-;1837:455:::0;;;;1015:10203;;5388:279:45;5456:13;;;;;;;5455:14;5447:66;;;;-1:-1:-1;;;5447:66:45;;2079:2:176;5447:66:45;;;2061:21:176;2118:2;2098:18;;;2091:30;2157:34;2137:18;;;2130:62;-1:-1:-1;;;2208:18:176;;;2201:37;2255:19;;5447:66:45;;;;;;;;5527:12;;5542:15;5527:12;;;:30;5523:138;;;5573:12;:30;;-1:-1:-1;;5573:30:45;5588:15;5573:30;;;;;;5622:28;;2427:36:176;;;5622:28:45;;2415:2:176;2400:18;5622:28:45;;;;;;;5523:138;5388:279::o;14:146:176:-;-1:-1:-1;;;;;104:31:176;;94:42;;84:70;;150:1;147;140:12;84:70;14:146;:::o;165:818::-;366:6;374;382;390;443:3;431:9;422:7;418:23;414:33;411:53;;;460:1;457;450:12;411:53;492:9;486:16;511:46;551:5;511:46;:::i;:::-;626:2;611:18;;605:25;576:5;;-1:-1:-1;639:48:176;605:25;639:48;:::i;:::-;758:2;743:18;;737:25;706:7;;-1:-1:-1;771:48:176;737:25;771:48;:::i;:::-;890:2;875:18;;869:25;838:7;;-1:-1:-1;903:48:176;869:25;903:48;:::i;:::-;165:818;;;;-1:-1:-1;165:818:176;;-1:-1:-1;;165:818:176:o;988:290::-;1082:6;1135:2;1123:9;1114:7;1110:23;1106:32;1103:52;;;1151:1;1148;1141:12;1103:52;1183:9;1177:16;1202:46;1242:5;1202:46;:::i;:::-;1267:5;988:290;-1:-1:-1;;;988:290:176:o;2285:184::-;1015:10203:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101bb5760003560e01c8063715018a6116100ec578063b099627e1161008a578063e481af9d11610064578063e481af9d14610632578063f2fde38b14610647578063fc299dee14610667578063fce36c7d1461068757600080fd5b8063b099627e14610589578063b98d0908146105e4578063df5cf723146105fe57600080fd5b80639926ee7d116100c65780639926ee7d14610509578063a364f4da14610529578063a98fb35514610549578063ab21739a1461056957600080fd5b8063715018a6146104b65780638da5cb5b146104cb57806395c6d604146104e957600080fd5b80634ae07c3711610159578063683048351161013357806368304835146103d75780636b3aa72e1461040b5780636d14a9871461043e57806370a082311461047257600080fd5b80634ae07c371461034a5780635c008994146103785780635df459461461038b57600080fd5b806333cfb7b71161019557806333cfb7b7146102bd5780633bc28c8c146102ea578063416c7e5e1461030a578063485cc9551461032a57600080fd5b806306045a911461022f578063171f1d5b146102645780632dd94eba1461029b57600080fd5b3661022a5733600090815260ca6020526040812080543492906101df90849061407d565b909155505033600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a2005b600080fd5b34801561023b57600080fd5b5061024f61024a3660046141b9565b6106a7565b60405190151581526020015b60405180910390f35b34801561027057600080fd5b5061028461027f36600461431a565b610786565b60408051921515835290151560208301520161025b565b3480156102a757600080fd5b506102bb6102b6366004614621565b610910565b005b3480156102c957600080fd5b506102dd6102d8366004614667565b610c10565b60405161025b9190614684565b3480156102f657600080fd5b506102bb610305366004614667565b6110e3565b34801561031657600080fd5b506102bb6103253660046146df565b6110f7565b34801561033657600080fd5b506102bb6103453660046146fc565b61122e565b34801561035657600080fd5b5061036a610365366004614735565b611343565b60405161025b9291906147cf565b6102bb610386366004614860565b612296565b34801561039757600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161025b565b3480156103e357600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561041757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103bf565b34801561044a57600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561047e57600080fd5b506104a861048d366004614667565b6001600160a01b0316600090815260ca602052604090205490565b60405190815260200161025b565b3480156104c257600080fd5b506102bb6124d1565b3480156104d757600080fd5b506033546001600160a01b03166103bf565b3480156104f557600080fd5b5061024f6105043660046148ab565b6124e5565b34801561051557600080fd5b506102bb6105243660046148f6565b61250a565b34801561053557600080fd5b506102bb610544366004614667565b6125d6565b34801561055557600080fd5b506102bb6105643660046149a1565b61269d565b34801561057557600080fd5b506102bb6105843660046149f1565b6126f1565b34801561059557600080fd5b506105c86105a4366004614a18565b60c96020526000908152604090205463ffffffff811690600160201b900460ff1682565b6040805163ffffffff909316835290151560208301520161025b565b3480156105f057600080fd5b5060975461024f9060ff1681565b34801561060a57600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561063e57600080fd5b506102dd612a52565b34801561065357600080fd5b506102bb610662366004614667565b612e1b565b34801561067357600080fd5b506065546103bf906001600160a01b031681565b34801561069357600080fd5b506102bb6106a2366004614a31565b612e91565b60008085836040516020016106bd929190614aa5565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff166106f957600091505061077a565b600081815260c96020526040902054600160201b900460ff1661072057600091505061077a565b60408051602081018c90529081018a9052606081018990526001600160601b03198816608082015260009060940160408051601f198184030181529190528051602082012090915061077487848389613249565b93505050505b98975050505050505050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878760000151886020015188600001516000600281106107ce576107ce614ac0565b60200201518951600160200201518a602001516000600281106107f3576107f3614ac0565b60200201518b6020015160016002811061080f5761080f614ac0565b602090810291909101518c518d83015160405161086c9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c61088f9190614ad6565b90506109026108a86108a18884613261565b86906132f8565b6108b061338c565b6108f86108e9856108e3604080518082018252600080825260209182015281518083019092526001825260029082015290565b90613261565b6108f28c61344c565b906132f8565b886201d4c06134dc565b909890975095505050505050565b737969c5ed335650692bc04293b07f5bf2e7a673c060005a600085815260c9602052604090205490915063ffffffff166109885760405162461bcd60e51b8152602060048201526014602482015273426174636820646f65736e27742065786973747360601b60448201526064015b60405180910390fd5b600084815260c96020526040902054600160201b900460ff16156109e85760405162461bcd60e51b815260206004820152601760248201527610985d18da08185b1c9958591e481c995cdc1bdb991959604a1b604482015260640161097f565b6001600160a01b038216600090815260ca6020526040902054610a465760405162461bcd60e51b81526020600482015260166024820152754261746368657220686173206e6f2062616c616e636560501b604482015260640161097f565b600084815260c960205260408120805464ff00000000198116600160201b179091558190610a7c90879063ffffffff1687611343565b91509150604360ff168260200151600081518110610a9c57610a9c614ac0565b6020026020010151610aae9190614af8565b6001600160601b031660648360000151600081518110610ad057610ad0614ac0565b60200260200101516001600160601b0316610aeb9190614b27565b1015610b095760405162461bcd60e51b815260040161097f90614b46565b6040516001600160a01b038516815286907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a610b598387614ba4565b610b66906201117061407d565b610b709190614b27565b6001600160a01b038716600090815260ca6020526040902054909150811115610bab5760405162461bcd60e51b815260040161097f90614bbb565b6001600160a01b038616600090815260ca602052604081208054839290610bd3908490614ba4565b9091555050604051339082156108fc029083906000818181858888f19350505050158015610c05573d6000803e3d6000fd5b505050505050505050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90602401602060405180830381865afa158015610c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca09190614c18565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa158015610d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2f9190614c31565b90506001600160c01b0381161580610dc957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc49190614c5a565b60ff16155b15610de95760408051600080825260208201909252905b50949350505050565b6000610dfd826001600160c01b0316613700565b90506000805b8251811015610ed3577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f5848381518110610e4d57610e4d614ac0565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb59190614c18565b610ebf908361407d565b915080610ecb81614c7d565b915050610e03565b506000816001600160401b03811115610eee57610eee614095565b604051908082528060200260200182016040528015610f17578160200160208202803683370190505b5090506000805b84518110156110d6576000858281518110610f3b57610f3b614ac0565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610fb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd49190614c18565b905060005b818110156110c0576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa15801561104e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110729190614cad565b6000015186868151811061108857611088614ac0565b6001600160a01b0390921660209283029190910190910152846110aa81614c7d565b95505080806110b890614c7d565b915050610fd9565b50505080806110ce90614c7d565b915050610f1e565b5090979650505050505050565b6110eb6137c2565b6110f48161381c565b50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611155573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111799190614cee565b6001600160a01b0316336001600160a01b0316146112255760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a40161097f565b6110f481613885565b600054610100900460ff161580801561124e5750600054600160ff909116105b806112685750303b158015611268575060005460ff166001145b6112cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161097f565b6000805460ff1916600117905580156112ee576000805461ff0019166101001790555b6112f883836138cc565b801561133e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040805180820190915260608082526020820152600082604001515160405180604001604052806001815260200160008152505114801561139f57508260a0015151604051806040016040528060018152602001600081525051145b80156113c657508260c0015151604051806040016040528060018152602001600081525051145b80156113ed57508260e0015151604051806040016040528060018152602001600081525051145b6114575760405162461bcd60e51b8152602060048201526041602482015260008051602061517683398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a40161097f565b825151602084015151146114cf5760405162461bcd60e51b815260206004820152604460248201819052600080516020615176833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a40161097f565b4363ffffffff168463ffffffff161061153e5760405162461bcd60e51b815260206004820152603c602482015260008051602061517683398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b00000000606482015260840161097f565b60408051808201825260008082526020808301829052835180850185526060808252818301528451808601865260018082529083019390935284518381528086019095529293919082810190803683370190505060208281019190915260408051808201825260018082526000919093015280518281528082019091529081602001602082028036833701905050815260408051808201909152606080825260208201528560200151516001600160401b038111156115ff576115ff614095565b604051908082528060200260200182016040528015611628578160200160208202803683370190505b5081526020860151516001600160401b0381111561164857611648614095565b604051908082528060200260200182016040528015611671578160200160208202803683370190505b508160200181905250600061171d60405180604001604052806001815260200160008152507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117189190614c5a565b61394d565b905060005b8760200151518110156119b8576117678860200151828151811061174857611748614ac0565b6020026020010151805160009081526020918201519091526040902090565b8360200151828151811061177d5761177d614ac0565b6020908102919091010152801561183d57602083015161179e600183614ba4565b815181106117ae576117ae614ac0565b602002602001015160001c836020015182815181106117cf576117cf614ac0565b602002602001015160001c1161183d576040805162461bcd60e51b815260206004820152602481019190915260008051602061517683398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f72746564606482015260840161097f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec63518460200151838151811061188257611882614ac0565b60200260200101518b8b6000015185815181106118a1576118a1614ac0565b60200260200101516040518463ffffffff1660e01b81526004016118de9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa1580156118fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191f9190614c31565b6001600160c01b03168360000151828151811061193e5761193e614ac0565b6020026020010181815250506119a46108a1611978848660000151858151811061196a5761196a614ac0565b6020026020010151166139e0565b8a60200151848151811061198e5761198e614ac0565b6020026020010151613a0b90919063ffffffff16565b9450806119b081614c7d565b915050611722565b50506119c383613aef565b60975490935060ff166000816119da576000611a5c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190614c18565b905060005b604051806040016040528060018152602001600081525051811015612167578215611bed578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c4260405180604001604052806001815260200160008152508581518110611ae557611ae5614ac0565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015611b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4d9190614c18565b611b57919061407d565b11611bed5760405162461bcd60e51b8152602060048201526066602482015260008051602061517683398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c40161097f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac60405180604001604052806001815260200160008152508381518110611c4457611c44614ac0565b602001015160f81c60f81b60f81c8c8c60a001518581518110611c6957611c69614ac0565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611cc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce99190614d0b565b6001600160401b031916611d0c8a60400151838151811061174857611748614ac0565b67ffffffffffffffff191614611da85760405162461bcd60e51b8152602060048201526061602482015260008051602061517683398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c40161097f565b611dd889604001518281518110611dc157611dc1614ac0565b6020026020010151876132f890919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c5660405180604001604052806001815260200160008152508381518110611e3157611e31614ac0565b602001015160f81c60f81b60f81c8c8c60c001518581518110611e5657611e56614ac0565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed69190614d36565b85602001518281518110611eec57611eec614ac0565b6001600160601b03909216602092830291909101820152850151805182908110611f1857611f18614ac0565b602002602001015185600001518281518110611f3657611f36614ac0565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a602001515181101561215257611fc586600001518281518110611f8057611f80614ac0565b602002602001015160405180604001604052806001815260200160008152508581518110611fb057611fb0614ac0565b016020015160f81c60ff161c60019081161490565b15612140577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae6040518060400160405280600181526020016000815250858151811061202157612021614ac0565b602001015160f81c60f81b60f81c8e8960200151858151811061204657612046614ac0565b60200260200101518f60e00151888151811061206457612064614ac0565b6020026020010151878151811061207d5761207d614ac0565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa1580156120e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121059190614d36565b875180518590811061211957612119614ac0565b6020026020010181815161212d9190614d53565b6001600160601b03169052506001909101905b8061214a81614c7d565b915050611f5a565b5050808061215f90614c7d565b915050611a61565b5050506000806121818a868a606001518b60800151610786565b91509150816121f25760405162461bcd60e51b8152602060048201526043602482015260008051602061517683398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a40161097f565b806122535760405162461bcd60e51b8152602060048201526039602482015260008051602061517683398151915260448201527f7265733a207369676e617475726520697320696e76616c696400000000000000606482015260840161097f565b5050600087826020015160405160200161226e929190614d7b565b60408051808303601f1901815291905280516020909101209299929850919650505050505050565b600062229cd74310156122aa5750826122d6565b83336040516020016122bd929190614aa5565b6040516020818303038152906040528051906020012090505b600081815260c9602052604090205463ffffffff16156123385760405162461bcd60e51b815260206004820152601b60248201527f42617463682077617320616c7265616479207375626d69747465640000000000604482015260640161097f565b34156123a75733600090815260ca60205260408120805434929061235d90849061407d565b909155505033600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a25b33600090815260ca60205260409020546124035760405162461bcd60e51b815260206004820152601860248201527f426174636865722062616c616e636520697320656d7074790000000000000000604482015260640161097f565b6040805180820182526000602080830182815263ffffffff43818116865287855260c9909352928590208451815492511515600160201b0264ffffffffff19909316941693909317179091559151909186917f1871c33134a542e0ab9facf7013d27b9ed95e64d299e9919ee091c9cfcb19fa5916124849188908890614dec565b60405180910390a2847f130d3e81af62e03ed6fff5e3bb343695ec513892cfad24d286486745dcc61437334387876040516124c29493929190614e15565b60405180910390a25050505050565b6124d96137c2565b6124e36000613b8a565b565b60008184846040516124f8929190614e50565b60405180910390201490509392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146125525760405162461bcd60e51b815260040161097f90614e60565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d906125a09085908590600401614f25565b600060405180830381600087803b1580156125ba57600080fd5b505af11580156125ce573d6000803e3d6000fd5b505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461261e5760405162461bcd60e51b815260040161097f90614e60565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da906024015b600060405180830381600087803b15801561268257600080fd5b505af1158015612696573d6000803e3d6000fd5b5050505050565b6126a56137c2565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb35590612668908490600401614f70565b60005a90506000848460405160200161270b929190614aa5565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff1661277c5760405162461bcd60e51b8152602060048201526014602482015273426174636820646f65736e27742065786973747360601b604482015260640161097f565b600081815260c96020526040902054600160201b900460ff16156127dc5760405162461bcd60e51b815260206004820152601760248201527610985d18da08185b1c9958591e481c995cdc1bdb991959604a1b604482015260640161097f565b6001600160a01b038416600090815260ca602052604090205461283a5760405162461bcd60e51b81526020600482015260166024820152754261746368657220686173206e6f2062616c616e636560501b604482015260640161097f565b600081815260c960205260408120805464ff00000000198116600160201b17909155819061287090849063ffffffff1687611343565b91509150604360ff16826020015160008151811061289057612890614ac0565b60200260200101516128a29190614af8565b6001600160601b0316606483600001516000815181106128c4576128c4614ac0565b60200260200101516001600160601b03166128df9190614b27565b10156128fd5760405162461bcd60e51b815260040161097f90614b46565b6040516001600160a01b038716815287907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a61294d8388614ba4565b61295a906201117061407d565b6129649190614b27565b6001600160a01b038916600090815260ca602052604090205490915081111561299f5760405162461bcd60e51b815260040161097f90614bbb565b6001600160a01b038816600090815260ca6020526040812080548392906129c7908490614ba4565b90915550506001600160a01b038816600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015612a46573d6000803e3d6000fd5b50505050505050505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad89190614c5a565b60ff16905080612af657505060408051600081526020810190915290565b6000805b82811015612bab57604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b8d9190614c18565b612b97908361407d565b915080612ba381614c7d565b915050612afa565b506000816001600160401b03811115612bc657612bc6614095565b604051908082528060200260200182016040528015612bef578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c789190614c5a565b60ff16811015612e1157604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612cec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d109190614c18565b905060005b81811015612dfc576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015612d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dae9190614cad565b60000151858581518110612dc457612dc4614ac0565b6001600160a01b039092166020928302919091019091015283612de681614c7d565b9450508080612df490614c7d565b915050612d15565b50508080612e0990614c7d565b915050612bf6565b5090949350505050565b612e236137c2565b6001600160a01b038116612e885760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161097f565b6110f481613b8a565b6065546001600160a01b03163314612f265760405162461bcd60e51b815260206004820152604c60248201527f536572766963654d616e61676572426173652e6f6e6c7952657761726473496e60448201527f69746961746f723a2063616c6c6572206973206e6f742074686520726577617260648201526b32399034b734ba34b0ba37b960a11b608482015260a40161097f565b60005b818110156131fa57828282818110612f4357612f43614ac0565b9050602002810190612f559190614f83565b612f66906040810190602001614667565b6001600160a01b03166323b872dd3330868686818110612f8857612f88614ac0565b9050602002810190612f9a9190614f83565b604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152013560448201526064016020604051808303816000875af1158015612ff1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130159190614fae565b50600083838381811061302a5761302a614ac0565b905060200281019061303c9190614f83565b61304d906040810190602001614667565b604051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa1580156130bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130df9190614c18565b90508383838181106130f3576130f3614ac0565b90506020028101906131059190614f83565b613116906040810190602001614667565b6001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000008387878781811061315857613158614ac0565b905060200281019061316a9190614f83565b60400135613178919061407d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156131c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e79190614fae565b5050806131f390614c7d565b9050612f29565b5060405163fce36c7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fce36c7d906125a09085908590600401615026565b600083613257868585613bdc565b1495945050505050565b604080518082019091526000808252602082015261327d613f8d565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa90508080156132b0576132b2565bfe5b50806132f05760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b604482015260640161097f565b505092915050565b6040805180820190915260008082526020820152613314613fab565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156132b05750806132f05760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b604482015260640161097f565b613394613fc9565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201909152600080825260208201526000808061347c60008051602061515683398151915286614ad6565b90505b61348881613cd6565b90935091506000805160206151568339815191528283098314156134c2576040805180820190915290815260208101919091529392505050565b60008051602061515683398151915260018208905061347f565b60408051808201825286815260208082018690528251808401909352868352820184905260009182919061350e613fee565b60005b60028110156136d3576000613527826006614b27565b905084826002811061353b5761353b614ac0565b6020020151518361354d83600061407d565b600c811061355d5761355d614ac0565b602002015284826002811061357457613574614ac0565b6020020151602001518382600161358b919061407d565b600c811061359b5761359b614ac0565b60200201528382600281106135b2576135b2614ac0565b60200201515151836135c583600261407d565b600c81106135d5576135d5614ac0565b60200201528382600281106135ec576135ec614ac0565b602002015151600160200201518361360583600361407d565b600c811061361557613615614ac0565b602002015283826002811061362c5761362c614ac0565b60200201516020015160006002811061364757613647614ac0565b60200201518361365883600461407d565b600c811061366857613668614ac0565b602002015283826002811061367f5761367f614ac0565b60200201516020015160016002811061369a5761369a614ac0565b6020020151836136ab83600561407d565b600c81106136bb576136bb614ac0565b602002015250806136cb81614c7d565b915050613511565b506136dc61400d565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606060008061370e846139e0565b61ffff166001600160401b0381111561372957613729614095565b6040519080825280601f01601f191660200182016040528015613753576020820181803683370190505b5090506000805b82518210801561376b575061010081105b15612e11576001811b9350858416156137b2578060f81b83838151811061379457613794614ac0565b60200101906001600160f81b031916908160001a9053508160010191505b6137bb81614c7d565b905061375a565b6033546001600160a01b031633146124e35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161097f565b606554604080516001600160a01b03928316815291831660208301527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b600054610100900460ff166139375760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161097f565b61394082613b8a565b6139498161381c565b5050565b60008061395984613d58565b9050808360ff166001901b116139d75760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c756500606482015260840161097f565b90505b92915050565b6000805b82156139da576139f5600184614ba4565b9092169180613a0381615133565b9150506139e4565b60408051808201909152600080825260208201526102008261ffff1610613a675760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b604482015260640161097f565b8161ffff1660011415613a7b5750816139da565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610613ae457600161ffff871660ff83161c81161415613ac757613ac484846132f8565b93505b613ad183846132f8565b92506201fffe600192831b169101613a97565b509195945050505050565b60408051808201909152600080825260208201528151158015613b1457506020820151155b15613b32575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206151568339815191528460200151613b659190614ad6565b613b7d90600080516020615156833981519152614ba4565b905292915050565b919050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208451613bec9190614ad6565b15613c735760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a40161097f565b8260205b85518111610de057613c8a600285614ad6565b613cab57816000528086015160205260406000209150600284049350613cc4565b8086015160005281602052604060002091506002840493505b613ccf60208261407d565b9050613c77565b60008080600080516020615156833981519152600360008051602061515683398151915286600080516020615156833981519152888909090890506000613d4c827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615156833981519152613ee5565b91959194509092505050565b600061010082511115613de15760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161097f565b8151613def57506000919050565b60008083600081518110613e0557613e05614ac0565b0160200151600160f89190911c81901b92505b8451811015613edc57848181518110613e3357613e33614ac0565b0160200151600160f89190911c1b9150828211613ec85760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161097f565b91811791613ed581614c7d565b9050613e18565b50909392505050565b600080613ef061400d565b613ef861402b565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280156132b0575082613f825760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c757265000000000000604482015260640161097f565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613fdc614049565b8152602001613fe9614049565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561409057614090614067565b500190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156140cd576140cd614095565b60405290565b60405161010081016001600160401b03811182821017156140cd576140cd614095565b604051601f8201601f191681016001600160401b038111828210171561411e5761411e614095565b604052919050565b60006001600160401b0383111561413f5761413f614095565b614152601f8401601f19166020016140f6565b905082815283838301111561416657600080fd5b828260208301376000602084830101529392505050565b600082601f83011261418e57600080fd5b61419d83833560208501614126565b9392505050565b6001600160a01b03811681146110f457600080fd5b600080600080600080600080610100898b0312156141d657600080fd5b88359750602089013596506040890135955060608901356001600160601b03198116811461420357600080fd5b94506080890135935060a08901356001600160401b0381111561422557600080fd5b6142318b828c0161417d565b93505060c0890135915060e0890135614249816141a4565b809150509295985092959890939650565b60006040828403121561426c57600080fd5b6142746140ab565b9050813581526020820135602082015292915050565b600082601f83011261429b57600080fd5b6142a36140ab565b8060408401858111156142b557600080fd5b845b818110156142cf5780358452602093840193016142b7565b509095945050505050565b6000608082840312156142ec57600080fd5b6142f46140ab565b9050614300838361428a565b815261430f836040840161428a565b602082015292915050565b600080600080610120858703121561433157600080fd5b84359350614342866020870161425a565b925061435186606087016142da565b91506143608660e0870161425a565b905092959194509250565b60006001600160401b0382111561438457614384614095565b5060051b60200190565b803563ffffffff81168114613b8557600080fd5b600082601f8301126143b357600080fd5b813560206143c86143c38361436b565b6140f6565b82815260059290921b840181019181810190868411156143e757600080fd5b8286015b84811015614409576143fc8161438e565b83529183019183016143eb565b509695505050505050565b600082601f83011261442557600080fd5b813560206144356143c38361436b565b82815260069290921b8401810191818101908684111561445457600080fd5b8286015b848110156144095761446a888261425a565b835291830191604001614458565b600082601f83011261448957600080fd5b813560206144996143c38361436b565b82815260059290921b840181019181810190868411156144b857600080fd5b8286015b848110156144095780356001600160401b038111156144db5760008081fd5b6144e98986838b01016143a2565b8452509183019183016144bc565b6000610180828403121561450a57600080fd5b6145126140d3565b905081356001600160401b038082111561452b57600080fd5b614537858386016143a2565b8352602084013591508082111561454d57600080fd5b61455985838601614414565b6020840152604084013591508082111561457257600080fd5b61457e85838601614414565b604084015261459085606086016142da565b60608401526145a28560e0860161425a565b60808401526101208401359150808211156145bc57600080fd5b6145c8858386016143a2565b60a08401526101408401359150808211156145e257600080fd5b6145ee858386016143a2565b60c084015261016084013591508082111561460857600080fd5b5061461584828501614478565b60e08301525092915050565b6000806040838503121561463457600080fd5b8235915060208301356001600160401b0381111561465157600080fd5b61465d858286016144f7565b9150509250929050565b60006020828403121561467957600080fd5b81356139d7816141a4565b6020808252825182820181905260009190848201906040850190845b818110156146c55783516001600160a01b0316835292840192918401916001016146a0565b50909695505050505050565b80151581146110f457600080fd5b6000602082840312156146f157600080fd5b81356139d7816146d1565b6000806040838503121561470f57600080fd5b823561471a816141a4565b9150602083013561472a816141a4565b809150509250929050565b60008060006060848603121561474a57600080fd5b8335925061475a6020850161438e565b915060408401356001600160401b0381111561477557600080fd5b614781868287016144f7565b9150509250925092565b600081518084526020808501945080840160005b838110156147c45781516001600160601b03168752958201959082019060010161479f565b509495945050505050565b60408152600083516040808401526147ea608084018261478b565b90506020850151603f19848303016060850152614807828261478b565b925050508260208301529392505050565b60008083601f84011261482a57600080fd5b5081356001600160401b0381111561484157600080fd5b60208301915083602082850101111561485957600080fd5b9250929050565b60008060006040848603121561487557600080fd5b8335925060208401356001600160401b0381111561489257600080fd5b61489e86828701614818565b9497909650939450505050565b6000806000604084860312156148c057600080fd5b83356001600160401b038111156148d657600080fd5b6148e286828701614818565b909790965060209590950135949350505050565b6000806040838503121561490957600080fd5b8235614914816141a4565b915060208301356001600160401b038082111561493057600080fd5b908401906060828703121561494457600080fd5b60405160608101818110838211171561495f5761495f614095565b60405282358281111561497157600080fd5b61497d8882860161417d565b82525060208301356020820152604083013560408201528093505050509250929050565b6000602082840312156149b357600080fd5b81356001600160401b038111156149c957600080fd5b8201601f810184136149da57600080fd5b6149e984823560208401614126565b949350505050565b600080600060608486031215614a0657600080fd5b83359250602084013561475a816141a4565b600060208284031215614a2a57600080fd5b5035919050565b60008060208385031215614a4457600080fd5b82356001600160401b0380821115614a5b57600080fd5b818501915085601f830112614a6f57600080fd5b813581811115614a7e57600080fd5b8660208260051b8501011115614a9357600080fd5b60209290920196919550909350505050565b91825260601b6001600160601b031916602082015260340190565b634e487b7160e01b600052603260045260246000fd5b600082614af357634e487b7160e01b600052601260045260246000fd5b500690565b60006001600160601b0380831681851681830481118215151615614b1e57614b1e614067565b02949350505050565b6000816000190483118215151615614b4157614b41614067565b500290565b602080825260409082018190527f5369676e61746f7269657320646f206e6f74206f776e206174206c6561737420908201527f7468726573686f6c642070657263656e74616765206f6620612071756f72756d606082015260800190565b600082821015614bb657614bb6614067565b500390565b6020808252603c908201527f4261746368657220686173206e6f742073756666696369656e742066756e647360408201527f20666f7220706179696e672074686973207472616e73616374696f6e00000000606082015260800190565b600060208284031215614c2a57600080fd5b5051919050565b600060208284031215614c4357600080fd5b81516001600160c01b03811681146139d757600080fd5b600060208284031215614c6c57600080fd5b815160ff811681146139d757600080fd5b6000600019821415614c9157614c91614067565b5060010190565b6001600160601b03811681146110f457600080fd5b600060408284031215614cbf57600080fd5b614cc76140ab565b8251614cd2816141a4565b81526020830151614ce281614c98565b60208201529392505050565b600060208284031215614d0057600080fd5b81516139d7816141a4565b600060208284031215614d1d57600080fd5b815167ffffffffffffffff19811681146139d757600080fd5b600060208284031215614d4857600080fd5b81516139d781614c98565b60006001600160601b0383811690831681811015614d7357614d73614067565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015614db657815185529382019390820190600101614d9a565b5092979650505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff84168152604060208201526000614e0c604083018486614dc3565b95945050505050565b6001600160a01b038516815263ffffffff84166020820152606060408201819052600090614e469083018486614dc3565b9695505050505050565b8183823760009101908152919050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015614efe57602081850181015186830182015201614ee2565b81811115614f10576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b0383168152604060208201526000825160606040840152614f4f60a0840182614ed8565b90506020840151606084015260408401516080840152809150509392505050565b60208152600061419d6020830184614ed8565b60008235609e19833603018112614f9957600080fd5b9190910192915050565b8035613b85816141a4565b600060208284031215614fc057600080fd5b81516139d7816146d1565b8183526000602080850194508260005b858110156147c4578135614fee816141a4565b6001600160a01b031687528183013561500681614c98565b6001600160601b0316878401526040968701969190910190600101614fdb565b60208082528181018390526000906040808401600586901b8501820187855b8881101561512557878303603f190184528135368b9003609e1901811261506b57600080fd5b8a0160a0813536839003601e1901811261508457600080fd5b820180356001600160401b0381111561509c57600080fd5b8060061b36038413156150ae57600080fd5b8287526150c0838801828c8501614fcb565b925050506150cf888301614fa3565b6001600160a01b031688860152818701358786015260606150f181840161438e565b63ffffffff1690860152608061510883820161438e565b63ffffffff16950194909452509285019290850190600101615045565b509098975050505050505050565b600061ffff8083168181141561514b5761514b614067565b600101939250505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47424c535369676e6174757265436865636b65722e636865636b5369676e617475a264697066735822122015291e7c0ca7fb3106e540fb13a51d69bcee5541091c650c9b3526c6fcc77b4964736f6c634300080c0033","sourceMap":"1015:10203:171:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10930:10;10913:28;;;;:16;:28;;;;;:41;;10945:9;;10913:28;:41;;10945:9;;10913:41;:::i;:::-;;;;-1:-1:-1;;10991:10:171;11003:28;;;;:16;:28;;;;;;;;;;10969:63;;425:25:176;;;10969:63:171;;398:18:176;10969:63:171;;;;;;;1015:10203;;;;;9605:1144;;;;;;;;;;-1:-1:-1;9605:1144:171;;;;;:::i;:::-;;:::i;:::-;;;3585:14:176;;3578:22;3560:41;;3548:2;3533:18;9605:1144:171;;;;;;;;14547:1081:108;;;;;;;;;;-1:-1:-1;14547:1081:108;;;;;:::i;:::-;;:::i;:::-;;;;5435:14:176;;5428:22;5410:41;;5494:14;;5487:22;5482:2;5467:18;;5460:50;5383:18;14547:1081:108;5248:268:176;4004:2862:171;;;;;;;;;;-1:-1:-1;4004:2862:171;;;;;:::i;:::-;;:::i;:::-;;7697:1470:114;;;;;;;;;;-1:-1:-1;7697:1470:114;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5599:135::-;;;;;;;;;;-1:-1:-1;5599:135:114;;;;;:::i;:::-;;:::i;2232:123:108:-;;;;;;;;;;-1:-1:-1;2232:123:108;;;;;:::i;:::-;;:::i;2394:187:171:-;;;;;;;;;;-1:-1:-1;2394:187:171;;;;;:::i;:::-;;:::i;4387:9678:108:-;;;;;;;;;;-1:-1:-1;4387:9678:108;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;2587:1343:171:-;;;;;;:::i;:::-;;:::i;1183:47:108:-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14663:32:176;;;14645:51;;14633:2;14618:18;1183:47:108;14474:228:176;1132:45:108;;;;;;;;;;;;;;;9235:111:114;;;;;;;;;;-1:-1:-1;9325:13:114;9235:111;;1069:57:108;;;;;;;;;;;;;;;10755:115:171;;;;;;;;;;-1:-1:-1;10755:115:171;;;;;:::i;:::-;-1:-1:-1;;;;;10838:25:171;10812:7;10838:25;;;:16;:25;;;;;;;10755:115;;;;425:25:176;;;413:2;398:18;10755:115:171;279:177:176;2071:101:41;;;;;;;;;;;;;:::i;1441:85::-;;;;;;;;;;-1:-1:-1;1513:6:41;;-1:-1:-1;;;;;1513:6:41;1441:85;;11045:171:171;;;;;;;;;;-1:-1:-1;11045:171:171;;;;;:::i;:::-;;:::i;4797:260:114:-;;;;;;;;;;-1:-1:-1;4797:260:114;;;;;:::i;:::-;;:::i;5262:158::-;;;;;;;;;;-1:-1:-1;5262:158:114;;;;;:::i;:::-;;:::i;2721:148::-;;;;;;;;;;-1:-1:-1;2721:148:114;;;;;:::i;:::-;;:::i;6872:2727:171:-;;;;;;;;;;-1:-1:-1;6872:2727:171;;;;;:::i;:::-;;:::i;309:50:172:-;;;;;;;;;;-1:-1:-1;309:50:172;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;309:50:172;;;;;;;;;;18428:10:176;18416:23;;;18398:42;;18483:14;;18476:22;18471:2;18456:18;;18449:50;18371:18;309:50:172;18232:273:176;1421:32:108;;;;;;;;;;-1:-1:-1;1421:32:108;;;;;;;;1236:46;;;;;;;;;;;;;;;6262:951:114;;;;;;;;;;;;;:::i;2321:198:41:-;;;;;;;;;;-1:-1:-1;2321:198:41;;;;;:::i;:::-;;:::i;1212:31:115:-;;;;;;;;;;-1:-1:-1;1212:31:115;;;;-1:-1:-1;;;;;1212:31:115;;;3631:872:114;;;;;;;;;;-1:-1:-1;3631:872:114;;;;;:::i;:::-;;:::i;9605:1144:171:-;9959:4;9975:27;10045:15;10062:13;10028:48;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;10028:48:171;;;;;;;;;10005:81;;10028:48;10005:81;;;;10101:33;;;;:12;:33;;;;;:50;10005:81;;-1:-1:-1;10101:50:171;;10097:98;;10179:5;10172:12;;;;;10097:98;10210:33;;;;:12;:33;;;;;:43;-1:-1:-1;;;10210:43:171;;;;10205:87;;10276:5;10269:12;;;;;10205:87;10322:163;;;;;;19914:19:176;;;19949:12;;;19942:28;;;19986:12;;;19979:28;;;-1:-1:-1;;;;;;20037:44:176;;20023:12;;;20016:66;10302:17:171;;20098:13:176;;10322:163:171;;;-1:-1:-1;;10322:163:171;;;;;;;;;10517:15;;10322:163;10517:15;;;10322:163;;-1:-1:-1;10562:180:171;10608:11;10637:19;10517:15;10702:26;10562:28;:180::i;:::-;10543:199;;;;;9605:1144;;;;;;;;;;;:::o;14547:1081:108:-;14745:22;14769;14878:13;2037:77:129;14980:7:108;15009:3;:5;;;15036:3;:5;;;15063;:7;;;15071:1;15063:10;;;;;;;:::i;:::-;;;;;15095:7;;15103:1;15095:10;;;;15127:5;:7;;;15135:1;15127:10;;;;;;;:::i;:::-;;;;;15159:5;:7;;;15167:1;15159:10;;;;;;;:::i;:::-;;;;;;;;;;15191:7;;15220;;;;14942:303;;;;;;;;;;;20607:19:176;;;20651:2;20642:12;;20635:28;;;;20688:2;20679:12;;20672:28;;;;20725:2;20716:12;;20709:28;;;;20762:3;20753:13;;20746:29;;;;20800:3;20791:13;;20784:29;20838:3;20829:13;;20822:29;20876:3;20867:13;;20860:29;20914:3;20905:13;;20898:29;20952:3;20943:13;;20254:708;14942:303:108;;;;;;;;;;;;;14915:344;;;;;;14894:375;;:394;;;;:::i;:::-;14878:410;-1:-1:-1;15371:250:108;15402:33;15413:21;:3;14878:410;15413:14;:21::i;:::-;15402:5;;:10;:33::i;:::-;15449:22;:20;:22::i;:::-;15485:67;15514:37;15545:5;15514:19;-1:-1:-1;;;;;;;;;;;;;;;;;2392:13:129;;;;;;;;2400:1;2392:13;;2403:1;2392:13;;;;;2313:99;15514:19:108;:30;;:37::i;:::-;15485:23;15500:7;15485:14;:23::i;:::-;:28;;:67::i;:::-;15566:5;1055:7;15371:17;:250::i;:::-;15330:291;;;;-1:-1:-1;14547:1081:108;-1:-1:-1;;;;;;14547:1081:108:o;4004:2862:171:-;4549:42;4516:22;4627:9;4894:29;;;;:12;:29;;;;;:46;4602:34;;-1:-1:-1;4894:46:171;;4873:118;;;;-1:-1:-1;;;4873:118:171;;21515:2:176;4873:118:171;;;21497:21:176;21554:2;21534:18;;;21527:30;-1:-1:-1;;;21573:18:176;;;21566:50;21633:18;;4873:118:171;;;;;;;;;5071:29;;;;:12;:29;;;;;:39;-1:-1:-1;;;5071:39:171;;;;:48;5050:118;;;;-1:-1:-1;;;5050:118:171;;21864:2:176;5050:118:171;;;21846:21:176;21903:2;21883:18;;;21876:30;-1:-1:-1;;;21922:18:176;;;21915:53;21985:18;;5050:118:171;21662:347:176;5050:118:171;-1:-1:-1;;;;;5200:32:171;;5235:1;5200:32;;;:16;:32;;;;;;5179:105;;;;-1:-1:-1;;;5179:105:171;;22216:2:176;5179:105:171;;;22198:21:176;22255:2;22235:18;;;22228:30;-1:-1:-1;;;22274:18:176;;;22267:52;22336:18;;5179:105:171;22014:346:176;5179:105:171;5295:29;;;;:12;:29;;;;;:46;;-1:-1:-1;;5295:46:171;;-1:-1:-1;;;5295:46:171;;;;:29;;5584:171;;5308:15;;5650:46;;5714:27;5584:15;:171::i;:::-;5476:279;;;;1293:2;5957:90;;:17;:37;;;5995:1;5957:40;;;;;;;;:::i;:::-;;;;;;;:90;;;;:::i;:::-;-1:-1:-1;;;;;5872:175:171;1230:3;5872:17;:38;;;5911:1;5872:41;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;5872:65:171;;;;;:::i;:::-;:175;;5851:286;;;;-1:-1:-1;;;5851:286:171;;;;;;;:::i;:::-;6153:46;;-1:-1:-1;;;;;14663:32:176;;14645:51;;6167:15:171;;6153:46;;14633:2:176;14618:18;6153:46:171;;;;;;;6347:20;6370:9;6347:32;-1:-1:-1;6492:14:171;6551:11;6510:29;6347:32;6510:14;:29;:::i;:::-;:37;;6542:5;6510:37;:::i;:::-;6509:53;;;;:::i;:::-;-1:-1:-1;;;;;6594:32:171;;;;;;:16;:32;;;;;;6492:70;;-1:-1:-1;6594:58:171;-1:-1:-1;6594:58:171;6573:165;;;;-1:-1:-1;;;6573:165:171;;;;;;;:::i;:::-;-1:-1:-1;;;;;6749:54:171;;;;;;:16;:54;;;;;:64;;6807:6;;6749:54;:64;;6807:6;;6749:64;:::i;:::-;;;;-1:-1:-1;;6823:36:171;;6831:10;;6823:36;;;;;6852:6;;6823:36;;;;6852:6;6831:10;6823:36;;;;;;;;;;;;;;;;;;;;;4212:2654;;;;;;4004:2862;;:::o;7697:1470:114:-;7854:44;;-1:-1:-1;;;7854:44:114;;-1:-1:-1;;;;;14663:32:176;;;7854:44:114;;;14645:51:176;7801:16:114;;7833:18;;7854:20;:34;;;;14618:18:176;;7854:44:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7933:55;;-1:-1:-1;;;7933:55:114;;;;;425:25:176;;;7833:65:114;;-1:-1:-1;7908:22:114;;-1:-1:-1;;;;;7933:20:114;:43;;;;398:18:176;;7933:55:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7908:80;-1:-1:-1;;;;;;8003:19:114;;;;:62;;;8026:20;-1:-1:-1;;;;;8026:32:114;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;8003:62;7999:116;;;8088:16;;;8102:1;8088:16;;;;;;;;;;;-1:-1:-1;8081:23:114;7697:1470;-1:-1:-1;;;;7697:1470:114:o;7999:116::-;8196:36;8235:46;8266:14;-1:-1:-1;;;;;8235:46:114;:30;:46::i;:::-;8196:85;-1:-1:-1;8291:21:114;;8322:173;8346:23;:30;8342:1;:34;8322:173;;;8414:14;-1:-1:-1;;;;;8414:35:114;;8456:23;8480:1;8456:26;;;;;;;;:::i;:::-;;;;;8414:70;;-1:-1:-1;;;;;;8414:70:114;;;;;;;8456:26;;;;;8414:70;;;24899:36:176;24872:18;;8414:70:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8397:87;;;;:::i;:::-;;-1:-1:-1;8378:3:114;;;;:::i;:::-;;;;8322:173;;;;8566:35;8618:13;-1:-1:-1;;;;;8604:28:114;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8604:28:114;;8566:66;;8642:13;8674:9;8669:457;8693:23;:30;8689:1;:34;8669:457;;;8744:12;8765:23;8789:1;8765:26;;;;;;;;:::i;:::-;;;;;8837:43;;-1:-1:-1;;;8837:43:114;;8765:26;;;;;8837:43;;;24899:36:176;;;8765:26:114;-1:-1:-1;;;;;;;;8837:14:114;:35;;;;24872:18:176;;8837:43:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8806:74;;8899:9;8894:222;8918:20;8914:1;:24;8894:222;;;9019:47;;-1:-1:-1;;;9019:47:114;;25475:4:176;25463:17;;9019:47:114;;;25445:36:176;25497:18;;;25490:34;;;9019:14:114;-1:-1:-1;;;;;9019:36:114;;;;25418:18:176;;9019:47:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;8963:18;8982:5;8963:25;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8963:113:114;;;:25;;;;;;;;;;;:113;9094:7;;;;:::i;:::-;;;;8940:3;;;;;:::i;:::-;;;;8894:222;;;;8730:396;;8725:3;;;;;:::i;:::-;;;;8669:457;;;-1:-1:-1;9142:18:114;;7697:1470;-1:-1:-1;;;;;;;7697:1470:114:o;5599:135::-;1334:13:41;:11;:13::i;:::-;5686:41:114::1;5707:19;5686:20;:41::i;:::-;5599:135:::0;:::o;2232:123:108:-;1537:19;-1:-1:-1;;;;;1537:25:108;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1523:41:108;:10;-1:-1:-1;;;;;1523:41:108;;1502:180;;;;-1:-1:-1;;;1502:180:108;;26633:2:176;1502:180:108;;;26615:21:176;26672:2;26652:18;;;26645:30;26711:34;26691:18;;;26684:62;26782:34;26762:18;;;26755:62;26854:30;26833:19;;;26826:59;26902:19;;1502:180:108;26431:496:176;1502:180:108;2317:31:::1;2342:5;2317:24;:31::i;2394:187:171:-:0;3111:19:45;3134:13;;;;;;3133:14;;3179:34;;;;-1:-1:-1;3197:12:45;;3212:1;3197:12;;;;:16;3179:34;3178:108;;;-1:-1:-1;3258:4:45;1476:19:49;:23;;;3219:66:45;;-1:-1:-1;3268:12:45;;;;;:17;3219:66;3157:201;;;;-1:-1:-1;;;3157:201:45;;27134:2:176;3157:201:45;;;27116:21:176;27173:2;27153:18;;;27146:30;27212:34;27192:18;;;27185:62;-1:-1:-1;;;27263:18:176;;;27256:44;27317:19;;3157:201:45;26932:410:176;3157:201:45;3368:12;:16;;-1:-1:-1;;3368:16:45;3383:1;3368:16;;;3394:65;;;;3428:13;:20;;-1:-1:-1;;3428:20:45;;;;;3394:65;2515:59:171::1;2541:13;2556:17;2515:25;:59::i;:::-;3483:14:45::0;3479:99;;;3529:5;3513:21;;-1:-1:-1;;3513:21:45;;;3553:14;;-1:-1:-1;24899:36:176;;3553:14:45;;24887:2:176;24872:18;3553:14:45;;;;;;;3479:99;3101:483;2394:187:171;;:::o;4387:9678:108:-;-1:-1:-1;;;;;;;;;;;;;;;;;4578:7:108;4651:6;:17;;;:24;4619:21;;;;;;;;;;;;;;;;;:28;:56;4618:142;;;;;4729:6;:23;;;:30;4697:21;;;;;;;;;;;;;;;;;:28;:62;4618:142;:227;;;;;4813:6;:24;;;:31;4781:21;;;;;;;;;;;;;;;;;:28;:63;4618:227;:316;;;;;4898:6;:28;;;:35;4866:21;;;;;;;;;;;;;;;;;:28;:67;4618:316;4597:428;;;;-1:-1:-1;;;4597:428:108;;27748:2:176;4597:428:108;;;27730:21:176;27787:2;27767:18;;;27760:30;-1:-1:-1;;;;;;;;;;;27806:18:176;;;27799:62;27897:34;27877:18;;;27870:62;-1:-1:-1;;;27948:19:176;;;27941:32;27990:19;;4597:428:108;27546:469:176;4597:428:108;5107:35;;:42;5057:23;;;;:30;:92;5036:207;;;;-1:-1:-1;;;5036:207:108;;28222:2:176;5036:207:108;;;28204:21:176;28261:2;28241:18;;;28234:30;;;-1:-1:-1;;;;;;;;;;;28280:18:176;;;28273:62;28371:34;28351:18;;;28344:62;-1:-1:-1;;;28422:19:176;;;28415:35;28467:19;;5036:207:108;28020:472:176;5036:207:108;5305:12;5275:43;;:20;:43;;;5254:150;;;;-1:-1:-1;;;5254:150:108;;28699:2:176;5254:150:108;;;28681:21:176;28738:2;28718:18;;;28711:30;-1:-1:-1;;;;;;;;;;;28757:18:176;;;28750:62;28848:30;28828:18;;;28821:58;28896:19;;5254:150:108;28497:424:176;5254:150:108;5921:19;;;;;;;;-1:-1:-1;5921:19:108;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;6277:21:108;;;;;;;;;;;;;;;;;;6264:42;;;;;;;;;;;5921:19;;6264:42;6277:21;6264:42;;;;5921:19;6264:42;;;;;-1:-1:-1;;6230:31:108;;;;:76;;;;6364:21;;;;;;;;;;;;-1:-1:-1;6364:21:108;;;;;6351:42;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6316:77:108;;-1:-1:-1;;;;;;;;;;;;;;;;;6499:6:108;:23;;;:30;-1:-1:-1;;;;;6472:67:108;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6472:67:108;-1:-1:-1;6445:94:108;;6589:23;;;;:30;-1:-1:-1;;;;;6575:45:108;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6575:45:108;;6549:10;:23;;:71;;;;6799:27;6829:141;6884:21;;;;;;;;;;;;;;;;;6923:19;-1:-1:-1;;;;;6923:31:108;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6829:37;:141::i;:::-;6799:171;;6990:9;6985:1728;7009:6;:23;;;:30;7005:1;:34;6985:1728;;;7301:82;:6;:44;;;7346:1;7301:47;;;;;;;;:::i;:::-;;;;;;;10534:9:129;;10473:16;10524:20;;;10580:4;10576:13;;;10570:20;10557:34;;;10629:4;10616:18;;;10404:246;7301:82:108;7272:10;:23;;;7296:1;7272:26;;;;;;;;:::i;:::-;;;;;;;;;;:111;7405:6;;7401:305;;7542:23;;;;7566:5;7570:1;7566;:5;:::i;:::-;7542:30;;;;;;;;:::i;:::-;;;;;;;7534:39;;7476:10;:23;;;7500:1;7476:26;;;;;;;;:::i;:::-;;;;;;;7468:35;;:105;7435:252;;;;;-1:-1:-1;;;7435:252:108;;29128:2:176;7435:252:108;;;29110:21:176;29147:18;;;29140:30;;;;-1:-1:-1;;;;;;;;;;;29186:18:176;;;29179:62;29277:34;29257:18;;;29250:62;29329:19;;7435:252:108;28926:428:176;7435:252:108;7846:19;-1:-1:-1;;;;;7846:76:108;;7961:10;:23;;;7985:1;7961:26;;;;;;;;:::i;:::-;;;;;;;8026:20;8079:6;:35;;;8115:1;8079:38;;;;;;;;:::i;:::-;;;;;;;7846:294;;;;;;;;;;;;;;;;29558:25:176;;;29602:10;29648:15;;;29643:2;29628:18;;29621:43;29700:15;29695:2;29680:18;;29673:43;29546:2;29531:18;;29359:363;7846:294:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7816:324:108;:10;:24;;;7841:1;7816:27;;;;;;;;:::i;:::-;;;;;;:324;;;;;8431:267;8461:219;8529:129;8613:19;8583:10;:24;;;8608:1;8583:27;;;;;;;;:::i;:::-;;;;;;;:49;8529:24;:129::i;:::-;8461:6;:23;;;8485:1;8461:26;;;;;;;;:::i;:::-;;;;;;;:42;;:219;;;;:::i;8431:267::-;8425:273;-1:-1:-1;7041:3:108;;;;:::i;:::-;;;;6985:1728;;;;6631:2092;8996:12;:3;:10;:12::i;:::-;9340:20;;8990:18;;-1:-1:-1;9340:20:108;;9311:26;9340:20;9406:97;;9502:1;9406:97;;;9446:10;-1:-1:-1;;;;;9446:35:108;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9374:129;;9523:9;9518:3499;9542:21;;;;;;;;;;;;;;;;;:28;9538:1;:32;9518:3499;;;9754:21;9750:486;;;10045:20;9832:233;;9993:21;9832:19;-1:-1:-1;;;;;9832:43:108;;9911:21;;;;;;;;;;;;;;;;;9933:1;9911:24;;;;;;;;:::i;:::-;;;;;9832:130;;-1:-1:-1;;;;;;9832:130:108;;;;;;;9911:24;;;;;9832:130;;;24899:36:176;24872:18;;9832:130:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:182;;;;:::i;:::-;:233;9799:418;;;;-1:-1:-1;;;9799:418:108;;29929:2:176;9799:418:108;;;29911:21:176;29968:3;29948:18;;;29941:31;-1:-1:-1;;;;;;;;;;;29988:18:176;;;29981:62;30079:34;30059:18;;;30052:62;30151:34;30130:19;;;30123:63;-1:-1:-1;;;30202:19:176;;;30195:37;30249:19;;9799:418:108;29727:547:176;9799:418:108;10504:14;-1:-1:-1;;;;;10504:46:108;;10601:21;;;;;;;;;;;;;;;;;10623:1;10601:24;;;;;;;;:::i;:::-;;;;;;;;;10595:31;;10669:20;10726:6;:23;;;10750:1;10726:26;;;;;;;;:::i;:::-;;;;;;;;;;;10504:275;;-1:-1:-1;;;;;;10504:275:108;;;;;;;30504:4:176;30492:17;;;10504:275:108;;;30474:36:176;10504:275:108;30575:15:176;;;30555:18;;;30548:43;30627:15;30607:18;;;30600:43;30447:18;;10504:275:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10433:346:108;;10441:34;:6;:17;;;10459:1;10441:20;;;;;;;;:::i;:34::-;-1:-1:-1;;10433:346:108;;10404:514;;;;-1:-1:-1;;;10404:514:108;;31155:2:176;10404:514:108;;;31137:21:176;31194:2;31174:18;;;31167:30;-1:-1:-1;;;;;;;;;;;31213:18:176;;;31206:62;31304:34;31284:18;;;31277:62;31376:34;31355:19;;;31348:63;-1:-1:-1;;;31427:19:176;;;31420:32;31469:19;;10404:514:108;30953:541:176;10404:514:108;10942:30;10951:6;:17;;;10969:1;10951:20;;;;;;;;:::i;:::-;;;;;;;10942:3;:8;;:30;;;;:::i;:::-;10936:36;;11126:13;-1:-1:-1;;;;;11126:70:108;;11243:21;;;;;;;;;;;;;;;;;11265:1;11243:24;;;;;;;;:::i;:::-;;;;;;;;;11237:31;;11307:20;11360:6;:24;;;11385:1;11360:27;;;;;;;;:::i;:::-;;;;;;;;;;;11126:284;;-1:-1:-1;;;;;;11126:284:108;;;;;;;30504:4:176;30492:17;;;11126:284:108;;;30474:36:176;11126:284:108;30575:15:176;;;30555:18;;;30548:43;30627:15;30607:18;;;30600:43;30447:18;;11126:284:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11089:11;:31;;;11121:1;11089:34;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11089:321:108;;;:34;;;;;;;;;;:321;11466:52;;;:55;;11519:1;;11466:55;;;;;;:::i;:::-;;;;;;;11428:11;:32;;;11461:1;11428:35;;;;;;;;:::i;:::-;;;;;;:93;-1:-1:-1;;;;;11428:93:108;;;-1:-1:-1;;;;;11428:93:108;;;;;11608:31;11891:9;11886:1117;11910:6;:23;;;:30;11906:1;:34;11886:1117;;;12107:161;12154:10;:24;;;12179:1;12154:27;;;;;;;;:::i;:::-;;;;;;;12217:21;;;;;;;;;;;;;;;;;12239:1;12217:24;;;;;;;;:::i;:::-;;;;;;;7387:13:130;;;7404:1;7386:19;;;7380:26;;7292:121;12107:161:108;12078:907;;;12356:13;-1:-1:-1;;;;;12356:72:108;;12483:21;;;;;;;;;;;;;;;;;12505:1;12483:24;;;;;;;;:::i;:::-;;;;;;;;;12477:31;;12555:20;12621:10;:23;;;12645:1;12621:26;;;;;;;;:::i;:::-;;;;;;;12688:6;:28;;;12717:1;12688:31;;;;;;;;:::i;:::-;;;;;;;12757:23;12688:126;;;;;;;;:::i;:::-;;;;;;;;;;;12356:489;;-1:-1:-1;;;;;;12356:489:108;;;;;;;32007:4:176;31995:17;;;12356:489:108;;;31977:36:176;12356:489:108;32078:15:176;;;32058:18;;;32051:43;32110:18;;;32103:34;;;;32173:15;32153:18;;;32146:43;31949:19;;12356:489:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12317:32;;:35;;12350:1;;12317:35;;;;;;:::i;:::-;;;;;;:528;;;;;;;:::i;:::-;-1:-1:-1;;;;;12317:528:108;;;-1:-1:-1;12911:25:108;;;;;12078:907;11942:3;;;;:::i;:::-;;;;11886:1117;;;;9577:3440;9572:3;;;;;:::i;:::-;;;;9518:3499;;;;9297:3730;;13104:22;13144:21;13182:170;13234:7;13263:3;13288:6;:12;;;13322:6;:12;;;13182:30;:170::i;:::-;13086:266;;;;13391:17;13366:143;;;;-1:-1:-1;;;13366:143:108;;32644:2:176;13366:143:108;;;32626:21:176;32683:2;32663:18;;;32656:30;-1:-1:-1;;;;;;;;;;;32702:18:176;;;32695:62;32793:34;32773:18;;;32766:62;-1:-1:-1;;;32844:19:176;;;32837:34;32888:19;;13366:143:108;32442:471:176;13366:143:108;13548:16;13523:132;;;;-1:-1:-1;;;13523:132:108;;33120:2:176;13523:132:108;;;33102:21:176;33159:2;33139:18;;;33132:30;-1:-1:-1;;;;;;;;;;;33178:18:176;;;33171:62;33269:27;33249:18;;;33242:55;33314:19;;13523:132:108;32918:421:176;13523:132:108;13036:630;;13740:27;13810:20;13832:10;:23;;;13793:63;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;13793:63:108;;;;;;13770:96;;13793:63;13770:96;;;;14025:11;;13770:96;;-1:-1:-1;4387:9678:108;;-1:-1:-1;;;;;;;4387:9678:108:o;2587:1343:171:-;2718:23;2770:9;2755:12;:24;2751:206;;;-1:-1:-1;2840:15:171;2751:206;;;2928:15;2945:10;2911:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2901:56;;;;;;2883:74;;2751:206;2989:29;;;;:12;:29;;;;;:46;;;:51;2968:125;;;;-1:-1:-1;;;2968:125:171;;34195:2:176;2968:125:171;;;34177:21:176;34234:2;34214:18;;;34207:30;34273:29;34253:18;;;34246:57;34320:18;;2968:125:171;33993:351:176;2968:125:171;3108:9;:13;3104:213;;3154:10;3137:28;;;;:16;:28;;;;;:41;;3169:9;;3137:28;:41;;3169:9;;3137:41;:::i;:::-;;;;-1:-1:-1;;3236:10:171;3264:28;;;;:16;:28;;;;;;;;;;3197:109;;425:25:176;;;3197:109:171;;398:18:176;3197:109:171;;;;;;;3104:213;3352:10;3366:1;3335:28;;;:16;:28;;;;;;3327:69;;;;-1:-1:-1;;;3327:69:171;;34551:2:176;3327:69:171;;;34533:21:176;34590:2;34570:18;;;34563:30;34629:26;34609:18;;;34602:54;34673:18;;3327:69:171;34349:348:176;3327:69:171;-1:-1:-1;;;;;;;;;;;;;;;;3446:50:171;3483:12;3446:50;;;;;3545:29;;;:12;:29;;;;;;;:42;;;;;;;;-1:-1:-1;;;3545:42:171;-1:-1:-1;;3545:42:171;;;;;;;;;;;;;3660:111;;-1:-1:-1;;3682:15:171;;3660:111;;;;3745:16;;;;3660:111;:::i;:::-;;;;;;;;3810:15;3786:137;3839:10;3870:12;3897:16;;3786:137;;;;;;;;;:::i;:::-;;;;;;;;2708:1222;;2587:1343;;;:::o;2071:101:41:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;:::-;2071:101::o:0;11045:171:171:-;11156:4;11205;11189:11;;11179:22;;;;;;;:::i;:::-;;;;;;;;:30;11172:37;;11045:171;;;;;:::o;4797:260:114:-;1358:10;-1:-1:-1;;;;;1380:20:114;1358:43;;1337:172;;;;-1:-1:-1;;;1337:172:114;;;;;;;:::i;:::-;4986:64:::1;::::0;-1:-1:-1;;;4986:64:114;;-1:-1:-1;;;;;4986:13:114::1;:35;::::0;::::1;::::0;:64:::1;::::0;5022:8;;5032:17;;4986:64:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4797:260:::0;;:::o;5262:158::-;1358:10;-1:-1:-1;;;;;1380:20:114;1358:43;;1337:172;;;;-1:-1:-1;;;1337:172:114;;;;;;;:::i;:::-;5364:49:::1;::::0;-1:-1:-1;;;5364:49:114;;-1:-1:-1;;;;;14663:32:176;;;5364:49:114::1;::::0;::::1;14645:51:176::0;5364:13:114::1;:39;::::0;::::1;::::0;14618:18:176;;5364:49:114::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;5262:158:::0;:::o;2721:148::-;1334:13:41;:11;:13::i;:::-;2814:48:114::1;::::0;-1:-1:-1;;;2814:48:114;;-1:-1:-1;;;;;2814:13:114::1;:34;::::0;::::1;::::0;:48:::1;::::0;2849:12;;2814:48:::1;;;:::i;6872:2727:171:-:0;7150:22;7175:9;7150:34;;7195:27;7265:15;7282:13;7248:48;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;7248:48:171;;;;;;;;;7225:81;;7248:48;7225:81;;;;7564:33;;;;:12;:33;;;;;:50;7225:81;;-1:-1:-1;7564:50:171;;7543:122;;;;-1:-1:-1;;;7543:122:171;;21515:2:176;7543:122:171;;;21497:21:176;21554:2;21534:18;;;21527:30;-1:-1:-1;;;21573:18:176;;;21566:50;21633:18;;7543:122:171;21313:344:176;7543:122:171;7745:33;;;;:12;:33;;;;;:43;-1:-1:-1;;;7745:43:171;;;;:52;7724:122;;;;-1:-1:-1;;;7724:122:171;;21864:2:176;7724:122:171;;;21846:21:176;21903:2;21883:18;;;21876:30;-1:-1:-1;;;21922:18:176;;;21915:53;21985:18;;7724:122:171;21662:347:176;7724:122:171;-1:-1:-1;;;;;7865:31:171;;7899:1;7865:31;;;:16;:31;;;;;;7857:70;;;;-1:-1:-1;;;7857:70:171;;22216:2:176;7857:70:171;;;22198:21:176;22255:2;22235:18;;;22228:30;-1:-1:-1;;;22274:18:176;;;22267:52;22336:18;;7857:70:171;22014:346:176;7857:70:171;7938:33;;;;:12;:33;;;;;:50;;-1:-1:-1;;7938:50:171;;-1:-1:-1;;;7938:50:171;;;;:33;;8231:179;;7951:19;;8301:50;;8369:27;8231:15;:179::i;:::-;8123:287;;;;1293:2;8612:90;;:17;:37;;;8650:1;8612:40;;;;;;;;:::i;:::-;;;;;;;:90;;;;:::i;:::-;-1:-1:-1;;;;;8527:175:171;1230:3;8527:17;:38;;;8566:1;8527:41;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;8527:65:171;;;;;:::i;:::-;:175;;8506:286;;;;-1:-1:-1;;;8506:286:171;;;;;;;:::i;:::-;8808:45;;-1:-1:-1;;;;;14663:32:176;;14645:51;;8822:15:171;;8808:45;;14633:2:176;14618:18;8808:45:171;;;;;;;9001:20;9024:9;9001:32;-1:-1:-1;9147:14:171;9206:11;9165:29;9001:32;9165:14;:29;:::i;:::-;:37;;9197:5;9165:37;:::i;:::-;9164:53;;;;:::i;:::-;-1:-1:-1;;;;;9249:31:171;;;;;;:16;:31;;;;;;9147:70;;-1:-1:-1;9249:41:171;-1:-1:-1;9249:41:171;9228:148;;;;-1:-1:-1;;;9228:148:171;;;;;;;:::i;:::-;-1:-1:-1;;;;;9387:31:171;;;;;;:16;:31;;;;;:41;;9422:6;;9387:31;:41;;9422:6;;9387:41;:::i;:::-;;;;-1:-1:-1;;;;;;;9443:103:171;;9505:31;;;;:16;:31;;;;;;;;;;9443:103;;425:25:176;;;9443:103:171;;398:18:176;9443:103:171;;;;;;;9556:36;;9564:10;;9556:36;;;;;9585:6;;9556:36;;;;9585:6;9564:10;9556:36;;;;;;;;;;;;;;;;;;;;;7140:2459;;;;;;6872:2727;;;:::o;6262:951:114:-;6321:16;6349:19;6371:20;-1:-1:-1;;;;;6371:32:114;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6349:56;;;-1:-1:-1;6420:16:114;6416:70;;-1:-1:-1;;6459:16:114;;;6473:1;6459:16;;;;;;;;;6262:951::o;6416:70::-;6496:21;;6527:129;6551:11;6547:1;:15;6527:129;;;6600:45;;-1:-1:-1;;;6600:45:114;;24929:4:176;24917:17;;6600:45:114;;;24899:36:176;6600:14:114;-1:-1:-1;;;;;6600:35:114;;;;24872:18:176;;6600:45:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6583:62;;;;:::i;:::-;;-1:-1:-1;6564:3:114;;;;:::i;:::-;;;;6527:129;;;;6666:35;6718:13;-1:-1:-1;;;;;6704:28:114;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6704:28:114;;6666:66;;6742:13;6774:9;6769:403;6793:20;-1:-1:-1;;;;;6793:32:114;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6789:38;;:1;:38;6769:403;;;6879:45;;-1:-1:-1;;;6879:45:114;;24929:4:176;24917:17;;6879:45:114;;;24899:36:176;6848:28:114;;6879:14;-1:-1:-1;;;;;6879:35:114;;;;24872:18:176;;6879:45:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6848:76;;6943:9;6938:224;6962:20;6958:1;:24;6938:224;;;7063:49;;-1:-1:-1;;;7063:49:114;;25475:4:176;25463:17;;7063:49:114;;;25445:36:176;25497:18;;;25490:34;;;7063:14:114;-1:-1:-1;;;;;7063:36:114;;;;25418:18:176;;7063:49:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;;7007:18;7026:5;7007:25;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7007:115:114;;;:25;;;;;;;;;;;:115;7140:7;;;;:::i;:::-;;;;6984:3;;;;;:::i;:::-;;;;6938:224;;;;6834:338;6829:3;;;;;:::i;:::-;;;;6769:403;;;-1:-1:-1;7188:18:114;;6262:951;-1:-1:-1;;;;6262:951:114:o;2321:198:41:-;1334:13;:11;:13::i;:::-;-1:-1:-1;;;;;2409:22:41;::::1;2401:73;;;::::0;-1:-1:-1;;;2401:73:41;;38045:2:176;2401:73:41::1;::::0;::::1;38027:21:176::0;38084:2;38064:18;;;38057:30;38123:34;38103:18;;;38096:62;-1:-1:-1;;;38174:18:176;;;38167:36;38220:19;;2401:73:41::1;37843:402:176::0;2401:73:41::1;2484:28;2503:8;2484:18;:28::i;3631:872:114:-:0;1684:16;;-1:-1:-1;;;;;1684:16:114;1670:10;:30;1649:153;;;;-1:-1:-1;;;1649:153:114;;38452:2:176;1649:153:114;;;38434:21:176;38491:2;38471:18;;;38464:30;38530:34;38510:18;;;38503:62;38601:34;38581:18;;;38574:62;-1:-1:-1;;;38652:19:176;;;38645:43;38705:19;;1649:153:114;38250:480:176;1649:153:114;3815:9:::1;3810:610;3830:29:::0;;::::1;3810:610;;;4029:18;;4048:1;4029:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:27;::::0;;;;;::::1;;;:::i;:::-;-1:-1:-1::0;;;;;4029:40:114::1;;4070:10;4090:4;4097:18;;4116:1;4097:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:28;4029:97:::0;;-1:-1:-1;;;;;;4029:97:114::1;::::0;;;;;;-1:-1:-1;;;;;39748:15:176;;;4029:97:114::1;::::0;::::1;39730:34:176::0;39800:15;;;;39780:18;;;39773:43;4097:28:114::1;;39832:18:176::0;;;39825:34;39665:18;;4029:97:114::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4140:17;4176:18;;4195:1;4176:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:27;::::0;;;;;::::1;;;:::i;:::-;:82;::::0;-1:-1:-1;;;4176:82:114;;4222:4:::1;4176:82;::::0;::::1;40332:34:176::0;-1:-1:-1;;;;;4237:19:114::1;40402:15:176::0;;40382:18;;;40375:43;4176:37:114;;;::::1;::::0;::::1;::::0;40267:18:176;;4176:82:114::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4140:118;;4272:18;;4291:1;4272:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:27;::::0;;;;;::::1;;;:::i;:::-;-1:-1:-1::0;;;;;4272:35:114::1;;4333:19;4386:9;4355:18;;4374:1;4355:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:28;;;:40;;;;:::i;:::-;4272:137;::::0;-1:-1:-1;;;;;;4272:137:114::1;::::0;;;;;;-1:-1:-1;;;;;40621:32:176;;;4272:137:114::1;::::0;::::1;40603:51:176::0;40670:18;;;40663:34;40576:18;;4272:137:114::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3866:554;3861:3;;;;:::i;:::-;;;3810:610;;;-1:-1:-1::0;4430:66:114::1;::::0;-1:-1:-1;;;4430:66:114;;-1:-1:-1;;;;;4430:19:114::1;:46;::::0;::::1;::::0;:66:::1;::::0;4477:18;;;;4430:66:::1;;;:::i;1240:240:27:-:0;1395:4;1469;1418:47;1446:5;1453:4;1459:5;1418:27;:47::i;:::-;:55;;1240:240;-1:-1:-1;;;;;1240:240:27:o;7084:580:129:-;-1:-1:-1;;;;;;;;;;;;;;;;;7184:23:129;;:::i;:::-;7228:3;;7217:14;;:8;7252:3;;;;7241:8;;;:14;7265:8;;;;:12;;;-1:-1:-1;;7452:1:129;7446:4;7217:14;7436:1;7429:4;7422:5;7418:16;7407:53;7396:64;-1:-1:-1;7396:64:129;7557:48;;;;7530:75;;7557:48;7582:9;7530:75;;7632:7;7624:33;;;;-1:-1:-1;;;7624:33:129;;43857:2:176;7624:33:129;;;43839:21:176;43896:2;43876:18;;;43869:30;-1:-1:-1;;;43915:18:176;;;43908:43;43968:18;;7624:33:129;43655:337:176;7624:33:129;7174:490;;7084:580;;;;:::o;4823:615::-;-1:-1:-1;;;;;;;;;;;;;;;;;4926:23:129;;:::i;:::-;4970:4;;4959:15;;:8;4995:4;;;;4984:8;;;:15;5020:4;;5009:8;;;;:15;;;;5045:4;;;;5034:8;;;:15;-1:-1:-1;;5225:1:129;5219:4;4959:15;5209:1;5202:4;5195:5;5191:16;5180:53;5169:64;-1:-1:-1;5169:64:129;5330:48;;;;5303:75;5406:7;5398:33;;;;-1:-1:-1;;;5398:33:129;;44199:2:176;5398:33:129;;;44181:21:176;44238:2;44218:18;;;44211:30;-1:-1:-1;;;44257:18:176;;;44250:43;44310:18;;5398:33:129;43997:337:176;4070:128:129;4119:14;;:::i;:::-;-1:-1:-1;4152:39:129;;;;;;;;3635:77;4152:39;;;;;;3752:77;4152:39;;;;;;;;;;;;;;3869:77;4152:39;;3986:77;4152:39;;;;;;;;;;;;;;;4070:128::o;11044:451::-;-1:-1:-1;;;;;;;;;;;;;;;;;11123:12:129;;;11185:24;-1:-1:-1;;;;;;;;;;;11193:2:129;11185:24;:::i;:::-;11173:36;;11220:239;11259:13;11270:1;11259:10;:13::i;:::-;11247:25;;-1:-1:-1;11247:25:129;-1:-1:-1;;;;;;;;;;;;11336:1:129;11333;11326:24;11318:4;:32;11314:92;;;11378:13;;;;;;;;;;;;;;;;;;;;11044:451;-1:-1:-1;;;11044:451:129:o;11314:92::-;-1:-1:-1;;;;;;;;;;;11434:1:129;11431;11424:24;11420:28;;11220:239;;9189:1112;9397:31;;;;;;;;;;;;;;;;;;9438;;;;;;;;;;;;;;;;9375:4;;;;9397:31;9480:24;;:::i;:::-;9520:9;9515:302;9539:1;9535;:5;9515:302;;;9561:9;9573:5;:1;9577;9573:5;:::i;:::-;9561:17;;9607:2;9610:1;9607:5;;;;;;;:::i;:::-;;;;;:7;9592:5;9598;:1;9607:7;9598:5;:::i;:::-;9592:12;;;;;;;:::i;:::-;;;;:22;9643:2;9646:1;9643:5;;;;;;;:::i;:::-;;;;;:7;;;9628:5;9634:1;9638;9634:5;;;;:::i;:::-;9628:12;;;;;;;:::i;:::-;;;;:22;9679:2;9682:1;9679:5;;;;;;;:::i;:::-;;;;;:7;:10;9664:5;9670;:1;9674;9670:5;:::i;:::-;9664:12;;;;;;;:::i;:::-;;;;:25;9718:2;9721:1;9718:5;;;;;;;:::i;:::-;;;;;:7;9726:1;9718:10;;;;9703:5;9709;:1;9713;9709:5;:::i;:::-;9703:12;;;;;;;:::i;:::-;;;;:25;9757:2;9760:1;9757:5;;;;;;;:::i;:::-;;;;;:7;;;9765:1;9757:10;;;;;;;:::i;:::-;;;;;9742:5;9748;:1;9752;9748:5;:::i;:::-;9742:12;;;;;;;:::i;:::-;;;;:25;9796:2;9799:1;9796:5;;;;;;;:::i;:::-;;;;;:7;;;9804:1;9796:10;;;;;;;:::i;:::-;;;;;9781:5;9787;:1;9791;9787:5;:::i;:::-;9781:12;;;;;;;:::i;:::-;;;;:25;-1:-1:-1;9542:3:129;;;;:::i;:::-;;;;9515:302;;;;9827:21;;:::i;:::-;9858:12;10032:4;10027:3;10012:13;10005:5;10002:1;9990:10;9979:58;10282:6;;9968:69;;10282:11;;;;-1:-1:-1;10265:29:129;;-1:-1:-1;;;;;;;;;;9189:1112:129:o;5465:1257:130:-;5532:12;5650:15;5728:23;5764:20;5777:6;5764:12;:20::i;:::-;5754:31;;-1:-1:-1;;;;;5754:31:130;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5754:31:130;;5728:57;;5841:18;6093:9;6088:601;6122:10;:17;6109:10;:30;6108:45;;;;;6149:3;6145:1;:7;6108:45;6088:601;;;6252:1;:6;;;-1:-1:-1;6339:16:130;;;:21;6335:344;;6524:1;6511:16;;6486:10;6497;6486:22;;;;;;;;:::i;:::-;;;;:41;-1:-1:-1;;;;;6486:41:130;;;;;;;;;6650:12;;;;;6335:344;6155:3;;;:::i;:::-;;;6088:601;;1599:130:41;1513:6;;-1:-1:-1;;;;;1513:6:41;929:10:50;1662:23:41;1654:68;;;;-1:-1:-1;;;1654:68:41;;44541:2:176;1654:68:41;;;44523:21:176;;;44560:18;;;44553:30;44619:34;44599:18;;;44592:62;44671:18;;1654:68:41;44339:356:176;5740:200:114;5847:16;;5823:62;;;-1:-1:-1;;;;;5847:16:114;;;40332:34:176;;40402:15;;;40397:2;40382:18;;40375:43;5823:62:114;;40267:18:176;5823:62:114;;;;;;;5895:16;:38;;-1:-1:-1;;;;;;5895:38:114;-1:-1:-1;;;;;5895:38:114;;;;;;;;;;5740:200::o;15634:148:108:-;15699:20;:28;;-1:-1:-1;;15699:28:108;;;;;;;;;;15742:33;;3560:41:176;;;15742:33:108;;3548:2:176;3533:18;15742:33:108;;;;;;;15634:148;:::o;2311:238:114:-;4910:13:45;;;;;;;4902:69;;;;-1:-1:-1;;;4902:69:45;;44902:2:176;4902:69:45;;;44884:21:176;44941:2;44921:18;;;44914:30;44980:34;44960:18;;;44953:62;-1:-1:-1;;;45031:18:176;;;45024:41;45082:19;;4902:69:45;44700:407:176;4902:69:45;2461:32:114::1;2480:12;2461:18;:32::i;:::-;2503:39;2524:17;2503:20;:39::i;:::-;2311:238:::0;;:::o;3308:360:130:-;3419:7;3438:14;3455:44;3481:17;3455:25;:44::i;:::-;3438:61;;3541:6;3524:13;3519:18;;:1;:18;;3518:29;3510:127;;;;-1:-1:-1;;;3510:127:130;;45314:2:176;3510:127:130;;;45296:21:176;45353:2;45333:18;;;45326:30;45392:34;45372:18;;;45365:62;45463:33;45443:18;;;45436:61;45514:19;;3510:127:130;45112:427:176;3510:127:130;3655:6;-1:-1:-1;3308:360:130;;;;;:::o;6797:406::-;6853:6;;6897:209;6904:5;;6897:209;;6931:5;6935:1;6931;:5;:::i;:::-;6925:12;;;;7020:7;;;;:::i;:::-;;;;6897:209;;5698:1197:129;-1:-1:-1;;;;;;;;;;;;;;;;;5824:4:129;5820:1;:8;;;5812:37;;;;-1:-1:-1;;;5812:37:129;;45948:2:176;5812:37:129;;;45930:21:176;45987:2;45967:18;;;45960:30;-1:-1:-1;;;46006:18:176;;;45999:46;46062:18;;5812:37:129;45746:340:176;5812:37:129;5893:1;:6;;5898:1;5893:6;5890:44;;;-1:-1:-1;5922:1:129;5915:8;;5890:44;6016:19;;;;;;;;;5989:24;6016:19;;;;;;;;;6145:1;;6208;;6337:481;6348:1;6343:6;;:1;:6;;;6337:481;;6493:1;6483:6;;;;;;;6482:12;;:17;6478:84;;;6529:14;6534:3;6539;6529:4;:14::i;:::-;6523:20;;6478:84;6644:14;6649:3;6654;6644:4;:14::i;:::-;6638:20;-1:-1:-1;6765:7:129;6771:1;6765:7;;;;;6790:3;6337:481;;;-1:-1:-1;6885:3:129;;5698:1197;-1:-1:-1;;;;;5698:1197:129:o;4461:295::-;-1:-1:-1;;;;;;;;;;;;;;;;;4600:3:129;;:8;:20;;;;-1:-1:-1;4612:3:129;;;;:8;4600:20;4596:154;;;-1:-1:-1;;4643:13:129;;;;;;;;;-1:-1:-1;4643:13:129;;;;;;;;4461:295::o;4596:154::-;4694:45;;;;;;;;4702:1;:3;;;4694:45;;;;-1:-1:-1;;;;;;;;;;;4721:1:129;:3;;;:16;;;;:::i;:::-;4707:31;;-1:-1:-1;;;;;;;;;;;4707:31:129;:::i;:::-;4694:45;;4687:52;4461:295;-1:-1:-1;;4461:295:129:o;4596:154::-;4461:295;;;:::o;2673:187:41:-;2765:6;;;-1:-1:-1;;;;;2781:17:41;;;-1:-1:-1;;;;;;2781:17:41;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;1997:1172:27:-;2136:7;2191:2;2176:5;:12;:17;;;;:::i;:::-;:22;2155:144;;;;-1:-1:-1;;;2155:144:27;;46293:2:176;2155:144:27;;;46275:21:176;46332:2;46312:18;;;46305:30;46371:34;46351:18;;;46344:62;46442:34;46422:18;;;46415:62;-1:-1:-1;;;46493:19:176;;;46486:42;46545:19;;2155:144:27;46091:479:176;2155:144:27;2332:4;2363:2;2346:788;2372:5;:12;2367:1;:17;2346:788;;2413:9;2421:1;2413:5;:9;:::i;:::-;2409:715;;2572:12;2566:4;2559:26;2636:1;2629:5;2625:13;2619:20;2613:4;2606:34;2693:4;2687;2677:21;2661:37;;2739:1;2732:5;2728:13;2719:22;;2409:715;;;2940:1;2933:5;2929:13;2923:20;2917:4;2910:34;2978:12;2972:4;2965:26;3044:4;3038;3028:21;3012:37;;3090:1;3083:5;3079:13;3070:22;;2409:715;2386:7;2391:2;2386:7;;:::i;:::-;;;2346:788;;11616:433:129;11670:7;;;-1:-1:-1;;;;;;;;;;;11801:1:129;-1:-1:-1;;;;;;;;;;;11785:1:129;-1:-1:-1;;;;;;;;;;;11769:1:129;11766;11759:24;11752:47;11745:70;11730:85;;11912:9;11924:91;11931:4;11937:65;-1:-1:-1;;;;;;;;;;;11924:6:129;:91::i;:::-;12034:4;;11912:103;;-1:-1:-1;11616:433:129;;-1:-1:-1;;;11616:433:129:o;1188:1693:130:-;1278:7;571:3;1409:17;:24;:49;;1401:142;;;;-1:-1:-1;;;1401:142:130;;46777:2:176;1401:142:130;;;46759:21:176;46816:2;46796:18;;;46789:30;;;46855:34;46835:18;;;46828:62;46926:34;46906:18;;;46899:62;-1:-1:-1;;;46977:19:176;;;46970:35;47022:19;;1401:142:130;46575:472:176;1401:142:130;1619:24;;1615:77;;-1:-1:-1;1679:1:130;;1188:1693;-1:-1:-1;1188:1693:130:o;1615:77::-;1770:14;1873:15;2180:17;2198:1;2180:20;;;;;;;;:::i;:::-;;;;;2169:1;2180:20;;;;;2169:32;;;;-1:-1:-1;2284:568:130;2308:17;:24;2304:1;:28;2284:568;;;2480:17;2498:1;2480:20;;;;;;;;:::i;:::-;;;;;2469:1;2480:20;;;;;2469:32;;-1:-1:-1;2665:16:130;;;2657:100;;;;-1:-1:-1;;;2657:100:130;;47254:2:176;2657:100:130;;;47236:21:176;47293:2;47273:18;;;47266:30;47332:34;47312:18;;;47305:62;47403:34;47383:18;;;47376:62;-1:-1:-1;;;47454:19:176;;;47447:38;47502:19;;2657:100:130;47052:475:176;2657:100:130;2824:16;;;;2334:3;;;:::i;:::-;;;2284:568;;;-1:-1:-1;2868:6:130;;1188:1693;-1:-1:-1;;;1188:1693:130:o;12055:874:129:-;12146:14;12172:12;12194:24;;:::i;:::-;12228:20;;:::i;:::-;12269:4;12258:15;;;12341:8;;;:15;;;12425:8;;;:15;;;12509:8;;;:16;;;12535:8;;;:20;;;12565:8;;;:19;;;12673:6;12667:4;12258:15;12571:1;12650:4;12643:5;12639:16;12628:58;12617:69;-1:-1:-1;12617:69:129;12783:48;;;;12756:75;12858:7;12850:46;;;;-1:-1:-1;;;12850:46:129;;47734:2:176;12850:46:129;;;47716:21:176;47773:2;47753:18;;;47746:30;47812:28;47792:18;;;47785:56;47858:18;;12850:46:129;47532:350:176;12850:46:129;-1:-1:-1;12913:9:129;;;-1:-1:-1;;;;;12055:874:129:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:127:176:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:128;186:3;217:1;213:6;210:1;207:13;204:39;;;223:18;;:::i;:::-;-1:-1:-1;259:9:176;;146:128::o;461:127::-;522:10;517:3;513:20;510:1;503:31;553:4;550:1;543:15;577:4;574:1;567:15;593:257;665:4;659:11;;;697:17;;-1:-1:-1;;;;;729:34:176;;765:22;;;726:62;723:88;;;791:18;;:::i;:::-;827:4;820:24;593:257;:::o;1111:255::-;1183:2;1177:9;1225:6;1213:19;;-1:-1:-1;;;;;1247:34:176;;1283:22;;;1244:62;1241:88;;;1309:18;;:::i;1371:275::-;1442:2;1436:9;1507:2;1488:13;;-1:-1:-1;;1484:27:176;1472:40;;-1:-1:-1;;;;;1527:34:176;;1563:22;;;1524:62;1521:88;;;1589:18;;:::i;:::-;1625:2;1618:22;1371:275;;-1:-1:-1;1371:275:176:o;1651:406::-;1715:5;-1:-1:-1;;;;;1741:6:176;1738:30;1735:56;;;1771:18;;:::i;:::-;1809:57;1854:2;1833:15;;-1:-1:-1;;1829:29:176;1860:4;1825:40;1809:57;:::i;:::-;1800:66;;1889:6;1882:5;1875:21;1929:3;1920:6;1915:3;1911:16;1908:25;1905:45;;;1946:1;1943;1936:12;1905:45;1995:6;1990:3;1983:4;1976:5;1972:16;1959:43;2049:1;2042:4;2033:6;2026:5;2022:18;2018:29;2011:40;1651:406;;;;;:::o;2062:220::-;2104:5;2157:3;2150:4;2142:6;2138:17;2134:27;2124:55;;2175:1;2172;2165:12;2124:55;2197:79;2272:3;2263:6;2250:20;2243:4;2235:6;2231:17;2197:79;:::i;:::-;2188:88;2062:220;-1:-1:-1;;;2062:220:176:o;2287:131::-;-1:-1:-1;;;;;2362:31:176;;2352:42;;2342:70;;2408:1;2405;2398:12;2423:992;2554:6;2562;2570;2578;2586;2594;2602;2610;2663:3;2651:9;2642:7;2638:23;2634:33;2631:53;;;2680:1;2677;2670:12;2631:53;2703:23;;;-1:-1:-1;2773:2:176;2758:18;;2745:32;;-1:-1:-1;2824:2:176;2809:18;;2796:32;;-1:-1:-1;2878:2:176;2863:18;;2850:32;-1:-1:-1;;;;;;2911:43:176;;2901:54;;2891:82;;2969:1;2966;2959:12;2891:82;2992:5;-1:-1:-1;3044:3:176;3029:19;;3016:33;;-1:-1:-1;3100:3:176;3085:19;;3072:33;-1:-1:-1;;;;;3117:30:176;;3114:50;;;3160:1;3157;3150:12;3114:50;3183:49;3224:7;3215:6;3204:9;3200:22;3183:49;:::i;:::-;3173:59;;;3279:3;3268:9;3264:19;3251:33;3241:43;;3336:3;3325:9;3321:19;3308:33;3350;3375:7;3350:33;:::i;:::-;3402:7;3392:17;;;2423:992;;;;;;;;;;;:::o;3612:282::-;3666:5;3714:4;3702:9;3697:3;3693:19;3689:30;3686:50;;;3732:1;3729;3722:12;3686:50;3754:22;;:::i;:::-;3745:31;;3812:9;3799:23;3792:5;3785:38;3883:2;3872:9;3868:18;3855:32;3850:2;3843:5;3839:14;3832:56;3612:282;;;;:::o;3899:484::-;3949:5;4002:3;3995:4;3987:6;3983:17;3979:27;3969:55;;4020:1;4017;4010:12;3969:55;4044:22;;:::i;:::-;4088:3;4126:2;4118:6;4114:15;4152:3;4144:6;4141:15;4138:35;;;4169:1;4166;4159:12;4138:35;4193:6;4208:146;4224:6;4219:3;4216:15;4208:146;;;4292:17;;4280:30;;4339:4;4330:14;;;;4241;4208:146;;;-1:-1:-1;4372:5:176;;3899:484;-1:-1:-1;;;;;3899:484:176:o;4388:320::-;4442:5;4490:4;4478:9;4473:3;4469:19;4465:30;4462:50;;;4508:1;4505;4498:12;4462:50;4530:22;;:::i;:::-;4521:31;;4575:40;4611:3;4600:9;4575:40;:::i;:::-;4568:5;4561:55;4650:51;4697:3;4690:4;4679:9;4675:20;4650:51;:::i;:::-;4643:4;4636:5;4632:16;4625:77;4388:320;;;;:::o;4713:530::-;4877:6;4885;4893;4901;4954:3;4942:9;4933:7;4929:23;4925:33;4922:53;;;4971:1;4968;4961:12;4922:53;5007:9;4994:23;4984:33;;5036:54;5082:7;5077:2;5066:9;5062:18;5036:54;:::i;:::-;5026:64;;5109:54;5155:7;5150:2;5139:9;5135:18;5109:54;:::i;:::-;5099:64;;5182:55;5229:7;5223:3;5212:9;5208:19;5182:55;:::i;:::-;5172:65;;4713:530;;;;;;;:::o;5521:182::-;5580:4;-1:-1:-1;;;;;5605:6:176;5602:30;5599:56;;;5635:18;;:::i;:::-;-1:-1:-1;5680:1:176;5676:14;5692:4;5672:25;;5521:182::o;5708:163::-;5775:20;;5835:10;5824:22;;5814:33;;5804:61;;5861:1;5858;5851:12;5876:665;5929:5;5982:3;5975:4;5967:6;5963:17;5959:27;5949:55;;6000:1;5997;5990:12;5949:55;6036:6;6023:20;6062:4;6086:59;6102:42;6141:2;6102:42;:::i;:::-;6086:59;:::i;:::-;6179:15;;;6265:1;6261:10;;;;6249:23;;6245:32;;;6210:12;;;;6289:15;;;6286:35;;;6317:1;6314;6307:12;6286:35;6353:2;6345:6;6341:15;6365:147;6381:6;6376:3;6373:15;6365:147;;;6447:22;6465:3;6447:22;:::i;:::-;6435:35;;6490:12;;;;6398;;6365:147;;;-1:-1:-1;6530:5:176;5876:665;-1:-1:-1;;;;;;5876:665:176:o;6546:688::-;6607:5;6660:3;6653:4;6645:6;6641:17;6637:27;6627:55;;6678:1;6675;6668:12;6627:55;6714:6;6701:20;6740:4;6764:59;6780:42;6819:2;6780:42;:::i;6764:59::-;6857:15;;;6943:1;6939:10;;;;6927:23;;6923:32;;;6888:12;;;;6967:15;;;6964:35;;;6995:1;6992;6985:12;6964:35;7031:2;7023:6;7019:15;7043:162;7059:6;7054:3;7051:15;7043:162;;;7127:35;7158:3;7153;7127:35;:::i;:::-;7115:48;;7183:12;;;;7085:4;7076:14;7043:162;;7239:907;7302:5;7355:3;7348:4;7340:6;7336:17;7332:27;7322:55;;7373:1;7370;7363:12;7322:55;7409:6;7396:20;7435:4;7459:59;7475:42;7514:2;7475:42;:::i;7459:59::-;7552:15;;;7638:1;7634:10;;;;7622:23;;7618:32;;;7583:12;;;;7662:15;;;7659:35;;;7690:1;7687;7680:12;7659:35;7726:2;7718:6;7714:15;7738:379;7754:6;7749:3;7746:15;7738:379;;;7840:3;7827:17;-1:-1:-1;;;;;7863:11:176;7860:35;7857:125;;;7936:1;7965:2;7961;7954:14;7857:125;8007:67;8070:3;8065:2;8051:11;8043:6;8039:24;8035:33;8007:67;:::i;:::-;7995:80;;-1:-1:-1;8095:12:176;;;;7771;;7738:379;;8151:1566;8225:5;8273:6;8261:9;8256:3;8252:19;8248:32;8245:52;;;8293:1;8290;8283:12;8245:52;8315:22;;:::i;:::-;8306:31;;8373:9;8360:23;-1:-1:-1;;;;;8443:2:176;8435:6;8432:14;8429:34;;;8459:1;8456;8449:12;8429:34;8486:56;8538:3;8529:6;8518:9;8514:22;8486:56;:::i;:::-;8479:5;8472:71;8596:2;8585:9;8581:18;8568:32;8552:48;;8625:2;8615:8;8612:16;8609:36;;;8641:1;8638;8631:12;8609:36;8677:66;8739:3;8728:8;8717:9;8713:24;8677:66;:::i;:::-;8672:2;8665:5;8661:14;8654:90;8797:2;8786:9;8782:18;8769:32;8753:48;;8826:2;8816:8;8813:16;8810:36;;;8842:1;8839;8832:12;8810:36;8878:66;8940:3;8929:8;8918:9;8914:24;8878:66;:::i;:::-;8873:2;8866:5;8862:14;8855:90;8977:50;9023:3;9018:2;9007:9;9003:18;8977:50;:::i;:::-;8972:2;8965:5;8961:14;8954:74;9062:51;9109:3;9103;9092:9;9088:19;9062:51;:::i;:::-;9055:4;9048:5;9044:16;9037:77;9167:3;9156:9;9152:19;9139:33;9123:49;;9197:2;9187:8;9184:16;9181:36;;;9213:1;9210;9203:12;9181:36;9251:58;9305:3;9294:8;9283:9;9279:24;9251:58;:::i;:::-;9244:4;9237:5;9233:16;9226:84;9363:3;9352:9;9348:19;9335:33;9319:49;;9393:2;9383:8;9380:16;9377:36;;;9409:1;9406;9399:12;9377:36;9447:58;9501:3;9490:8;9479:9;9475:24;9447:58;:::i;:::-;9440:4;9433:5;9429:16;9422:84;9559:3;9548:9;9544:19;9531:33;9515:49;;9589:2;9579:8;9576:16;9573:36;;;9605:1;9602;9595:12;9573:36;;9642:68;9706:3;9695:8;9684:9;9680:24;9642:68;:::i;:::-;9636:3;9629:5;9625:15;9618:93;;8151:1566;;;;:::o;9722:454::-;9836:6;9844;9897:2;9885:9;9876:7;9872:23;9868:32;9865:52;;;9913:1;9910;9903:12;9865:52;9949:9;9936:23;9926:33;;10010:2;9999:9;9995:18;9982:32;-1:-1:-1;;;;;10029:6:176;10026:30;10023:50;;;10069:1;10066;10059:12;10023:50;10092:78;10162:7;10153:6;10142:9;10138:22;10092:78;:::i;:::-;10082:88;;;9722:454;;;;;:::o;10181:247::-;10240:6;10293:2;10281:9;10272:7;10268:23;10264:32;10261:52;;;10309:1;10306;10299:12;10261:52;10348:9;10335:23;10367:31;10392:5;10367:31;:::i;10433:658::-;10604:2;10656:21;;;10726:13;;10629:18;;;10748:22;;;10575:4;;10604:2;10827:15;;;;10801:2;10786:18;;;10575:4;10870:195;10884:6;10881:1;10878:13;10870:195;;;10949:13;;-1:-1:-1;;;;;10945:39:176;10933:52;;11040:15;;;;11005:12;;;;10981:1;10899:9;10870:195;;;-1:-1:-1;11082:3:176;;10433:658;-1:-1:-1;;;;;;10433:658:176:o;11096:118::-;11182:5;11175:13;11168:21;11161:5;11158:32;11148:60;;11204:1;11201;11194:12;11219:241;11275:6;11328:2;11316:9;11307:7;11303:23;11299:32;11296:52;;;11344:1;11341;11334:12;11296:52;11383:9;11370:23;11402:28;11424:5;11402:28;:::i;11465:388::-;11533:6;11541;11594:2;11582:9;11573:7;11569:23;11565:32;11562:52;;;11610:1;11607;11600:12;11562:52;11649:9;11636:23;11668:31;11693:5;11668:31;:::i;:::-;11718:5;-1:-1:-1;11775:2:176;11760:18;;11747:32;11788:33;11747:32;11788:33;:::i;:::-;11840:7;11830:17;;;11465:388;;;;;:::o;11858:526::-;11980:6;11988;11996;12049:2;12037:9;12028:7;12024:23;12020:32;12017:52;;;12065:1;12062;12055:12;12017:52;12101:9;12088:23;12078:33;;12130:37;12163:2;12152:9;12148:18;12130:37;:::i;:::-;12120:47;;12218:2;12207:9;12203:18;12190:32;-1:-1:-1;;;;;12237:6:176;12234:30;12231:50;;;12277:1;12274;12267:12;12231:50;12300:78;12370:7;12361:6;12350:9;12346:22;12300:78;:::i;:::-;12290:88;;;11858:526;;;;;:::o;12389:467::-;12441:3;12479:5;12473:12;12506:6;12501:3;12494:19;12532:4;12561:2;12556:3;12552:12;12545:19;;12598:2;12591:5;12587:14;12619:1;12629:202;12643:6;12640:1;12637:13;12629:202;;;12708:13;;-1:-1:-1;;;;;12704:46:176;12692:59;;12771:12;;;;12806:15;;;;12665:1;12658:9;12629:202;;;-1:-1:-1;12847:3:176;;12389:467;-1:-1:-1;;;;;12389:467:176:o;12861:645::-;13090:2;13079:9;13072:21;13053:4;13128:6;13122:13;13171:2;13166;13155:9;13151:18;13144:30;13197:62;13254:3;13243:9;13239:19;13225:12;13197:62;:::i;:::-;13183:76;;13308:4;13300:6;13296:17;13290:24;13382:2;13378:7;13366:9;13358:6;13354:22;13350:36;13345:2;13334:9;13330:18;13323:64;13404:51;13448:6;13432:14;13404:51;:::i;:::-;13396:59;;;;13493:6;13486:4;13475:9;13471:20;13464:36;12861:645;;;;;:::o;13511:348::-;13563:8;13573:6;13627:3;13620:4;13612:6;13608:17;13604:27;13594:55;;13645:1;13642;13635:12;13594:55;-1:-1:-1;13668:20:176;;-1:-1:-1;;;;;13700:30:176;;13697:50;;;13743:1;13740;13733:12;13697:50;13780:4;13772:6;13768:17;13756:29;;13832:3;13825:4;13816:6;13808;13804:19;13800:30;13797:39;13794:59;;;13849:1;13846;13839:12;13794:59;13511:348;;;;;:::o;13864:479::-;13944:6;13952;13960;14013:2;14001:9;13992:7;13988:23;13984:32;13981:52;;;14029:1;14026;14019:12;13981:52;14065:9;14052:23;14042:33;;14126:2;14115:9;14111:18;14098:32;-1:-1:-1;;;;;14145:6:176;14142:30;14139:50;;;14185:1;14182;14175:12;14139:50;14224:59;14275:7;14266:6;14255:9;14251:22;14224:59;:::i;:::-;13864:479;;14302:8;;-1:-1:-1;14198:85:176;;-1:-1:-1;;;;13864:479:176:o;15385:478::-;15464:6;15472;15480;15533:2;15521:9;15512:7;15508:23;15504:32;15501:52;;;15549:1;15546;15539:12;15501:52;15589:9;15576:23;-1:-1:-1;;;;;15614:6:176;15611:30;15608:50;;;15654:1;15651;15644:12;15608:50;15693:59;15744:7;15735:6;15724:9;15720:22;15693:59;:::i;:::-;15771:8;;15667:85;;-1:-1:-1;15853:2:176;15838:18;;;;15825:32;;15385:478;-1:-1:-1;;;;15385:478:176:o;15868:1026::-;15980:6;15988;16041:2;16029:9;16020:7;16016:23;16012:32;16009:52;;;16057:1;16054;16047:12;16009:52;16096:9;16083:23;16115:31;16140:5;16115:31;:::i;:::-;16165:5;-1:-1:-1;16221:2:176;16206:18;;16193:32;-1:-1:-1;;;;;16274:14:176;;;16271:34;;;16301:1;16298;16291:12;16271:34;16324:22;;;;16380:4;16362:16;;;16358:27;16355:47;;;16398:1;16395;16388:12;16355:47;16431:2;16425:9;16473:4;16465:6;16461:17;16528:6;16516:10;16513:22;16508:2;16496:10;16493:18;16490:46;16487:72;;;16539:18;;:::i;:::-;16575:2;16568:22;16615:16;;16643;;;16640:36;;;16672:1;16669;16662:12;16640:36;16700:44;16736:7;16725:8;16721:2;16717:17;16700:44;:::i;:::-;16692:6;16685:60;;16799:2;16795;16791:11;16778:25;16773:2;16765:6;16761:15;16754:50;16858:2;16854;16850:11;16837:25;16832:2;16824:6;16820:15;16813:50;16882:6;16872:16;;;;;15868:1026;;;;;:::o;16899:450::-;16968:6;17021:2;17009:9;17000:7;16996:23;16992:32;16989:52;;;17037:1;17034;17027:12;16989:52;17077:9;17064:23;-1:-1:-1;;;;;17102:6:176;17099:30;17096:50;;;17142:1;17139;17132:12;17096:50;17165:22;;17218:4;17210:13;;17206:27;-1:-1:-1;17196:55:176;;17247:1;17244;17237:12;17196:55;17270:73;17335:7;17330:2;17317:16;17312:2;17308;17304:11;17270:73;:::i;:::-;17260:83;16899:450;-1:-1:-1;;;;16899:450:176:o;17354:589::-;17477:6;17485;17493;17546:2;17534:9;17525:7;17521:23;17517:32;17514:52;;;17562:1;17559;17552:12;17514:52;17598:9;17585:23;17575:33;;17658:2;17647:9;17643:18;17630:32;17671:31;17696:5;17671:31;:::i;17948:180::-;18007:6;18060:2;18048:9;18039:7;18035:23;18031:32;18028:52;;;18076:1;18073;18066:12;18028:52;-1:-1:-1;18099:23:176;;17948:180;-1:-1:-1;17948:180:176:o;18745:652::-;18868:6;18876;18929:2;18917:9;18908:7;18904:23;18900:32;18897:52;;;18945:1;18942;18935:12;18897:52;18985:9;18972:23;-1:-1:-1;;;;;19055:2:176;19047:6;19044:14;19041:34;;;19071:1;19068;19061:12;19041:34;19109:6;19098:9;19094:22;19084:32;;19154:7;19147:4;19143:2;19139:13;19135:27;19125:55;;19176:1;19173;19166:12;19125:55;19216:2;19203:16;19242:2;19234:6;19231:14;19228:34;;;19258:1;19255;19248:12;19228:34;19311:7;19306:2;19296:6;19293:1;19289:14;19285:2;19281:23;19277:32;19274:45;19271:65;;;19332:1;19329;19322:12;19271:65;19363:2;19355:11;;;;;19385:6;;-1:-1:-1;18745:652:176;;-1:-1:-1;;;;18745:652:176:o;19402:294::-;19559:19;;;19616:2;19612:15;-1:-1:-1;;;;;;19608:53:176;19603:2;19594:12;;19587:75;19687:2;19678:12;;19402:294::o;20122:127::-;20183:10;20178:3;20174:20;20171:1;20164:31;20214:4;20211:1;20204:15;20238:4;20235:1;20228:15;21099:209;21131:1;21157;21147:132;;21201:10;21196:3;21192:20;21189:1;21182:31;21236:4;21233:1;21226:15;21264:4;21261:1;21254:15;21147:132;-1:-1:-1;21293:9:176;;21099:209::o;22365:278::-;22404:7;-1:-1:-1;;;;;22489:2:176;22486:1;22482:10;22519:2;22516:1;22512:10;22575:3;22571:2;22567:12;22562:3;22559:21;22552:3;22545:11;22538:19;22534:47;22531:73;;;22584:18;;:::i;:::-;22624:13;;22365:278;-1:-1:-1;;;;22365:278:176:o;22648:168::-;22688:7;22754:1;22750;22746:6;22742:14;22739:1;22736:21;22731:1;22724:9;22717:17;22713:45;22710:71;;;22761:18;;:::i;:::-;-1:-1:-1;22801:9:176;;22648:168::o;22821:428::-;23023:2;23005:21;;;23062:2;23042:18;;;23035:30;;;23101:34;23081:18;;;23074:62;23172:34;23167:2;23152:18;;23145:62;23239:3;23224:19;;22821:428::o;23254:125::-;23294:4;23322:1;23319;23316:8;23313:34;;;23327:18;;:::i;:::-;-1:-1:-1;23364:9:176;;23254:125::o;23384:424::-;23586:2;23568:21;;;23625:2;23605:18;;;23598:30;23664:34;23659:2;23644:18;;23637:62;23735:30;23730:2;23715:18;;23708:58;23798:3;23783:19;;23384:424::o;23813:184::-;23883:6;23936:2;23924:9;23915:7;23911:23;23907:32;23904:52;;;23952:1;23949;23942:12;23904:52;-1:-1:-1;23975:16:176;;23813:184;-1:-1:-1;23813:184:176:o;24184:290::-;24254:6;24307:2;24295:9;24286:7;24282:23;24278:32;24275:52;;;24323:1;24320;24313:12;24275:52;24349:16;;-1:-1:-1;;;;;24394:31:176;;24384:42;;24374:70;;24440:1;24437;24430:12;24479:273;24547:6;24600:2;24588:9;24579:7;24575:23;24571:32;24568:52;;;24616:1;24613;24606:12;24568:52;24648:9;24642:16;24698:4;24691:5;24687:16;24680:5;24677:27;24667:55;;24718:1;24715;24708:12;25135:135;25174:3;-1:-1:-1;;25195:17:176;;25192:43;;;25215:18;;:::i;:::-;-1:-1:-1;25262:1:176;25251:13;;25135:135::o;25535:137::-;-1:-1:-1;;;;;25613:5:176;25609:38;25602:5;25599:49;25589:77;;25662:1;25659;25652:12;25677:493;25780:6;25833:2;25821:9;25812:7;25808:23;25804:32;25801:52;;;25849:1;25846;25839:12;25801:52;25875:22;;:::i;:::-;25927:9;25921:16;25946:33;25971:7;25946:33;:::i;:::-;25988:22;;26055:2;26040:18;;26034:25;26068:32;26034:25;26068:32;:::i;:::-;26127:2;26116:14;;26109:31;26120:5;25677:493;-1:-1:-1;;;25677:493:176:o;26175:251::-;26245:6;26298:2;26286:9;26277:7;26273:23;26269:32;26266:52;;;26314:1;26311;26304:12;26266:52;26346:9;26340:16;26365:31;26390:5;26365:31;:::i;30654:294::-;30724:6;30777:2;30765:9;30756:7;30752:23;30748:32;30745:52;;;30793:1;30790;30783:12;30745:52;30819:16;;-1:-1:-1;;30864:35:176;;30854:46;;30844:74;;30914:1;30911;30904:12;31499:249;31568:6;31621:2;31609:9;31600:7;31596:23;31592:32;31589:52;;;31637:1;31634;31627:12;31589:52;31669:9;31663:16;31688:30;31712:5;31688:30;:::i;32200:237::-;32239:4;-1:-1:-1;;;;;32344:10:176;;;;32314;;32366:12;;;32363:38;;;32381:18;;:::i;:::-;32418:13;;32200:237;-1:-1:-1;;;32200:237:176:o;33344:644::-;33592:10;33587:3;33583:20;33574:6;33569:3;33565:16;33561:43;33556:3;33549:56;33531:3;33636:1;33631:3;33627:11;33667:6;33661:13;33716:4;33755:2;33747:6;33743:15;33776:1;33786:175;33800:6;33797:1;33794:13;33786:175;;;33863:13;;33849:28;;33899:14;;;;33936:15;;;;33822:1;33815:9;33786:175;;;-1:-1:-1;33977:5:176;;33344:644;-1:-1:-1;;;;;;;33344:644:176:o;34702:267::-;34791:6;34786:3;34779:19;34843:6;34836:5;34829:4;34824:3;34820:14;34807:43;-1:-1:-1;34895:1:176;34870:16;;;34888:4;34866:27;;;34859:38;;;;34951:2;34930:15;;;-1:-1:-1;;34926:29:176;34917:39;;;34913:50;;34702:267::o;34974:333::-;35171:10;35163:6;35159:23;35148:9;35141:42;35219:2;35214;35203:9;35199:18;35192:30;35122:4;35239:62;35297:2;35286:9;35282:18;35274:6;35266;35239:62;:::i;:::-;35231:70;34974:333;-1:-1:-1;;;;;34974:333:176:o;35312:430::-;-1:-1:-1;;;;;35525:32:176;;35507:51;;35606:10;35594:23;;35589:2;35574:18;;35567:51;35654:2;35649;35634:18;;35627:30;;;-1:-1:-1;;35674:62:176;;35717:18;;35709:6;35701;35674:62;:::i;:::-;35666:70;35312:430;-1:-1:-1;;;;;;35312:430:176:o;35747:271::-;35930:6;35922;35917:3;35904:33;35886:3;35956:16;;35981:13;;;35956:16;35747:271;-1:-1:-1;35747:271:176:o;36023:486::-;36225:2;36207:21;;;36264:2;36244:18;;;36237:30;36303:34;36298:2;36283:18;;36276:62;36374:34;36369:2;36354:18;;36347:62;-1:-1:-1;;;36440:3:176;36425:19;;36418:49;36499:3;36484:19;;36023:486::o;36514:471::-;36555:3;36593:5;36587:12;36620:6;36615:3;36608:19;36645:1;36655:162;36669:6;36666:1;36663:13;36655:162;;;36731:4;36787:13;;;36783:22;;36777:29;36759:11;;;36755:20;;36748:59;36684:12;36655:162;;;36835:6;36832:1;36829:13;36826:87;;;36901:1;36894:4;36885:6;36880:3;36876:16;36872:27;36865:38;36826:87;-1:-1:-1;36967:2:176;36946:15;-1:-1:-1;;36942:29:176;36933:39;;;;36974:4;36929:50;;36514:471;-1:-1:-1;;36514:471:176:o;36990:624::-;37264:1;37260;37255:3;37251:11;37247:19;37239:6;37235:32;37224:9;37217:51;37304:2;37299;37288:9;37284:18;37277:30;37198:4;37342:6;37336:13;37385:4;37380:2;37369:9;37365:18;37358:32;37413:51;37459:3;37448:9;37444:19;37430:12;37413:51;:::i;:::-;37399:65;;37520:2;37512:6;37508:15;37502:22;37495:4;37484:9;37480:20;37473:52;37580:2;37572:6;37568:15;37562:22;37556:3;37545:9;37541:19;37534:51;37602:6;37594:14;;;36990:624;;;;;:::o;37619:219::-;37768:2;37757:9;37750:21;37731:4;37788:44;37828:2;37817:9;37813:18;37805:6;37788:44;:::i;38735:335::-;38838:4;38896:11;38883:25;38990:3;38986:8;38975;38959:14;38955:29;38951:44;38931:18;38927:69;38917:97;;39010:1;39007;39000:12;38917:97;39031:33;;;;;38735:335;-1:-1:-1;;38735:335:176:o;39075:142::-;39151:20;;39180:31;39151:20;39180:31;:::i;39870:245::-;39937:6;39990:2;39978:9;39969:7;39965:23;39961:32;39958:52;;;40006:1;40003;39996:12;39958:52;40038:9;40032:16;40057:28;40079:5;40057:28;:::i;40708:756::-;40838:6;40833:3;40826:19;40808:3;40864:4;40893:2;40888:3;40884:12;40877:19;;40919:5;40942:1;40952:487;40966:6;40963:1;40960:13;40952:487;;;41043:6;41030:20;41063:33;41088:7;41063:33;:::i;:::-;-1:-1:-1;;;;;41121:33:176;41109:46;;41196:15;;;41183:29;41225:32;41183:29;41225:32;:::i;:::-;-1:-1:-1;;;;;41291:40:176;41277:12;;;41270:62;41355:4;41379:12;;;;41414:15;;;;;40988:1;40981:9;40952:487;;41469:2181;41722:2;41774:21;;;41747:18;;;41830:22;;;41693:4;;41871:2;41889:18;;;41953:1;41949:14;;;41934:30;;41930:39;;41992:6;41693:4;42026:1595;42040:6;42037:1;42034:13;42026:1595;;;42105:22;;;-1:-1:-1;;42101:36:176;42089:49;;42177:20;;42252:14;42248:27;;;-1:-1:-1;;42244:42:176;42220:67;;42210:95;;42301:1;42298;42291:12;42210:95;42331:31;;42385:4;42430:19;;42506:14;42502:26;;;-1:-1:-1;;42498:40:176;42472:67;;42462:95;;42553:1;42550;42543:12;42462:95;42585:32;;42644:21;;-1:-1:-1;;;;;42681:30:176;;42678:50;;;42724:1;42721;42714:12;42678:50;42782:6;42779:1;42775:14;42759;42755:35;42748:5;42744:47;42741:67;;;42804:1;42801;42794:12;42741:67;42836:2;42828:6;42821:18;42866:110;42972:2;42964:6;42960:15;42952:6;42947:2;42938:7;42934:16;42866:110;:::i;:::-;42852:124;;;;43009:42;43047:2;43040:5;43036:14;43009:42;:::i;:::-;-1:-1:-1;;;;;14431:31:176;43114:15;;;14419:44;43180:14;;;43167:28;43150:15;;;43143:53;43219:4;43258:33;43276:14;;;43258:33;:::i;:::-;18209:10;18198:22;43338:15;;;18186:35;43377:4;43416:33;43434:14;;;43416:33;:::i;:::-;18209:10;18198:22;43496:15;;18186:35;;;;-1:-1:-1;43599:12:176;;;;43564:15;;;;42062:1;42055:9;42026:1595;;;-1:-1:-1;43638:6:176;;41469:2181;-1:-1:-1;;;;;;;;41469:2181:176:o;45544:197::-;45582:3;45610:6;45651:2;45644:5;45640:14;45678:2;45669:7;45666:15;45663:41;;;45684:18;;:::i;:::-;45733:1;45720:15;;45544:197;-1:-1:-1;;;45544:197:176:o","linkReferences":{},"immutableReferences":{"20588":[{"start":1104,"length":32},{"start":4345,"length":32},{"start":5784,"length":32},{"start":6207,"length":32},{"start":6800,"length":32}],"20591":[{"start":1001,"length":32},{"start":7644,"length":32},{"start":8140,"length":32}],"20594":[{"start":925,"length":32},{"start":7151,"length":32}],"20597":[{"start":1552,"length":32},{"start":6620,"length":32}],"25427":[{"start":1050,"length":32},{"start":9577,"length":32},{"start":9789,"length":32},{"start":9916,"length":32}],"25430":[{"start":12394,"length":32},{"start":12582,"length":32},{"start":12818,"length":32}],"25433":[{"start":3125,"length":32},{"start":3268,"length":32},{"start":3396,"length":32},{"start":9493,"length":32},{"start":9697,"length":32},{"start":10840,"length":32},{"start":11256,"length":32}],"25436":[{"start":3598,"length":32},{"start":3945,"length":32},{"start":4096,"length":32},{"start":11034,"length":32},{"start":11421,"length":32},{"start":11580,"length":32}]}},"methodIdentifiers":{"avsDirectory()":"6b3aa72e","balanceOf(address)":"70a08231","batchesState(bytes32)":"b099627e","blsApkRegistry()":"5df45946","checkPublicInput(bytes,bytes32)":"95c6d604","checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":"4ae07c37","createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])":"fce36c7d","createNewTask(bytes32,string)":"5c008994","delegation()":"df5cf723","deregisterOperatorFromAVS(address)":"a364f4da","getOperatorRestakedStrategies(address)":"33cfb7b7","getRestakeableStrategies()":"e481af9d","initialize(address,address)":"485cc955","owner()":"8da5cb5b","registerOperatorToAVS(address,(bytes,bytes32,uint256))":"9926ee7d","registryCoordinator()":"6d14a987","renounceOwnership()":"715018a6","respondToTask(bytes32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":"2dd94eba","respondToTaskV2(bytes32,address,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":"ab21739a","rewardsInitiator()":"fc299dee","setRewardsInitiator(address)":"3bc28c8c","setStaleStakesForbidden(bool)":"416c7e5e","stakeRegistry()":"68304835","staleStakesForbidden()":"b98d0908","transferOwnership(address)":"f2fde38b","trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))":"171f1d5b","updateAVSMetadataURI(string)":"a98fb355","verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256,address)":"06045a91"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IAVSDirectory\",\"name\":\"__avsDirectory\",\"type\":\"address\"},{\"internalType\":\"contract IRewardsCoordinator\",\"name\":\"__rewardsCoordinator\",\"type\":\"address\"},{\"internalType\":\"contract IRegistryCoordinator\",\"name\":\"__registryCoordinator\",\"type\":\"address\"},{\"internalType\":\"contract IStakeRegistry\",\"name\":\"__stakeRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"BatchVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"batcher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"name\":\"BatcherBalanceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"taskCreatedBlock\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"batchDataPointer\",\"type\":\"string\"}],\"name\":\"NewBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"taskCreatedBlock\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"batchDataPointer\",\"type\":\"string\"}],\"name\":\"NewBatchV2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prevRewardsInitiator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRewardsInitiator\",\"type\":\"address\"}],\"name\":\"RewardsInitiatorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"StaleStakesForbiddenUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"avsDirectory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"batchesState\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"taskCreatedBlock\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"responded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blsApkRegistry\",\"outputs\":[{\"internalType\":\"contract IBLSApkRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"checkPublicInput\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"referenceBlockNumber\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint32[]\",\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"quorumApks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"},{\"internalType\":\"uint32[]\",\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[][]\",\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\"}],\"internalType\":\"struct IBLSSignatureChecker.NonSignerStakesAndSignature\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"checkSignatures\",\"outputs\":[{\"components\":[{\"internalType\":\"uint96[]\",\"name\":\"signedStakeForQuorum\",\"type\":\"uint96[]\"},{\"internalType\":\"uint96[]\",\"name\":\"totalStakeForQuorum\",\"type\":\"uint96[]\"}],\"internalType\":\"struct IBLSSignatureChecker.QuorumStakeTotals\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"contract IStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"multiplier\",\"type\":\"uint96\"}],\"internalType\":\"struct IRewardsCoordinator.StrategyAndMultiplier[]\",\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"startTimestamp\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"duration\",\"type\":\"uint32\"}],\"internalType\":\"struct IRewardsCoordinator.RewardsSubmission[]\",\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\"}],\"name\":\"createAVSRewardsSubmission\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"batchDataPointer\",\"type\":\"string\"}],\"name\":\"createNewTask\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegation\",\"outputs\":[{\"internalType\":\"contract IDelegationManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"deregisterOperatorFromAVS\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"getOperatorRestakedStrategies\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRestakeableStrategies\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rewardsInitiator\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureUtils.SignatureWithSaltAndExpiry\",\"name\":\"operatorSignature\",\"type\":\"tuple\"}],\"name\":\"registerOperatorToAVS\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registryCoordinator\",\"outputs\":[{\"internalType\":\"contract IRegistryCoordinator\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint32[]\",\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"quorumApks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"},{\"internalType\":\"uint32[]\",\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[][]\",\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\"}],\"internalType\":\"struct IBLSSignatureChecker.NonSignerStakesAndSignature\",\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\"}],\"name\":\"respondToTask\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32[]\",\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"quorumApks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"},{\"internalType\":\"uint32[]\",\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[][]\",\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\"}],\"internalType\":\"struct IBLSSignatureChecker.NonSignerStakesAndSignature\",\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\"}],\"name\":\"respondToTaskV2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardsInitiator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRewardsInitiator\",\"type\":\"address\"}],\"name\":\"setRewardsInitiator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"setStaleStakesForbidden\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeRegistry\",\"outputs\":[{\"internalType\":\"contract IStakeRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staleStakesForbidden\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"apk\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"}],\"name\":\"trySignatureAndApkVerification\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"pairingSuccessful\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"siganatureIsValid\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_metadataURI\",\"type\":\"string\"}],\"name\":\"updateAVSMetadataURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"proofCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubInputCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"provingSystemAuxDataCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes20\",\"name\":\"proofGeneratorAddr\",\"type\":\"bytes20\"},{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"merkleProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"verificationDataBatchIndex\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"verifyBatchInclusion\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))\":{\"details\":\"Before signature verification, the function verifies operator stake information. This includes ensuring that the provided `referenceBlockNumber` is correct, i.e., ensure that the stake returned from the specified block number is recent enough and that the stake is either the most recent update for the total stake (of the operator) or latest before the referenceBlockNumber.NOTE: Be careful to ensure `msgHash` is collision-resistant! This method does not hash `msgHash` in any way, so if an attacker is able to pass in an arbitrary value, they may be able to tamper with signature verification.\",\"params\":{\"msgHash\":\"is the hash being signed\",\"params\":\"is the struct containing information on nonsigners, stakes, quorum apks, and the aggregate signature\",\"referenceBlockNumber\":\"is the block number at which the stake information is being verified\"},\"returns\":{\"_0\":\"quorumStakeTotals is the struct containing the total and signed stake for each quorum\",\"_1\":\"signatoryRecordHash is the hash of the signatory record, which is used for fraud proofs\"}},\"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])\":{\"details\":\"Only callabe by the permissioned rewardsInitiator addressThe duration of the `rewardsSubmission` cannot exceed `MAX_REWARDS_DURATION`The tokens are sent to the `RewardsCoordinator` contractStrategies must be in ascending order of addresses to check for duplicatesThis function will revert if the `rewardsSubmission` is malformed, e.g. if the `strategies` and `weights` arrays are of non-equal lengths\",\"params\":{\"rewardsSubmissions\":\"The rewards submissions being created\"}},\"deregisterOperatorFromAVS(address)\":{\"params\":{\"operator\":\"The address of the operator to deregister.\"}},\"getOperatorRestakedStrategies(address)\":{\"details\":\"This function is intended to be called off-chainNo guarantee is made on whether the operator has shares for a strategy in a quorum or uniqueness of each element in the returned array. The off-chain service should do that validation separately\",\"params\":{\"operator\":\"The address of the operator to get restaked strategies for\"}},\"getRestakeableStrategies()\":{\"details\":\"This function is intended to be called off-chainNo guarantee is made on uniqueness of each element in the returned array. The off-chain service should do that validation separately\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"registerOperatorToAVS(address,(bytes,bytes32,uint256))\":{\"params\":{\"operator\":\"The address of the operator to register.\",\"operatorSignature\":\"The signature, salt, and expiry of the operator's signature.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setRewardsInitiator(address)\":{\"details\":\"only callable by the owner\",\"params\":{\"newRewardsInitiator\":\"The new rewards initiator address\"}},\"setStaleStakesForbidden(bool)\":{\"params\":{\"value\":\"to toggle staleStakesForbidden\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))\":{\"params\":{\"apk\":\"is the claimed G1 public key\",\"apkG2\":\"is provided G2 public key\",\"msgHash\":\"is the hash being signed\",\"sigma\":\"is the G1 point signature\"},\"returns\":{\"pairingSuccessful\":\"is true if the pairing precompile call was successful\",\"siganatureIsValid\":\"is true if the signature is valid\"}},\"updateAVSMetadataURI(string)\":{\"details\":\"only callable by the owner\",\"params\":{\"_metadataURI\":\"is the metadata URI for the AVS\"}}},\"title\":\"Primary entrypoint for procuring services from Aligned.\",\"version\":1},\"userdoc\":{\"events\":{\"StaleStakesForbiddenUpdate(bool)\":{\"notice\":\"Emitted when `staleStakesForbiddenUpdate` is set\"}},\"kind\":\"user\",\"methods\":{\"avsDirectory()\":{\"notice\":\"Returns the EigenLayer AVSDirectory contract.\"},\"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))\":{\"notice\":\"This function is called by disperser when it has aggregated all the signatures of the operators that are part of the quorum for a particular taskNumber and is asserting them into onchain. The function checks that the claim for aggregated signatures are valid. The thesis of this procedure entails: - getting the aggregated pubkey of all registered nodes at the time of pre-commit by the disperser (represented by apk in the parameters), - subtracting the pubkeys of all the signers not in the quorum (nonSignerPubkeys) and storing the output in apk to get aggregated pubkey of all operators that are part of quorum. - use this aggregated pubkey to verify the aggregated signature under BLS scheme.\"},\"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])\":{\"notice\":\"Creates a new rewards submission to the EigenLayer RewardsCoordinator contract, to be split amongst the set of stakers delegated to operators who are registered to this `avs`\"},\"deregisterOperatorFromAVS(address)\":{\"notice\":\"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator deregistration from the AVS\"},\"getOperatorRestakedStrategies(address)\":{\"notice\":\"Returns the list of strategies that the operator has potentially restaked on the AVS\"},\"getRestakeableStrategies()\":{\"notice\":\"Returns the list of strategies that the AVS supports for restaking\"},\"registerOperatorToAVS(address,(bytes,bytes32,uint256))\":{\"notice\":\"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator registration with the AVS\"},\"rewardsInitiator()\":{\"notice\":\"The address of the entity that can initiate rewards\"},\"setRewardsInitiator(address)\":{\"notice\":\"Sets the rewards initiator address\"},\"setStaleStakesForbidden(bool)\":{\"notice\":\"/** RegistryCoordinator owner can either enforce or not that operator stakes are staler than the delegation.minWithdrawalDelayBlocks() window.\"},\"staleStakesForbidden()\":{\"notice\":\"If true, check the staleness of the operator stakes and that its within the delegation withdrawalDelayBlocks window.\"},\"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))\":{\"notice\":\"trySignatureAndApkVerification verifies a BLS aggregate signature and the veracity of a calculated G1 Public key\"},\"updateAVSMetadataURI(string)\":{\"notice\":\"Updates the metadata URI for the AVS\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/core/AlignedLayerServiceManager.sol\":\"AlignedLayerServiceManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin-upgrades-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/\",\":@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/\",\":@openzeppelin-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/\",\":@openzeppelin/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/\",\":ds-test/=lib/eigenlayer-middleware/lib/ds-test/src/\",\":eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/\",\":eigenlayer-core-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/\",\":eigenlayer-core/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/\",\":eigenlayer-middleware/=lib/eigenlayer-middleware/src/\",\":eigenlayer-scripts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/script/\",\":erc4626-tests/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/\",\":openzeppelin-contracts-upgradeable/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/\",\":openzeppelin-contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/\",\":openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/contracts/\"]},\"sources\":{\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IAVSDirectory.sol\":{\"keccak256\":\"0x3f67ab9b510b02dc3c07014b49785f1e167401bdb39cc10f737bbf545632d938\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://48d1267e2df6c8ac9b8f419269ff3d23be9b62606ee6b6d2278c27ffebfd73aa\",\"dweb:/ipfs/QmaFyywKCm1eotKjF1evryW8BMQJzPDstZm1wMRW79phXG\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IBeaconChainOracle.sol\":{\"keccak256\":\"0x0fef07aa6179c77198f1514e12e628aa1c876e04f9c181ec853a322179e5be00\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://51438325876cc2d4c77f58488a7e27b488015d1b663c50be6a5cafbd73b9c983\",\"dweb:/ipfs/QmViCuGoYZzi6wtXA8PPKigqVv3KMuNxEVQ1Td9dGqjL18\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol\":{\"keccak256\":\"0xab76a9f4eff865cbb689f627cf98263488765519d7a4ec5ffbcb0ca4972842f9\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://ff57ce18e8350bf39f190645db0988bc0f1279f1872150a114a1b520c38a2914\",\"dweb:/ipfs/QmSsUXkNUqYuJgGRumHTSs9rAaboGjecotcM4xHrdBYWaZ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IETHPOSDeposit.sol\":{\"keccak256\":\"0x2e60e5f4b0da0a0a4e2a07c63141120998559970c21deac743ea0c64a60a880c\",\"license\":\"CC0-1.0\",\"urls\":[\"bzz-raw://e635c346bde5b7ade9bcf35bc733081520cb86015be4fbc6e761e6e9482c4c91\",\"dweb:/ipfs/QmRoeazEnbFn5SPSWAkoFK2gSN9DMp3hJAnrLWuL2sKutz\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPod.sol\":{\"keccak256\":\"0xb50c36ad96b6679bb80fd8331f949cbfbcba0f529026e1421a4d2bae64396eba\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://5719181d780120f1e688c0da276992a8caf185815917f453b3550537c31ed4cc\",\"dweb:/ipfs/QmYprRC5ZEXhz3zAUND5E8Xjn6s5TL8ZF8QbnndVq7aVPR\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol\":{\"keccak256\":\"0xd8a64dbed03d3a5cdbefe1af75968f2dde07f973749c2ef5197bf7187c3e448c\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://27ccc7c1fd9352e9f9b357c9063d255dc0ed9583f43db09f786ac7497d7846b8\",\"dweb:/ipfs/QmeJzuJkE9m2NUNwZSp4tGZEZmih1LeucePup8hzMVDRbG\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol\":{\"keccak256\":\"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324\",\"dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol\":{\"keccak256\":\"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d\",\"dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IRewardsCoordinator.sol\":{\"keccak256\":\"0xeab6f1140a90eb7f107d95bae1e8b2ecfbfe36282d62c9df69e6a564c2c59771\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://785cd2777cdcab3b827b5eef2a4dae02c56db07252fdcefd8dd1016be034dc71\",\"dweb:/ipfs/QmNyDFchTuMeiVoxNEfQw96JVq7DfkohGz1txKXe7HyNbq\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISignatureUtils.sol\":{\"keccak256\":\"0x5e52482a31d94401a8502f3014c4aada1142b4450fc0596dff8e1866a85fe092\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://17dc326c9361bc1453379f26545963557b2883b0c88bc07d4477e04dbcc0cc8c\",\"dweb:/ipfs/QmZXT7A816W5JH2ymirE2ETaJttqztFCsEL22AV8oEfCK9\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol\":{\"keccak256\":\"0x45dfaa2cfdde87f48a6ee38bb6fb739847aef7cf3f6137bdcd8c8a330559ec79\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://1b7f6bd75b42fcaa91ceb7140cb2c41926a1fe6ee2d3161e4fe6186b181ba232\",\"dweb:/ipfs/QmZjbdKiSs33C9i3GDc3sdD39Pz4YPkDoKftowoUF4kHmY\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol\":{\"keccak256\":\"0xc530c6a944b70051fd0dac0222de9a4b5baadeaf94ad194daac6ad8d2ace7420\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://3767df0364ce835b52e786d2851431eb9223fe4747602107505477e162231d73\",\"dweb:/ipfs/QmZkH5bKUygQrJomndNaQqkefVRW4rRefCa8HPJ5HMczxJ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategyManager.sol\":{\"keccak256\":\"0x68bf02a443fc8b2f612eba3d39bfefa5f61f78b549f111cdecec5f2c58236a52\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://76bc6875ce74128b861fdac5fd1c0c72f3cc9bacf67fa4a73721b95fb23959ef\",\"dweb:/ipfs/QmPix4WJmf9fXyMZxfgwXEHBcg7V4NAbRqs4HUf5YrSJcM\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/BeaconChainProofs.sol\":{\"keccak256\":\"0x70d89b05c1c5f47b74a07fbb5a2c05e606fed494e749ea98a9915b7be73df377\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://db1d3bfaee69aef53c8b12b492a17584e6d1ac94610cb8b38aad33e1cdd81af7\",\"dweb:/ipfs/QmfVsMTj1hcf9fMEm5RzvtcBN4dMcAKFBgUUDsNDr5XFpq\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Endian.sol\":{\"keccak256\":\"0xf3b72653ba2567a978d4612703fa5f71c5fcd015d8dac7818468f22772d90a9d\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://cee9d09370d968138d775c39525db4cd0768d60d17be7685519de12444e7dd2f\",\"dweb:/ipfs/QmUdGh8wpMei3edKiEWA6S96s9dRt4ekZKJ4nau356X8xQ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Merkle.sol\":{\"keccak256\":\"0x9095fc29b96d102b10c02d44b3a6fbfa25593ef6ae4a810363ab885b9e6b0f71\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0945132d482d56278edddb1d32209903c4d3839c87ba4317aadd97dc23610d0f\",\"dweb:/ipfs/QmVuM2aLRHxitx4rPx3GTYTBCVNcjYn6sHBRr1biUjLBP5\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/permissions/Pausable.sol\":{\"keccak256\":\"0xce8ee0ab28f2bce9e94aa19fffe55bebef080327632ac98ff3ab14994b369bc0\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://5c7e2be97a8840fa2a0434077a36136553a84efd9bff4b46712ce9fddb813a6a\",\"dweb:/ipfs/QmZKvgPxLAbGo1CqTA4AX6MCDPFLSSNt43ZKWRjvvzFp7S\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354\",\"dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"lib/eigenlayer-middleware/src/BLSSignatureChecker.sol\":{\"keccak256\":\"0x3a5c205c596d3d73c7afa63ffbbfac8204f6d6a26c151ef26b47278981c3c0fe\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://4beb88bf5b7c7e614f0d87b157d7a4b67afbf1cc93f3127622bd66f696799241\",\"dweb:/ipfs/QmWJKb6qsd69bWgpAHX6deCkJqmJdo9oBLQAXJk97gWEE2\"]},\"lib/eigenlayer-middleware/src/ServiceManagerBase.sol\":{\"keccak256\":\"0x7e32ef76daf32e5eb5a93cecf204223e64243f42afe70c7ca71ad3db3925b9c4\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://19c10aa22f2e86e27e946b65c434e541caa6af06fcdde46c3b5e9b42890bd221\",\"dweb:/ipfs/QmPb5qDRdbJTniKSqsbjVhbtwdb72G9hWPYcHtVvj1zBxg\"]},\"lib/eigenlayer-middleware/src/ServiceManagerBaseStorage.sol\":{\"keccak256\":\"0xa544114dbf6d973a815f997a2ac9237c531c40b08c91d3a65a23b152ed621e1e\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://4cf69f9be7d3f3c4184b61b267280a829040973633ea9d95e2ec0dbf70f40a2e\",\"dweb:/ipfs/QmT2HeCJWBLX2p4KAWnyU318MMx9USb2brqCKq1vn2pXpR\"]},\"lib/eigenlayer-middleware/src/interfaces/IBLSApkRegistry.sol\":{\"keccak256\":\"0xc07a5edfd95ab4f16f16a8dc8e76eadf4b0e90fe49db90540d01daaad86898c5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://52b53266450a53da641e82d8ae3be93c5e09f8342b4ea0cc96bb9038d8406354\",\"dweb:/ipfs/QmVuoiQyqPTLCGnyt8zDaxiyaj4ETdgTGKv4MDHWzqEDjp\"]},\"lib/eigenlayer-middleware/src/interfaces/IBLSSignatureChecker.sol\":{\"keccak256\":\"0xee5823a6674e553c71f5e127f08245827eb116d1ad418b5a7f2a9d6985fd95e0\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://94aa26debddca6c0784585340cf891de4c2d7edaa3e5ec7229af9730312a5a51\",\"dweb:/ipfs/QmWbHGbM7eVYTAmrCVaDU8b4YTm9VAN82XgLDR78uHC7vj\"]},\"lib/eigenlayer-middleware/src/interfaces/IIndexRegistry.sol\":{\"keccak256\":\"0x83b2d56aacf27e65c4959a832c5de573e013908c044f6e48ea8284ac5282ae2b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://877af382587e96bb39bcc6db8bb5e4b871db5025c52347d4bee9afeaa4a6cc8d\",\"dweb:/ipfs/QmdnhsQCChzq2o5NgbeT3JxSsEcMm1PC9QW6zenZNPjD9F\"]},\"lib/eigenlayer-middleware/src/interfaces/IRegistry.sol\":{\"keccak256\":\"0x51426a17fb7e54bd3720e2890104e97a8559a13ff248b3d6b840916751c143d3\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://01f91289e6100d528cb8b318cb14ff22a0bc52882c9d4db41585e030cc9ddc25\",\"dweb:/ipfs/Qmb22nqGrsrtNovHRwbMCvDHGENuxAgrWu3Db4p7Er2MHY\"]},\"lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol\":{\"keccak256\":\"0xdd8effb082c1d5957d5ff43d7c59497b32866a6d82bcc7d5efa49ea9bc9b3385\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://cb33a2a1446585b13b7a509e880c60d658d2d2522ec48a9f02e30d2cff54002d\",\"dweb:/ipfs/QmVNG8ZPZkXzNEadPdTj1uBYLiZdCnYfsE5iGU6nJcJXiD\"]},\"lib/eigenlayer-middleware/src/interfaces/IServiceManager.sol\":{\"keccak256\":\"0x7602cfb4397a114a0ed60e70e8e1d729fdcf406b585838181b3cb3ffa6ac9a9a\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b718fa016a13a2a5ce298bc5ea7495cc70cf9c358211c75595d5c9dde9a6cc0f\",\"dweb:/ipfs/QmQNrVmU7P7pRqGBJuTQDkjf3wMDY2kJm7zXdtQwsQTbzY\"]},\"lib/eigenlayer-middleware/src/interfaces/IServiceManagerUI.sol\":{\"keccak256\":\"0x365761699b4a5b7360ee6c75f12606eefc4b0394754c8b8e1e1eefec0cba7ffb\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://ac14ada180b66cbbc5f9de0d6b4bb87b5946d2a9569ae88f2f62aaca47e879a8\",\"dweb:/ipfs/QmcN9xKYF24naNWc6cYah9suz5gJSYE9nPj9eZFWnP35VX\"]},\"lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol\":{\"keccak256\":\"0x1b8b4d757c1b804bc4cf6fbbf8bf8f89ebdeb30a31014751fe7d01deb9d513d4\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://984bf2777b898ed187d28997f9783f5c293a1a1848e3e9aa470ce9183d454c97\",\"dweb:/ipfs/Qme3aTpBrkLu8wYHFMZbCfhXHoZ1M6SpXkeC237T9BuU5B\"]},\"lib/eigenlayer-middleware/src/libraries/BN254.sol\":{\"keccak256\":\"0xb428c8d0c3b325507a88a61a80115493eb88606ccc19ed64a31e11294ab853b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7b6fb935bfe0494e6ff970c8f30a86d5f4cf5c3e0967300c28cd383c043acae\",\"dweb:/ipfs/QmUHfFZaVjLPXhkBmcxrZhAHZaSFQDqXtrLGpjGBQBa5Ki\"]},\"lib/eigenlayer-middleware/src/libraries/BitmapUtils.sol\":{\"keccak256\":\"0x44315ac460be30a6b18fd4df4d1b8afb46653bf4dc06ca9f93c32353fd0605c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da14f2ead3a375b02afd09d4a02edddf7b63a88945746b96789b2473184fdb04\",\"dweb:/ipfs/QmRqcjxa2Vv2MrLdPeAwsktXdWTirapEDsRbJCyYRtKT6g\"]},\"src/core/AlignedLayerServiceManager.sol\":{\"keccak256\":\"0x162271a3a98c3b1a15e96593762e53ff41c23569e93f7949f34f9abfff761aad\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://c2db54243afaa81c0f104e9cf126c0e061e0fed0e3515f513e991fc55ecd0f7d\",\"dweb:/ipfs/QmZcSi3DcULHYCmqhLbcr46aQCQSPLbSziPd62918obkCP\"]},\"src/core/AlignedLayerServiceManagerStorage.sol\":{\"keccak256\":\"0xabc512eb0a600c2e6465b0813cc2d1b26edd0225f03d9c1de2f6fe96db531817\",\"urls\":[\"bzz-raw://64c7675966d4d3503e011ed3184ffaebb85128b04e892f81cb47996788ca744d\",\"dweb:/ipfs/QmXqm57dvJCPUGgwMhf6k4sbPa3DUUTY3UVu2UCbHejY68\"]},\"src/core/IAlignedLayerServiceManager.sol\":{\"keccak256\":\"0x8d2bfeabfc2cde8b699778f7395c5efe44ded0bc57f0d0ea14cdc18a87d8433b\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://b2f47bfa5a21219889cde76d1bf30800c7765648ab68e1148c268b83362e040b\",\"dweb:/ipfs/QmWADSHQrj5qxMJ3kiksWDVe82w2WMPxgtLYxGnv8kGr9M\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.12+commit.f00d7308"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"contract IAVSDirectory","name":"__avsDirectory","type":"address"},{"internalType":"contract IRewardsCoordinator","name":"__rewardsCoordinator","type":"address"},{"internalType":"contract IRegistryCoordinator","name":"__registryCoordinator","type":"address"},{"internalType":"contract IStakeRegistry","name":"__stakeRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32","indexed":true},{"internalType":"address","name":"senderAddress","type":"address","indexed":false}],"type":"event","name":"BatchVerified","anonymous":false},{"inputs":[{"internalType":"address","name":"batcher","type":"address","indexed":true},{"internalType":"uint256","name":"newBalance","type":"uint256","indexed":false}],"type":"event","name":"BatcherBalanceUpdated","anonymous":false},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32","indexed":true},{"internalType":"uint32","name":"taskCreatedBlock","type":"uint32","indexed":false},{"internalType":"string","name":"batchDataPointer","type":"string","indexed":false}],"type":"event","name":"NewBatch","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32","indexed":true},{"internalType":"address","name":"senderAddress","type":"address","indexed":false},{"internalType":"uint32","name":"taskCreatedBlock","type":"uint32","indexed":false},{"internalType":"string","name":"batchDataPointer","type":"string","indexed":false}],"type":"event","name":"NewBatchV2","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"prevRewardsInitiator","type":"address","indexed":false},{"internalType":"address","name":"newRewardsInitiator","type":"address","indexed":false}],"type":"event","name":"RewardsInitiatorUpdated","anonymous":false},{"inputs":[{"internalType":"bool","name":"value","type":"bool","indexed":false}],"type":"event","name":"StaleStakesForbiddenUpdate","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"avsDirectory","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"batchesState","outputs":[{"internalType":"uint32","name":"taskCreatedBlock","type":"uint32"},{"internalType":"bool","name":"responded","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"blsApkRegistry","outputs":[{"internalType":"contract IBLSApkRegistry","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"publicInput","type":"bytes"},{"internalType":"bytes32","name":"hash","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"checkPublicInput","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"msgHash","type":"bytes32"},{"internalType":"uint32","name":"referenceBlockNumber","type":"uint32"},{"internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","name":"params","type":"tuple","components":[{"internalType":"uint32[]","name":"nonSignerQuorumBitmapIndices","type":"uint32[]"},{"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G1Point[]","name":"quorumApks","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint32[]","name":"quorumApkIndices","type":"uint32[]"},{"internalType":"uint32[]","name":"totalStakeIndices","type":"uint32[]"},{"internalType":"uint32[][]","name":"nonSignerStakeIndices","type":"uint32[][]"}]}],"stateMutability":"view","type":"function","name":"checkSignatures","outputs":[{"internalType":"struct IBLSSignatureChecker.QuorumStakeTotals","name":"","type":"tuple","components":[{"internalType":"uint96[]","name":"signedStakeForQuorum","type":"uint96[]"},{"internalType":"uint96[]","name":"totalStakeForQuorum","type":"uint96[]"}]},{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"struct IRewardsCoordinator.RewardsSubmission[]","name":"rewardsSubmissions","type":"tuple[]","components":[{"internalType":"struct IRewardsCoordinator.StrategyAndMultiplier[]","name":"strategiesAndMultipliers","type":"tuple[]","components":[{"internalType":"contract IStrategy","name":"strategy","type":"address"},{"internalType":"uint96","name":"multiplier","type":"uint96"}]},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint32","name":"startTimestamp","type":"uint32"},{"internalType":"uint32","name":"duration","type":"uint32"}]}],"stateMutability":"nonpayable","type":"function","name":"createAVSRewardsSubmission"},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"string","name":"batchDataPointer","type":"string"}],"stateMutability":"payable","type":"function","name":"createNewTask"},{"inputs":[],"stateMutability":"view","type":"function","name":"delegation","outputs":[{"internalType":"contract IDelegationManager","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"deregisterOperatorFromAVS"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function","name":"getOperatorRestakedStrategies","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getRestakeableStrategies","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"address","name":"_rewardsInitiator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"struct ISignatureUtils.SignatureWithSaltAndExpiry","name":"operatorSignature","type":"tuple","components":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"expiry","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"registerOperatorToAVS"},{"inputs":[],"stateMutability":"view","type":"function","name":"registryCoordinator","outputs":[{"internalType":"contract IRegistryCoordinator","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","name":"nonSignerStakesAndSignature","type":"tuple","components":[{"internalType":"uint32[]","name":"nonSignerQuorumBitmapIndices","type":"uint32[]"},{"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G1Point[]","name":"quorumApks","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint32[]","name":"quorumApkIndices","type":"uint32[]"},{"internalType":"uint32[]","name":"totalStakeIndices","type":"uint32[]"},{"internalType":"uint32[][]","name":"nonSignerStakeIndices","type":"uint32[][]"}]}],"stateMutability":"nonpayable","type":"function","name":"respondToTask"},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"address","name":"senderAddress","type":"address"},{"internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","name":"nonSignerStakesAndSignature","type":"tuple","components":[{"internalType":"uint32[]","name":"nonSignerQuorumBitmapIndices","type":"uint32[]"},{"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G1Point[]","name":"quorumApks","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint32[]","name":"quorumApkIndices","type":"uint32[]"},{"internalType":"uint32[]","name":"totalStakeIndices","type":"uint32[]"},{"internalType":"uint32[][]","name":"nonSignerStakeIndices","type":"uint32[][]"}]}],"stateMutability":"nonpayable","type":"function","name":"respondToTaskV2"},{"inputs":[],"stateMutability":"view","type":"function","name":"rewardsInitiator","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"newRewardsInitiator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setRewardsInitiator"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setStaleStakesForbidden"},{"inputs":[],"stateMutability":"view","type":"function","name":"stakeRegistry","outputs":[{"internalType":"contract IStakeRegistry","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"staleStakesForbidden","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"bytes32","name":"msgHash","type":"bytes32"},{"internalType":"struct BN254.G1Point","name":"apk","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]}],"stateMutability":"view","type":"function","name":"trySignatureAndApkVerification","outputs":[{"internalType":"bool","name":"pairingSuccessful","type":"bool"},{"internalType":"bool","name":"siganatureIsValid","type":"bool"}]},{"inputs":[{"internalType":"string","name":"_metadataURI","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"updateAVSMetadataURI"},{"inputs":[{"internalType":"bytes32","name":"proofCommitment","type":"bytes32"},{"internalType":"bytes32","name":"pubInputCommitment","type":"bytes32"},{"internalType":"bytes32","name":"provingSystemAuxDataCommitment","type":"bytes32"},{"internalType":"bytes20","name":"proofGeneratorAddr","type":"bytes20"},{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"bytes","name":"merkleProof","type":"bytes"},{"internalType":"uint256","name":"verificationDataBatchIndex","type":"uint256"},{"internalType":"address","name":"senderAddress","type":"address"}],"stateMutability":"view","type":"function","name":"verifyBatchInclusion","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":{"details":"Before signature verification, the function verifies operator stake information. This includes ensuring that the provided `referenceBlockNumber` is correct, i.e., ensure that the stake returned from the specified block number is recent enough and that the stake is either the most recent update for the total stake (of the operator) or latest before the referenceBlockNumber.NOTE: Be careful to ensure `msgHash` is collision-resistant! This method does not hash `msgHash` in any way, so if an attacker is able to pass in an arbitrary value, they may be able to tamper with signature verification.","params":{"msgHash":"is the hash being signed","params":"is the struct containing information on nonsigners, stakes, quorum apks, and the aggregate signature","referenceBlockNumber":"is the block number at which the stake information is being verified"},"returns":{"_0":"quorumStakeTotals is the struct containing the total and signed stake for each quorum","_1":"signatoryRecordHash is the hash of the signatory record, which is used for fraud proofs"}},"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])":{"details":"Only callabe by the permissioned rewardsInitiator addressThe duration of the `rewardsSubmission` cannot exceed `MAX_REWARDS_DURATION`The tokens are sent to the `RewardsCoordinator` contractStrategies must be in ascending order of addresses to check for duplicatesThis function will revert if the `rewardsSubmission` is malformed, e.g. if the `strategies` and `weights` arrays are of non-equal lengths","params":{"rewardsSubmissions":"The rewards submissions being created"}},"deregisterOperatorFromAVS(address)":{"params":{"operator":"The address of the operator to deregister."}},"getOperatorRestakedStrategies(address)":{"details":"This function is intended to be called off-chainNo guarantee is made on whether the operator has shares for a strategy in a quorum or uniqueness of each element in the returned array. The off-chain service should do that validation separately","params":{"operator":"The address of the operator to get restaked strategies for"}},"getRestakeableStrategies()":{"details":"This function is intended to be called off-chainNo guarantee is made on uniqueness of each element in the returned array. The off-chain service should do that validation separately"},"owner()":{"details":"Returns the address of the current owner."},"registerOperatorToAVS(address,(bytes,bytes32,uint256))":{"params":{"operator":"The address of the operator to register.","operatorSignature":"The signature, salt, and expiry of the operator's signature."}},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"setRewardsInitiator(address)":{"details":"only callable by the owner","params":{"newRewardsInitiator":"The new rewards initiator address"}},"setStaleStakesForbidden(bool)":{"params":{"value":"to toggle staleStakesForbidden"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))":{"params":{"apk":"is the claimed G1 public key","apkG2":"is provided G2 public key","msgHash":"is the hash being signed","sigma":"is the G1 point signature"},"returns":{"pairingSuccessful":"is true if the pairing precompile call was successful","siganatureIsValid":"is true if the signature is valid"}},"updateAVSMetadataURI(string)":{"details":"only callable by the owner","params":{"_metadataURI":"is the metadata URI for the AVS"}}},"version":1},"userdoc":{"kind":"user","methods":{"avsDirectory()":{"notice":"Returns the EigenLayer AVSDirectory contract."},"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":{"notice":"This function is called by disperser when it has aggregated all the signatures of the operators that are part of the quorum for a particular taskNumber and is asserting them into onchain. The function checks that the claim for aggregated signatures are valid. The thesis of this procedure entails: - getting the aggregated pubkey of all registered nodes at the time of pre-commit by the disperser (represented by apk in the parameters), - subtracting the pubkeys of all the signers not in the quorum (nonSignerPubkeys) and storing the output in apk to get aggregated pubkey of all operators that are part of quorum. - use this aggregated pubkey to verify the aggregated signature under BLS scheme."},"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])":{"notice":"Creates a new rewards submission to the EigenLayer RewardsCoordinator contract, to be split amongst the set of stakers delegated to operators who are registered to this `avs`"},"deregisterOperatorFromAVS(address)":{"notice":"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator deregistration from the AVS"},"getOperatorRestakedStrategies(address)":{"notice":"Returns the list of strategies that the operator has potentially restaked on the AVS"},"getRestakeableStrategies()":{"notice":"Returns the list of strategies that the AVS supports for restaking"},"registerOperatorToAVS(address,(bytes,bytes32,uint256))":{"notice":"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator registration with the AVS"},"rewardsInitiator()":{"notice":"The address of the entity that can initiate rewards"},"setRewardsInitiator(address)":{"notice":"Sets the rewards initiator address"},"setStaleStakesForbidden(bool)":{"notice":"/** RegistryCoordinator owner can either enforce or not that operator stakes are staler than the delegation.minWithdrawalDelayBlocks() window."},"staleStakesForbidden()":{"notice":"If true, check the staleness of the operator stakes and that its within the delegation withdrawalDelayBlocks window."},"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))":{"notice":"trySignatureAndApkVerification verifies a BLS aggregate signature and the veracity of a calculated G1 Public key"},"updateAVSMetadataURI(string)":{"notice":"Updates the metadata URI for the AVS"}},"version":1}},"settings":{"remappings":["@openzeppelin-upgrades-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/","@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/","@openzeppelin-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/","@openzeppelin/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/","ds-test/=lib/eigenlayer-middleware/lib/ds-test/src/","eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/","eigenlayer-core-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/","eigenlayer-core/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/","eigenlayer-middleware/=lib/eigenlayer-middleware/src/","eigenlayer-scripts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/script/","erc4626-tests/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/","openzeppelin-contracts-upgradeable/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/","openzeppelin-contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/","openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/core/AlignedLayerServiceManager.sol":"AlignedLayerServiceManager"},"evmVersion":"london","libraries":{}},"sources":{"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IAVSDirectory.sol":{"keccak256":"0x3f67ab9b510b02dc3c07014b49785f1e167401bdb39cc10f737bbf545632d938","urls":["bzz-raw://48d1267e2df6c8ac9b8f419269ff3d23be9b62606ee6b6d2278c27ffebfd73aa","dweb:/ipfs/QmaFyywKCm1eotKjF1evryW8BMQJzPDstZm1wMRW79phXG"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IBeaconChainOracle.sol":{"keccak256":"0x0fef07aa6179c77198f1514e12e628aa1c876e04f9c181ec853a322179e5be00","urls":["bzz-raw://51438325876cc2d4c77f58488a7e27b488015d1b663c50be6a5cafbd73b9c983","dweb:/ipfs/QmViCuGoYZzi6wtXA8PPKigqVv3KMuNxEVQ1Td9dGqjL18"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol":{"keccak256":"0xab76a9f4eff865cbb689f627cf98263488765519d7a4ec5ffbcb0ca4972842f9","urls":["bzz-raw://ff57ce18e8350bf39f190645db0988bc0f1279f1872150a114a1b520c38a2914","dweb:/ipfs/QmSsUXkNUqYuJgGRumHTSs9rAaboGjecotcM4xHrdBYWaZ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IETHPOSDeposit.sol":{"keccak256":"0x2e60e5f4b0da0a0a4e2a07c63141120998559970c21deac743ea0c64a60a880c","urls":["bzz-raw://e635c346bde5b7ade9bcf35bc733081520cb86015be4fbc6e761e6e9482c4c91","dweb:/ipfs/QmRoeazEnbFn5SPSWAkoFK2gSN9DMp3hJAnrLWuL2sKutz"],"license":"CC0-1.0"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPod.sol":{"keccak256":"0xb50c36ad96b6679bb80fd8331f949cbfbcba0f529026e1421a4d2bae64396eba","urls":["bzz-raw://5719181d780120f1e688c0da276992a8caf185815917f453b3550537c31ed4cc","dweb:/ipfs/QmYprRC5ZEXhz3zAUND5E8Xjn6s5TL8ZF8QbnndVq7aVPR"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol":{"keccak256":"0xd8a64dbed03d3a5cdbefe1af75968f2dde07f973749c2ef5197bf7187c3e448c","urls":["bzz-raw://27ccc7c1fd9352e9f9b357c9063d255dc0ed9583f43db09f786ac7497d7846b8","dweb:/ipfs/QmeJzuJkE9m2NUNwZSp4tGZEZmih1LeucePup8hzMVDRbG"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol":{"keccak256":"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f","urls":["bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324","dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol":{"keccak256":"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49","urls":["bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d","dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IRewardsCoordinator.sol":{"keccak256":"0xeab6f1140a90eb7f107d95bae1e8b2ecfbfe36282d62c9df69e6a564c2c59771","urls":["bzz-raw://785cd2777cdcab3b827b5eef2a4dae02c56db07252fdcefd8dd1016be034dc71","dweb:/ipfs/QmNyDFchTuMeiVoxNEfQw96JVq7DfkohGz1txKXe7HyNbq"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISignatureUtils.sol":{"keccak256":"0x5e52482a31d94401a8502f3014c4aada1142b4450fc0596dff8e1866a85fe092","urls":["bzz-raw://17dc326c9361bc1453379f26545963557b2883b0c88bc07d4477e04dbcc0cc8c","dweb:/ipfs/QmZXT7A816W5JH2ymirE2ETaJttqztFCsEL22AV8oEfCK9"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol":{"keccak256":"0x45dfaa2cfdde87f48a6ee38bb6fb739847aef7cf3f6137bdcd8c8a330559ec79","urls":["bzz-raw://1b7f6bd75b42fcaa91ceb7140cb2c41926a1fe6ee2d3161e4fe6186b181ba232","dweb:/ipfs/QmZjbdKiSs33C9i3GDc3sdD39Pz4YPkDoKftowoUF4kHmY"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol":{"keccak256":"0xc530c6a944b70051fd0dac0222de9a4b5baadeaf94ad194daac6ad8d2ace7420","urls":["bzz-raw://3767df0364ce835b52e786d2851431eb9223fe4747602107505477e162231d73","dweb:/ipfs/QmZkH5bKUygQrJomndNaQqkefVRW4rRefCa8HPJ5HMczxJ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategyManager.sol":{"keccak256":"0x68bf02a443fc8b2f612eba3d39bfefa5f61f78b549f111cdecec5f2c58236a52","urls":["bzz-raw://76bc6875ce74128b861fdac5fd1c0c72f3cc9bacf67fa4a73721b95fb23959ef","dweb:/ipfs/QmPix4WJmf9fXyMZxfgwXEHBcg7V4NAbRqs4HUf5YrSJcM"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/BeaconChainProofs.sol":{"keccak256":"0x70d89b05c1c5f47b74a07fbb5a2c05e606fed494e749ea98a9915b7be73df377","urls":["bzz-raw://db1d3bfaee69aef53c8b12b492a17584e6d1ac94610cb8b38aad33e1cdd81af7","dweb:/ipfs/QmfVsMTj1hcf9fMEm5RzvtcBN4dMcAKFBgUUDsNDr5XFpq"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Endian.sol":{"keccak256":"0xf3b72653ba2567a978d4612703fa5f71c5fcd015d8dac7818468f22772d90a9d","urls":["bzz-raw://cee9d09370d968138d775c39525db4cd0768d60d17be7685519de12444e7dd2f","dweb:/ipfs/QmUdGh8wpMei3edKiEWA6S96s9dRt4ekZKJ4nau356X8xQ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Merkle.sol":{"keccak256":"0x9095fc29b96d102b10c02d44b3a6fbfa25593ef6ae4a810363ab885b9e6b0f71","urls":["bzz-raw://0945132d482d56278edddb1d32209903c4d3839c87ba4317aadd97dc23610d0f","dweb:/ipfs/QmVuM2aLRHxitx4rPx3GTYTBCVNcjYn6sHBRr1biUjLBP5"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/permissions/Pausable.sol":{"keccak256":"0xce8ee0ab28f2bce9e94aa19fffe55bebef080327632ac98ff3ab14994b369bc0","urls":["bzz-raw://5c7e2be97a8840fa2a0434077a36136553a84efd9bff4b46712ce9fddb813a6a","dweb:/ipfs/QmZKvgPxLAbGo1CqTA4AX6MCDPFLSSNt43ZKWRjvvzFp7S"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888","urls":["bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a","dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e","urls":["bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497","dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol":{"keccak256":"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3","urls":["bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4","dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149","urls":["bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c","dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61","urls":["bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354","dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b","urls":["bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34","dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr"],"license":"MIT"},"lib/eigenlayer-middleware/src/BLSSignatureChecker.sol":{"keccak256":"0x3a5c205c596d3d73c7afa63ffbbfac8204f6d6a26c151ef26b47278981c3c0fe","urls":["bzz-raw://4beb88bf5b7c7e614f0d87b157d7a4b67afbf1cc93f3127622bd66f696799241","dweb:/ipfs/QmWJKb6qsd69bWgpAHX6deCkJqmJdo9oBLQAXJk97gWEE2"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/ServiceManagerBase.sol":{"keccak256":"0x7e32ef76daf32e5eb5a93cecf204223e64243f42afe70c7ca71ad3db3925b9c4","urls":["bzz-raw://19c10aa22f2e86e27e946b65c434e541caa6af06fcdde46c3b5e9b42890bd221","dweb:/ipfs/QmPb5qDRdbJTniKSqsbjVhbtwdb72G9hWPYcHtVvj1zBxg"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/ServiceManagerBaseStorage.sol":{"keccak256":"0xa544114dbf6d973a815f997a2ac9237c531c40b08c91d3a65a23b152ed621e1e","urls":["bzz-raw://4cf69f9be7d3f3c4184b61b267280a829040973633ea9d95e2ec0dbf70f40a2e","dweb:/ipfs/QmT2HeCJWBLX2p4KAWnyU318MMx9USb2brqCKq1vn2pXpR"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IBLSApkRegistry.sol":{"keccak256":"0xc07a5edfd95ab4f16f16a8dc8e76eadf4b0e90fe49db90540d01daaad86898c5","urls":["bzz-raw://52b53266450a53da641e82d8ae3be93c5e09f8342b4ea0cc96bb9038d8406354","dweb:/ipfs/QmVuoiQyqPTLCGnyt8zDaxiyaj4ETdgTGKv4MDHWzqEDjp"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IBLSSignatureChecker.sol":{"keccak256":"0xee5823a6674e553c71f5e127f08245827eb116d1ad418b5a7f2a9d6985fd95e0","urls":["bzz-raw://94aa26debddca6c0784585340cf891de4c2d7edaa3e5ec7229af9730312a5a51","dweb:/ipfs/QmWbHGbM7eVYTAmrCVaDU8b4YTm9VAN82XgLDR78uHC7vj"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IIndexRegistry.sol":{"keccak256":"0x83b2d56aacf27e65c4959a832c5de573e013908c044f6e48ea8284ac5282ae2b","urls":["bzz-raw://877af382587e96bb39bcc6db8bb5e4b871db5025c52347d4bee9afeaa4a6cc8d","dweb:/ipfs/QmdnhsQCChzq2o5NgbeT3JxSsEcMm1PC9QW6zenZNPjD9F"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IRegistry.sol":{"keccak256":"0x51426a17fb7e54bd3720e2890104e97a8559a13ff248b3d6b840916751c143d3","urls":["bzz-raw://01f91289e6100d528cb8b318cb14ff22a0bc52882c9d4db41585e030cc9ddc25","dweb:/ipfs/Qmb22nqGrsrtNovHRwbMCvDHGENuxAgrWu3Db4p7Er2MHY"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol":{"keccak256":"0xdd8effb082c1d5957d5ff43d7c59497b32866a6d82bcc7d5efa49ea9bc9b3385","urls":["bzz-raw://cb33a2a1446585b13b7a509e880c60d658d2d2522ec48a9f02e30d2cff54002d","dweb:/ipfs/QmVNG8ZPZkXzNEadPdTj1uBYLiZdCnYfsE5iGU6nJcJXiD"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IServiceManager.sol":{"keccak256":"0x7602cfb4397a114a0ed60e70e8e1d729fdcf406b585838181b3cb3ffa6ac9a9a","urls":["bzz-raw://b718fa016a13a2a5ce298bc5ea7495cc70cf9c358211c75595d5c9dde9a6cc0f","dweb:/ipfs/QmQNrVmU7P7pRqGBJuTQDkjf3wMDY2kJm7zXdtQwsQTbzY"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IServiceManagerUI.sol":{"keccak256":"0x365761699b4a5b7360ee6c75f12606eefc4b0394754c8b8e1e1eefec0cba7ffb","urls":["bzz-raw://ac14ada180b66cbbc5f9de0d6b4bb87b5946d2a9569ae88f2f62aaca47e879a8","dweb:/ipfs/QmcN9xKYF24naNWc6cYah9suz5gJSYE9nPj9eZFWnP35VX"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol":{"keccak256":"0x1b8b4d757c1b804bc4cf6fbbf8bf8f89ebdeb30a31014751fe7d01deb9d513d4","urls":["bzz-raw://984bf2777b898ed187d28997f9783f5c293a1a1848e3e9aa470ce9183d454c97","dweb:/ipfs/Qme3aTpBrkLu8wYHFMZbCfhXHoZ1M6SpXkeC237T9BuU5B"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/libraries/BN254.sol":{"keccak256":"0xb428c8d0c3b325507a88a61a80115493eb88606ccc19ed64a31e11294ab853b3","urls":["bzz-raw://d7b6fb935bfe0494e6ff970c8f30a86d5f4cf5c3e0967300c28cd383c043acae","dweb:/ipfs/QmUHfFZaVjLPXhkBmcxrZhAHZaSFQDqXtrLGpjGBQBa5Ki"],"license":"MIT"},"lib/eigenlayer-middleware/src/libraries/BitmapUtils.sol":{"keccak256":"0x44315ac460be30a6b18fd4df4d1b8afb46653bf4dc06ca9f93c32353fd0605c5","urls":["bzz-raw://da14f2ead3a375b02afd09d4a02edddf7b63a88945746b96789b2473184fdb04","dweb:/ipfs/QmRqcjxa2Vv2MrLdPeAwsktXdWTirapEDsRbJCyYRtKT6g"],"license":"MIT"},"src/core/AlignedLayerServiceManager.sol":{"keccak256":"0x162271a3a98c3b1a15e96593762e53ff41c23569e93f7949f34f9abfff761aad","urls":["bzz-raw://c2db54243afaa81c0f104e9cf126c0e061e0fed0e3515f513e991fc55ecd0f7d","dweb:/ipfs/QmZcSi3DcULHYCmqhLbcr46aQCQSPLbSziPd62918obkCP"],"license":"UNLICENSED"},"src/core/AlignedLayerServiceManagerStorage.sol":{"keccak256":"0xabc512eb0a600c2e6465b0813cc2d1b26edd0225f03d9c1de2f6fe96db531817","urls":["bzz-raw://64c7675966d4d3503e011ed3184ffaebb85128b04e892f81cb47996788ca744d","dweb:/ipfs/QmXqm57dvJCPUGgwMhf6k4sbPa3DUUTY3UVu2UCbHejY68"],"license":null},"src/core/IAlignedLayerServiceManager.sol":{"keccak256":"0x8d2bfeabfc2cde8b699778f7395c5efe44ded0bc57f0d0ea14cdc18a87d8433b","urls":["bzz-raw://b2f47bfa5a21219889cde76d1bf30800c7765648ab68e1148c268b83362e040b","dweb:/ipfs/QmWADSHQrj5qxMJ3kiksWDVe82w2WMPxgtLYxGnv8kGr9M"],"license":"UNLICENSED"}},"version":1},"id":171} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"__avsDirectory","type":"address","internalType":"contract IAVSDirectory"},{"name":"__rewardsCoordinator","type":"address","internalType":"contract IRewardsCoordinator"},{"name":"__registryCoordinator","type":"address","internalType":"contract IRegistryCoordinator"},{"name":"__stakeRegistry","type":"address","internalType":"contract IStakeRegistry"}],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"alignedAggregator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"avsDirectory","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"batchersBalances","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"batchesState","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"taskCreatedBlock","type":"uint32","internalType":"uint32"},{"name":"responded","type":"bool","internalType":"bool"},{"name":"respondToTaskFeeLimit","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"blsApkRegistry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IBLSApkRegistry"}],"stateMutability":"view"},{"type":"function","name":"checkPublicInput","inputs":[{"name":"publicInput","type":"bytes","internalType":"bytes"},{"name":"hash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"checkSignatures","inputs":[{"name":"msgHash","type":"bytes32","internalType":"bytes32"},{"name":"referenceBlockNumber","type":"uint32","internalType":"uint32"},{"name":"params","type":"tuple","internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","components":[{"name":"nonSignerQuorumBitmapIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerPubkeys","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApks","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApkIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"totalStakeIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerStakeIndices","type":"uint32[][]","internalType":"uint32[][]"}]}],"outputs":[{"name":"","type":"tuple","internalType":"struct IBLSSignatureChecker.QuorumStakeTotals","components":[{"name":"signedStakeForQuorum","type":"uint96[]","internalType":"uint96[]"},{"name":"totalStakeForQuorum","type":"uint96[]","internalType":"uint96[]"}]},{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"createAVSRewardsSubmission","inputs":[{"name":"rewardsSubmissions","type":"tuple[]","internalType":"struct IRewardsCoordinator.RewardsSubmission[]","components":[{"name":"strategiesAndMultipliers","type":"tuple[]","internalType":"struct IRewardsCoordinator.StrategyAndMultiplier[]","components":[{"name":"strategy","type":"address","internalType":"contract IStrategy"},{"name":"multiplier","type":"uint96","internalType":"uint96"}]},{"name":"token","type":"address","internalType":"contract IERC20"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"startTimestamp","type":"uint32","internalType":"uint32"},{"name":"duration","type":"uint32","internalType":"uint32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"createNewTask","inputs":[{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"batchDataPointer","type":"string","internalType":"string"},{"name":"respondToTaskFeeLimit","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"delegation","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IDelegationManager"}],"stateMutability":"view"},{"type":"function","name":"depositToBatcher","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"deregisterOperatorFromAVS","inputs":[{"name":"operator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getOperatorRestakedStrategies","inputs":[{"name":"operator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getRestakeableStrategies","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_initialOwner","type":"address","internalType":"address"},{"name":"_rewardsInitiator","type":"address","internalType":"address"},{"name":"_alignedAggregator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initializeAggregator","inputs":[{"name":"_alignedAggregator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"registerOperatorToAVS","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"operatorSignature","type":"tuple","internalType":"struct ISignatureUtils.SignatureWithSaltAndExpiry","components":[{"name":"signature","type":"bytes","internalType":"bytes"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"expiry","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registryCoordinator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IRegistryCoordinator"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"respondToTaskV2","inputs":[{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"senderAddress","type":"address","internalType":"address"},{"name":"nonSignerStakesAndSignature","type":"tuple","internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","components":[{"name":"nonSignerQuorumBitmapIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerPubkeys","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApks","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApkIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"totalStakeIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerStakeIndices","type":"uint32[][]","internalType":"uint32[][]"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rewardsInitiator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"setAggregator","inputs":[{"name":"_alignedAggregator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setRewardsInitiator","inputs":[{"name":"newRewardsInitiator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setStaleStakesForbidden","inputs":[{"name":"value","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stakeRegistry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IStakeRegistry"}],"stateMutability":"view"},{"type":"function","name":"staleStakesForbidden","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"trySignatureAndApkVerification","inputs":[{"name":"msgHash","type":"bytes32","internalType":"bytes32"},{"name":"apk","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]}],"outputs":[{"name":"pairingSuccessful","type":"bool","internalType":"bool"},{"name":"siganatureIsValid","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"updateAVSMetadataURI","inputs":[{"name":"_metadataURI","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifyBatchInclusion","inputs":[{"name":"proofCommitment","type":"bytes32","internalType":"bytes32"},{"name":"pubInputCommitment","type":"bytes32","internalType":"bytes32"},{"name":"provingSystemAuxDataCommitment","type":"bytes32","internalType":"bytes32"},{"name":"proofGeneratorAddr","type":"bytes20","internalType":"bytes20"},{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"merkleProof","type":"bytes","internalType":"bytes"},{"name":"verificationDataBatchIndex","type":"uint256","internalType":"uint256"},{"name":"senderAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"verifyBatchInclusion","inputs":[{"name":"proofCommitment","type":"bytes32","internalType":"bytes32"},{"name":"pubInputCommitment","type":"bytes32","internalType":"bytes32"},{"name":"provingSystemAuxDataCommitment","type":"bytes32","internalType":"bytes32"},{"name":"proofGeneratorAddr","type":"bytes20","internalType":"bytes20"},{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"merkleProof","type":"bytes","internalType":"bytes"},{"name":"verificationDataBatchIndex","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"withdraw","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"BatchVerified","inputs":[{"name":"batchMerkleRoot","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"senderAddress","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"BatcherBalanceUpdated","inputs":[{"name":"batcher","type":"address","indexed":true,"internalType":"address"},{"name":"newBalance","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"NewBatchV2","inputs":[{"name":"batchMerkleRoot","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"senderAddress","type":"address","indexed":false,"internalType":"address"},{"name":"taskCreatedBlock","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"batchDataPointer","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"NewBatchV3","inputs":[{"name":"batchMerkleRoot","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"senderAddress","type":"address","indexed":false,"internalType":"address"},{"name":"taskCreatedBlock","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"batchDataPointer","type":"string","indexed":false,"internalType":"string"},{"name":"respondToTaskFeeLimit","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RewardsInitiatorUpdated","inputs":[{"name":"prevRewardsInitiator","type":"address","indexed":false,"internalType":"address"},{"name":"newRewardsInitiator","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"StaleStakesForbiddenUpdate","inputs":[{"name":"value","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"error","name":"BatchAlreadyResponded","inputs":[{"name":"batchIdentifierHash","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"BatchAlreadySubmitted","inputs":[{"name":"batchIdentifierHash","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"BatchDoesNotExist","inputs":[{"name":"batchIdentifierHash","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"ExceededMaxRespondFee","inputs":[{"name":"respondToTaskFeeLimit","type":"uint256","internalType":"uint256"},{"name":"txCost","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InsufficientFunds","inputs":[{"name":"batcher","type":"address","internalType":"address"},{"name":"required","type":"uint256","internalType":"uint256"},{"name":"available","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidDepositAmount","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidQuorumThreshold","inputs":[{"name":"signedStake","type":"uint256","internalType":"uint256"},{"name":"requiredStake","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"SenderIsNotAggregator","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"alignedAggregator","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x6101806040523480156200001257600080fd5b50604051620056ab380380620056ab8339810160408190526200003591620002e5565b6001600160a01b0380851660805280841660a05280831660c052811660e0528184848284620000636200020a565b50505050806001600160a01b0316610100816001600160a01b031681525050806001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e791906200034d565b6001600160a01b0316610120816001600160a01b031681525050806001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000140573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016691906200034d565b6001600160a01b0316610140816001600160a01b031681525050610120516001600160a01b031663df5cf7236040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e891906200034d565b6001600160a01b03166101605250620002006200020a565b5050505062000374565b600054610100900460ff1615620002775760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620002ca576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620002e257600080fd5b50565b60008060008060808587031215620002fc57600080fd5b84516200030981620002cc565b60208601519094506200031c81620002cc565b60408601519093506200032f81620002cc565b60608601519092506200034281620002cc565b939692955090935050565b6000602082840312156200036057600080fd5b81516200036d81620002cc565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051615229620004826000396000818161065401526117dd01526000818161039701526119f00152600081816103cb01528181611bdd0152611dcd0152600081816104320152818161100f015281816114a30152818161164a0152611891015260008181610d4401528181610e9501528181610f2c01528181612aae01528181612c270152612cc6015260008181610b6b01528181610bfa01528181610c7a0152818161216601528181612232015281816129e90152612b8201526000818161307d01528181613139015261321c0152600081816103fc015281816121ba0152818161228e015261230d01526152296000f3fe6080604052600436106101fd5760003560e01c806395c6d6041161010d578063d66eaabd116100a0578063f474b5201161006f578063f474b520146106ab578063f9120af6146106d8578063fa534dc0146106f8578063fc299dee14610718578063fce36c7d1461073857600080fd5b8063d66eaabd1461062f578063df5cf72314610642578063e481af9d14610676578063f2fde38b1461068b57600080fd5b8063ab21739a116100dc578063ab21739a1461056b578063b099627e1461058b578063b98d0908146105f5578063c0c53b8b1461060f57600080fd5b806395c6d604146104eb5780639926ee7d1461050b578063a364f4da1461052b578063a98fb3551461054b57600080fd5b80634ae07c37116101905780636d14a9871161015f5780636d14a9871461042057806370a0823114610454578063715018a614610498578063800fb61f146104ad5780638da5cb5b146104cd57600080fd5b80634ae07c37146103575780635df459461461038557806368304835146103b95780636b3aa72e146103ed57600080fd5b80633bc28c8c116101cc5780633bc28c8c146102cc578063416c7e5e146102ec5780634223d5511461030c5780634a5bf6321461031f57600080fd5b806306045a9114610213578063171f1d5b146102485780632e1a7d4d1461027f57806333cfb7b71461029f57600080fd5b3661020e5761020c3334610758565b005b600080fd5b34801561021f57600080fd5b5061023361022e366004614197565b6107ed565b60405190151581526020015b60405180910390f35b34801561025457600080fd5b506102686102633660046142e9565b6108e4565b60408051921515835290151560208301520161023f565b34801561028b57600080fd5b5061020c61029a36600461433a565b610a6e565b3480156102ab57600080fd5b506102bf6102ba366004614353565b610b46565b60405161023f9190614370565b3480156102d857600080fd5b5061020c6102e7366004614353565b610ff9565b3480156102f857600080fd5b5061020c6103073660046143cb565b61100d565b61020c61031a366004614353565b611144565b34801561032b57600080fd5b5060cb5461033f906001600160a01b031681565b6040516001600160a01b03909116815260200161023f565b34801561036357600080fd5b506103776103723660046146a6565b61114e565b60405161023f929190614741565b34801561039157600080fd5b5061033f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c557600080fd5b5061033f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f957600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061033f565b34801561042c57600080fd5b5061033f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561046057600080fd5b5061048a61046f366004614353565b6001600160a01b0316600090815260ca602052604090205490565b60405190815260200161023f565b3480156104a457600080fd5b5061020c612082565b3480156104b957600080fd5b5061020c6104c8366004614353565b612096565b3480156104d957600080fd5b506033546001600160a01b031661033f565b3480156104f757600080fd5b506102336105063660046147d2565b612136565b34801561051757600080fd5b5061020c61052636600461481d565b61215b565b34801561053757600080fd5b5061020c610546366004614353565b612227565b34801561055757600080fd5b5061020c6105663660046148c8565b6122ee565b34801561057757600080fd5b5061020c610586366004614918565b612342565b34801561059757600080fd5b506105d36105a636600461433a565b60c9602052600090815260409020805460019091015463ffffffff821691640100000000900460ff169083565b6040805163ffffffff909416845291151560208401529082015260600161023f565b34801561060157600080fd5b506097546102339060ff1681565b34801561061b57600080fd5b5061020c61062a36600461493f565b612701565b61020c61063d36600461498a565b6127eb565b34801561064e57600080fd5b5061033f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561068257600080fd5b506102bf6129e3565b34801561069757600080fd5b5061020c6106a6366004614353565b612d8f565b3480156106b757600080fd5b5061048a6106c6366004614353565b60ca6020526000908152604090205481565b3480156106e457600080fd5b5061020c6106f3366004614353565b612e05565b34801561070457600080fd5b506102336107133660046149dc565b612e2f565b34801561072457600080fd5b5060655461033f906001600160a01b031681565b34801561074457600080fd5b5061020c610753366004614a59565b612ea4565b8060000361078157604051632097692160e11b8152600481018290526024015b60405180910390fd5b6001600160a01b038216600090815260ca6020526040812080548392906107a9908490614ae3565b90915550506001600160a01b038216600081815260ca60209081526040918290205491519182526000805160206151b4833981519152910160405180910390a25050565b6000806001600160a01b038316610805575084610831565b8583604051602001610818929190614af6565b6040516020818303038152906040528051906020012090505b600081815260c9602052604081205463ffffffff1690036108565760009150506108d8565b600081815260c96020526040902054640100000000900460ff1661087e5760009150506108d8565b60408051602081018c90529081018a9052606081018990526001600160601b03198816608082015260009060940160408051601f19818403018152919052805160208201209091506108d287898389613253565b93505050505b98975050505050505050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018787600001518860200151886000015160006002811061092c5761092c614b11565b60200201518951600160200201518a6020015160006002811061095157610951614b11565b60200201518b6020015160016002811061096d5761096d614b11565b602090810291909101518c518d8301516040516109ca9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c6109ed9190614b27565b9050610a60610a066109ff888461326b565b86906132fc565b610a0e613391565b610a56610a4785610a41604080518082018252600080825260209182015281518083019092526001825260029082015290565b9061326b565b610a508c613451565b906132fc565b886201d4c06134e0565b909890975095505050505050565b33600090815260ca6020526040902054811115610abf5733600081815260ca602052604090819020549051632e2a182f60e11b81526004810192909252602482018390526044820152606401610778565b33600090815260ca602052604081208054839290610ade908490614b49565b909155505033600081815260ca60209081526040918290205491519182526000805160206151b4833981519152910160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015610b42573d6000803e3d6000fd5b5050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90602401602060405180830381865afa158015610bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd69190614b5c565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa158015610c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c659190614b75565b90506001600160c01b0381161580610cff57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfa9190614b9e565b60ff16155b15610d1f5760408051600080825260208201909252905b50949350505050565b6000610d33826001600160c01b03166136fa565b90506000805b8251811015610dff577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f5848381518110610d8357610d83614b11565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610deb9190614b5c565b610df59083614ae3565b9150600101610d39565b506000816001600160401b03811115610e1a57610e1a614073565b604051908082528060200260200182016040528015610e43578160200160208202803683370190505b5090506000805b8451811015610fec576000858281518110610e6757610e67614b11565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f009190614b5c565b905060005b81811015610fe1576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015610f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9e9190614bd6565b60000151868681518110610fb457610fb4614b11565b6001600160a01b039092166020928302919091019091015284610fd681614c17565b955050600101610f05565b505050600101610e4a565b5090979650505050505050565b6110016137bc565b61100a81613816565b50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561106b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108f9190614c30565b6001600160a01b0316336001600160a01b03161461113b5760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a401610778565b61100a8161387f565b61100a8134610758565b604080518082019091526060808252602082015260008260400151516040518060400160405280600181526020016000815250511480156111aa57508260a0015151604051806040016040528060018152602001600081525051145b80156111d157508260c0015151604051806040016040528060018152602001600081525051145b80156111f857508260e0015151604051806040016040528060018152602001600081525051145b6112625760405162461bcd60e51b815260206004820152604160248201526000805160206151d483398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a401610778565b825151602084015151146112da5760405162461bcd60e51b8152602060048201526044602482018190526000805160206151d4833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a401610778565b4363ffffffff168463ffffffff16106113495760405162461bcd60e51b815260206004820152603c60248201526000805160206151d483398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b000000006064820152608401610778565b60408051808201825260008082526020808301829052835180850185526060808252818301528451808601865260018082529083019390935284518381528086019095529293919082810190803683370190505060208281019190915260408051808201825260018082526000919093015280518281528082019091529081602001602082028036833701905050815260408051808201909152606080825260208201528560200151516001600160401b0381111561140a5761140a614073565b604051908082528060200260200182016040528015611433578160200160208202803683370190505b5081526020860151516001600160401b0381111561145357611453614073565b60405190808252806020026020018201604052801561147c578160200160208202803683370190505b508160200181905250600061152860405180604001604052806001815260200160008152507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115239190614b9e565b6138c6565b905060005b8760200151518110156117b9576115728860200151828151811061155357611553614b11565b6020026020010151805160009081526020918201519091526040902090565b8360200151828151811061158857611588614b11565b602090810291909101015280156116485760208301516115a9600183614b49565b815181106115b9576115b9614b11565b602002602001015160001c836020015182815181106115da576115da614b11565b602002602001015160001c11611648576040805162461bcd60e51b81526020600482015260248101919091526000805160206151d483398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f727465646064820152608401610778565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec63518460200151838151811061168d5761168d614b11565b60200260200101518b8b6000015185815181106116ac576116ac614b11565b60200260200101516040518463ffffffff1660e01b81526004016116e99392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015611706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172a9190614b75565b6001600160c01b03168360000151828151811061174957611749614b11565b6020026020010181815250506117af6109ff611783848660000151858151811061177557611775614b11565b602002602001015116613959565b8a60200151848151811061179957611799614b11565b602002602001015161398490919063ffffffff16565b945060010161152d565b50506117c483613a67565b60975490935060ff166000816117db57600061185d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d9190614b5c565b905060005b604051806040016040528060018152602001600081525051811015611f535782156119ee578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c42604051806040016040528060018152602001600081525085815181106118e6576118e6614b11565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa15801561192a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194e9190614b5c565b6119589190614ae3565b116119ee5760405162461bcd60e51b815260206004820152606660248201526000805160206151d483398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c401610778565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac60405180604001604052806001815260200160008152508381518110611a4557611a45614b11565b602001015160f81c60f81b60f81c8c8c60a001518581518110611a6a57611a6a614b11565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611ac6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aea9190614c4d565b6001600160401b031916611b0d8a60400151838151811061155357611553614b11565b67ffffffffffffffff191614611ba95760405162461bcd60e51b815260206004820152606160248201526000805160206151d483398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c401610778565b611bd989604001518281518110611bc257611bc2614b11565b6020026020010151876132fc90919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c5660405180604001604052806001815260200160008152508381518110611c3257611c32614b11565b602001015160f81c60f81b60f81c8c8c60c001518581518110611c5757611c57614b11565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611cb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd79190614c78565b85602001518281518110611ced57611ced614b11565b6001600160601b03909216602092830291909101820152850151805182908110611d1957611d19614b11565b602002602001015185600001518281518110611d3757611d37614b11565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015611f4957611dc686600001518281518110611d8157611d81614b11565b602002602001015160405180604001604052806001815260200160008152508581518110611db157611db1614b11565b016020015160f81c60ff161c60019081161490565b15611f41577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae60405180604001604052806001815260200160008152508581518110611e2257611e22614b11565b602001015160f81c60f81b60f81c8e89602001518581518110611e4757611e47614b11565b60200260200101518f60e001518881518110611e6557611e65614b11565b60200260200101518781518110611e7e57611e7e614b11565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa158015611ee2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f069190614c78565b8751805185908110611f1a57611f1a614b11565b60200260200101818151611f2e9190614c95565b6001600160601b03169052506001909101905b600101611d5b565b5050600101611862565b505050600080611f6d8a868a606001518b608001516108e4565b9150915081611fde5760405162461bcd60e51b815260206004820152604360248201526000805160206151d483398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a401610778565b8061203f5760405162461bcd60e51b815260206004820152603960248201526000805160206151d483398151915260448201527f7265733a207369676e617475726520697320696e76616c6964000000000000006064820152608401610778565b5050600087826020015160405160200161205a929190614cbc565b60408051808303601f1901815291905280516020909101209299929850919650505050505050565b61208a6137bc565b6120946000613b02565b565b600054600290610100900460ff161580156120b8575060005460ff8083169116105b6120d45760405162461bcd60e51b815260040161077890614d04565b6000805461ffff191660ff8316176101001790556120f182612e05565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6000818484604051612149929190614d52565b60405180910390201490509392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146121a35760405162461bcd60e51b815260040161077890614d62565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d906121f19085908590600401614e20565b600060405180830381600087803b15801561220b57600080fd5b505af115801561221f573d6000803e3d6000fd5b505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461226f5760405162461bcd60e51b815260040161077890614d62565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da906024015b600060405180830381600087803b1580156122d357600080fd5b505af11580156122e7573d6000803e3d6000fd5b5050505050565b6122f66137bc565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb355906122b9908490600401614e6b565b60cb546001600160a01b031633146123825760cb54604051632cbe419560e01b81523360048201526001600160a01b039091166024820152604401610778565b60005a90506000848460405160200161239c929190614af6565b60408051601f198184030181529181528151602092830120600081815260c990935290822080549193509163ffffffff90911690036123f1576040516311cb69a760e11b815260048101839052602401610778565b8054640100000000900460ff161561241f57604051634e78d7f960e11b815260048101839052602401610778565b805464ff00000000191664010000000017815560018101546001600160a01b038616600090815260ca602052604090205410156124a25760018101546001600160a01b038616600081815260ca602052604090819020549051632e2a182f60e11b8152600481019290925260248201929092526044810191909152606401610778565b80546000906124b990849063ffffffff168761114e565b509050604360ff1681602001516000815181106124d8576124d8614b11565b60200260200101516124ea9190614e7e565b6001600160601b03166064826000015160008151811061250c5761250c614b11565b60200260200101516001600160601b03166125279190614ea1565b10156125ba576064816000015160008151811061254657612546614b11565b60200260200101516001600160601b03166125619190614ea1565b604360ff16826020015160008151811061257d5761257d614b11565b602002602001015161258f9190614e7e565b60405163530f5c4560e11b815260048101929092526001600160601b03166024820152604401610778565b6040516001600160a01b038716815287907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260003a5a6126069087614b49565b6126139062011170614ae3565b61261d9190614ea1565b9050826001015481111561265457600183015460405163437e283f60e11b8152600481019190915260248101829052604401610778565b6001600160a01b038716600090815260ca60205260408120805483929061267c908490614b49565b90915550506001600160a01b038716600081815260ca60209081526040918290205491519182526000805160206151b4833981519152910160405180910390a260cb546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156126f6573d6000803e3d6000fd5b505050505050505050565b600054610100900460ff16158080156127215750600054600160ff909116105b8061273b5750303b15801561273b575060005460ff166001145b6127575760405162461bcd60e51b815260040161077890614d04565b6000805460ff19166001179055801561277a576000805461ff0019166101001790555b6127848484613b54565b60cb80546001600160a01b0319166001600160a01b03841617905580156127e5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60008433604051602001612800929190614af6565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff161561284f57604051630c40bc4360e21b815260048101829052602401610778565b34156128ac5733600090815260ca602052604081208054349290612874908490614ae3565b909155505033600081815260ca60209081526040918290205491519182526000805160206151b4833981519152910160405180910390a25b33600090815260ca60205260409020548211156128fd5733600081815260ca602052604090819020549051632e2a182f60e11b81526004810192909252602482018490526044820152606401610778565b604080516060810182526000602080830182815263ffffffff43818116865285870189815288865260c99094529386902085518154935115156401000000000264ffffffffff1990941692169190911791909117815590516001909101559151909187917f130d3e81af62e03ed6fff5e3bb343695ec513892cfad24d286486745dcc6143791612993913391908a908a90614ee1565b60405180910390a2857f8801fc966deb2c8f563a103c35c9e80740585c292cd97518587e6e7927e6af5533438888886040516129d3959493929190614f1c565b60405180910390a2505050505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a699190614b9e565b60ff16905080600003612a8a57505060408051600081526020810190915290565b6000805b82811015612b3557604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612afd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b219190614b5c565b612b2b9083614ae3565b9150600101612a8e565b506000816001600160401b03811115612b5057612b50614073565b604051908082528060200260200182016040528015612b79578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c029190614b9e565b60ff16811015612d8557604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612c76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9a9190614b5c565b905060005b81811015612d7b576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015612d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d389190614bd6565b60000151858581518110612d4e57612d4e614b11565b6001600160a01b039092166020928302919091019091015283612d7081614c17565b945050600101612c9f565b5050600101612b80565b5090949350505050565b612d976137bc565b6001600160a01b038116612dfc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610778565b61100a81613b02565b612e0d6137bc565b60cb80546001600160a01b0319166001600160a01b0392909216919091179055565b6040516306045a9160e01b815260009030906306045a9190612e63908b908b908b908b908b908b908b908b90600401614f5f565b602060405180830381865afa158015612e80573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d89190614fc1565b6065546001600160a01b03163314612f395760405162461bcd60e51b815260206004820152604c60248201527f536572766963654d616e61676572426173652e6f6e6c7952657761726473496e60448201527f69746961746f723a2063616c6c6572206973206e6f742074686520726577617260648201526b32399034b734ba34b0ba37b960a11b608482015260a401610778565b60005b8181101561320457828282818110612f5657612f56614b11565b9050602002810190612f689190614fde565b612f79906040810190602001614353565b6001600160a01b03166323b872dd3330868686818110612f9b57612f9b614b11565b9050602002810190612fad9190614fde565b604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152013560448201526064016020604051808303816000875af1158015613004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130289190614fc1565b50600083838381811061303d5761303d614b11565b905060200281019061304f9190614fde565b613060906040810190602001614353565b604051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa1580156130ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f29190614b5c565b905083838381811061310657613106614b11565b90506020028101906131189190614fde565b613129906040810190602001614353565b6001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000008387878781811061316b5761316b614b11565b905060200281019061317d9190614fde565b6040013561318b9190614ae3565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156131d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fa9190614fc1565b5050600101612f3c565b5060405163fce36c7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fce36c7d906121f19085908590600401615064565b600083613261868585613bd1565b1495945050505050565b6040805180820190915260008082526020820152613287613f81565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa905080806132b657fe5b50806132f45760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610778565b505092915050565b6040805180820190915260008082526020820152613318613f9f565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808061335357fe5b50806132f45760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610778565b613399613fbd565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201909152600080825260208201526000808061348160008051602061519483398151915286614b27565b90505b61348d81613cce565b909350915060008051602061519483398151915282830983036134c6576040805180820190915290815260208101919091529392505050565b600080516020615194833981519152600182089050613484565b604080518082018252868152602080820186905282518084019093528683528201849052600091829190613512613fe2565b60005b60028110156136cd57600061352b826006614ea1565b905084826002811061353f5761353f614b11565b60200201515183613551836000614ae3565b600c811061356157613561614b11565b602002015284826002811061357857613578614b11565b6020020151602001518382600161358f9190614ae3565b600c811061359f5761359f614b11565b60200201528382600281106135b6576135b6614b11565b60200201515151836135c9836002614ae3565b600c81106135d9576135d9614b11565b60200201528382600281106135f0576135f0614b11565b6020020151516001602002015183613609836003614ae3565b600c811061361957613619614b11565b602002015283826002811061363057613630614b11565b60200201516020015160006002811061364b5761364b614b11565b60200201518361365c836004614ae3565b600c811061366c5761366c614b11565b602002015283826002811061368357613683614b11565b60200201516020015160016002811061369e5761369e614b11565b6020020151836136af836005614ae3565b600c81106136bf576136bf614b11565b602002015250600101613515565b506136d6614001565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606060008061370884613959565b61ffff166001600160401b0381111561372357613723614073565b6040519080825280601f01601f19166020018201604052801561374d576020820181803683370190505b5090506000805b825182108015613765575061010081105b15612d85576001811b9350858416156137ac578060f81b83838151811061378e5761378e614b11565b60200101906001600160f81b031916908160001a9053508160010191505b6137b581614c17565b9050613754565b6033546001600160a01b031633146120945760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610778565b606554604080516001600160a01b03928316815291831660208301527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b6000806138d284613d50565b9050808360ff166001901b116139505760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610778565b90505b92915050565b6000805b82156139535761396e600184614b49565b909216918061397c81615172565b91505061395d565b60408051808201909152600080825260208201526102008261ffff16106139e05760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b6044820152606401610778565b8161ffff166001036139f3575081613953565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610613a5c57600161ffff871660ff83161c81169003613a3f57613a3c84846132fc565b93505b613a4983846132fc565b92506201fffe600192831b169101613a0f565b509195945050505050565b60408051808201909152600080825260208201528151158015613a8c57506020820151155b15613aaa575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206151948339815191528460200151613add9190614b27565b613af590600080516020615194833981519152614b49565b905292915050565b919050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613bbf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610778565b613bc882613b02565b610b4281613816565b600060208451613be19190614b27565b15613c685760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a401610778565b8260205b85518111610d1657613c7f600285614b27565b600003613ca357816000528086015160205260406000209150600284049350613cbc565b8086015160005281602052604060002091506002840493505b613cc7602082614ae3565b9050613c6c565b60008080600080516020615194833981519152600360008051602061519483398151915286600080516020615194833981519152888909090890506000613d44827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615194833981519152613ed8565b91959194509092505050565b600061010082511115613dd95760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610778565b8151600003613dea57506000919050565b60008083600081518110613e0057613e00614b11565b0160200151600160f89190911c81901b92505b8451811015613ecf57848181518110613e2e57613e2e614b11565b0160200151600160f89190911c1b9150828211613ec35760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610778565b91811791600101613e13565b50909392505050565b600080613ee3614001565b613eeb61401f565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280613f2857fe5b5082613f765760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610778565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613fd061403d565b8152602001613fdd61403d565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356001600160601b031981168114613afd57600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156140ab576140ab614073565b60405290565b60405161010081016001600160401b03811182821017156140ab576140ab614073565b604051601f8201601f191681016001600160401b03811182821017156140fc576140fc614073565b604052919050565b60006001600160401b0383111561411d5761411d614073565b614130601f8401601f19166020016140d4565b905082815283838301111561414457600080fd5b828260208301376000602084830101529392505050565b600082601f83011261416c57600080fd5b61417b83833560208501614104565b9392505050565b6001600160a01b038116811461100a57600080fd5b600080600080600080600080610100898b0312156141b457600080fd5b8835975060208901359650604089013595506141d260608a0161405b565b94506080890135935060a08901356001600160401b038111156141f457600080fd5b6142008b828c0161415b565b93505060c0890135915060e089013561421881614182565b809150509295985092959890939650565b60006040828403121561423b57600080fd5b614243614089565b9050813581526020820135602082015292915050565b600082601f83011261426a57600080fd5b614272614089565b80604084018581111561428457600080fd5b845b8181101561429e578035845260209384019301614286565b509095945050505050565b6000608082840312156142bb57600080fd5b6142c3614089565b90506142cf8383614259565b81526142de8360408401614259565b602082015292915050565b600080600080610120858703121561430057600080fd5b843593506143118660208701614229565b925061432086606087016142a9565b915061432f8660e08701614229565b905092959194509250565b60006020828403121561434c57600080fd5b5035919050565b60006020828403121561436557600080fd5b813561395081614182565b6020808252825182820181905260009190848201906040850190845b818110156143b15783516001600160a01b03168352928401929184019160010161438c565b50909695505050505050565b801515811461100a57600080fd5b6000602082840312156143dd57600080fd5b8135613950816143bd565b803563ffffffff81168114613afd57600080fd5b60006001600160401b0382111561441557614415614073565b5060051b60200190565b600082601f83011261443057600080fd5b81356020614445614440836143fc565b6140d4565b8083825260208201915060208460051b87010193508684111561446757600080fd5b602086015b8481101561448a5761447d816143e8565b835291830191830161446c565b509695505050505050565b600082601f8301126144a657600080fd5b813560206144b6614440836143fc565b8083825260208201915060208460061b8701019350868411156144d857600080fd5b602086015b8481101561448a576144ef8882614229565b8352918301916040016144dd565b600082601f83011261450e57600080fd5b8135602061451e614440836143fc565b82815260059290921b8401810191818101908684111561453d57600080fd5b8286015b8481101561448a5780356001600160401b038111156145605760008081fd5b61456e8986838b010161441f565b845250918301918301614541565b6000610180828403121561458f57600080fd5b6145976140b1565b905081356001600160401b03808211156145b057600080fd5b6145bc8583860161441f565b835260208401359150808211156145d257600080fd5b6145de85838601614495565b602084015260408401359150808211156145f757600080fd5b61460385838601614495565b604084015261461585606086016142a9565b60608401526146278560e08601614229565b608084015261012084013591508082111561464157600080fd5b61464d8583860161441f565b60a084015261014084013591508082111561466757600080fd5b6146738583860161441f565b60c084015261016084013591508082111561468d57600080fd5b5061469a848285016144fd565b60e08301525092915050565b6000806000606084860312156146bb57600080fd5b833592506146cb602085016143e8565b915060408401356001600160401b038111156146e657600080fd5b6146f28682870161457c565b9150509250925092565b60008151808452602080850194506020840160005b838110156147365781516001600160601b031687529582019590820190600101614711565b509495945050505050565b604081526000835160408084015261475c60808401826146fc565b90506020850151603f1984830301606085015261477982826146fc565b925050508260208301529392505050565b60008083601f84011261479c57600080fd5b5081356001600160401b038111156147b357600080fd5b6020830191508360208285010111156147cb57600080fd5b9250929050565b6000806000604084860312156147e757600080fd5b83356001600160401b038111156147fd57600080fd5b6148098682870161478a565b909790965060209590950135949350505050565b6000806040838503121561483057600080fd5b823561483b81614182565b915060208301356001600160401b038082111561485757600080fd5b908401906060828703121561486b57600080fd5b60405160608101818110838211171561488657614886614073565b60405282358281111561489857600080fd5b6148a48882860161415b565b82525060208301356020820152604083013560408201528093505050509250929050565b6000602082840312156148da57600080fd5b81356001600160401b038111156148f057600080fd5b8201601f8101841361490157600080fd5b61491084823560208401614104565b949350505050565b60008060006060848603121561492d57600080fd5b8335925060208401356146cb81614182565b60008060006060848603121561495457600080fd5b833561495f81614182565b9250602084013561496f81614182565b9150604084013561497f81614182565b809150509250925092565b600080600080606085870312156149a057600080fd5b8435935060208501356001600160401b038111156149bd57600080fd5b6149c98782880161478a565b9598909750949560400135949350505050565b600080600080600080600060e0888a0312156149f757600080fd5b873596506020880135955060408801359450614a156060890161405b565b93506080880135925060a08801356001600160401b03811115614a3757600080fd5b614a438a828b0161415b565b92505060c0880135905092959891949750929550565b60008060208385031215614a6c57600080fd5b82356001600160401b0380821115614a8357600080fd5b818501915085601f830112614a9757600080fd5b813581811115614aa657600080fd5b8660208260051b8501011115614abb57600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561395357613953614acd565b91825260601b6001600160601b031916602082015260340190565b634e487b7160e01b600052603260045260246000fd5b600082614b4457634e487b7160e01b600052601260045260246000fd5b500690565b8181038181111561395357613953614acd565b600060208284031215614b6e57600080fd5b5051919050565b600060208284031215614b8757600080fd5b81516001600160c01b038116811461395057600080fd5b600060208284031215614bb057600080fd5b815160ff8116811461395057600080fd5b6001600160601b038116811461100a57600080fd5b600060408284031215614be857600080fd5b614bf0614089565b8251614bfb81614182565b81526020830151614c0b81614bc1565b60208201529392505050565b600060018201614c2957614c29614acd565b5060010190565b600060208284031215614c4257600080fd5b815161395081614182565b600060208284031215614c5f57600080fd5b815167ffffffffffffffff198116811461395057600080fd5b600060208284031215614c8a57600080fd5b815161395081614bc1565b6001600160601b03828116828216039080821115614cb557614cb5614acd565b5092915050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015614cf757815185529382019390820190600101614cdb565b5092979650505050505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b8183823760009101908152919050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015614e0057602081850181015186830182015201614de4565b506000602082860101526020601f19601f83011685010191505092915050565b60018060a01b0383168152604060208201526000825160606040840152614e4a60a0840182614dda565b90506020840151606084015260408401516080840152809150509392505050565b60208152600061417b6020830184614dda565b6001600160601b038181168382160280821691908281146132f4576132f4614acd565b808202811582820484141761395357613953614acd565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038516815263ffffffff84166020820152606060408201819052600090614f129083018486614eb8565b9695505050505050565b6001600160a01b038616815263ffffffff85166020820152608060408201819052600090614f4d9083018587614eb8565b90508260608301529695505050505050565b60006101008a83528960208401528860408401526001600160601b0319881660608401528660808401528060a0840152614f9b81840187614dda565b60c084019590955250506001600160a01b039190911660e0909101529695505050505050565b600060208284031215614fd357600080fd5b8151613950816143bd565b60008235609e19833603018112614ff457600080fd5b9190910192915050565b8035613afd81614182565b8183526000602080850194508260005b8581101561473657813561502c81614182565b6001600160a01b031687528183013561504481614bc1565b6001600160601b0316878401526040968701969190910190600101615019565b60208082528181018390526000906040808401600586901b8501820187855b8881101561516457878303603f190184528135368b9003609e190181126150a957600080fd5b8a0160a0813536839003601e190181126150c257600080fd5b820188810190356001600160401b038111156150dd57600080fd5b8060061b36038213156150ef57600080fd5b8287526150ff8388018284615009565b9250505061510e888301614ffe565b6001600160a01b031688860152818701358786015260606151308184016143e8565b63ffffffff169086015260806151478382016143e8565b63ffffffff16950194909452509285019290850190600101615083565b509098975050505050505050565b600061ffff80831681810361518957615189614acd565b600101939250505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0424c535369676e6174757265436865636b65722e636865636b5369676e617475a26469706673582212207bebe605db37bc08c9e9e45bfd6ec5d1c229f929c7f0eec3285c426ff557481a64736f6c63430008180033","sourceMap":"847:9633:116:-:0;;;1134:455;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1590:30:74;;;;;1630:42;;;;;1682:44;;;;;1736:32;;;;1360:21:116;1423:14;1451:20;1360:21;1520:15;2276:22:73::1;:20;:22::i;:::-;1894:411:::0;;;;1793:20:67;-1:-1:-1;;;;;1771:42:67;;;-1:-1:-1;;;;;1771:42:67;;;;;1839:20;-1:-1:-1;;;;;1839:34:67;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1823:52:67;;;-1:-1:-1;;;;;1823:52:67;;;;;1902:20;-1:-1:-1;;;;;1902:35:67;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1885:54:67;;;-1:-1:-1;;;;;1885:54:67;;;;;1962:13;;-1:-1:-1;;;;;1962:24:67;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1949:39:67;;;-1:-1:-1;1560:22:116::2;:20;:22::i;:::-;1134:455:::0;;;;847:9633;;5388:279:40;5456:13;;;;;;;5455:14;5447:66;;;;-1:-1:-1;;;5447:66:40;;2079:2:119;5447:66:40;;;2061:21:119;2118:2;2098:18;;;2091:30;2157:34;2137:18;;;2130:62;-1:-1:-1;;;2208:18:119;;;2201:37;2255:19;;5447:66:40;;;;;;;;5527:12;;5542:15;5527:12;;;:30;5523:138;;;5573:12;:30;;-1:-1:-1;;5573:30:40;5588:15;5573:30;;;;;;5622:28;;2427:36:119;;;5622:28:40;;2415:2:119;2400:18;5622:28:40;;;;;;;5523:138;5388:279::o;14:146:119:-;-1:-1:-1;;;;;104:31:119;;94:42;;84:70;;150:1;147;140:12;84:70;14:146;:::o;165:818::-;366:6;374;382;390;443:3;431:9;422:7;418:23;414:33;411:53;;;460:1;457;450:12;411:53;492:9;486:16;511:46;551:5;511:46;:::i;:::-;626:2;611:18;;605:25;576:5;;-1:-1:-1;639:48:119;605:25;639:48;:::i;:::-;758:2;743:18;;737:25;706:7;;-1:-1:-1;771:48:119;737:25;771:48;:::i;:::-;890:2;875:18;;869:25;838:7;;-1:-1:-1;903:48:119;869:25;903:48;:::i;:::-;165:818;;;;-1:-1:-1;165:818:119;;-1:-1:-1;;165:818:119:o;988:290::-;1082:6;1135:2;1123:9;1114:7;1110:23;1106:32;1103:52;;;1151:1;1148;1141:12;1103:52;1183:9;1177:16;1202:46;1242:5;1202:46;:::i;:::-;1267:5;988:290;-1:-1:-1;;;988:290:119:o;2285:184::-;847:9633:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101fd5760003560e01c806395c6d6041161010d578063d66eaabd116100a0578063f474b5201161006f578063f474b520146106ab578063f9120af6146106d8578063fa534dc0146106f8578063fc299dee14610718578063fce36c7d1461073857600080fd5b8063d66eaabd1461062f578063df5cf72314610642578063e481af9d14610676578063f2fde38b1461068b57600080fd5b8063ab21739a116100dc578063ab21739a1461056b578063b099627e1461058b578063b98d0908146105f5578063c0c53b8b1461060f57600080fd5b806395c6d604146104eb5780639926ee7d1461050b578063a364f4da1461052b578063a98fb3551461054b57600080fd5b80634ae07c37116101905780636d14a9871161015f5780636d14a9871461042057806370a0823114610454578063715018a614610498578063800fb61f146104ad5780638da5cb5b146104cd57600080fd5b80634ae07c37146103575780635df459461461038557806368304835146103b95780636b3aa72e146103ed57600080fd5b80633bc28c8c116101cc5780633bc28c8c146102cc578063416c7e5e146102ec5780634223d5511461030c5780634a5bf6321461031f57600080fd5b806306045a9114610213578063171f1d5b146102485780632e1a7d4d1461027f57806333cfb7b71461029f57600080fd5b3661020e5761020c3334610758565b005b600080fd5b34801561021f57600080fd5b5061023361022e366004614197565b6107ed565b60405190151581526020015b60405180910390f35b34801561025457600080fd5b506102686102633660046142e9565b6108e4565b60408051921515835290151560208301520161023f565b34801561028b57600080fd5b5061020c61029a36600461433a565b610a6e565b3480156102ab57600080fd5b506102bf6102ba366004614353565b610b46565b60405161023f9190614370565b3480156102d857600080fd5b5061020c6102e7366004614353565b610ff9565b3480156102f857600080fd5b5061020c6103073660046143cb565b61100d565b61020c61031a366004614353565b611144565b34801561032b57600080fd5b5060cb5461033f906001600160a01b031681565b6040516001600160a01b03909116815260200161023f565b34801561036357600080fd5b506103776103723660046146a6565b61114e565b60405161023f929190614741565b34801561039157600080fd5b5061033f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c557600080fd5b5061033f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f957600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061033f565b34801561042c57600080fd5b5061033f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561046057600080fd5b5061048a61046f366004614353565b6001600160a01b0316600090815260ca602052604090205490565b60405190815260200161023f565b3480156104a457600080fd5b5061020c612082565b3480156104b957600080fd5b5061020c6104c8366004614353565b612096565b3480156104d957600080fd5b506033546001600160a01b031661033f565b3480156104f757600080fd5b506102336105063660046147d2565b612136565b34801561051757600080fd5b5061020c61052636600461481d565b61215b565b34801561053757600080fd5b5061020c610546366004614353565b612227565b34801561055757600080fd5b5061020c6105663660046148c8565b6122ee565b34801561057757600080fd5b5061020c610586366004614918565b612342565b34801561059757600080fd5b506105d36105a636600461433a565b60c9602052600090815260409020805460019091015463ffffffff821691640100000000900460ff169083565b6040805163ffffffff909416845291151560208401529082015260600161023f565b34801561060157600080fd5b506097546102339060ff1681565b34801561061b57600080fd5b5061020c61062a36600461493f565b612701565b61020c61063d36600461498a565b6127eb565b34801561064e57600080fd5b5061033f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561068257600080fd5b506102bf6129e3565b34801561069757600080fd5b5061020c6106a6366004614353565b612d8f565b3480156106b757600080fd5b5061048a6106c6366004614353565b60ca6020526000908152604090205481565b3480156106e457600080fd5b5061020c6106f3366004614353565b612e05565b34801561070457600080fd5b506102336107133660046149dc565b612e2f565b34801561072457600080fd5b5060655461033f906001600160a01b031681565b34801561074457600080fd5b5061020c610753366004614a59565b612ea4565b8060000361078157604051632097692160e11b8152600481018290526024015b60405180910390fd5b6001600160a01b038216600090815260ca6020526040812080548392906107a9908490614ae3565b90915550506001600160a01b038216600081815260ca60209081526040918290205491519182526000805160206151b4833981519152910160405180910390a25050565b6000806001600160a01b038316610805575084610831565b8583604051602001610818929190614af6565b6040516020818303038152906040528051906020012090505b600081815260c9602052604081205463ffffffff1690036108565760009150506108d8565b600081815260c96020526040902054640100000000900460ff1661087e5760009150506108d8565b60408051602081018c90529081018a9052606081018990526001600160601b03198816608082015260009060940160408051601f19818403018152919052805160208201209091506108d287898389613253565b93505050505b98975050505050505050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018787600001518860200151886000015160006002811061092c5761092c614b11565b60200201518951600160200201518a6020015160006002811061095157610951614b11565b60200201518b6020015160016002811061096d5761096d614b11565b602090810291909101518c518d8301516040516109ca9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c6109ed9190614b27565b9050610a60610a066109ff888461326b565b86906132fc565b610a0e613391565b610a56610a4785610a41604080518082018252600080825260209182015281518083019092526001825260029082015290565b9061326b565b610a508c613451565b906132fc565b886201d4c06134e0565b909890975095505050505050565b33600090815260ca6020526040902054811115610abf5733600081815260ca602052604090819020549051632e2a182f60e11b81526004810192909252602482018390526044820152606401610778565b33600090815260ca602052604081208054839290610ade908490614b49565b909155505033600081815260ca60209081526040918290205491519182526000805160206151b4833981519152910160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015610b42573d6000803e3d6000fd5b5050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90602401602060405180830381865afa158015610bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd69190614b5c565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa158015610c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c659190614b75565b90506001600160c01b0381161580610cff57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfa9190614b9e565b60ff16155b15610d1f5760408051600080825260208201909252905b50949350505050565b6000610d33826001600160c01b03166136fa565b90506000805b8251811015610dff577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f5848381518110610d8357610d83614b11565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610deb9190614b5c565b610df59083614ae3565b9150600101610d39565b506000816001600160401b03811115610e1a57610e1a614073565b604051908082528060200260200182016040528015610e43578160200160208202803683370190505b5090506000805b8451811015610fec576000858281518110610e6757610e67614b11565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f009190614b5c565b905060005b81811015610fe1576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015610f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9e9190614bd6565b60000151868681518110610fb457610fb4614b11565b6001600160a01b039092166020928302919091019091015284610fd681614c17565b955050600101610f05565b505050600101610e4a565b5090979650505050505050565b6110016137bc565b61100a81613816565b50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561106b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108f9190614c30565b6001600160a01b0316336001600160a01b03161461113b5760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a401610778565b61100a8161387f565b61100a8134610758565b604080518082019091526060808252602082015260008260400151516040518060400160405280600181526020016000815250511480156111aa57508260a0015151604051806040016040528060018152602001600081525051145b80156111d157508260c0015151604051806040016040528060018152602001600081525051145b80156111f857508260e0015151604051806040016040528060018152602001600081525051145b6112625760405162461bcd60e51b815260206004820152604160248201526000805160206151d483398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a401610778565b825151602084015151146112da5760405162461bcd60e51b8152602060048201526044602482018190526000805160206151d4833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a401610778565b4363ffffffff168463ffffffff16106113495760405162461bcd60e51b815260206004820152603c60248201526000805160206151d483398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b000000006064820152608401610778565b60408051808201825260008082526020808301829052835180850185526060808252818301528451808601865260018082529083019390935284518381528086019095529293919082810190803683370190505060208281019190915260408051808201825260018082526000919093015280518281528082019091529081602001602082028036833701905050815260408051808201909152606080825260208201528560200151516001600160401b0381111561140a5761140a614073565b604051908082528060200260200182016040528015611433578160200160208202803683370190505b5081526020860151516001600160401b0381111561145357611453614073565b60405190808252806020026020018201604052801561147c578160200160208202803683370190505b508160200181905250600061152860405180604001604052806001815260200160008152507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115239190614b9e565b6138c6565b905060005b8760200151518110156117b9576115728860200151828151811061155357611553614b11565b6020026020010151805160009081526020918201519091526040902090565b8360200151828151811061158857611588614b11565b602090810291909101015280156116485760208301516115a9600183614b49565b815181106115b9576115b9614b11565b602002602001015160001c836020015182815181106115da576115da614b11565b602002602001015160001c11611648576040805162461bcd60e51b81526020600482015260248101919091526000805160206151d483398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f727465646064820152608401610778565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec63518460200151838151811061168d5761168d614b11565b60200260200101518b8b6000015185815181106116ac576116ac614b11565b60200260200101516040518463ffffffff1660e01b81526004016116e99392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015611706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172a9190614b75565b6001600160c01b03168360000151828151811061174957611749614b11565b6020026020010181815250506117af6109ff611783848660000151858151811061177557611775614b11565b602002602001015116613959565b8a60200151848151811061179957611799614b11565b602002602001015161398490919063ffffffff16565b945060010161152d565b50506117c483613a67565b60975490935060ff166000816117db57600061185d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d9190614b5c565b905060005b604051806040016040528060018152602001600081525051811015611f535782156119ee578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c42604051806040016040528060018152602001600081525085815181106118e6576118e6614b11565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa15801561192a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194e9190614b5c565b6119589190614ae3565b116119ee5760405162461bcd60e51b815260206004820152606660248201526000805160206151d483398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c401610778565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac60405180604001604052806001815260200160008152508381518110611a4557611a45614b11565b602001015160f81c60f81b60f81c8c8c60a001518581518110611a6a57611a6a614b11565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611ac6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aea9190614c4d565b6001600160401b031916611b0d8a60400151838151811061155357611553614b11565b67ffffffffffffffff191614611ba95760405162461bcd60e51b815260206004820152606160248201526000805160206151d483398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c401610778565b611bd989604001518281518110611bc257611bc2614b11565b6020026020010151876132fc90919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c5660405180604001604052806001815260200160008152508381518110611c3257611c32614b11565b602001015160f81c60f81b60f81c8c8c60c001518581518110611c5757611c57614b11565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611cb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd79190614c78565b85602001518281518110611ced57611ced614b11565b6001600160601b03909216602092830291909101820152850151805182908110611d1957611d19614b11565b602002602001015185600001518281518110611d3757611d37614b11565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015611f4957611dc686600001518281518110611d8157611d81614b11565b602002602001015160405180604001604052806001815260200160008152508581518110611db157611db1614b11565b016020015160f81c60ff161c60019081161490565b15611f41577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae60405180604001604052806001815260200160008152508581518110611e2257611e22614b11565b602001015160f81c60f81b60f81c8e89602001518581518110611e4757611e47614b11565b60200260200101518f60e001518881518110611e6557611e65614b11565b60200260200101518781518110611e7e57611e7e614b11565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa158015611ee2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f069190614c78565b8751805185908110611f1a57611f1a614b11565b60200260200101818151611f2e9190614c95565b6001600160601b03169052506001909101905b600101611d5b565b5050600101611862565b505050600080611f6d8a868a606001518b608001516108e4565b9150915081611fde5760405162461bcd60e51b815260206004820152604360248201526000805160206151d483398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a401610778565b8061203f5760405162461bcd60e51b815260206004820152603960248201526000805160206151d483398151915260448201527f7265733a207369676e617475726520697320696e76616c6964000000000000006064820152608401610778565b5050600087826020015160405160200161205a929190614cbc565b60408051808303601f1901815291905280516020909101209299929850919650505050505050565b61208a6137bc565b6120946000613b02565b565b600054600290610100900460ff161580156120b8575060005460ff8083169116105b6120d45760405162461bcd60e51b815260040161077890614d04565b6000805461ffff191660ff8316176101001790556120f182612e05565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6000818484604051612149929190614d52565b60405180910390201490509392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146121a35760405162461bcd60e51b815260040161077890614d62565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d906121f19085908590600401614e20565b600060405180830381600087803b15801561220b57600080fd5b505af115801561221f573d6000803e3d6000fd5b505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461226f5760405162461bcd60e51b815260040161077890614d62565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da906024015b600060405180830381600087803b1580156122d357600080fd5b505af11580156122e7573d6000803e3d6000fd5b5050505050565b6122f66137bc565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb355906122b9908490600401614e6b565b60cb546001600160a01b031633146123825760cb54604051632cbe419560e01b81523360048201526001600160a01b039091166024820152604401610778565b60005a90506000848460405160200161239c929190614af6565b60408051601f198184030181529181528151602092830120600081815260c990935290822080549193509163ffffffff90911690036123f1576040516311cb69a760e11b815260048101839052602401610778565b8054640100000000900460ff161561241f57604051634e78d7f960e11b815260048101839052602401610778565b805464ff00000000191664010000000017815560018101546001600160a01b038616600090815260ca602052604090205410156124a25760018101546001600160a01b038616600081815260ca602052604090819020549051632e2a182f60e11b8152600481019290925260248201929092526044810191909152606401610778565b80546000906124b990849063ffffffff168761114e565b509050604360ff1681602001516000815181106124d8576124d8614b11565b60200260200101516124ea9190614e7e565b6001600160601b03166064826000015160008151811061250c5761250c614b11565b60200260200101516001600160601b03166125279190614ea1565b10156125ba576064816000015160008151811061254657612546614b11565b60200260200101516001600160601b03166125619190614ea1565b604360ff16826020015160008151811061257d5761257d614b11565b602002602001015161258f9190614e7e565b60405163530f5c4560e11b815260048101929092526001600160601b03166024820152604401610778565b6040516001600160a01b038716815287907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260003a5a6126069087614b49565b6126139062011170614ae3565b61261d9190614ea1565b9050826001015481111561265457600183015460405163437e283f60e11b8152600481019190915260248101829052604401610778565b6001600160a01b038716600090815260ca60205260408120805483929061267c908490614b49565b90915550506001600160a01b038716600081815260ca60209081526040918290205491519182526000805160206151b4833981519152910160405180910390a260cb546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156126f6573d6000803e3d6000fd5b505050505050505050565b600054610100900460ff16158080156127215750600054600160ff909116105b8061273b5750303b15801561273b575060005460ff166001145b6127575760405162461bcd60e51b815260040161077890614d04565b6000805460ff19166001179055801561277a576000805461ff0019166101001790555b6127848484613b54565b60cb80546001600160a01b0319166001600160a01b03841617905580156127e5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60008433604051602001612800929190614af6565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff161561284f57604051630c40bc4360e21b815260048101829052602401610778565b34156128ac5733600090815260ca602052604081208054349290612874908490614ae3565b909155505033600081815260ca60209081526040918290205491519182526000805160206151b4833981519152910160405180910390a25b33600090815260ca60205260409020548211156128fd5733600081815260ca602052604090819020549051632e2a182f60e11b81526004810192909252602482018490526044820152606401610778565b604080516060810182526000602080830182815263ffffffff43818116865285870189815288865260c99094529386902085518154935115156401000000000264ffffffffff1990941692169190911791909117815590516001909101559151909187917f130d3e81af62e03ed6fff5e3bb343695ec513892cfad24d286486745dcc6143791612993913391908a908a90614ee1565b60405180910390a2857f8801fc966deb2c8f563a103c35c9e80740585c292cd97518587e6e7927e6af5533438888886040516129d3959493929190614f1c565b60405180910390a2505050505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a699190614b9e565b60ff16905080600003612a8a57505060408051600081526020810190915290565b6000805b82811015612b3557604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612afd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b219190614b5c565b612b2b9083614ae3565b9150600101612a8e565b506000816001600160401b03811115612b5057612b50614073565b604051908082528060200260200182016040528015612b79578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c029190614b9e565b60ff16811015612d8557604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612c76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9a9190614b5c565b905060005b81811015612d7b576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015612d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d389190614bd6565b60000151858581518110612d4e57612d4e614b11565b6001600160a01b039092166020928302919091019091015283612d7081614c17565b945050600101612c9f565b5050600101612b80565b5090949350505050565b612d976137bc565b6001600160a01b038116612dfc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610778565b61100a81613b02565b612e0d6137bc565b60cb80546001600160a01b0319166001600160a01b0392909216919091179055565b6040516306045a9160e01b815260009030906306045a9190612e63908b908b908b908b908b908b908b908b90600401614f5f565b602060405180830381865afa158015612e80573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d89190614fc1565b6065546001600160a01b03163314612f395760405162461bcd60e51b815260206004820152604c60248201527f536572766963654d616e61676572426173652e6f6e6c7952657761726473496e60448201527f69746961746f723a2063616c6c6572206973206e6f742074686520726577617260648201526b32399034b734ba34b0ba37b960a11b608482015260a401610778565b60005b8181101561320457828282818110612f5657612f56614b11565b9050602002810190612f689190614fde565b612f79906040810190602001614353565b6001600160a01b03166323b872dd3330868686818110612f9b57612f9b614b11565b9050602002810190612fad9190614fde565b604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152013560448201526064016020604051808303816000875af1158015613004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130289190614fc1565b50600083838381811061303d5761303d614b11565b905060200281019061304f9190614fde565b613060906040810190602001614353565b604051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa1580156130ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f29190614b5c565b905083838381811061310657613106614b11565b90506020028101906131189190614fde565b613129906040810190602001614353565b6001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000008387878781811061316b5761316b614b11565b905060200281019061317d9190614fde565b6040013561318b9190614ae3565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156131d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fa9190614fc1565b5050600101612f3c565b5060405163fce36c7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fce36c7d906121f19085908590600401615064565b600083613261868585613bd1565b1495945050505050565b6040805180820190915260008082526020820152613287613f81565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa905080806132b657fe5b50806132f45760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610778565b505092915050565b6040805180820190915260008082526020820152613318613f9f565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808061335357fe5b50806132f45760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610778565b613399613fbd565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201909152600080825260208201526000808061348160008051602061519483398151915286614b27565b90505b61348d81613cce565b909350915060008051602061519483398151915282830983036134c6576040805180820190915290815260208101919091529392505050565b600080516020615194833981519152600182089050613484565b604080518082018252868152602080820186905282518084019093528683528201849052600091829190613512613fe2565b60005b60028110156136cd57600061352b826006614ea1565b905084826002811061353f5761353f614b11565b60200201515183613551836000614ae3565b600c811061356157613561614b11565b602002015284826002811061357857613578614b11565b6020020151602001518382600161358f9190614ae3565b600c811061359f5761359f614b11565b60200201528382600281106135b6576135b6614b11565b60200201515151836135c9836002614ae3565b600c81106135d9576135d9614b11565b60200201528382600281106135f0576135f0614b11565b6020020151516001602002015183613609836003614ae3565b600c811061361957613619614b11565b602002015283826002811061363057613630614b11565b60200201516020015160006002811061364b5761364b614b11565b60200201518361365c836004614ae3565b600c811061366c5761366c614b11565b602002015283826002811061368357613683614b11565b60200201516020015160016002811061369e5761369e614b11565b6020020151836136af836005614ae3565b600c81106136bf576136bf614b11565b602002015250600101613515565b506136d6614001565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606060008061370884613959565b61ffff166001600160401b0381111561372357613723614073565b6040519080825280601f01601f19166020018201604052801561374d576020820181803683370190505b5090506000805b825182108015613765575061010081105b15612d85576001811b9350858416156137ac578060f81b83838151811061378e5761378e614b11565b60200101906001600160f81b031916908160001a9053508160010191505b6137b581614c17565b9050613754565b6033546001600160a01b031633146120945760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610778565b606554604080516001600160a01b03928316815291831660208301527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b6000806138d284613d50565b9050808360ff166001901b116139505760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610778565b90505b92915050565b6000805b82156139535761396e600184614b49565b909216918061397c81615172565b91505061395d565b60408051808201909152600080825260208201526102008261ffff16106139e05760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b6044820152606401610778565b8161ffff166001036139f3575081613953565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610613a5c57600161ffff871660ff83161c81169003613a3f57613a3c84846132fc565b93505b613a4983846132fc565b92506201fffe600192831b169101613a0f565b509195945050505050565b60408051808201909152600080825260208201528151158015613a8c57506020820151155b15613aaa575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206151948339815191528460200151613add9190614b27565b613af590600080516020615194833981519152614b49565b905292915050565b919050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613bbf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610778565b613bc882613b02565b610b4281613816565b600060208451613be19190614b27565b15613c685760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a401610778565b8260205b85518111610d1657613c7f600285614b27565b600003613ca357816000528086015160205260406000209150600284049350613cbc565b8086015160005281602052604060002091506002840493505b613cc7602082614ae3565b9050613c6c565b60008080600080516020615194833981519152600360008051602061519483398151915286600080516020615194833981519152888909090890506000613d44827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615194833981519152613ed8565b91959194509092505050565b600061010082511115613dd95760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610778565b8151600003613dea57506000919050565b60008083600081518110613e0057613e00614b11565b0160200151600160f89190911c81901b92505b8451811015613ecf57848181518110613e2e57613e2e614b11565b0160200151600160f89190911c1b9150828211613ec35760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610778565b91811791600101613e13565b50909392505050565b600080613ee3614001565b613eeb61401f565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280613f2857fe5b5082613f765760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610778565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613fd061403d565b8152602001613fdd61403d565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356001600160601b031981168114613afd57600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156140ab576140ab614073565b60405290565b60405161010081016001600160401b03811182821017156140ab576140ab614073565b604051601f8201601f191681016001600160401b03811182821017156140fc576140fc614073565b604052919050565b60006001600160401b0383111561411d5761411d614073565b614130601f8401601f19166020016140d4565b905082815283838301111561414457600080fd5b828260208301376000602084830101529392505050565b600082601f83011261416c57600080fd5b61417b83833560208501614104565b9392505050565b6001600160a01b038116811461100a57600080fd5b600080600080600080600080610100898b0312156141b457600080fd5b8835975060208901359650604089013595506141d260608a0161405b565b94506080890135935060a08901356001600160401b038111156141f457600080fd5b6142008b828c0161415b565b93505060c0890135915060e089013561421881614182565b809150509295985092959890939650565b60006040828403121561423b57600080fd5b614243614089565b9050813581526020820135602082015292915050565b600082601f83011261426a57600080fd5b614272614089565b80604084018581111561428457600080fd5b845b8181101561429e578035845260209384019301614286565b509095945050505050565b6000608082840312156142bb57600080fd5b6142c3614089565b90506142cf8383614259565b81526142de8360408401614259565b602082015292915050565b600080600080610120858703121561430057600080fd5b843593506143118660208701614229565b925061432086606087016142a9565b915061432f8660e08701614229565b905092959194509250565b60006020828403121561434c57600080fd5b5035919050565b60006020828403121561436557600080fd5b813561395081614182565b6020808252825182820181905260009190848201906040850190845b818110156143b15783516001600160a01b03168352928401929184019160010161438c565b50909695505050505050565b801515811461100a57600080fd5b6000602082840312156143dd57600080fd5b8135613950816143bd565b803563ffffffff81168114613afd57600080fd5b60006001600160401b0382111561441557614415614073565b5060051b60200190565b600082601f83011261443057600080fd5b81356020614445614440836143fc565b6140d4565b8083825260208201915060208460051b87010193508684111561446757600080fd5b602086015b8481101561448a5761447d816143e8565b835291830191830161446c565b509695505050505050565b600082601f8301126144a657600080fd5b813560206144b6614440836143fc565b8083825260208201915060208460061b8701019350868411156144d857600080fd5b602086015b8481101561448a576144ef8882614229565b8352918301916040016144dd565b600082601f83011261450e57600080fd5b8135602061451e614440836143fc565b82815260059290921b8401810191818101908684111561453d57600080fd5b8286015b8481101561448a5780356001600160401b038111156145605760008081fd5b61456e8986838b010161441f565b845250918301918301614541565b6000610180828403121561458f57600080fd5b6145976140b1565b905081356001600160401b03808211156145b057600080fd5b6145bc8583860161441f565b835260208401359150808211156145d257600080fd5b6145de85838601614495565b602084015260408401359150808211156145f757600080fd5b61460385838601614495565b604084015261461585606086016142a9565b60608401526146278560e08601614229565b608084015261012084013591508082111561464157600080fd5b61464d8583860161441f565b60a084015261014084013591508082111561466757600080fd5b6146738583860161441f565b60c084015261016084013591508082111561468d57600080fd5b5061469a848285016144fd565b60e08301525092915050565b6000806000606084860312156146bb57600080fd5b833592506146cb602085016143e8565b915060408401356001600160401b038111156146e657600080fd5b6146f28682870161457c565b9150509250925092565b60008151808452602080850194506020840160005b838110156147365781516001600160601b031687529582019590820190600101614711565b509495945050505050565b604081526000835160408084015261475c60808401826146fc565b90506020850151603f1984830301606085015261477982826146fc565b925050508260208301529392505050565b60008083601f84011261479c57600080fd5b5081356001600160401b038111156147b357600080fd5b6020830191508360208285010111156147cb57600080fd5b9250929050565b6000806000604084860312156147e757600080fd5b83356001600160401b038111156147fd57600080fd5b6148098682870161478a565b909790965060209590950135949350505050565b6000806040838503121561483057600080fd5b823561483b81614182565b915060208301356001600160401b038082111561485757600080fd5b908401906060828703121561486b57600080fd5b60405160608101818110838211171561488657614886614073565b60405282358281111561489857600080fd5b6148a48882860161415b565b82525060208301356020820152604083013560408201528093505050509250929050565b6000602082840312156148da57600080fd5b81356001600160401b038111156148f057600080fd5b8201601f8101841361490157600080fd5b61491084823560208401614104565b949350505050565b60008060006060848603121561492d57600080fd5b8335925060208401356146cb81614182565b60008060006060848603121561495457600080fd5b833561495f81614182565b9250602084013561496f81614182565b9150604084013561497f81614182565b809150509250925092565b600080600080606085870312156149a057600080fd5b8435935060208501356001600160401b038111156149bd57600080fd5b6149c98782880161478a565b9598909750949560400135949350505050565b600080600080600080600060e0888a0312156149f757600080fd5b873596506020880135955060408801359450614a156060890161405b565b93506080880135925060a08801356001600160401b03811115614a3757600080fd5b614a438a828b0161415b565b92505060c0880135905092959891949750929550565b60008060208385031215614a6c57600080fd5b82356001600160401b0380821115614a8357600080fd5b818501915085601f830112614a9757600080fd5b813581811115614aa657600080fd5b8660208260051b8501011115614abb57600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561395357613953614acd565b91825260601b6001600160601b031916602082015260340190565b634e487b7160e01b600052603260045260246000fd5b600082614b4457634e487b7160e01b600052601260045260246000fd5b500690565b8181038181111561395357613953614acd565b600060208284031215614b6e57600080fd5b5051919050565b600060208284031215614b8757600080fd5b81516001600160c01b038116811461395057600080fd5b600060208284031215614bb057600080fd5b815160ff8116811461395057600080fd5b6001600160601b038116811461100a57600080fd5b600060408284031215614be857600080fd5b614bf0614089565b8251614bfb81614182565b81526020830151614c0b81614bc1565b60208201529392505050565b600060018201614c2957614c29614acd565b5060010190565b600060208284031215614c4257600080fd5b815161395081614182565b600060208284031215614c5f57600080fd5b815167ffffffffffffffff198116811461395057600080fd5b600060208284031215614c8a57600080fd5b815161395081614bc1565b6001600160601b03828116828216039080821115614cb557614cb5614acd565b5092915050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015614cf757815185529382019390820190600101614cdb565b5092979650505050505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b8183823760009101908152919050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015614e0057602081850181015186830182015201614de4565b506000602082860101526020601f19601f83011685010191505092915050565b60018060a01b0383168152604060208201526000825160606040840152614e4a60a0840182614dda565b90506020840151606084015260408401516080840152809150509392505050565b60208152600061417b6020830184614dda565b6001600160601b038181168382160280821691908281146132f4576132f4614acd565b808202811582820484141761395357613953614acd565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038516815263ffffffff84166020820152606060408201819052600090614f129083018486614eb8565b9695505050505050565b6001600160a01b038616815263ffffffff85166020820152608060408201819052600090614f4d9083018587614eb8565b90508260608301529695505050505050565b60006101008a83528960208401528860408401526001600160601b0319881660608401528660808401528060a0840152614f9b81840187614dda565b60c084019590955250506001600160a01b039190911660e0909101529695505050505050565b600060208284031215614fd357600080fd5b8151613950816143bd565b60008235609e19833603018112614ff457600080fd5b9190910192915050565b8035613afd81614182565b8183526000602080850194508260005b8581101561473657813561502c81614182565b6001600160a01b031687528183013561504481614bc1565b6001600160601b0316878401526040968701969190910190600101615019565b60208082528181018390526000906040808401600586901b8501820187855b8881101561516457878303603f190184528135368b9003609e190181126150a957600080fd5b8a0160a0813536839003601e190181126150c257600080fd5b820188810190356001600160401b038111156150dd57600080fd5b8060061b36038213156150ef57600080fd5b8287526150ff8388018284615009565b9250505061510e888301614ffe565b6001600160a01b031688860152818701358786015260606151308184016143e8565b63ffffffff169086015260806151478382016143e8565b63ffffffff16950194909452509285019290850190600101615083565b509098975050505050505050565b600061ffff80831681810361518957615189614acd565b600101939250505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0424c535369676e6174757265436865636b65722e636865636b5369676e617475a26469706673582212207bebe605db37bc08c9e9e45bfd6ec5d1c229f929c7f0eec3285c426ff557481a64736f6c63430008180033","sourceMap":"847:9633:116:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10074:40;10092:10;10104:9;10074:17;:40::i;:::-;847:9633;;;;;6944:1282;;;;;;;;;;-1:-1:-1;6944:1282:116;;;;;:::i;:::-;;:::i;:::-;;;2954:14:119;;2947:22;2929:41;;2917:2;2902:18;6944:1282:116;;;;;;;;14547:1081:67;;;;;;;;;;-1:-1:-1;14547:1081:67;;;;;:::i;:::-;;:::i;:::-;;;;4804:14:119;;4797:22;4779:41;;4863:14;;4856:22;4851:2;4836:18;;4829:50;4752:18;14547:1081:67;4617:268:119;9068:437:116;;;;;;;;;;-1:-1:-1;9068:437:116;;;;;:::i;:::-;;:::i;7697:1470:73:-;;;;;;;;;;-1:-1:-1;7697:1470:73;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5599:135::-;;;;;;;;;;-1:-1:-1;5599:135:73;;;;;:::i;:::-;;:::i;2232:123:67:-;;;;;;;;;;-1:-1:-1;2232:123:67;;;;;:::i;:::-;;:::i;9632:114:116:-;;;;;;:::i;:::-;;:::i;481:32:117:-;;;;;;;;;;-1:-1:-1;481:32:117;;;;-1:-1:-1;;;;;481:32:117;;;;;;-1:-1:-1;;;;;6523:32:119;;;6505:51;;6493:2;6478:18;481:32:117;6359:203:119;4387:9678:67;;;;;;;;;;-1:-1:-1;4387:9678:67;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;1183:47::-;;;;;;;;;;;;;;;1132:45;;;;;;;;;;;;;;;9235:111:73;;;;;;;;;;-1:-1:-1;9325:13:73;9235:111;;1069:57:67;;;;;;;;;;;;;;;9511:115:116;;;;;;;;;;-1:-1:-1;9511:115:116;;;;;:::i;:::-;-1:-1:-1;;;;;9594:25:116;9568:7;9594:25;;;:16;:25;;;;;;;9511:115;;;;13412:25:119;;;13400:2;13385:18;9511:115:116;13266:177:119;2071:101:39;;;;;;;;;;;;;:::i;2218:146:116:-;;;;;;;;;;-1:-1:-1;2218:146:116;;;;;:::i;:::-;;:::i;1441:85:39:-;;;;;;;;;;-1:-1:-1;1513:6:39;;-1:-1:-1;;;;;1513:6:39;1441:85;;10127:171:116;;;;;;;;;;-1:-1:-1;10127:171:116;;;;;:::i;:::-;;:::i;4797:260:73:-;;;;;;;;;;-1:-1:-1;4797:260:73;;;;;:::i;:::-;;:::i;5262:158::-;;;;;;;;;;-1:-1:-1;5262:158:73;;;;;:::i;:::-;;:::i;2721:148::-;;;;;;;;;;-1:-1:-1;2721:148:73;;;;;:::i;:::-;;:::i;3954:2984:116:-;;;;;;;;;;-1:-1:-1;3954:2984:116;;;;;:::i;:::-;;:::i;284:50:117:-;;;;;;;;;;-1:-1:-1;284:50:117;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16870:10:119;16858:23;;;16840:42;;16925:14;;16918:22;16913:2;16898:18;;16891:50;16957:18;;;16950:34;16828:2;16813:18;284:50:117;16646:344:119;1421:32:67;;;;;;;;;;-1:-1:-1;1421:32:67;;;;;;;;1691:338:116;;;;;;;;;;-1:-1:-1;1691:338:116;;;;;:::i;:::-;;:::i;2370:1578::-;;;;;;:::i;:::-;;:::i;1236:46:67:-;;;;;;;;;;;;;;;6262:951:73;;;;;;;;;;;;;:::i;2321:198:39:-;;;;;;;;;;-1:-1:-1;2321:198:39;;;;;:::i;:::-;;:::i;423:51:117:-;;;;;;;;;;-1:-1:-1;423:51:117;;;;;:::i;:::-;;;;;;;;;;;;;;8939:123:116;;;;;;;;;;-1:-1:-1;8939:123:116;;;;;:::i;:::-;;:::i;8290:643::-;;;;;;;;;;-1:-1:-1;8290:643:116;;;;;:::i;:::-;;:::i;1212:31:74:-;;;;;;;;;;-1:-1:-1;1212:31:74;;;;-1:-1:-1;;;;;1212:31:74;;;3631:872:73;;;;;;;;;;-1:-1:-1;3631:872:73;;;;;:::i;:::-;;:::i;9752:279:116:-;9835:6;9845:1;9835:11;9831:77;;9869:28;;-1:-1:-1;;;9869:28:116;;;;;13412:25:119;;;13385:18;;9869:28:116;;;;;;;;9831:77;-1:-1:-1;;;;;9917:25:116;;;;;;:16;:25;;;;;:35;;9946:6;;9917:25;:35;;9946:6;;9917:35;:::i;:::-;;;;-1:-1:-1;;;;;;;9967:57:116;;9998:25;;;;:16;:25;;;;;;;;;;9967:57;;13412:25:119;;;-1:-1:-1;;;;;;;;;;;9967:57:116;13385:18:119;9967:57:116;;;;;;;9752:279;;:::o;6944:1282::-;7298:4;;-1:-1:-1;;;;;7351:27:116;;7347:229;;-1:-1:-1;7412:15:116;7347:229;;;7520:15;7537:13;7503:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7476:89;;;;;;7458:107;;7347:229;7590:29;;;;:12;:29;;;;;:46;;;:51;;7586:94;;7664:5;7657:12;;;;;7586:94;7695:29;;;;:12;:29;;;;;:39;;;;;;7690:83;;7757:5;7750:12;;;;;7690:83;7803:163;;;;;;20489:19:119;;;20524:12;;;20517:28;;;20561:12;;;20554:28;;;-1:-1:-1;;;;;;20612:44:119;;20598:12;;;20591:66;7783:17:116;;20673:13:119;;7803:163:116;;;-1:-1:-1;;7803:163:116;;;;;;;;;7998:15;;7803:163;7998:15;;;7803:163;;-1:-1:-1;8043:176:116;8089:11;8118:15;7998;8179:26;8043:28;:176::i;:::-;8024:195;;;;;6944:1282;;;;;;;;;;;:::o;14547:1081:67:-;14745:22;14769;14878:13;2037:77:88;14980:7:67;15009:3;:5;;;15036:3;:5;;;15063;:7;;;15071:1;15063:10;;;;;;;:::i;:::-;;;;;15095:7;;15103:1;15095:10;;;;15127:5;:7;;;15135:1;15127:10;;;;;;;:::i;:::-;;;;;15159:5;:7;;;15167:1;15159:10;;;;;;;:::i;:::-;;;;;;;;;;15191:7;;15220;;;;14942:303;;;;;;;;;;;21182:19:119;;;21226:2;21217:12;;21210:28;;;;21263:2;21254:12;;21247:28;;;;21300:2;21291:12;;21284:28;;;;21337:3;21328:13;;21321:29;;;;21375:3;21366:13;;21359:29;21413:3;21404:13;;21397:29;21451:3;21442:13;;21435:29;21489:3;21480:13;;21473:29;21527:3;21518:13;;20829:708;14942:303:67;;;;;;;;;;;;;14915:344;;;;;;14894:375;;:394;;;;:::i;:::-;14878:410;-1:-1:-1;15371:250:67;15402:33;15413:21;:3;14878:410;15413:14;:21::i;:::-;15402:5;;:10;:33::i;:::-;15449:22;:20;:22::i;:::-;15485:67;15514:37;15545:5;15514:19;-1:-1:-1;;;;;;;;;;;;;;;;;2392:13:88;;;;;;;;2400:1;2392:13;;2403:1;2392:13;;;;;2313:99;15514:19:67;:30;;:37::i;:::-;15485:23;15500:7;15485:14;:23::i;:::-;:28;;:67::i;:::-;15566:5;1055:7;15371:17;:250::i;:::-;15330:291;;;;-1:-1:-1;14547:1081:67;-1:-1:-1;;;;;;14547:1081:67:o;9068:437:116:-;9142:10;9125:28;;;;:16;:28;;;;;;:37;-1:-1:-1;9121:204:116;;;9220:10;9272:28;;;;:16;:28;;;;;;;;9185:129;;-1:-1:-1;;;9185:129:116;;;;;22090:51:119;;;;22157:18;;;22150:34;;;22200:18;;;22193:34;22063:18;;9185:129:116;21888:345:119;9121:204:116;9352:10;9335:28;;;;:16;:28;;;;;:38;;9367:6;;9335:28;:38;;9367:6;;9335:38;:::i;:::-;;;;-1:-1:-1;;9410:10:116;9422:28;;;;:16;:28;;;;;;;;;;9388:63;;13412:25:119;;;-1:-1:-1;;;;;;;;;;;9388:63:116;13385:18:119;9388:63:116;;;;;;;9462:36;;9470:10;;9462:36;;;;;9491:6;;9462:36;;;;9491:6;9470:10;9462:36;;;;;;;;;;;;;;;;;;;;;9068:437;:::o;7697:1470:73:-;7854:44;;-1:-1:-1;;;7854:44:73;;-1:-1:-1;;;;;6523:32:119;;;7854:44:73;;;6505:51:119;7801:16:73;;7833:18;;7854:20;:34;;;;6478:18:119;;7854:44:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7933:55;;-1:-1:-1;;;7933:55:73;;;;;13412:25:119;;;7833:65:73;;-1:-1:-1;7908:22:73;;-1:-1:-1;;;;;7933:20:73;:43;;;;13385:18:119;;7933:55:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7908:80;-1:-1:-1;;;;;;8003:19:73;;;;:62;;;8026:20;-1:-1:-1;;;;;8026:32:73;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;8003:62;7999:116;;;8088:16;;;8102:1;8088:16;;;;;;;;;;;-1:-1:-1;8081:23:73;7697:1470;-1:-1:-1;;;;7697:1470:73:o;7999:116::-;8196:36;8235:46;8266:14;-1:-1:-1;;;;;8235:46:73;:30;:46::i;:::-;8196:85;-1:-1:-1;8291:21:73;;8322:173;8346:23;:30;8342:1;:34;8322:173;;;8414:14;-1:-1:-1;;;;;8414:35:73;;8456:23;8480:1;8456:26;;;;;;;;:::i;:::-;;;;;8414:70;;-1:-1:-1;;;;;;8414:70:73;;;;;;;8456:26;;;;;8414:70;;;23457:36:119;23430:18;;8414:70:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8397:87;;;;:::i;:::-;;-1:-1:-1;8378:3:73;;8322:173;;;;8566:35;8618:13;-1:-1:-1;;;;;8604:28:73;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8604:28:73;;8566:66;;8642:13;8674:9;8669:457;8693:23;:30;8689:1;:34;8669:457;;;8744:12;8765:23;8789:1;8765:26;;;;;;;;:::i;:::-;;;;;8837:43;;-1:-1:-1;;;8837:43:73;;8765:26;;;;;8837:43;;;23457:36:119;;;8765:26:73;-1:-1:-1;;;;;;;;8837:14:73;:35;;;;23430:18:119;;8837:43:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8806:74;;8899:9;8894:222;8918:20;8914:1;:24;8894:222;;;9019:47;;-1:-1:-1;;;9019:47:73;;23893:4:119;23881:17;;9019:47:73;;;23863:36:119;23915:18;;;23908:34;;;9019:14:73;-1:-1:-1;;;;;9019:36:73;;;;23836:18:119;;9019:47:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;8963:18;8982:5;8963:25;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8963:113:73;;;:25;;;;;;;;;;;:113;9094:7;;;;:::i;:::-;;-1:-1:-1;;8940:3:73;;8894:222;;;-1:-1:-1;;;8725:3:73;;8669:457;;;-1:-1:-1;9142:18:73;;7697:1470;-1:-1:-1;;;;;;;7697:1470:73:o;5599:135::-;1334:13:39;:11;:13::i;:::-;5686:41:73::1;5707:19;5686:20;:41::i;:::-;5599:135:::0;:::o;2232:123:67:-;1537:19;-1:-1:-1;;;;;1537:25:67;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1523:41:67;:10;-1:-1:-1;;;;;1523:41:67;;1502:180;;;;-1:-1:-1;;;1502:180:67;;25191:2:119;1502:180:67;;;25173:21:119;25230:2;25210:18;;;25203:30;25269:34;25249:18;;;25242:62;25340:34;25320:18;;;25313:62;25412:30;25391:19;;;25384:59;25460:19;;1502:180:67;24989:496:119;1502:180:67;2317:31:::1;2342:5;2317:24;:31::i;9632:114:116:-:0;9702:37;9720:7;9729:9;9702:17;:37::i;4387:9678:67:-;-1:-1:-1;;;;;;;;;;;;;;;;;4578:7:67;4651:6;:17;;;:24;4619:21;;;;;;;;;;;;;;;;;:28;:56;4618:142;;;;;4729:6;:23;;;:30;4697:21;;;;;;;;;;;;;;;;;:28;:62;4618:142;:227;;;;;4813:6;:24;;;:31;4781:21;;;;;;;;;;;;;;;;;:28;:63;4618:227;:316;;;;;4898:6;:28;;;:35;4866:21;;;;;;;;;;;;;;;;;:28;:67;4618:316;4597:428;;;;-1:-1:-1;;;4597:428:67;;25692:2:119;4597:428:67;;;25674:21:119;25731:2;25711:18;;;25704:30;-1:-1:-1;;;;;;;;;;;25750:18:119;;;25743:62;25841:34;25821:18;;;25814:62;-1:-1:-1;;;25892:19:119;;;25885:32;25934:19;;4597:428:67;25490:469:119;4597:428:67;5107:35;;:42;5057:23;;;;:30;:92;5036:207;;;;-1:-1:-1;;;5036:207:67;;26166:2:119;5036:207:67;;;26148:21:119;26205:2;26185:18;;;26178:30;;;-1:-1:-1;;;;;;;;;;;26224:18:119;;;26217:62;26315:34;26295:18;;;26288:62;-1:-1:-1;;;26366:19:119;;;26359:35;26411:19;;5036:207:67;25964:472:119;5036:207:67;5305:12;5275:43;;:20;:43;;;5254:150;;;;-1:-1:-1;;;5254:150:67;;26643:2:119;5254:150:67;;;26625:21:119;26682:2;26662:18;;;26655:30;-1:-1:-1;;;;;;;;;;;26701:18:119;;;26694:62;26792:30;26772:18;;;26765:58;26840:19;;5254:150:67;26441:424:119;5254:150:67;5921:19;;;;;;;;-1:-1:-1;5921:19:67;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;6277:21:67;;;;;;;;;;;;;;;;;;6264:42;;;;;;;;;;;5921:19;;6264:42;6277:21;6264:42;;;;5921:19;6264:42;;;;;-1:-1:-1;;6230:31:67;;;;:76;;;;6364:21;;;;;;;;;;;;-1:-1:-1;6364:21:67;;;;;6351:42;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6316:77:67;;-1:-1:-1;;;;;;;;;;;;;;;;;6499:6:67;:23;;;:30;-1:-1:-1;;;;;6472:67:67;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6472:67:67;-1:-1:-1;6445:94:67;;6589:23;;;;:30;-1:-1:-1;;;;;6575:45:67;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6575:45:67;;6549:10;:23;;:71;;;;6799:27;6829:141;6884:21;;;;;;;;;;;;;;;;;6923:19;-1:-1:-1;;;;;6923:31:67;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6829:37;:141::i;:::-;6799:171;;6990:9;6985:1728;7009:6;:23;;;:30;7005:1;:34;6985:1728;;;7301:82;:6;:44;;;7346:1;7301:47;;;;;;;;:::i;:::-;;;;;;;10534:9:88;;10473:16;10524:20;;;10580:4;10576:13;;;10570:20;10557:34;;;10629:4;10616:18;;;10404:246;7301:82:67;7272:10;:23;;;7296:1;7272:26;;;;;;;;:::i;:::-;;;;;;;;;;:111;7405:6;;7401:305;;7542:23;;;;7566:5;7570:1;7566;:5;:::i;:::-;7542:30;;;;;;;;:::i;:::-;;;;;;;7534:39;;7476:10;:23;;;7500:1;7476:26;;;;;;;;:::i;:::-;;;;;;;7468:35;;:105;7435:252;;;;;-1:-1:-1;;;7435:252:67;;27072:2:119;7435:252:67;;;27054:21:119;27091:18;;;27084:30;;;;-1:-1:-1;;;;;;;;;;;27130:18:119;;;27123:62;27221:34;27201:18;;;27194:62;27273:19;;7435:252:67;26870:428:119;7435:252:67;7846:19;-1:-1:-1;;;;;7846:76:67;;7961:10;:23;;;7985:1;7961:26;;;;;;;;:::i;:::-;;;;;;;8026:20;8079:6;:35;;;8115:1;8079:38;;;;;;;;:::i;:::-;;;;;;;7846:294;;;;;;;;;;;;;;;;27502:25:119;;;27546:10;27592:15;;;27587:2;27572:18;;27565:43;27644:15;27639:2;27624:18;;27617:43;27490:2;27475:18;;27303:363;7846:294:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7816:324:67;:10;:24;;;7841:1;7816:27;;;;;;;;:::i;:::-;;;;;;:324;;;;;8431:267;8461:219;8529:129;8613:19;8583:10;:24;;;8608:1;8583:27;;;;;;;;:::i;:::-;;;;;;;:49;8529:24;:129::i;:::-;8461:6;:23;;;8485:1;8461:26;;;;;;;;:::i;:::-;;;;;;;:42;;:219;;;;:::i;8431:267::-;8425:273;-1:-1:-1;7041:3:67;;6985:1728;;;;6631:2092;8996:12;:3;:10;:12::i;:::-;9340:20;;8990:18;;-1:-1:-1;9340:20:67;;9311:26;9340:20;9406:97;;9502:1;9406:97;;;9446:10;-1:-1:-1;;;;;9446:35:67;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9374:129;;9523:9;9518:3499;9542:21;;;;;;;;;;;;;;;;;:28;9538:1;:32;9518:3499;;;9754:21;9750:486;;;10045:20;9832:233;;9993:21;9832:19;-1:-1:-1;;;;;9832:43:67;;9911:21;;;;;;;;;;;;;;;;;9933:1;9911:24;;;;;;;;:::i;:::-;;;;;9832:130;;-1:-1:-1;;;;;;9832:130:67;;;;;;;9911:24;;;;;9832:130;;;23457:36:119;23430:18;;9832:130:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:182;;;;:::i;:::-;:233;9799:418;;;;-1:-1:-1;;;9799:418:67;;27873:2:119;9799:418:67;;;27855:21:119;27912:3;27892:18;;;27885:31;-1:-1:-1;;;;;;;;;;;27932:18:119;;;27925:62;28023:34;28003:18;;;27996:62;28095:34;28074:19;;;28067:63;-1:-1:-1;;;28146:19:119;;;28139:37;28193:19;;9799:418:67;27671:547:119;9799:418:67;10504:14;-1:-1:-1;;;;;10504:46:67;;10601:21;;;;;;;;;;;;;;;;;10623:1;10601:24;;;;;;;;:::i;:::-;;;;;;;;;10595:31;;10669:20;10726:6;:23;;;10750:1;10726:26;;;;;;;;:::i;:::-;;;;;;;;;;;10504:275;;-1:-1:-1;;;;;;10504:275:67;;;;;;;28448:4:119;28436:17;;;10504:275:67;;;28418:36:119;10504:275:67;28519:15:119;;;28499:18;;;28492:43;28571:15;28551:18;;;28544:43;28391:18;;10504:275:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10433:346:67;;10441:34;:6;:17;;;10459:1;10441:20;;;;;;;;:::i;:34::-;-1:-1:-1;;10433:346:67;;10404:514;;;;-1:-1:-1;;;10404:514:67;;29099:2:119;10404:514:67;;;29081:21:119;29138:2;29118:18;;;29111:30;-1:-1:-1;;;;;;;;;;;29157:18:119;;;29150:62;29248:34;29228:18;;;29221:62;29320:34;29299:19;;;29292:63;-1:-1:-1;;;29371:19:119;;;29364:32;29413:19;;10404:514:67;28897:541:119;10404:514:67;10942:30;10951:6;:17;;;10969:1;10951:20;;;;;;;;:::i;:::-;;;;;;;10942:3;:8;;:30;;;;:::i;:::-;10936:36;;11126:13;-1:-1:-1;;;;;11126:70:67;;11243:21;;;;;;;;;;;;;;;;;11265:1;11243:24;;;;;;;;:::i;:::-;;;;;;;;;11237:31;;11307:20;11360:6;:24;;;11385:1;11360:27;;;;;;;;:::i;:::-;;;;;;;;;;;11126:284;;-1:-1:-1;;;;;;11126:284:67;;;;;;;28448:4:119;28436:17;;;11126:284:67;;;28418:36:119;11126:284:67;28519:15:119;;;28499:18;;;28492:43;28571:15;28551:18;;;28544:43;28391:18;;11126:284:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11089:11;:31;;;11121:1;11089:34;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11089:321:67;;;:34;;;;;;;;;;:321;11466:52;;;:55;;11519:1;;11466:55;;;;;;:::i;:::-;;;;;;;11428:11;:32;;;11461:1;11428:35;;;;;;;;:::i;:::-;;;;;;:93;-1:-1:-1;;;;;11428:93:67;;;-1:-1:-1;;;;;11428:93:67;;;;;11608:31;11891:9;11886:1117;11910:6;:23;;;:30;11906:1;:34;11886:1117;;;12107:161;12154:10;:24;;;12179:1;12154:27;;;;;;;;:::i;:::-;;;;;;;12217:21;;;;;;;;;;;;;;;;;12239:1;12217:24;;;;;;;;:::i;:::-;;;;;;;7387:13:89;;;7404:1;7386:19;;;7380:26;;7292:121;12107:161:67;12078:907;;;12356:13;-1:-1:-1;;;;;12356:72:67;;12483:21;;;;;;;;;;;;;;;;;12505:1;12483:24;;;;;;;;:::i;:::-;;;;;;;;;12477:31;;12555:20;12621:10;:23;;;12645:1;12621:26;;;;;;;;:::i;:::-;;;;;;;12688:6;:28;;;12717:1;12688:31;;;;;;;;:::i;:::-;;;;;;;12757:23;12688:126;;;;;;;;:::i;:::-;;;;;;;;;;;12356:489;;-1:-1:-1;;;;;;12356:489:67;;;;;;;29951:4:119;29939:17;;;12356:489:67;;;29921:36:119;12356:489:67;30022:15:119;;;30002:18;;;29995:43;30054:18;;;30047:34;;;;30117:15;30097:18;;;30090:43;29893:19;;12356:489:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12317:32;;:35;;12350:1;;12317:35;;;;;;:::i;:::-;;;;;;:528;;;;;;;:::i;:::-;-1:-1:-1;;;;;12317:528:67;;;-1:-1:-1;12911:25:67;;;;;12078:907;11942:3;;11886:1117;;;-1:-1:-1;;9572:3:67;;9518:3499;;;;9297:3730;;13104:22;13144:21;13182:170;13234:7;13263:3;13288:6;:12;;;13322:6;:12;;;13182:30;:170::i;:::-;13086:266;;;;13391:17;13366:143;;;;-1:-1:-1;;;13366:143:67;;30542:2:119;13366:143:67;;;30524:21:119;30581:2;30561:18;;;30554:30;-1:-1:-1;;;;;;;;;;;30600:18:119;;;30593:62;30691:34;30671:18;;;30664:62;-1:-1:-1;;;30742:19:119;;;30735:34;30786:19;;13366:143:67;30340:471:119;13366:143:67;13548:16;13523:132;;;;-1:-1:-1;;;13523:132:67;;31018:2:119;13523:132:67;;;31000:21:119;31057:2;31037:18;;;31030:30;-1:-1:-1;;;;;;;;;;;31076:18:119;;;31069:62;31167:27;31147:18;;;31140:55;31212:19;;13523:132:67;30816:421:119;13523:132:67;13036:630;;13740:27;13810:20;13832:10;:23;;;13793:63;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;13793:63:67;;;;;;13770:96;;13793:63;13770:96;;;;14025:11;;13770:96;;-1:-1:-1;4387:9678:67;;-1:-1:-1;;;;;;;4387:9678:67:o;2071:101:39:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;:::-;2071:101::o:0;2218:146:116:-;4418:13:40;;2311:1:116;;4418:13:40;;;;;4417:14;:40;;;;-1:-1:-1;4435:12:40;;:22;;;;:12;;:22;4417:40;4409:99;;;;-1:-1:-1;;;4409:99:40;;;;;;;:::i;:::-;4518:12;:22;;-1:-1:-1;;4550:20:40;4518:22;;;4550:20;4518:22;4550:20;;;2324:33:116::1;2338:18:::0;2324:13:::1;:33::i;:::-;4607:5:40::0;4591:21;;-1:-1:-1;;4591:21:40;;;4627:20;;23487:4:119;23475:17;;23457:36;;4627:20:40;;23445:2:119;23430:18;4627:20:40;;;;;;;2218:146:116;;:::o;10127:171::-;10238:4;10287;10271:11;;10261:22;;;;;;;:::i;:::-;;;;;;;;:30;10254:37;;10127:171;;;;;:::o;4797:260:73:-;1358:10;-1:-1:-1;;;;;1380:20:73;1358:43;;1337:172;;;;-1:-1:-1;;;1337:172:73;;;;;;;:::i;:::-;4986:64:::1;::::0;-1:-1:-1;;;4986:64:73;;-1:-1:-1;;;;;4986:13:73::1;:35;::::0;::::1;::::0;:64:::1;::::0;5022:8;;5032:17;;4986:64:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4797:260:::0;;:::o;5262:158::-;1358:10;-1:-1:-1;;;;;1380:20:73;1358:43;;1337:172;;;;-1:-1:-1;;;1337:172:73;;;;;;;:::i;:::-;5364:49:::1;::::0;-1:-1:-1;;;5364:49:73;;-1:-1:-1;;;;;6523:32:119;;;5364:49:73::1;::::0;::::1;6505:51:119::0;5364:13:73::1;:39;::::0;::::1;::::0;6478:18:119;;5364:49:73::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;5262:158:::0;:::o;2721:148::-;1334:13:39;:11;:13::i;:::-;2814:48:73::1;::::0;-1:-1:-1;;;2814:48:73;;-1:-1:-1;;;;;2814:13:73::1;:34;::::0;::::1;::::0;:48:::1;::::0;2849:12;;2814:48:::1;;;:::i;3954:2984:116:-:0;10358:17;;-1:-1:-1;;;;;10358:17:116;10344:10;:31;10340:121;;10432:17;;10398:52;;-1:-1:-1;;;10398:52:116;;10420:10;10398:52;;;34567:34:119;-1:-1:-1;;;;;10432:17:116;;;34617:18:119;;;34610:43;34502:18;;10398:52:116;34355:304:119;10340:121:116;4247:22:::1;4272:9;4247:34;;4292:27;4362:15;4379:13;4345:48;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;4345:48:116;;::::1;::::0;;;;;;4322:81;;4345:48:::1;4322:81:::0;;::::1;::::0;4414:31:::1;4448:33:::0;;;:12:::1;:33:::0;;;;;;4653:29;;4322:81;;-1:-1:-1;4448:33:116;4653:29:::1;::::0;;::::1;:34:::0;;4649:110:::1;;4710:38;::::0;-1:-1:-1;;;4710:38:116;;::::1;::::0;::::1;13412:25:119::0;;;13385:18;;4710:38:116::1;13266:177:119::0;4649:110:116::1;4821:22:::0;;;;::::1;;;4817:102;;;4866:42;::::0;-1:-1:-1;;;4866:42:116;;::::1;::::0;::::1;13412:25:119::0;;;13385:18;;4866:42:116::1;13266:177:119::0;4817:102:116::1;4928:29:::0;;-1:-1:-1;;4928:29:116::1;::::0;::::1;::::0;;4953:4:::1;5071:34:::0;::::1;::::0;-1:-1:-1;;;;;5037:31:116;::::1;4928:22;5037:31:::0;;;:16:::1;:31;::::0;;;;;:68:::1;5033:269;;;5194:34;::::0;::::1;::::0;-1:-1:-1;;;;;5246:31:116;::::1;;::::0;;;:16:::1;:31;::::0;;;;;;;5128:163;;-1:-1:-1;;;5128:163:116;;::::1;::::0;::::1;22090:51:119::0;;;;22157:18;;;22150:34;;;;22200:18;;;22193:34;;;;22063:18;;5128:163:116::1;21888:345:119::0;5033:269:116::1;5548:29:::0;;5438:42:::1;::::0;5486:142:::1;::::0;5515:19;;5548:29:::1;;5591:27:::0;5486:15:::1;:142::i;:::-;5437:191;;;1125:2;5821:86;;:17;:37;;;5859:1;5821:40;;;;;;;;:::i;:::-;;;;;;;:86;;;;:::i;:::-;-1:-1:-1::0;;;;;5741:166:116::1;1062:3;5741:17;:38;;;5780:1;5741:41;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;5741:65:116::1;;;;;:::i;:::-;:166;5724:473;;;1062:3;5979:17;:38;;;6018:1;5979:41;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;5979:85:116::1;;;;;:::i;:::-;1125:2;6082:90;;:17;:37;;;6120:1;6082:40;;;;;;;;:::i;:::-;;;;;;;:90;;;;:::i;:::-;5939:247;::::0;-1:-1:-1;;;5939:247:116;;::::1;::::0;::::1;35280:25:119::0;;;;-1:-1:-1;;;;;35341:39:119;35321:18;;;35314:67;35253:18;;5939:247:116::1;35107:280:119::0;5724:473:116::1;6212:45;::::0;-1:-1:-1;;;;;6523:32:119;;6505:51;;6226:15:116;;6212:45:::1;::::0;6493:2:119;6478:18;6212:45:116::1;;;;;;;6371:14;6428:11;6406:9;6389:26;::::0;:14;:26:::1;:::i;:::-;:35;::::0;6418:6:::1;6389:35;:::i;:::-;6388:51;;;;:::i;:::-;6371:68;;6463:12;:34;;;6454:6;:43;6450:192;;;6559:34;::::0;::::1;::::0;6520:111:::1;::::0;-1:-1:-1;;;6520:111:116;;::::1;::::0;::::1;35566:25:119::0;;;;35607:18;;;35600:34;;;35539:18;;6520:111:116::1;35392:248:119::0;6450:192:116::1;-1:-1:-1::0;;;;;6710:31:116;::::1;;::::0;;;:16:::1;:31;::::0;;;;:41;;6745:6;;6710:31;:41:::1;::::0;6745:6;;6710:41:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;6766:103:116;::::1;6828:31;::::0;;;:16:::1;:31;::::0;;;;;;;;;6766:103;;13412:25:119;;;-1:-1:-1;;;;;;;;;;;6766:103:116;13385:18:119;6766:103:116::1;;;;;;;6896:17;::::0;6888:43:::1;::::0;-1:-1:-1;;;;;6896:17:116;;::::1;::::0;6888:43;::::1;;;::::0;6924:6;;6896:17:::1;6888:43:::0;6896:17;6888:43;6924:6;6896:17;6888:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;4237:2701;;;;;3954:2984:::0;;;:::o;1691:338::-;3111:19:40;3134:13;;;;;;3133:14;;3179:34;;;;-1:-1:-1;3197:12:40;;3212:1;3197:12;;;;:16;3179:34;3178:108;;;-1:-1:-1;3258:4:40;1476:19:42;:23;;;3219:66:40;;-1:-1:-1;3268:12:40;;;;;:17;3219:66;3157:201;;;;-1:-1:-1;;;3157:201:40;;;;;;;:::i;:::-;3368:12;:16;;-1:-1:-1;;3368:16:40;3383:1;3368:16;;;3394:65;;;;3428:13;:20;;-1:-1:-1;;3428:20:40;;;;;3394:65;1848:59:116::1;1874:13;1889:17;1848:25;:59::i;:::-;1917:17;:38:::0;;-1:-1:-1;;;;;;1917:38:116::1;-1:-1:-1::0;;;;;1917:38:116;::::1;;::::0;;3479:99:40;;;;3529:5;3513:21;;-1:-1:-1;;3513:21:40;;;3553:14;;-1:-1:-1;23457:36:119;;3553:14:40;;23445:2:119;23430:18;3553:14:40;;;;;;;3479:99;3101:483;1691:338:116;;;:::o;2370:1578::-;2540:23;2606:15;2623:10;2589:45;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2589:45:116;;;;;;;;;2566:78;;2589:45;2566:78;;;;2659:29;;;;:12;:29;;;;;:46;2566:78;;-1:-1:-1;2659:46:116;;:51;2655:127;;2733:38;;-1:-1:-1;;;2733:38:116;;;;;13412:25:119;;;13385:18;;2733:38:116;13266:177:119;2655:127:116;2796:9;:13;2792:213;;2842:10;2825:28;;;;:16;:28;;;;;:41;;2857:9;;2825:28;:41;;2857:9;;2825:41;:::i;:::-;;;;-1:-1:-1;;2924:10:116;2952:28;;;;:16;:28;;;;;;;;;;2885:109;;13412:25:119;;;-1:-1:-1;;;;;;;;;;;2885:109:116;13385:18:119;2885:109:116;;;;;;;2792:213;3036:10;3019:28;;;;:16;:28;;;;;;:52;-1:-1:-1;3015:234:116;;;3129:10;3196:28;;;;:16;:28;;;;;;;;3094:144;;-1:-1:-1;;;3094:144:116;;;;;22090:51:119;;;;22157:18;;;22150:34;;;22200:18;;;22193:34;22063:18;;3094:144:116;21888:345:119;3015:234:116;-1:-1:-1;;;;;;;;;;;;;;;;3298:50:116;3335:12;3298:50;;;;;-1:-1:-1;;;3396:56:116;;;3463:29;;;:12;:29;;;;;;;:42;;;;;;;;;;-1:-1:-1;;3463:42:116;;;;;;;;;;;;;;;;;-1:-1:-1;3463:42:116;;;;3567:137;;-1:-1:-1;;3591:15:116;;3567:137;;;;3620:10;;3335:12;3678:16;;;;3567:137;:::i;:::-;;;;;;;;3793:15;3769:172;3822:10;3853:12;3880:16;;3910:21;3769:172;;;;;;;;;;:::i;:::-;;;;;;;;2530:1418;;2370:1578;;;;:::o;6262:951:73:-;6321:16;6349:19;6371:20;-1:-1:-1;;;;;6371:32:73;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6349:56;;;;6420:11;6435:1;6420:16;6416:70;;-1:-1:-1;;6459:16:73;;;6473:1;6459:16;;;;;;;;;6262:951::o;6416:70::-;6496:21;;6527:129;6551:11;6547:1;:15;6527:129;;;6600:45;;-1:-1:-1;;;6600:45:73;;23487:4:119;23475:17;;6600:45:73;;;23457:36:119;6600:14:73;-1:-1:-1;;;;;6600:35:73;;;;23430:18:119;;6600:45:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6583:62;;;;:::i;:::-;;-1:-1:-1;6564:3:73;;6527:129;;;;6666:35;6718:13;-1:-1:-1;;;;;6704:28:73;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6704:28:73;;6666:66;;6742:13;6774:9;6769:403;6793:20;-1:-1:-1;;;;;6793:32:73;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6789:38;;:1;:38;6769:403;;;6879:45;;-1:-1:-1;;;6879:45:73;;23487:4:119;23475:17;;6879:45:73;;;23457:36:119;6848:28:73;;6879:14;-1:-1:-1;;;;;6879:35:73;;;;23430:18:119;;6879:45:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6848:76;;6943:9;6938:224;6962:20;6958:1;:24;6938:224;;;7063:49;;-1:-1:-1;;;7063:49:73;;23893:4:119;23881:17;;7063:49:73;;;23863:36:119;23915:18;;;23908:34;;;7063:14:73;-1:-1:-1;;;;;7063:36:73;;;;23836:18:119;;7063:49:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;;7007:18;7026:5;7007:25;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7007:115:73;;;:25;;;;;;;;;;;:115;7140:7;;;;:::i;:::-;;-1:-1:-1;;6984:3:73;;6938:224;;;-1:-1:-1;;6829:3:73;;6769:403;;;-1:-1:-1;7188:18:73;;6262:951;-1:-1:-1;;;;6262:951:73:o;2321:198:39:-;1334:13;:11;:13::i;:::-;-1:-1:-1;;;;;2409:22:39;::::1;2401:73;;;::::0;-1:-1:-1;;;2401:73:39;;37261:2:119;2401:73:39::1;::::0;::::1;37243:21:119::0;37300:2;37280:18;;;37273:30;37339:34;37319:18;;;37312:62;-1:-1:-1;;;37390:18:119;;;37383:36;37436:19;;2401:73:39::1;37059:402:119::0;2401:73:39::1;2484:28;2503:8;2484:18;:28::i;8939:123:116:-:0;1334:13:39;:11;:13::i;:::-;9017:17:116::1;:38:::0;;-1:-1:-1;;;;;;9017:38:116::1;-1:-1:-1::0;;;;;9017:38:116;;;::::1;::::0;;;::::1;::::0;;8939:123::o;8290:643::-;8636:290;;-1:-1:-1;;;8636:290:116;;8613:4;;8636;;:25;;:290;;8675:15;;8704:18;;8736:30;;8780:18;;8812:15;;8841:11;;8866:26;;8613:4;;8636:290;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3631:872:73:-;1684:16;;-1:-1:-1;;;;;1684:16:73;1670:10;:30;1649:153;;;;-1:-1:-1;;;1649:153:73;;38727:2:119;1649:153:73;;;38709:21:119;38766:2;38746:18;;;38739:30;38805:34;38785:18;;;38778:62;38876:34;38856:18;;;38849:62;-1:-1:-1;;;38927:19:119;;;38920:43;38980:19;;1649:153:73;38525:480:119;1649:153:73;3815:9:::1;3810:610;3830:29:::0;;::::1;3810:610;;;4029:18;;4048:1;4029:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:27;::::0;;;;;::::1;;;:::i;:::-;-1:-1:-1::0;;;;;4029:40:73::1;;4070:10;4090:4;4097:18;;4116:1;4097:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:28;4029:97:::0;;-1:-1:-1;;;;;;4029:97:73::1;::::0;;;;;;-1:-1:-1;;;;;40023:15:119;;;4029:97:73::1;::::0;::::1;40005:34:119::0;40075:15;;;;40055:18;;;40048:43;4097:28:73::1;;40107:18:119::0;;;40100:34;39940:18;;4029:97:73::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4140:17;4176:18;;4195:1;4176:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:27;::::0;;;;;::::1;;;:::i;:::-;:82;::::0;-1:-1:-1;;;4176:82:73;;4222:4:::1;4176:82;::::0;::::1;34567:34:119::0;-1:-1:-1;;;;;4237:19:73::1;34637:15:119::0;;34617:18;;;34610:43;4176:37:73;;;::::1;::::0;::::1;::::0;34502:18:119;;4176:82:73::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4140:118;;4272:18;;4291:1;4272:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:27;::::0;;;;;::::1;;;:::i;:::-;-1:-1:-1::0;;;;;4272:35:73::1;;4333:19;4386:9;4355:18;;4374:1;4355:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:28;;;:40;;;;:::i;:::-;4272:137;::::0;-1:-1:-1;;;;;;4272:137:73::1;::::0;;;;;;-1:-1:-1;;;;;40337:32:119;;;4272:137:73::1;::::0;::::1;40319:51:119::0;40386:18;;;40379:34;40292:18;;4272:137:73::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;3861:3:73::1;;3810:610;;;-1:-1:-1::0;4430:66:73::1;::::0;-1:-1:-1;;;4430:66:73;;-1:-1:-1;;;;;4430:19:73::1;:46;::::0;::::1;::::0;:66:::1;::::0;4477:18;;;;4430:66:::1;;;:::i;1240:240:27:-:0;1395:4;1469;1418:47;1446:5;1453:4;1459:5;1418:27;:47::i;:::-;:55;;1240:240;-1:-1:-1;;;;;1240:240:27:o;7084:580:88:-;-1:-1:-1;;;;;;;;;;;;;;;;;7184:23:88;;:::i;:::-;7228:3;;7217:14;;:8;7252:3;;;;7241:8;;;:14;7265:8;;;;:12;;;-1:-1:-1;;7452:1:88;7446:4;7217:14;7436:1;7429:4;7422:5;7418:16;7407:53;7396:64;-1:-1:-1;7396:64:88;;7530:75;7557:48;7582:9;7530:75;;7632:7;7624:33;;;;-1:-1:-1;;;7624:33:88;;43612:2:119;7624:33:88;;;43594:21:119;43651:2;43631:18;;;43624:30;-1:-1:-1;;;43670:18:119;;;43663:43;43723:18;;7624:33:88;43410:337:119;7624:33:88;7174:490;;7084:580;;;;:::o;4823:615::-;-1:-1:-1;;;;;;;;;;;;;;;;;4926:23:88;;:::i;:::-;4970:4;;4959:15;;:8;4995:4;;;;4984:8;;;:15;5020:4;;5009:8;;;;:15;;;;5045:4;;;;5034:8;;;:15;-1:-1:-1;;5225:1:88;5219:4;4959:15;5209:1;5202:4;5195:5;5191:16;5180:53;5169:64;-1:-1:-1;5169:64:88;;5303:75;5330:48;5355:9;5303:75;;5406:7;5398:33;;;;-1:-1:-1;;;5398:33:88;;43954:2:119;5398:33:88;;;43936:21:119;43993:2;43973:18;;;43966:30;-1:-1:-1;;;44012:18:119;;;44005:43;44065:18;;5398:33:88;43752:337:119;4070:128:88;4119:14;;:::i;:::-;-1:-1:-1;4152:39:88;;;;;;;;3635:77;4152:39;;;;;;3752:77;4152:39;;;;;;;;;;;;;;3869:77;4152:39;;3986:77;4152:39;;;;;;;;;;;;;;;4070:128::o;11044:451::-;-1:-1:-1;;;;;;;;;;;;;;;;;11123:12:88;;;11185:24;-1:-1:-1;;;;;;;;;;;11193:2:88;11185:24;:::i;:::-;11173:36;;11220:239;11259:13;11270:1;11259:10;:13::i;:::-;11247:25;;-1:-1:-1;11247:25:88;-1:-1:-1;;;;;;;;;;;;11336:1:88;11333;11326:24;11318:4;:32;11314:92;;11378:13;;;;;;;;;;;;;;;;;;;;11044:451;-1:-1:-1;;;11044:451:88:o;11314:92::-;-1:-1:-1;;;;;;;;;;;11434:1:88;11431;11424:24;11420:28;;11220:239;;9189:1112;9397:31;;;;;;;;;;;;;;;;;;9438;;;;;;;;;;;;;;;;9375:4;;;;9397:31;9480:24;;:::i;:::-;9520:9;9515:302;9539:1;9535;:5;9515:302;;;9561:9;9573:5;:1;9577;9573:5;:::i;:::-;9561:17;;9607:2;9610:1;9607:5;;;;;;;:::i;:::-;;;;;:7;9592:5;9598;:1;9607:7;9598:5;:::i;:::-;9592:12;;;;;;;:::i;:::-;;;;:22;9643:2;9646:1;9643:5;;;;;;;:::i;:::-;;;;;:7;;;9628:5;9634:1;9638;9634:5;;;;:::i;:::-;9628:12;;;;;;;:::i;:::-;;;;:22;9679:2;9682:1;9679:5;;;;;;;:::i;:::-;;;;;:7;:10;9664:5;9670;:1;9674;9670:5;:::i;:::-;9664:12;;;;;;;:::i;:::-;;;;:25;9718:2;9721:1;9718:5;;;;;;;:::i;:::-;;;;;:7;9726:1;9718:10;;;;9703:5;9709;:1;9713;9709:5;:::i;:::-;9703:12;;;;;;;:::i;:::-;;;;:25;9757:2;9760:1;9757:5;;;;;;;:::i;:::-;;;;;:7;;;9765:1;9757:10;;;;;;;:::i;:::-;;;;;9742:5;9748;:1;9752;9748:5;:::i;:::-;9742:12;;;;;;;:::i;:::-;;;;:25;9796:2;9799:1;9796:5;;;;;;;:::i;:::-;;;;;:7;;;9804:1;9796:10;;;;;;;:::i;:::-;;;;;9781:5;9787;:1;9791;9787:5;:::i;:::-;9781:12;;;;;;;:::i;:::-;;;;:25;-1:-1:-1;9542:3:88;;9515:302;;;;9827:21;;:::i;:::-;9858:12;10032:4;10027:3;10012:13;10005:5;10002:1;9990:10;9979:58;10282:6;;9968:69;;10282:11;;;;-1:-1:-1;10265:29:88;;-1:-1:-1;;;;;;;;;;9189:1112:88:o;5465:1257:89:-;5532:12;5650:15;5728:23;5764:20;5777:6;5764:12;:20::i;:::-;5754:31;;-1:-1:-1;;;;;5754:31:89;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5754:31:89;;5728:57;;5841:18;6093:9;6088:601;6122:10;:17;6109:10;:30;6108:45;;;;;6149:3;6145:1;:7;6108:45;6088:601;;;6252:1;:6;;;-1:-1:-1;6339:16:89;;;:21;6335:344;;6524:1;6511:16;;6486:10;6497;6486:22;;;;;;;;:::i;:::-;;;;:41;-1:-1:-1;;;;;6486:41:89;;;;;;;;;6650:12;;;;;6335:344;6155:3;;;:::i;:::-;;;6088:601;;1599:130:39;1513:6;;-1:-1:-1;;;;;1513:6:39;929:10:43;1662:23:39;1654:68;;;;-1:-1:-1;;;1654:68:39;;44296:2:119;1654:68:39;;;44278:21:119;;;44315:18;;;44308:30;44374:34;44354:18;;;44347:62;44426:18;;1654:68:39;44094:356:119;5740:200:73;5847:16;;5823:62;;;-1:-1:-1;;;;;5847:16:73;;;34567:34:119;;34637:15;;;34632:2;34617:18;;34610:43;5823:62:73;;34502:18:119;5823:62:73;;;;;;;5895:16;:38;;-1:-1:-1;;;;;;5895:38:73;-1:-1:-1;;;;;5895:38:73;;;;;;;;;;5740:200::o;15634:148:67:-;15699:20;:28;;-1:-1:-1;;15699:28:67;;;;;;;;;;15742:33;;2929:41:119;;;15742:33:67;;2917:2:119;2902:18;15742:33:67;;;;;;;15634:148;:::o;3308:360:89:-;3419:7;3438:14;3455:44;3481:17;3455:25;:44::i;:::-;3438:61;;3541:6;3524:13;3519:18;;:1;:18;;3518:29;3510:127;;;;-1:-1:-1;;;3510:127:89;;44657:2:119;3510:127:89;;;44639:21:119;44696:2;44676:18;;;44669:30;44735:34;44715:18;;;44708:62;44806:33;44786:18;;;44779:61;44857:19;;3510:127:89;44455:427:119;3510:127:89;3655:6;-1:-1:-1;3308:360:89;;;;;:::o;6797:406::-;6853:6;;6897:209;6904:5;;6897:209;;6931:5;6935:1;6931;:5;:::i;:::-;6925:12;;;;7020:7;;;;:::i;:::-;;;;6897:209;;5698:1197:88;-1:-1:-1;;;;;;;;;;;;;;;;;5824:4:88;5820:1;:8;;;5812:37;;;;-1:-1:-1;;;5812:37:88;;45291:2:119;5812:37:88;;;45273:21:119;45330:2;45310:18;;;45303:30;-1:-1:-1;;;45349:18:119;;;45342:46;45405:18;;5812:37:88;45089:340:119;5812:37:88;5893:1;:6;;5898:1;5893:6;5890:44;;-1:-1:-1;5922:1:88;5915:8;;5890:44;6016:19;;;;;;;;;5989:24;6016:19;;;;;;;;;6145:1;;6208;;6337:481;6348:1;6343:6;;:1;:6;;;6337:481;;6493:1;6483:6;;;;;;;6482:12;;:17;;6478:84;;6529:14;6534:3;6539;6529:4;:14::i;:::-;6523:20;;6478:84;6644:14;6649:3;6654;6644:4;:14::i;:::-;6638:20;-1:-1:-1;6765:7:88;6771:1;6765:7;;;;;6790:3;6337:481;;;-1:-1:-1;6885:3:88;;5698:1197;-1:-1:-1;;;;;5698:1197:88:o;4461:295::-;-1:-1:-1;;;;;;;;;;;;;;;;;4600:3:88;;:8;:20;;;;-1:-1:-1;4612:3:88;;;;:8;4600:20;4596:154;;;-1:-1:-1;;4643:13:88;;;;;;;;;-1:-1:-1;4643:13:88;;;;;;;;4461:295::o;4596:154::-;4694:45;;;;;;;;4702:1;:3;;;4694:45;;;;-1:-1:-1;;;;;;;;;;;4721:1:88;:3;;;:16;;;;:::i;:::-;4707:31;;-1:-1:-1;;;;;;;;;;;4707:31:88;:::i;:::-;4694:45;;4687:52;4461:295;-1:-1:-1;;4461:295:88:o;4596:154::-;4461:295;;;:::o;2673:187:39:-;2765:6;;;-1:-1:-1;;;;;2781:17:39;;;-1:-1:-1;;;;;;2781:17:39;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;2311:238:73:-;4910:13:40;;;;;;;4902:69;;;;-1:-1:-1;;;4902:69:40;;45636:2:119;4902:69:40;;;45618:21:119;45675:2;45655:18;;;45648:30;45714:34;45694:18;;;45687:62;-1:-1:-1;;;45765:18:119;;;45758:41;45816:19;;4902:69:40;45434:407:119;4902:69:40;2461:32:73::1;2480:12;2461:18;:32::i;:::-;2503:39;2524:17;2503:20;:39::i;1997:1172:27:-:0;2136:7;2191:2;2176:5;:12;:17;;;;:::i;:::-;:22;2155:144;;;;-1:-1:-1;;;2155:144:27;;46048:2:119;2155:144:27;;;46030:21:119;46087:2;46067:18;;;46060:30;46126:34;46106:18;;;46099:62;46197:34;46177:18;;;46170:62;-1:-1:-1;;;46248:19:119;;;46241:42;46300:19;;2155:144:27;45846:479:119;2155:144:27;2332:4;2363:2;2346:788;2372:5;:12;2367:1;:17;2346:788;;2413:9;2421:1;2413:5;:9;:::i;:::-;2426:1;2413:14;2409:715;;2572:12;2566:4;2559:26;2636:1;2629:5;2625:13;2619:20;2613:4;2606:34;2693:4;2687;2677:21;2661:37;;2739:1;2732:5;2728:13;2719:22;;2409:715;;;2940:1;2933:5;2929:13;2923:20;2917:4;2910:34;2978:12;2972:4;2965:26;3044:4;3038;3028:21;3012:37;;3090:1;3083:5;3079:13;3070:22;;2409:715;2386:7;2391:2;2386:7;;:::i;:::-;;;2346:788;;11616:433:88;11670:7;;;-1:-1:-1;;;;;;;;;;;11801:1:88;-1:-1:-1;;;;;;;;;;;11785:1:88;-1:-1:-1;;;;;;;;;;;11769:1:88;11766;11759:24;11752:47;11745:70;11730:85;;11912:9;11924:91;11931:4;11937:65;-1:-1:-1;;;;;;;;;;;11924:6:88;:91::i;:::-;12034:4;;11912:103;;-1:-1:-1;11616:433:88;;-1:-1:-1;;;11616:433:88:o;1188:1693:89:-;1278:7;571:3;1409:17;:24;:49;;1401:142;;;;-1:-1:-1;;;1401:142:89;;46532:2:119;1401:142:89;;;46514:21:119;46571:2;46551:18;;;46544:30;;;46610:34;46590:18;;;46583:62;46681:34;46661:18;;;46654:62;-1:-1:-1;;;46732:19:119;;;46725:35;46777:19;;1401:142:89;46330:472:119;1401:142:89;1619:17;:24;1647:1;1619:29;1615:77;;-1:-1:-1;1679:1:89;;1188:1693;-1:-1:-1;1188:1693:89:o;1615:77::-;1770:14;1873:15;2180:17;2198:1;2180:20;;;;;;;;:::i;:::-;;;;;2169:1;2180:20;;;;;2169:32;;;;-1:-1:-1;2284:568:89;2308:17;:24;2304:1;:28;2284:568;;;2480:17;2498:1;2480:20;;;;;;;;:::i;:::-;;;;;2469:1;2480:20;;;;;2469:32;;-1:-1:-1;2665:16:89;;;2657:100;;;;-1:-1:-1;;;2657:100:89;;47009:2:119;2657:100:89;;;46991:21:119;47048:2;47028:18;;;47021:30;47087:34;47067:18;;;47060:62;47158:34;47138:18;;;47131:62;-1:-1:-1;;;47209:19:119;;;47202:38;47257:19;;2657:100:89;46807:475:119;2657:100:89;2824:16;;;;2334:3;;2284:568;;;-1:-1:-1;2868:6:89;;1188:1693;-1:-1:-1;;;1188:1693:89:o;12055:874:88:-;12146:14;12172:12;12194:24;;:::i;:::-;12228:20;;:::i;:::-;12269:4;12258:15;;;12341:8;;;:15;;;12425:8;;;:15;;;12509:8;;;:16;;;12535:8;;;:20;;;12565:8;;;:19;;;12673:6;12667:4;12258:15;12571:1;12650:4;12643:5;12639:16;12628:58;12617:69;-1:-1:-1;12617:69:88;;12756:75;12783:48;12808:9;12756:75;;12858:7;12850:46;;;;-1:-1:-1;;;12850:46:88;;47489:2:119;12850:46:88;;;47471:21:119;47528:2;47508:18;;;47501:30;47567:28;47547:18;;;47540:56;47613:18;;12850:46:88;47287:350:119;12850:46:88;-1:-1:-1;12913:9:88;;;-1:-1:-1;;;;;12055:874:88:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:185:119:-;82:20;;-1:-1:-1;;;;;;131:43:119;;121:54;;111:82;;189:1;186;179:12;204:127;265:10;260:3;256:20;253:1;246:31;296:4;293:1;286:15;320:4;317:1;310:15;336:257;408:4;402:11;;;440:17;;-1:-1:-1;;;;;472:34:119;;508:22;;;469:62;466:88;;;534:18;;:::i;:::-;570:4;563:24;336:257;:::o;598:255::-;670:2;664:9;712:6;700:19;;-1:-1:-1;;;;;734:34:119;;770:22;;;731:62;728:88;;;796:18;;:::i;858:275::-;929:2;923:9;994:2;975:13;;-1:-1:-1;;971:27:119;959:40;;-1:-1:-1;;;;;1014:34:119;;1050:22;;;1011:62;1008:88;;;1076:18;;:::i;:::-;1112:2;1105:22;858:275;;-1:-1:-1;858:275:119:o;1138:406::-;1202:5;-1:-1:-1;;;;;1228:6:119;1225:30;1222:56;;;1258:18;;:::i;:::-;1296:57;1341:2;1320:15;;-1:-1:-1;;1316:29:119;1347:4;1312:40;1296:57;:::i;:::-;1287:66;;1376:6;1369:5;1362:21;1416:3;1407:6;1402:3;1398:16;1395:25;1392:45;;;1433:1;1430;1423:12;1392:45;1482:6;1477:3;1470:4;1463:5;1459:16;1446:43;1536:1;1529:4;1520:6;1513:5;1509:18;1505:29;1498:40;1138:406;;;;;:::o;1549:220::-;1591:5;1644:3;1637:4;1629:6;1625:17;1621:27;1611:55;;1662:1;1659;1652:12;1611:55;1684:79;1759:3;1750:6;1737:20;1730:4;1722:6;1718:17;1684:79;:::i;:::-;1675:88;1549:220;-1:-1:-1;;;1549:220:119:o;1774:131::-;-1:-1:-1;;;;;1849:31:119;;1839:42;;1829:70;;1895:1;1892;1885:12;1910:874;2041:6;2049;2057;2065;2073;2081;2089;2097;2150:3;2138:9;2129:7;2125:23;2121:33;2118:53;;;2167:1;2164;2157:12;2118:53;2203:9;2190:23;2180:33;;2260:2;2249:9;2245:18;2232:32;2222:42;;2311:2;2300:9;2296:18;2283:32;2273:42;;2334:38;2368:2;2357:9;2353:18;2334:38;:::i;:::-;2324:48;;2419:3;2408:9;2404:19;2391:33;2381:43;;2475:3;2464:9;2460:19;2447:33;-1:-1:-1;;;;;2495:6:119;2492:30;2489:50;;;2535:1;2532;2525:12;2489:50;2558:49;2599:7;2590:6;2579:9;2575:22;2558:49;:::i;:::-;2548:59;;;2654:3;2643:9;2639:19;2626:33;2616:43;;2709:3;2698:9;2694:19;2681:33;2723:31;2748:5;2723:31;:::i;:::-;2773:5;2763:15;;;1910:874;;;;;;;;;;;:::o;2981:282::-;3035:5;3083:4;3071:9;3066:3;3062:19;3058:30;3055:50;;;3101:1;3098;3091:12;3055:50;3123:22;;:::i;:::-;3114:31;;3181:9;3168:23;3161:5;3154:38;3252:2;3241:9;3237:18;3224:32;3219:2;3212:5;3208:14;3201:56;2981:282;;;;:::o;3268:484::-;3318:5;3371:3;3364:4;3356:6;3352:17;3348:27;3338:55;;3389:1;3386;3379:12;3338:55;3413:22;;:::i;:::-;3457:3;3495:2;3487:6;3483:15;3521:3;3513:6;3510:15;3507:35;;;3538:1;3535;3528:12;3507:35;3562:6;3577:146;3593:6;3588:3;3585:15;3577:146;;;3661:17;;3649:30;;3708:4;3699:14;;;;3610;3577:146;;;-1:-1:-1;3741:5:119;;3268:484;-1:-1:-1;;;;;3268:484:119:o;3757:320::-;3811:5;3859:4;3847:9;3842:3;3838:19;3834:30;3831:50;;;3877:1;3874;3867:12;3831:50;3899:22;;:::i;:::-;3890:31;;3944:40;3980:3;3969:9;3944:40;:::i;:::-;3937:5;3930:55;4019:51;4066:3;4059:4;4048:9;4044:20;4019:51;:::i;:::-;4012:4;4005:5;4001:16;3994:77;3757:320;;;;:::o;4082:530::-;4246:6;4254;4262;4270;4323:3;4311:9;4302:7;4298:23;4294:33;4291:53;;;4340:1;4337;4330:12;4291:53;4376:9;4363:23;4353:33;;4405:54;4451:7;4446:2;4435:9;4431:18;4405:54;:::i;:::-;4395:64;;4478:54;4524:7;4519:2;4508:9;4504:18;4478:54;:::i;:::-;4468:64;;4551:55;4598:7;4592:3;4581:9;4577:19;4551:55;:::i;:::-;4541:65;;4082:530;;;;;;;:::o;4890:180::-;4949:6;5002:2;4990:9;4981:7;4977:23;4973:32;4970:52;;;5018:1;5015;5008:12;4970:52;-1:-1:-1;5041:23:119;;4890:180;-1:-1:-1;4890:180:119:o;5075:247::-;5134:6;5187:2;5175:9;5166:7;5162:23;5158:32;5155:52;;;5203:1;5200;5193:12;5155:52;5242:9;5229:23;5261:31;5286:5;5261:31;:::i;5327:658::-;5498:2;5550:21;;;5620:13;;5523:18;;;5642:22;;;5469:4;;5498:2;5721:15;;;;5695:2;5680:18;;;5469:4;5764:195;5778:6;5775:1;5772:13;5764:195;;;5843:13;;-1:-1:-1;;;;;5839:39:119;5827:52;;5934:15;;;;5899:12;;;;5875:1;5793:9;5764:195;;;-1:-1:-1;5976:3:119;;5327:658;-1:-1:-1;;;;;;5327:658:119:o;5990:118::-;6076:5;6069:13;6062:21;6055:5;6052:32;6042:60;;6098:1;6095;6088:12;6113:241;6169:6;6222:2;6210:9;6201:7;6197:23;6193:32;6190:52;;;6238:1;6235;6228:12;6190:52;6277:9;6264:23;6296:28;6318:5;6296:28;:::i;6567:163::-;6634:20;;6694:10;6683:22;;6673:33;;6663:61;;6720:1;6717;6710:12;6735:182;6794:4;-1:-1:-1;;;;;6819:6:119;6816:30;6813:56;;;6849:18;;:::i;:::-;-1:-1:-1;6894:1:119;6890:14;6906:4;6886:25;;6735:182::o;6922:671::-;6975:5;7028:3;7021:4;7013:6;7009:17;7005:27;6995:55;;7046:1;7043;7036:12;6995:55;7082:6;7069:20;7108:4;7132:59;7148:42;7187:2;7148:42;:::i;:::-;7132:59;:::i;:::-;7213:3;7237:2;7232:3;7225:15;7265:4;7260:3;7256:14;7249:21;;7322:4;7316:2;7313:1;7309:10;7301:6;7297:23;7293:34;7279:48;;7350:3;7342:6;7339:15;7336:35;;;7367:1;7364;7357:12;7336:35;7403:4;7395:6;7391:17;7417:147;7433:6;7428:3;7425:15;7417:147;;;7499:22;7517:3;7499:22;:::i;:::-;7487:35;;7542:12;;;;7450;;7417:147;;;-1:-1:-1;7582:5:119;6922:671;-1:-1:-1;;;;;;6922:671:119:o;7598:694::-;7659:5;7712:3;7705:4;7697:6;7693:17;7689:27;7679:55;;7730:1;7727;7720:12;7679:55;7766:6;7753:20;7792:4;7816:59;7832:42;7871:2;7832:42;:::i;7816:59::-;7897:3;7921:2;7916:3;7909:15;7949:4;7944:3;7940:14;7933:21;;8006:4;8000:2;7997:1;7993:10;7985:6;7981:23;7977:34;7963:48;;8034:3;8026:6;8023:15;8020:35;;;8051:1;8048;8041:12;8020:35;8087:4;8079:6;8075:17;8101:162;8117:6;8112:3;8109:15;8101:162;;;8185:35;8216:3;8211;8185:35;:::i;:::-;8173:48;;8241:12;;;;8143:4;8134:14;8101:162;;8297:907;8360:5;8413:3;8406:4;8398:6;8394:17;8390:27;8380:55;;8431:1;8428;8421:12;8380:55;8467:6;8454:20;8493:4;8517:59;8533:42;8572:2;8533:42;:::i;8517:59::-;8610:15;;;8696:1;8692:10;;;;8680:23;;8676:32;;;8641:12;;;;8720:15;;;8717:35;;;8748:1;8745;8738:12;8717:35;8784:2;8776:6;8772:15;8796:379;8812:6;8807:3;8804:15;8796:379;;;8898:3;8885:17;-1:-1:-1;;;;;8921:11:119;8918:35;8915:125;;;8994:1;9023:2;9019;9012:14;8915:125;9065:67;9128:3;9123:2;9109:11;9101:6;9097:24;9093:33;9065:67;:::i;:::-;9053:80;;-1:-1:-1;9153:12:119;;;;8829;;8796:379;;9209:1566;9283:5;9331:6;9319:9;9314:3;9310:19;9306:32;9303:52;;;9351:1;9348;9341:12;9303:52;9373:22;;:::i;:::-;9364:31;;9431:9;9418:23;-1:-1:-1;;;;;9501:2:119;9493:6;9490:14;9487:34;;;9517:1;9514;9507:12;9487:34;9544:56;9596:3;9587:6;9576:9;9572:22;9544:56;:::i;:::-;9537:5;9530:71;9654:2;9643:9;9639:18;9626:32;9610:48;;9683:2;9673:8;9670:16;9667:36;;;9699:1;9696;9689:12;9667:36;9735:66;9797:3;9786:8;9775:9;9771:24;9735:66;:::i;:::-;9730:2;9723:5;9719:14;9712:90;9855:2;9844:9;9840:18;9827:32;9811:48;;9884:2;9874:8;9871:16;9868:36;;;9900:1;9897;9890:12;9868:36;9936:66;9998:3;9987:8;9976:9;9972:24;9936:66;:::i;:::-;9931:2;9924:5;9920:14;9913:90;10035:50;10081:3;10076:2;10065:9;10061:18;10035:50;:::i;:::-;10030:2;10023:5;10019:14;10012:74;10120:51;10167:3;10161;10150:9;10146:19;10120:51;:::i;:::-;10113:4;10106:5;10102:16;10095:77;10225:3;10214:9;10210:19;10197:33;10181:49;;10255:2;10245:8;10242:16;10239:36;;;10271:1;10268;10261:12;10239:36;10309:58;10363:3;10352:8;10341:9;10337:24;10309:58;:::i;:::-;10302:4;10295:5;10291:16;10284:84;10421:3;10410:9;10406:19;10393:33;10377:49;;10451:2;10441:8;10438:16;10435:36;;;10467:1;10464;10457:12;10435:36;10505:58;10559:3;10548:8;10537:9;10533:24;10505:58;:::i;:::-;10498:4;10491:5;10487:16;10480:84;10617:3;10606:9;10602:19;10589:33;10573:49;;10647:2;10637:8;10634:16;10631:36;;;10663:1;10660;10653:12;10631:36;;10700:68;10764:3;10753:8;10742:9;10738:24;10700:68;:::i;:::-;10694:3;10687:5;10683:15;10676:93;;9209:1566;;;;:::o;10780:526::-;10902:6;10910;10918;10971:2;10959:9;10950:7;10946:23;10942:32;10939:52;;;10987:1;10984;10977:12;10939:52;11023:9;11010:23;11000:33;;11052:37;11085:2;11074:9;11070:18;11052:37;:::i;:::-;11042:47;;11140:2;11129:9;11125:18;11112:32;-1:-1:-1;;;;;11159:6:119;11156:30;11153:50;;;11199:1;11196;11189:12;11153:50;11222:78;11292:7;11283:6;11272:9;11268:22;11222:78;:::i;:::-;11212:88;;;10780:526;;;;;:::o;11311:471::-;11363:3;11401:5;11395:12;11428:6;11423:3;11416:19;11454:4;11483;11478:3;11474:14;11467:21;;11522:4;11515:5;11511:16;11545:1;11555:202;11569:6;11566:1;11563:13;11555:202;;;11634:13;;-1:-1:-1;;;;;11630:46:119;11618:59;;11697:12;;;;11732:15;;;;11591:1;11584:9;11555:202;;;-1:-1:-1;11773:3:119;;11311:471;-1:-1:-1;;;;;11311:471:119:o;11787:645::-;12016:2;12005:9;11998:21;11979:4;12054:6;12048:13;12097:2;12092;12081:9;12077:18;12070:30;12123:62;12180:3;12169:9;12165:19;12151:12;12123:62;:::i;:::-;12109:76;;12234:4;12226:6;12222:17;12216:24;12308:2;12304:7;12292:9;12284:6;12280:22;12276:36;12271:2;12260:9;12256:18;12249:64;12330:51;12374:6;12358:14;12330:51;:::i;:::-;12322:59;;;;12419:6;12412:4;12401:9;12397:20;12390:36;11787:645;;;;;:::o;13448:347::-;13499:8;13509:6;13563:3;13556:4;13548:6;13544:17;13540:27;13530:55;;13581:1;13578;13571:12;13530:55;-1:-1:-1;13604:20:119;;-1:-1:-1;;;;;13636:30:119;;13633:50;;;13679:1;13676;13669:12;13633:50;13716:4;13708:6;13704:17;13692:29;;13768:3;13761:4;13752:6;13744;13740:19;13736:30;13733:39;13730:59;;;13785:1;13782;13775:12;13730:59;13448:347;;;;;:::o;13800:477::-;13879:6;13887;13895;13948:2;13936:9;13927:7;13923:23;13919:32;13916:52;;;13964:1;13961;13954:12;13916:52;14004:9;13991:23;-1:-1:-1;;;;;14029:6:119;14026:30;14023:50;;;14069:1;14066;14059:12;14023:50;14108:58;14158:7;14149:6;14138:9;14134:22;14108:58;:::i;:::-;14185:8;;14082:84;;-1:-1:-1;14267:2:119;14252:18;;;;14239:32;;13800:477;-1:-1:-1;;;;13800:477:119:o;14282:1026::-;14394:6;14402;14455:2;14443:9;14434:7;14430:23;14426:32;14423:52;;;14471:1;14468;14461:12;14423:52;14510:9;14497:23;14529:31;14554:5;14529:31;:::i;:::-;14579:5;-1:-1:-1;14635:2:119;14620:18;;14607:32;-1:-1:-1;;;;;14688:14:119;;;14685:34;;;14715:1;14712;14705:12;14685:34;14738:22;;;;14794:4;14776:16;;;14772:27;14769:47;;;14812:1;14809;14802:12;14769:47;14845:2;14839:9;14887:4;14879:6;14875:17;14942:6;14930:10;14927:22;14922:2;14910:10;14907:18;14904:46;14901:72;;;14953:18;;:::i;:::-;14989:2;14982:22;15029:16;;15057;;;15054:36;;;15086:1;15083;15076:12;15054:36;15114:44;15150:7;15139:8;15135:2;15131:17;15114:44;:::i;:::-;15106:6;15099:60;;15213:2;15209;15205:11;15192:25;15187:2;15179:6;15175:15;15168:50;15272:2;15268;15264:11;15251:25;15246:2;15238:6;15234:15;15227:50;15296:6;15286:16;;;;;14282:1026;;;;;:::o;15313:450::-;15382:6;15435:2;15423:9;15414:7;15410:23;15406:32;15403:52;;;15451:1;15448;15441:12;15403:52;15491:9;15478:23;-1:-1:-1;;;;;15516:6:119;15513:30;15510:50;;;15556:1;15553;15546:12;15510:50;15579:22;;15632:4;15624:13;;15620:27;-1:-1:-1;15610:55:119;;15661:1;15658;15651:12;15610:55;15684:73;15749:7;15744:2;15731:16;15726:2;15722;15718:11;15684:73;:::i;:::-;15674:83;15313:450;-1:-1:-1;;;;15313:450:119:o;15768:589::-;15891:6;15899;15907;15960:2;15948:9;15939:7;15935:23;15931:32;15928:52;;;15976:1;15973;15966:12;15928:52;16012:9;15999:23;15989:33;;16072:2;16061:9;16057:18;16044:32;16085:31;16110:5;16085:31;:::i;16995:529::-;17072:6;17080;17088;17141:2;17129:9;17120:7;17116:23;17112:32;17109:52;;;17157:1;17154;17147:12;17109:52;17196:9;17183:23;17215:31;17240:5;17215:31;:::i;:::-;17265:5;-1:-1:-1;17322:2:119;17307:18;;17294:32;17335:33;17294:32;17335:33;:::i;:::-;17387:7;-1:-1:-1;17446:2:119;17431:18;;17418:32;17459:33;17418:32;17459:33;:::i;:::-;17511:7;17501:17;;;16995:529;;;;;:::o;17529:546::-;17618:6;17626;17634;17642;17695:2;17683:9;17674:7;17670:23;17666:32;17663:52;;;17711:1;17708;17701:12;17663:52;17747:9;17734:23;17724:33;;17808:2;17797:9;17793:18;17780:32;-1:-1:-1;;;;;17827:6:119;17824:30;17821:50;;;17867:1;17864;17857:12;17821:50;17906:58;17956:7;17947:6;17936:9;17932:22;17906:58;:::i;:::-;17529:546;;17983:8;;-1:-1:-1;17880:84:119;;18065:2;18050:18;18037:32;;17529:546;-1:-1:-1;;;;17529:546:119:o;18315:738::-;18437:6;18445;18453;18461;18469;18477;18485;18538:3;18526:9;18517:7;18513:23;18509:33;18506:53;;;18555:1;18552;18545:12;18506:53;18591:9;18578:23;18568:33;;18648:2;18637:9;18633:18;18620:32;18610:42;;18699:2;18688:9;18684:18;18671:32;18661:42;;18722:38;18756:2;18745:9;18741:18;18722:38;:::i;:::-;18712:48;;18807:3;18796:9;18792:19;18779:33;18769:43;;18863:3;18852:9;18848:19;18835:33;-1:-1:-1;;;;;18883:6:119;18880:30;18877:50;;;18923:1;18920;18913:12;18877:50;18946:49;18987:7;18978:6;18967:9;18963:22;18946:49;:::i;:::-;18936:59;;;19042:3;19031:9;19027:19;19014:33;19004:43;;18315:738;;;;;;;;;;:::o;19058:652::-;19181:6;19189;19242:2;19230:9;19221:7;19217:23;19213:32;19210:52;;;19258:1;19255;19248:12;19210:52;19298:9;19285:23;-1:-1:-1;;;;;19368:2:119;19360:6;19357:14;19354:34;;;19384:1;19381;19374:12;19354:34;19422:6;19411:9;19407:22;19397:32;;19467:7;19460:4;19456:2;19452:13;19448:27;19438:55;;19489:1;19486;19479:12;19438:55;19529:2;19516:16;19555:2;19547:6;19544:14;19541:34;;;19571:1;19568;19561:12;19541:34;19624:7;19619:2;19609:6;19606:1;19602:14;19598:2;19594:23;19590:32;19587:45;19584:65;;;19645:1;19642;19635:12;19584:65;19676:2;19668:11;;;;;19698:6;;-1:-1:-1;19058:652:119;;-1:-1:-1;;;;19058:652:119:o;19715:127::-;19776:10;19771:3;19767:20;19764:1;19757:31;19807:4;19804:1;19797:15;19831:4;19828:1;19821:15;19847:125;19912:9;;;19933:10;;;19930:36;;;19946:18;;:::i;19977:294::-;20134:19;;;20191:2;20187:15;-1:-1:-1;;;;;;20183:53:119;20178:2;20169:12;;20162:75;20262:2;20253:12;;19977:294::o;20697:127::-;20758:10;20753:3;20749:20;20746:1;20739:31;20789:4;20786:1;20779:15;20813:4;20810:1;20803:15;21674:209;21706:1;21732;21722:132;;21776:10;21771:3;21767:20;21764:1;21757:31;21811:4;21808:1;21801:15;21839:4;21836:1;21829:15;21722:132;-1:-1:-1;21868:9:119;;21674:209::o;22238:128::-;22305:9;;;22326:11;;;22323:37;;;22340:18;;:::i;22371:184::-;22441:6;22494:2;22482:9;22473:7;22469:23;22465:32;22462:52;;;22510:1;22507;22500:12;22462:52;-1:-1:-1;22533:16:119;;22371:184;-1:-1:-1;22371:184:119:o;22742:290::-;22812:6;22865:2;22853:9;22844:7;22840:23;22836:32;22833:52;;;22881:1;22878;22871:12;22833:52;22907:16;;-1:-1:-1;;;;;22952:31:119;;22942:42;;22932:70;;22998:1;22995;22988:12;23037:273;23105:6;23158:2;23146:9;23137:7;23133:23;23129:32;23126:52;;;23174:1;23171;23164:12;23126:52;23206:9;23200:16;23256:4;23249:5;23245:16;23238:5;23235:27;23225:55;;23276:1;23273;23266:12;23953:137;-1:-1:-1;;;;;24031:5:119;24027:38;24020:5;24017:49;24007:77;;24080:1;24077;24070:12;24095:493;24198:6;24251:2;24239:9;24230:7;24226:23;24222:32;24219:52;;;24267:1;24264;24257:12;24219:52;24293:22;;:::i;:::-;24345:9;24339:16;24364:33;24389:7;24364:33;:::i;:::-;24406:22;;24473:2;24458:18;;24452:25;24486:32;24452:25;24486:32;:::i;:::-;24545:2;24534:14;;24527:31;24538:5;24095:493;-1:-1:-1;;;24095:493:119:o;24593:135::-;24632:3;24653:17;;;24650:43;;24673:18;;:::i;:::-;-1:-1:-1;24720:1:119;24709:13;;24593:135::o;24733:251::-;24803:6;24856:2;24844:9;24835:7;24831:23;24827:32;24824:52;;;24872:1;24869;24862:12;24824:52;24904:9;24898:16;24923:31;24948:5;24923:31;:::i;28598:294::-;28668:6;28721:2;28709:9;28700:7;28696:23;28692:32;28689:52;;;28737:1;28734;28727:12;28689:52;28763:16;;-1:-1:-1;;28808:35:119;;28798:46;;28788:74;;28858:1;28855;28848:12;29443:249;29512:6;29565:2;29553:9;29544:7;29540:23;29536:32;29533:52;;;29581:1;29578;29571:12;29533:52;29613:9;29607:16;29632:30;29656:5;29632:30;:::i;30144:191::-;-1:-1:-1;;;;;30271:10:119;;;30259;;;30255:27;;30294:12;;;30291:38;;;30309:18;;:::i;:::-;30291:38;30144:191;;;;:::o;31242:646::-;31490:10;31485:3;31481:20;31472:6;31467:3;31463:16;31459:43;31454:3;31447:56;31429:3;31534:1;31529:3;31525:11;31565:6;31559:13;31614:4;31653;31645:6;31641:17;31676:1;31686:175;31700:6;31697:1;31694:13;31686:175;;;31763:13;;31749:28;;31799:14;;;;31836:15;;;;31722:1;31715:9;31686:175;;;-1:-1:-1;31877:5:119;;31242:646;-1:-1:-1;;;;;;;31242:646:119:o;31893:410::-;32095:2;32077:21;;;32134:2;32114:18;;;32107:30;32173:34;32168:2;32153:18;;32146:62;-1:-1:-1;;;32239:2:119;32224:18;;32217:44;32293:3;32278:19;;31893:410::o;32308:271::-;32491:6;32483;32478:3;32465:33;32447:3;32517:16;;32542:13;;;32517:16;32308:271;-1:-1:-1;32308:271:119:o;32584:486::-;32786:2;32768:21;;;32825:2;32805:18;;;32798:30;32864:34;32859:2;32844:18;;32837:62;32935:34;32930:2;32915:18;;32908:62;-1:-1:-1;;;33001:3:119;32986:19;;32979:49;33060:3;33045:19;;32584:486::o;33075:422::-;33116:3;33154:5;33148:12;33181:6;33176:3;33169:19;33206:1;33216:162;33230:6;33227:1;33224:13;33216:162;;;33292:4;33348:13;;;33344:22;;33338:29;33320:11;;;33316:20;;33309:59;33245:12;33216:162;;;33220:3;33423:1;33416:4;33407:6;33402:3;33398:16;33394:27;33387:38;33486:4;33479:2;33475:7;33470:2;33462:6;33458:15;33454:29;33449:3;33445:39;33441:50;33434:57;;;33075:422;;;;:::o;33502:624::-;33776:1;33772;33767:3;33763:11;33759:19;33751:6;33747:32;33736:9;33729:51;33816:2;33811;33800:9;33796:18;33789:30;33710:4;33854:6;33848:13;33897:4;33892:2;33881:9;33877:18;33870:32;33925:51;33971:3;33960:9;33956:19;33942:12;33925:51;:::i;:::-;33911:65;;34032:2;34024:6;34020:15;34014:22;34007:4;33996:9;33992:20;33985:52;34092:2;34084:6;34080:15;34074:22;34068:3;34057:9;34053:19;34046:51;34114:6;34106:14;;;33502:624;;;;;:::o;34131:219::-;34280:2;34269:9;34262:21;34243:4;34300:44;34340:2;34329:9;34325:18;34317:6;34300:44;:::i;34664:265::-;-1:-1:-1;;;;;34793:10:119;;;34805;;;34789:27;34836:20;;;;34735:26;34875:24;;;34865:58;;34903:18;;:::i;34934:168::-;35007:9;;;35038;;35055:15;;;35049:22;;35035:37;35025:71;;35076:18;;:::i;35844:267::-;35933:6;35928:3;35921:19;35985:6;35978:5;35971:4;35966:3;35962:14;35949:43;-1:-1:-1;36037:1:119;36012:16;;;36030:4;36008:27;;;36001:38;;;;36093:2;36072:15;;;-1:-1:-1;;36068:29:119;36059:39;;;36055:50;;35844:267::o;36116:430::-;-1:-1:-1;;;;;36329:32:119;;36311:51;;36410:10;36398:23;;36393:2;36378:18;;36371:51;36458:2;36453;36438:18;;36431:30;;;-1:-1:-1;;36478:62:119;;36521:18;;36513:6;36505;36478:62;:::i;:::-;36470:70;36116:430;-1:-1:-1;;;;;;36116:430:119:o;36551:503::-;-1:-1:-1;;;;;36792:32:119;;36774:51;;36873:10;36861:23;;36856:2;36841:18;;36834:51;36921:3;36916:2;36901:18;;36894:31;;;-1:-1:-1;;36942:63:119;;36985:19;;36977:6;36969;36942:63;:::i;:::-;36934:71;;37041:6;37036:2;37025:9;37021:18;37014:34;36551:503;;;;;;;;:::o;37466:804::-;37772:4;37801:3;37831:6;37820:9;37813:25;37874:6;37869:2;37858:9;37854:18;37847:34;37917:6;37912:2;37901:9;37897:18;37890:34;-1:-1:-1;;;;;37972:31:119;37964:6;37960:44;37955:2;37944:9;37940:18;37933:72;38042:6;38036:3;38025:9;38021:19;38014:35;38086:2;38080:3;38069:9;38065:19;38058:31;38106:44;38146:2;38135:9;38131:18;38123:6;38106:44;:::i;:::-;38181:3;38166:19;;38159:35;;;;-1:-1:-1;;;;;;;38231:32:119;;;;38225:3;38210:19;;;38203:61;38098:52;37466:804;-1:-1:-1;;;;;;37466:804:119:o;38275:245::-;38342:6;38395:2;38383:9;38374:7;38370:23;38366:32;38363:52;;;38411:1;38408;38401:12;38363:52;38443:9;38437:16;38462:28;38484:5;38462:28;:::i;39010:335::-;39113:4;39171:11;39158:25;39265:3;39261:8;39250;39234:14;39230:29;39226:44;39206:18;39202:69;39192:97;;39285:1;39282;39275:12;39192:97;39306:33;;;;;39010:335;-1:-1:-1;;39010:335:119:o;39350:142::-;39426:20;;39455:31;39426:20;39455:31;:::i;40424:758::-;40554:6;40549:3;40542:19;40524:3;40580:4;40609;40604:3;40600:14;40593:21;;40637:5;40660:1;40670:487;40684:6;40681:1;40678:13;40670:487;;;40761:6;40748:20;40781:33;40806:7;40781:33;:::i;:::-;-1:-1:-1;;;;;40839:33:119;40827:46;;40914:15;;;40901:29;40943:32;40901:29;40943:32;:::i;:::-;-1:-1:-1;;;;;41009:40:119;40995:12;;;40988:62;41073:4;41097:12;;;;41132:15;;;;;40706:1;40699:9;40670:487;;41187:2218;41440:2;41492:21;;;41465:18;;;41548:22;;;41411:4;;41589:2;41607:18;;;41671:1;41667:14;;;41652:30;;41648:39;;41710:6;41411:4;41744:1632;41758:6;41755:1;41752:13;41744:1632;;;41823:22;;;-1:-1:-1;;41819:36:119;41807:49;;41895:20;;41970:14;41966:27;;;-1:-1:-1;;41962:42:119;41938:67;;41928:95;;42019:1;42016;42009:12;41928:95;42049:31;;42103:4;42148:19;;42224:14;42220:26;;;-1:-1:-1;;42216:40:119;42190:67;;42180:95;;42271:1;42268;42261:12;42180:95;42303:32;;42411:16;;;;42362:21;-1:-1:-1;;;;;42443:30:119;;42440:50;;;42486:1;42483;42476:12;42440:50;42546:6;42543:1;42539:14;42523;42519:35;42510:7;42506:49;42503:69;;;42568:1;42565;42558:12;42503:69;42600:2;42592:6;42585:18;42630:101;42727:2;42719:6;42715:15;42707:6;42698:7;42630:101;:::i;:::-;42616:115;;;;42764:42;42802:2;42795:5;42791:14;42764:42;:::i;:::-;-1:-1:-1;;;;;12520:31:119;42869:15;;;12508:44;42935:14;;;42922:28;42905:15;;;42898:53;42974:4;43013:33;43031:14;;;43013:33;:::i;:::-;16623:10;16612:22;43093:15;;;16600:35;43132:4;43171:33;43189:14;;;43171:33;:::i;:::-;16623:10;16612:22;43251:15;;16600:35;;;;-1:-1:-1;43354:12:119;;;;43319:15;;;;41780:1;41773:9;41744:1632;;;-1:-1:-1;43393:6:119;;41187:2218;-1:-1:-1;;;;;;;;41187:2218:119:o;44887:197::-;44925:3;44953:6;44994:2;44987:5;44983:14;45021:2;45012:7;45009:15;45006:41;;45027:18;;:::i;:::-;45076:1;45063:15;;44887:197;-1:-1:-1;;;44887:197:119:o","linkReferences":{},"immutableReferences":{"18523":[{"start":1074,"length":32},{"start":4111,"length":32},{"start":5283,"length":32},{"start":5706,"length":32},{"start":6289,"length":32}],"18526":[{"start":971,"length":32},{"start":7133,"length":32},{"start":7629,"length":32}],"18529":[{"start":919,"length":32},{"start":6640,"length":32}],"18532":[{"start":1620,"length":32},{"start":6109,"length":32}],"23362":[{"start":1020,"length":32},{"start":8634,"length":32},{"start":8846,"length":32},{"start":8973,"length":32}],"23365":[{"start":12413,"length":32},{"start":12601,"length":32},{"start":12828,"length":32}],"23368":[{"start":2923,"length":32},{"start":3066,"length":32},{"start":3194,"length":32},{"start":8550,"length":32},{"start":8754,"length":32},{"start":10729,"length":32},{"start":11138,"length":32}],"23371":[{"start":3396,"length":32},{"start":3733,"length":32},{"start":3884,"length":32},{"start":10926,"length":32},{"start":11303,"length":32},{"start":11462,"length":32}]}},"methodIdentifiers":{"alignedAggregator()":"4a5bf632","avsDirectory()":"6b3aa72e","balanceOf(address)":"70a08231","batchersBalances(address)":"f474b520","batchesState(bytes32)":"b099627e","blsApkRegistry()":"5df45946","checkPublicInput(bytes,bytes32)":"95c6d604","checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":"4ae07c37","createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])":"fce36c7d","createNewTask(bytes32,string,uint256)":"d66eaabd","delegation()":"df5cf723","depositToBatcher(address)":"4223d551","deregisterOperatorFromAVS(address)":"a364f4da","getOperatorRestakedStrategies(address)":"33cfb7b7","getRestakeableStrategies()":"e481af9d","initialize(address,address,address)":"c0c53b8b","initializeAggregator(address)":"800fb61f","owner()":"8da5cb5b","registerOperatorToAVS(address,(bytes,bytes32,uint256))":"9926ee7d","registryCoordinator()":"6d14a987","renounceOwnership()":"715018a6","respondToTaskV2(bytes32,address,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":"ab21739a","rewardsInitiator()":"fc299dee","setAggregator(address)":"f9120af6","setRewardsInitiator(address)":"3bc28c8c","setStaleStakesForbidden(bool)":"416c7e5e","stakeRegistry()":"68304835","staleStakesForbidden()":"b98d0908","transferOwnership(address)":"f2fde38b","trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))":"171f1d5b","updateAVSMetadataURI(string)":"a98fb355","verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256)":"fa534dc0","verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256,address)":"06045a91","withdraw(uint256)":"2e1a7d4d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IAVSDirectory\",\"name\":\"__avsDirectory\",\"type\":\"address\"},{\"internalType\":\"contract IRewardsCoordinator\",\"name\":\"__rewardsCoordinator\",\"type\":\"address\"},{\"internalType\":\"contract IRegistryCoordinator\",\"name\":\"__registryCoordinator\",\"type\":\"address\"},{\"internalType\":\"contract IStakeRegistry\",\"name\":\"__stakeRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchIdentifierHash\",\"type\":\"bytes32\"}],\"name\":\"BatchAlreadyResponded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchIdentifierHash\",\"type\":\"bytes32\"}],\"name\":\"BatchAlreadySubmitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchIdentifierHash\",\"type\":\"bytes32\"}],\"name\":\"BatchDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"respondToTaskFeeLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"txCost\",\"type\":\"uint256\"}],\"name\":\"ExceededMaxRespondFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"batcher\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"required\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"InsufficientFunds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"InvalidDepositAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"signedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"}],\"name\":\"InvalidQuorumThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alignedAggregator\",\"type\":\"address\"}],\"name\":\"SenderIsNotAggregator\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"BatchVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"batcher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"name\":\"BatcherBalanceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"taskCreatedBlock\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"batchDataPointer\",\"type\":\"string\"}],\"name\":\"NewBatchV2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"taskCreatedBlock\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"batchDataPointer\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"respondToTaskFeeLimit\",\"type\":\"uint256\"}],\"name\":\"NewBatchV3\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prevRewardsInitiator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRewardsInitiator\",\"type\":\"address\"}],\"name\":\"RewardsInitiatorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"StaleStakesForbiddenUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"alignedAggregator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"avsDirectory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"batchersBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"batchesState\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"taskCreatedBlock\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"responded\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"respondToTaskFeeLimit\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blsApkRegistry\",\"outputs\":[{\"internalType\":\"contract IBLSApkRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"checkPublicInput\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"referenceBlockNumber\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint32[]\",\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"quorumApks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"},{\"internalType\":\"uint32[]\",\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[][]\",\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\"}],\"internalType\":\"struct IBLSSignatureChecker.NonSignerStakesAndSignature\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"checkSignatures\",\"outputs\":[{\"components\":[{\"internalType\":\"uint96[]\",\"name\":\"signedStakeForQuorum\",\"type\":\"uint96[]\"},{\"internalType\":\"uint96[]\",\"name\":\"totalStakeForQuorum\",\"type\":\"uint96[]\"}],\"internalType\":\"struct IBLSSignatureChecker.QuorumStakeTotals\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"contract IStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"multiplier\",\"type\":\"uint96\"}],\"internalType\":\"struct IRewardsCoordinator.StrategyAndMultiplier[]\",\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"startTimestamp\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"duration\",\"type\":\"uint32\"}],\"internalType\":\"struct IRewardsCoordinator.RewardsSubmission[]\",\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\"}],\"name\":\"createAVSRewardsSubmission\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"batchDataPointer\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"respondToTaskFeeLimit\",\"type\":\"uint256\"}],\"name\":\"createNewTask\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegation\",\"outputs\":[{\"internalType\":\"contract IDelegationManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"depositToBatcher\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"deregisterOperatorFromAVS\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"getOperatorRestakedStrategies\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRestakeableStrategies\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rewardsInitiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_alignedAggregator\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_alignedAggregator\",\"type\":\"address\"}],\"name\":\"initializeAggregator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureUtils.SignatureWithSaltAndExpiry\",\"name\":\"operatorSignature\",\"type\":\"tuple\"}],\"name\":\"registerOperatorToAVS\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registryCoordinator\",\"outputs\":[{\"internalType\":\"contract IRegistryCoordinator\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32[]\",\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"quorumApks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"},{\"internalType\":\"uint32[]\",\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[][]\",\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\"}],\"internalType\":\"struct IBLSSignatureChecker.NonSignerStakesAndSignature\",\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\"}],\"name\":\"respondToTaskV2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardsInitiator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_alignedAggregator\",\"type\":\"address\"}],\"name\":\"setAggregator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRewardsInitiator\",\"type\":\"address\"}],\"name\":\"setRewardsInitiator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"setStaleStakesForbidden\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeRegistry\",\"outputs\":[{\"internalType\":\"contract IStakeRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staleStakesForbidden\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"apk\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"}],\"name\":\"trySignatureAndApkVerification\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"pairingSuccessful\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"siganatureIsValid\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_metadataURI\",\"type\":\"string\"}],\"name\":\"updateAVSMetadataURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"proofCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubInputCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"provingSystemAuxDataCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes20\",\"name\":\"proofGeneratorAddr\",\"type\":\"bytes20\"},{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"merkleProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"verificationDataBatchIndex\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"verifyBatchInclusion\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"proofCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubInputCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"provingSystemAuxDataCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes20\",\"name\":\"proofGeneratorAddr\",\"type\":\"bytes20\"},{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"merkleProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"verificationDataBatchIndex\",\"type\":\"uint256\"}],\"name\":\"verifyBatchInclusion\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"events\":{\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))\":{\"details\":\"Before signature verification, the function verifies operator stake information. This includes ensuring that the provided `referenceBlockNumber` is correct, i.e., ensure that the stake returned from the specified block number is recent enough and that the stake is either the most recent update for the total stake (of the operator) or latest before the referenceBlockNumber.NOTE: Be careful to ensure `msgHash` is collision-resistant! This method does not hash `msgHash` in any way, so if an attacker is able to pass in an arbitrary value, they may be able to tamper with signature verification.\",\"params\":{\"msgHash\":\"is the hash being signed\",\"params\":\"is the struct containing information on nonsigners, stakes, quorum apks, and the aggregate signature\",\"referenceBlockNumber\":\"is the block number at which the stake information is being verified\"},\"returns\":{\"_0\":\"quorumStakeTotals is the struct containing the total and signed stake for each quorum\",\"_1\":\"signatoryRecordHash is the hash of the signatory record, which is used for fraud proofs\"}},\"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])\":{\"details\":\"Only callabe by the permissioned rewardsInitiator addressThe duration of the `rewardsSubmission` cannot exceed `MAX_REWARDS_DURATION`The tokens are sent to the `RewardsCoordinator` contractStrategies must be in ascending order of addresses to check for duplicatesThis function will revert if the `rewardsSubmission` is malformed, e.g. if the `strategies` and `weights` arrays are of non-equal lengths\",\"params\":{\"rewardsSubmissions\":\"The rewards submissions being created\"}},\"deregisterOperatorFromAVS(address)\":{\"params\":{\"operator\":\"The address of the operator to deregister.\"}},\"getOperatorRestakedStrategies(address)\":{\"details\":\"This function is intended to be called off-chainNo guarantee is made on whether the operator has shares for a strategy in a quorum or uniqueness of each element in the returned array. The off-chain service should do that validation separately\",\"params\":{\"operator\":\"The address of the operator to get restaked strategies for\"}},\"getRestakeableStrategies()\":{\"details\":\"This function is intended to be called off-chainNo guarantee is made on uniqueness of each element in the returned array. The off-chain service should do that validation separately\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"registerOperatorToAVS(address,(bytes,bytes32,uint256))\":{\"params\":{\"operator\":\"The address of the operator to register.\",\"operatorSignature\":\"The signature, salt, and expiry of the operator's signature.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setRewardsInitiator(address)\":{\"details\":\"only callable by the owner\",\"params\":{\"newRewardsInitiator\":\"The new rewards initiator address\"}},\"setStaleStakesForbidden(bool)\":{\"params\":{\"value\":\"to toggle staleStakesForbidden\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))\":{\"params\":{\"apk\":\"is the claimed G1 public key\",\"apkG2\":\"is provided G2 public key\",\"msgHash\":\"is the hash being signed\",\"sigma\":\"is the G1 point signature\"},\"returns\":{\"pairingSuccessful\":\"is true if the pairing precompile call was successful\",\"siganatureIsValid\":\"is true if the signature is valid\"}},\"updateAVSMetadataURI(string)\":{\"details\":\"only callable by the owner\",\"params\":{\"_metadataURI\":\"is the metadata URI for the AVS\"}}},\"title\":\"Primary entrypoint for procuring services from Aligned.\",\"version\":1},\"userdoc\":{\"events\":{\"StaleStakesForbiddenUpdate(bool)\":{\"notice\":\"Emitted when `staleStakesForbiddenUpdate` is set\"}},\"kind\":\"user\",\"methods\":{\"avsDirectory()\":{\"notice\":\"Returns the EigenLayer AVSDirectory contract.\"},\"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))\":{\"notice\":\"This function is called by disperser when it has aggregated all the signatures of the operators that are part of the quorum for a particular taskNumber and is asserting them into onchain. The function checks that the claim for aggregated signatures are valid. The thesis of this procedure entails: - getting the aggregated pubkey of all registered nodes at the time of pre-commit by the disperser (represented by apk in the parameters), - subtracting the pubkeys of all the signers not in the quorum (nonSignerPubkeys) and storing the output in apk to get aggregated pubkey of all operators that are part of quorum. - use this aggregated pubkey to verify the aggregated signature under BLS scheme.\"},\"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])\":{\"notice\":\"Creates a new rewards submission to the EigenLayer RewardsCoordinator contract, to be split amongst the set of stakers delegated to operators who are registered to this `avs`\"},\"deregisterOperatorFromAVS(address)\":{\"notice\":\"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator deregistration from the AVS\"},\"getOperatorRestakedStrategies(address)\":{\"notice\":\"Returns the list of strategies that the operator has potentially restaked on the AVS\"},\"getRestakeableStrategies()\":{\"notice\":\"Returns the list of strategies that the AVS supports for restaking\"},\"registerOperatorToAVS(address,(bytes,bytes32,uint256))\":{\"notice\":\"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator registration with the AVS\"},\"rewardsInitiator()\":{\"notice\":\"The address of the entity that can initiate rewards\"},\"setRewardsInitiator(address)\":{\"notice\":\"Sets the rewards initiator address\"},\"setStaleStakesForbidden(bool)\":{\"notice\":\"/** RegistryCoordinator owner can either enforce or not that operator stakes are staler than the delegation.minWithdrawalDelayBlocks() window.\"},\"staleStakesForbidden()\":{\"notice\":\"If true, check the staleness of the operator stakes and that its within the delegation withdrawalDelayBlocks window.\"},\"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))\":{\"notice\":\"trySignatureAndApkVerification verifies a BLS aggregate signature and the veracity of a calculated G1 Public key\"},\"updateAVSMetadataURI(string)\":{\"notice\":\"Updates the metadata URI for the AVS\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/core/AlignedLayerServiceManager.sol\":\"AlignedLayerServiceManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin-upgrades-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/\",\":@openzeppelin-upgrades/contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/eigenlayer-middleware/lib/ds-test/src/\",\":eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/\",\":eigenlayer-core-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/\",\":eigenlayer-core/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/\",\":eigenlayer-middleware/=lib/eigenlayer-middleware/src/\",\":eigenlayer-scripts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/script/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/contracts/\"]},\"sources\":{\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IAVSDirectory.sol\":{\"keccak256\":\"0x3f67ab9b510b02dc3c07014b49785f1e167401bdb39cc10f737bbf545632d938\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://48d1267e2df6c8ac9b8f419269ff3d23be9b62606ee6b6d2278c27ffebfd73aa\",\"dweb:/ipfs/QmaFyywKCm1eotKjF1evryW8BMQJzPDstZm1wMRW79phXG\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IBeaconChainOracle.sol\":{\"keccak256\":\"0x0fef07aa6179c77198f1514e12e628aa1c876e04f9c181ec853a322179e5be00\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://51438325876cc2d4c77f58488a7e27b488015d1b663c50be6a5cafbd73b9c983\",\"dweb:/ipfs/QmViCuGoYZzi6wtXA8PPKigqVv3KMuNxEVQ1Td9dGqjL18\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol\":{\"keccak256\":\"0xab76a9f4eff865cbb689f627cf98263488765519d7a4ec5ffbcb0ca4972842f9\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://ff57ce18e8350bf39f190645db0988bc0f1279f1872150a114a1b520c38a2914\",\"dweb:/ipfs/QmSsUXkNUqYuJgGRumHTSs9rAaboGjecotcM4xHrdBYWaZ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IETHPOSDeposit.sol\":{\"keccak256\":\"0x2e60e5f4b0da0a0a4e2a07c63141120998559970c21deac743ea0c64a60a880c\",\"license\":\"CC0-1.0\",\"urls\":[\"bzz-raw://e635c346bde5b7ade9bcf35bc733081520cb86015be4fbc6e761e6e9482c4c91\",\"dweb:/ipfs/QmRoeazEnbFn5SPSWAkoFK2gSN9DMp3hJAnrLWuL2sKutz\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPod.sol\":{\"keccak256\":\"0xb50c36ad96b6679bb80fd8331f949cbfbcba0f529026e1421a4d2bae64396eba\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://5719181d780120f1e688c0da276992a8caf185815917f453b3550537c31ed4cc\",\"dweb:/ipfs/QmYprRC5ZEXhz3zAUND5E8Xjn6s5TL8ZF8QbnndVq7aVPR\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol\":{\"keccak256\":\"0xd8a64dbed03d3a5cdbefe1af75968f2dde07f973749c2ef5197bf7187c3e448c\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://27ccc7c1fd9352e9f9b357c9063d255dc0ed9583f43db09f786ac7497d7846b8\",\"dweb:/ipfs/QmeJzuJkE9m2NUNwZSp4tGZEZmih1LeucePup8hzMVDRbG\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol\":{\"keccak256\":\"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324\",\"dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol\":{\"keccak256\":\"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d\",\"dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IRewardsCoordinator.sol\":{\"keccak256\":\"0xeab6f1140a90eb7f107d95bae1e8b2ecfbfe36282d62c9df69e6a564c2c59771\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://785cd2777cdcab3b827b5eef2a4dae02c56db07252fdcefd8dd1016be034dc71\",\"dweb:/ipfs/QmNyDFchTuMeiVoxNEfQw96JVq7DfkohGz1txKXe7HyNbq\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISignatureUtils.sol\":{\"keccak256\":\"0x5e52482a31d94401a8502f3014c4aada1142b4450fc0596dff8e1866a85fe092\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://17dc326c9361bc1453379f26545963557b2883b0c88bc07d4477e04dbcc0cc8c\",\"dweb:/ipfs/QmZXT7A816W5JH2ymirE2ETaJttqztFCsEL22AV8oEfCK9\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol\":{\"keccak256\":\"0x45dfaa2cfdde87f48a6ee38bb6fb739847aef7cf3f6137bdcd8c8a330559ec79\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://1b7f6bd75b42fcaa91ceb7140cb2c41926a1fe6ee2d3161e4fe6186b181ba232\",\"dweb:/ipfs/QmZjbdKiSs33C9i3GDc3sdD39Pz4YPkDoKftowoUF4kHmY\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol\":{\"keccak256\":\"0xc530c6a944b70051fd0dac0222de9a4b5baadeaf94ad194daac6ad8d2ace7420\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://3767df0364ce835b52e786d2851431eb9223fe4747602107505477e162231d73\",\"dweb:/ipfs/QmZkH5bKUygQrJomndNaQqkefVRW4rRefCa8HPJ5HMczxJ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategyManager.sol\":{\"keccak256\":\"0x68bf02a443fc8b2f612eba3d39bfefa5f61f78b549f111cdecec5f2c58236a52\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://76bc6875ce74128b861fdac5fd1c0c72f3cc9bacf67fa4a73721b95fb23959ef\",\"dweb:/ipfs/QmPix4WJmf9fXyMZxfgwXEHBcg7V4NAbRqs4HUf5YrSJcM\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/BeaconChainProofs.sol\":{\"keccak256\":\"0x70d89b05c1c5f47b74a07fbb5a2c05e606fed494e749ea98a9915b7be73df377\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://db1d3bfaee69aef53c8b12b492a17584e6d1ac94610cb8b38aad33e1cdd81af7\",\"dweb:/ipfs/QmfVsMTj1hcf9fMEm5RzvtcBN4dMcAKFBgUUDsNDr5XFpq\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Endian.sol\":{\"keccak256\":\"0xf3b72653ba2567a978d4612703fa5f71c5fcd015d8dac7818468f22772d90a9d\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://cee9d09370d968138d775c39525db4cd0768d60d17be7685519de12444e7dd2f\",\"dweb:/ipfs/QmUdGh8wpMei3edKiEWA6S96s9dRt4ekZKJ4nau356X8xQ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Merkle.sol\":{\"keccak256\":\"0x9095fc29b96d102b10c02d44b3a6fbfa25593ef6ae4a810363ab885b9e6b0f71\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0945132d482d56278edddb1d32209903c4d3839c87ba4317aadd97dc23610d0f\",\"dweb:/ipfs/QmVuM2aLRHxitx4rPx3GTYTBCVNcjYn6sHBRr1biUjLBP5\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354\",\"dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"lib/eigenlayer-middleware/src/BLSSignatureChecker.sol\":{\"keccak256\":\"0x3a5c205c596d3d73c7afa63ffbbfac8204f6d6a26c151ef26b47278981c3c0fe\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://4beb88bf5b7c7e614f0d87b157d7a4b67afbf1cc93f3127622bd66f696799241\",\"dweb:/ipfs/QmWJKb6qsd69bWgpAHX6deCkJqmJdo9oBLQAXJk97gWEE2\"]},\"lib/eigenlayer-middleware/src/ServiceManagerBase.sol\":{\"keccak256\":\"0x7e32ef76daf32e5eb5a93cecf204223e64243f42afe70c7ca71ad3db3925b9c4\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://19c10aa22f2e86e27e946b65c434e541caa6af06fcdde46c3b5e9b42890bd221\",\"dweb:/ipfs/QmPb5qDRdbJTniKSqsbjVhbtwdb72G9hWPYcHtVvj1zBxg\"]},\"lib/eigenlayer-middleware/src/ServiceManagerBaseStorage.sol\":{\"keccak256\":\"0xa544114dbf6d973a815f997a2ac9237c531c40b08c91d3a65a23b152ed621e1e\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://4cf69f9be7d3f3c4184b61b267280a829040973633ea9d95e2ec0dbf70f40a2e\",\"dweb:/ipfs/QmT2HeCJWBLX2p4KAWnyU318MMx9USb2brqCKq1vn2pXpR\"]},\"lib/eigenlayer-middleware/src/interfaces/IBLSApkRegistry.sol\":{\"keccak256\":\"0xc07a5edfd95ab4f16f16a8dc8e76eadf4b0e90fe49db90540d01daaad86898c5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://52b53266450a53da641e82d8ae3be93c5e09f8342b4ea0cc96bb9038d8406354\",\"dweb:/ipfs/QmVuoiQyqPTLCGnyt8zDaxiyaj4ETdgTGKv4MDHWzqEDjp\"]},\"lib/eigenlayer-middleware/src/interfaces/IBLSSignatureChecker.sol\":{\"keccak256\":\"0xee5823a6674e553c71f5e127f08245827eb116d1ad418b5a7f2a9d6985fd95e0\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://94aa26debddca6c0784585340cf891de4c2d7edaa3e5ec7229af9730312a5a51\",\"dweb:/ipfs/QmWbHGbM7eVYTAmrCVaDU8b4YTm9VAN82XgLDR78uHC7vj\"]},\"lib/eigenlayer-middleware/src/interfaces/IIndexRegistry.sol\":{\"keccak256\":\"0x83b2d56aacf27e65c4959a832c5de573e013908c044f6e48ea8284ac5282ae2b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://877af382587e96bb39bcc6db8bb5e4b871db5025c52347d4bee9afeaa4a6cc8d\",\"dweb:/ipfs/QmdnhsQCChzq2o5NgbeT3JxSsEcMm1PC9QW6zenZNPjD9F\"]},\"lib/eigenlayer-middleware/src/interfaces/IRegistry.sol\":{\"keccak256\":\"0x51426a17fb7e54bd3720e2890104e97a8559a13ff248b3d6b840916751c143d3\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://01f91289e6100d528cb8b318cb14ff22a0bc52882c9d4db41585e030cc9ddc25\",\"dweb:/ipfs/Qmb22nqGrsrtNovHRwbMCvDHGENuxAgrWu3Db4p7Er2MHY\"]},\"lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol\":{\"keccak256\":\"0xdd8effb082c1d5957d5ff43d7c59497b32866a6d82bcc7d5efa49ea9bc9b3385\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://cb33a2a1446585b13b7a509e880c60d658d2d2522ec48a9f02e30d2cff54002d\",\"dweb:/ipfs/QmVNG8ZPZkXzNEadPdTj1uBYLiZdCnYfsE5iGU6nJcJXiD\"]},\"lib/eigenlayer-middleware/src/interfaces/IServiceManager.sol\":{\"keccak256\":\"0x7602cfb4397a114a0ed60e70e8e1d729fdcf406b585838181b3cb3ffa6ac9a9a\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b718fa016a13a2a5ce298bc5ea7495cc70cf9c358211c75595d5c9dde9a6cc0f\",\"dweb:/ipfs/QmQNrVmU7P7pRqGBJuTQDkjf3wMDY2kJm7zXdtQwsQTbzY\"]},\"lib/eigenlayer-middleware/src/interfaces/IServiceManagerUI.sol\":{\"keccak256\":\"0x365761699b4a5b7360ee6c75f12606eefc4b0394754c8b8e1e1eefec0cba7ffb\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://ac14ada180b66cbbc5f9de0d6b4bb87b5946d2a9569ae88f2f62aaca47e879a8\",\"dweb:/ipfs/QmcN9xKYF24naNWc6cYah9suz5gJSYE9nPj9eZFWnP35VX\"]},\"lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol\":{\"keccak256\":\"0x1b8b4d757c1b804bc4cf6fbbf8bf8f89ebdeb30a31014751fe7d01deb9d513d4\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://984bf2777b898ed187d28997f9783f5c293a1a1848e3e9aa470ce9183d454c97\",\"dweb:/ipfs/Qme3aTpBrkLu8wYHFMZbCfhXHoZ1M6SpXkeC237T9BuU5B\"]},\"lib/eigenlayer-middleware/src/libraries/BN254.sol\":{\"keccak256\":\"0xb428c8d0c3b325507a88a61a80115493eb88606ccc19ed64a31e11294ab853b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7b6fb935bfe0494e6ff970c8f30a86d5f4cf5c3e0967300c28cd383c043acae\",\"dweb:/ipfs/QmUHfFZaVjLPXhkBmcxrZhAHZaSFQDqXtrLGpjGBQBa5Ki\"]},\"lib/eigenlayer-middleware/src/libraries/BitmapUtils.sol\":{\"keccak256\":\"0x44315ac460be30a6b18fd4df4d1b8afb46653bf4dc06ca9f93c32353fd0605c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da14f2ead3a375b02afd09d4a02edddf7b63a88945746b96789b2473184fdb04\",\"dweb:/ipfs/QmRqcjxa2Vv2MrLdPeAwsktXdWTirapEDsRbJCyYRtKT6g\"]},\"src/core/AlignedLayerServiceManager.sol\":{\"keccak256\":\"0x071db0b2db58624e5887a1ed0bdbd19e79688a379e7b57415f122a11f27962f1\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://23c2c56caa54d6a078df443b96cc0a0336b5e258cd08f9ad951cb2bc95e92eed\",\"dweb:/ipfs/QmUvimvUF4akJy13wfpbzJox8bJShWaF9D7qRM8597HLSw\"]},\"src/core/AlignedLayerServiceManagerStorage.sol\":{\"keccak256\":\"0xcc7cdd02eb9044bc3ee898c154c81a34c4b2efade8a8748106b183ea5c68bbe7\",\"urls\":[\"bzz-raw://47a40b8a9bab3e815b7eea4e45d9fb81046813a94f0bdd1d3ba4dbc6d9b5fde0\",\"dweb:/ipfs/QmPdrATs8bFAgGr4dJGsvDTU3oGBG2J2QoYuQy434xNTN3\"]},\"src/core/IAlignedLayerServiceManager.sol\":{\"keccak256\":\"0xc3f83afcd17a5f5b953906e406e24a09bf58a17c0c7b4cd47bed95322084f473\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6ad3316af22ab60033d7236585512d82acfb604ec7efda34330634791998ab8d\",\"dweb:/ipfs/QmU5BApqXk5STG6LgGccU6Fbd1Tg7WD6AnY79ZiJRM3LvQ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"contract IAVSDirectory","name":"__avsDirectory","type":"address"},{"internalType":"contract IRewardsCoordinator","name":"__rewardsCoordinator","type":"address"},{"internalType":"contract IRegistryCoordinator","name":"__registryCoordinator","type":"address"},{"internalType":"contract IStakeRegistry","name":"__stakeRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"bytes32","name":"batchIdentifierHash","type":"bytes32"}],"type":"error","name":"BatchAlreadyResponded"},{"inputs":[{"internalType":"bytes32","name":"batchIdentifierHash","type":"bytes32"}],"type":"error","name":"BatchAlreadySubmitted"},{"inputs":[{"internalType":"bytes32","name":"batchIdentifierHash","type":"bytes32"}],"type":"error","name":"BatchDoesNotExist"},{"inputs":[{"internalType":"uint256","name":"respondToTaskFeeLimit","type":"uint256"},{"internalType":"uint256","name":"txCost","type":"uint256"}],"type":"error","name":"ExceededMaxRespondFee"},{"inputs":[{"internalType":"address","name":"batcher","type":"address"},{"internalType":"uint256","name":"required","type":"uint256"},{"internalType":"uint256","name":"available","type":"uint256"}],"type":"error","name":"InsufficientFunds"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"type":"error","name":"InvalidDepositAmount"},{"inputs":[{"internalType":"uint256","name":"signedStake","type":"uint256"},{"internalType":"uint256","name":"requiredStake","type":"uint256"}],"type":"error","name":"InvalidQuorumThreshold"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"alignedAggregator","type":"address"}],"type":"error","name":"SenderIsNotAggregator"},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32","indexed":true},{"internalType":"address","name":"senderAddress","type":"address","indexed":false}],"type":"event","name":"BatchVerified","anonymous":false},{"inputs":[{"internalType":"address","name":"batcher","type":"address","indexed":true},{"internalType":"uint256","name":"newBalance","type":"uint256","indexed":false}],"type":"event","name":"BatcherBalanceUpdated","anonymous":false},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32","indexed":true},{"internalType":"address","name":"senderAddress","type":"address","indexed":false},{"internalType":"uint32","name":"taskCreatedBlock","type":"uint32","indexed":false},{"internalType":"string","name":"batchDataPointer","type":"string","indexed":false}],"type":"event","name":"NewBatchV2","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32","indexed":true},{"internalType":"address","name":"senderAddress","type":"address","indexed":false},{"internalType":"uint32","name":"taskCreatedBlock","type":"uint32","indexed":false},{"internalType":"string","name":"batchDataPointer","type":"string","indexed":false},{"internalType":"uint256","name":"respondToTaskFeeLimit","type":"uint256","indexed":false}],"type":"event","name":"NewBatchV3","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"prevRewardsInitiator","type":"address","indexed":false},{"internalType":"address","name":"newRewardsInitiator","type":"address","indexed":false}],"type":"event","name":"RewardsInitiatorUpdated","anonymous":false},{"inputs":[{"internalType":"bool","name":"value","type":"bool","indexed":false}],"type":"event","name":"StaleStakesForbiddenUpdate","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"alignedAggregator","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"avsDirectory","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"batchersBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"batchesState","outputs":[{"internalType":"uint32","name":"taskCreatedBlock","type":"uint32"},{"internalType":"bool","name":"responded","type":"bool"},{"internalType":"uint256","name":"respondToTaskFeeLimit","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"blsApkRegistry","outputs":[{"internalType":"contract IBLSApkRegistry","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"publicInput","type":"bytes"},{"internalType":"bytes32","name":"hash","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"checkPublicInput","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"msgHash","type":"bytes32"},{"internalType":"uint32","name":"referenceBlockNumber","type":"uint32"},{"internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","name":"params","type":"tuple","components":[{"internalType":"uint32[]","name":"nonSignerQuorumBitmapIndices","type":"uint32[]"},{"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G1Point[]","name":"quorumApks","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint32[]","name":"quorumApkIndices","type":"uint32[]"},{"internalType":"uint32[]","name":"totalStakeIndices","type":"uint32[]"},{"internalType":"uint32[][]","name":"nonSignerStakeIndices","type":"uint32[][]"}]}],"stateMutability":"view","type":"function","name":"checkSignatures","outputs":[{"internalType":"struct IBLSSignatureChecker.QuorumStakeTotals","name":"","type":"tuple","components":[{"internalType":"uint96[]","name":"signedStakeForQuorum","type":"uint96[]"},{"internalType":"uint96[]","name":"totalStakeForQuorum","type":"uint96[]"}]},{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"struct IRewardsCoordinator.RewardsSubmission[]","name":"rewardsSubmissions","type":"tuple[]","components":[{"internalType":"struct IRewardsCoordinator.StrategyAndMultiplier[]","name":"strategiesAndMultipliers","type":"tuple[]","components":[{"internalType":"contract IStrategy","name":"strategy","type":"address"},{"internalType":"uint96","name":"multiplier","type":"uint96"}]},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint32","name":"startTimestamp","type":"uint32"},{"internalType":"uint32","name":"duration","type":"uint32"}]}],"stateMutability":"nonpayable","type":"function","name":"createAVSRewardsSubmission"},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"string","name":"batchDataPointer","type":"string"},{"internalType":"uint256","name":"respondToTaskFeeLimit","type":"uint256"}],"stateMutability":"payable","type":"function","name":"createNewTask"},{"inputs":[],"stateMutability":"view","type":"function","name":"delegation","outputs":[{"internalType":"contract IDelegationManager","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"payable","type":"function","name":"depositToBatcher"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"deregisterOperatorFromAVS"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function","name":"getOperatorRestakedStrategies","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getRestakeableStrategies","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"address","name":"_rewardsInitiator","type":"address"},{"internalType":"address","name":"_alignedAggregator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"_alignedAggregator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initializeAggregator"},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"struct ISignatureUtils.SignatureWithSaltAndExpiry","name":"operatorSignature","type":"tuple","components":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"expiry","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"registerOperatorToAVS"},{"inputs":[],"stateMutability":"view","type":"function","name":"registryCoordinator","outputs":[{"internalType":"contract IRegistryCoordinator","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"address","name":"senderAddress","type":"address"},{"internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","name":"nonSignerStakesAndSignature","type":"tuple","components":[{"internalType":"uint32[]","name":"nonSignerQuorumBitmapIndices","type":"uint32[]"},{"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G1Point[]","name":"quorumApks","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint32[]","name":"quorumApkIndices","type":"uint32[]"},{"internalType":"uint32[]","name":"totalStakeIndices","type":"uint32[]"},{"internalType":"uint32[][]","name":"nonSignerStakeIndices","type":"uint32[][]"}]}],"stateMutability":"nonpayable","type":"function","name":"respondToTaskV2"},{"inputs":[],"stateMutability":"view","type":"function","name":"rewardsInitiator","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_alignedAggregator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setAggregator"},{"inputs":[{"internalType":"address","name":"newRewardsInitiator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setRewardsInitiator"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setStaleStakesForbidden"},{"inputs":[],"stateMutability":"view","type":"function","name":"stakeRegistry","outputs":[{"internalType":"contract IStakeRegistry","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"staleStakesForbidden","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"bytes32","name":"msgHash","type":"bytes32"},{"internalType":"struct BN254.G1Point","name":"apk","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]}],"stateMutability":"view","type":"function","name":"trySignatureAndApkVerification","outputs":[{"internalType":"bool","name":"pairingSuccessful","type":"bool"},{"internalType":"bool","name":"siganatureIsValid","type":"bool"}]},{"inputs":[{"internalType":"string","name":"_metadataURI","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"updateAVSMetadataURI"},{"inputs":[{"internalType":"bytes32","name":"proofCommitment","type":"bytes32"},{"internalType":"bytes32","name":"pubInputCommitment","type":"bytes32"},{"internalType":"bytes32","name":"provingSystemAuxDataCommitment","type":"bytes32"},{"internalType":"bytes20","name":"proofGeneratorAddr","type":"bytes20"},{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"bytes","name":"merkleProof","type":"bytes"},{"internalType":"uint256","name":"verificationDataBatchIndex","type":"uint256"},{"internalType":"address","name":"senderAddress","type":"address"}],"stateMutability":"view","type":"function","name":"verifyBatchInclusion","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"proofCommitment","type":"bytes32"},{"internalType":"bytes32","name":"pubInputCommitment","type":"bytes32"},{"internalType":"bytes32","name":"provingSystemAuxDataCommitment","type":"bytes32"},{"internalType":"bytes20","name":"proofGeneratorAddr","type":"bytes20"},{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"bytes","name":"merkleProof","type":"bytes"},{"internalType":"uint256","name":"verificationDataBatchIndex","type":"uint256"}],"stateMutability":"view","type":"function","name":"verifyBatchInclusion","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"withdraw"},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":{"details":"Before signature verification, the function verifies operator stake information. This includes ensuring that the provided `referenceBlockNumber` is correct, i.e., ensure that the stake returned from the specified block number is recent enough and that the stake is either the most recent update for the total stake (of the operator) or latest before the referenceBlockNumber.NOTE: Be careful to ensure `msgHash` is collision-resistant! This method does not hash `msgHash` in any way, so if an attacker is able to pass in an arbitrary value, they may be able to tamper with signature verification.","params":{"msgHash":"is the hash being signed","params":"is the struct containing information on nonsigners, stakes, quorum apks, and the aggregate signature","referenceBlockNumber":"is the block number at which the stake information is being verified"},"returns":{"_0":"quorumStakeTotals is the struct containing the total and signed stake for each quorum","_1":"signatoryRecordHash is the hash of the signatory record, which is used for fraud proofs"}},"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])":{"details":"Only callabe by the permissioned rewardsInitiator addressThe duration of the `rewardsSubmission` cannot exceed `MAX_REWARDS_DURATION`The tokens are sent to the `RewardsCoordinator` contractStrategies must be in ascending order of addresses to check for duplicatesThis function will revert if the `rewardsSubmission` is malformed, e.g. if the `strategies` and `weights` arrays are of non-equal lengths","params":{"rewardsSubmissions":"The rewards submissions being created"}},"deregisterOperatorFromAVS(address)":{"params":{"operator":"The address of the operator to deregister."}},"getOperatorRestakedStrategies(address)":{"details":"This function is intended to be called off-chainNo guarantee is made on whether the operator has shares for a strategy in a quorum or uniqueness of each element in the returned array. The off-chain service should do that validation separately","params":{"operator":"The address of the operator to get restaked strategies for"}},"getRestakeableStrategies()":{"details":"This function is intended to be called off-chainNo guarantee is made on uniqueness of each element in the returned array. The off-chain service should do that validation separately"},"owner()":{"details":"Returns the address of the current owner."},"registerOperatorToAVS(address,(bytes,bytes32,uint256))":{"params":{"operator":"The address of the operator to register.","operatorSignature":"The signature, salt, and expiry of the operator's signature."}},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"setRewardsInitiator(address)":{"details":"only callable by the owner","params":{"newRewardsInitiator":"The new rewards initiator address"}},"setStaleStakesForbidden(bool)":{"params":{"value":"to toggle staleStakesForbidden"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))":{"params":{"apk":"is the claimed G1 public key","apkG2":"is provided G2 public key","msgHash":"is the hash being signed","sigma":"is the G1 point signature"},"returns":{"pairingSuccessful":"is true if the pairing precompile call was successful","siganatureIsValid":"is true if the signature is valid"}},"updateAVSMetadataURI(string)":{"details":"only callable by the owner","params":{"_metadataURI":"is the metadata URI for the AVS"}}},"version":1},"userdoc":{"kind":"user","methods":{"avsDirectory()":{"notice":"Returns the EigenLayer AVSDirectory contract."},"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":{"notice":"This function is called by disperser when it has aggregated all the signatures of the operators that are part of the quorum for a particular taskNumber and is asserting them into onchain. The function checks that the claim for aggregated signatures are valid. The thesis of this procedure entails: - getting the aggregated pubkey of all registered nodes at the time of pre-commit by the disperser (represented by apk in the parameters), - subtracting the pubkeys of all the signers not in the quorum (nonSignerPubkeys) and storing the output in apk to get aggregated pubkey of all operators that are part of quorum. - use this aggregated pubkey to verify the aggregated signature under BLS scheme."},"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])":{"notice":"Creates a new rewards submission to the EigenLayer RewardsCoordinator contract, to be split amongst the set of stakers delegated to operators who are registered to this `avs`"},"deregisterOperatorFromAVS(address)":{"notice":"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator deregistration from the AVS"},"getOperatorRestakedStrategies(address)":{"notice":"Returns the list of strategies that the operator has potentially restaked on the AVS"},"getRestakeableStrategies()":{"notice":"Returns the list of strategies that the AVS supports for restaking"},"registerOperatorToAVS(address,(bytes,bytes32,uint256))":{"notice":"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator registration with the AVS"},"rewardsInitiator()":{"notice":"The address of the entity that can initiate rewards"},"setRewardsInitiator(address)":{"notice":"Sets the rewards initiator address"},"setStaleStakesForbidden(bool)":{"notice":"/** RegistryCoordinator owner can either enforce or not that operator stakes are staler than the delegation.minWithdrawalDelayBlocks() window."},"staleStakesForbidden()":{"notice":"If true, check the staleness of the operator stakes and that its within the delegation withdrawalDelayBlocks window."},"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))":{"notice":"trySignatureAndApkVerification verifies a BLS aggregate signature and the veracity of a calculated G1 Public key"},"updateAVSMetadataURI(string)":{"notice":"Updates the metadata URI for the AVS"}},"version":1}},"settings":{"remappings":["@openzeppelin-upgrades-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/","@openzeppelin-upgrades/contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/","ds-test/=lib/eigenlayer-middleware/lib/ds-test/src/","eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/","eigenlayer-core-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/","eigenlayer-core/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/","eigenlayer-middleware/=lib/eigenlayer-middleware/src/","eigenlayer-scripts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/script/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/core/AlignedLayerServiceManager.sol":"AlignedLayerServiceManager"},"evmVersion":"paris","libraries":{}},"sources":{"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IAVSDirectory.sol":{"keccak256":"0x3f67ab9b510b02dc3c07014b49785f1e167401bdb39cc10f737bbf545632d938","urls":["bzz-raw://48d1267e2df6c8ac9b8f419269ff3d23be9b62606ee6b6d2278c27ffebfd73aa","dweb:/ipfs/QmaFyywKCm1eotKjF1evryW8BMQJzPDstZm1wMRW79phXG"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IBeaconChainOracle.sol":{"keccak256":"0x0fef07aa6179c77198f1514e12e628aa1c876e04f9c181ec853a322179e5be00","urls":["bzz-raw://51438325876cc2d4c77f58488a7e27b488015d1b663c50be6a5cafbd73b9c983","dweb:/ipfs/QmViCuGoYZzi6wtXA8PPKigqVv3KMuNxEVQ1Td9dGqjL18"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol":{"keccak256":"0xab76a9f4eff865cbb689f627cf98263488765519d7a4ec5ffbcb0ca4972842f9","urls":["bzz-raw://ff57ce18e8350bf39f190645db0988bc0f1279f1872150a114a1b520c38a2914","dweb:/ipfs/QmSsUXkNUqYuJgGRumHTSs9rAaboGjecotcM4xHrdBYWaZ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IETHPOSDeposit.sol":{"keccak256":"0x2e60e5f4b0da0a0a4e2a07c63141120998559970c21deac743ea0c64a60a880c","urls":["bzz-raw://e635c346bde5b7ade9bcf35bc733081520cb86015be4fbc6e761e6e9482c4c91","dweb:/ipfs/QmRoeazEnbFn5SPSWAkoFK2gSN9DMp3hJAnrLWuL2sKutz"],"license":"CC0-1.0"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPod.sol":{"keccak256":"0xb50c36ad96b6679bb80fd8331f949cbfbcba0f529026e1421a4d2bae64396eba","urls":["bzz-raw://5719181d780120f1e688c0da276992a8caf185815917f453b3550537c31ed4cc","dweb:/ipfs/QmYprRC5ZEXhz3zAUND5E8Xjn6s5TL8ZF8QbnndVq7aVPR"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol":{"keccak256":"0xd8a64dbed03d3a5cdbefe1af75968f2dde07f973749c2ef5197bf7187c3e448c","urls":["bzz-raw://27ccc7c1fd9352e9f9b357c9063d255dc0ed9583f43db09f786ac7497d7846b8","dweb:/ipfs/QmeJzuJkE9m2NUNwZSp4tGZEZmih1LeucePup8hzMVDRbG"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol":{"keccak256":"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f","urls":["bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324","dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol":{"keccak256":"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49","urls":["bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d","dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IRewardsCoordinator.sol":{"keccak256":"0xeab6f1140a90eb7f107d95bae1e8b2ecfbfe36282d62c9df69e6a564c2c59771","urls":["bzz-raw://785cd2777cdcab3b827b5eef2a4dae02c56db07252fdcefd8dd1016be034dc71","dweb:/ipfs/QmNyDFchTuMeiVoxNEfQw96JVq7DfkohGz1txKXe7HyNbq"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISignatureUtils.sol":{"keccak256":"0x5e52482a31d94401a8502f3014c4aada1142b4450fc0596dff8e1866a85fe092","urls":["bzz-raw://17dc326c9361bc1453379f26545963557b2883b0c88bc07d4477e04dbcc0cc8c","dweb:/ipfs/QmZXT7A816W5JH2ymirE2ETaJttqztFCsEL22AV8oEfCK9"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol":{"keccak256":"0x45dfaa2cfdde87f48a6ee38bb6fb739847aef7cf3f6137bdcd8c8a330559ec79","urls":["bzz-raw://1b7f6bd75b42fcaa91ceb7140cb2c41926a1fe6ee2d3161e4fe6186b181ba232","dweb:/ipfs/QmZjbdKiSs33C9i3GDc3sdD39Pz4YPkDoKftowoUF4kHmY"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol":{"keccak256":"0xc530c6a944b70051fd0dac0222de9a4b5baadeaf94ad194daac6ad8d2ace7420","urls":["bzz-raw://3767df0364ce835b52e786d2851431eb9223fe4747602107505477e162231d73","dweb:/ipfs/QmZkH5bKUygQrJomndNaQqkefVRW4rRefCa8HPJ5HMczxJ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategyManager.sol":{"keccak256":"0x68bf02a443fc8b2f612eba3d39bfefa5f61f78b549f111cdecec5f2c58236a52","urls":["bzz-raw://76bc6875ce74128b861fdac5fd1c0c72f3cc9bacf67fa4a73721b95fb23959ef","dweb:/ipfs/QmPix4WJmf9fXyMZxfgwXEHBcg7V4NAbRqs4HUf5YrSJcM"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/BeaconChainProofs.sol":{"keccak256":"0x70d89b05c1c5f47b74a07fbb5a2c05e606fed494e749ea98a9915b7be73df377","urls":["bzz-raw://db1d3bfaee69aef53c8b12b492a17584e6d1ac94610cb8b38aad33e1cdd81af7","dweb:/ipfs/QmfVsMTj1hcf9fMEm5RzvtcBN4dMcAKFBgUUDsNDr5XFpq"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Endian.sol":{"keccak256":"0xf3b72653ba2567a978d4612703fa5f71c5fcd015d8dac7818468f22772d90a9d","urls":["bzz-raw://cee9d09370d968138d775c39525db4cd0768d60d17be7685519de12444e7dd2f","dweb:/ipfs/QmUdGh8wpMei3edKiEWA6S96s9dRt4ekZKJ4nau356X8xQ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Merkle.sol":{"keccak256":"0x9095fc29b96d102b10c02d44b3a6fbfa25593ef6ae4a810363ab885b9e6b0f71","urls":["bzz-raw://0945132d482d56278edddb1d32209903c4d3839c87ba4317aadd97dc23610d0f","dweb:/ipfs/QmVuM2aLRHxitx4rPx3GTYTBCVNcjYn6sHBRr1biUjLBP5"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888","urls":["bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a","dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e","urls":["bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497","dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol":{"keccak256":"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3","urls":["bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4","dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149","urls":["bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c","dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61","urls":["bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354","dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b","urls":["bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34","dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr"],"license":"MIT"},"lib/eigenlayer-middleware/src/BLSSignatureChecker.sol":{"keccak256":"0x3a5c205c596d3d73c7afa63ffbbfac8204f6d6a26c151ef26b47278981c3c0fe","urls":["bzz-raw://4beb88bf5b7c7e614f0d87b157d7a4b67afbf1cc93f3127622bd66f696799241","dweb:/ipfs/QmWJKb6qsd69bWgpAHX6deCkJqmJdo9oBLQAXJk97gWEE2"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/ServiceManagerBase.sol":{"keccak256":"0x7e32ef76daf32e5eb5a93cecf204223e64243f42afe70c7ca71ad3db3925b9c4","urls":["bzz-raw://19c10aa22f2e86e27e946b65c434e541caa6af06fcdde46c3b5e9b42890bd221","dweb:/ipfs/QmPb5qDRdbJTniKSqsbjVhbtwdb72G9hWPYcHtVvj1zBxg"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/ServiceManagerBaseStorage.sol":{"keccak256":"0xa544114dbf6d973a815f997a2ac9237c531c40b08c91d3a65a23b152ed621e1e","urls":["bzz-raw://4cf69f9be7d3f3c4184b61b267280a829040973633ea9d95e2ec0dbf70f40a2e","dweb:/ipfs/QmT2HeCJWBLX2p4KAWnyU318MMx9USb2brqCKq1vn2pXpR"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IBLSApkRegistry.sol":{"keccak256":"0xc07a5edfd95ab4f16f16a8dc8e76eadf4b0e90fe49db90540d01daaad86898c5","urls":["bzz-raw://52b53266450a53da641e82d8ae3be93c5e09f8342b4ea0cc96bb9038d8406354","dweb:/ipfs/QmVuoiQyqPTLCGnyt8zDaxiyaj4ETdgTGKv4MDHWzqEDjp"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IBLSSignatureChecker.sol":{"keccak256":"0xee5823a6674e553c71f5e127f08245827eb116d1ad418b5a7f2a9d6985fd95e0","urls":["bzz-raw://94aa26debddca6c0784585340cf891de4c2d7edaa3e5ec7229af9730312a5a51","dweb:/ipfs/QmWbHGbM7eVYTAmrCVaDU8b4YTm9VAN82XgLDR78uHC7vj"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IIndexRegistry.sol":{"keccak256":"0x83b2d56aacf27e65c4959a832c5de573e013908c044f6e48ea8284ac5282ae2b","urls":["bzz-raw://877af382587e96bb39bcc6db8bb5e4b871db5025c52347d4bee9afeaa4a6cc8d","dweb:/ipfs/QmdnhsQCChzq2o5NgbeT3JxSsEcMm1PC9QW6zenZNPjD9F"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IRegistry.sol":{"keccak256":"0x51426a17fb7e54bd3720e2890104e97a8559a13ff248b3d6b840916751c143d3","urls":["bzz-raw://01f91289e6100d528cb8b318cb14ff22a0bc52882c9d4db41585e030cc9ddc25","dweb:/ipfs/Qmb22nqGrsrtNovHRwbMCvDHGENuxAgrWu3Db4p7Er2MHY"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol":{"keccak256":"0xdd8effb082c1d5957d5ff43d7c59497b32866a6d82bcc7d5efa49ea9bc9b3385","urls":["bzz-raw://cb33a2a1446585b13b7a509e880c60d658d2d2522ec48a9f02e30d2cff54002d","dweb:/ipfs/QmVNG8ZPZkXzNEadPdTj1uBYLiZdCnYfsE5iGU6nJcJXiD"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IServiceManager.sol":{"keccak256":"0x7602cfb4397a114a0ed60e70e8e1d729fdcf406b585838181b3cb3ffa6ac9a9a","urls":["bzz-raw://b718fa016a13a2a5ce298bc5ea7495cc70cf9c358211c75595d5c9dde9a6cc0f","dweb:/ipfs/QmQNrVmU7P7pRqGBJuTQDkjf3wMDY2kJm7zXdtQwsQTbzY"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IServiceManagerUI.sol":{"keccak256":"0x365761699b4a5b7360ee6c75f12606eefc4b0394754c8b8e1e1eefec0cba7ffb","urls":["bzz-raw://ac14ada180b66cbbc5f9de0d6b4bb87b5946d2a9569ae88f2f62aaca47e879a8","dweb:/ipfs/QmcN9xKYF24naNWc6cYah9suz5gJSYE9nPj9eZFWnP35VX"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol":{"keccak256":"0x1b8b4d757c1b804bc4cf6fbbf8bf8f89ebdeb30a31014751fe7d01deb9d513d4","urls":["bzz-raw://984bf2777b898ed187d28997f9783f5c293a1a1848e3e9aa470ce9183d454c97","dweb:/ipfs/Qme3aTpBrkLu8wYHFMZbCfhXHoZ1M6SpXkeC237T9BuU5B"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/libraries/BN254.sol":{"keccak256":"0xb428c8d0c3b325507a88a61a80115493eb88606ccc19ed64a31e11294ab853b3","urls":["bzz-raw://d7b6fb935bfe0494e6ff970c8f30a86d5f4cf5c3e0967300c28cd383c043acae","dweb:/ipfs/QmUHfFZaVjLPXhkBmcxrZhAHZaSFQDqXtrLGpjGBQBa5Ki"],"license":"MIT"},"lib/eigenlayer-middleware/src/libraries/BitmapUtils.sol":{"keccak256":"0x44315ac460be30a6b18fd4df4d1b8afb46653bf4dc06ca9f93c32353fd0605c5","urls":["bzz-raw://da14f2ead3a375b02afd09d4a02edddf7b63a88945746b96789b2473184fdb04","dweb:/ipfs/QmRqcjxa2Vv2MrLdPeAwsktXdWTirapEDsRbJCyYRtKT6g"],"license":"MIT"},"src/core/AlignedLayerServiceManager.sol":{"keccak256":"0x071db0b2db58624e5887a1ed0bdbd19e79688a379e7b57415f122a11f27962f1","urls":["bzz-raw://23c2c56caa54d6a078df443b96cc0a0336b5e258cd08f9ad951cb2bc95e92eed","dweb:/ipfs/QmUvimvUF4akJy13wfpbzJox8bJShWaF9D7qRM8597HLSw"],"license":"UNLICENSED"},"src/core/AlignedLayerServiceManagerStorage.sol":{"keccak256":"0xcc7cdd02eb9044bc3ee898c154c81a34c4b2efade8a8748106b183ea5c68bbe7","urls":["bzz-raw://47a40b8a9bab3e815b7eea4e45d9fb81046813a94f0bdd1d3ba4dbc6d9b5fde0","dweb:/ipfs/QmPdrATs8bFAgGr4dJGsvDTU3oGBG2J2QoYuQy434xNTN3"],"license":null},"src/core/IAlignedLayerServiceManager.sol":{"keccak256":"0xc3f83afcd17a5f5b953906e406e24a09bf58a17c0c7b4cd47bed95322084f473","urls":["bzz-raw://6ad3316af22ab60033d7236585512d82acfb604ec7efda34330634791998ab8d","dweb:/ipfs/QmU5BApqXk5STG6LgGccU6Fbd1Tg7WD6AnY79ZiJRM3LvQ"],"license":"UNLICENSED"}},"version":1},"id":116} \ No newline at end of file diff --git a/batcher/aligned-sdk/abi/BatcherPaymentService.json b/batcher/aligned-sdk/abi/BatcherPaymentService.json index d95f0c88a..00144cf0f 100644 --- a/batcher/aligned-sdk/abi/BatcherPaymentService.json +++ b/batcher/aligned-sdk/abi/BatcherPaymentService.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"AlignedLayerServiceManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"BatcherWallet","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"UNLOCK_BLOCK_COUNT","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"UserData","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"unlockBlock","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"checkMerkleRootAndVerifySignatures","inputs":[{"name":"leaves","type":"bytes32[]","internalType":"bytes32[]"},{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"signatures","type":"tuple[]","internalType":"struct BatcherPaymentService.SignatureData[]","components":[{"name":"signature","type":"bytes","internalType":"bytes"},{"name":"nonce","type":"uint256","internalType":"uint256"}]},{"name":"feePerProof","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"createNewTask","inputs":[{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"batchDataPointer","type":"string","internalType":"string"},{"name":"leaves","type":"bytes32[]","internalType":"bytes32[]"},{"name":"signatures","type":"tuple[]","internalType":"struct BatcherPaymentService.SignatureData[]","components":[{"name":"signature","type":"bytes","internalType":"bytes"},{"name":"nonce","type":"uint256","internalType":"uint256"}]},{"name":"gasForAggregator","type":"uint256","internalType":"uint256"},{"name":"gasPerProof","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[{"name":"_AlignedLayerServiceManager","type":"address","internalType":"address"},{"name":"_BatcherPaymentServiceOwner","type":"address","internalType":"address"},{"name":"_BatcherWallet","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"lock","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"pause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unlock","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unpause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeTo","inputs":[{"name":"newImplementation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"user_balances","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"user_nonces","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"user_unlock_block","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"withdraw","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"AdminChanged","inputs":[{"name":"previousAdmin","type":"address","indexed":false,"internalType":"address"},{"name":"newAdmin","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"BeaconUpgraded","inputs":[{"name":"beacon","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"FundsWithdrawn","inputs":[{"name":"recipient","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"PaymentReceived","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false}],"bytecode":{"object":"0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e8565b600054610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e6576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60805161251362000120600039600081816105fb0152818161063b015281816106ed0152818161072d01526107c001526125136000f3fe6080604052600436106101395760003560e01c8063715018a6116100ab578063b57082301161006f578063b5708230146103f8578063bf32265814610418578063c0c53b8b14610438578063d3c7f83314610458578063f2fde38b14610478578063f83d08ba1461049857600080fd5b8063715018a6146103305780638456cb59146103455780638da5cb5b1461035a5780639907e0ab1461038c578063a69df4b5146103e357600080fd5b80634d5431ea116100fd5780634d5431ea146102775780634f1ef286146102b057806352d1902d146102c357806355f6065f146102d85780635a3f631a146102f85780635c975abb1461030d57600080fd5b806317d89c4e1461019e5780632df4e21e146101ea5780632e1a7d4d146102205780633659cfe6146102425780633f4ba83a1461026257600080fd5b366101995733600090815260fd60205260408120805434929061015d908490611e47565b909155505060405134815233907f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be7709060200160405180910390a2005b600080fd5b3480156101aa57600080fd5b506101d76101b9366004611e7b565b6001600160a01b0316600090815260fd602052604090206002015490565b6040519081526020015b60405180910390f35b3480156101f657600080fd5b506101d7610205366004611e7b565b6001600160a01b0316600090815260fd602052604090205490565b34801561022c57600080fd5b5061024061023b366004611e96565b6104ad565b005b34801561024e57600080fd5b5061024061025d366004611e7b565b6105f0565b34801561026e57600080fd5b506102406106d0565b34801561028357600080fd5b506101d7610292366004611e7b565b6001600160a01b0316600090815260fd602052604090206001015490565b6102406102be366004611ec5565b6106e2565b3480156102cf57600080fd5b506101d76107b3565b3480156102e457600080fd5b506102406102f3366004611fcc565b610866565b34801561030457600080fd5b506101d7606481565b34801561031957600080fd5b5060655460ff1660405190151581526020016101e1565b34801561033c57600080fd5b50610240610bf3565b34801561035157600080fd5b50610240610c05565b34801561036657600080fd5b506033546001600160a01b03165b6040516001600160a01b0390911681526020016101e1565b34801561039857600080fd5b506103c86103a7366004611e7b565b60fd6020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016101e1565b3480156103ef57600080fd5b50610240610c15565b34801561040457600080fd5b5060fb54610374906001600160a01b031681565b34801561042457600080fd5b5061024061043336600461204e565b610c99565b34801561044457600080fd5b50610240610453366004612132565b6110bc565b34801561046457600080fd5b5060fc54610374906001600160a01b031681565b34801561048457600080fd5b50610240610493366004611e7b565b611211565b3480156104a457600080fd5b50610240611287565b6104b5611300565b33600090815260fd60205260409020805482111561051a5760405162461bcd60e51b815260206004820152601e60248201527f50617965722068617320696e73756666696369656e742062616c616e6365000060448201526064015b60405180910390fd5b600181015415801590610531575043816001015411155b6105705760405162461bcd60e51b815260206004820152601060248201526f119d5b991cc8185c99481b1bd8dad95960821b6044820152606401610511565b818160000160008282546105849190612175565b9091555050604051339083156108fc029084906000818181858888f193505050501580156105b6573d6000803e3d6000fd5b5060405182815233907feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d9060200160405180910390a25050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156106395760405162461bcd60e51b81526004016105119061218c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610682600080516020612497833981519152546001600160a01b031690565b6001600160a01b0316146106a85760405162461bcd60e51b8152600401610511906121d8565b6106b181611346565b604080516000808252602082019092526106cd9183919061134e565b50565b6106d86114be565b6106e0611518565b565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561072b5760405162461bcd60e51b81526004016105119061218c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610774600080516020612497833981519152546001600160a01b031690565b6001600160a01b03161461079a5760405162461bcd60e51b8152600401610511906121d8565b6107a382611346565b6107af8282600161134e565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108535760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610511565b5060008051602061249783398151915290565b6000610873600287612224565b905060008167ffffffffffffffff81111561089057610890611eaf565b6040519080825280602002602001820160405280156108b9578160200160208202803683370190505b50905060005b828163ffffffff1610156109e45788886108da836002612246565b63ffffffff168181106108ef576108ef612272565b9050602002013589898360026109059190612246565b610910906001612288565b63ffffffff1681811061092557610925612272565b90506020020135604051602001610946929190918252602082015260400190565b60405160208183030381529060405280519060200120828263ffffffff168151811061097457610974612272565b6020026020010181815250506109d289898363ffffffff1681811061099b5761099b612272565b9050602002013587878463ffffffff168181106109ba576109ba612272565b90506020028101906109cc91906122b0565b8661156a565b806109dc816122d0565b9150506108bf565b63ffffffff8116851115610a1f57610a0d89898363ffffffff1681811061099b5761099b612272565b80610a17816122d0565b9150506109e4565b610a2a600284612224565b92505b8215610b1d575060005b828163ffffffff161015610b0b5781610a51826002612246565b63ffffffff1681518110610a6757610a67612272565b602002602001015182826002610a7d9190612246565b610a88906001612288565b63ffffffff1681518110610a9e57610a9e612272565b6020026020010151604051602001610ac0929190918252602082015260400190565b60405160208183030381529060405280519060200120828263ffffffff1681518110610aee57610aee612272565b602090810291909101015280610b03816122d0565b915050610a37565b610b16600284612224565b9250610a2d565b6001881415610b89578689896000818110610b3a57610b3a612272565b9050602002013514610b845760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b595c9adb19481c9bdbdd606a1b6044820152606401610511565b610be8565b8682600081518110610b9d57610b9d612272565b602002602001015114610be85760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b595c9adb19481c9bdbdd606a1b6044820152606401610511565b505050505050505050565b610bfb6114be565b6106e06000611729565b610c0d6114be565b6106e061177b565b610c1d611300565b33600090815260fd6020526040902054610c795760405162461bcd60e51b815260206004820152601b60248201527f5573657220686173206e6f2066756e647320746f20756e6c6f636b00000000006044820152606401610511565b610c84606443611e47565b33600090815260fd6020526040902060010155565b60fc546001600160a01b03163314610cff5760405162461bcd60e51b815260206004820152602360248201527f4f6e6c7920426174636865722063616e2063616c6c20746869732066756e637460448201526234b7b760e91b6064820152608401610511565b610d07611300565b84836000610d153a866122f4565b90506000610d233a866122f4565b905060008411610d6b5760405162461bcd60e51b8152602060048201526013602482015272139bc81b19585d995cc81cdd589b5a5d1d1959606a1b6044820152606401610511565b60008311610dbb5760405162461bcd60e51b815260206004820152601d60248201527f4e6f2070726f6f66207375626d6974746572207369676e6174757265730000006044820152606401610511565b82841015610dff5760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f756768206c656176657360781b6044820152606401610511565b610e0a600185612175565b841615610e635760405162461bcd60e51b815260206004820152602160248201527f4c6561766573206c656e677468206973206e6f74206120706f776572206f66206044820152601960f91b6064820152608401610511565b60008211610eab5760405162461bcd60e51b815260206004820152601560248201527427379033b0b9903337b91030b3b3b932b3b0ba37b960591b6044820152606401610511565b60008111610eee5760405162461bcd60e51b815260206004820152601060248201526f27379033b0b9903832b910383937b7b360811b6044820152606401610511565b81610ef984836122f4565b11610f525760405162461bcd60e51b8152602060048201526024808201527f4e6f7420656e6f7567682067617320746f20706179207468652061676772656760448201526330ba37b960e11b6064820152608401610511565b610f608a8a8f8b8b86610866565b600060fb60009054906101000a90046001600160a01b03166001600160a01b0316838f8f8f604051602401610f9793929190612313565b60408051601f198184030181529181526020820180516001600160e01b0316631700226560e21b17905251610fcc9190612375565b60006040518083038185875af1925050503d8060008114611009576040519150601f19603f3d011682016040523d82523d6000602084013e61100e565b606091505b505090508061105f5760405162461bcd60e51b815260206004820152601960248201527f6372656174654e65775461736b2063616c6c206661696c6564000000000000006044820152606401610511565b60fc546001600160a01b03166108fc8461107987866122f4565b6110839190612175565b6040518115909202916000818181858888f193505050501580156110ab573d6000803e3d6000fd5b505050505050505050505050505050565b600054610100900460ff16158080156110dc5750600054600160ff909116105b806110f65750303b1580156110f6575060005460ff166001145b6111595760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610511565b6000805460ff19166001179055801561117c576000805461ff0019166101001790555b6111846117b8565b61118c6117e7565b61119583611729565b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805492851692909116919091179055801561120b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6112196114be565b6001600160a01b03811661127e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610511565b6106cd81611729565b61128f611300565b33600090815260fd60205260409020546112eb5760405162461bcd60e51b815260206004820152601960248201527f5573657220686173206e6f2066756e647320746f206c6f636b000000000000006044820152606401610511565b33600090815260fd6020526040812060010155565b60655460ff16156106e05760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610511565b6106cd6114be565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611386576113818361180e565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113e0575060408051601f3d908101601f191682019092526113dd91810190612387565b60015b6114435760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610511565b60008051602061249783398151915281146114b25760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610511565b506113818383836118aa565b6033546001600160a01b031633146106e05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610511565b6115206118cf565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600083836020013560405160200161158c929190918252602082015260400190565b60408051601f198184030181529190528051602090910120905060006115f26115b585806123a0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086939250506119189050565b90506001600160a01b03811661163e5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606401610511565b6001600160a01b038116600090815260fd6020908152604090912060028101549091860135146116a05760405162461bcd60e51b815260206004820152600d60248201526c496e76616c6964204e6f6e636560981b6044820152606401610511565b6002810180549060006116b2836123e7565b909155505080548411156117085760405162461bcd60e51b815260206004820152601f60248201527f5369676e65722068617320696e73756666696369656e742062616c616e6365006044820152606401610511565b8381600001600082825461171c9190612175565b9091555050505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611783611300565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861154d3390565b600054610100900460ff166117df5760405162461bcd60e51b815260040161051190612402565b6106e061193c565b600054610100900460ff166106e05760405162461bcd60e51b815260040161051190612402565b6001600160a01b0381163b61187b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610511565b60008051602061249783398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6118b38361196c565b6000825111806118c05750805b156113815761120b83836119ac565b60655460ff166106e05760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610511565b60008060006119278585611aa0565b9150915061193481611b10565b509392505050565b600054610100900460ff166119635760405162461bcd60e51b815260040161051190612402565b6106e033611729565b6119758161180e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b611a145760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610511565b600080846001600160a01b031684604051611a2f9190612375565b600060405180830381855af49150503d8060008114611a6a576040519150601f19603f3d011682016040523d82523d6000602084013e611a6f565b606091505b5091509150611a9782826040518060600160405280602781526020016124b760279139611ccb565b95945050505050565b600080825160411415611ad75760208301516040840151606085015160001a611acb87828585611d0b565b94509450505050611b09565b825160401415611b015760208301516040840151611af6868383611df8565b935093505050611b09565b506000905060025b9250929050565b6000816004811115611b2457611b2461244d565b1415611b2d5750565b6001816004811115611b4157611b4161244d565b1415611b8f5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610511565b6002816004811115611ba357611ba361244d565b1415611bf15760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610511565b6003816004811115611c0557611c0561244d565b1415611c5e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610511565b6004816004811115611c7257611c7261244d565b14156106cd5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610511565b60608315611cda575081611d04565b825115611cea5782518084602001fd5b8160405162461bcd60e51b81526004016105119190612463565b9392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611d425750600090506003611def565b8460ff16601b14158015611d5a57508460ff16601c14155b15611d6b5750600090506004611def565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611dbf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611de857600060019250925050611def565b9150600090505b94509492505050565b6000806001600160ff1b03831681611e1560ff86901c601b611e47565b9050611e2387828885611d0b565b935093505050935093915050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611e5a57611e5a611e31565b500190565b80356001600160a01b0381168114611e7657600080fd5b919050565b600060208284031215611e8d57600080fd5b611d0482611e5f565b600060208284031215611ea857600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215611ed857600080fd5b611ee183611e5f565b9150602083013567ffffffffffffffff80821115611efe57600080fd5b818501915085601f830112611f1257600080fd5b813581811115611f2457611f24611eaf565b604051601f8201601f19908116603f01168101908382118183101715611f4c57611f4c611eaf565b81604052828152886020848701011115611f6557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60008083601f840112611f9957600080fd5b50813567ffffffffffffffff811115611fb157600080fd5b6020830191508360208260051b8501011115611b0957600080fd5b60008060008060008060808789031215611fe557600080fd5b863567ffffffffffffffff80821115611ffd57600080fd5b6120098a838b01611f87565b909850965060208901359550604089013591508082111561202957600080fd5b5061203689828a01611f87565b979a9699509497949695606090950135949350505050565b600080600080600080600080600060c08a8c03121561206c57600080fd5b8935985060208a013567ffffffffffffffff8082111561208b57600080fd5b818c0191508c601f83011261209f57600080fd5b8135818111156120ae57600080fd5b8d60208285010111156120c057600080fd5b602083019a508099505060408c01359150808211156120de57600080fd5b6120ea8d838e01611f87565b909850965060608c013591508082111561210357600080fd5b506121108c828d01611f87565b9a9d999c50979a96999598959660808101359660a09091013595509350505050565b60008060006060848603121561214757600080fd5b61215084611e5f565b925061215e60208501611e5f565b915061216c60408501611e5f565b90509250925092565b60008282101561218757612187611e31565b500390565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60008261224157634e487b7160e01b600052601260045260246000fd5b500490565b600063ffffffff8083168185168183048111821515161561226957612269611e31565b02949350505050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff8083168185168083038211156122a7576122a7611e31565b01949350505050565b60008235603e198336030181126122c657600080fd5b9190910192915050565b600063ffffffff808316818114156122ea576122ea611e31565b6001019392505050565b600081600019048311821515161561230e5761230e611e31565b500290565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60005b8381101561236457818101518382015260200161234c565b8381111561120b5750506000910152565b600082516122c6818460208701612349565b60006020828403121561239957600080fd5b5051919050565b6000808335601e198436030181126123b757600080fd5b83018035915067ffffffffffffffff8211156123d257600080fd5b602001915036819003821315611b0957600080fd5b60006000198214156123fb576123fb611e31565b5060010190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b6020815260008251806020840152612482816040850160208701612349565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207a95aa48a13c9a049c44d88a566d9790c8c9044edaa06ac0dbe7ad02abaf59b364736f6c634300080c0033","sourceMap":"497:7692:181:-:0;;;1332:4:47;1289:48;;1341:53:181;;;;;;;;;-1:-1:-1;1365:22:181;:20;:22::i;:::-;497:7692;;5388:279:46;5456:13;;;;;;;5455:14;5447:66;;;;-1:-1:-1;;;5447:66:46;;216:2:184;5447:66:46;;;198:21:184;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:184;;;338:37;392:19;;5447:66:46;;;;;;;;5527:12;;5542:15;5527:12;;;:30;5523:138;;;5573:12;:30;;-1:-1:-1;;5573:30:46;5588:15;5573:30;;;;;;5622:28;;564:36:184;;;5622:28:46;;552:2:184;537:18;5622:28:46;;;;;;;5523:138;5388:279::o;422:184:184:-;497:7692:181;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101395760003560e01c8063715018a6116100ab578063b57082301161006f578063b5708230146103f8578063bf32265814610418578063c0c53b8b14610438578063d3c7f83314610458578063f2fde38b14610478578063f83d08ba1461049857600080fd5b8063715018a6146103305780638456cb59146103455780638da5cb5b1461035a5780639907e0ab1461038c578063a69df4b5146103e357600080fd5b80634d5431ea116100fd5780634d5431ea146102775780634f1ef286146102b057806352d1902d146102c357806355f6065f146102d85780635a3f631a146102f85780635c975abb1461030d57600080fd5b806317d89c4e1461019e5780632df4e21e146101ea5780632e1a7d4d146102205780633659cfe6146102425780633f4ba83a1461026257600080fd5b366101995733600090815260fd60205260408120805434929061015d908490611e47565b909155505060405134815233907f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be7709060200160405180910390a2005b600080fd5b3480156101aa57600080fd5b506101d76101b9366004611e7b565b6001600160a01b0316600090815260fd602052604090206002015490565b6040519081526020015b60405180910390f35b3480156101f657600080fd5b506101d7610205366004611e7b565b6001600160a01b0316600090815260fd602052604090205490565b34801561022c57600080fd5b5061024061023b366004611e96565b6104ad565b005b34801561024e57600080fd5b5061024061025d366004611e7b565b6105f0565b34801561026e57600080fd5b506102406106d0565b34801561028357600080fd5b506101d7610292366004611e7b565b6001600160a01b0316600090815260fd602052604090206001015490565b6102406102be366004611ec5565b6106e2565b3480156102cf57600080fd5b506101d76107b3565b3480156102e457600080fd5b506102406102f3366004611fcc565b610866565b34801561030457600080fd5b506101d7606481565b34801561031957600080fd5b5060655460ff1660405190151581526020016101e1565b34801561033c57600080fd5b50610240610bf3565b34801561035157600080fd5b50610240610c05565b34801561036657600080fd5b506033546001600160a01b03165b6040516001600160a01b0390911681526020016101e1565b34801561039857600080fd5b506103c86103a7366004611e7b565b60fd6020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016101e1565b3480156103ef57600080fd5b50610240610c15565b34801561040457600080fd5b5060fb54610374906001600160a01b031681565b34801561042457600080fd5b5061024061043336600461204e565b610c99565b34801561044457600080fd5b50610240610453366004612132565b6110bc565b34801561046457600080fd5b5060fc54610374906001600160a01b031681565b34801561048457600080fd5b50610240610493366004611e7b565b611211565b3480156104a457600080fd5b50610240611287565b6104b5611300565b33600090815260fd60205260409020805482111561051a5760405162461bcd60e51b815260206004820152601e60248201527f50617965722068617320696e73756666696369656e742062616c616e6365000060448201526064015b60405180910390fd5b600181015415801590610531575043816001015411155b6105705760405162461bcd60e51b815260206004820152601060248201526f119d5b991cc8185c99481b1bd8dad95960821b6044820152606401610511565b818160000160008282546105849190612175565b9091555050604051339083156108fc029084906000818181858888f193505050501580156105b6573d6000803e3d6000fd5b5060405182815233907feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d9060200160405180910390a25050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156106395760405162461bcd60e51b81526004016105119061218c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610682600080516020612497833981519152546001600160a01b031690565b6001600160a01b0316146106a85760405162461bcd60e51b8152600401610511906121d8565b6106b181611346565b604080516000808252602082019092526106cd9183919061134e565b50565b6106d86114be565b6106e0611518565b565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561072b5760405162461bcd60e51b81526004016105119061218c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610774600080516020612497833981519152546001600160a01b031690565b6001600160a01b03161461079a5760405162461bcd60e51b8152600401610511906121d8565b6107a382611346565b6107af8282600161134e565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108535760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610511565b5060008051602061249783398151915290565b6000610873600287612224565b905060008167ffffffffffffffff81111561089057610890611eaf565b6040519080825280602002602001820160405280156108b9578160200160208202803683370190505b50905060005b828163ffffffff1610156109e45788886108da836002612246565b63ffffffff168181106108ef576108ef612272565b9050602002013589898360026109059190612246565b610910906001612288565b63ffffffff1681811061092557610925612272565b90506020020135604051602001610946929190918252602082015260400190565b60405160208183030381529060405280519060200120828263ffffffff168151811061097457610974612272565b6020026020010181815250506109d289898363ffffffff1681811061099b5761099b612272565b9050602002013587878463ffffffff168181106109ba576109ba612272565b90506020028101906109cc91906122b0565b8661156a565b806109dc816122d0565b9150506108bf565b63ffffffff8116851115610a1f57610a0d89898363ffffffff1681811061099b5761099b612272565b80610a17816122d0565b9150506109e4565b610a2a600284612224565b92505b8215610b1d575060005b828163ffffffff161015610b0b5781610a51826002612246565b63ffffffff1681518110610a6757610a67612272565b602002602001015182826002610a7d9190612246565b610a88906001612288565b63ffffffff1681518110610a9e57610a9e612272565b6020026020010151604051602001610ac0929190918252602082015260400190565b60405160208183030381529060405280519060200120828263ffffffff1681518110610aee57610aee612272565b602090810291909101015280610b03816122d0565b915050610a37565b610b16600284612224565b9250610a2d565b6001881415610b89578689896000818110610b3a57610b3a612272565b9050602002013514610b845760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b595c9adb19481c9bdbdd606a1b6044820152606401610511565b610be8565b8682600081518110610b9d57610b9d612272565b602002602001015114610be85760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b595c9adb19481c9bdbdd606a1b6044820152606401610511565b505050505050505050565b610bfb6114be565b6106e06000611729565b610c0d6114be565b6106e061177b565b610c1d611300565b33600090815260fd6020526040902054610c795760405162461bcd60e51b815260206004820152601b60248201527f5573657220686173206e6f2066756e647320746f20756e6c6f636b00000000006044820152606401610511565b610c84606443611e47565b33600090815260fd6020526040902060010155565b60fc546001600160a01b03163314610cff5760405162461bcd60e51b815260206004820152602360248201527f4f6e6c7920426174636865722063616e2063616c6c20746869732066756e637460448201526234b7b760e91b6064820152608401610511565b610d07611300565b84836000610d153a866122f4565b90506000610d233a866122f4565b905060008411610d6b5760405162461bcd60e51b8152602060048201526013602482015272139bc81b19585d995cc81cdd589b5a5d1d1959606a1b6044820152606401610511565b60008311610dbb5760405162461bcd60e51b815260206004820152601d60248201527f4e6f2070726f6f66207375626d6974746572207369676e6174757265730000006044820152606401610511565b82841015610dff5760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f756768206c656176657360781b6044820152606401610511565b610e0a600185612175565b841615610e635760405162461bcd60e51b815260206004820152602160248201527f4c6561766573206c656e677468206973206e6f74206120706f776572206f66206044820152601960f91b6064820152608401610511565b60008211610eab5760405162461bcd60e51b815260206004820152601560248201527427379033b0b9903337b91030b3b3b932b3b0ba37b960591b6044820152606401610511565b60008111610eee5760405162461bcd60e51b815260206004820152601060248201526f27379033b0b9903832b910383937b7b360811b6044820152606401610511565b81610ef984836122f4565b11610f525760405162461bcd60e51b8152602060048201526024808201527f4e6f7420656e6f7567682067617320746f20706179207468652061676772656760448201526330ba37b960e11b6064820152608401610511565b610f608a8a8f8b8b86610866565b600060fb60009054906101000a90046001600160a01b03166001600160a01b0316838f8f8f604051602401610f9793929190612313565b60408051601f198184030181529181526020820180516001600160e01b0316631700226560e21b17905251610fcc9190612375565b60006040518083038185875af1925050503d8060008114611009576040519150601f19603f3d011682016040523d82523d6000602084013e61100e565b606091505b505090508061105f5760405162461bcd60e51b815260206004820152601960248201527f6372656174654e65775461736b2063616c6c206661696c6564000000000000006044820152606401610511565b60fc546001600160a01b03166108fc8461107987866122f4565b6110839190612175565b6040518115909202916000818181858888f193505050501580156110ab573d6000803e3d6000fd5b505050505050505050505050505050565b600054610100900460ff16158080156110dc5750600054600160ff909116105b806110f65750303b1580156110f6575060005460ff166001145b6111595760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610511565b6000805460ff19166001179055801561117c576000805461ff0019166101001790555b6111846117b8565b61118c6117e7565b61119583611729565b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805492851692909116919091179055801561120b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6112196114be565b6001600160a01b03811661127e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610511565b6106cd81611729565b61128f611300565b33600090815260fd60205260409020546112eb5760405162461bcd60e51b815260206004820152601960248201527f5573657220686173206e6f2066756e647320746f206c6f636b000000000000006044820152606401610511565b33600090815260fd6020526040812060010155565b60655460ff16156106e05760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610511565b6106cd6114be565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611386576113818361180e565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113e0575060408051601f3d908101601f191682019092526113dd91810190612387565b60015b6114435760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610511565b60008051602061249783398151915281146114b25760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610511565b506113818383836118aa565b6033546001600160a01b031633146106e05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610511565b6115206118cf565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600083836020013560405160200161158c929190918252602082015260400190565b60408051601f198184030181529190528051602090910120905060006115f26115b585806123a0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086939250506119189050565b90506001600160a01b03811661163e5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606401610511565b6001600160a01b038116600090815260fd6020908152604090912060028101549091860135146116a05760405162461bcd60e51b815260206004820152600d60248201526c496e76616c6964204e6f6e636560981b6044820152606401610511565b6002810180549060006116b2836123e7565b909155505080548411156117085760405162461bcd60e51b815260206004820152601f60248201527f5369676e65722068617320696e73756666696369656e742062616c616e6365006044820152606401610511565b8381600001600082825461171c9190612175565b9091555050505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611783611300565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861154d3390565b600054610100900460ff166117df5760405162461bcd60e51b815260040161051190612402565b6106e061193c565b600054610100900460ff166106e05760405162461bcd60e51b815260040161051190612402565b6001600160a01b0381163b61187b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610511565b60008051602061249783398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6118b38361196c565b6000825111806118c05750805b156113815761120b83836119ac565b60655460ff166106e05760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610511565b60008060006119278585611aa0565b9150915061193481611b10565b509392505050565b600054610100900460ff166119635760405162461bcd60e51b815260040161051190612402565b6106e033611729565b6119758161180e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b611a145760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610511565b600080846001600160a01b031684604051611a2f9190612375565b600060405180830381855af49150503d8060008114611a6a576040519150601f19603f3d011682016040523d82523d6000602084013e611a6f565b606091505b5091509150611a9782826040518060600160405280602781526020016124b760279139611ccb565b95945050505050565b600080825160411415611ad75760208301516040840151606085015160001a611acb87828585611d0b565b94509450505050611b09565b825160401415611b015760208301516040840151611af6868383611df8565b935093505050611b09565b506000905060025b9250929050565b6000816004811115611b2457611b2461244d565b1415611b2d5750565b6001816004811115611b4157611b4161244d565b1415611b8f5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610511565b6002816004811115611ba357611ba361244d565b1415611bf15760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610511565b6003816004811115611c0557611c0561244d565b1415611c5e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610511565b6004816004811115611c7257611c7261244d565b14156106cd5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610511565b60608315611cda575081611d04565b825115611cea5782518084602001fd5b8160405162461bcd60e51b81526004016105119190612463565b9392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611d425750600090506003611def565b8460ff16601b14158015611d5a57508460ff16601c14155b15611d6b5750600090506004611def565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611dbf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611de857600060019250925050611def565b9150600090505b94509492505050565b6000806001600160ff1b03831681611e1560ff86901c601b611e47565b9050611e2387828885611d0b565b935093505050935093915050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611e5a57611e5a611e31565b500190565b80356001600160a01b0381168114611e7657600080fd5b919050565b600060208284031215611e8d57600080fd5b611d0482611e5f565b600060208284031215611ea857600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215611ed857600080fd5b611ee183611e5f565b9150602083013567ffffffffffffffff80821115611efe57600080fd5b818501915085601f830112611f1257600080fd5b813581811115611f2457611f24611eaf565b604051601f8201601f19908116603f01168101908382118183101715611f4c57611f4c611eaf565b81604052828152886020848701011115611f6557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60008083601f840112611f9957600080fd5b50813567ffffffffffffffff811115611fb157600080fd5b6020830191508360208260051b8501011115611b0957600080fd5b60008060008060008060808789031215611fe557600080fd5b863567ffffffffffffffff80821115611ffd57600080fd5b6120098a838b01611f87565b909850965060208901359550604089013591508082111561202957600080fd5b5061203689828a01611f87565b979a9699509497949695606090950135949350505050565b600080600080600080600080600060c08a8c03121561206c57600080fd5b8935985060208a013567ffffffffffffffff8082111561208b57600080fd5b818c0191508c601f83011261209f57600080fd5b8135818111156120ae57600080fd5b8d60208285010111156120c057600080fd5b602083019a508099505060408c01359150808211156120de57600080fd5b6120ea8d838e01611f87565b909850965060608c013591508082111561210357600080fd5b506121108c828d01611f87565b9a9d999c50979a96999598959660808101359660a09091013595509350505050565b60008060006060848603121561214757600080fd5b61215084611e5f565b925061215e60208501611e5f565b915061216c60408501611e5f565b90509250925092565b60008282101561218757612187611e31565b500390565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60008261224157634e487b7160e01b600052601260045260246000fd5b500490565b600063ffffffff8083168185168183048111821515161561226957612269611e31565b02949350505050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff8083168185168083038211156122a7576122a7611e31565b01949350505050565b60008235603e198336030181126122c657600080fd5b9190910192915050565b600063ffffffff808316818114156122ea576122ea611e31565b6001019392505050565b600081600019048311821515161561230e5761230e611e31565b500290565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60005b8381101561236457818101518382015260200161234c565b8381111561120b5750506000910152565b600082516122c6818460208701612349565b60006020828403121561239957600080fd5b5051919050565b6000808335601e198436030181126123b757600080fd5b83018035915067ffffffffffffffff8211156123d257600080fd5b602001915036819003821315611b0957600080fd5b60006000198214156123fb576123fb611e31565b5060010190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b6020815260008251806020840152612482816040850160208701612349565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207a95aa48a13c9a049c44d88a566d9790c8c9044edaa06ac0dbe7ad02abaf59b364736f6c634300080c0033","sourceMap":"497:7692:181:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1900:10;1891:20;;;;:8;:20;;;;;:41;;1923:9;;1891:20;:41;;1923:9;;1891:41;:::i;:::-;;;;-1:-1:-1;;1947:38:181;;1975:9;425:25:184;;1963:10:181;;1947:38;;413:2:184;398:18;1947:38:181;;;;;;;497:7692;;;;;7939:115;;;;;;;;;;-1:-1:-1;7939:115:181;;;;;:::i;:::-;-1:-1:-1;;;;;8024:17:181;7998:7;8024:17;;;:8;:17;;;;;:23;;;;7939:115;;;;425:25:184;;;413:2;398:18;7939:115:181;;;;;;;;7814:119;;;;;;;;;;-1:-1:-1;7814:119:181;;;;;:::i;:::-;-1:-1:-1;;;;;7901:17:181;7875:7;7901:17;;;:8;:17;;;;;:25;;7814:119;4326:477;;;;;;;;;;-1:-1:-1;4326:477:181;;;;;:::i;:::-;;:::i;:::-;;3315:197:47;;;;;;;;;;-1:-1:-1;3315:197:47;;;;;:::i;:::-;;:::i;4874:63:181:-;;;;;;;;;;;;;:::i;8060:127::-;;;;;;;;;;-1:-1:-1;8060:127:181;;;;;:::i;:::-;-1:-1:-1;;;;;8151:17:181;8125:7;8151:17;;;:8;:17;;;;;:29;;;;8060:127;3761:222:47;;;;;;:::i;:::-;;:::i;3004:131::-;;;;;;;;;;;;;:::i;5230:1851:181:-;;;;;;;;;;-1:-1:-1;5230:1851:181;;;;;:::i;:::-;;:::i;672:48::-;;;;;;;;;;;;717:3;672:48;;1858:84:48;;;;;;;;;;-1:-1:-1;1928:7:48;;;;1858:84;;3815:14:184;;3808:22;3790:41;;3778:2;3763:18;1858:84:48;3650:187:184;2071:101:42;;;;;;;;;;;;;:::i;4809:59:181:-;;;;;;;;;;;;;:::i;1441:85:42:-;;;;;;;;;;-1:-1:-1;1513:6:42;;-1:-1:-1;;;;;1513:6:42;1441:85;;;-1:-1:-1;;;;;4006:32:184;;;3988:51;;3976:2;3961:18;1441:85:42;3842:203:184;1187:44:181;;;;;;;;;;-1:-1:-1;1187:44:181;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4252:25:184;;;4308:2;4293:18;;4286:34;;;;4336:18;;;4329:34;4240:2;4225:18;1187:44:181;4050:319:184;3899:243:181;;;;;;;;;;;;;:::i;1081:41::-;;;;;;;;;;-1:-1:-1;1081:41:181;;;;-1:-1:-1;;;;;1081:41:181;;;2022:1871;;;;;;;;;;-1:-1:-1;2022:1871:181;;;;;:::i;:::-;;:::i;1400:423::-;;;;;;;;;;-1:-1:-1;1400:423:181;;;;;:::i;:::-;;:::i;1128:28::-;;;;;;;;;;-1:-1:-1;1128:28:181;;;;-1:-1:-1;;;;;1128:28:181;;;2321:198:42;;;;;;;;;;-1:-1:-1;2321:198:42;;;;;:::i;:::-;;:::i;4148:172:181:-;;;;;;;;;;;;;:::i;4326:477::-;1482:19:48;:17;:19::i;:::-;4431:10:181::1;4393:26;4422:20:::0;;;:8:::1;:20;::::0;;;;4460:17;;:27;-1:-1:-1;4460:27:181::1;4452:70;;;::::0;-1:-1:-1;;;4452:70:181;;6383:2:184;4452:70:181::1;::::0;::::1;6365:21:184::0;6422:2;6402:18;;;6395:30;6461:32;6441:18;;;6434:60;6511:18;;4452:70:181::1;;;;;;;;;4554:21;::::0;::::1;::::0;:26;;::::1;::::0;:67:::1;;;4609:12;4584:9;:21;;;:37;;4554:67;4533:130;;;::::0;-1:-1:-1;;;4533:130:181;;6742:2:184;4533:130:181::1;::::0;::::1;6724:21:184::0;6781:2;6761:18;;;6754:30;-1:-1:-1;;;6800:18:184;;;6793:46;6856:18;;4533:130:181::1;6540:340:184::0;4533:130:181::1;4695:6;4674:9;:17;;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;4711:36:181::1;::::0;4719:10:::1;::::0;4711:36;::::1;;;::::0;4740:6;;4711:36:::1;::::0;;;4740:6;4719:10;4711:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;4762:34:181::1;::::0;425:25:184;;;4777:10:181::1;::::0;4762:34:::1;::::0;413:2:184;398:18;4762:34:181::1;;;;;;;4383:420;4326:477:::0;:::o;3315:197:47:-;1889:4;-1:-1:-1;;;;;1898:6:47;1881:23;;;1873:80;;;;-1:-1:-1;;;1873:80:47;;;;;;;:::i;:::-;1995:6;-1:-1:-1;;;;;1971:30:47;:20;-1:-1:-1;;;;;;;;;;;1642:65:44;-1:-1:-1;;;;;1642:65:44;;1563:151;1971:20:47;-1:-1:-1;;;;;1971:30:47;;1963:87;;;;-1:-1:-1;;;1963:87:47;;;;;;;:::i;:::-;3398:36:::1;3416:17;3398;:36::i;:::-;3485:12;::::0;;3495:1:::1;3485:12:::0;;;::::1;::::0;::::1;::::0;;;3444:61:::1;::::0;3466:17;;3485:12;3444:21:::1;:61::i;:::-;3315:197:::0;:::o;4874:63:181:-;1334:13:42;:11;:13::i;:::-;4920:10:181::1;:8;:10::i;:::-;4874:63::o:0;3761:222:47:-;1889:4;-1:-1:-1;;;;;1898:6:47;1881:23;;;1873:80;;;;-1:-1:-1;;;1873:80:47;;;;;;;:::i;:::-;1995:6;-1:-1:-1;;;;;1971:30:47;:20;-1:-1:-1;;;;;;;;;;;1642:65:44;-1:-1:-1;;;;;1642:65:44;;1563:151;1971:20:47;-1:-1:-1;;;;;1971:30:47;;1963:87;;;;-1:-1:-1;;;1963:87:47;;;;;;;:::i;:::-;3878:36:::1;3896:17;3878;:36::i;:::-;3924:52;3946:17;3965:4;3971;3924:21;:52::i;:::-;3761:222:::0;;:::o;3004:131::-;3082:7;2324:4;-1:-1:-1;;;;;2333:6:47;2316:23;;2308:92;;;;-1:-1:-1;;;2308:92:47;;8043:2:184;2308:92:47;;;8025:21:184;8082:2;8062:18;;;8055:30;8121:34;8101:18;;;8094:62;8192:26;8172:18;;;8165:54;8236:19;;2308:92:47;7841:420:184;2308:92:47;-1:-1:-1;;;;;;;;;;;;3004:131:47;:::o;5230:1851:181:-;5439:23;5465:17;5481:1;5465:6;:17;:::i;:::-;5439:43;;5492:22;5531:15;5517:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5517:30:181;;5492:55;;5558:8;5707:314;5723:15;5719:1;:19;;;5707:314;;;5814:6;;5821:5;5825:1;5821;:5;:::i;:::-;5814:13;;;;;;;;;:::i;:::-;;;;;;;5829:6;;5840:1;5836;:5;;;;:::i;:::-;:9;;5844:1;5836:9;:::i;:::-;5829:17;;;;;;;;;:::i;:::-;;;;;;;5797:50;;;;;;;;9277:19:184;;;9321:2;9312:12;;9305:28;9358:2;9349:12;;9120:247;5797:50:181;;;;;;;;;;;;;5770:91;;;;;;5759:5;5765:1;5759:8;;;;;;;;;;:::i;:::-;;;;;;:102;;;;;5876:134;5927:6;;5934:1;5927:9;;;;;;;;;:::i;:::-;;;;;;;5954:10;;5965:1;5954:13;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;5985:11;5876:33;:134::i;:::-;5740:3;;;;:::i;:::-;;;;5707:314;;;6083:21;;;;-1:-1:-1;6076:194:181;;;6125:134;6176:6;;6183:1;6176:9;;;;;;;;;:::i;6125:134::-;6106:3;;;;:::i;:::-;;;;6076:194;;;6335:20;6354:1;6335:20;;:::i;:::-;;;6431:435;6438:20;;6431:435;;-1:-1:-1;6592:1:181;6583:179;6599:15;6595:1;:19;;;6583:179;;;6698:5;6704;6708:1;6704;:5;:::i;:::-;6698:12;;;;;;;;;;:::i;:::-;;;;;;;6712:5;6722:1;6718;:5;;;;:::i;:::-;:9;;6726:1;6718:9;:::i;:::-;6712:16;;;;;;;;;;:::i;:::-;;;;;;;6681:48;;;;;;;;9277:19:184;;;9321:2;9312:12;;9305:28;9358:2;9349:12;;9120:247;6681:48:181;;;;;;;;;;;;;6650:97;;;;;;6639:5;6645:1;6639:8;;;;;;;;;;:::i;:::-;;;;;;;;;;:108;6616:3;;;;:::i;:::-;;;;6583:179;;;6835:20;6854:1;6835:20;;:::i;:::-;;;6431:435;;;6897:1;6880:18;;6876:199;;;6935:15;6922:6;;6929:1;6922:9;;;;;;;:::i;:::-;;;;;;;:28;6914:60;;;;-1:-1:-1;;;6914:60:181;;10116:2:184;6914:60:181;;;10098:21:184;10155:2;10135:18;;;10128:30;-1:-1:-1;;;10174:18:184;;;10167:49;10233:18;;6914:60:181;9914:343:184;6914:60:181;6876:199;;;7025:15;7013:5;7019:1;7013:8;;;;;;;;:::i;:::-;;;;;;;:27;7005:59;;;;-1:-1:-1;;;7005:59:181;;10116:2:184;7005:59:181;;;10098:21:184;10155:2;10135:18;;;10128:30;-1:-1:-1;;;10174:18:184;;;10167:49;10233:18;;7005:59:181;9914:343:184;7005:59:181;5429:1652;;;5230:1851;;;;;;:::o;2071:101:42:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;4809:59:181:-:0;1334:13:42;:11;:13::i;:::-;4853:8:181::1;:6;:8::i;3899:243::-:0;1482:19:48;:17;:19::i;:::-;3980:10:181::1;4002:1;3971:20:::0;;;:8:::1;:20;::::0;;;;:28;3950:106:::1;;;::::0;-1:-1:-1;;;3950:106:181;;10464:2:184;3950:106:181::1;::::0;::::1;10446:21:184::0;10503:2;10483:18;;;10476:30;10542:29;10522:18;;;10515:57;10589:18;;3950:106:181::1;10262:351:184::0;3950:106:181::1;4102:33;717:3;4102:12;:33;:::i;:::-;4076:10;4067:20;::::0;;;:8:::1;:20;::::0;;;;:32:::1;;:68:::0;3899:243::o;2022:1871::-;5132:13;;-1:-1:-1;;;;;5132:13:181;5118:10;:27;5097:109;;;;-1:-1:-1;;;5097:109:181;;10820:2:184;5097:109:181;;;10802:21:184;10859:2;10839:18;;;10832:30;10898:34;10878:18;;;10871:62;-1:-1:-1;;;10949:18:184;;;10942:33;10992:19;;5097:109:181;10618:399:184;5097:109:181;1482:19:48::1;:17;:19::i;:::-;2423:6:181::0;2470:10;2403:17:::2;2525:30;2544:11;2525:16:::0;:30:::2;:::i;:::-;2498:57:::0;-1:-1:-1;2565:19:181::2;2587:25;2601:11;2587::::0;:25:::2;:::i;:::-;2565:47;;2643:1;2631:9;:13;2623:45;;;::::0;-1:-1:-1;;;2623:45:181;;11397:2:184;2623:45:181::2;::::0;::::2;11379:21:184::0;11436:2;11416:18;;;11409:30;-1:-1:-1;;;11455:18:184;;;11448:49;11514:18;;2623:45:181::2;11195:343:184::0;2623:45:181::2;2702:1;2686:13;:17;2678:59;;;::::0;-1:-1:-1;;;2678:59:181;;11745:2:184;2678:59:181::2;::::0;::::2;11727:21:184::0;11784:2;11764:18;;;11757:30;11823:31;11803:18;;;11796:59;11872:18;;2678:59:181::2;11543:353:184::0;2678:59:181::2;2768:13;2755:9;:26;;2747:56;;;::::0;-1:-1:-1;;;2747:56:181;;12103:2:184;2747:56:181::2;::::0;::::2;12085:21:184::0;12142:2;12122:18;;;12115:30;-1:-1:-1;;;12161:18:184;;;12154:47;12218:18;;2747:56:181::2;11901:341:184::0;2747:56:181::2;2848:13;2860:1;2848:9:::0;:13:::2;:::i;:::-;2835:27:::0;::::2;2834:34:::0;2813:114:::2;;;::::0;-1:-1:-1;;;2813:114:181;;12449:2:184;2813:114:181::2;::::0;::::2;12431:21:184::0;12488:2;12468:18;;;12461:30;12527:34;12507:18;;;12500:62;-1:-1:-1;;;12578:18:184;;;12571:31;12619:19;;2813:114:181::2;12247:397:184::0;2813:114:181::2;2965:1;2946:16;:20;2938:54;;;::::0;-1:-1:-1;;;2938:54:181;;12851:2:184;2938:54:181::2;::::0;::::2;12833:21:184::0;12890:2;12870:18;;;12863:30;-1:-1:-1;;;12909:18:184;;;12902:51;12970:18;;2938:54:181::2;12649:345:184::0;2938:54:181::2;3024:1;3010:11;:15;3002:44;;;::::0;-1:-1:-1;;;3002:44:181;;13201:2:184;3002:44:181::2;::::0;::::2;13183:21:184::0;13240:2;13220:18;;;13213:30;-1:-1:-1;;;13259:18:184;;;13252:46;13315:18;;3002:44:181::2;12999:340:184::0;3002:44:181::2;3107:16:::0;3077:27:::2;3091:13:::0;3077:11;:27:::2;:::i;:::-;:46;3056:129;;;::::0;-1:-1:-1;;;3056:129:181;;13546:2:184;3056:129:181::2;::::0;::::2;13528:21:184::0;13585:2;13565:18;;;13558:30;13624:34;13604:18;;;13597:62;-1:-1:-1;;;13675:18:184;;;13668:34;13719:19;;3056:129:181::2;13344:400:184::0;3056:129:181::2;3196:142;3244:6;;3264:15;3293:10;;3317:11;3196:34;:142::i;:::-;3443:12;3461:26;;;;;;;;;-1:-1:-1::0;;;;;3461:26:181::2;-1:-1:-1::0;;;;;3461:31:181::2;3513:16;3643:15;3676:16;;3553:153;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;3553:153:181;;::::2;::::0;;;;;;::::2;::::0;::::2;::::0;;-1:-1:-1;;;;;3553:153:181::2;-1:-1:-1::0;;;3553:153:181::2;::::0;;3461:255;::::2;::::0;3553:153;3461:255:::2;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3442:274;;;3735:7;3727:45;;;::::0;-1:-1:-1;;;3727:45:181;;14959:2:184;3727:45:181::2;::::0;::::2;14941:21:184::0;14998:2;14978:18;;;14971:30;15037:27;15017:18;;;15010:55;15082:18;;3727:45:181::2;14757:349:184::0;3727:45:181::2;3791:13;::::0;-1:-1:-1;;;;;3791:13:181::2;3783:103;3860:16:::0;3829:27:::2;3843:13:::0;3829:11;:27:::2;:::i;:::-;3828:48;;;;:::i;:::-;3783:103;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;;;;;;::::2;;;;;;;;;;;;;::::0;::::2;;;;;;2393:1500;;;;;2022:1871:::0;;;;;;;;;:::o;1400:423::-;3111:19:46;3134:13;;;;;;3133:14;;3179:34;;;;-1:-1:-1;3197:12:46;;3212:1;3197:12;;;;:16;3179:34;3178:108;;;-1:-1:-1;3258:4:46;1476:19:50;:23;;;3219:66:46;;-1:-1:-1;3268:12:46;;;;;:17;3219:66;3157:201;;;;-1:-1:-1;;;3157:201:46;;15313:2:184;3157:201:46;;;15295:21:184;15352:2;15332:18;;;15325:30;15391:34;15371:18;;;15364:62;-1:-1:-1;;;15442:18:184;;;15435:44;15496:19;;3157:201:46;15111:410:184;3157:201:46;3368:12;:16;;-1:-1:-1;;3368:16:46;3383:1;3368:16;;;3394:65;;;;3428:13;:20;;-1:-1:-1;;3428:20:46;;;;;3394:65;1577:16:181::1;:14;:16::i;:::-;1628:24;:22;:24::i;:::-;1662:47;1681:27;1662:18;:47::i;:::-;1720:26;:56:::0;;-1:-1:-1;;;;;1720:56:181;;::::1;-1:-1:-1::0;;;;;;1720:56:181;;::::1;;::::0;;;1786:13:::1;:30:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;3479:99:46;;;;3529:5;3513:21;;-1:-1:-1;;3513:21:46;;;3553:14;;-1:-1:-1;15678:36:184;;3553:14:46;;15666:2:184;15651:18;3553:14:46;;;;;;;3479:99;3101:483;1400:423:181;;;:::o;2321:198:42:-;1334:13;:11;:13::i;:::-;-1:-1:-1;;;;;2409:22:42;::::1;2401:73;;;::::0;-1:-1:-1;;;2401:73:42;;15927:2:184;2401:73:42::1;::::0;::::1;15909:21:184::0;15966:2;15946:18;;;15939:30;16005:34;15985:18;;;15978:62;-1:-1:-1;;;16056:18:184;;;16049:36;16102:19;;2401:73:42::1;15725:402:184::0;2401:73:42::1;2484:28;2503:8;2484:18;:28::i;4148:172:181:-:0;1482:19:48;:17;:19::i;:::-;4214:10:181::1;4236:1;4205:20:::0;;;:8:::1;:20;::::0;;;;:28;4197:70:::1;;;::::0;-1:-1:-1;;;4197:70:181;;16334:2:184;4197:70:181::1;::::0;::::1;16316:21:184::0;16373:2;16353:18;;;16346:30;16412:27;16392:18;;;16385:55;16457:18;;4197:70:181::1;16132:349:184::0;4197:70:181::1;4286:10;4312:1;4277:20:::0;;;:8:::1;:20;::::0;;;;:32:::1;;:36:::0;4148:172::o;2010:106:48:-;1928:7;;;;2079:9;2071:38;;;;-1:-1:-1;;;2071:38:48;;16688:2:184;2071:38:48;;;16670:21:184;16727:2;16707:18;;;16700:30;-1:-1:-1;;;16746:18:184;;;16739:46;16802:18;;2071:38:48;16486:340:184;4943:98:181;1334:13:42;:11;:13::i;2938:974:44:-;951:66;3384:59;;;3380:526;;;3459:37;3478:17;3459:18;:37::i;:::-;2938:974;;;:::o;3380:526::-;3560:17;-1:-1:-1;;;;;3531:61:44;;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3531:63:44;;;;;;;;-1:-1:-1;;3531:63:44;;;;;;;;;;;;:::i;:::-;;;3527:302;;3758:56;;-1:-1:-1;;;3758:56:44;;17222:2:184;3758:56:44;;;17204:21:184;17261:2;17241:18;;;17234:30;17300:34;17280:18;;;17273:62;-1:-1:-1;;;17351:18:184;;;17344:44;17405:19;;3758:56:44;17020:410:184;3527:302:44;-1:-1:-1;;;;;;;;;;;3644:28:44;;3636:82;;;;-1:-1:-1;;;3636:82:44;;17637:2:184;3636:82:44;;;17619:21:184;17676:2;17656:18;;;17649:30;17715:34;17695:18;;;17688:62;-1:-1:-1;;;17766:18:184;;;17759:39;17815:19;;3636:82:44;17435:405:184;3636:82:44;3595:138;3842:53;3860:17;3879:4;3885:9;3842:17;:53::i;1599:130:42:-;1513:6;;-1:-1:-1;;;;;1513:6:42;929:10:51;1662:23:42;1654:68;;;;-1:-1:-1;;;1654:68:42;;18047:2:184;1654:68:42;;;18029:21:184;;;18066:18;;;18059:30;18125:34;18105:18;;;18098:62;18177:18;;1654:68:42;17845:356:184;2676:117:48;1729:16;:14;:16::i;:::-;2734:7:::1;:15:::0;;-1:-1:-1;;2734:15:48::1;::::0;;2764:22:::1;929:10:51::0;2773:12:48::1;2764:22;::::0;-1:-1:-1;;;;;4006:32:184;;;3988:51;;3976:2;3961:18;2764:22:48::1;;;;;;;2676:117::o:0;7087:721:181:-;7251:18;7312:4;7318:13;:19;;;7295:43;;;;;;;;9277:19:184;;;9321:2;9312:12;;9305:28;9358:2;9349:12;;9120:247;7295:43:181;;;;-1:-1:-1;;7295:43:181;;;;;;;;;7272:76;;7295:43;7272:76;;;;;-1:-1:-1;7359:14:181;7376:43;7395:23;:13;;:23;:::i;:::-;7376:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7376:10:181;;:43;-1:-1:-1;;7376:18:181;:43;-1:-1:-1;7376:43:181:i;:::-;7359:60;-1:-1:-1;;;;;;7437:20:181;;7429:50;;;;-1:-1:-1;;;7429:50:181;;19186:2:184;7429:50:181;;;19168:21:184;19225:2;19205:18;;;19198:30;-1:-1:-1;;;19244:18:184;;;19237:47;19301:18;;7429:50:181;18984:341:184;7429:50:181;-1:-1:-1;;;;;7519:16:181;;7490:26;7519:16;;;:8;:16;;;;;;;;7554:15;;;;7519:16;;7573:19;;;7554:38;7546:64;;;;-1:-1:-1;;;7546:64:181;;19532:2:184;7546:64:181;;;19514:21:184;19571:2;19551:18;;;19544:30;-1:-1:-1;;;19590:18:184;;;19583:43;19643:18;;7546:64:181;19330:337:184;7546:64:181;7620:15;;;:17;;;:15;:17;;;:::i;:::-;;;;-1:-1:-1;;7669:17:181;;:32;-1:-1:-1;7669:32:181;7648:110;;;;-1:-1:-1;;;7648:110:181;;20014:2:184;7648:110:181;;;19996:21:184;20053:2;20033:18;;;20026:30;20092:33;20072:18;;;20065:61;20143:18;;7648:110:181;19812:355:184;7648:110:181;7790:11;7769:9;:17;;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;;7087:721:181:o;2673:187:42:-;2765:6;;;-1:-1:-1;;;;;2781:17:42;;;-1:-1:-1;;;;;;2781:17:42;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;2429:115:48:-;1482:19;:17;:19::i;:::-;2488:7:::1;:14:::0;;-1:-1:-1;;2488:14:48::1;2498:4;2488:14;::::0;;2517:20:::1;2524:12;929:10:51::0;;850:96;1003:95:42;4910:13:46;;;;;;;4902:69;;;;-1:-1:-1;;;4902:69:46;;;;;;;:::i;:::-;1065:26:42::1;:24;:26::i;1042:67:47:-:0;4910:13:46;;;;;;;4902:69;;;;-1:-1:-1;;;4902:69:46;;;;;;;:::i;1805:281:44:-;-1:-1:-1;;;;;1476:19:50;;;1878:106:44;;;;-1:-1:-1;;;1878:106:44;;20786:2:184;1878:106:44;;;20768:21:184;20825:2;20805:18;;;20798:30;20864:34;20844:18;;;20837:62;-1:-1:-1;;;20915:18:184;;;20908:43;20968:19;;1878:106:44;20584:409:184;1878:106:44;-1:-1:-1;;;;;;;;;;;1994:85:44;;-1:-1:-1;;;;;;1994:85:44;-1:-1:-1;;;;;1994:85:44;;;;;;;;;;1805:281::o;2478:288::-;2616:29;2627:17;2616:10;:29::i;:::-;2673:1;2659:4;:11;:15;:28;;;;2678:9;2659:28;2655:105;;;2703:46;2725:17;2744:4;2703:21;:46::i;2188:106:48:-;1928:7;;;;2246:41;;;;-1:-1:-1;;;2246:41:48;;21200:2:184;2246:41:48;;;21182:21:184;21239:2;21219:18;;;21212:30;-1:-1:-1;;;21258:18:184;;;21251:50;21318:18;;2246:41:48;20998:344:184;4402:227:77;4480:7;4500:17;4519:18;4541:27;4552:4;4558:9;4541:10;:27::i;:::-;4499:69;;;;4578:18;4590:5;4578:11;:18::i;:::-;-1:-1:-1;4613:9:77;4402:227;-1:-1:-1;;;4402:227:77:o;1104:111:42:-;4910:13:46;;;;;;;4902:69;;;;-1:-1:-1;;;4902:69:46;;;;;;;:::i;:::-;1176:32:42::1;929:10:51::0;1176:18:42::1;:32::i;2192:152:44:-:0;2258:37;2277:17;2258:18;:37::i;:::-;2310:27;;-1:-1:-1;;;;;2310:27:44;;;;;;;;2192:152;:::o;7088:455::-;7171:12;-1:-1:-1;;;;;1476:19:50;;;7195:88:44;;;;-1:-1:-1;;;7195:88:44;;21549:2:184;7195:88:44;;;21531:21:184;21588:2;21568:18;;;21561:30;21627:34;21607:18;;;21600:62;-1:-1:-1;;;21678:18:184;;;21671:36;21724:19;;7195:88:44;21347:402:184;7195:88:44;7354:12;7368:23;7395:6;-1:-1:-1;;;;;7395:19:44;7415:4;7395:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7353:67;;;;7437:99;7473:7;7482:10;7437:99;;;;;;;;;;;;;;;;;:35;:99::i;:::-;7430:106;7088:455;-1:-1:-1;;;;;7088:455:44:o;2243:1373:77:-;2324:7;2333:12;2554:9;:16;2574:2;2554:22;2550:1060;;;2890:4;2875:20;;2869:27;2939:4;2924:20;;2918:27;2996:4;2981:20;;2975:27;2592:9;2967:36;3037:25;3048:4;2967:36;2869:27;2918;3037:10;:25::i;:::-;3030:32;;;;;;;;;2550:1060;3083:9;:16;3103:2;3083:22;3079:531;;;3399:4;3384:20;;3378:27;3449:4;3434:20;;3428:27;3489:23;3500:4;3378:27;3428;3489:10;:23::i;:::-;3482:30;;;;;;;;3079:531;-1:-1:-1;3559:1:77;;-1:-1:-1;3563:35:77;3079:531;2243:1373;;;;;:::o;548:631::-;625:20;616:5;:29;;;;;;;;:::i;:::-;;612:561;;;548:631;:::o;612:561::-;721:29;712:5;:38;;;;;;;;:::i;:::-;;708:465;;;766:34;;-1:-1:-1;;;766:34:77;;22088:2:184;766:34:77;;;22070:21:184;22127:2;22107:18;;;22100:30;22166:26;22146:18;;;22139:54;22210:18;;766:34:77;21886:348:184;708:465:77;830:35;821:5;:44;;;;;;;;:::i;:::-;;817:356;;;881:41;;-1:-1:-1;;;881:41:77;;22441:2:184;881:41:77;;;22423:21:184;22480:2;22460:18;;;22453:30;22519:33;22499:18;;;22492:61;22570:18;;881:41:77;22239:355:184;817:356:77;952:30;943:5;:39;;;;;;;;:::i;:::-;;939:234;;;998:44;;-1:-1:-1;;;998:44:77;;22801:2:184;998:44:77;;;22783:21:184;22840:2;22820:18;;;22813:30;22879:34;22859:18;;;22852:62;-1:-1:-1;;;22930:18:184;;;22923:32;22972:19;;998:44:77;22599:398:184;939:234:77;1072:30;1063:5;:39;;;;;;;;:::i;:::-;;1059:114;;;1118:44;;-1:-1:-1;;;1118:44:77;;23204:2:184;1118:44:77;;;23186:21:184;23243:2;23223:18;;;23216:30;23282:34;23262:18;;;23255:62;-1:-1:-1;;;23333:18:184;;;23326:32;23375:19;;1118:44:77;23002:398:184;6622:742:50;6768:12;6796:7;6792:566;;;-1:-1:-1;6826:10:50;6819:17;;6792:566;6937:17;;:21;6933:415;;7181:10;7175:17;7241:15;7228:10;7224:2;7220:19;7213:44;6933:415;7320:12;7313:20;;-1:-1:-1;;;7313:20:50;;;;;;;;:::i;6933:415::-;6622:742;;;;;:::o;5810:1603:77:-;5936:7;;6860:66;6847:79;;6843:161;;;-1:-1:-1;6958:1:77;;-1:-1:-1;6962:30:77;6942:51;;6843:161;7017:1;:7;;7022:2;7017:7;;:18;;;;;7028:1;:7;;7033:2;7028:7;;7017:18;7013:100;;;-1:-1:-1;7067:1:77;;-1:-1:-1;7071:30:77;7051:51;;7013:100;7224:24;;;7207:14;7224:24;;;;;;;;;24020:25:184;;;24093:4;24081:17;;24061:18;;;24054:45;;;;24115:18;;;24108:34;;;24158:18;;;24151:34;;;7224:24:77;;23992:19:184;;7224:24:77;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7224:24:77;;-1:-1:-1;;7224:24:77;;;-1:-1:-1;;;;;;;7262:20:77;;7258:101;;7314:1;7318:29;7298:50;;;;;;;7258:101;7377:6;-1:-1:-1;7385:20:77;;-1:-1:-1;5810:1603:77;;;;;;;;:::o;4883:336::-;4993:7;;-1:-1:-1;;;;;5038:80:77;;4993:7;5144:25;5160:3;5145:18;;;5167:2;5144:25;:::i;:::-;5128:42;;5187:25;5198:4;5204:1;5207;5210;5187:10;:25::i;:::-;5180:32;;;;;;4883:336;;;;;;:::o;14:127:184:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:128;186:3;217:1;213:6;210:1;207:13;204:39;;;223:18;;:::i;:::-;-1:-1:-1;259:9:184;;146:128::o;461:173::-;529:20;;-1:-1:-1;;;;;578:31:184;;568:42;;558:70;;624:1;621;614:12;558:70;461:173;;;:::o;639:186::-;698:6;751:2;739:9;730:7;726:23;722:32;719:52;;;767:1;764;757:12;719:52;790:29;809:9;790:29;:::i;830:180::-;889:6;942:2;930:9;921:7;917:23;913:32;910:52;;;958:1;955;948:12;910:52;-1:-1:-1;981:23:184;;830:180;-1:-1:-1;830:180:184:o;1015:127::-;1076:10;1071:3;1067:20;1064:1;1057:31;1107:4;1104:1;1097:15;1131:4;1128:1;1121:15;1147:995;1224:6;1232;1285:2;1273:9;1264:7;1260:23;1256:32;1253:52;;;1301:1;1298;1291:12;1253:52;1324:29;1343:9;1324:29;:::i;:::-;1314:39;;1404:2;1393:9;1389:18;1376:32;1427:18;1468:2;1460:6;1457:14;1454:34;;;1484:1;1481;1474:12;1454:34;1522:6;1511:9;1507:22;1497:32;;1567:7;1560:4;1556:2;1552:13;1548:27;1538:55;;1589:1;1586;1579:12;1538:55;1625:2;1612:16;1647:2;1643;1640:10;1637:36;;;1653:18;;:::i;:::-;1728:2;1722:9;1696:2;1782:13;;-1:-1:-1;;1778:22:184;;;1802:2;1774:31;1770:40;1758:53;;;1826:18;;;1846:22;;;1823:46;1820:72;;;1872:18;;:::i;:::-;1912:10;1908:2;1901:22;1947:2;1939:6;1932:18;1987:7;1982:2;1977;1973;1969:11;1965:20;1962:33;1959:53;;;2008:1;2005;1998:12;1959:53;2064:2;2059;2055;2051:11;2046:2;2038:6;2034:15;2021:46;2109:1;2104:2;2099;2091:6;2087:15;2083:24;2076:35;2130:6;2120:16;;;;;;;1147:995;;;;;:::o;2329:367::-;2392:8;2402:6;2456:3;2449:4;2441:6;2437:17;2433:27;2423:55;;2474:1;2471;2464:12;2423:55;-1:-1:-1;2497:20:184;;2540:18;2529:30;;2526:50;;;2572:1;2569;2562:12;2526:50;2609:4;2601:6;2597:17;2585:29;;2669:3;2662:4;2652:6;2649:1;2645:14;2637:6;2633:27;2629:38;2626:47;2623:67;;;2686:1;2683;2676:12;2701:944;2875:6;2883;2891;2899;2907;2915;2968:3;2956:9;2947:7;2943:23;2939:33;2936:53;;;2985:1;2982;2975:12;2936:53;3025:9;3012:23;3054:18;3095:2;3087:6;3084:14;3081:34;;;3111:1;3108;3101:12;3081:34;3150:70;3212:7;3203:6;3192:9;3188:22;3150:70;:::i;:::-;3239:8;;-1:-1:-1;3124:96:184;-1:-1:-1;3321:2:184;3306:18;;3293:32;;-1:-1:-1;3378:2:184;3363:18;;3350:32;;-1:-1:-1;3394:16:184;;;3391:36;;;3423:1;3420;3413:12;3391:36;;3462:72;3526:7;3515:8;3504:9;3500:24;3462:72;:::i;:::-;2701:944;;;;-1:-1:-1;2701:944:184;;;;;3635:2;3620:18;;;3607:32;;2701:944;-1:-1:-1;;;;2701:944:184:o;4374:1463::-;4578:6;4586;4594;4602;4610;4618;4626;4634;4642;4695:3;4683:9;4674:7;4670:23;4666:33;4663:53;;;4712:1;4709;4702:12;4663:53;4748:9;4735:23;4725:33;;4809:2;4798:9;4794:18;4781:32;4832:18;4873:2;4865:6;4862:14;4859:34;;;4889:1;4886;4879:12;4859:34;4927:6;4916:9;4912:22;4902:32;;4972:7;4965:4;4961:2;4957:13;4953:27;4943:55;;4994:1;4991;4984:12;4943:55;5034:2;5021:16;5060:2;5052:6;5049:14;5046:34;;;5076:1;5073;5066:12;5046:34;5121:7;5116:2;5107:6;5103:2;5099:15;5095:24;5092:37;5089:57;;;5142:1;5139;5132:12;5089:57;5173:2;5169;5165:11;5155:21;;5195:6;5185:16;;;5254:2;5243:9;5239:18;5226:32;5210:48;;5283:2;5273:8;5270:16;5267:36;;;5299:1;5296;5289:12;5267:36;5338:72;5402:7;5391:8;5380:9;5376:24;5338:72;:::i;:::-;5429:8;;-1:-1:-1;5312:98:184;-1:-1:-1;5517:2:184;5502:18;;5489:32;;-1:-1:-1;5533:16:184;;;5530:36;;;5562:1;5559;5552:12;5530:36;;5601:72;5665:7;5654:8;5643:9;5639:24;5601:72;:::i;:::-;4374:1463;;;;-1:-1:-1;4374:1463:184;;;;;;5575:98;;5774:3;5759:19;;5746:33;;5826:3;5811:19;;;5798:33;;-1:-1:-1;4374:1463:184;-1:-1:-1;;;;4374:1463:184:o;5842:334::-;5919:6;5927;5935;5988:2;5976:9;5967:7;5963:23;5959:32;5956:52;;;6004:1;6001;5994:12;5956:52;6027:29;6046:9;6027:29;:::i;:::-;6017:39;;6075:38;6109:2;6098:9;6094:18;6075:38;:::i;:::-;6065:48;;6132:38;6166:2;6155:9;6151:18;6132:38;:::i;:::-;6122:48;;5842:334;;;;;:::o;6885:125::-;6925:4;6953:1;6950;6947:8;6944:34;;;6958:18;;:::i;:::-;-1:-1:-1;6995:9:184;;6885:125::o;7015:408::-;7217:2;7199:21;;;7256:2;7236:18;;;7229:30;7295:34;7290:2;7275:18;;7268:62;-1:-1:-1;;;7361:2:184;7346:18;;7339:42;7413:3;7398:19;;7015:408::o;7428:::-;7630:2;7612:21;;;7669:2;7649:18;;;7642:30;7708:34;7703:2;7688:18;;7681:62;-1:-1:-1;;;7774:2:184;7759:18;;7752:42;7826:3;7811:19;;7428:408::o;8266:217::-;8306:1;8332;8322:132;;8376:10;8371:3;8367:20;8364:1;8357:31;8411:4;8408:1;8401:15;8439:4;8436:1;8429:15;8322:132;-1:-1:-1;8468:9:184;;8266:217::o;8488:262::-;8527:7;8559:10;8596:2;8593:1;8589:10;8626:2;8623:1;8619:10;8682:3;8678:2;8674:12;8669:3;8666:21;8659:3;8652:11;8645:19;8641:47;8638:73;;;8691:18;;:::i;:::-;8731:13;;8488:262;-1:-1:-1;;;;8488:262:184:o;8755:127::-;8816:10;8811:3;8807:20;8804:1;8797:31;8847:4;8844:1;8837:15;8871:4;8868:1;8861:15;8887:228;8926:3;8954:10;8991:2;8988:1;8984:10;9021:2;9018:1;9014:10;9052:3;9048:2;9044:12;9039:3;9036:21;9033:47;;;9060:18;;:::i;:::-;9096:13;;8887:228;-1:-1:-1;;;;8887:228:184:o;9372:331::-;9472:4;9530:11;9517:25;9624:2;9620:7;9609:8;9593:14;9589:29;9585:43;9565:18;9561:68;9551:96;;9643:1;9640;9633:12;9551:96;9664:33;;;;;9372:331;-1:-1:-1;;9372:331:184:o;9708:201::-;9746:3;9774:10;9819:2;9812:5;9808:14;9846:2;9837:7;9834:15;9831:41;;;9852:18;;:::i;:::-;9901:1;9888:15;;9708:201;-1:-1:-1;;;9708:201:184:o;11022:168::-;11062:7;11128:1;11124;11120:6;11116:14;11113:1;11110:21;11105:1;11098:9;11091:17;11087:45;11084:71;;;11135:18;;:::i;:::-;-1:-1:-1;11175:9:184;;11022:168::o;13749:461::-;13936:6;13925:9;13918:25;13979:2;13974;13963:9;13959:18;13952:30;14018:6;14013:2;14002:9;13998:18;13991:34;14075:6;14067;14062:2;14051:9;14047:18;14034:48;14131:1;14102:22;;;14126:2;14098:31;;;14091:42;;;;14194:2;14173:15;;;-1:-1:-1;;14169:29:184;14154:45;14150:54;;13749:461;-1:-1:-1;;13749:461:184:o;14215:258::-;14287:1;14297:113;14311:6;14308:1;14305:13;14297:113;;;14387:11;;;14381:18;14368:11;;;14361:39;14333:2;14326:10;14297:113;;;14428:6;14425:1;14422:13;14419:48;;;-1:-1:-1;;14463:1:184;14445:16;;14438:27;14215:258::o;14478:274::-;14607:3;14645:6;14639:13;14661:53;14707:6;14702:3;14695:4;14687:6;14683:17;14661:53;:::i;16831:184::-;16901:6;16954:2;16942:9;16933:7;16929:23;16925:32;16922:52;;;16970:1;16967;16960:12;16922:52;-1:-1:-1;16993:16:184;;16831:184;-1:-1:-1;16831:184:184:o;18458:521::-;18535:4;18541:6;18601:11;18588:25;18695:2;18691:7;18680:8;18664:14;18660:29;18656:43;18636:18;18632:68;18622:96;;18714:1;18711;18704:12;18622:96;18741:33;;18793:20;;;-1:-1:-1;18836:18:184;18825:30;;18822:50;;;18868:1;18865;18858:12;18822:50;18901:4;18889:17;;-1:-1:-1;18932:14:184;18928:27;;;18918:38;;18915:58;;;18969:1;18966;18959:12;19672:135;19711:3;-1:-1:-1;;19732:17:184;;19729:43;;;19752:18;;:::i;:::-;-1:-1:-1;19799:1:184;19788:13;;19672:135::o;20172:407::-;20374:2;20356:21;;;20413:2;20393:18;;;20386:30;20452:34;20447:2;20432:18;;20425:62;-1:-1:-1;;;20518:2:184;20503:18;;20496:41;20569:3;20554:19;;20172:407::o;21754:127::-;21815:10;21810:3;21806:20;21803:1;21796:31;21846:4;21843:1;21836:15;21870:4;21867:1;21860:15;23405:383;23554:2;23543:9;23536:21;23517:4;23586:6;23580:13;23629:6;23624:2;23613:9;23609:18;23602:34;23645:66;23704:6;23699:2;23688:9;23684:18;23679:2;23671:6;23667:15;23645:66;:::i;:::-;23772:2;23751:15;-1:-1:-1;;23747:29:184;23732:45;;;;23779:2;23728:54;;23405:383;-1:-1:-1;;23405:383:184:o","linkReferences":{},"immutableReferences":{"15357":[{"start":1531,"length":32},{"start":1595,"length":32},{"start":1773,"length":32},{"start":1837,"length":32},{"start":1984,"length":32}]}},"methodIdentifiers":{"AlignedLayerServiceManager()":"b5708230","BatcherWallet()":"d3c7f833","UNLOCK_BLOCK_COUNT()":"5a3f631a","UserData(address)":"9907e0ab","checkMerkleRootAndVerifySignatures(bytes32[],bytes32,(bytes,uint256)[],uint256)":"55f6065f","createNewTask(bytes32,string,bytes32[],(bytes,uint256)[],uint256,uint256)":"bf322658","initialize(address,address,address)":"c0c53b8b","lock()":"f83d08ba","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","proxiableUUID()":"52d1902d","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","unlock()":"a69df4b5","unpause()":"3f4ba83a","upgradeTo(address)":"3659cfe6","upgradeToAndCall(address,bytes)":"4f1ef286","user_balances(address)":"2df4e21e","user_nonces(address)":"17d89c4e","user_unlock_block(address)":"4d5431ea","withdraw(uint256)":"2e1a7d4d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PaymentReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AlignedLayerServiceManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BatcherWallet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNLOCK_BLOCK_COUNT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"UserData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unlockBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"leaves\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"internalType\":\"struct BatcherPaymentService.SignatureData[]\",\"name\":\"signatures\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"feePerProof\",\"type\":\"uint256\"}],\"name\":\"checkMerkleRootAndVerifySignatures\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"batchDataPointer\",\"type\":\"string\"},{\"internalType\":\"bytes32[]\",\"name\":\"leaves\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"internalType\":\"struct BatcherPaymentService.SignatureData[]\",\"name\":\"signatures\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"gasForAggregator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPerProof\",\"type\":\"uint256\"}],\"name\":\"createNewTask\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_AlignedLayerServiceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_BatcherPaymentServiceOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_BatcherWallet\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"user_balances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"user_nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"user_unlock_block\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate that the this implementation remains valid after an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy to `newImplementation`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/core/BatcherPaymentService.sol\":\"BatcherPaymentService\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin-upgrades-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/\",\":@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/\",\":@openzeppelin-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/\",\":@openzeppelin/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/\",\":ds-test/=lib/eigenlayer-middleware/lib/ds-test/src/\",\":eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/\",\":eigenlayer-core-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/\",\":eigenlayer-core/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/\",\":eigenlayer-middleware/=lib/eigenlayer-middleware/src/\",\":eigenlayer-scripts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/script/\",\":erc4626-tests/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/\",\":openzeppelin-contracts-upgradeable/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/\",\":openzeppelin-contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/\",\":openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/contracts/\"]},\"sources\":{\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/interfaces/draft-IERC1822Upgradeable.sol\":{\"keccak256\":\"0x77c89f893e403efc6929ba842b7ccf6534d4ffe03afe31670b4a528c0ad78c0f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://496bd9b3df2455d571018c09f0c6badd29713fdeb907c6aa09d8d28cb603f053\",\"dweb:/ipfs/QmXdJDyYs6WMwMh21dez2BYPxhSUaUYFMDtVNcn2cgFR79\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol\":{\"keccak256\":\"0x315887e846f1e5f8d8fa535a229d318bb9290aaa69485117f1ee8a9a6b3be823\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29dda00da6d269685b555e710e4abf1c3eb6d00c15b888a7880a2f8dd3c4fdc2\",\"dweb:/ipfs/QmSqcjtdECygtT1Gy7uEo42x8542srpgGEeKKHfcnQqXgn\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/beacon/IBeaconUpgradeable.sol\":{\"keccak256\":\"0x24b86ac8c005b8c654fbf6ac34a5a4f61580d7273541e83e013e89d66fbf0908\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dbfe1a3b3b3fb64294ce41fd2ad362e7b7012208117864f42c1a67620a6d5c1\",\"dweb:/ipfs/QmVMU5tWt7zBQMmf5cpMX8UMHV86T3kFeTxBTBjFqVWfoJ\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x6e36e9b4b71de699c2f3f0d4e4d1aa0b35da99a26e8d5b91ef09ba234b4ef270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://abfa467c53a0d60b4d09bf04aa952b1d1d44e5766fcc053aace078d7859b8419\",\"dweb:/ipfs/QmebVTZpyNxYfKYTuLMywzEJTdc1Ca8ME4xm3kR9gQgToG\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/security/PausableUpgradeable.sol\":{\"keccak256\":\"0x40c636b4572ff5f1dc50cf22097e93c0723ee14eff87e99ac2b02636eeca1250\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9c7d1f5e15633ab912b74c2f57e24559e66b03232300d4b27ff0f25bc452ecad\",\"dweb:/ipfs/QmYTJkc1cntYkKQ1Tu11nBcJLakiy93Tjytc4XHELo4GmR\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/StorageSlotUpgradeable.sol\":{\"keccak256\":\"0x09864aea84f01e39313375b5610c73a3c1c68abbdc51e5ccdd25ff977fdadf9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aedb48081190fa828d243529ce25c708202c7d4ccfe99f0e4ecd6bc0cfcd03f3\",\"dweb:/ipfs/QmWyiDQHPZA56iqsAwTmiJoxvNeRQLUVr4gTfzpdpXivpo\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638\",\"dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x84ac2d2f343df1e683da7a12bbcf70db542a7a7a0cea90a5d70fcb5e5d035481\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://73ae8e0c6f975052973265113d762629002ce33987b1933c2a378667e2816f2f\",\"dweb:/ipfs/QmQAootkVfoe4PLaYbT4Xob2dJRm3bZfbCffEHRbCYXNPF\"]},\"src/core/BatcherPaymentService.sol\":{\"keccak256\":\"0xd9f4d45fd0b0f68eddf76ea03bf62b01edef117a2bcfed76ef68aedc424ad94b\",\"urls\":[\"bzz-raw://5ea292cdad1946224414dd8e3c201fc7fb9241ed13594996141f66ddffe700fc\",\"dweb:/ipfs/QmQpw2ytapFuKynrVQsYAdSmkPqpmTsFuvemjLqkt3EJ8C\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.12+commit.f00d7308"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"previousAdmin","type":"address","indexed":false},{"internalType":"address","name":"newAdmin","type":"address","indexed":false}],"type":"event","name":"AdminChanged","anonymous":false},{"inputs":[{"internalType":"address","name":"beacon","type":"address","indexed":true}],"type":"event","name":"BeaconUpgraded","anonymous":false},{"inputs":[{"internalType":"address","name":"recipient","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"FundsWithdrawn","anonymous":false},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Paused","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"PaymentReceived","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Unpaused","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"AlignedLayerServiceManager","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"BatcherWallet","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UNLOCK_BLOCK_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"UserData","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"unlockBlock","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"}]},{"inputs":[{"internalType":"bytes32[]","name":"leaves","type":"bytes32[]"},{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"struct BatcherPaymentService.SignatureData[]","name":"signatures","type":"tuple[]","components":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"nonce","type":"uint256"}]},{"internalType":"uint256","name":"feePerProof","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"checkMerkleRootAndVerifySignatures"},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"string","name":"batchDataPointer","type":"string"},{"internalType":"bytes32[]","name":"leaves","type":"bytes32[]"},{"internalType":"struct BatcherPaymentService.SignatureData[]","name":"signatures","type":"tuple[]","components":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"nonce","type":"uint256"}]},{"internalType":"uint256","name":"gasForAggregator","type":"uint256"},{"internalType":"uint256","name":"gasPerProof","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"createNewTask"},{"inputs":[{"internalType":"address","name":"_AlignedLayerServiceManager","type":"address"},{"internalType":"address","name":"_BatcherPaymentServiceOwner","type":"address"},{"internalType":"address","name":"_BatcherWallet","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"lock"},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"pause"},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"unlock"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"unpause"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"upgradeTo"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"user_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"user_nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"user_unlock_block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"withdraw"},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"owner()":{"details":"Returns the address of the current owner."},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"proxiableUUID()":{"details":"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate that the this implementation remains valid after an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"upgradeTo(address)":{"details":"Upgrade the implementation of the proxy to `newImplementation`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."},"upgradeToAndCall(address,bytes)":{"details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin-upgrades-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/","@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/","@openzeppelin-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/","@openzeppelin/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/","ds-test/=lib/eigenlayer-middleware/lib/ds-test/src/","eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/","eigenlayer-core-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/","eigenlayer-core/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/","eigenlayer-middleware/=lib/eigenlayer-middleware/src/","eigenlayer-scripts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/script/","erc4626-tests/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/","openzeppelin-contracts-upgradeable/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/","openzeppelin-contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/","openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/core/BatcherPaymentService.sol":"BatcherPaymentService"},"evmVersion":"london","libraries":{}},"sources":{"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888","urls":["bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a","dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/interfaces/draft-IERC1822Upgradeable.sol":{"keccak256":"0x77c89f893e403efc6929ba842b7ccf6534d4ffe03afe31670b4a528c0ad78c0f","urls":["bzz-raw://496bd9b3df2455d571018c09f0c6badd29713fdeb907c6aa09d8d28cb603f053","dweb:/ipfs/QmXdJDyYs6WMwMh21dez2BYPxhSUaUYFMDtVNcn2cgFR79"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol":{"keccak256":"0x315887e846f1e5f8d8fa535a229d318bb9290aaa69485117f1ee8a9a6b3be823","urls":["bzz-raw://29dda00da6d269685b555e710e4abf1c3eb6d00c15b888a7880a2f8dd3c4fdc2","dweb:/ipfs/QmSqcjtdECygtT1Gy7uEo42x8542srpgGEeKKHfcnQqXgn"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/beacon/IBeaconUpgradeable.sol":{"keccak256":"0x24b86ac8c005b8c654fbf6ac34a5a4f61580d7273541e83e013e89d66fbf0908","urls":["bzz-raw://4dbfe1a3b3b3fb64294ce41fd2ad362e7b7012208117864f42c1a67620a6d5c1","dweb:/ipfs/QmVMU5tWt7zBQMmf5cpMX8UMHV86T3kFeTxBTBjFqVWfoJ"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e","urls":["bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497","dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x6e36e9b4b71de699c2f3f0d4e4d1aa0b35da99a26e8d5b91ef09ba234b4ef270","urls":["bzz-raw://abfa467c53a0d60b4d09bf04aa952b1d1d44e5766fcc053aace078d7859b8419","dweb:/ipfs/QmebVTZpyNxYfKYTuLMywzEJTdc1Ca8ME4xm3kR9gQgToG"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/security/PausableUpgradeable.sol":{"keccak256":"0x40c636b4572ff5f1dc50cf22097e93c0723ee14eff87e99ac2b02636eeca1250","urls":["bzz-raw://9c7d1f5e15633ab912b74c2f57e24559e66b03232300d4b27ff0f25bc452ecad","dweb:/ipfs/QmYTJkc1cntYkKQ1Tu11nBcJLakiy93Tjytc4XHELo4GmR"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol":{"keccak256":"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3","urls":["bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4","dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149","urls":["bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c","dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/StorageSlotUpgradeable.sol":{"keccak256":"0x09864aea84f01e39313375b5610c73a3c1c68abbdc51e5ccdd25ff977fdadf9a","urls":["bzz-raw://aedb48081190fa828d243529ce25c708202c7d4ccfe99f0e4ecd6bc0cfcd03f3","dweb:/ipfs/QmWyiDQHPZA56iqsAwTmiJoxvNeRQLUVr4gTfzpdpXivpo"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3","urls":["bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638","dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0x84ac2d2f343df1e683da7a12bbcf70db542a7a7a0cea90a5d70fcb5e5d035481","urls":["bzz-raw://73ae8e0c6f975052973265113d762629002ce33987b1933c2a378667e2816f2f","dweb:/ipfs/QmQAootkVfoe4PLaYbT4Xob2dJRm3bZfbCffEHRbCYXNPF"],"license":"MIT"},"src/core/BatcherPaymentService.sol":{"keccak256":"0xd9f4d45fd0b0f68eddf76ea03bf62b01edef117a2bcfed76ef68aedc424ad94b","urls":["bzz-raw://5ea292cdad1946224414dd8e3c201fc7fb9241ed13594996141f66ddffe700fc","dweb:/ipfs/QmQpw2ytapFuKynrVQsYAdSmkPqpmTsFuvemjLqkt3EJ8C"],"license":null}},"version":1},"id":181} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"UNLOCK_BLOCK_COUNT","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"alignedLayerServiceManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IAlignedLayerServiceManager"}],"stateMutability":"view"},{"type":"function","name":"batcherWallet","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"createNewTask","inputs":[{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"batchDataPointer","type":"string","internalType":"string"},{"name":"leaves","type":"bytes32[]","internalType":"bytes32[]"},{"name":"signatures","type":"tuple[]","internalType":"struct BatcherPaymentService.SignatureData[]","components":[{"name":"signature","type":"bytes","internalType":"bytes"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"maxFee","type":"uint256","internalType":"uint256"}]},{"name":"feeForAggregator","type":"uint256","internalType":"uint256"},{"name":"feePerProof","type":"uint256","internalType":"uint256"},{"name":"maxFeeAllowedToRespond","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[{"name":"_alignedLayerServiceManager","type":"address","internalType":"contract IAlignedLayerServiceManager"},{"name":"_batcherPaymentServiceOwner","type":"address","internalType":"address"},{"name":"_batcherWallet","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"lock","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"pause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unlock","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unpause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeTo","inputs":[{"name":"newImplementation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"userData","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"unlockBlock","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"user_balances","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"user_nonces","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"user_unlock_block","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"withdraw","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"AdminChanged","inputs":[{"name":"previousAdmin","type":"address","indexed":false,"internalType":"address"},{"name":"newAdmin","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"BalanceLocked","inputs":[{"name":"user","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"BalanceUnlocked","inputs":[{"name":"user","type":"address","indexed":true,"internalType":"address"},{"name":"unlockBlock","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"BeaconUpgraded","inputs":[{"name":"beacon","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"FundsWithdrawn","inputs":[{"name":"recipient","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"PaymentReceived","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TaskCreated","inputs":[{"name":"batchMerkleRoot","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"feePerProof","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"FundsLocked","inputs":[{"name":"unlockBlock","type":"uint256","internalType":"uint256"},{"name":"currentBlock","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InsufficientFeeForAggregator","inputs":[{"name":"required","type":"uint256","internalType":"uint256"},{"name":"available","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidMaxFee","inputs":[{"name":"maxFee","type":"uint256","internalType":"uint256"},{"name":"actualFee","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidMerkleRoot","inputs":[{"name":"expected","type":"bytes32","internalType":"bytes32"},{"name":"actual","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"InvalidNonce","inputs":[{"name":"expected","type":"uint256","internalType":"uint256"},{"name":"actual","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidSignature","inputs":[]},{"type":"error","name":"LeavesNotPowerOfTwo","inputs":[{"name":"leavesQty","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"NoFeePerProof","inputs":[]},{"type":"error","name":"NoLeavesSubmitted","inputs":[]},{"type":"error","name":"NoProofSubmitterSignatures","inputs":[]},{"type":"error","name":"NotEnoughLeaves","inputs":[{"name":"leavesQty","type":"uint256","internalType":"uint256"},{"name":"signaturesQty","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"OnlyBatcherAllowed","inputs":[{"name":"caller","type":"address","internalType":"address"}]},{"type":"error","name":"PayerInsufficientBalance","inputs":[{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"SignerInsufficientBalance","inputs":[{"name":"signer","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"required","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"UserHasNoFundsToLock","inputs":[{"name":"user","type":"address","internalType":"address"}]},{"type":"error","name":"UserHasNoFundsToUnlock","inputs":[{"name":"user","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100e2565b600054610100900460ff161561008e5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100e0576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6080516122a06200011a600039600081816105ce0152818161060e015281816106c001528181610700015261079301526122a06000f3fe60806040526004361061012e5760003560e01c80635c975abb116100ab578063a69df4b51161006f578063a69df4b5146103a5578063c0c53b8b146103ba578063c8910913146103da578063df5ffbc614610431578063f2fde38b14610451578063f83d08ba1461047157600080fd5b80635c975abb1461031a578063715018a61461033d5780638456cb59146103525780638da5cb5b14610367578063953ef8071461038557600080fd5b80634d5431ea116100f25780634d5431ea1461026c5780634f1ef286146102a557806352d1902d146102b857806358b96e27146102cd5780635a3f631a1461030557600080fd5b806317d89c4e146101935780632df4e21e146101df5780632e1a7d4d146102155780633659cfe6146102375780633f4ba83a1461025757600080fd5b3661018e5733600090815260fd602052604081208054349290610152908490611c3f565b909155505060405134815233907f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be7709060200160405180910390a2005b600080fd5b34801561019f57600080fd5b506101cc6101ae366004611c6c565b6001600160a01b0316600090815260fd602052604090206002015490565b6040519081526020015b60405180910390f35b3480156101eb57600080fd5b506101cc6101fa366004611c6c565b6001600160a01b0316600090815260fd602052604090205490565b34801561022157600080fd5b50610235610230366004611c89565b610486565b005b34801561024357600080fd5b50610235610252366004611c6c565b6105c3565b34801561026357600080fd5b506102356106a3565b34801561027857600080fd5b506101cc610287366004611c6c565b6001600160a01b0316600090815260fd602052604090206001015490565b6102356102b3366004611cb8565b6106b5565b3480156102c457600080fd5b506101cc610786565b3480156102d957600080fd5b5060fc546102ed906001600160a01b031681565b6040516001600160a01b0390911681526020016101d6565b34801561031157600080fd5b506101cc606481565b34801561032657600080fd5b5060655460ff1660405190151581526020016101d6565b34801561034957600080fd5b50610235610839565b34801561035e57600080fd5b5061023561084b565b34801561037357600080fd5b506033546001600160a01b03166102ed565b34801561039157600080fd5b5060fb546102ed906001600160a01b031681565b3480156103b157600080fd5b5061023561085b565b3480156103c657600080fd5b506102356103d5366004611d7c565b6108ef565b3480156103e657600080fd5b506104166103f5366004611c6c565b60fd6020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016101d6565b34801561043d57600080fd5b5061023561044c366004611e0c565b610a44565b34801561045d57600080fd5b5061023561046c366004611c6c565b610c88565b34801561047d57600080fd5b50610235610cfe565b61048e610d72565b33600090815260fd6020526040902080548211156104d15780546040516321c3d50f60e01b81526004810191909152602481018390526044015b60405180910390fd5b600181015415806104e55750438160010154115b15610512576001810154604051635f6e272d60e11b815260048101919091524360248201526044016104c8565b818160000160008282546105269190611ef8565b909155505060006001820181905560405133917fc5f84593e7086c66a205abab7ee44e1a8e6db58e50bf18ca46cb8239118b5ecd91a2604051339083156108fc029084906000818181858888f19350505050158015610589573d6000803e3d6000fd5b5060405182815233907feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d9060200160405180910390a25050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561060c5760405162461bcd60e51b81526004016104c890611f0f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610655600080516020612224833981519152546001600160a01b031690565b6001600160a01b03161461067b5760405162461bcd60e51b81526004016104c890611f5b565b61068481610db8565b604080516000808252602082019092526106a091839190610dc0565b50565b6106ab610f30565b6106b3610f8a565b565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156106fe5760405162461bcd60e51b81526004016104c890611f0f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610747600080516020612224833981519152546001600160a01b031690565b6001600160a01b03161461076d5760405162461bcd60e51b81526004016104c890611f5b565b61077682610db8565b61078282826001610dc0565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108265760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016104c8565b5060008051602061222483398151915290565b610841610f30565b6106b36000610fdc565b610853610f30565b6106b361102e565b610863610d72565b33600090815260fd60205260409020546108925760405163b38340cf60e01b81523360048201526024016104c8565b61089d606443611c3f565b33600081815260fd6020526040908190206001018390555190917f43e8fb9d4f009c90c55a3fa108b177b794704d61af7af6f6512db7883f8ed843916108e591815260200190565b60405180910390a2565b600054610100900460ff161580801561090f5750600054600160ff909116105b806109295750303b158015610929575060005460ff166001145b61098c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104c8565b6000805460ff1916600117905580156109af576000805461ff0019166101001790555b6109b761106b565b6109bf61109a565b6109c883610fdc565b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc8054928516929091169190911790558015610a3e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60fc546001600160a01b03163314610a71576040516302a5785160e31b81523360048201526024016104c8565b610a79610d72565b858481610a995760405163e5180e0360e01b815260040160405180910390fd5b80610ab757604051630c9d0b0160e21b815260040160405180910390fd5b80821015610ae25760405163320f0a1b60e01b815260048101839052602481018290526044016104c8565b610aed600183611ef8565b821615610b1057604051636b1651e160e01b8152600481018390526024016104c8565b83610b2e576040516351d432c560e11b815260040160405180910390fd5b84610b398286611fa7565b11610b6b5784610b498286611fa7565b604051637899ec7160e01b8152600481019290925260248201526044016104c8565b610b7989898e8a8a896110c1565b60fb60009054906101000a90046001600160a01b03166001600160a01b031663d66eaabd868e8e8e886040518663ffffffff1660e01b8152600401610bc19493929190611fc6565b6000604051808303818588803b158015610bda57600080fd5b505af1158015610bee573d6000803e3d6000fd5b50505050508b7f4f9439a5aed9cb470d2e0756e7d293accfe5223e719a9a1a256646378ec4375885604051610c2591815260200190565b60405180910390a260fc546001600160a01b03166108fc86610c478488611fa7565b610c519190611ef8565b6040518115909202916000818181858888f19350505050158015610c79573d6000803e3d6000fd5b50505050505050505050505050565b610c90610f30565b6001600160a01b038116610cf55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104c8565b6106a081610fdc565b610d06610d72565b33600090815260fd6020526040902054610d355760405163366095e160e11b81523360048201526024016104c8565b33600081815260fd6020526040808220600101829055517fc5f84593e7086c66a205abab7ee44e1a8e6db58e50bf18ca46cb8239118b5ecd9190a2565b60655460ff16156106b35760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104c8565b6106a0610f30565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610df857610df383611451565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610e52575060408051601f3d908101601f19168201909252610e4f91810190612006565b60015b610eb55760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016104c8565b6000805160206122248339815191528114610f245760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016104c8565b50610df38383836114ed565b6033546001600160a01b031633146106b35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104c8565b610f92611512565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611036610d72565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610fbf3390565b600054610100900460ff166110925760405162461bcd60e51b81526004016104c89061201f565b6106b361155b565b600054610100900460ff166106b35760405162461bcd60e51b81526004016104c89061201f565b60006110ce60028761206a565b905060008167ffffffffffffffff8111156110eb576110eb611ca2565b604051908082528060200260200182016040528015611114578160200160208202803683370190505b50905060005b828163ffffffff16101561123f57888861113583600261208c565b63ffffffff1681811061114a5761114a6120b8565b905060200201358989836002611160919061208c565b61116b9060016120ce565b63ffffffff16818110611180576111806120b8565b905060200201356040516020016111a1929190918252602082015260400190565b60405160208183030381529060405280519060200120828263ffffffff16815181106111cf576111cf6120b8565b60200260200101818152505061122d89898363ffffffff168181106111f6576111f66120b8565b9050602002013587878463ffffffff16818110611215576112156120b8565b905060200281019061122791906120f6565b8661158b565b8061123781612116565b91505061111a565b63ffffffff811685111561127a5761126889898363ffffffff168181106111f6576111f66120b8565b8061127281612116565b91505061123f565b61128560028461206a565b92505b8215611378575060005b828163ffffffff16101561136657816112ac82600261208c565b63ffffffff16815181106112c2576112c26120b8565b6020026020010151828260026112d8919061208c565b6112e39060016120ce565b63ffffffff16815181106112f9576112f96120b8565b602002602001015160405160200161131b929190918252602082015260400190565b60405160208183030381529060405280519060200120828263ffffffff1681518110611349576113496120b8565b60209081029190910101528061135e81612116565b915050611292565b61137160028461206a565b9250611288565b60018814156113e5578689896000818110611395576113956120b8565b90506020020135146113e05786898960008181106113b5576113b56120b8565b905060200201356040516327c4ed9760e21b81526004016104c8929190918252602082015260400190565b611446565b86826000815181106113f9576113f96120b8565b60200260200101511461144657868260008151811061141a5761141a6120b8565b60200260200101516040516327c4ed9760e21b81526004016104c8929190918252602082015260400190565b505050505050505050565b6001600160a01b0381163b6114be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016104c8565b60008051602061222483398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6114f683611740565b6000825111806115035750805b15610df357610a3e8383611780565b60655460ff166106b35760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104c8565b600054610100900460ff166115825760405162461bcd60e51b81526004016104c89061201f565b6106b333610fdc565b80826040013510156115bd5760408051637acd6fa560e11b8152908301356004820152602481018290526044016104c8565b6040805160208181018690528401358183015290830135606082015246608082015260009060a00160408051601f1981840301815291905280516020909101209050600061164b61160e858061213a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086939250506118749050565b90506001600160a01b03811661167457604051638baa579f60e01b815260040160405180910390fd5b6001600160a01b038116600090815260fd6020908152604090912060028101549091860135146116ca5760028101546040516306427aeb60e01b81526004810191909152602086013560248201526044016104c8565b6002810180549060006116dc83612181565b9091555050805484111561171f578054604051632557019960e21b81526001600160a01b03841660048201526024810191909152604481018590526064016104c8565b838160000160008282546117339190611ef8565b9091555050505050505050565b61174981611451565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6117e85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016104c8565b600080846001600160a01b03168460405161180391906121c8565b600060405180830381855af49150503d806000811461183e576040519150601f19603f3d011682016040523d82523d6000602084013e611843565b606091505b509150915061186b828260405180606001604052806027815260200161224460279139611898565b95945050505050565b600080600061188385856118d8565b9150915061189081611948565b509392505050565b606083156118a75750816118d1565b8251156118b75782518084602001fd5b8160405162461bcd60e51b81526004016104c891906121da565b9392505050565b60008082516041141561190f5760208301516040840151606085015160001a61190387828585611b03565b94509450505050611941565b825160401415611939576020830151604084015161192e868383611bf0565b935093505050611941565b506000905060025b9250929050565b600081600481111561195c5761195c61220d565b14156119655750565b60018160048111156119795761197961220d565b14156119c75760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104c8565b60028160048111156119db576119db61220d565b1415611a295760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104c8565b6003816004811115611a3d57611a3d61220d565b1415611a965760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104c8565b6004816004811115611aaa57611aaa61220d565b14156106a05760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016104c8565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611b3a5750600090506003611be7565b8460ff16601b14158015611b5257508460ff16601c14155b15611b635750600090506004611be7565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611bb7573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611be057600060019250925050611be7565b9150600090505b94509492505050565b6000806001600160ff1b03831681611c0d60ff86901c601b611c3f565b9050611c1b87828885611b03565b935093505050935093915050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611c5257611c52611c29565b500190565b6001600160a01b03811681146106a057600080fd5b600060208284031215611c7e57600080fd5b81356118d181611c57565b600060208284031215611c9b57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215611ccb57600080fd5b8235611cd681611c57565b9150602083013567ffffffffffffffff80821115611cf357600080fd5b818501915085601f830112611d0757600080fd5b813581811115611d1957611d19611ca2565b604051601f8201601f19908116603f01168101908382118183101715611d4157611d41611ca2565b81604052828152886020848701011115611d5a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600080600060608486031215611d9157600080fd5b8335611d9c81611c57565b92506020840135611dac81611c57565b91506040840135611dbc81611c57565b809150509250925092565b60008083601f840112611dd957600080fd5b50813567ffffffffffffffff811115611df157600080fd5b6020830191508360208260051b850101111561194157600080fd5b60008060008060008060008060008060e08b8d031215611e2b57600080fd5b8a35995060208b013567ffffffffffffffff80821115611e4a57600080fd5b818d0191508d601f830112611e5e57600080fd5b813581811115611e6d57600080fd5b8e6020828501011115611e7f57600080fd5b602083019b50809a505060408d0135915080821115611e9d57600080fd5b611ea98e838f01611dc7565b909950975060608d0135915080821115611ec257600080fd5b50611ecf8d828e01611dc7565b9b9e9a9d50989b979a9699969760808101359760a0820135975060c09091013595509350505050565b600082821015611f0a57611f0a611c29565b500390565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6000816000190483118215151615611fc157611fc1611c29565b500290565b848152606060208201528260608201528284608083013760006080848301015260006080601f19601f860116830101905082604083015295945050505050565b60006020828403121561201857600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008261208757634e487b7160e01b600052601260045260246000fd5b500490565b600063ffffffff808316818516818304811182151516156120af576120af611c29565b02949350505050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff8083168185168083038211156120ed576120ed611c29565b01949350505050565b60008235605e1983360301811261210c57600080fd5b9190910192915050565b600063ffffffff8083168181141561213057612130611c29565b6001019392505050565b6000808335601e1984360301811261215157600080fd5b83018035915067ffffffffffffffff82111561216c57600080fd5b60200191503681900382131561194157600080fd5b600060001982141561219557612195611c29565b5060010190565b60005b838110156121b757818101518382015260200161219f565b83811115610a3e5750506000910152565b6000825161210c81846020870161219c565b60208152600082518060208401526121f981604085016020870161219c565b601f01601f19169190910160400192915050565b634e487b7160e01b600052602160045260246000fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220959de0d6d14188f5ff3b8a9d10b8c92e67e70351a58316ad19e0cebfa929c0b064736f6c634300080c0033","sourceMap":"576:9930:181:-:0;;;1332:4:47;1289:48;;2816:53:181;;;;;;;;;-1:-1:-1;2840:22:181;:20;:22::i;:::-;576:9930;;5388:279:46;5456:13;;;;;;;5455:14;5447:66;;;;-1:-1:-1;;;5447:66:46;;216:2:185;5447:66:46;;;198:21:185;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:185;;;338:37;392:19;;5447:66:46;;;;;;;;5527:12;;5542:15;5527:12;;;:30;5523:138;;;5573:12;:30;;-1:-1:-1;;5573:30:46;5588:15;5573:30;;;;;;5622:28;;564:36:185;;;5622:28:46;;552:2:185;537:18;5622:28:46;;;;;;;5523:138;5388:279::o;422:184:185:-;576:9930:181;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361061012e5760003560e01c80635c975abb116100ab578063a69df4b51161006f578063a69df4b5146103a5578063c0c53b8b146103ba578063c8910913146103da578063df5ffbc614610431578063f2fde38b14610451578063f83d08ba1461047157600080fd5b80635c975abb1461031a578063715018a61461033d5780638456cb59146103525780638da5cb5b14610367578063953ef8071461038557600080fd5b80634d5431ea116100f25780634d5431ea1461026c5780634f1ef286146102a557806352d1902d146102b857806358b96e27146102cd5780635a3f631a1461030557600080fd5b806317d89c4e146101935780632df4e21e146101df5780632e1a7d4d146102155780633659cfe6146102375780633f4ba83a1461025757600080fd5b3661018e5733600090815260fd602052604081208054349290610152908490611c3f565b909155505060405134815233907f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be7709060200160405180910390a2005b600080fd5b34801561019f57600080fd5b506101cc6101ae366004611c6c565b6001600160a01b0316600090815260fd602052604090206002015490565b6040519081526020015b60405180910390f35b3480156101eb57600080fd5b506101cc6101fa366004611c6c565b6001600160a01b0316600090815260fd602052604090205490565b34801561022157600080fd5b50610235610230366004611c89565b610486565b005b34801561024357600080fd5b50610235610252366004611c6c565b6105c3565b34801561026357600080fd5b506102356106a3565b34801561027857600080fd5b506101cc610287366004611c6c565b6001600160a01b0316600090815260fd602052604090206001015490565b6102356102b3366004611cb8565b6106b5565b3480156102c457600080fd5b506101cc610786565b3480156102d957600080fd5b5060fc546102ed906001600160a01b031681565b6040516001600160a01b0390911681526020016101d6565b34801561031157600080fd5b506101cc606481565b34801561032657600080fd5b5060655460ff1660405190151581526020016101d6565b34801561034957600080fd5b50610235610839565b34801561035e57600080fd5b5061023561084b565b34801561037357600080fd5b506033546001600160a01b03166102ed565b34801561039157600080fd5b5060fb546102ed906001600160a01b031681565b3480156103b157600080fd5b5061023561085b565b3480156103c657600080fd5b506102356103d5366004611d7c565b6108ef565b3480156103e657600080fd5b506104166103f5366004611c6c565b60fd6020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016101d6565b34801561043d57600080fd5b5061023561044c366004611e0c565b610a44565b34801561045d57600080fd5b5061023561046c366004611c6c565b610c88565b34801561047d57600080fd5b50610235610cfe565b61048e610d72565b33600090815260fd6020526040902080548211156104d15780546040516321c3d50f60e01b81526004810191909152602481018390526044015b60405180910390fd5b600181015415806104e55750438160010154115b15610512576001810154604051635f6e272d60e11b815260048101919091524360248201526044016104c8565b818160000160008282546105269190611ef8565b909155505060006001820181905560405133917fc5f84593e7086c66a205abab7ee44e1a8e6db58e50bf18ca46cb8239118b5ecd91a2604051339083156108fc029084906000818181858888f19350505050158015610589573d6000803e3d6000fd5b5060405182815233907feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d9060200160405180910390a25050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561060c5760405162461bcd60e51b81526004016104c890611f0f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610655600080516020612224833981519152546001600160a01b031690565b6001600160a01b03161461067b5760405162461bcd60e51b81526004016104c890611f5b565b61068481610db8565b604080516000808252602082019092526106a091839190610dc0565b50565b6106ab610f30565b6106b3610f8a565b565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156106fe5760405162461bcd60e51b81526004016104c890611f0f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610747600080516020612224833981519152546001600160a01b031690565b6001600160a01b03161461076d5760405162461bcd60e51b81526004016104c890611f5b565b61077682610db8565b61078282826001610dc0565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108265760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016104c8565b5060008051602061222483398151915290565b610841610f30565b6106b36000610fdc565b610853610f30565b6106b361102e565b610863610d72565b33600090815260fd60205260409020546108925760405163b38340cf60e01b81523360048201526024016104c8565b61089d606443611c3f565b33600081815260fd6020526040908190206001018390555190917f43e8fb9d4f009c90c55a3fa108b177b794704d61af7af6f6512db7883f8ed843916108e591815260200190565b60405180910390a2565b600054610100900460ff161580801561090f5750600054600160ff909116105b806109295750303b158015610929575060005460ff166001145b61098c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104c8565b6000805460ff1916600117905580156109af576000805461ff0019166101001790555b6109b761106b565b6109bf61109a565b6109c883610fdc565b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc8054928516929091169190911790558015610a3e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60fc546001600160a01b03163314610a71576040516302a5785160e31b81523360048201526024016104c8565b610a79610d72565b858481610a995760405163e5180e0360e01b815260040160405180910390fd5b80610ab757604051630c9d0b0160e21b815260040160405180910390fd5b80821015610ae25760405163320f0a1b60e01b815260048101839052602481018290526044016104c8565b610aed600183611ef8565b821615610b1057604051636b1651e160e01b8152600481018390526024016104c8565b83610b2e576040516351d432c560e11b815260040160405180910390fd5b84610b398286611fa7565b11610b6b5784610b498286611fa7565b604051637899ec7160e01b8152600481019290925260248201526044016104c8565b610b7989898e8a8a896110c1565b60fb60009054906101000a90046001600160a01b03166001600160a01b031663d66eaabd868e8e8e886040518663ffffffff1660e01b8152600401610bc19493929190611fc6565b6000604051808303818588803b158015610bda57600080fd5b505af1158015610bee573d6000803e3d6000fd5b50505050508b7f4f9439a5aed9cb470d2e0756e7d293accfe5223e719a9a1a256646378ec4375885604051610c2591815260200190565b60405180910390a260fc546001600160a01b03166108fc86610c478488611fa7565b610c519190611ef8565b6040518115909202916000818181858888f19350505050158015610c79573d6000803e3d6000fd5b50505050505050505050505050565b610c90610f30565b6001600160a01b038116610cf55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104c8565b6106a081610fdc565b610d06610d72565b33600090815260fd6020526040902054610d355760405163366095e160e11b81523360048201526024016104c8565b33600081815260fd6020526040808220600101829055517fc5f84593e7086c66a205abab7ee44e1a8e6db58e50bf18ca46cb8239118b5ecd9190a2565b60655460ff16156106b35760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104c8565b6106a0610f30565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610df857610df383611451565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610e52575060408051601f3d908101601f19168201909252610e4f91810190612006565b60015b610eb55760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016104c8565b6000805160206122248339815191528114610f245760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016104c8565b50610df38383836114ed565b6033546001600160a01b031633146106b35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104c8565b610f92611512565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611036610d72565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610fbf3390565b600054610100900460ff166110925760405162461bcd60e51b81526004016104c89061201f565b6106b361155b565b600054610100900460ff166106b35760405162461bcd60e51b81526004016104c89061201f565b60006110ce60028761206a565b905060008167ffffffffffffffff8111156110eb576110eb611ca2565b604051908082528060200260200182016040528015611114578160200160208202803683370190505b50905060005b828163ffffffff16101561123f57888861113583600261208c565b63ffffffff1681811061114a5761114a6120b8565b905060200201358989836002611160919061208c565b61116b9060016120ce565b63ffffffff16818110611180576111806120b8565b905060200201356040516020016111a1929190918252602082015260400190565b60405160208183030381529060405280519060200120828263ffffffff16815181106111cf576111cf6120b8565b60200260200101818152505061122d89898363ffffffff168181106111f6576111f66120b8565b9050602002013587878463ffffffff16818110611215576112156120b8565b905060200281019061122791906120f6565b8661158b565b8061123781612116565b91505061111a565b63ffffffff811685111561127a5761126889898363ffffffff168181106111f6576111f66120b8565b8061127281612116565b91505061123f565b61128560028461206a565b92505b8215611378575060005b828163ffffffff16101561136657816112ac82600261208c565b63ffffffff16815181106112c2576112c26120b8565b6020026020010151828260026112d8919061208c565b6112e39060016120ce565b63ffffffff16815181106112f9576112f96120b8565b602002602001015160405160200161131b929190918252602082015260400190565b60405160208183030381529060405280519060200120828263ffffffff1681518110611349576113496120b8565b60209081029190910101528061135e81612116565b915050611292565b61137160028461206a565b9250611288565b60018814156113e5578689896000818110611395576113956120b8565b90506020020135146113e05786898960008181106113b5576113b56120b8565b905060200201356040516327c4ed9760e21b81526004016104c8929190918252602082015260400190565b611446565b86826000815181106113f9576113f96120b8565b60200260200101511461144657868260008151811061141a5761141a6120b8565b60200260200101516040516327c4ed9760e21b81526004016104c8929190918252602082015260400190565b505050505050505050565b6001600160a01b0381163b6114be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016104c8565b60008051602061222483398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6114f683611740565b6000825111806115035750805b15610df357610a3e8383611780565b60655460ff166106b35760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104c8565b600054610100900460ff166115825760405162461bcd60e51b81526004016104c89061201f565b6106b333610fdc565b80826040013510156115bd5760408051637acd6fa560e11b8152908301356004820152602481018290526044016104c8565b6040805160208181018690528401358183015290830135606082015246608082015260009060a00160408051601f1981840301815291905280516020909101209050600061164b61160e858061213a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086939250506118749050565b90506001600160a01b03811661167457604051638baa579f60e01b815260040160405180910390fd5b6001600160a01b038116600090815260fd6020908152604090912060028101549091860135146116ca5760028101546040516306427aeb60e01b81526004810191909152602086013560248201526044016104c8565b6002810180549060006116dc83612181565b9091555050805484111561171f578054604051632557019960e21b81526001600160a01b03841660048201526024810191909152604481018590526064016104c8565b838160000160008282546117339190611ef8565b9091555050505050505050565b61174981611451565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6117e85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016104c8565b600080846001600160a01b03168460405161180391906121c8565b600060405180830381855af49150503d806000811461183e576040519150601f19603f3d011682016040523d82523d6000602084013e611843565b606091505b509150915061186b828260405180606001604052806027815260200161224460279139611898565b95945050505050565b600080600061188385856118d8565b9150915061189081611948565b509392505050565b606083156118a75750816118d1565b8251156118b75782518084602001fd5b8160405162461bcd60e51b81526004016104c891906121da565b9392505050565b60008082516041141561190f5760208301516040840151606085015160001a61190387828585611b03565b94509450505050611941565b825160401415611939576020830151604084015161192e868383611bf0565b935093505050611941565b506000905060025b9250929050565b600081600481111561195c5761195c61220d565b14156119655750565b60018160048111156119795761197961220d565b14156119c75760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104c8565b60028160048111156119db576119db61220d565b1415611a295760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104c8565b6003816004811115611a3d57611a3d61220d565b1415611a965760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104c8565b6004816004811115611aaa57611aaa61220d565b14156106a05760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016104c8565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611b3a5750600090506003611be7565b8460ff16601b14158015611b5257508460ff16601c14155b15611b635750600090506004611be7565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611bb7573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611be057600060019250925050611be7565b9150600090505b94509492505050565b6000806001600160ff1b03831681611c0d60ff86901c601b611c3f565b9050611c1b87828885611b03565b935093505050935093915050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611c5257611c52611c29565b500190565b6001600160a01b03811681146106a057600080fd5b600060208284031215611c7e57600080fd5b81356118d181611c57565b600060208284031215611c9b57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215611ccb57600080fd5b8235611cd681611c57565b9150602083013567ffffffffffffffff80821115611cf357600080fd5b818501915085601f830112611d0757600080fd5b813581811115611d1957611d19611ca2565b604051601f8201601f19908116603f01168101908382118183101715611d4157611d41611ca2565b81604052828152886020848701011115611d5a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600080600060608486031215611d9157600080fd5b8335611d9c81611c57565b92506020840135611dac81611c57565b91506040840135611dbc81611c57565b809150509250925092565b60008083601f840112611dd957600080fd5b50813567ffffffffffffffff811115611df157600080fd5b6020830191508360208260051b850101111561194157600080fd5b60008060008060008060008060008060e08b8d031215611e2b57600080fd5b8a35995060208b013567ffffffffffffffff80821115611e4a57600080fd5b818d0191508d601f830112611e5e57600080fd5b813581811115611e6d57600080fd5b8e6020828501011115611e7f57600080fd5b602083019b50809a505060408d0135915080821115611e9d57600080fd5b611ea98e838f01611dc7565b909950975060608d0135915080821115611ec257600080fd5b50611ecf8d828e01611dc7565b9b9e9a9d50989b979a9699969760808101359760a0820135975060c09091013595509350505050565b600082821015611f0a57611f0a611c29565b500390565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6000816000190483118215151615611fc157611fc1611c29565b500290565b848152606060208201528260608201528284608083013760006080848301015260006080601f19601f860116830101905082604083015295945050505050565b60006020828403121561201857600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008261208757634e487b7160e01b600052601260045260246000fd5b500490565b600063ffffffff808316818516818304811182151516156120af576120af611c29565b02949350505050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff8083168185168083038211156120ed576120ed611c29565b01949350505050565b60008235605e1983360301811261210c57600080fd5b9190910192915050565b600063ffffffff8083168181141561213057612130611c29565b6001019392505050565b6000808335601e1984360301811261215157600080fd5b83018035915067ffffffffffffffff82111561216c57600080fd5b60200191503681900382131561194157600080fd5b600060001982141561219557612195611c29565b5060010190565b60005b838110156121b757818101518382015260200161219f565b83811115610a3e5750506000910152565b6000825161210c81846020870161219c565b60208152600082518060208401526121f981604085016020870161219c565b601f01601f19169190910160400192915050565b634e487b7160e01b600052602160045260246000fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220959de0d6d14188f5ff3b8a9d10b8c92e67e70351a58316ad19e0cebfa929c0b064736f6c634300080c0033","sourceMap":"576:9930:181:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3563:10;3554:20;;;;:8;:20;;;;;:41;;3586:9;;3554:20;:41;;3586:9;;3554:41;:::i;:::-;;;;-1:-1:-1;;3610:38:181;;3638:9;425:25:185;;3626:10:181;;3610:38;;413:2:185;398:18;3610:38:181;;;;;;;576:9930;;;;;10256:115;;;;;;;;;;-1:-1:-1;10256:115:181;;;;;:::i;:::-;-1:-1:-1;;;;;10341:17:181;10315:7;10341:17;;;:8;:17;;;;;:23;;;;10256:115;;;;425:25:185;;;413:2;398:18;10256:115:181;;;;;;;;10131:119;;;;;;;;;;-1:-1:-1;10131:119:181;;;;;:::i;:::-;-1:-1:-1;;;;;10218:17:181;10192:7;10218:17;;;:8;:17;;;;;:25;;10131:119;6071:647;;;;;;;;;;-1:-1:-1;6071:647:181;;;;;:::i;:::-;;:::i;:::-;;3315:197:47;;;;;;;;;;-1:-1:-1;3315:197:47;;;;;:::i;:::-;;:::i;6789:63:181:-;;;;;;;;;;;;;:::i;10377:127::-;;;;;;;;;;-1:-1:-1;10377:127:181;;;;;:::i;:::-;-1:-1:-1;;;;;10468:17:181;10442:7;10468:17;;;:8;:17;;;;;:29;;;;10377:127;3761:222:47;;;;;;:::i;:::-;;:::i;3004:131::-;;;;;;;;;;;;;:::i;2551:28:181:-;;;;;;;;;;-1:-1:-1;2551:28:181;;;;-1:-1:-1;;;;;2551:28:181;;;;;;-1:-1:-1;;;;;2573:32:185;;;2555:51;;2543:2;2528:18;2551:28:181;2409:203:185;751:48:181;;;;;;;;;;;;796:3;751:48;;1858:84:48;;;;;;;;;;-1:-1:-1;1928:7:48;;;;1858:84;;2782:14:185;;2775:22;2757:41;;2745:2;2730:18;1858:84:48;2617:187:185;2071:101:42;;;;;;;;;;;;;:::i;6724:59:181:-;;;;;;;;;;;;;:::i;1441:85:42:-;;;;;;;;;;-1:-1:-1;1513:6:42;;-1:-1:-1;;;;;1513:6:42;1441:85;;2483:61:181;;;;;;;;;;-1:-1:-1;2483:61:181;;;;-1:-1:-1;;;;;2483:61:181;;;5498:317;;;;;;;;;;;;;:::i;3043:443::-;;;;;;;;;;-1:-1:-1;3043:443:181;;;;;:::i;:::-;;:::i;2610:44::-;;;;;;;;;;-1:-1:-1;2610:44:181;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3827:25:185;;;3883:2;3868:18;;3861:34;;;;3911:18;;;3904:34;3815:2;3800:18;2610:44:181;3625:319:185;3685:1807:181;;;;;;;;;;-1:-1:-1;3685:1807:181;;;;;:::i;:::-;;:::i;2321:198:42:-;;;;;;;;;;-1:-1:-1;2321:198:42;;;;;:::i;:::-;;:::i;5821:244:181:-;;;;;;;;;;;;;:::i;6071:647::-;1482:19:48;:17;:19::i;:::-;6177:10:181::1;6138:27;6168:20:::0;;;:8:::1;:20;::::0;;;;6202:18;;:27;-1:-1:-1;6198:117:181::1;;;6277:18:::0;;6252:52:::1;::::0;-1:-1:-1;;;6252:52:181;;::::1;::::0;::::1;6032:25:185::0;;;;6073:18;;;6066:34;;;6005:18;;6252:52:181::1;;;;;;;;6198:117;6342:22;::::0;::::1;::::0;:27;;:68:::1;;;6398:12;6373:10;:22;;;:37;6342:68;6325:177;;;6454:22;::::0;::::1;::::0;6442:49:::1;::::0;-1:-1:-1;;;6442:49:181;;::::1;::::0;::::1;6032:25:185::0;;;;6478:12:181::1;6073:18:185::0;;;6066:34;6005:18;;6442:49:181::1;5858:248:185::0;6325:177:181::1;6534:6;6512:10;:18;;;:28;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;6575:1:181::1;6550:22;::::0;::::1;:26:::0;;;6591:25:::1;::::0;6605:10:::1;::::0;6591:25:::1;::::0;::::1;6626:36;::::0;6634:10:::1;::::0;6626:36;::::1;;;::::0;6655:6;;6626:36:::1;::::0;;;6655:6;6634:10;6626:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;6677:34:181::1;::::0;425:25:185;;;6692:10:181::1;::::0;6677:34:::1;::::0;413:2:185;398:18;6677:34:181::1;;;;;;;6128:590;6071:647:::0;:::o;3315:197:47:-;1889:4;-1:-1:-1;;;;;1898:6:47;1881:23;;;1873:80;;;;-1:-1:-1;;;1873:80:47;;;;;;;:::i;:::-;1995:6;-1:-1:-1;;;;;1971:30:47;:20;-1:-1:-1;;;;;;;;;;;1642:65:44;-1:-1:-1;;;;;1642:65:44;;1563:151;1971:20:47;-1:-1:-1;;;;;1971:30:47;;1963:87;;;;-1:-1:-1;;;1963:87:47;;;;;;;:::i;:::-;3398:36:::1;3416:17;3398;:36::i;:::-;3485:12;::::0;;3495:1:::1;3485:12:::0;;;::::1;::::0;::::1;::::0;;;3444:61:::1;::::0;3466:17;;3485:12;3444:21:::1;:61::i;:::-;3315:197:::0;:::o;6789:63:181:-;1334:13:42;:11;:13::i;:::-;6835:10:181::1;:8;:10::i;:::-;6789:63::o:0;3761:222:47:-;1889:4;-1:-1:-1;;;;;1898:6:47;1881:23;;;1873:80;;;;-1:-1:-1;;;1873:80:47;;;;;;;:::i;:::-;1995:6;-1:-1:-1;;;;;1971:30:47;:20;-1:-1:-1;;;;;;;;;;;1642:65:44;-1:-1:-1;;;;;1642:65:44;;1563:151;1971:20:47;-1:-1:-1;;;;;1971:30:47;;1963:87;;;;-1:-1:-1;;;1963:87:47;;;;;;;:::i;:::-;3878:36:::1;3896:17;3878;:36::i;:::-;3924:52;3946:17;3965:4;3971;3924:21;:52::i;:::-;3761:222:::0;;:::o;3004:131::-;3082:7;2324:4;-1:-1:-1;;;;;2333:6:47;2316:23;;2308:92;;;;-1:-1:-1;;;2308:92:47;;7269:2:185;2308:92:47;;;7251:21:185;7308:2;7288:18;;;7281:30;7347:34;7327:18;;;7320:62;7418:26;7398:18;;;7391:54;7462:19;;2308:92:47;7067:420:185;2308:92:47;-1:-1:-1;;;;;;;;;;;;3004:131:47;:::o;2071:101:42:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;6724:59:181:-:0;1334:13:42;:11;:13::i;:::-;6768:8:181::1;:6;:8::i;5498:317::-:0;1482:19:48;:17;:19::i;:::-;5562:10:181::1;5553:20;::::0;;;:8:::1;:20;::::0;;;;:28;5549:105:::1;;5609:34;::::0;-1:-1:-1;;;5609:34:181;;5632:10:::1;5609:34;::::0;::::1;2555:51:185::0;2528:18;;5609:34:181::1;2409:203:185::0;5549:105:181::1;5699:33;796:3;5699:12;:33;:::i;:::-;5673:10;5664:20;::::0;;;:8:::1;:20;::::0;;;;;;:32:::1;;:68:::0;;;5747:61;5673:10;;5747:61:::1;::::0;::::1;::::0;425:25:185;;413:2;398:18;;279:177;5747:61:181::1;;;;;;;;5498:317::o:0;3043:443::-;3111:19:46;3134:13;;;;;;3133:14;;3179:34;;;;-1:-1:-1;3197:12:46;;3212:1;3197:12;;;;:16;3179:34;3178:108;;;-1:-1:-1;3258:4:46;1476:19:50;:23;;;3219:66:46;;-1:-1:-1;3268:12:46;;;;;:17;3219:66;3157:201;;;;-1:-1:-1;;;3157:201:46;;7694:2:185;3157:201:46;;;7676:21:185;7733:2;7713:18;;;7706:30;7772:34;7752:18;;;7745:62;-1:-1:-1;;;7823:18:185;;;7816:44;7877:19;;3157:201:46;7492:410:185;3157:201:46;3368:12;:16;;-1:-1:-1;;3368:16:46;3383:1;3368:16;;;3394:65;;;;3428:13;:20;;-1:-1:-1;;3428:20:46;;;;;3394:65;3240:16:181::1;:14;:16::i;:::-;3291:24;:22;:24::i;:::-;3325:47;3344:27;3325:18;:47::i;:::-;3383:26;:56:::0;;-1:-1:-1;;;;;3383:56:181;;::::1;-1:-1:-1::0;;;;;;3383:56:181;;::::1;;::::0;;;3449:13:::1;:30:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;3479:99:46;;;;3529:5;3513:21;;-1:-1:-1;;3513:21:46;;;3553:14;;-1:-1:-1;8059:36:185;;3553:14:46;;8047:2:185;8032:18;3553:14:46;;;;;;;3479:99;3101:483;3043:443:181;;;:::o;3685:1807::-;2943:13;;-1:-1:-1;;;;;2943:13:181;2929:10;:27;2925:95;;2979:30;;-1:-1:-1;;;2979:30:181;;2998:10;2979:30;;;2555:51:185;2528:18;;2979:30:181;2409:203:185;2925:95:181;1482:19:48::1;:17;:19::i;:::-;4126:6:181::0;4173:10;4205:14;4201:71:::2;;4242:19;;-1:-1:-1::0;;;4242:19:181::2;;;;;;;;;;;4201:71;4286:18:::0;4282:84:::2;;4327:28;;-1:-1:-1::0;;;4327:28:181::2;;;;;;;;;;;4282:84;4392:13;4380:9;:25;4376:104;;;4428:41;::::0;-1:-1:-1;;;4428:41:181;;::::2;::::0;::::2;6032:25:185::0;;;6073:18;;;6066:34;;;6005:18;;4428:41:181::2;5858:248:185::0;4376:104:181::2;4508:13;4520:1;4508:9:::0;:13:::2;:::i;:::-;4495:27:::0;::::2;4494:34:::0;4490:102:::2;;4551:30;::::0;-1:-1:-1;;;4551:30:181;;::::2;::::0;::::2;425:25:185::0;;;398:18;;4551:30:181::2;279:177:185::0;4490:102:181::2;4606:16:::0;4602:69:::2;;4645:15;;-1:-1:-1::0;;;4645:15:181::2;;;;;;;;;;;4602:69;4716:16:::0;4685:27:::2;4699:13:::0;4685:11;:27:::2;:::i;:::-;:47;4681:206;;4801:16:::0;4835:27:::2;4849:13:::0;4835:11;:27:::2;:::i;:::-;4755:121;::::0;-1:-1:-1;;;4755:121:181;;::::2;::::0;::::2;6032:25:185::0;;;;6073:18;;;6066:34;6005:18;;4755:121:181::2;5858:248:185::0;4681:206:181::2;4897:143;4946:6;;4966:15;4995:10;;5019:11;4897:35;:143::i;:::-;5144:26;;;;;;;;;-1:-1:-1::0;;;;;5144:26:181::2;-1:-1:-1::0;;;;;5144:40:181::2;;5192:16;5223:15;5252:16;;5282:22;5144:170;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;5342:15;5330:41;5359:11;5330:41;;;;425:25:185::0;;413:2;398:18;;279:177;5330:41:181::2;;;;;;;;5390:13;::::0;-1:-1:-1;;;;;5390:13:181::2;5382:103;5459:16:::0;5428:27:::2;5442:13:::0;5428:11;:27:::2;:::i;:::-;5427:48;;;;:::i;:::-;5382:103;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;;;;;;::::2;;;;;;;;;;;;;::::0;::::2;;;;;;4096:1396;;3685:1807:::0;;;;;;;;;;:::o;2321:198:42:-;1334:13;:11;:13::i;:::-;-1:-1:-1;;;;;2409:22:42;::::1;2401:73;;;::::0;-1:-1:-1;;;2401:73:42;;9021:2:185;2401:73:42::1;::::0;::::1;9003:21:185::0;9060:2;9040:18;;;9033:30;9099:34;9079:18;;;9072:62;-1:-1:-1;;;9150:18:185;;;9143:36;9196:19;;2401:73:42::1;8819:402:185::0;2401:73:42::1;2484:28;2503:8;2484:18;:28::i;5821:244:181:-:0;1482:19:48;:17;:19::i;:::-;5883:10:181::1;5874:20;::::0;;;:8:::1;:20;::::0;;;;:28;5870:103:::1;;5930:32;::::0;-1:-1:-1;;;5930:32:181;;5951:10:::1;5930:32;::::0;::::1;2555:51:185::0;2528:18;;5930:32:181::1;2409:203:185::0;5870:103:181::1;5991:10;6017:1;5982:20:::0;;;:8:::1;:20;::::0;;;;;:32:::1;;:36:::0;;;6033:25;::::1;::::0;6017:1;6033:25:::1;5821:244::o:0;2010:106:48:-;1928:7;;;;2079:9;2071:38;;;;-1:-1:-1;;;2071:38:48;;9428:2:185;2071:38:48;;;9410:21:185;9467:2;9447:18;;;9440:30;-1:-1:-1;;;9486:18:185;;;9479:46;9542:18;;2071:38:48;9226:340:185;6858:171:181;1334:13:42;:11;:13::i;2938:974:44:-;951:66;3384:59;;;3380:526;;;3459:37;3478:17;3459:18;:37::i;:::-;2938:974;;;:::o;3380:526::-;3560:17;-1:-1:-1;;;;;3531:61:44;;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3531:63:44;;;;;;;;-1:-1:-1;;3531:63:44;;;;;;;;;;;;:::i;:::-;;;3527:302;;3758:56;;-1:-1:-1;;;3758:56:44;;9962:2:185;3758:56:44;;;9944:21:185;10001:2;9981:18;;;9974:30;10040:34;10020:18;;;10013:62;-1:-1:-1;;;10091:18:185;;;10084:44;10145:19;;3758:56:44;9760:410:185;3527:302:44;-1:-1:-1;;;;;;;;;;;3644:28:44;;3636:82;;;;-1:-1:-1;;;3636:82:44;;10377:2:185;3636:82:44;;;10359:21:185;10416:2;10396:18;;;10389:30;10455:34;10435:18;;;10428:62;-1:-1:-1;;;10506:18:185;;;10499:39;10555:19;;3636:82:44;10175:405:185;3636:82:44;3595:138;3842:53;3860:17;3879:4;3885:9;3842:17;:53::i;1599:130:42:-;1513:6;;-1:-1:-1;;;;;1513:6:42;929:10:51;1662:23:42;1654:68;;;;-1:-1:-1;;;1654:68:42;;10787:2:185;1654:68:42;;;10769:21:185;;;10806:18;;;10799:30;10865:34;10845:18;;;10838:62;10917:18;;1654:68:42;10585:356:185;2676:117:48;1729:16;:14;:16::i;:::-;2734:7:::1;:15:::0;;-1:-1:-1;;2734:15:48::1;::::0;;2764:22:::1;929:10:51::0;2773:12:48::1;2764:22;::::0;-1:-1:-1;;;;;2573:32:185;;;2555:51;;2543:2;2528:18;2764:22:48::1;;;;;;;2676:117::o:0;2673:187:42:-;2765:6;;;-1:-1:-1;;;;;2781:17:42;;;-1:-1:-1;;;;;;2781:17:42;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;2429:115:48:-;1482:19;:17;:19::i;:::-;2488:7:::1;:14:::0;;-1:-1:-1;;2488:14:48::1;2498:4;2488:14;::::0;;2517:20:::1;2524:12;929:10:51::0;;850:96;1003:95:42;4910:13:46;;;;;;;4902:69;;;;-1:-1:-1;;;4902:69:46;;;;;;;:::i;:::-;1065:26:42::1;:24;:26::i;1042:67:47:-:0;4910:13:46;;;;;;;4902:69;;;;-1:-1:-1;;;4902:69:46;;;;;;;:::i;7035:1938:181:-;7246:23;7272:17;7288:1;7272:6;:17;:::i;:::-;7246:43;;7299:22;7338:15;7324:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7324:30:181;;7299:55;;7365:8;7514:315;7530:15;7526:1;:19;;;7514:315;;;7621:6;;7628:5;7632:1;7628;:5;:::i;:::-;7621:13;;;;;;;;;:::i;:::-;;;;;;;7636:6;;7647:1;7643;:5;;;;:::i;:::-;:9;;7651:1;7643:9;:::i;:::-;7636:17;;;;;;;;;:::i;:::-;;;;;;;7604:50;;;;;;;;12369:19:185;;;12413:2;12404:12;;12397:28;12450:2;12441:12;;12212:247;7604:50:181;;;;;;;;;;;;;7577:91;;;;;;7566:5;7572:1;7566:8;;;;;;;;;;:::i;:::-;;;;;;:102;;;;;7683:135;7735:6;;7742:1;7735:9;;;;;;;;;:::i;:::-;;;;;;;7762:10;;7773:1;7762:13;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;7793:11;7683:34;:135::i;:::-;7547:3;;;;:::i;:::-;;;;7514:315;;;7891:21;;;;-1:-1:-1;7884:195:181;;;7933:135;7985:6;;7992:1;7985:9;;;;;;;;;:::i;7933:135::-;7914:3;;;;:::i;:::-;;;;7884:195;;;8144:20;8163:1;8144:20;;:::i;:::-;;;8240:435;8247:20;;8240:435;;-1:-1:-1;8401:1:181;8392:179;8408:15;8404:1;:19;;;8392:179;;;8507:5;8513;8517:1;8513;:5;:::i;:::-;8507:12;;;;;;;;;;:::i;:::-;;;;;;;8521:5;8531:1;8527;:5;;;;:::i;:::-;:9;;8535:1;8527:9;:::i;:::-;8521:16;;;;;;;;;;:::i;:::-;;;;;;;8490:48;;;;;;;;12369:19:185;;;12413:2;12404:12;;12397:28;12450:2;12441:12;;12212:247;8490:48:181;;;;;;;;;;;;;8459:97;;;;;;8448:5;8454:1;8448:8;;;;;;;;;;:::i;:::-;;;;;;;;;;:108;8425:3;;;;:::i;:::-;;;;8392:179;;;8644:20;8663:1;8644:20;;:::i;:::-;;;8240:435;;;8706:1;8689:18;;8685:282;;;8740:15;8727:6;;8734:1;8727:9;;;;;;;:::i;:::-;;;;;;;:28;8723:119;;8800:15;8817:6;;8824:1;8817:9;;;;;;;:::i;:::-;;;;;;;8782:45;;-1:-1:-1;;;8782:45:181;;;;;;;;6032:25:185;;;6088:2;6073:18;;6066:34;6020:2;6005:18;;5858:248;8723:119:181;8685:282;;;8874:15;8862:5;8868:1;8862:8;;;;;;;;:::i;:::-;;;;;;;:27;8858:109;;8930:15;8947:5;8953:1;8947:8;;;;;;;;:::i;:::-;;;;;;;8912:44;;-1:-1:-1;;;8912:44:181;;;;;;;;6032:25:185;;;6088:2;6073:18;;6066:34;6020:2;6005:18;;5858:248;8858:109:181;7236:1737;;;7035:1938;;;;;;:::o;1805:281:44:-;-1:-1:-1;;;;;1476:19:50;;;1878:106:44;;;;-1:-1:-1;;;1878:106:44;;13461:2:185;1878:106:44;;;13443:21:185;13500:2;13480:18;;;13473:30;13539:34;13519:18;;;13512:62;-1:-1:-1;;;13590:18:185;;;13583:43;13643:19;;1878:106:44;13259:409:185;1878:106:44;-1:-1:-1;;;;;;;;;;;1994:85:44;;-1:-1:-1;;;;;;1994:85:44;-1:-1:-1;;;;;1994:85:44;;;;;;;;;;1805:281::o;2478:288::-;2616:29;2627:17;2616:10;:29::i;:::-;2673:1;2659:4;:11;:15;:28;;;;2678:9;2659:28;2655:105;;;2703:46;2725:17;2744:4;2703:21;:46::i;2188:106:48:-;1928:7;;;;2246:41;;;;-1:-1:-1;;;2246:41:48;;13875:2:185;2246:41:48;;;13857:21:185;13914:2;13894:18;;;13887:30;-1:-1:-1;;;13933:18:185;;;13926:50;13993:18;;2246:41:48;13673:344:185;1104:111:42;4910:13:46;;;;;;;4902:69;;;;-1:-1:-1;;;4902:69:46;;;;;;;:::i;:::-;1176:32:42::1;929:10:51::0;1176:18:42::1;:32::i;8979:1146:181:-:0;9171:11;9148:13;:20;;;:34;9144:120;;;9219:20;9205:48;;-1:-1:-1;;;9205:48:181;;9219:20;;;;9205:48;;;6032:25:185;6073:18;;;6066:34;;;6005:18;;9205:48:181;5858:248:185;9144:120:181;9411:20;9318:158;;9374:19;9318:158;;;14235:19:185;;;9374::181;;;14270:12:185;;;14263:28;9411:20:181;;;;14307:12:185;;;14300:28;9449:13:181;14344:12:185;;;14337:28;9274:18:181;;14381:13:185;;9318:158:181;;;-1:-1:-1;;9318:158:181;;;;;;;;;9295:191;;9318:158;9295:191;;;;;-1:-1:-1;9497:14:181;9514:43;9533:23;:13;;:23;:::i;:::-;9514:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9514:10:181;;:43;-1:-1:-1;;9514:18:181;:43;-1:-1:-1;9514:43:181:i;:::-;9497:60;-1:-1:-1;;;;;;9572:20:181;;9568:76;;9615:18;;-1:-1:-1;;;9615:18:181;;;;;;;;;;;9568:76;-1:-1:-1;;;;;9684:16:181;;9654:27;9684:16;;;:8;:16;;;;;;;;9715;;;;9684;;9735:19;;;9715:39;9711:128;;9790:16;;;;9777:51;;-1:-1:-1;;;9777:51:181;;;;;6032:25:185;;;;9808:19:181;;;;6073:18:185;;;6066:34;6005:18;;9777:51:181;5858:248:185;9711:128:181;9848:16;;;:18;;;:16;:18;;;:::i;:::-;;;;-1:-1:-1;;9881:18:181;;:32;-1:-1:-1;9877:198:181;;;10003:18;;9936:128;;-1:-1:-1;;;9936:128:181;;-1:-1:-1;;;;;15291:32:185;;9936:128:181;;;15273:51:185;15340:18;;;15333:34;;;;15383:18;;;15376:34;;;15246:18;;9936:128:181;15071:345:185;9877:198:181;10107:11;10085:10;:18;;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;;8979:1146:181:o;2192:152:44:-;2258:37;2277:17;2258:18;:37::i;:::-;2310:27;;-1:-1:-1;;;;;2310:27:44;;;;;;;;2192:152;:::o;7088:455::-;7171:12;-1:-1:-1;;;;;1476:19:50;;;7195:88:44;;;;-1:-1:-1;;;7195:88:44;;15623:2:185;7195:88:44;;;15605:21:185;15662:2;15642:18;;;15635:30;15701:34;15681:18;;;15674:62;-1:-1:-1;;;15752:18:185;;;15745:36;15798:19;;7195:88:44;15421:402:185;7195:88:44;7354:12;7368:23;7395:6;-1:-1:-1;;;;;7395:19:44;7415:4;7395:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7353:67;;;;7437:99;7473:7;7482:10;7437:99;;;;;;;;;;;;;;;;;:35;:99::i;:::-;7430:106;7088:455;-1:-1:-1;;;;;7088:455:44:o;4402:227:77:-;4480:7;4500:17;4519:18;4541:27;4552:4;4558:9;4541:10;:27::i;:::-;4499:69;;;;4578:18;4590:5;4578:11;:18::i;:::-;-1:-1:-1;4613:9:77;4402:227;-1:-1:-1;;;4402:227:77:o;6622:742:50:-;6768:12;6796:7;6792:566;;;-1:-1:-1;6826:10:50;6819:17;;6792:566;6937:17;;:21;6933:415;;7181:10;7175:17;7241:15;7228:10;7224:2;7220:19;7213:44;6933:415;7320:12;7313:20;;-1:-1:-1;;;7313:20:50;;;;;;;;:::i;6933:415::-;6622:742;;;;;:::o;2243:1373:77:-;2324:7;2333:12;2554:9;:16;2574:2;2554:22;2550:1060;;;2890:4;2875:20;;2869:27;2939:4;2924:20;;2918:27;2996:4;2981:20;;2975:27;2592:9;2967:36;3037:25;3048:4;2967:36;2869:27;2918;3037:10;:25::i;:::-;3030:32;;;;;;;;;2550:1060;3083:9;:16;3103:2;3083:22;3079:531;;;3399:4;3384:20;;3378:27;3449:4;3434:20;;3428:27;3489:23;3500:4;3378:27;3428;3489:10;:23::i;:::-;3482:30;;;;;;;;3079:531;-1:-1:-1;3559:1:77;;-1:-1:-1;3563:35:77;3079:531;2243:1373;;;;;:::o;548:631::-;625:20;616:5;:29;;;;;;;;:::i;:::-;;612:561;;;548:631;:::o;612:561::-;721:29;712:5;:38;;;;;;;;:::i;:::-;;708:465;;;766:34;;-1:-1:-1;;;766:34:77;;17092:2:185;766:34:77;;;17074:21:185;17131:2;17111:18;;;17104:30;17170:26;17150:18;;;17143:54;17214:18;;766:34:77;16890:348:185;708:465:77;830:35;821:5;:44;;;;;;;;:::i;:::-;;817:356;;;881:41;;-1:-1:-1;;;881:41:77;;17445:2:185;881:41:77;;;17427:21:185;17484:2;17464:18;;;17457:30;17523:33;17503:18;;;17496:61;17574:18;;881:41:77;17243:355:185;817:356:77;952:30;943:5;:39;;;;;;;;:::i;:::-;;939:234;;;998:44;;-1:-1:-1;;;998:44:77;;17805:2:185;998:44:77;;;17787:21:185;17844:2;17824:18;;;17817:30;17883:34;17863:18;;;17856:62;-1:-1:-1;;;17934:18:185;;;17927:32;17976:19;;998:44:77;17603:398:185;939:234:77;1072:30;1063:5;:39;;;;;;;;:::i;:::-;;1059:114;;;1118:44;;-1:-1:-1;;;1118:44:77;;18208:2:185;1118:44:77;;;18190:21:185;18247:2;18227:18;;;18220:30;18286:34;18266:18;;;18259:62;-1:-1:-1;;;18337:18:185;;;18330:32;18379:19;;1118:44:77;18006:398:185;5810:1603:77;5936:7;;6860:66;6847:79;;6843:161;;;-1:-1:-1;6958:1:77;;-1:-1:-1;6962:30:77;6942:51;;6843:161;7017:1;:7;;7022:2;7017:7;;:18;;;;;7028:1;:7;;7033:2;7028:7;;7017:18;7013:100;;;-1:-1:-1;7067:1:77;;-1:-1:-1;7071:30:77;7051:51;;7013:100;7224:24;;;7207:14;7224:24;;;;;;;;;18636:25:185;;;18709:4;18697:17;;18677:18;;;18670:45;;;;18731:18;;;18724:34;;;18774:18;;;18767:34;;;7224:24:77;;18608:19:185;;7224:24:77;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7224:24:77;;-1:-1:-1;;7224:24:77;;;-1:-1:-1;;;;;;;7262:20:77;;7258:101;;7314:1;7318:29;7298:50;;;;;;;7258:101;7377:6;-1:-1:-1;7385:20:77;;-1:-1:-1;5810:1603:77;;;;;;;;:::o;4883:336::-;4993:7;;-1:-1:-1;;;;;5038:80:77;;4993:7;5144:25;5160:3;5145:18;;;5167:2;5144:25;:::i;:::-;5128:42;;5187:25;5198:4;5204:1;5207;5210;5187:10;:25::i;:::-;5180:32;;;;;;4883:336;;;;;;:::o;14:127:185:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:128;186:3;217:1;213:6;210:1;207:13;204:39;;;223:18;;:::i;:::-;-1:-1:-1;259:9:185;;146:128::o;461:131::-;-1:-1:-1;;;;;536:31:185;;526:42;;516:70;;582:1;579;572:12;597:247;656:6;709:2;697:9;688:7;684:23;680:32;677:52;;;725:1;722;715:12;677:52;764:9;751:23;783:31;808:5;783:31;:::i;849:180::-;908:6;961:2;949:9;940:7;936:23;932:32;929:52;;;977:1;974;967:12;929:52;-1:-1:-1;1000:23:185;;849:180;-1:-1:-1;849:180:185:o;1034:127::-;1095:10;1090:3;1086:20;1083:1;1076:31;1126:4;1123:1;1116:15;1150:4;1147:1;1140:15;1166:1056;1243:6;1251;1304:2;1292:9;1283:7;1279:23;1275:32;1272:52;;;1320:1;1317;1310:12;1272:52;1359:9;1346:23;1378:31;1403:5;1378:31;:::i;:::-;1428:5;-1:-1:-1;1484:2:185;1469:18;;1456:32;1507:18;1537:14;;;1534:34;;;1564:1;1561;1554:12;1534:34;1602:6;1591:9;1587:22;1577:32;;1647:7;1640:4;1636:2;1632:13;1628:27;1618:55;;1669:1;1666;1659:12;1618:55;1705:2;1692:16;1727:2;1723;1720:10;1717:36;;;1733:18;;:::i;:::-;1808:2;1802:9;1776:2;1862:13;;-1:-1:-1;;1858:22:185;;;1882:2;1854:31;1850:40;1838:53;;;1906:18;;;1926:22;;;1903:46;1900:72;;;1952:18;;:::i;:::-;1992:10;1988:2;1981:22;2027:2;2019:6;2012:18;2067:7;2062:2;2057;2053;2049:11;2045:20;2042:33;2039:53;;;2088:1;2085;2078:12;2039:53;2144:2;2139;2135;2131:11;2126:2;2118:6;2114:15;2101:46;2189:1;2184:2;2179;2171:6;2167:15;2163:24;2156:35;2210:6;2200:16;;;;;;;1166:1056;;;;;:::o;3054:566::-;3168:6;3176;3184;3237:2;3225:9;3216:7;3212:23;3208:32;3205:52;;;3253:1;3250;3243:12;3205:52;3292:9;3279:23;3311:31;3336:5;3311:31;:::i;:::-;3361:5;-1:-1:-1;3418:2:185;3403:18;;3390:32;3431:33;3390:32;3431:33;:::i;:::-;3483:7;-1:-1:-1;3542:2:185;3527:18;;3514:32;3555:33;3514:32;3555:33;:::i;:::-;3607:7;3597:17;;;3054:566;;;;;:::o;3949:367::-;4012:8;4022:6;4076:3;4069:4;4061:6;4057:17;4053:27;4043:55;;4094:1;4091;4084:12;4043:55;-1:-1:-1;4117:20:185;;4160:18;4149:30;;4146:50;;;4192:1;4189;4182:12;4146:50;4229:4;4221:6;4217:17;4205:29;;4289:3;4282:4;4272:6;4269:1;4265:14;4257:6;4253:27;4249:38;4246:47;4243:67;;;4306:1;4303;4296:12;4321:1532;4534:6;4542;4550;4558;4566;4574;4582;4590;4598;4606;4659:3;4647:9;4638:7;4634:23;4630:33;4627:53;;;4676:1;4673;4666:12;4627:53;4712:9;4699:23;4689:33;;4773:2;4762:9;4758:18;4745:32;4796:18;4837:2;4829:6;4826:14;4823:34;;;4853:1;4850;4843:12;4823:34;4891:6;4880:9;4876:22;4866:32;;4936:7;4929:4;4925:2;4921:13;4917:27;4907:55;;4958:1;4955;4948:12;4907:55;4998:2;4985:16;5024:2;5016:6;5013:14;5010:34;;;5040:1;5037;5030:12;5010:34;5085:7;5080:2;5071:6;5067:2;5063:15;5059:24;5056:37;5053:57;;;5106:1;5103;5096:12;5053:57;5137:2;5133;5129:11;5119:21;;5159:6;5149:16;;;5218:2;5207:9;5203:18;5190:32;5174:48;;5247:2;5237:8;5234:16;5231:36;;;5263:1;5260;5253:12;5231:36;5302:72;5366:7;5355:8;5344:9;5340:24;5302:72;:::i;:::-;5393:8;;-1:-1:-1;5276:98:185;-1:-1:-1;5481:2:185;5466:18;;5453:32;;-1:-1:-1;5497:16:185;;;5494:36;;;5526:1;5523;5516:12;5494:36;;5565:72;5629:7;5618:8;5607:9;5603:24;5565:72;:::i;:::-;4321:1532;;;;-1:-1:-1;4321:1532:185;;;;;;5539:98;;5738:3;5723:19;;5710:33;;5790:3;5775:19;;5762:33;;-1:-1:-1;5842:3:185;5827:19;;;5814:33;;-1:-1:-1;4321:1532:185;-1:-1:-1;;;;4321:1532:185:o;6111:125::-;6151:4;6179:1;6176;6173:8;6170:34;;;6184:18;;:::i;:::-;-1:-1:-1;6221:9:185;;6111:125::o;6241:408::-;6443:2;6425:21;;;6482:2;6462:18;;;6455:30;6521:34;6516:2;6501:18;;6494:62;-1:-1:-1;;;6587:2:185;6572:18;;6565:42;6639:3;6624:19;;6241:408::o;6654:::-;6856:2;6838:21;;;6895:2;6875:18;;;6868:30;6934:34;6929:2;6914:18;;6907:62;-1:-1:-1;;;7000:2:185;6985:18;;6978:42;7052:3;7037:19;;6654:408::o;8106:168::-;8146:7;8212:1;8208;8204:6;8200:14;8197:1;8194:21;8189:1;8182:9;8175:17;8171:45;8168:71;;;8219:18;;:::i;:::-;-1:-1:-1;8259:9:185;;8106:168::o;8279:535::-;8494:6;8483:9;8476:25;8537:2;8532;8521:9;8517:18;8510:30;8576:6;8571:2;8560:9;8556:18;8549:34;8634:6;8626;8620:3;8609:9;8605:19;8592:49;8691:1;8685:3;8676:6;8665:9;8661:22;8657:32;8650:43;8457:4;8761:3;8754:2;8750:7;8745:2;8737:6;8733:15;8729:29;8718:9;8714:45;8710:55;8702:63;;8801:6;8796:2;8785:9;8781:18;8774:34;8279:535;;;;;;;:::o;9571:184::-;9641:6;9694:2;9682:9;9673:7;9669:23;9665:32;9662:52;;;9710:1;9707;9700:12;9662:52;-1:-1:-1;9733:16:185;;9571:184;-1:-1:-1;9571:184:185:o;10946:407::-;11148:2;11130:21;;;11187:2;11167:18;;;11160:30;11226:34;11221:2;11206:18;;11199:62;-1:-1:-1;;;11292:2:185;11277:18;;11270:41;11343:3;11328:19;;10946:407::o;11358:217::-;11398:1;11424;11414:132;;11468:10;11463:3;11459:20;11456:1;11449:31;11503:4;11500:1;11493:15;11531:4;11528:1;11521:15;11414:132;-1:-1:-1;11560:9:185;;11358:217::o;11580:262::-;11619:7;11651:10;11688:2;11685:1;11681:10;11718:2;11715:1;11711:10;11774:3;11770:2;11766:12;11761:3;11758:21;11751:3;11744:11;11737:19;11733:47;11730:73;;;11783:18;;:::i;:::-;11823:13;;11580:262;-1:-1:-1;;;;11580:262:185:o;11847:127::-;11908:10;11903:3;11899:20;11896:1;11889:31;11939:4;11936:1;11929:15;11963:4;11960:1;11953:15;11979:228;12018:3;12046:10;12083:2;12080:1;12076:10;12113:2;12110:1;12106:10;12144:3;12140:2;12136:12;12131:3;12128:21;12125:47;;;12152:18;;:::i;:::-;12188:13;;11979:228;-1:-1:-1;;;;11979:228:185:o;12464:331::-;12564:4;12622:11;12609:25;12716:2;12712:7;12701:8;12685:14;12681:29;12677:43;12657:18;12653:68;12643:96;;12735:1;12732;12725:12;12643:96;12756:33;;;;;12464:331;-1:-1:-1;;12464:331:185:o;12800:201::-;12838:3;12866:10;12911:2;12904:5;12900:14;12938:2;12929:7;12926:15;12923:41;;;12944:18;;:::i;:::-;12993:1;12980:15;;12800:201;-1:-1:-1;;;12800:201:185:o;14405:521::-;14482:4;14488:6;14548:11;14535:25;14642:2;14638:7;14627:8;14611:14;14607:29;14603:43;14583:18;14579:68;14569:96;;14661:1;14658;14651:12;14569:96;14688:33;;14740:20;;;-1:-1:-1;14783:18:185;14772:30;;14769:50;;;14815:1;14812;14805:12;14769:50;14848:4;14836:17;;-1:-1:-1;14879:14:185;14875:27;;;14865:38;;14862:58;;;14916:1;14913;14906:12;14931:135;14970:3;-1:-1:-1;;14991:17:185;;14988:43;;;15011:18;;:::i;:::-;-1:-1:-1;15058:1:185;15047:13;;14931:135::o;15828:258::-;15900:1;15910:113;15924:6;15921:1;15918:13;15910:113;;;16000:11;;;15994:18;15981:11;;;15974:39;15946:2;15939:10;15910:113;;;16041:6;16038:1;16035:13;16032:48;;;-1:-1:-1;;16076:1:185;16058:16;;16051:27;15828:258::o;16091:274::-;16220:3;16258:6;16252:13;16274:53;16320:6;16315:3;16308:4;16300:6;16296:17;16274:53;:::i;16370:383::-;16519:2;16508:9;16501:21;16482:4;16551:6;16545:13;16594:6;16589:2;16578:9;16574:18;16567:34;16610:66;16669:6;16664:2;16653:9;16649:18;16644:2;16636:6;16632:15;16610:66;:::i;:::-;16737:2;16716:15;-1:-1:-1;;16712:29:185;16697:45;;;;16744:2;16693:54;;16370:383;-1:-1:-1;;16370:383:185:o;16758:127::-;16819:10;16814:3;16810:20;16807:1;16800:31;16850:4;16847:1;16840:15;16874:4;16871:1;16864:15","linkReferences":{},"immutableReferences":{"15357":[{"start":1486,"length":32},{"start":1550,"length":32},{"start":1728,"length":32},{"start":1792,"length":32},{"start":1939,"length":32}]}},"methodIdentifiers":{"UNLOCK_BLOCK_COUNT()":"5a3f631a","alignedLayerServiceManager()":"953ef807","batcherWallet()":"58b96e27","createNewTask(bytes32,string,bytes32[],(bytes,uint256,uint256)[],uint256,uint256,uint256)":"df5ffbc6","initialize(address,address,address)":"c0c53b8b","lock()":"f83d08ba","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","proxiableUUID()":"52d1902d","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","unlock()":"a69df4b5","unpause()":"3f4ba83a","upgradeTo(address)":"3659cfe6","upgradeToAndCall(address,bytes)":"4f1ef286","userData(address)":"c8910913","user_balances(address)":"2df4e21e","user_nonces(address)":"17d89c4e","user_unlock_block(address)":"4d5431ea","withdraw(uint256)":"2e1a7d4d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"unlockBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentBlock\",\"type\":\"uint256\"}],\"name\":\"FundsLocked\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"required\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"InsufficientFeeForAggregator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualFee\",\"type\":\"uint256\"}],\"name\":\"InvalidMaxFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"InvalidMerkleRoot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"leavesQty\",\"type\":\"uint256\"}],\"name\":\"LeavesNotPowerOfTwo\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoFeePerProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoLeavesSubmitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoProofSubmitterSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"leavesQty\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signaturesQty\",\"type\":\"uint256\"}],\"name\":\"NotEnoughLeaves\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"OnlyBatcherAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PayerInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"required\",\"type\":\"uint256\"}],\"name\":\"SignerInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"UserHasNoFundsToLock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"UserHasNoFundsToUnlock\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"BalanceLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unlockBlock\",\"type\":\"uint256\"}],\"name\":\"BalanceUnlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PaymentReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feePerProof\",\"type\":\"uint256\"}],\"name\":\"TaskCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UNLOCK_BLOCK_COUNT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"alignedLayerServiceManager\",\"outputs\":[{\"internalType\":\"contract IAlignedLayerServiceManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batcherWallet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"batchDataPointer\",\"type\":\"string\"},{\"internalType\":\"bytes32[]\",\"name\":\"leaves\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFee\",\"type\":\"uint256\"}],\"internalType\":\"struct BatcherPaymentService.SignatureData[]\",\"name\":\"signatures\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"feeForAggregator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feePerProof\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeeAllowedToRespond\",\"type\":\"uint256\"}],\"name\":\"createNewTask\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAlignedLayerServiceManager\",\"name\":\"_alignedLayerServiceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_batcherPaymentServiceOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_batcherWallet\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"userData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unlockBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"user_balances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"user_nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"user_unlock_block\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate that the this implementation remains valid after an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy to `newImplementation`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/core/BatcherPaymentService.sol\":\"BatcherPaymentService\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin-upgrades-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/\",\":@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/\",\":@openzeppelin-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/\",\":@openzeppelin/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/\",\":ds-test/=lib/eigenlayer-middleware/lib/ds-test/src/\",\":eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/\",\":eigenlayer-core-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/\",\":eigenlayer-core/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/\",\":eigenlayer-middleware/=lib/eigenlayer-middleware/src/\",\":eigenlayer-scripts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/script/\",\":erc4626-tests/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/\",\":openzeppelin-contracts-upgradeable/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/\",\":openzeppelin-contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/\",\":openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/contracts/\"]},\"sources\":{\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IBeaconChainOracle.sol\":{\"keccak256\":\"0x0fef07aa6179c77198f1514e12e628aa1c876e04f9c181ec853a322179e5be00\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://51438325876cc2d4c77f58488a7e27b488015d1b663c50be6a5cafbd73b9c983\",\"dweb:/ipfs/QmViCuGoYZzi6wtXA8PPKigqVv3KMuNxEVQ1Td9dGqjL18\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol\":{\"keccak256\":\"0xab76a9f4eff865cbb689f627cf98263488765519d7a4ec5ffbcb0ca4972842f9\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://ff57ce18e8350bf39f190645db0988bc0f1279f1872150a114a1b520c38a2914\",\"dweb:/ipfs/QmSsUXkNUqYuJgGRumHTSs9rAaboGjecotcM4xHrdBYWaZ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IETHPOSDeposit.sol\":{\"keccak256\":\"0x2e60e5f4b0da0a0a4e2a07c63141120998559970c21deac743ea0c64a60a880c\",\"license\":\"CC0-1.0\",\"urls\":[\"bzz-raw://e635c346bde5b7ade9bcf35bc733081520cb86015be4fbc6e761e6e9482c4c91\",\"dweb:/ipfs/QmRoeazEnbFn5SPSWAkoFK2gSN9DMp3hJAnrLWuL2sKutz\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPod.sol\":{\"keccak256\":\"0xb50c36ad96b6679bb80fd8331f949cbfbcba0f529026e1421a4d2bae64396eba\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://5719181d780120f1e688c0da276992a8caf185815917f453b3550537c31ed4cc\",\"dweb:/ipfs/QmYprRC5ZEXhz3zAUND5E8Xjn6s5TL8ZF8QbnndVq7aVPR\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol\":{\"keccak256\":\"0xd8a64dbed03d3a5cdbefe1af75968f2dde07f973749c2ef5197bf7187c3e448c\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://27ccc7c1fd9352e9f9b357c9063d255dc0ed9583f43db09f786ac7497d7846b8\",\"dweb:/ipfs/QmeJzuJkE9m2NUNwZSp4tGZEZmih1LeucePup8hzMVDRbG\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol\":{\"keccak256\":\"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324\",\"dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol\":{\"keccak256\":\"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d\",\"dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISignatureUtils.sol\":{\"keccak256\":\"0x5e52482a31d94401a8502f3014c4aada1142b4450fc0596dff8e1866a85fe092\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://17dc326c9361bc1453379f26545963557b2883b0c88bc07d4477e04dbcc0cc8c\",\"dweb:/ipfs/QmZXT7A816W5JH2ymirE2ETaJttqztFCsEL22AV8oEfCK9\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol\":{\"keccak256\":\"0x45dfaa2cfdde87f48a6ee38bb6fb739847aef7cf3f6137bdcd8c8a330559ec79\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://1b7f6bd75b42fcaa91ceb7140cb2c41926a1fe6ee2d3161e4fe6186b181ba232\",\"dweb:/ipfs/QmZjbdKiSs33C9i3GDc3sdD39Pz4YPkDoKftowoUF4kHmY\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol\":{\"keccak256\":\"0xc530c6a944b70051fd0dac0222de9a4b5baadeaf94ad194daac6ad8d2ace7420\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://3767df0364ce835b52e786d2851431eb9223fe4747602107505477e162231d73\",\"dweb:/ipfs/QmZkH5bKUygQrJomndNaQqkefVRW4rRefCa8HPJ5HMczxJ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategyManager.sol\":{\"keccak256\":\"0x68bf02a443fc8b2f612eba3d39bfefa5f61f78b549f111cdecec5f2c58236a52\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://76bc6875ce74128b861fdac5fd1c0c72f3cc9bacf67fa4a73721b95fb23959ef\",\"dweb:/ipfs/QmPix4WJmf9fXyMZxfgwXEHBcg7V4NAbRqs4HUf5YrSJcM\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/BeaconChainProofs.sol\":{\"keccak256\":\"0x70d89b05c1c5f47b74a07fbb5a2c05e606fed494e749ea98a9915b7be73df377\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://db1d3bfaee69aef53c8b12b492a17584e6d1ac94610cb8b38aad33e1cdd81af7\",\"dweb:/ipfs/QmfVsMTj1hcf9fMEm5RzvtcBN4dMcAKFBgUUDsNDr5XFpq\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Endian.sol\":{\"keccak256\":\"0xf3b72653ba2567a978d4612703fa5f71c5fcd015d8dac7818468f22772d90a9d\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://cee9d09370d968138d775c39525db4cd0768d60d17be7685519de12444e7dd2f\",\"dweb:/ipfs/QmUdGh8wpMei3edKiEWA6S96s9dRt4ekZKJ4nau356X8xQ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Merkle.sol\":{\"keccak256\":\"0x9095fc29b96d102b10c02d44b3a6fbfa25593ef6ae4a810363ab885b9e6b0f71\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0945132d482d56278edddb1d32209903c4d3839c87ba4317aadd97dc23610d0f\",\"dweb:/ipfs/QmVuM2aLRHxitx4rPx3GTYTBCVNcjYn6sHBRr1biUjLBP5\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/interfaces/draft-IERC1822Upgradeable.sol\":{\"keccak256\":\"0x77c89f893e403efc6929ba842b7ccf6534d4ffe03afe31670b4a528c0ad78c0f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://496bd9b3df2455d571018c09f0c6badd29713fdeb907c6aa09d8d28cb603f053\",\"dweb:/ipfs/QmXdJDyYs6WMwMh21dez2BYPxhSUaUYFMDtVNcn2cgFR79\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol\":{\"keccak256\":\"0x315887e846f1e5f8d8fa535a229d318bb9290aaa69485117f1ee8a9a6b3be823\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29dda00da6d269685b555e710e4abf1c3eb6d00c15b888a7880a2f8dd3c4fdc2\",\"dweb:/ipfs/QmSqcjtdECygtT1Gy7uEo42x8542srpgGEeKKHfcnQqXgn\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/beacon/IBeaconUpgradeable.sol\":{\"keccak256\":\"0x24b86ac8c005b8c654fbf6ac34a5a4f61580d7273541e83e013e89d66fbf0908\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dbfe1a3b3b3fb64294ce41fd2ad362e7b7012208117864f42c1a67620a6d5c1\",\"dweb:/ipfs/QmVMU5tWt7zBQMmf5cpMX8UMHV86T3kFeTxBTBjFqVWfoJ\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x6e36e9b4b71de699c2f3f0d4e4d1aa0b35da99a26e8d5b91ef09ba234b4ef270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://abfa467c53a0d60b4d09bf04aa952b1d1d44e5766fcc053aace078d7859b8419\",\"dweb:/ipfs/QmebVTZpyNxYfKYTuLMywzEJTdc1Ca8ME4xm3kR9gQgToG\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/security/PausableUpgradeable.sol\":{\"keccak256\":\"0x40c636b4572ff5f1dc50cf22097e93c0723ee14eff87e99ac2b02636eeca1250\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9c7d1f5e15633ab912b74c2f57e24559e66b03232300d4b27ff0f25bc452ecad\",\"dweb:/ipfs/QmYTJkc1cntYkKQ1Tu11nBcJLakiy93Tjytc4XHELo4GmR\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/StorageSlotUpgradeable.sol\":{\"keccak256\":\"0x09864aea84f01e39313375b5610c73a3c1c68abbdc51e5ccdd25ff977fdadf9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aedb48081190fa828d243529ce25c708202c7d4ccfe99f0e4ecd6bc0cfcd03f3\",\"dweb:/ipfs/QmWyiDQHPZA56iqsAwTmiJoxvNeRQLUVr4gTfzpdpXivpo\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354\",\"dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638\",\"dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x84ac2d2f343df1e683da7a12bbcf70db542a7a7a0cea90a5d70fcb5e5d035481\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://73ae8e0c6f975052973265113d762629002ce33987b1933c2a378667e2816f2f\",\"dweb:/ipfs/QmQAootkVfoe4PLaYbT4Xob2dJRm3bZfbCffEHRbCYXNPF\"]},\"lib/eigenlayer-middleware/src/interfaces/IBLSApkRegistry.sol\":{\"keccak256\":\"0xc07a5edfd95ab4f16f16a8dc8e76eadf4b0e90fe49db90540d01daaad86898c5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://52b53266450a53da641e82d8ae3be93c5e09f8342b4ea0cc96bb9038d8406354\",\"dweb:/ipfs/QmVuoiQyqPTLCGnyt8zDaxiyaj4ETdgTGKv4MDHWzqEDjp\"]},\"lib/eigenlayer-middleware/src/interfaces/IBLSSignatureChecker.sol\":{\"keccak256\":\"0xee5823a6674e553c71f5e127f08245827eb116d1ad418b5a7f2a9d6985fd95e0\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://94aa26debddca6c0784585340cf891de4c2d7edaa3e5ec7229af9730312a5a51\",\"dweb:/ipfs/QmWbHGbM7eVYTAmrCVaDU8b4YTm9VAN82XgLDR78uHC7vj\"]},\"lib/eigenlayer-middleware/src/interfaces/IIndexRegistry.sol\":{\"keccak256\":\"0x83b2d56aacf27e65c4959a832c5de573e013908c044f6e48ea8284ac5282ae2b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://877af382587e96bb39bcc6db8bb5e4b871db5025c52347d4bee9afeaa4a6cc8d\",\"dweb:/ipfs/QmdnhsQCChzq2o5NgbeT3JxSsEcMm1PC9QW6zenZNPjD9F\"]},\"lib/eigenlayer-middleware/src/interfaces/IRegistry.sol\":{\"keccak256\":\"0x51426a17fb7e54bd3720e2890104e97a8559a13ff248b3d6b840916751c143d3\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://01f91289e6100d528cb8b318cb14ff22a0bc52882c9d4db41585e030cc9ddc25\",\"dweb:/ipfs/Qmb22nqGrsrtNovHRwbMCvDHGENuxAgrWu3Db4p7Er2MHY\"]},\"lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol\":{\"keccak256\":\"0xdd8effb082c1d5957d5ff43d7c59497b32866a6d82bcc7d5efa49ea9bc9b3385\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://cb33a2a1446585b13b7a509e880c60d658d2d2522ec48a9f02e30d2cff54002d\",\"dweb:/ipfs/QmVNG8ZPZkXzNEadPdTj1uBYLiZdCnYfsE5iGU6nJcJXiD\"]},\"lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol\":{\"keccak256\":\"0x1b8b4d757c1b804bc4cf6fbbf8bf8f89ebdeb30a31014751fe7d01deb9d513d4\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://984bf2777b898ed187d28997f9783f5c293a1a1848e3e9aa470ce9183d454c97\",\"dweb:/ipfs/Qme3aTpBrkLu8wYHFMZbCfhXHoZ1M6SpXkeC237T9BuU5B\"]},\"lib/eigenlayer-middleware/src/libraries/BN254.sol\":{\"keccak256\":\"0xb428c8d0c3b325507a88a61a80115493eb88606ccc19ed64a31e11294ab853b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7b6fb935bfe0494e6ff970c8f30a86d5f4cf5c3e0967300c28cd383c043acae\",\"dweb:/ipfs/QmUHfFZaVjLPXhkBmcxrZhAHZaSFQDqXtrLGpjGBQBa5Ki\"]},\"src/core/BatcherPaymentService.sol\":{\"keccak256\":\"0xfd0ea8aa8e6cc10d709eb182601b70031952646dd504cbcfc06344d91e9bedc7\",\"urls\":[\"bzz-raw://3083840d83440dfe44c95d6919620cc40d6c45bbbe5a62e7f80a72330ab41220\",\"dweb:/ipfs/QmbTYRNc4Kq7TmTiDFgcHcAitrHXVWrz59frFKBLghboFy\"]},\"src/core/IAlignedLayerServiceManager.sol\":{\"keccak256\":\"0x4b35d9ce7c538d549753422a94e79d2a586cbb379f5953e3c3eedccfdcbf4d88\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://49f0d61126ba3557badcdb8784c337c8ad896ec77978b19efa309a2eefdc44b6\",\"dweb:/ipfs/QmVXEsN7XWuVb7kzsxEDrAcExKHQ1TVPn6Qz8KHUJGSevP\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.12+commit.f00d7308"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"unlockBlock","type":"uint256"},{"internalType":"uint256","name":"currentBlock","type":"uint256"}],"type":"error","name":"FundsLocked"},{"inputs":[{"internalType":"uint256","name":"required","type":"uint256"},{"internalType":"uint256","name":"available","type":"uint256"}],"type":"error","name":"InsufficientFeeForAggregator"},{"inputs":[{"internalType":"uint256","name":"maxFee","type":"uint256"},{"internalType":"uint256","name":"actualFee","type":"uint256"}],"type":"error","name":"InvalidMaxFee"},{"inputs":[{"internalType":"bytes32","name":"expected","type":"bytes32"},{"internalType":"bytes32","name":"actual","type":"bytes32"}],"type":"error","name":"InvalidMerkleRoot"},{"inputs":[{"internalType":"uint256","name":"expected","type":"uint256"},{"internalType":"uint256","name":"actual","type":"uint256"}],"type":"error","name":"InvalidNonce"},{"inputs":[],"type":"error","name":"InvalidSignature"},{"inputs":[{"internalType":"uint256","name":"leavesQty","type":"uint256"}],"type":"error","name":"LeavesNotPowerOfTwo"},{"inputs":[],"type":"error","name":"NoFeePerProof"},{"inputs":[],"type":"error","name":"NoLeavesSubmitted"},{"inputs":[],"type":"error","name":"NoProofSubmitterSignatures"},{"inputs":[{"internalType":"uint256","name":"leavesQty","type":"uint256"},{"internalType":"uint256","name":"signaturesQty","type":"uint256"}],"type":"error","name":"NotEnoughLeaves"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"type":"error","name":"OnlyBatcherAllowed"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"type":"error","name":"PayerInsufficientBalance"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"required","type":"uint256"}],"type":"error","name":"SignerInsufficientBalance"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"type":"error","name":"UserHasNoFundsToLock"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"type":"error","name":"UserHasNoFundsToUnlock"},{"inputs":[{"internalType":"address","name":"previousAdmin","type":"address","indexed":false},{"internalType":"address","name":"newAdmin","type":"address","indexed":false}],"type":"event","name":"AdminChanged","anonymous":false},{"inputs":[{"internalType":"address","name":"user","type":"address","indexed":true}],"type":"event","name":"BalanceLocked","anonymous":false},{"inputs":[{"internalType":"address","name":"user","type":"address","indexed":true},{"internalType":"uint256","name":"unlockBlock","type":"uint256","indexed":false}],"type":"event","name":"BalanceUnlocked","anonymous":false},{"inputs":[{"internalType":"address","name":"beacon","type":"address","indexed":true}],"type":"event","name":"BeaconUpgraded","anonymous":false},{"inputs":[{"internalType":"address","name":"recipient","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"FundsWithdrawn","anonymous":false},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Paused","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"PaymentReceived","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32","indexed":true},{"internalType":"uint256","name":"feePerProof","type":"uint256","indexed":false}],"type":"event","name":"TaskCreated","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Unpaused","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"UNLOCK_BLOCK_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"alignedLayerServiceManager","outputs":[{"internalType":"contract IAlignedLayerServiceManager","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"batcherWallet","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"string","name":"batchDataPointer","type":"string"},{"internalType":"bytes32[]","name":"leaves","type":"bytes32[]"},{"internalType":"struct BatcherPaymentService.SignatureData[]","name":"signatures","type":"tuple[]","components":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"maxFee","type":"uint256"}]},{"internalType":"uint256","name":"feeForAggregator","type":"uint256"},{"internalType":"uint256","name":"feePerProof","type":"uint256"},{"internalType":"uint256","name":"maxFeeAllowedToRespond","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"createNewTask"},{"inputs":[{"internalType":"contract IAlignedLayerServiceManager","name":"_alignedLayerServiceManager","type":"address"},{"internalType":"address","name":"_batcherPaymentServiceOwner","type":"address"},{"internalType":"address","name":"_batcherWallet","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"lock"},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"pause"},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"unlock"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"unpause"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"upgradeTo"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"userData","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"unlockBlock","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"user_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"user_nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"user_unlock_block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"withdraw"},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"owner()":{"details":"Returns the address of the current owner."},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"proxiableUUID()":{"details":"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate that the this implementation remains valid after an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"upgradeTo(address)":{"details":"Upgrade the implementation of the proxy to `newImplementation`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."},"upgradeToAndCall(address,bytes)":{"details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin-upgrades-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/","@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/","@openzeppelin-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/","@openzeppelin/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/","ds-test/=lib/eigenlayer-middleware/lib/ds-test/src/","eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/","eigenlayer-core-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/","eigenlayer-core/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/","eigenlayer-middleware/=lib/eigenlayer-middleware/src/","eigenlayer-scripts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/script/","erc4626-tests/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/","openzeppelin-contracts-upgradeable/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/","openzeppelin-contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/","openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/core/BatcherPaymentService.sol":"BatcherPaymentService"},"evmVersion":"london","libraries":{}},"sources":{"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IBeaconChainOracle.sol":{"keccak256":"0x0fef07aa6179c77198f1514e12e628aa1c876e04f9c181ec853a322179e5be00","urls":["bzz-raw://51438325876cc2d4c77f58488a7e27b488015d1b663c50be6a5cafbd73b9c983","dweb:/ipfs/QmViCuGoYZzi6wtXA8PPKigqVv3KMuNxEVQ1Td9dGqjL18"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol":{"keccak256":"0xab76a9f4eff865cbb689f627cf98263488765519d7a4ec5ffbcb0ca4972842f9","urls":["bzz-raw://ff57ce18e8350bf39f190645db0988bc0f1279f1872150a114a1b520c38a2914","dweb:/ipfs/QmSsUXkNUqYuJgGRumHTSs9rAaboGjecotcM4xHrdBYWaZ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IETHPOSDeposit.sol":{"keccak256":"0x2e60e5f4b0da0a0a4e2a07c63141120998559970c21deac743ea0c64a60a880c","urls":["bzz-raw://e635c346bde5b7ade9bcf35bc733081520cb86015be4fbc6e761e6e9482c4c91","dweb:/ipfs/QmRoeazEnbFn5SPSWAkoFK2gSN9DMp3hJAnrLWuL2sKutz"],"license":"CC0-1.0"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPod.sol":{"keccak256":"0xb50c36ad96b6679bb80fd8331f949cbfbcba0f529026e1421a4d2bae64396eba","urls":["bzz-raw://5719181d780120f1e688c0da276992a8caf185815917f453b3550537c31ed4cc","dweb:/ipfs/QmYprRC5ZEXhz3zAUND5E8Xjn6s5TL8ZF8QbnndVq7aVPR"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol":{"keccak256":"0xd8a64dbed03d3a5cdbefe1af75968f2dde07f973749c2ef5197bf7187c3e448c","urls":["bzz-raw://27ccc7c1fd9352e9f9b357c9063d255dc0ed9583f43db09f786ac7497d7846b8","dweb:/ipfs/QmeJzuJkE9m2NUNwZSp4tGZEZmih1LeucePup8hzMVDRbG"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol":{"keccak256":"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f","urls":["bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324","dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol":{"keccak256":"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49","urls":["bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d","dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISignatureUtils.sol":{"keccak256":"0x5e52482a31d94401a8502f3014c4aada1142b4450fc0596dff8e1866a85fe092","urls":["bzz-raw://17dc326c9361bc1453379f26545963557b2883b0c88bc07d4477e04dbcc0cc8c","dweb:/ipfs/QmZXT7A816W5JH2ymirE2ETaJttqztFCsEL22AV8oEfCK9"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol":{"keccak256":"0x45dfaa2cfdde87f48a6ee38bb6fb739847aef7cf3f6137bdcd8c8a330559ec79","urls":["bzz-raw://1b7f6bd75b42fcaa91ceb7140cb2c41926a1fe6ee2d3161e4fe6186b181ba232","dweb:/ipfs/QmZjbdKiSs33C9i3GDc3sdD39Pz4YPkDoKftowoUF4kHmY"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol":{"keccak256":"0xc530c6a944b70051fd0dac0222de9a4b5baadeaf94ad194daac6ad8d2ace7420","urls":["bzz-raw://3767df0364ce835b52e786d2851431eb9223fe4747602107505477e162231d73","dweb:/ipfs/QmZkH5bKUygQrJomndNaQqkefVRW4rRefCa8HPJ5HMczxJ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategyManager.sol":{"keccak256":"0x68bf02a443fc8b2f612eba3d39bfefa5f61f78b549f111cdecec5f2c58236a52","urls":["bzz-raw://76bc6875ce74128b861fdac5fd1c0c72f3cc9bacf67fa4a73721b95fb23959ef","dweb:/ipfs/QmPix4WJmf9fXyMZxfgwXEHBcg7V4NAbRqs4HUf5YrSJcM"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/BeaconChainProofs.sol":{"keccak256":"0x70d89b05c1c5f47b74a07fbb5a2c05e606fed494e749ea98a9915b7be73df377","urls":["bzz-raw://db1d3bfaee69aef53c8b12b492a17584e6d1ac94610cb8b38aad33e1cdd81af7","dweb:/ipfs/QmfVsMTj1hcf9fMEm5RzvtcBN4dMcAKFBgUUDsNDr5XFpq"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Endian.sol":{"keccak256":"0xf3b72653ba2567a978d4612703fa5f71c5fcd015d8dac7818468f22772d90a9d","urls":["bzz-raw://cee9d09370d968138d775c39525db4cd0768d60d17be7685519de12444e7dd2f","dweb:/ipfs/QmUdGh8wpMei3edKiEWA6S96s9dRt4ekZKJ4nau356X8xQ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Merkle.sol":{"keccak256":"0x9095fc29b96d102b10c02d44b3a6fbfa25593ef6ae4a810363ab885b9e6b0f71","urls":["bzz-raw://0945132d482d56278edddb1d32209903c4d3839c87ba4317aadd97dc23610d0f","dweb:/ipfs/QmVuM2aLRHxitx4rPx3GTYTBCVNcjYn6sHBRr1biUjLBP5"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888","urls":["bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a","dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/interfaces/draft-IERC1822Upgradeable.sol":{"keccak256":"0x77c89f893e403efc6929ba842b7ccf6534d4ffe03afe31670b4a528c0ad78c0f","urls":["bzz-raw://496bd9b3df2455d571018c09f0c6badd29713fdeb907c6aa09d8d28cb603f053","dweb:/ipfs/QmXdJDyYs6WMwMh21dez2BYPxhSUaUYFMDtVNcn2cgFR79"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol":{"keccak256":"0x315887e846f1e5f8d8fa535a229d318bb9290aaa69485117f1ee8a9a6b3be823","urls":["bzz-raw://29dda00da6d269685b555e710e4abf1c3eb6d00c15b888a7880a2f8dd3c4fdc2","dweb:/ipfs/QmSqcjtdECygtT1Gy7uEo42x8542srpgGEeKKHfcnQqXgn"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/beacon/IBeaconUpgradeable.sol":{"keccak256":"0x24b86ac8c005b8c654fbf6ac34a5a4f61580d7273541e83e013e89d66fbf0908","urls":["bzz-raw://4dbfe1a3b3b3fb64294ce41fd2ad362e7b7012208117864f42c1a67620a6d5c1","dweb:/ipfs/QmVMU5tWt7zBQMmf5cpMX8UMHV86T3kFeTxBTBjFqVWfoJ"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e","urls":["bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497","dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x6e36e9b4b71de699c2f3f0d4e4d1aa0b35da99a26e8d5b91ef09ba234b4ef270","urls":["bzz-raw://abfa467c53a0d60b4d09bf04aa952b1d1d44e5766fcc053aace078d7859b8419","dweb:/ipfs/QmebVTZpyNxYfKYTuLMywzEJTdc1Ca8ME4xm3kR9gQgToG"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/security/PausableUpgradeable.sol":{"keccak256":"0x40c636b4572ff5f1dc50cf22097e93c0723ee14eff87e99ac2b02636eeca1250","urls":["bzz-raw://9c7d1f5e15633ab912b74c2f57e24559e66b03232300d4b27ff0f25bc452ecad","dweb:/ipfs/QmYTJkc1cntYkKQ1Tu11nBcJLakiy93Tjytc4XHELo4GmR"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol":{"keccak256":"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3","urls":["bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4","dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149","urls":["bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c","dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/StorageSlotUpgradeable.sol":{"keccak256":"0x09864aea84f01e39313375b5610c73a3c1c68abbdc51e5ccdd25ff977fdadf9a","urls":["bzz-raw://aedb48081190fa828d243529ce25c708202c7d4ccfe99f0e4ecd6bc0cfcd03f3","dweb:/ipfs/QmWyiDQHPZA56iqsAwTmiJoxvNeRQLUVr4gTfzpdpXivpo"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61","urls":["bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354","dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b","urls":["bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34","dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3","urls":["bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638","dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0x84ac2d2f343df1e683da7a12bbcf70db542a7a7a0cea90a5d70fcb5e5d035481","urls":["bzz-raw://73ae8e0c6f975052973265113d762629002ce33987b1933c2a378667e2816f2f","dweb:/ipfs/QmQAootkVfoe4PLaYbT4Xob2dJRm3bZfbCffEHRbCYXNPF"],"license":"MIT"},"lib/eigenlayer-middleware/src/interfaces/IBLSApkRegistry.sol":{"keccak256":"0xc07a5edfd95ab4f16f16a8dc8e76eadf4b0e90fe49db90540d01daaad86898c5","urls":["bzz-raw://52b53266450a53da641e82d8ae3be93c5e09f8342b4ea0cc96bb9038d8406354","dweb:/ipfs/QmVuoiQyqPTLCGnyt8zDaxiyaj4ETdgTGKv4MDHWzqEDjp"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IBLSSignatureChecker.sol":{"keccak256":"0xee5823a6674e553c71f5e127f08245827eb116d1ad418b5a7f2a9d6985fd95e0","urls":["bzz-raw://94aa26debddca6c0784585340cf891de4c2d7edaa3e5ec7229af9730312a5a51","dweb:/ipfs/QmWbHGbM7eVYTAmrCVaDU8b4YTm9VAN82XgLDR78uHC7vj"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IIndexRegistry.sol":{"keccak256":"0x83b2d56aacf27e65c4959a832c5de573e013908c044f6e48ea8284ac5282ae2b","urls":["bzz-raw://877af382587e96bb39bcc6db8bb5e4b871db5025c52347d4bee9afeaa4a6cc8d","dweb:/ipfs/QmdnhsQCChzq2o5NgbeT3JxSsEcMm1PC9QW6zenZNPjD9F"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IRegistry.sol":{"keccak256":"0x51426a17fb7e54bd3720e2890104e97a8559a13ff248b3d6b840916751c143d3","urls":["bzz-raw://01f91289e6100d528cb8b318cb14ff22a0bc52882c9d4db41585e030cc9ddc25","dweb:/ipfs/Qmb22nqGrsrtNovHRwbMCvDHGENuxAgrWu3Db4p7Er2MHY"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol":{"keccak256":"0xdd8effb082c1d5957d5ff43d7c59497b32866a6d82bcc7d5efa49ea9bc9b3385","urls":["bzz-raw://cb33a2a1446585b13b7a509e880c60d658d2d2522ec48a9f02e30d2cff54002d","dweb:/ipfs/QmVNG8ZPZkXzNEadPdTj1uBYLiZdCnYfsE5iGU6nJcJXiD"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol":{"keccak256":"0x1b8b4d757c1b804bc4cf6fbbf8bf8f89ebdeb30a31014751fe7d01deb9d513d4","urls":["bzz-raw://984bf2777b898ed187d28997f9783f5c293a1a1848e3e9aa470ce9183d454c97","dweb:/ipfs/Qme3aTpBrkLu8wYHFMZbCfhXHoZ1M6SpXkeC237T9BuU5B"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/libraries/BN254.sol":{"keccak256":"0xb428c8d0c3b325507a88a61a80115493eb88606ccc19ed64a31e11294ab853b3","urls":["bzz-raw://d7b6fb935bfe0494e6ff970c8f30a86d5f4cf5c3e0967300c28cd383c043acae","dweb:/ipfs/QmUHfFZaVjLPXhkBmcxrZhAHZaSFQDqXtrLGpjGBQBa5Ki"],"license":"MIT"},"src/core/BatcherPaymentService.sol":{"keccak256":"0xfd0ea8aa8e6cc10d709eb182601b70031952646dd504cbcfc06344d91e9bedc7","urls":["bzz-raw://3083840d83440dfe44c95d6919620cc40d6c45bbbe5a62e7f80a72330ab41220","dweb:/ipfs/QmbTYRNc4Kq7TmTiDFgcHcAitrHXVWrz59frFKBLghboFy"],"license":null},"src/core/IAlignedLayerServiceManager.sol":{"keccak256":"0x4b35d9ce7c538d549753422a94e79d2a586cbb379f5953e3c3eedccfdcbf4d88","urls":["bzz-raw://49f0d61126ba3557badcdb8784c337c8ad896ec77978b19efa309a2eefdc44b6","dweb:/ipfs/QmVXEsN7XWuVb7kzsxEDrAcExKHQ1TVPn6Qz8KHUJGSevP"],"license":"UNLICENSED"}},"version":1},"id":181} \ No newline at end of file diff --git a/batcher/aligned-sdk/src/communication/messaging.rs b/batcher/aligned-sdk/src/communication/messaging.rs index 0f308d975..336cabe2f 100644 --- a/batcher/aligned-sdk/src/communication/messaging.rs +++ b/batcher/aligned-sdk/src/communication/messaging.rs @@ -1,4 +1,5 @@ use ethers::signers::Signer; +use ethers::types::Address; use futures_util::{stream::SplitStream, SinkExt, StreamExt}; use log::{debug, error, info}; use std::sync::Arc; @@ -30,7 +31,9 @@ pub type ResponseStream = TryFilter< pub async fn send_messages( response_stream: Arc>, ws_write: Arc>, Message>>>, + payment_service_addr: Address, verification_data: &[VerificationData], + max_fees: &[U256], wallet: Wallet, mut nonce: U256, ) -> Result, SubmitError> { @@ -38,21 +41,22 @@ pub async fn send_messages( let mut ws_write = ws_write.lock().await; - let mut nonce_bytes = [0u8; 32]; - let mut response_stream = response_stream.lock().await; let chain_id = U256::from(wallet.chain_id()); - for verification_data in verification_data.iter() { - nonce.to_big_endian(&mut nonce_bytes); - - let verification_data = - NoncedVerificationData::new(verification_data.clone(), nonce_bytes, chain_id); + for (idx, verification_data) in verification_data.iter().enumerate() { + let verification_data = NoncedVerificationData::new( + verification_data.clone(), + nonce, + max_fees[idx], + chain_id, + payment_service_addr, + ); nonce += U256::one(); - let msg = ClientMessage::new(verification_data.clone(), wallet.clone()); + let msg = ClientMessage::new(verification_data.clone(), wallet.clone()).await; let msg_bin = cbor_serialize(&msg).map_err(SubmitError::SerializationError)?; ws_write .send(Message::Binary(msg_bin.clone())) @@ -94,6 +98,10 @@ pub async fn send_messages( error!("Invalid Proof!"); return Err(SubmitError::InvalidProof); } + ValidityResponseMessage::InvalidMaxFee => { + error!("Invalid Max Fee!"); + return Err(SubmitError::InvalidMaxFee); + } ValidityResponseMessage::InsufficientBalance(addr) => { error!("Insufficient balance for address: {}", addr); return Err(SubmitError::InsufficientBalance); @@ -102,6 +110,10 @@ pub async fn send_messages( error!("Invalid chain id!"); return Err(SubmitError::InvalidChainId); } + ValidityResponseMessage::InvalidReplacementMessage => { + error!("Invalid replacement message!"); + return Err(SubmitError::InvalidReplacementMessage); + } }; sent_verification_data.push(verification_data.clone()); diff --git a/batcher/aligned-sdk/src/communication/protocol.rs b/batcher/aligned-sdk/src/communication/protocol.rs index a0fb00e67..362c56736 100644 --- a/batcher/aligned-sdk/src/communication/protocol.rs +++ b/batcher/aligned-sdk/src/communication/protocol.rs @@ -6,7 +6,7 @@ use crate::core::{errors::SubmitError, types::ResponseMessage}; use super::serialization::cbor_deserialize; -pub const EXPECTED_PROTOCOL_VERSION: u16 = 3; +pub const EXPECTED_PROTOCOL_VERSION: u16 = 4; pub async fn check_protocol_version( ws_read: &mut SplitStream>>, diff --git a/batcher/aligned-sdk/src/core/errors.rs b/batcher/aligned-sdk/src/core/errors.rs index 0a6d643cf..db2b89969 100644 --- a/batcher/aligned-sdk/src/core/errors.rs +++ b/batcher/aligned-sdk/src/core/errors.rs @@ -1,6 +1,8 @@ use core::fmt; use ethers::providers::ProviderError; use ethers::signers::WalletError; +use ethers::types::transaction::eip712::Eip712Error; +use ethers::types::SignatureError; use std::io; use std::path::PathBuf; use tokio_tungstenite::tungstenite::protocol::CloseFrame; @@ -70,11 +72,13 @@ pub enum SubmitError { EmptyVerificationDataCommitments, EmptyVerificationDataList, InvalidNonce, + InvalidMaxFee, ProofQueueFlushed, InvalidSignature, InvalidChainId, InvalidProof, ProofTooLarge, + InvalidReplacementMessage, InsufficientBalance, BatchSubmissionFailed(String), GenericError(String), @@ -161,6 +165,7 @@ impl fmt::Display for SubmitError { } SubmitError::EmptyVerificationDataList => write!(f, "Verification data list is empty"), SubmitError::InvalidNonce => write!(f, "Invalid nonce"), + SubmitError::InvalidMaxFee => write!(f, "Invalid max fee"), SubmitError::BatchSubmissionFailed(merkle_root) => write!( f, "Could not create task with batch merkle root {}", @@ -171,6 +176,7 @@ impl fmt::Display for SubmitError { SubmitError::InvalidChainId => write!(f, "Invalid chain Id"), SubmitError::InvalidProof => write!(f, "Invalid proof"), SubmitError::ProofTooLarge => write!(f, "Proof too Large"), + SubmitError::InvalidReplacementMessage => write!(f, "Invalid replacement message"), SubmitError::InsufficientBalance => write!(f, "Insufficient balance"), SubmitError::ProofQueueFlushed => write!(f, "Batch reset"), } @@ -229,3 +235,32 @@ impl fmt::Display for ChainIdError { } } } + +#[derive(Debug)] +pub enum VerifySignatureError { + RecoverTypedDataError(SignatureError), + EncodeError(Eip712Error), +} + +impl From for VerifySignatureError { + fn from(e: SignatureError) -> Self { + VerifySignatureError::RecoverTypedDataError(e) + } +} + +impl From for VerifySignatureError { + fn from(e: Eip712Error) -> Self { + VerifySignatureError::EncodeError(e) + } +} + +impl fmt::Display for VerifySignatureError { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { + VerifySignatureError::RecoverTypedDataError(e) => { + write!(f, "Recover typed data error: {}", e) + } + VerifySignatureError::EncodeError(e) => write!(f, "Encode error: {}", e), + } + } +} diff --git a/batcher/aligned-sdk/src/core/types.rs b/batcher/aligned-sdk/src/core/types.rs index f16ca79d7..123271d61 100644 --- a/batcher/aligned-sdk/src/core/types.rs +++ b/batcher/aligned-sdk/src/core/types.rs @@ -1,8 +1,11 @@ use ethers::core::k256::ecdsa::SigningKey; +use ethers::signers::Signer; use ethers::signers::Wallet; +use ethers::types::transaction::eip712::EIP712Domain; +use ethers::types::transaction::eip712::Eip712; +use ethers::types::transaction::eip712::Eip712Error; use ethers::types::Address; use ethers::types::Signature; -use ethers::types::SignatureError; use ethers::types::U256; use lambdaworks_crypto::merkle_tree::{ merkle::MerkleTree, proof::Proof, traits::IsMerkleTreeBackend, @@ -10,6 +13,14 @@ use lambdaworks_crypto::merkle_tree::{ use serde::{Deserialize, Serialize}; use sha3::{Digest, Keccak256}; +use super::errors::VerifySignatureError; + +// VerificationData is a bytes32 instead of a VerificationData struct because in the BatcherPaymentService contract +// we don't have the fields of VerificationData, we only have the hash of the VerificationData. +// chain_id is not included in the type because it is now part of the domain. +const NONCED_VERIFICATION_DATA_TYPE: &[u8] = + b"NoncedVerificationData(bytes32 verification_data_hash,uint256 nonce,uint256 max_fee)"; + #[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq, Eq)] #[repr(u8)] pub enum ProvingSystemId { @@ -36,16 +47,26 @@ pub struct VerificationData { #[derive(Debug, Serialize, Deserialize, Clone)] pub struct NoncedVerificationData { pub verification_data: VerificationData, - pub nonce: [u8; 32], + pub nonce: U256, + pub max_fee: U256, pub chain_id: U256, + pub payment_service_addr: Address, } impl NoncedVerificationData { - pub fn new(verification_data: VerificationData, nonce: [u8; 32], chain_id: U256) -> Self { + pub fn new( + verification_data: VerificationData, + nonce: U256, + max_fee: U256, + chain_id: U256, + payment_service_addr: Address, + ) -> Self { Self { verification_data, nonce, + max_fee, chain_id, + payment_service_addr, } } } @@ -70,32 +91,40 @@ impl From for VerificationDataCommitment { fn from(verification_data: VerificationData) -> Self { let mut hasher = Keccak256::new(); - // compute proof commitment + // Compute proof commitment + hasher.update(verification_data.proof.as_slice()); let proof_commitment = hasher.finalize_reset().into(); - // compute public input commitment + // Compute public input commitment + let mut pub_input_commitment = [0u8; 32]; if let Some(pub_input) = &verification_data.pub_input { hasher.update(pub_input); pub_input_commitment = hasher.finalize_reset().into(); } - // compute proving system auxiliary data commitment - let mut proving_system_aux_data_commitment = [0u8; 32]; + // Compute proving system auxiliary data commitment + // FIXME(marian): This should probably be reworked, for the moment when the proving - // system is SP1, `proving_system_aux_data` stands for the compiled ELF, while in the case - // of Groth16 and PLONK, stands for the verification key. - - if let Some(vm_program_code) = &verification_data.vm_program_code { - hasher.update(vm_program_code); - proving_system_aux_data_commitment = hasher.finalize_reset().into(); - } else if let Some(verification_key) = &verification_data.verification_key { - hasher.update(verification_key); - proving_system_aux_data_commitment = hasher.finalize_reset().into(); - } + // system is SP1 or Risc0, `proving_system_aux_data` stands for information related to the + // compiled ELF, while in the rest of the proving systems, stands for the verification key. + let proving_system_byte = verification_data.proving_system as u8; + let proving_system_aux_data_commitment = + if let Some(vm_program_code) = &verification_data.vm_program_code { + hasher.update(vm_program_code); + hasher.update([proving_system_byte]); + hasher.finalize_reset().into() + } else if let Some(verification_key) = &verification_data.verification_key { + hasher.update(verification_key); + hasher.update([proving_system_byte]); + hasher.finalize_reset().into() + } else { + [0u8; 32] + }; + + // Serialize proof generator address to bytes - // serialize proof generator address to bytes let proof_generator_addr = verification_data.proof_generator_addr.into(); VerificationDataCommitment { @@ -170,14 +199,62 @@ pub struct ClientMessage { pub signature: Signature, } +impl Eip712 for NoncedVerificationData { + type Error = Eip712Error; + fn domain(&self) -> Result { + Ok(EIP712Domain { + name: Some("Aligned".into()), + version: Some("1".into()), + chain_id: Some(self.chain_id), + verifying_contract: Some(self.payment_service_addr), + salt: None, + }) + } + + fn type_hash() -> Result<[u8; 32], Self::Error> { + let mut hasher = Keccak256::new(); + hasher.update(NONCED_VERIFICATION_DATA_TYPE); + Ok(hasher.finalize().into()) + } + + fn struct_hash(&self) -> Result<[u8; 32], Self::Error> { + let verification_data_hash = + VerificationCommitmentBatch::hash_data(&self.verification_data.clone().into()); + + let mut hasher = Keccak256::new(); + + hasher.update(NONCED_VERIFICATION_DATA_TYPE); + let nonced_verification_data_type_hash = hasher.finalize_reset(); + + let mut nonce_bytes = [0u8; 32]; + self.nonce.to_big_endian(&mut nonce_bytes); + hasher.update(nonce_bytes); + let nonce_hash = hasher.finalize_reset(); + + let mut max_fee_bytes = [0u8; 32]; + self.max_fee.to_big_endian(&mut max_fee_bytes); + hasher.update(max_fee_bytes); + let max_fee_hash = hasher.finalize_reset(); + + hasher.update(nonced_verification_data_type_hash.as_slice()); + hasher.update(verification_data_hash.as_slice()); + hasher.update(nonce_hash.as_slice()); + hasher.update(max_fee_hash.as_slice()); + + Ok(hasher.finalize().into()) + } +} + impl ClientMessage { /// Client message is a wrap around verification data and its signature. /// The signature is obtained by calculating the commitments and then hashing them. - pub fn new(verification_data: NoncedVerificationData, wallet: Wallet) -> Self { - let hashed_data = ClientMessage::hash_with_nonce_and_chain_id(&verification_data); - + pub async fn new( + verification_data: NoncedVerificationData, + wallet: Wallet, + ) -> Self { let signature = wallet - .sign_hash(hashed_data.into()) + .sign_typed_data(&verification_data) + .await .expect("Failed to sign the verification data"); ClientMessage { @@ -188,29 +265,14 @@ impl ClientMessage { /// The signature of the message is verified, and when it correct, the /// recovered address from the signature is returned. - pub fn verify_signature(&self) -> Result { - let hashed_data: [u8; 32] = - ClientMessage::hash_with_nonce_and_chain_id(&self.verification_data); + pub fn verify_signature(&self) -> Result { + let recovered = self.signature.recover_typed_data(&self.verification_data)?; + + let hashed_data = self.verification_data.encode_eip712()?; - let recovered = self.signature.recover(hashed_data)?; self.signature.verify(hashed_data, recovered)?; Ok(recovered) } - - fn hash_with_nonce_and_chain_id(verification_data: &NoncedVerificationData) -> [u8; 32] { - let hashed_leaf = VerificationCommitmentBatch::hash_data(&verification_data.into()); - - let mut chain_id_bytes = [0u8; 32]; - verification_data - .chain_id - .to_big_endian(&mut chain_id_bytes); - - let mut hasher = Keccak256::new(); - hasher.update(hashed_leaf); - hasher.update(verification_data.nonce); - hasher.update(chain_id_bytes); - hasher.finalize().into() - } } #[derive(Serialize, Deserialize, Clone)] @@ -246,6 +308,8 @@ pub enum ValidityResponseMessage { InvalidSignature, InvalidChainId, InvalidProof, + InvalidMaxFee, + InvalidReplacementMessage, ProofTooLarge, InsufficientBalance(Address), } diff --git a/batcher/aligned-sdk/src/eth/aligned_service_manager.rs b/batcher/aligned-sdk/src/eth/aligned_service_manager.rs index c7eeb56ed..582c0f9ff 100644 --- a/batcher/aligned-sdk/src/eth/aligned_service_manager.rs +++ b/batcher/aligned-sdk/src/eth/aligned_service_manager.rs @@ -7,7 +7,11 @@ use crate::core::errors::VerificationError; abigen!( AlignedLayerServiceManagerContract, - "abi/AlignedLayerServiceManager.json" + "abi/AlignedLayerServiceManager.json", + methods { + verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256) as verify_batch_inclusion_legacy; + verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256,address) as verify_batch_inclusion; + }, ); type AlignedLayerServiceManager = AlignedLayerServiceManagerContract>; diff --git a/batcher/aligned-sdk/src/eth/batcher_payment_service.rs b/batcher/aligned-sdk/src/eth/batcher_payment_service.rs index 1dba22157..d5e7f6786 100644 --- a/batcher/aligned-sdk/src/eth/batcher_payment_service.rs +++ b/batcher/aligned-sdk/src/eth/batcher_payment_service.rs @@ -24,7 +24,7 @@ pub async fn batcher_payment_service( } impl SignatureData { - pub fn new(signature: &Signature, nonce: [u8; 32]) -> Self { + pub fn new(signature: &Signature, nonce: U256, max_fee: U256) -> Self { let mut signature_bytes = [0u8; 65]; signature.r.to_big_endian(&mut signature_bytes[0..32]); @@ -33,13 +33,12 @@ impl SignatureData { signature_bytes[64] = signature.v as u8; - let nonce = U256::from_big_endian(nonce.as_slice()); - let signature_bytes = Bytes::from(signature_bytes); SignatureData { signature: signature_bytes, nonce, + max_fee, } } } diff --git a/batcher/aligned-sdk/src/sdk.rs b/batcher/aligned-sdk/src/sdk.rs index f03bb9e5b..4c7a34088 100644 --- a/batcher/aligned-sdk/src/sdk.rs +++ b/batcher/aligned-sdk/src/sdk.rs @@ -6,7 +6,10 @@ use crate::{ }, core::{ errors, - types::{AlignedVerificationData, Chain, VerificationData, VerificationDataCommitment}, + types::{ + AlignedVerificationData, Chain, ProvingSystemId, VerificationData, + VerificationDataCommitment, + }, }, eth::{ aligned_service_manager::aligned_service_manager, @@ -18,10 +21,10 @@ use ethers::{ prelude::k256::ecdsa::SigningKey, providers::{Http, Middleware, Provider}, signers::Wallet, - types::{Address, U256}, + types::{Address, H160, U256}, }; use sha3::{Digest, Keccak256}; -use std::sync::Arc; +use std::{str::FromStr, sync::Arc}; use tokio::{net::TcpStream, sync::Mutex}; use tokio_tungstenite::{connect_async, tungstenite::Message, MaybeTlsStream, WebSocketStream}; @@ -38,6 +41,7 @@ use futures_util::{ /// * `eth_rpc_url` - The URL of the Ethereum RPC node. /// * `chain` - The chain on which the verification will be done. /// * `verification_data` - An array of verification data of each proof. +/// * `max_fees` - An array of the maximum fee that the submitter is willing to pay for each proof verification. /// * `wallet` - The wallet used to sign the proof. /// * `nonce` - The nonce of the submitter address. See `get_next_nonce`. /// * `payment_service_addr` - The address of the payment service contract. @@ -55,22 +59,32 @@ use futures_util::{ /// * `BatchVerificationTimeout` if there is a timeout waiting for the batch verification. /// * `InvalidSignature` if the signature is invalid. /// * `InvalidNonce` if the nonce is invalid. +/// * `InvalidMaxFee` if the max fee is invalid. /// * `InvalidProof` if the proof is invalid. /// * `ProofTooLarge` if the proof is too large. /// * `InsufficientBalance` if the sender balance is insufficient or unlocked /// * `ProofQueueFlushed` if there is an error in the batcher and the proof queue is flushed. /// * `GenericError` if the error doesn't match any of the previous ones. +#[allow(clippy::too_many_arguments)] // TODO: Refactor this function, use NoncedVerificationData pub async fn submit_multiple_and_wait_verification( batcher_url: &str, eth_rpc_url: &str, chain: Chain, verification_data: &[VerificationData], + max_fees: &[U256], wallet: Wallet, nonce: U256, payment_service_addr: &str, ) -> Result, errors::SubmitError> { - let aligned_verification_data = - submit_multiple(batcher_url, verification_data, wallet, nonce).await?; + let aligned_verification_data = submit_multiple( + batcher_url, + chain.clone(), + verification_data, + max_fees, + wallet, + nonce, + ) + .await?; for aligned_verification_data_item in aligned_verification_data.iter() { await_batch_verification( @@ -88,7 +102,9 @@ pub async fn submit_multiple_and_wait_verification( /// Submits multiple proofs to the batcher to be verified in Aligned. /// # Arguments /// * `batcher_url` - The url of the batcher to which the proof will be submitted. +/// * `chain` - The chain on which the verification will be done. /// * `verification_data` - An array of verification data of each proof. +/// * `max_fees` - An array of the maximum fee that the submitter is willing to pay for each proof verification. /// * `wallet` - The wallet used to sign the proof. /// * `nonce` - The nonce of the submitter address. See `get_next_nonce`. /// # Returns @@ -102,6 +118,7 @@ pub async fn submit_multiple_and_wait_verification( /// * `WebSocketClosedUnexpectedlyError` if the connection with the batcher is closed unexpectedly. /// * `InvalidSignature` if the signature is invalid. /// * `InvalidNonce` if the nonce is invalid. +/// * `InvalidMaxFee` if the max fee is invalid. /// * `InvalidProof` if the proof is invalid. /// * `ProofTooLarge` if the proof is too large. /// * `InsufficientBalance` if the sender balance is insufficient or unlocked. @@ -109,7 +126,9 @@ pub async fn submit_multiple_and_wait_verification( /// * `GenericError` if the error doesn't match any of the previous ones. pub async fn submit_multiple( batcher_url: &str, + chain: Chain, verification_data: &[VerificationData], + max_fees: &[U256], wallet: Wallet, nonce: U256, ) -> Result, errors::SubmitError> { @@ -122,13 +141,24 @@ pub async fn submit_multiple( let ws_write = Arc::new(Mutex::new(ws_write)); - _submit_multiple(ws_write, ws_read, verification_data, wallet, nonce).await + _submit_multiple( + ws_write, + ws_read, + chain.clone(), + verification_data, + max_fees, + wallet, + nonce, + ) + .await } async fn _submit_multiple( ws_write: Arc>, Message>>>, mut ws_read: SplitStream>>, + chain: Chain, verification_data: &[VerificationData], + max_fees: &[U256], wallet: Wallet, nonce: U256, ) -> Result, errors::SubmitError> { @@ -147,16 +177,33 @@ async fn _submit_multiple( let response_stream = Arc::new(Mutex::new(response_stream)); - // The sent verification data will be stored here so that we can calculate - // their commitments later. - let sent_verification_data = send_messages( - response_stream.clone(), - ws_write, - verification_data, - wallet, - nonce, - ) - .await?; + let payment_service_addr = match chain { + Chain::Devnet => H160::from_str("0x7969c5eD335650692Bc04293B07F5BF2e7A673C0").ok(), + Chain::Holesky => H160::from_str("0x815aeCA64a974297942D2Bbf034ABEe22a38A003").ok(), + Chain::HoleskyStage => H160::from_str("0x7577Ec4ccC1E6C529162ec8019A49C13F6DAd98b").ok(), + }; + + let sent_verification_data = match payment_service_addr { + // The sent verification data will be stored here so that we can calculate + // their commitments later. + Some(payment_service_addr) => { + send_messages( + response_stream.clone(), + ws_write, + payment_service_addr, + verification_data, + max_fees, + wallet, + nonce, + ) + .await? + } + None => { + return Err(errors::SubmitError::GenericError( + "Invalid chain".to_string(), + )) + } + }; let num_responses = Arc::new(Mutex::new(0)); @@ -187,6 +234,7 @@ async fn _submit_multiple( /// * `eth_rpc_url` - The URL of the Ethereum RPC node. /// * `chain` - The chain on which the verification will be done. /// * `verification_data` - The verification data of the proof. +/// * `max_fee` - The maximum fee that the submitter is willing to pay for the verification. /// * `wallet` - The wallet used to sign the proof. /// * `nonce` - The nonce of the submitter address. See `get_next_nonce`. /// * `payment_service_addr` - The address of the payment service contract. @@ -204,27 +252,33 @@ async fn _submit_multiple( /// * `BatchVerificationTimeout` if there is a timeout waiting for the batch verification. /// * `InvalidSignature` if the signature is invalid. /// * `InvalidNonce` if the nonce is invalid. +/// * `InvalidMaxFee` if the max fee is invalid. /// * `InvalidProof` if the proof is invalid. /// * `ProofTooLarge` if the proof is too large. /// * `InsufficientBalance` if the sender balance is insufficient or unlocked /// * `ProofQueueFlushed` if there is an error in the batcher and the proof queue is flushed. /// * `GenericError` if the error doesn't match any of the previous ones. +#[allow(clippy::too_many_arguments)] // TODO: Refactor this function, use NoncedVerificationData pub async fn submit_and_wait_verification( batcher_url: &str, eth_rpc_url: &str, chain: Chain, verification_data: &VerificationData, + max_fee: U256, wallet: Wallet, nonce: U256, payment_service_addr: &str, ) -> Result { let verification_data = vec![verification_data.clone()]; + let max_fees = vec![max_fee]; + let aligned_verification_data = submit_multiple_and_wait_verification( batcher_url, eth_rpc_url, chain, &verification_data, + &max_fees, wallet, nonce, payment_service_addr, @@ -237,7 +291,9 @@ pub async fn submit_and_wait_verification( /// Submits a proof to the batcher to be verified in Aligned. /// # Arguments /// * `batcher_url` - The url of the batcher to which the proof will be submitted. +/// * `chain` - The chain on which the verification will be done. /// * `verification_data` - The verification data of the proof. +/// * `max_fee` - The maximum fee that the submitter is willing to pay for the verification. /// * `wallet` - The wallet used to sign the proof. /// * `nonce` - The nonce of the submitter address. See `get_next_nonce`. /// # Returns @@ -251,6 +307,7 @@ pub async fn submit_and_wait_verification( /// * `WebSocketClosedUnexpectedlyError` if the connection with the batcher is closed unexpectedly. /// * `InvalidSignature` if the signature is invalid. /// * `InvalidNonce` if the nonce is invalid. +/// * `InvalidMaxFee` if the max fee is invalid. /// * `InvalidProof` if the proof is invalid. /// * `ProofTooLarge` if the proof is too large. /// * `InsufficientBalance` if the sender balance is insufficient or unlocked @@ -258,14 +315,24 @@ pub async fn submit_and_wait_verification( /// * `GenericError` if the error doesn't match any of the previous ones. pub async fn submit( batcher_url: &str, + chain: Chain, verification_data: &VerificationData, + max_fee: U256, wallet: Wallet, nonce: U256, ) -> Result { let verification_data = vec![verification_data.clone()]; + let max_fees = vec![max_fee]; - let aligned_verification_data = - submit_multiple(batcher_url, &verification_data, wallet, nonce).await?; + let aligned_verification_data = submit_multiple( + batcher_url, + chain.clone(), + &verification_data, + &max_fees, + wallet, + nonce, + ) + .await?; Ok(aligned_verification_data[0].clone()) } @@ -351,16 +418,22 @@ async fn _is_proof_verified( Ok(result) } -/// Returns the commitment for a given input. Input can be verification key, public input, etc. +/// Returns the commitment for the verification key, taking into account the corresponding proving system. /// # Arguments -/// * `content` - The content for which the commitment will be calculated. +/// * `verification_key_bytes` - The serialized contents of the verification key. +/// * `proving_system` - The corresponding proving system ID. /// # Returns /// * The commitment. /// # Errors /// * None. -pub fn get_commitment(content: &[u8]) -> [u8; 32] { +pub fn get_vk_commitment( + verification_key_bytes: &[u8], + proving_system: ProvingSystemId, +) -> [u8; 32] { + let proving_system_id_byte = proving_system.clone() as u8; let mut hasher = Keccak256::new(); - hasher.update(content); + hasher.update(verification_key_bytes); + hasher.update([proving_system_id_byte]); hasher.finalize().into() } @@ -431,6 +504,7 @@ mod test { use ethers::signers::LocalWallet; const BATCHER_PAYMENT_SERVICE_ADDR: &str = "0x7969c5eD335650692Bc04293B07F5BF2e7A673C0"; + const MAX_FEE: U256 = U256::max_value(); #[tokio::test] async fn test_submit_success() { @@ -453,6 +527,8 @@ mod test { let verification_data = vec![verification_data]; + let max_fees = vec![MAX_FEE]; + let wallet = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" .parse::() .map_err(|e| SubmitError::GenericError(e.to_string())) @@ -463,6 +539,7 @@ mod test { "http://localhost:8545", Chain::Devnet, &verification_data, + &max_fees, wallet, U256::zero(), BATCHER_PAYMENT_SERVICE_ADDR, @@ -492,11 +569,14 @@ mod test { .map_err(|e| SubmitError::GenericError(e.to_string())) .unwrap(); + let max_fees = vec![MAX_FEE]; + let result = submit_multiple_and_wait_verification( "ws://localhost:8080", "http://localhost:8545", Chain::Devnet, &verification_data, + &max_fees, wallet, U256::zero(), BATCHER_PAYMENT_SERVICE_ADDR, @@ -534,11 +614,14 @@ mod test { .map_err(|e| SubmitError::GenericError(e.to_string())) .unwrap(); + let max_fees = vec![MAX_FEE]; + let aligned_verification_data = submit_multiple_and_wait_verification( "ws://localhost:8080", "http://localhost:8545", Chain::Devnet, &verification_data, + &max_fees, wallet, U256::zero(), BATCHER_PAYMENT_SERVICE_ADDR, @@ -591,6 +674,7 @@ mod test { "http://localhost:8545", Chain::Devnet, &verification_data, + &[MAX_FEE], wallet, U256::zero(), BATCHER_PAYMENT_SERVICE_ADDR, diff --git a/batcher/aligned/src/main.rs b/batcher/aligned/src/main.rs index 43bcf69e2..114b53c87 100644 --- a/batcher/aligned/src/main.rs +++ b/batcher/aligned/src/main.rs @@ -14,7 +14,7 @@ use aligned_sdk::core::{ }; use aligned_sdk::sdk::get_chain_id; use aligned_sdk::sdk::get_next_nonce; -use aligned_sdk::sdk::{get_commitment, is_proof_verified, submit_multiple}; +use aligned_sdk::sdk::{get_vk_commitment, is_proof_verified, submit_multiple}; use clap::Parser; use clap::Subcommand; use clap::ValueEnum; @@ -28,8 +28,8 @@ use log::{error, info}; use transaction::eip2718::TypedTransaction; use crate::AlignedCommands::DepositToBatcher; -use crate::AlignedCommands::GetCommitment; use crate::AlignedCommands::GetUserBalance; +use crate::AlignedCommands::GetVkCommitment; use crate::AlignedCommands::Submit; use crate::AlignedCommands::VerifyProofOnchain; @@ -40,16 +40,15 @@ pub struct AlignedArgs { pub command: AlignedCommands, } +#[allow(clippy::large_enum_variant)] #[derive(Subcommand, Debug)] pub enum AlignedCommands { #[clap(about = "Submit proof to the batcher")] Submit(SubmitArgs), #[clap(about = "Verify the proof was included in a verified batch on Ethereum")] VerifyProofOnchain(VerifyProofOnchainArgs), - - // Get commitment for file, command name is get-commitment - #[clap(about = "Get commitment for file", name = "get-commitment")] - GetCommitment(GetCommitmentArgs), + #[clap(about = "Get commitment for file", name = "get-vk-commitment")] + GetVkCommitment(GetVkCommitmentArgs), #[clap( about = "Deposits Ethereum in the batcher to pay for proofs", name = "deposit-to-batcher" @@ -112,6 +111,20 @@ pub struct SubmitArgs { keystore_path: Option, #[arg(name = "Private key", long = "private_key")] private_key: Option, + #[arg( + name = "Max Fee", + long = "max_fee", + default_value = "1300000000000000" // 13_000 gas per proof * 100 gwei gas price (upper bound) + )] + max_fee: String, // String because U256 expects hex + #[arg(name = "Nonce", long = "nonce")] + nonce: Option, // String because U256 expects hex + #[arg( + name = "The Ethereum network's name", + long = "chain", + default_value = "devnet" + )] + chain: ChainArg, } #[derive(Parser, Debug)] @@ -172,9 +185,11 @@ pub struct VerifyProofOnchainArgs { #[derive(Parser, Debug)] #[command(version, about, long_about = None)] -pub struct GetCommitmentArgs { - #[arg(name = "File name", long = "input")] - input_file: PathBuf, +pub struct GetVkCommitmentArgs { + #[arg(name = "Verification key file path", long = "verification_key_file")] + verification_key_file: PathBuf, + #[arg(name = "Proving system", long = "proving_system")] + proving_system: ProvingSystemArg, #[arg(name = "Output file", long = "output")] output_file: Option, } @@ -267,6 +282,9 @@ async fn main() -> Result<(), AlignedError> { SubmitError::IoError(batch_inclusion_data_directory_path.clone(), e) })?; + let max_fee = + U256::from_dec_str(&submit_args.max_fee).map_err(|_| SubmitError::InvalidMaxFee)?; + let repetitions = submit_args.repetitions; let connect_addr = submit_args.batcher_url.clone(); @@ -299,32 +317,47 @@ async fn main() -> Result<(), AlignedError> { let batcher_eth_address = submit_args.payment_service_addr.clone(); - let verification_data = verification_data_from_args(submit_args)?; + let nonce = match &submit_args.nonce { + Some(nonce) => U256::from_dec_str(nonce).map_err(|_| SubmitError::InvalidNonce)?, + None => { + get_nonce( + ð_rpc_url, + wallet.address(), + &batcher_eth_address, + repetitions, + ) + .await? + } + }; + + let verification_data = verification_data_from_args(&submit_args)?; + + let chain = submit_args.chain.clone().into(); let verification_data_arr = vec![verification_data; repetitions]; info!("Submitting proofs to the Aligned batcher..."); - let nonce = get_nonce( - ð_rpc_url, - wallet.address(), - &batcher_eth_address, - repetitions, - ) - .await?; - - let aligned_verification_data_vec = - match submit_multiple(&connect_addr, &verification_data_arr, wallet.clone(), nonce) - .await - { - Ok(aligned_verification_data_vec) => aligned_verification_data_vec, - Err(e) => { - let nonce_file = format!("nonce_{:?}.bin", wallet.address()); + let max_fees = vec![max_fee; repetitions]; - handle_submit_err(e, nonce_file.as_str()).await; - return Ok(()); - } - }; + let aligned_verification_data_vec = match submit_multiple( + &connect_addr, + chain, + &verification_data_arr, + &max_fees, + wallet.clone(), + nonce, + ) + .await + { + Ok(aligned_verification_data_vec) => aligned_verification_data_vec, + Err(e) => { + let nonce_file = format!("nonce_{:?}.bin", wallet.address()); + + handle_submit_err(e, nonce_file.as_str()).await; + return Ok(()); + } + }; let mut unique_batch_merkle_roots = HashSet::new(); @@ -376,17 +409,18 @@ async fn main() -> Result<(), AlignedError> { info!("Your proof was not included in the batch."); } } - GetCommitment(args) => { - let content = read_file(args.input_file)?; + GetVkCommitment(args) => { + let verification_key_bytes = read_file(args.verification_key_file)?; + let proving_system = args.proving_system.into(); - let hash = get_commitment(&content); + let vk_commitment = get_vk_commitment(&verification_key_bytes, proving_system); - info!("Commitment: {}", hex::encode(hash)); + info!("Commitment: {}", hex::encode(vk_commitment)); if let Some(output_file) = args.output_file { let mut file = File::create(output_file.clone()) .map_err(|e| SubmitError::IoError(output_file.clone(), e))?; - file.write_all(hex::encode(hash).as_bytes()) + file.write_all(hex::encode(vk_commitment).as_bytes()) .map_err(|e| SubmitError::IoError(output_file.clone(), e))?; } } @@ -540,11 +574,11 @@ async fn main() -> Result<(), AlignedError> { Ok(()) } -fn verification_data_from_args(args: SubmitArgs) -> Result { - let proving_system = args.proving_system_flag.into(); +fn verification_data_from_args(args: &SubmitArgs) -> Result { + let proving_system = args.proving_system_flag.clone().into(); // Read proof file - let proof = read_file(args.proof_file_name)?; + let proof = read_file(args.proof_file_name.clone())?; let mut pub_input: Option> = None; let mut verification_key: Option> = None; @@ -554,17 +588,17 @@ fn verification_data_from_args(args: SubmitArgs) -> Result { vm_program_code = Some(read_file_option( "--vm_program", - args.vm_program_code_file_name, + args.vm_program_code_file_name.clone(), )?); } ProvingSystemId::Risc0 => { vm_program_code = Some(read_file_option( "--vm_program", - args.vm_program_code_file_name, + args.vm_program_code_file_name.clone(), )?); pub_input = Some(read_file_option( "--public_input", - args.pub_input_file_name, + args.pub_input_file_name.clone(), )?); } ProvingSystemId::Halo2KZG @@ -572,10 +606,13 @@ fn verification_data_from_args(args: SubmitArgs) -> Result { - verification_key = Some(read_file_option("--vk", args.verification_key_file_name)?); + verification_key = Some(read_file_option( + "--vk", + args.verification_key_file_name.clone(), + )?); pub_input = Some(read_file_option( "--public_input", - args.pub_input_file_name, + args.pub_input_file_name.clone(), )?); } } diff --git a/contracts/.gitignore b/contracts/.gitignore index a56232f82..cbadd564c 100644 --- a/contracts/.gitignore +++ b/contracts/.gitignore @@ -15,3 +15,4 @@ docs/ data/ +node_modules/ diff --git a/contracts/.solhint.json b/contracts/.solhint.json new file mode 100644 index 000000000..56ebadf30 --- /dev/null +++ b/contracts/.solhint.json @@ -0,0 +1,13 @@ +{ + "extends": "solhint:recommended", + "rules": { + "func-visibility": [ + "warn", + { + "ignoreConstructors": true + } + ], + "no-complex-fallback": "off", + "func-name-mixedcase": "off" + } +} diff --git a/contracts/.solhintignore b/contracts/.solhintignore new file mode 100644 index 000000000..a8e8f3fd1 --- /dev/null +++ b/contracts/.solhintignore @@ -0,0 +1 @@ +src/core/ERC20Mock.sol diff --git a/contracts/bindings/AlignedLayerServiceManager/binding.go b/contracts/bindings/AlignedLayerServiceManager/binding.go index a3767ce61..90aad8448 100644 --- a/contracts/bindings/AlignedLayerServiceManager/binding.go +++ b/contracts/bindings/AlignedLayerServiceManager/binding.go @@ -83,8 +83,8 @@ type ISignatureUtilsSignatureWithSaltAndExpiry struct { // ContractAlignedLayerServiceManagerMetaData contains all meta data concerning the ContractAlignedLayerServiceManager contract. var ContractAlignedLayerServiceManagerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"__avsDirectory\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"},{\"name\":\"__rewardsCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRewardsCoordinator\"},{\"name\":\"__registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"},{\"name\":\"__stakeRegistry\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"balanceOf\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchesState\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"taskCreatedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"responded\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blsApkRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBLSApkRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkPublicInput\",\"inputs\":[{\"name\":\"publicInput\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"checkSignatures\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.QuorumStakeTotals\",\"components\":[{\"name\":\"signedStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"},{\"name\":\"totalStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"}]},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createNewTask\",\"inputs\":[{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"batchDataPointer\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getOperatorRestakedStrategies\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRestakeableStrategies\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_rewardsInitiator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registryCoordinator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"respondToTask\",\"inputs\":[{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"respondToTaskV2\",\"inputs\":[{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"senderAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"rewardsInitiator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setRewardsInitiator\",\"inputs\":[{\"name\":\"newRewardsInitiator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStaleStakesForbidden\",\"inputs\":[{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakeRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"staleStakesForbidden\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"trySignatureAndApkVerification\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"pairingSuccessful\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"siganatureIsValid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"_metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyBatchInclusion\",\"inputs\":[{\"name\":\"proofCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"pubInputCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"provingSystemAuxDataCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofGeneratorAddr\",\"type\":\"bytes20\",\"internalType\":\"bytes20\"},{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"merkleProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"verificationDataBatchIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"senderAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"BatchVerified\",\"inputs\":[{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"senderAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BatcherBalanceUpdated\",\"inputs\":[{\"name\":\"batcher\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newBalance\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewBatch\",\"inputs\":[{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"taskCreatedBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"batchDataPointer\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewBatchV2\",\"inputs\":[{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"senderAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"taskCreatedBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"batchDataPointer\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsInitiatorUpdated\",\"inputs\":[{\"name\":\"prevRewardsInitiator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newRewardsInitiator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StaleStakesForbiddenUpdate\",\"inputs\":[{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false}]", - Bin: "0x6101806040523480156200001257600080fd5b506040516200563b3803806200563b8339810160408190526200003591620002e5565b6001600160a01b0380851660805280841660a05280831660c052811660e0528184848284620000636200020a565b50505050806001600160a01b0316610100816001600160a01b031681525050806001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e791906200034d565b6001600160a01b0316610120816001600160a01b031681525050806001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000140573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016691906200034d565b6001600160a01b0316610140816001600160a01b031681525050610120516001600160a01b031663df5cf7236040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e891906200034d565b6001600160a01b03166101605250620002006200020a565b5050505062000374565b600054610100900460ff1615620002775760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620002ca576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620002e257600080fd5b50565b60008060008060808587031215620002fc57600080fd5b84516200030981620002cc565b60208601519094506200031c81620002cc565b60408601519093506200032f81620002cc565b60608601519092506200034281620002cc565b939692955090935050565b6000602082840312156200036057600080fd5b81516200036d81620002cc565b9392505050565b60805160a05160c05160e051610100516101205161014051610160516151b9620004826000396000818161061001526119dc01526000818161039d0152611bef0152600081816103e901528181611ddc0152611fcc015260008181610450015281816110f9015281816116980152818161183f0152611a90015260008181610e0e01528181610f690152818161100001528181612b0801528181612c8b0152612d2a015260008181610c3501528181610cc401528181610d4401528181612503015281816125cf01528181612a460152612be601526000818161305801528181613114015261320001526000818161041a015281816125570152818161262b01526126aa01526151b96000f3fe6080604052600436106101bb5760003560e01c8063715018a6116100ec578063b099627e1161008a578063e481af9d11610064578063e481af9d14610632578063f2fde38b14610647578063fc299dee14610667578063fce36c7d1461068757600080fd5b8063b099627e14610589578063b98d0908146105e4578063df5cf723146105fe57600080fd5b80639926ee7d116100c65780639926ee7d14610509578063a364f4da14610529578063a98fb35514610549578063ab21739a1461056957600080fd5b8063715018a6146104b65780638da5cb5b146104cb57806395c6d604146104e957600080fd5b80634ae07c3711610159578063683048351161013357806368304835146103d75780636b3aa72e1461040b5780636d14a9871461043e57806370a082311461047257600080fd5b80634ae07c371461034a5780635c008994146103785780635df459461461038b57600080fd5b806333cfb7b71161019557806333cfb7b7146102bd5780633bc28c8c146102ea578063416c7e5e1461030a578063485cc9551461032a57600080fd5b806306045a911461022f578063171f1d5b146102645780632dd94eba1461029b57600080fd5b3661022a5733600090815260ca6020526040812080543492906101df90849061406b565b909155505033600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a2005b600080fd5b34801561023b57600080fd5b5061024f61024a3660046141a7565b6106a7565b60405190151581526020015b60405180910390f35b34801561027057600080fd5b5061028461027f366004614308565b610786565b60408051921515835290151560208301520161025b565b3480156102a757600080fd5b506102bb6102b636600461460f565b610910565b005b3480156102c957600080fd5b506102dd6102d8366004614655565b610c10565b60405161025b9190614672565b3480156102f657600080fd5b506102bb610305366004614655565b6110e3565b34801561031657600080fd5b506102bb6103253660046146cd565b6110f7565b34801561033657600080fd5b506102bb6103453660046146ea565b61122e565b34801561035657600080fd5b5061036a610365366004614723565b611343565b60405161025b9291906147bd565b6102bb61038636600461484e565b612296565b34801561039757600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161025b565b3480156103e357600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561041757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103bf565b34801561044a57600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561047e57600080fd5b506104a861048d366004614655565b6001600160a01b0316600090815260ca602052604090205490565b60405190815260200161025b565b3480156104c257600080fd5b506102bb6124bf565b3480156104d757600080fd5b506033546001600160a01b03166103bf565b3480156104f557600080fd5b5061024f610504366004614899565b6124d3565b34801561051557600080fd5b506102bb6105243660046148e4565b6124f8565b34801561053557600080fd5b506102bb610544366004614655565b6125c4565b34801561055557600080fd5b506102bb61056436600461498f565b61268b565b34801561057557600080fd5b506102bb6105843660046149df565b6126df565b34801561059557600080fd5b506105c86105a4366004614a06565b60c96020526000908152604090205463ffffffff811690600160201b900460ff1682565b6040805163ffffffff909316835290151560208301520161025b565b3480156105f057600080fd5b5060975461024f9060ff1681565b34801561060a57600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561063e57600080fd5b506102dd612a40565b34801561065357600080fd5b506102bb610662366004614655565b612e09565b34801561067357600080fd5b506065546103bf906001600160a01b031681565b34801561069357600080fd5b506102bb6106a2366004614a1f565b612e7f565b60008085836040516020016106bd929190614a93565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff166106f957600091505061077a565b600081815260c96020526040902054600160201b900460ff1661072057600091505061077a565b60408051602081018c90529081018a9052606081018990526001600160601b03198816608082015260009060940160408051601f198184030181529190528051602082012090915061077487848389613237565b93505050505b98975050505050505050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878760000151886020015188600001516000600281106107ce576107ce614aae565b60200201518951600160200201518a602001516000600281106107f3576107f3614aae565b60200201518b6020015160016002811061080f5761080f614aae565b602090810291909101518c518d83015160405161086c9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c61088f9190614ac4565b90506109026108a86108a1888461324f565b86906132e6565b6108b061337a565b6108f86108e9856108e3604080518082018252600080825260209182015281518083019092526001825260029082015290565b9061324f565b6108f28c61343a565b906132e6565b886201d4c06134ca565b909890975095505050505050565b737969c5ed335650692bc04293b07f5bf2e7a673c060005a600085815260c9602052604090205490915063ffffffff166109885760405162461bcd60e51b8152602060048201526014602482015273426174636820646f65736e27742065786973747360601b60448201526064015b60405180910390fd5b600084815260c96020526040902054600160201b900460ff16156109e85760405162461bcd60e51b815260206004820152601760248201527610985d18da08185b1c9958591e481c995cdc1bdb991959604a1b604482015260640161097f565b6001600160a01b038216600090815260ca6020526040902054610a465760405162461bcd60e51b81526020600482015260166024820152754261746368657220686173206e6f2062616c616e636560501b604482015260640161097f565b600084815260c960205260408120805464ff00000000198116600160201b179091558190610a7c90879063ffffffff1687611343565b91509150604360ff168260200151600081518110610a9c57610a9c614aae565b6020026020010151610aae9190614ae6565b6001600160601b031660648360000151600081518110610ad057610ad0614aae565b60200260200101516001600160601b0316610aeb9190614b15565b1015610b095760405162461bcd60e51b815260040161097f90614b34565b6040516001600160a01b038516815286907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a610b598387614b92565b610b66906201117061406b565b610b709190614b15565b6001600160a01b038716600090815260ca6020526040902054909150811115610bab5760405162461bcd60e51b815260040161097f90614ba9565b6001600160a01b038616600090815260ca602052604081208054839290610bd3908490614b92565b9091555050604051339082156108fc029083906000818181858888f19350505050158015610c05573d6000803e3d6000fd5b505050505050505050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90602401602060405180830381865afa158015610c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca09190614c06565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa158015610d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2f9190614c1f565b90506001600160c01b0381161580610dc957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc49190614c48565b60ff16155b15610de95760408051600080825260208201909252905b50949350505050565b6000610dfd826001600160c01b03166136ee565b90506000805b8251811015610ed3577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f5848381518110610e4d57610e4d614aae565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb59190614c06565b610ebf908361406b565b915080610ecb81614c6b565b915050610e03565b506000816001600160401b03811115610eee57610eee614083565b604051908082528060200260200182016040528015610f17578160200160208202803683370190505b5090506000805b84518110156110d6576000858281518110610f3b57610f3b614aae565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610fb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd49190614c06565b905060005b818110156110c0576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa15801561104e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110729190614c9b565b6000015186868151811061108857611088614aae565b6001600160a01b0390921660209283029190910190910152846110aa81614c6b565b95505080806110b890614c6b565b915050610fd9565b50505080806110ce90614c6b565b915050610f1e565b5090979650505050505050565b6110eb6137b0565b6110f48161380a565b50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611155573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111799190614cdc565b6001600160a01b0316336001600160a01b0316146112255760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a40161097f565b6110f481613873565b600054610100900460ff161580801561124e5750600054600160ff909116105b806112685750303b158015611268575060005460ff166001145b6112cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161097f565b6000805460ff1916600117905580156112ee576000805461ff0019166101001790555b6112f883836138ba565b801561133e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040805180820190915260608082526020820152600082604001515160405180604001604052806001815260200160008152505114801561139f57508260a0015151604051806040016040528060018152602001600081525051145b80156113c657508260c0015151604051806040016040528060018152602001600081525051145b80156113ed57508260e0015151604051806040016040528060018152602001600081525051145b6114575760405162461bcd60e51b8152602060048201526041602482015260008051602061516483398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a40161097f565b825151602084015151146114cf5760405162461bcd60e51b815260206004820152604460248201819052600080516020615164833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a40161097f565b4363ffffffff168463ffffffff161061153e5760405162461bcd60e51b815260206004820152603c602482015260008051602061516483398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b00000000606482015260840161097f565b60408051808201825260008082526020808301829052835180850185526060808252818301528451808601865260018082529083019390935284518381528086019095529293919082810190803683370190505060208281019190915260408051808201825260018082526000919093015280518281528082019091529081602001602082028036833701905050815260408051808201909152606080825260208201528560200151516001600160401b038111156115ff576115ff614083565b604051908082528060200260200182016040528015611628578160200160208202803683370190505b5081526020860151516001600160401b0381111561164857611648614083565b604051908082528060200260200182016040528015611671578160200160208202803683370190505b508160200181905250600061171d60405180604001604052806001815260200160008152507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117189190614c48565b61393b565b905060005b8760200151518110156119b8576117678860200151828151811061174857611748614aae565b6020026020010151805160009081526020918201519091526040902090565b8360200151828151811061177d5761177d614aae565b6020908102919091010152801561183d57602083015161179e600183614b92565b815181106117ae576117ae614aae565b602002602001015160001c836020015182815181106117cf576117cf614aae565b602002602001015160001c1161183d576040805162461bcd60e51b815260206004820152602481019190915260008051602061516483398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f72746564606482015260840161097f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec63518460200151838151811061188257611882614aae565b60200260200101518b8b6000015185815181106118a1576118a1614aae565b60200260200101516040518463ffffffff1660e01b81526004016118de9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa1580156118fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191f9190614c1f565b6001600160c01b03168360000151828151811061193e5761193e614aae565b6020026020010181815250506119a46108a1611978848660000151858151811061196a5761196a614aae565b6020026020010151166139ce565b8a60200151848151811061198e5761198e614aae565b60200260200101516139f990919063ffffffff16565b9450806119b081614c6b565b915050611722565b50506119c383613add565b60975490935060ff166000816119da576000611a5c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190614c06565b905060005b604051806040016040528060018152602001600081525051811015612167578215611bed578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c4260405180604001604052806001815260200160008152508581518110611ae557611ae5614aae565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015611b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4d9190614c06565b611b57919061406b565b11611bed5760405162461bcd60e51b8152602060048201526066602482015260008051602061516483398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c40161097f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac60405180604001604052806001815260200160008152508381518110611c4457611c44614aae565b602001015160f81c60f81b60f81c8c8c60a001518581518110611c6957611c69614aae565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611cc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce99190614cf9565b6001600160401b031916611d0c8a60400151838151811061174857611748614aae565b67ffffffffffffffff191614611da85760405162461bcd60e51b8152602060048201526061602482015260008051602061516483398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c40161097f565b611dd889604001518281518110611dc157611dc1614aae565b6020026020010151876132e690919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c5660405180604001604052806001815260200160008152508381518110611e3157611e31614aae565b602001015160f81c60f81b60f81c8c8c60c001518581518110611e5657611e56614aae565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed69190614d24565b85602001518281518110611eec57611eec614aae565b6001600160601b03909216602092830291909101820152850151805182908110611f1857611f18614aae565b602002602001015185600001518281518110611f3657611f36614aae565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a602001515181101561215257611fc586600001518281518110611f8057611f80614aae565b602002602001015160405180604001604052806001815260200160008152508581518110611fb057611fb0614aae565b016020015160f81c60ff161c60019081161490565b15612140577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae6040518060400160405280600181526020016000815250858151811061202157612021614aae565b602001015160f81c60f81b60f81c8e8960200151858151811061204657612046614aae565b60200260200101518f60e00151888151811061206457612064614aae565b6020026020010151878151811061207d5761207d614aae565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa1580156120e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121059190614d24565b875180518590811061211957612119614aae565b6020026020010181815161212d9190614d41565b6001600160601b03169052506001909101905b8061214a81614c6b565b915050611f5a565b5050808061215f90614c6b565b915050611a61565b5050506000806121818a868a606001518b60800151610786565b91509150816121f25760405162461bcd60e51b8152602060048201526043602482015260008051602061516483398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a40161097f565b806122535760405162461bcd60e51b8152602060048201526039602482015260008051602061516483398151915260448201527f7265733a207369676e617475726520697320696e76616c696400000000000000606482015260840161097f565b5050600087826020015160405160200161226e929190614d69565b60408051808303601f1901815291905280516020909101209299929850919650505050505050565b600083336040516020016122ab929190614a93565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff16156123265760405162461bcd60e51b815260206004820152601b60248201527f42617463682077617320616c7265616479207375626d69747465640000000000604482015260640161097f565b34156123955733600090815260ca60205260408120805434929061234b90849061406b565b909155505033600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a25b33600090815260ca60205260409020546123f15760405162461bcd60e51b815260206004820152601860248201527f426174636865722062616c616e636520697320656d7074790000000000000000604482015260640161097f565b6040805180820182526000602080830182815263ffffffff43818116865287855260c9909352928590208451815492511515600160201b0264ffffffffff19909316941693909317179091559151909186917f1871c33134a542e0ab9facf7013d27b9ed95e64d299e9919ee091c9cfcb19fa5916124729188908890614dda565b60405180910390a2847f130d3e81af62e03ed6fff5e3bb343695ec513892cfad24d286486745dcc61437334387876040516124b09493929190614e03565b60405180910390a25050505050565b6124c76137b0565b6124d16000613b78565b565b60008184846040516124e6929190614e3e565b60405180910390201490509392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146125405760405162461bcd60e51b815260040161097f90614e4e565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d9061258e9085908590600401614f13565b600060405180830381600087803b1580156125a857600080fd5b505af11580156125bc573d6000803e3d6000fd5b505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461260c5760405162461bcd60e51b815260040161097f90614e4e565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da906024015b600060405180830381600087803b15801561267057600080fd5b505af1158015612684573d6000803e3d6000fd5b5050505050565b6126936137b0565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb35590612656908490600401614f5e565b60005a9050600084846040516020016126f9929190614a93565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff1661276a5760405162461bcd60e51b8152602060048201526014602482015273426174636820646f65736e27742065786973747360601b604482015260640161097f565b600081815260c96020526040902054600160201b900460ff16156127ca5760405162461bcd60e51b815260206004820152601760248201527610985d18da08185b1c9958591e481c995cdc1bdb991959604a1b604482015260640161097f565b6001600160a01b038416600090815260ca60205260409020546128285760405162461bcd60e51b81526020600482015260166024820152754261746368657220686173206e6f2062616c616e636560501b604482015260640161097f565b600081815260c960205260408120805464ff00000000198116600160201b17909155819061285e90849063ffffffff1687611343565b91509150604360ff16826020015160008151811061287e5761287e614aae565b60200260200101516128909190614ae6565b6001600160601b0316606483600001516000815181106128b2576128b2614aae565b60200260200101516001600160601b03166128cd9190614b15565b10156128eb5760405162461bcd60e51b815260040161097f90614b34565b6040516001600160a01b038716815287907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a61293b8388614b92565b612948906201117061406b565b6129529190614b15565b6001600160a01b038916600090815260ca602052604090205490915081111561298d5760405162461bcd60e51b815260040161097f90614ba9565b6001600160a01b038816600090815260ca6020526040812080548392906129b5908490614b92565b90915550506001600160a01b038816600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015612a34573d6000803e3d6000fd5b50505050505050505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac69190614c48565b60ff16905080612ae457505060408051600081526020810190915290565b6000805b82811015612b9957604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612b57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b7b9190614c06565b612b85908361406b565b915080612b9181614c6b565b915050612ae8565b506000816001600160401b03811115612bb457612bb4614083565b604051908082528060200260200182016040528015612bdd578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c669190614c48565b60ff16811015612dff57604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe9190614c06565b905060005b81811015612dea576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015612d78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9c9190614c9b565b60000151858581518110612db257612db2614aae565b6001600160a01b039092166020928302919091019091015283612dd481614c6b565b9450508080612de290614c6b565b915050612d03565b50508080612df790614c6b565b915050612be4565b5090949350505050565b612e116137b0565b6001600160a01b038116612e765760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161097f565b6110f481613b78565b6065546001600160a01b03163314612f145760405162461bcd60e51b815260206004820152604c60248201527f536572766963654d616e61676572426173652e6f6e6c7952657761726473496e60448201527f69746961746f723a2063616c6c6572206973206e6f742074686520726577617260648201526b32399034b734ba34b0ba37b960a11b608482015260a40161097f565b60005b818110156131e857828282818110612f3157612f31614aae565b9050602002810190612f439190614f71565b612f54906040810190602001614655565b6001600160a01b03166323b872dd3330868686818110612f7657612f76614aae565b9050602002810190612f889190614f71565b604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152013560448201526064016020604051808303816000875af1158015612fdf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130039190614f9c565b50600083838381811061301857613018614aae565b905060200281019061302a9190614f71565b61303b906040810190602001614655565b604051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa1580156130a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130cd9190614c06565b90508383838181106130e1576130e1614aae565b90506020028101906130f39190614f71565b613104906040810190602001614655565b6001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000008387878781811061314657613146614aae565b90506020028101906131589190614f71565b60400135613166919061406b565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156131b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d59190614f9c565b5050806131e190614c6b565b9050612f17565b5060405163fce36c7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fce36c7d9061258e9085908590600401615014565b600083613245868585613bca565b1495945050505050565b604080518082019091526000808252602082015261326b613f7b565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa905080801561329e576132a0565bfe5b50806132de5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b604482015260640161097f565b505092915050565b6040805180820190915260008082526020820152613302613f99565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa905080801561329e5750806132de5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b604482015260640161097f565b613382613fb7565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201909152600080825260208201526000808061346a60008051602061514483398151915286614ac4565b90505b61347681613cc4565b90935091506000805160206151448339815191528283098314156134b0576040805180820190915290815260208101919091529392505050565b60008051602061514483398151915260018208905061346d565b6040805180820182528681526020808201869052825180840190935286835282018490526000918291906134fc613fdc565b60005b60028110156136c1576000613515826006614b15565b905084826002811061352957613529614aae565b6020020151518361353b83600061406b565b600c811061354b5761354b614aae565b602002015284826002811061356257613562614aae565b60200201516020015183826001613579919061406b565b600c811061358957613589614aae565b60200201528382600281106135a0576135a0614aae565b60200201515151836135b383600261406b565b600c81106135c3576135c3614aae565b60200201528382600281106135da576135da614aae565b60200201515160016020020151836135f383600361406b565b600c811061360357613603614aae565b602002015283826002811061361a5761361a614aae565b60200201516020015160006002811061363557613635614aae565b60200201518361364683600461406b565b600c811061365657613656614aae565b602002015283826002811061366d5761366d614aae565b60200201516020015160016002811061368857613688614aae565b60200201518361369983600561406b565b600c81106136a9576136a9614aae565b602002015250806136b981614c6b565b9150506134ff565b506136ca613ffb565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b60606000806136fc846139ce565b61ffff166001600160401b0381111561371757613717614083565b6040519080825280601f01601f191660200182016040528015613741576020820181803683370190505b5090506000805b825182108015613759575061010081105b15612dff576001811b9350858416156137a0578060f81b83838151811061378257613782614aae565b60200101906001600160f81b031916908160001a9053508160010191505b6137a981614c6b565b9050613748565b6033546001600160a01b031633146124d15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161097f565b606554604080516001600160a01b03928316815291831660208301527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b600054610100900460ff166139255760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161097f565b61392e82613b78565b6139378161380a565b5050565b60008061394784613d46565b9050808360ff166001901b116139c55760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c756500606482015260840161097f565b90505b92915050565b6000805b82156139c8576139e3600184614b92565b90921691806139f181615121565b9150506139d2565b60408051808201909152600080825260208201526102008261ffff1610613a555760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b604482015260640161097f565b8161ffff1660011415613a695750816139c8565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610613ad257600161ffff871660ff83161c81161415613ab557613ab284846132e6565b93505b613abf83846132e6565b92506201fffe600192831b169101613a85565b509195945050505050565b60408051808201909152600080825260208201528151158015613b0257506020820151155b15613b20575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206151448339815191528460200151613b539190614ac4565b613b6b90600080516020615144833981519152614b92565b905292915050565b919050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208451613bda9190614ac4565b15613c615760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a40161097f565b8260205b85518111610de057613c78600285614ac4565b613c9957816000528086015160205260406000209150600284049350613cb2565b8086015160005281602052604060002091506002840493505b613cbd60208261406b565b9050613c65565b60008080600080516020615144833981519152600360008051602061514483398151915286600080516020615144833981519152888909090890506000613d3a827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615144833981519152613ed3565b91959194509092505050565b600061010082511115613dcf5760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161097f565b8151613ddd57506000919050565b60008083600081518110613df357613df3614aae565b0160200151600160f89190911c81901b92505b8451811015613eca57848181518110613e2157613e21614aae565b0160200151600160f89190911c1b9150828211613eb65760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161097f565b91811791613ec381614c6b565b9050613e06565b50909392505050565b600080613ede613ffb565b613ee6614019565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa925082801561329e575082613f705760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c757265000000000000604482015260640161097f565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613fca614037565b8152602001613fd7614037565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561407e5761407e614055565b500190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156140bb576140bb614083565b60405290565b60405161010081016001600160401b03811182821017156140bb576140bb614083565b604051601f8201601f191681016001600160401b038111828210171561410c5761410c614083565b604052919050565b60006001600160401b0383111561412d5761412d614083565b614140601f8401601f19166020016140e4565b905082815283838301111561415457600080fd5b828260208301376000602084830101529392505050565b600082601f83011261417c57600080fd5b61418b83833560208501614114565b9392505050565b6001600160a01b03811681146110f457600080fd5b600080600080600080600080610100898b0312156141c457600080fd5b88359750602089013596506040890135955060608901356001600160601b0319811681146141f157600080fd5b94506080890135935060a08901356001600160401b0381111561421357600080fd5b61421f8b828c0161416b565b93505060c0890135915060e089013561423781614192565b809150509295985092959890939650565b60006040828403121561425a57600080fd5b614262614099565b9050813581526020820135602082015292915050565b600082601f83011261428957600080fd5b614291614099565b8060408401858111156142a357600080fd5b845b818110156142bd5780358452602093840193016142a5565b509095945050505050565b6000608082840312156142da57600080fd5b6142e2614099565b90506142ee8383614278565b81526142fd8360408401614278565b602082015292915050565b600080600080610120858703121561431f57600080fd5b843593506143308660208701614248565b925061433f86606087016142c8565b915061434e8660e08701614248565b905092959194509250565b60006001600160401b0382111561437257614372614083565b5060051b60200190565b803563ffffffff81168114613b7357600080fd5b600082601f8301126143a157600080fd5b813560206143b66143b183614359565b6140e4565b82815260059290921b840181019181810190868411156143d557600080fd5b8286015b848110156143f7576143ea8161437c565b83529183019183016143d9565b509695505050505050565b600082601f83011261441357600080fd5b813560206144236143b183614359565b82815260069290921b8401810191818101908684111561444257600080fd5b8286015b848110156143f7576144588882614248565b835291830191604001614446565b600082601f83011261447757600080fd5b813560206144876143b183614359565b82815260059290921b840181019181810190868411156144a657600080fd5b8286015b848110156143f75780356001600160401b038111156144c95760008081fd5b6144d78986838b0101614390565b8452509183019183016144aa565b600061018082840312156144f857600080fd5b6145006140c1565b905081356001600160401b038082111561451957600080fd5b61452585838601614390565b8352602084013591508082111561453b57600080fd5b61454785838601614402565b6020840152604084013591508082111561456057600080fd5b61456c85838601614402565b604084015261457e85606086016142c8565b60608401526145908560e08601614248565b60808401526101208401359150808211156145aa57600080fd5b6145b685838601614390565b60a08401526101408401359150808211156145d057600080fd5b6145dc85838601614390565b60c08401526101608401359150808211156145f657600080fd5b5061460384828501614466565b60e08301525092915050565b6000806040838503121561462257600080fd5b8235915060208301356001600160401b0381111561463f57600080fd5b61464b858286016144e5565b9150509250929050565b60006020828403121561466757600080fd5b81356139c581614192565b6020808252825182820181905260009190848201906040850190845b818110156146b35783516001600160a01b03168352928401929184019160010161468e565b50909695505050505050565b80151581146110f457600080fd5b6000602082840312156146df57600080fd5b81356139c5816146bf565b600080604083850312156146fd57600080fd5b823561470881614192565b9150602083013561471881614192565b809150509250929050565b60008060006060848603121561473857600080fd5b833592506147486020850161437c565b915060408401356001600160401b0381111561476357600080fd5b61476f868287016144e5565b9150509250925092565b600081518084526020808501945080840160005b838110156147b25781516001600160601b03168752958201959082019060010161478d565b509495945050505050565b60408152600083516040808401526147d86080840182614779565b90506020850151603f198483030160608501526147f58282614779565b925050508260208301529392505050565b60008083601f84011261481857600080fd5b5081356001600160401b0381111561482f57600080fd5b60208301915083602082850101111561484757600080fd5b9250929050565b60008060006040848603121561486357600080fd5b8335925060208401356001600160401b0381111561488057600080fd5b61488c86828701614806565b9497909650939450505050565b6000806000604084860312156148ae57600080fd5b83356001600160401b038111156148c457600080fd5b6148d086828701614806565b909790965060209590950135949350505050565b600080604083850312156148f757600080fd5b823561490281614192565b915060208301356001600160401b038082111561491e57600080fd5b908401906060828703121561493257600080fd5b60405160608101818110838211171561494d5761494d614083565b60405282358281111561495f57600080fd5b61496b8882860161416b565b82525060208301356020820152604083013560408201528093505050509250929050565b6000602082840312156149a157600080fd5b81356001600160401b038111156149b757600080fd5b8201601f810184136149c857600080fd5b6149d784823560208401614114565b949350505050565b6000806000606084860312156149f457600080fd5b83359250602084013561474881614192565b600060208284031215614a1857600080fd5b5035919050565b60008060208385031215614a3257600080fd5b82356001600160401b0380821115614a4957600080fd5b818501915085601f830112614a5d57600080fd5b813581811115614a6c57600080fd5b8660208260051b8501011115614a8157600080fd5b60209290920196919550909350505050565b91825260601b6001600160601b031916602082015260340190565b634e487b7160e01b600052603260045260246000fd5b600082614ae157634e487b7160e01b600052601260045260246000fd5b500690565b60006001600160601b0380831681851681830481118215151615614b0c57614b0c614055565b02949350505050565b6000816000190483118215151615614b2f57614b2f614055565b500290565b602080825260409082018190527f5369676e61746f7269657320646f206e6f74206f776e206174206c6561737420908201527f7468726573686f6c642070657263656e74616765206f6620612071756f72756d606082015260800190565b600082821015614ba457614ba4614055565b500390565b6020808252603c908201527f4261746368657220686173206e6f742073756666696369656e742066756e647360408201527f20666f7220706179696e672074686973207472616e73616374696f6e00000000606082015260800190565b600060208284031215614c1857600080fd5b5051919050565b600060208284031215614c3157600080fd5b81516001600160c01b03811681146139c557600080fd5b600060208284031215614c5a57600080fd5b815160ff811681146139c557600080fd5b6000600019821415614c7f57614c7f614055565b5060010190565b6001600160601b03811681146110f457600080fd5b600060408284031215614cad57600080fd5b614cb5614099565b8251614cc081614192565b81526020830151614cd081614c86565b60208201529392505050565b600060208284031215614cee57600080fd5b81516139c581614192565b600060208284031215614d0b57600080fd5b815167ffffffffffffffff19811681146139c557600080fd5b600060208284031215614d3657600080fd5b81516139c581614c86565b60006001600160601b0383811690831681811015614d6157614d61614055565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015614da457815185529382019390820190600101614d88565b5092979650505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff84168152604060208201526000614dfa604083018486614db1565b95945050505050565b6001600160a01b038516815263ffffffff84166020820152606060408201819052600090614e349083018486614db1565b9695505050505050565b8183823760009101908152919050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015614eec57602081850181015186830182015201614ed0565b81811115614efe576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b0383168152604060208201526000825160606040840152614f3d60a0840182614ec6565b90506020840151606084015260408401516080840152809150509392505050565b60208152600061418b6020830184614ec6565b60008235609e19833603018112614f8757600080fd5b9190910192915050565b8035613b7381614192565b600060208284031215614fae57600080fd5b81516139c5816146bf565b8183526000602080850194508260005b858110156147b2578135614fdc81614192565b6001600160a01b0316875281830135614ff481614c86565b6001600160601b0316878401526040968701969190910190600101614fc9565b60208082528181018390526000906040808401600586901b8501820187855b8881101561511357878303603f190184528135368b9003609e1901811261505957600080fd5b8a0160a0813536839003601e1901811261507257600080fd5b820180356001600160401b0381111561508a57600080fd5b8060061b360384131561509c57600080fd5b8287526150ae838801828c8501614fb9565b925050506150bd888301614f91565b6001600160a01b031688860152818701358786015260606150df81840161437c565b63ffffffff169086015260806150f683820161437c565b63ffffffff16950194909452509285019290850190600101615033565b509098975050505050505050565b600061ffff8083168181141561513957615139614055565b600101939250505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47424c535369676e6174757265436865636b65722e636865636b5369676e617475a26469706673582212207c07849930c3fc43881ea132ac36e666158e05b68d72acd832cb538b6fe1a4cf64736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"__avsDirectory\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"},{\"name\":\"__rewardsCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRewardsCoordinator\"},{\"name\":\"__registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"},{\"name\":\"__stakeRegistry\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"alignedAggregator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"balanceOf\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchersBalances\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchesState\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"taskCreatedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"responded\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"respondToTaskFeeLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blsApkRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBLSApkRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkPublicInput\",\"inputs\":[{\"name\":\"publicInput\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"checkSignatures\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.QuorumStakeTotals\",\"components\":[{\"name\":\"signedStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"},{\"name\":\"totalStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"}]},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createNewTask\",\"inputs\":[{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"batchDataPointer\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"respondToTaskFeeLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositToBatcher\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getOperatorRestakedStrategies\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRestakeableStrategies\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_rewardsInitiator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_alignedAggregator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeAggregator\",\"inputs\":[{\"name\":\"_alignedAggregator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registryCoordinator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"respondToTaskV2\",\"inputs\":[{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"senderAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"rewardsInitiator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setAggregator\",\"inputs\":[{\"name\":\"_alignedAggregator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRewardsInitiator\",\"inputs\":[{\"name\":\"newRewardsInitiator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStaleStakesForbidden\",\"inputs\":[{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakeRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"staleStakesForbidden\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"trySignatureAndApkVerification\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"pairingSuccessful\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"siganatureIsValid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"_metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyBatchInclusion\",\"inputs\":[{\"name\":\"proofCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"pubInputCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"provingSystemAuxDataCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofGeneratorAddr\",\"type\":\"bytes20\",\"internalType\":\"bytes20\"},{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"merkleProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"verificationDataBatchIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"senderAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyBatchInclusion\",\"inputs\":[{\"name\":\"proofCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"pubInputCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"provingSystemAuxDataCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofGeneratorAddr\",\"type\":\"bytes20\",\"internalType\":\"bytes20\"},{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"merkleProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"verificationDataBatchIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"BatchVerified\",\"inputs\":[{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"senderAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BatcherBalanceUpdated\",\"inputs\":[{\"name\":\"batcher\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newBalance\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewBatchV2\",\"inputs\":[{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"senderAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"taskCreatedBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"batchDataPointer\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewBatchV3\",\"inputs\":[{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"senderAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"taskCreatedBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"batchDataPointer\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"respondToTaskFeeLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsInitiatorUpdated\",\"inputs\":[{\"name\":\"prevRewardsInitiator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newRewardsInitiator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StaleStakesForbiddenUpdate\",\"inputs\":[{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BatchAlreadyResponded\",\"inputs\":[{\"name\":\"batchIdentifierHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"BatchAlreadySubmitted\",\"inputs\":[{\"name\":\"batchIdentifierHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"BatchDoesNotExist\",\"inputs\":[{\"name\":\"batchIdentifierHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ExceededMaxRespondFee\",\"inputs\":[{\"name\":\"respondToTaskFeeLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"txCost\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InsufficientFunds\",\"inputs\":[{\"name\":\"batcher\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"required\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"available\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidDepositAmount\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidQuorumThreshold\",\"inputs\":[{\"name\":\"signedStake\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"requiredStake\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"SenderIsNotAggregator\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"alignedAggregator\",\"type\":\"address\",\"internalType\":\"address\"}]}]", + Bin: "0x6101806040523480156200001257600080fd5b506040516200561d3803806200561d8339810160408190526200003591620002e5565b6001600160a01b0380851660805280841660a05280831660c052811660e0528184848284620000636200020a565b50505050806001600160a01b0316610100816001600160a01b031681525050806001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e791906200034d565b6001600160a01b0316610120816001600160a01b031681525050806001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000140573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016691906200034d565b6001600160a01b0316610140816001600160a01b031681525050610120516001600160a01b031663df5cf7236040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e891906200034d565b6001600160a01b03166101605250620002006200020a565b5050505062000374565b600054610100900460ff1615620002775760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620002ca576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620002e257600080fd5b50565b60008060008060808587031215620002fc57600080fd5b84516200030981620002cc565b60208601519094506200031c81620002cc565b60408601519093506200032f81620002cc565b60608601519092506200034281620002cc565b939692955090935050565b6000602082840312156200036057600080fd5b81516200036d81620002cc565b9392505050565b60805160a05160c05160e0516101005161012051610140516101605161519b620004826000396000818161065401526117dd01526000818161039701526119f00152600081816103cb01528181611bdd0152611dcd0152600081816104320152818161100f015281816114a30152818161164a0152611891015260008181610d4401528181610e9501528181610f2c01528181612a7001528181612be90152612c88015260008181610b6b01528181610bfa01528181610c7a0152818161216601528181612232015281816129ab0152612b4401526000818161303f015281816130fb01526131de0152600081816103fc015281816121ba0152818161228e015261230d015261519b6000f3fe6080604052600436106101fd5760003560e01c806395c6d6041161010d578063d66eaabd116100a0578063f474b5201161006f578063f474b520146106ab578063f9120af6146106d8578063fa534dc0146106f8578063fc299dee14610718578063fce36c7d1461073857600080fd5b8063d66eaabd1461062f578063df5cf72314610642578063e481af9d14610676578063f2fde38b1461068b57600080fd5b8063ab21739a116100dc578063ab21739a1461056b578063b099627e1461058b578063b98d0908146105f5578063c0c53b8b1461060f57600080fd5b806395c6d604146104eb5780639926ee7d1461050b578063a364f4da1461052b578063a98fb3551461054b57600080fd5b80634ae07c37116101905780636d14a9871161015f5780636d14a9871461042057806370a0823114610454578063715018a614610498578063800fb61f146104ad5780638da5cb5b146104cd57600080fd5b80634ae07c37146103575780635df459461461038557806368304835146103b95780636b3aa72e146103ed57600080fd5b80633bc28c8c116101cc5780633bc28c8c146102cc578063416c7e5e146102ec5780634223d5511461030c5780634a5bf6321461031f57600080fd5b806306045a9114610213578063171f1d5b146102485780632e1a7d4d1461027f57806333cfb7b71461029f57600080fd5b3661020e5761020c3334610758565b005b600080fd5b34801561021f57600080fd5b5061023361022e366004614159565b6107ed565b60405190151581526020015b60405180910390f35b34801561025457600080fd5b506102686102633660046142ab565b6108e4565b60408051921515835290151560208301520161023f565b34801561028b57600080fd5b5061020c61029a3660046142fc565b610a6e565b3480156102ab57600080fd5b506102bf6102ba366004614315565b610b46565b60405161023f9190614332565b3480156102d857600080fd5b5061020c6102e7366004614315565b610ff9565b3480156102f857600080fd5b5061020c61030736600461438d565b61100d565b61020c61031a366004614315565b611144565b34801561032b57600080fd5b5060cb5461033f906001600160a01b031681565b6040516001600160a01b03909116815260200161023f565b34801561036357600080fd5b50610377610372366004614668565b61114e565b60405161023f929190614703565b34801561039157600080fd5b5061033f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c557600080fd5b5061033f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f957600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061033f565b34801561042c57600080fd5b5061033f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561046057600080fd5b5061048a61046f366004614315565b6001600160a01b0316600090815260ca602052604090205490565b60405190815260200161023f565b3480156104a457600080fd5b5061020c612082565b3480156104b957600080fd5b5061020c6104c8366004614315565b612096565b3480156104d957600080fd5b506033546001600160a01b031661033f565b3480156104f757600080fd5b50610233610506366004614794565b612136565b34801561051757600080fd5b5061020c6105263660046147df565b61215b565b34801561053757600080fd5b5061020c610546366004614315565b612227565b34801561055757600080fd5b5061020c61056636600461488a565b6122ee565b34801561057757600080fd5b5061020c6105863660046148da565b612342565b34801561059757600080fd5b506105d36105a63660046142fc565b60c9602052600090815260409020805460019091015463ffffffff821691640100000000900460ff169083565b6040805163ffffffff909416845291151560208401529082015260600161023f565b34801561060157600080fd5b506097546102339060ff1681565b34801561061b57600080fd5b5061020c61062a366004614901565b612701565b61020c61063d36600461494c565b6127eb565b34801561064e57600080fd5b5061033f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561068257600080fd5b506102bf6129a5565b34801561069757600080fd5b5061020c6106a6366004614315565b612d51565b3480156106b757600080fd5b5061048a6106c6366004614315565b60ca6020526000908152604090205481565b3480156106e457600080fd5b5061020c6106f3366004614315565b612dc7565b34801561070457600080fd5b5061023361071336600461499e565b612df1565b34801561072457600080fd5b5060655461033f906001600160a01b031681565b34801561074457600080fd5b5061020c610753366004614a1b565b612e66565b8060000361078157604051632097692160e11b8152600481018290526024015b60405180910390fd5b6001600160a01b038216600090815260ca6020526040812080548392906107a9908490614aa5565b90915550506001600160a01b038216600081815260ca6020908152604091829020549151918252600080516020615126833981519152910160405180910390a25050565b6000806001600160a01b038316610805575084610831565b8583604051602001610818929190614ab8565b6040516020818303038152906040528051906020012090505b600081815260c9602052604081205463ffffffff1690036108565760009150506108d8565b600081815260c96020526040902054640100000000900460ff1661087e5760009150506108d8565b60408051602081018c90529081018a9052606081018990526001600160601b03198816608082015260009060940160408051601f19818403018152919052805160208201209091506108d287898389613215565b93505050505b98975050505050505050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018787600001518860200151886000015160006002811061092c5761092c614ad3565b60200201518951600160200201518a6020015160006002811061095157610951614ad3565b60200201518b6020015160016002811061096d5761096d614ad3565b602090810291909101518c518d8301516040516109ca9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c6109ed9190614ae9565b9050610a60610a066109ff888461322d565b86906132be565b610a0e613353565b610a56610a4785610a41604080518082018252600080825260209182015281518083019092526001825260029082015290565b9061322d565b610a508c613413565b906132be565b886201d4c06134a2565b909890975095505050505050565b33600090815260ca6020526040902054811115610abf5733600081815260ca602052604090819020549051632e2a182f60e11b81526004810192909252602482018390526044820152606401610778565b33600090815260ca602052604081208054839290610ade908490614b0b565b909155505033600081815260ca6020908152604091829020549151918252600080516020615126833981519152910160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015610b42573d6000803e3d6000fd5b5050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90602401602060405180830381865afa158015610bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd69190614b1e565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa158015610c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c659190614b37565b90506001600160c01b0381161580610cff57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfa9190614b60565b60ff16155b15610d1f5760408051600080825260208201909252905b50949350505050565b6000610d33826001600160c01b03166136bc565b90506000805b8251811015610dff577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f5848381518110610d8357610d83614ad3565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610deb9190614b1e565b610df59083614aa5565b9150600101610d39565b506000816001600160401b03811115610e1a57610e1a614035565b604051908082528060200260200182016040528015610e43578160200160208202803683370190505b5090506000805b8451811015610fec576000858281518110610e6757610e67614ad3565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f009190614b1e565b905060005b81811015610fe1576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015610f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9e9190614b98565b60000151868681518110610fb457610fb4614ad3565b6001600160a01b039092166020928302919091019091015284610fd681614bd9565b955050600101610f05565b505050600101610e4a565b5090979650505050505050565b61100161377e565b61100a816137d8565b50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561106b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108f9190614bf2565b6001600160a01b0316336001600160a01b03161461113b5760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a401610778565b61100a81613841565b61100a8134610758565b604080518082019091526060808252602082015260008260400151516040518060400160405280600181526020016000815250511480156111aa57508260a0015151604051806040016040528060018152602001600081525051145b80156111d157508260c0015151604051806040016040528060018152602001600081525051145b80156111f857508260e0015151604051806040016040528060018152602001600081525051145b6112625760405162461bcd60e51b8152602060048201526041602482015260008051602061514683398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a401610778565b825151602084015151146112da5760405162461bcd60e51b815260206004820152604460248201819052600080516020615146833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a401610778565b4363ffffffff168463ffffffff16106113495760405162461bcd60e51b815260206004820152603c602482015260008051602061514683398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b000000006064820152608401610778565b60408051808201825260008082526020808301829052835180850185526060808252818301528451808601865260018082529083019390935284518381528086019095529293919082810190803683370190505060208281019190915260408051808201825260018082526000919093015280518281528082019091529081602001602082028036833701905050815260408051808201909152606080825260208201528560200151516001600160401b0381111561140a5761140a614035565b604051908082528060200260200182016040528015611433578160200160208202803683370190505b5081526020860151516001600160401b0381111561145357611453614035565b60405190808252806020026020018201604052801561147c578160200160208202803683370190505b508160200181905250600061152860405180604001604052806001815260200160008152507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115239190614b60565b613888565b905060005b8760200151518110156117b9576115728860200151828151811061155357611553614ad3565b6020026020010151805160009081526020918201519091526040902090565b8360200151828151811061158857611588614ad3565b602090810291909101015280156116485760208301516115a9600183614b0b565b815181106115b9576115b9614ad3565b602002602001015160001c836020015182815181106115da576115da614ad3565b602002602001015160001c11611648576040805162461bcd60e51b815260206004820152602481019190915260008051602061514683398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f727465646064820152608401610778565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec63518460200151838151811061168d5761168d614ad3565b60200260200101518b8b6000015185815181106116ac576116ac614ad3565b60200260200101516040518463ffffffff1660e01b81526004016116e99392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015611706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172a9190614b37565b6001600160c01b03168360000151828151811061174957611749614ad3565b6020026020010181815250506117af6109ff611783848660000151858151811061177557611775614ad3565b60200260200101511661391b565b8a60200151848151811061179957611799614ad3565b602002602001015161394690919063ffffffff16565b945060010161152d565b50506117c483613a29565b60975490935060ff166000816117db57600061185d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d9190614b1e565b905060005b604051806040016040528060018152602001600081525051811015611f535782156119ee578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c42604051806040016040528060018152602001600081525085815181106118e6576118e6614ad3565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa15801561192a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194e9190614b1e565b6119589190614aa5565b116119ee5760405162461bcd60e51b8152602060048201526066602482015260008051602061514683398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c401610778565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac60405180604001604052806001815260200160008152508381518110611a4557611a45614ad3565b602001015160f81c60f81b60f81c8c8c60a001518581518110611a6a57611a6a614ad3565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611ac6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aea9190614c0f565b6001600160401b031916611b0d8a60400151838151811061155357611553614ad3565b67ffffffffffffffff191614611ba95760405162461bcd60e51b8152602060048201526061602482015260008051602061514683398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c401610778565b611bd989604001518281518110611bc257611bc2614ad3565b6020026020010151876132be90919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c5660405180604001604052806001815260200160008152508381518110611c3257611c32614ad3565b602001015160f81c60f81b60f81c8c8c60c001518581518110611c5757611c57614ad3565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611cb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd79190614c3a565b85602001518281518110611ced57611ced614ad3565b6001600160601b03909216602092830291909101820152850151805182908110611d1957611d19614ad3565b602002602001015185600001518281518110611d3757611d37614ad3565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015611f4957611dc686600001518281518110611d8157611d81614ad3565b602002602001015160405180604001604052806001815260200160008152508581518110611db157611db1614ad3565b016020015160f81c60ff161c60019081161490565b15611f41577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae60405180604001604052806001815260200160008152508581518110611e2257611e22614ad3565b602001015160f81c60f81b60f81c8e89602001518581518110611e4757611e47614ad3565b60200260200101518f60e001518881518110611e6557611e65614ad3565b60200260200101518781518110611e7e57611e7e614ad3565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa158015611ee2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f069190614c3a565b8751805185908110611f1a57611f1a614ad3565b60200260200101818151611f2e9190614c57565b6001600160601b03169052506001909101905b600101611d5b565b5050600101611862565b505050600080611f6d8a868a606001518b608001516108e4565b9150915081611fde5760405162461bcd60e51b8152602060048201526043602482015260008051602061514683398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a401610778565b8061203f5760405162461bcd60e51b8152602060048201526039602482015260008051602061514683398151915260448201527f7265733a207369676e617475726520697320696e76616c6964000000000000006064820152608401610778565b5050600087826020015160405160200161205a929190614c7e565b60408051808303601f1901815291905280516020909101209299929850919650505050505050565b61208a61377e565b6120946000613ac4565b565b600054600290610100900460ff161580156120b8575060005460ff8083169116105b6120d45760405162461bcd60e51b815260040161077890614cc6565b6000805461ffff191660ff8316176101001790556120f182612dc7565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6000818484604051612149929190614d14565b60405180910390201490509392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146121a35760405162461bcd60e51b815260040161077890614d24565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d906121f19085908590600401614de2565b600060405180830381600087803b15801561220b57600080fd5b505af115801561221f573d6000803e3d6000fd5b505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461226f5760405162461bcd60e51b815260040161077890614d24565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da906024015b600060405180830381600087803b1580156122d357600080fd5b505af11580156122e7573d6000803e3d6000fd5b5050505050565b6122f661377e565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb355906122b9908490600401614e2d565b60cb546001600160a01b031633146123825760cb54604051632cbe419560e01b81523360048201526001600160a01b039091166024820152604401610778565b60005a90506000848460405160200161239c929190614ab8565b60408051601f198184030181529181528151602092830120600081815260c990935290822080549193509163ffffffff90911690036123f1576040516311cb69a760e11b815260048101839052602401610778565b8054640100000000900460ff161561241f57604051634e78d7f960e11b815260048101839052602401610778565b805464ff00000000191664010000000017815560018101546001600160a01b038616600090815260ca602052604090205410156124a25760018101546001600160a01b038616600081815260ca602052604090819020549051632e2a182f60e11b8152600481019290925260248201929092526044810191909152606401610778565b80546000906124b990849063ffffffff168761114e565b509050604360ff1681602001516000815181106124d8576124d8614ad3565b60200260200101516124ea9190614e40565b6001600160601b03166064826000015160008151811061250c5761250c614ad3565b60200260200101516001600160601b03166125279190614e63565b10156125ba576064816000015160008151811061254657612546614ad3565b60200260200101516001600160601b03166125619190614e63565b604360ff16826020015160008151811061257d5761257d614ad3565b602002602001015161258f9190614e40565b60405163530f5c4560e11b815260048101929092526001600160601b03166024820152604401610778565b6040516001600160a01b038716815287907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260003a5a6126069087614b0b565b6126139062011170614aa5565b61261d9190614e63565b9050826001015481111561265457600183015460405163437e283f60e11b8152600481019190915260248101829052604401610778565b6001600160a01b038716600090815260ca60205260408120805483929061267c908490614b0b565b90915550506001600160a01b038716600081815260ca6020908152604091829020549151918252600080516020615126833981519152910160405180910390a260cb546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156126f6573d6000803e3d6000fd5b505050505050505050565b600054610100900460ff16158080156127215750600054600160ff909116105b8061273b5750303b15801561273b575060005460ff166001145b6127575760405162461bcd60e51b815260040161077890614cc6565b6000805460ff19166001179055801561277a576000805461ff0019166101001790555b6127848484613b16565b60cb80546001600160a01b0319166001600160a01b03841617905580156127e5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60008433604051602001612800929190614ab8565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff161561284f57604051630c40bc4360e21b815260048101829052602401610778565b34156128ac5733600090815260ca602052604081208054349290612874908490614aa5565b909155505033600081815260ca6020908152604091829020549151918252600080516020615126833981519152910160405180910390a25b33600090815260ca60205260409020548211156128fd5733600081815260ca602052604090819020549051632e2a182f60e11b81526004810192909252602482018490526044820152606401610778565b604080516060810182526000602080830182815263ffffffff43818116865285870189815288865260c99094529386902085518154935115156401000000000264ffffffffff1990941692169190911791909117815590516001909101559151909187917f8801fc966deb2c8f563a103c35c9e80740585c292cd97518587e6e7927e6af5591612995913391908a908a908a90614e7a565b60405180910390a2505050505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2b9190614b60565b60ff16905080600003612a4c57505060408051600081526020810190915290565b6000805b82811015612af757604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612abf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae39190614b1e565b612aed9083614aa5565b9150600101612a50565b506000816001600160401b03811115612b1257612b12614035565b604051908082528060200260200182016040528015612b3b578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc49190614b60565b60ff16811015612d4757604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5c9190614b1e565b905060005b81811015612d3d576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015612cd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfa9190614b98565b60000151858581518110612d1057612d10614ad3565b6001600160a01b039092166020928302919091019091015283612d3281614bd9565b945050600101612c61565b5050600101612b42565b5090949350505050565b612d5961377e565b6001600160a01b038116612dbe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610778565b61100a81613ac4565b612dcf61377e565b60cb80546001600160a01b0319166001600160a01b0392909216919091179055565b6040516306045a9160e01b815260009030906306045a9190612e25908b908b908b908b908b908b908b908b90600401614ed1565b602060405180830381865afa158015612e42573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d89190614f33565b6065546001600160a01b03163314612efb5760405162461bcd60e51b815260206004820152604c60248201527f536572766963654d616e61676572426173652e6f6e6c7952657761726473496e60448201527f69746961746f723a2063616c6c6572206973206e6f742074686520726577617260648201526b32399034b734ba34b0ba37b960a11b608482015260a401610778565b60005b818110156131c657828282818110612f1857612f18614ad3565b9050602002810190612f2a9190614f50565b612f3b906040810190602001614315565b6001600160a01b03166323b872dd3330868686818110612f5d57612f5d614ad3565b9050602002810190612f6f9190614f50565b604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152013560448201526064016020604051808303816000875af1158015612fc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fea9190614f33565b506000838383818110612fff57612fff614ad3565b90506020028101906130119190614f50565b613022906040810190602001614315565b604051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa158015613090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b49190614b1e565b90508383838181106130c8576130c8614ad3565b90506020028101906130da9190614f50565b6130eb906040810190602001614315565b6001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000008387878781811061312d5761312d614ad3565b905060200281019061313f9190614f50565b6040013561314d9190614aa5565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015613198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131bc9190614f33565b5050600101612efe565b5060405163fce36c7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fce36c7d906121f19085908590600401614fd6565b600083613223868585613b93565b1495945050505050565b6040805180820190915260008082526020820152613249613f43565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808061327857fe5b50806132b65760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610778565b505092915050565b60408051808201909152600080825260208201526132da613f61565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808061331557fe5b50806132b65760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610778565b61335b613f7f565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201909152600080825260208201526000808061344360008051602061510683398151915286614ae9565b90505b61344f81613c90565b90935091506000805160206151068339815191528283098303613488576040805180820190915290815260208101919091529392505050565b600080516020615106833981519152600182089050613446565b6040805180820182528681526020808201869052825180840190935286835282018490526000918291906134d4613fa4565b60005b600281101561368f5760006134ed826006614e63565b905084826002811061350157613501614ad3565b60200201515183613513836000614aa5565b600c811061352357613523614ad3565b602002015284826002811061353a5761353a614ad3565b602002015160200151838260016135519190614aa5565b600c811061356157613561614ad3565b602002015283826002811061357857613578614ad3565b602002015151518361358b836002614aa5565b600c811061359b5761359b614ad3565b60200201528382600281106135b2576135b2614ad3565b60200201515160016020020151836135cb836003614aa5565b600c81106135db576135db614ad3565b60200201528382600281106135f2576135f2614ad3565b60200201516020015160006002811061360d5761360d614ad3565b60200201518361361e836004614aa5565b600c811061362e5761362e614ad3565b602002015283826002811061364557613645614ad3565b60200201516020015160016002811061366057613660614ad3565b602002015183613671836005614aa5565b600c811061368157613681614ad3565b6020020152506001016134d7565b50613698613fc3565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b60606000806136ca8461391b565b61ffff166001600160401b038111156136e5576136e5614035565b6040519080825280601f01601f19166020018201604052801561370f576020820181803683370190505b5090506000805b825182108015613727575061010081105b15612d47576001811b93508584161561376e578060f81b83838151811061375057613750614ad3565b60200101906001600160f81b031916908160001a9053508160010191505b61377781614bd9565b9050613716565b6033546001600160a01b031633146120945760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610778565b606554604080516001600160a01b03928316815291831660208301527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b60008061389484613d12565b9050808360ff166001901b116139125760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610778565b90505b92915050565b6000805b821561391557613930600184614b0b565b909216918061393e816150e4565b91505061391f565b60408051808201909152600080825260208201526102008261ffff16106139a25760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b6044820152606401610778565b8161ffff166001036139b5575081613915565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610613a1e57600161ffff871660ff83161c81169003613a01576139fe84846132be565b93505b613a0b83846132be565b92506201fffe600192831b1691016139d1565b509195945050505050565b60408051808201909152600080825260208201528151158015613a4e57506020820151155b15613a6c575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206151068339815191528460200151613a9f9190614ae9565b613ab790600080516020615106833981519152614b0b565b905292915050565b919050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613b815760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610778565b613b8a82613ac4565b610b42816137d8565b600060208451613ba39190614ae9565b15613c2a5760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a401610778565b8260205b85518111610d1657613c41600285614ae9565b600003613c6557816000528086015160205260406000209150600284049350613c7e565b8086015160005281602052604060002091506002840493505b613c89602082614aa5565b9050613c2e565b60008080600080516020615106833981519152600360008051602061510683398151915286600080516020615106833981519152888909090890506000613d06827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615106833981519152613e9a565b91959194509092505050565b600061010082511115613d9b5760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610778565b8151600003613dac57506000919050565b60008083600081518110613dc257613dc2614ad3565b0160200151600160f89190911c81901b92505b8451811015613e9157848181518110613df057613df0614ad3565b0160200151600160f89190911c1b9150828211613e855760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610778565b91811791600101613dd5565b50909392505050565b600080613ea5613fc3565b613ead613fe1565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280613eea57fe5b5082613f385760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610778565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613f92613fff565b8152602001613f9f613fff565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356001600160601b031981168114613abf57600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561406d5761406d614035565b60405290565b60405161010081016001600160401b038111828210171561406d5761406d614035565b604051601f8201601f191681016001600160401b03811182821017156140be576140be614035565b604052919050565b60006001600160401b038311156140df576140df614035565b6140f2601f8401601f1916602001614096565b905082815283838301111561410657600080fd5b828260208301376000602084830101529392505050565b600082601f83011261412e57600080fd5b61413d838335602085016140c6565b9392505050565b6001600160a01b038116811461100a57600080fd5b600080600080600080600080610100898b03121561417657600080fd5b88359750602089013596506040890135955061419460608a0161401d565b94506080890135935060a08901356001600160401b038111156141b657600080fd5b6141c28b828c0161411d565b93505060c0890135915060e08901356141da81614144565b809150509295985092959890939650565b6000604082840312156141fd57600080fd5b61420561404b565b9050813581526020820135602082015292915050565b600082601f83011261422c57600080fd5b61423461404b565b80604084018581111561424657600080fd5b845b81811015614260578035845260209384019301614248565b509095945050505050565b60006080828403121561427d57600080fd5b61428561404b565b9050614291838361421b565b81526142a0836040840161421b565b602082015292915050565b60008060008061012085870312156142c257600080fd5b843593506142d386602087016141eb565b92506142e2866060870161426b565b91506142f18660e087016141eb565b905092959194509250565b60006020828403121561430e57600080fd5b5035919050565b60006020828403121561432757600080fd5b813561391281614144565b6020808252825182820181905260009190848201906040850190845b818110156143735783516001600160a01b03168352928401929184019160010161434e565b50909695505050505050565b801515811461100a57600080fd5b60006020828403121561439f57600080fd5b81356139128161437f565b803563ffffffff81168114613abf57600080fd5b60006001600160401b038211156143d7576143d7614035565b5060051b60200190565b600082601f8301126143f257600080fd5b81356020614407614402836143be565b614096565b8083825260208201915060208460051b87010193508684111561442957600080fd5b602086015b8481101561444c5761443f816143aa565b835291830191830161442e565b509695505050505050565b600082601f83011261446857600080fd5b81356020614478614402836143be565b8083825260208201915060208460061b87010193508684111561449a57600080fd5b602086015b8481101561444c576144b188826141eb565b83529183019160400161449f565b600082601f8301126144d057600080fd5b813560206144e0614402836143be565b82815260059290921b840181019181810190868411156144ff57600080fd5b8286015b8481101561444c5780356001600160401b038111156145225760008081fd5b6145308986838b01016143e1565b845250918301918301614503565b6000610180828403121561455157600080fd5b614559614073565b905081356001600160401b038082111561457257600080fd5b61457e858386016143e1565b8352602084013591508082111561459457600080fd5b6145a085838601614457565b602084015260408401359150808211156145b957600080fd5b6145c585838601614457565b60408401526145d7856060860161426b565b60608401526145e98560e086016141eb565b608084015261012084013591508082111561460357600080fd5b61460f858386016143e1565b60a084015261014084013591508082111561462957600080fd5b614635858386016143e1565b60c084015261016084013591508082111561464f57600080fd5b5061465c848285016144bf565b60e08301525092915050565b60008060006060848603121561467d57600080fd5b8335925061468d602085016143aa565b915060408401356001600160401b038111156146a857600080fd5b6146b48682870161453e565b9150509250925092565b60008151808452602080850194506020840160005b838110156146f85781516001600160601b0316875295820195908201906001016146d3565b509495945050505050565b604081526000835160408084015261471e60808401826146be565b90506020850151603f1984830301606085015261473b82826146be565b925050508260208301529392505050565b60008083601f84011261475e57600080fd5b5081356001600160401b0381111561477557600080fd5b60208301915083602082850101111561478d57600080fd5b9250929050565b6000806000604084860312156147a957600080fd5b83356001600160401b038111156147bf57600080fd5b6147cb8682870161474c565b909790965060209590950135949350505050565b600080604083850312156147f257600080fd5b82356147fd81614144565b915060208301356001600160401b038082111561481957600080fd5b908401906060828703121561482d57600080fd5b60405160608101818110838211171561484857614848614035565b60405282358281111561485a57600080fd5b6148668882860161411d565b82525060208301356020820152604083013560408201528093505050509250929050565b60006020828403121561489c57600080fd5b81356001600160401b038111156148b257600080fd5b8201601f810184136148c357600080fd5b6148d2848235602084016140c6565b949350505050565b6000806000606084860312156148ef57600080fd5b83359250602084013561468d81614144565b60008060006060848603121561491657600080fd5b833561492181614144565b9250602084013561493181614144565b9150604084013561494181614144565b809150509250925092565b6000806000806060858703121561496257600080fd5b8435935060208501356001600160401b0381111561497f57600080fd5b61498b8782880161474c565b9598909750949560400135949350505050565b600080600080600080600060e0888a0312156149b957600080fd5b8735965060208801359550604088013594506149d76060890161401d565b93506080880135925060a08801356001600160401b038111156149f957600080fd5b614a058a828b0161411d565b92505060c0880135905092959891949750929550565b60008060208385031215614a2e57600080fd5b82356001600160401b0380821115614a4557600080fd5b818501915085601f830112614a5957600080fd5b813581811115614a6857600080fd5b8660208260051b8501011115614a7d57600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561391557613915614a8f565b91825260601b6001600160601b031916602082015260340190565b634e487b7160e01b600052603260045260246000fd5b600082614b0657634e487b7160e01b600052601260045260246000fd5b500690565b8181038181111561391557613915614a8f565b600060208284031215614b3057600080fd5b5051919050565b600060208284031215614b4957600080fd5b81516001600160c01b038116811461391257600080fd5b600060208284031215614b7257600080fd5b815160ff8116811461391257600080fd5b6001600160601b038116811461100a57600080fd5b600060408284031215614baa57600080fd5b614bb261404b565b8251614bbd81614144565b81526020830151614bcd81614b83565b60208201529392505050565b600060018201614beb57614beb614a8f565b5060010190565b600060208284031215614c0457600080fd5b815161391281614144565b600060208284031215614c2157600080fd5b815167ffffffffffffffff198116811461391257600080fd5b600060208284031215614c4c57600080fd5b815161391281614b83565b6001600160601b03828116828216039080821115614c7757614c77614a8f565b5092915050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015614cb957815185529382019390820190600101614c9d565b5092979650505050505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b8183823760009101908152919050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015614dc257602081850181015186830182015201614da6565b506000602082860101526020601f19601f83011685010191505092915050565b60018060a01b0383168152604060208201526000825160606040840152614e0c60a0840182614d9c565b90506020840151606084015260408401516080840152809150509392505050565b60208152600061413d6020830184614d9c565b6001600160601b038181168382160280821691908281146132b6576132b6614a8f565b808202811582820484141761391557613915614a8f565b6001600160a01b038616815263ffffffff851660208201526080604082018190528101839052828460a0830137600060a08483010152600060a0601f19601f86011683010190508260608301529695505050505050565b60006101008a83528960208401528860408401526001600160601b0319881660608401528660808401528060a0840152614f0d81840187614d9c565b60c084019590955250506001600160a01b039190911660e0909101529695505050505050565b600060208284031215614f4557600080fd5b81516139128161437f565b60008235609e19833603018112614f6657600080fd5b9190910192915050565b8035613abf81614144565b8183526000602080850194508260005b858110156146f8578135614f9e81614144565b6001600160a01b0316875281830135614fb681614b83565b6001600160601b0316878401526040968701969190910190600101614f8b565b60208082528181018390526000906040808401600586901b8501820187855b888110156150d657878303603f190184528135368b9003609e1901811261501b57600080fd5b8a0160a0813536839003601e1901811261503457600080fd5b820188810190356001600160401b0381111561504f57600080fd5b8060061b360382131561506157600080fd5b8287526150718388018284614f7b565b92505050615080888301614f70565b6001600160a01b031688860152818701358786015260606150a28184016143aa565b63ffffffff169086015260806150b98382016143aa565b63ffffffff16950194909452509285019290850190600101614ff5565b509098975050505050505050565b600061ffff8083168181036150fb576150fb614a8f565b600101939250505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0424c535369676e6174757265436865636b65722e636865636b5369676e617475a264697066735822122017381a449597ef4922b265b1d7131ee36bc696eb6b14b71efceea2c44e79114764736f6c63430008180033", } // ContractAlignedLayerServiceManagerABI is the input ABI used to generate the binding from. @@ -254,6 +254,37 @@ func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTra return _ContractAlignedLayerServiceManager.Contract.contract.Transact(opts, method, params...) } +// AlignedAggregator is a free data retrieval call binding the contract method 0x4a5bf632. +// +// Solidity: function alignedAggregator() view returns(address) +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerCaller) AlignedAggregator(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractAlignedLayerServiceManager.contract.Call(opts, &out, "alignedAggregator") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// AlignedAggregator is a free data retrieval call binding the contract method 0x4a5bf632. +// +// Solidity: function alignedAggregator() view returns(address) +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerSession) AlignedAggregator() (common.Address, error) { + return _ContractAlignedLayerServiceManager.Contract.AlignedAggregator(&_ContractAlignedLayerServiceManager.CallOpts) +} + +// AlignedAggregator is a free data retrieval call binding the contract method 0x4a5bf632. +// +// Solidity: function alignedAggregator() view returns(address) +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerCallerSession) AlignedAggregator() (common.Address, error) { + return _ContractAlignedLayerServiceManager.Contract.AlignedAggregator(&_ContractAlignedLayerServiceManager.CallOpts) +} + // AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. // // Solidity: function avsDirectory() view returns(address) @@ -316,19 +347,52 @@ func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerCal return _ContractAlignedLayerServiceManager.Contract.BalanceOf(&_ContractAlignedLayerServiceManager.CallOpts, account) } +// BatchersBalances is a free data retrieval call binding the contract method 0xf474b520. +// +// Solidity: function batchersBalances(address ) view returns(uint256) +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerCaller) BatchersBalances(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _ContractAlignedLayerServiceManager.contract.Call(opts, &out, "batchersBalances", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BatchersBalances is a free data retrieval call binding the contract method 0xf474b520. +// +// Solidity: function batchersBalances(address ) view returns(uint256) +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerSession) BatchersBalances(arg0 common.Address) (*big.Int, error) { + return _ContractAlignedLayerServiceManager.Contract.BatchersBalances(&_ContractAlignedLayerServiceManager.CallOpts, arg0) +} + +// BatchersBalances is a free data retrieval call binding the contract method 0xf474b520. +// +// Solidity: function batchersBalances(address ) view returns(uint256) +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerCallerSession) BatchersBalances(arg0 common.Address) (*big.Int, error) { + return _ContractAlignedLayerServiceManager.Contract.BatchersBalances(&_ContractAlignedLayerServiceManager.CallOpts, arg0) +} + // BatchesState is a free data retrieval call binding the contract method 0xb099627e. // -// Solidity: function batchesState(bytes32 ) view returns(uint32 taskCreatedBlock, bool responded) +// Solidity: function batchesState(bytes32 ) view returns(uint32 taskCreatedBlock, bool responded, uint256 respondToTaskFeeLimit) func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerCaller) BatchesState(opts *bind.CallOpts, arg0 [32]byte) (struct { - TaskCreatedBlock uint32 - Responded bool + TaskCreatedBlock uint32 + Responded bool + RespondToTaskFeeLimit *big.Int }, error) { var out []interface{} err := _ContractAlignedLayerServiceManager.contract.Call(opts, &out, "batchesState", arg0) outstruct := new(struct { - TaskCreatedBlock uint32 - Responded bool + TaskCreatedBlock uint32 + Responded bool + RespondToTaskFeeLimit *big.Int }) if err != nil { return *outstruct, err @@ -336,6 +400,7 @@ func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerCal outstruct.TaskCreatedBlock = *abi.ConvertType(out[0], new(uint32)).(*uint32) outstruct.Responded = *abi.ConvertType(out[1], new(bool)).(*bool) + outstruct.RespondToTaskFeeLimit = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) return *outstruct, err @@ -343,20 +408,22 @@ func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerCal // BatchesState is a free data retrieval call binding the contract method 0xb099627e. // -// Solidity: function batchesState(bytes32 ) view returns(uint32 taskCreatedBlock, bool responded) +// Solidity: function batchesState(bytes32 ) view returns(uint32 taskCreatedBlock, bool responded, uint256 respondToTaskFeeLimit) func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerSession) BatchesState(arg0 [32]byte) (struct { - TaskCreatedBlock uint32 - Responded bool + TaskCreatedBlock uint32 + Responded bool + RespondToTaskFeeLimit *big.Int }, error) { return _ContractAlignedLayerServiceManager.Contract.BatchesState(&_ContractAlignedLayerServiceManager.CallOpts, arg0) } // BatchesState is a free data retrieval call binding the contract method 0xb099627e. // -// Solidity: function batchesState(bytes32 ) view returns(uint32 taskCreatedBlock, bool responded) +// Solidity: function batchesState(bytes32 ) view returns(uint32 taskCreatedBlock, bool responded, uint256 respondToTaskFeeLimit) func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerCallerSession) BatchesState(arg0 [32]byte) (struct { - TaskCreatedBlock uint32 - Responded bool + TaskCreatedBlock uint32 + Responded bool + RespondToTaskFeeLimit *big.Int }, error) { return _ContractAlignedLayerServiceManager.Contract.BatchesState(&_ContractAlignedLayerServiceManager.CallOpts, arg0) } @@ -779,6 +846,37 @@ func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerCal return _ContractAlignedLayerServiceManager.Contract.VerifyBatchInclusion(&_ContractAlignedLayerServiceManager.CallOpts, proofCommitment, pubInputCommitment, provingSystemAuxDataCommitment, proofGeneratorAddr, batchMerkleRoot, merkleProof, verificationDataBatchIndex, senderAddress) } +// VerifyBatchInclusion0 is a free data retrieval call binding the contract method 0xfa534dc0. +// +// Solidity: function verifyBatchInclusion(bytes32 proofCommitment, bytes32 pubInputCommitment, bytes32 provingSystemAuxDataCommitment, bytes20 proofGeneratorAddr, bytes32 batchMerkleRoot, bytes merkleProof, uint256 verificationDataBatchIndex) view returns(bool) +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerCaller) VerifyBatchInclusion0(opts *bind.CallOpts, proofCommitment [32]byte, pubInputCommitment [32]byte, provingSystemAuxDataCommitment [32]byte, proofGeneratorAddr [20]byte, batchMerkleRoot [32]byte, merkleProof []byte, verificationDataBatchIndex *big.Int) (bool, error) { + var out []interface{} + err := _ContractAlignedLayerServiceManager.contract.Call(opts, &out, "verifyBatchInclusion0", proofCommitment, pubInputCommitment, provingSystemAuxDataCommitment, proofGeneratorAddr, batchMerkleRoot, merkleProof, verificationDataBatchIndex) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// VerifyBatchInclusion0 is a free data retrieval call binding the contract method 0xfa534dc0. +// +// Solidity: function verifyBatchInclusion(bytes32 proofCommitment, bytes32 pubInputCommitment, bytes32 provingSystemAuxDataCommitment, bytes20 proofGeneratorAddr, bytes32 batchMerkleRoot, bytes merkleProof, uint256 verificationDataBatchIndex) view returns(bool) +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerSession) VerifyBatchInclusion0(proofCommitment [32]byte, pubInputCommitment [32]byte, provingSystemAuxDataCommitment [32]byte, proofGeneratorAddr [20]byte, batchMerkleRoot [32]byte, merkleProof []byte, verificationDataBatchIndex *big.Int) (bool, error) { + return _ContractAlignedLayerServiceManager.Contract.VerifyBatchInclusion0(&_ContractAlignedLayerServiceManager.CallOpts, proofCommitment, pubInputCommitment, provingSystemAuxDataCommitment, proofGeneratorAddr, batchMerkleRoot, merkleProof, verificationDataBatchIndex) +} + +// VerifyBatchInclusion0 is a free data retrieval call binding the contract method 0xfa534dc0. +// +// Solidity: function verifyBatchInclusion(bytes32 proofCommitment, bytes32 pubInputCommitment, bytes32 provingSystemAuxDataCommitment, bytes20 proofGeneratorAddr, bytes32 batchMerkleRoot, bytes merkleProof, uint256 verificationDataBatchIndex) view returns(bool) +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerCallerSession) VerifyBatchInclusion0(proofCommitment [32]byte, pubInputCommitment [32]byte, provingSystemAuxDataCommitment [32]byte, proofGeneratorAddr [20]byte, batchMerkleRoot [32]byte, merkleProof []byte, verificationDataBatchIndex *big.Int) (bool, error) { + return _ContractAlignedLayerServiceManager.Contract.VerifyBatchInclusion0(&_ContractAlignedLayerServiceManager.CallOpts, proofCommitment, pubInputCommitment, provingSystemAuxDataCommitment, proofGeneratorAddr, batchMerkleRoot, merkleProof, verificationDataBatchIndex) +} + // CreateAVSRewardsSubmission is a paid mutator transaction binding the contract method 0xfce36c7d. // // Solidity: function createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() @@ -800,25 +898,46 @@ func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTra return _ContractAlignedLayerServiceManager.Contract.CreateAVSRewardsSubmission(&_ContractAlignedLayerServiceManager.TransactOpts, rewardsSubmissions) } -// CreateNewTask is a paid mutator transaction binding the contract method 0x5c008994. +// CreateNewTask is a paid mutator transaction binding the contract method 0xd66eaabd. // -// Solidity: function createNewTask(bytes32 batchMerkleRoot, string batchDataPointer) payable returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactor) CreateNewTask(opts *bind.TransactOpts, batchMerkleRoot [32]byte, batchDataPointer string) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.contract.Transact(opts, "createNewTask", batchMerkleRoot, batchDataPointer) +// Solidity: function createNewTask(bytes32 batchMerkleRoot, string batchDataPointer, uint256 respondToTaskFeeLimit) payable returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactor) CreateNewTask(opts *bind.TransactOpts, batchMerkleRoot [32]byte, batchDataPointer string, respondToTaskFeeLimit *big.Int) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.contract.Transact(opts, "createNewTask", batchMerkleRoot, batchDataPointer, respondToTaskFeeLimit) } -// CreateNewTask is a paid mutator transaction binding the contract method 0x5c008994. +// CreateNewTask is a paid mutator transaction binding the contract method 0xd66eaabd. // -// Solidity: function createNewTask(bytes32 batchMerkleRoot, string batchDataPointer) payable returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerSession) CreateNewTask(batchMerkleRoot [32]byte, batchDataPointer string) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.Contract.CreateNewTask(&_ContractAlignedLayerServiceManager.TransactOpts, batchMerkleRoot, batchDataPointer) +// Solidity: function createNewTask(bytes32 batchMerkleRoot, string batchDataPointer, uint256 respondToTaskFeeLimit) payable returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerSession) CreateNewTask(batchMerkleRoot [32]byte, batchDataPointer string, respondToTaskFeeLimit *big.Int) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.Contract.CreateNewTask(&_ContractAlignedLayerServiceManager.TransactOpts, batchMerkleRoot, batchDataPointer, respondToTaskFeeLimit) } -// CreateNewTask is a paid mutator transaction binding the contract method 0x5c008994. +// CreateNewTask is a paid mutator transaction binding the contract method 0xd66eaabd. // -// Solidity: function createNewTask(bytes32 batchMerkleRoot, string batchDataPointer) payable returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactorSession) CreateNewTask(batchMerkleRoot [32]byte, batchDataPointer string) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.Contract.CreateNewTask(&_ContractAlignedLayerServiceManager.TransactOpts, batchMerkleRoot, batchDataPointer) +// Solidity: function createNewTask(bytes32 batchMerkleRoot, string batchDataPointer, uint256 respondToTaskFeeLimit) payable returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactorSession) CreateNewTask(batchMerkleRoot [32]byte, batchDataPointer string, respondToTaskFeeLimit *big.Int) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.Contract.CreateNewTask(&_ContractAlignedLayerServiceManager.TransactOpts, batchMerkleRoot, batchDataPointer, respondToTaskFeeLimit) +} + +// DepositToBatcher is a paid mutator transaction binding the contract method 0x4223d551. +// +// Solidity: function depositToBatcher(address account) payable returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactor) DepositToBatcher(opts *bind.TransactOpts, account common.Address) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.contract.Transact(opts, "depositToBatcher", account) +} + +// DepositToBatcher is a paid mutator transaction binding the contract method 0x4223d551. +// +// Solidity: function depositToBatcher(address account) payable returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerSession) DepositToBatcher(account common.Address) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.Contract.DepositToBatcher(&_ContractAlignedLayerServiceManager.TransactOpts, account) +} + +// DepositToBatcher is a paid mutator transaction binding the contract method 0x4223d551. +// +// Solidity: function depositToBatcher(address account) payable returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactorSession) DepositToBatcher(account common.Address) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.Contract.DepositToBatcher(&_ContractAlignedLayerServiceManager.TransactOpts, account) } // DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. @@ -842,25 +961,46 @@ func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTra return _ContractAlignedLayerServiceManager.Contract.DeregisterOperatorFromAVS(&_ContractAlignedLayerServiceManager.TransactOpts, operator) } -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. +// +// Solidity: function initialize(address _initialOwner, address _rewardsInitiator, address _alignedAggregator) returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactor) Initialize(opts *bind.TransactOpts, _initialOwner common.Address, _rewardsInitiator common.Address, _alignedAggregator common.Address) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.contract.Transact(opts, "initialize", _initialOwner, _rewardsInitiator, _alignedAggregator) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. // -// Solidity: function initialize(address _initialOwner, address _rewardsInitiator) returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactor) Initialize(opts *bind.TransactOpts, _initialOwner common.Address, _rewardsInitiator common.Address) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.contract.Transact(opts, "initialize", _initialOwner, _rewardsInitiator) +// Solidity: function initialize(address _initialOwner, address _rewardsInitiator, address _alignedAggregator) returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerSession) Initialize(_initialOwner common.Address, _rewardsInitiator common.Address, _alignedAggregator common.Address) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.Contract.Initialize(&_ContractAlignedLayerServiceManager.TransactOpts, _initialOwner, _rewardsInitiator, _alignedAggregator) } -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. // -// Solidity: function initialize(address _initialOwner, address _rewardsInitiator) returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerSession) Initialize(_initialOwner common.Address, _rewardsInitiator common.Address) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.Contract.Initialize(&_ContractAlignedLayerServiceManager.TransactOpts, _initialOwner, _rewardsInitiator) +// Solidity: function initialize(address _initialOwner, address _rewardsInitiator, address _alignedAggregator) returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactorSession) Initialize(_initialOwner common.Address, _rewardsInitiator common.Address, _alignedAggregator common.Address) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.Contract.Initialize(&_ContractAlignedLayerServiceManager.TransactOpts, _initialOwner, _rewardsInitiator, _alignedAggregator) } -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// InitializeAggregator is a paid mutator transaction binding the contract method 0x800fb61f. // -// Solidity: function initialize(address _initialOwner, address _rewardsInitiator) returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactorSession) Initialize(_initialOwner common.Address, _rewardsInitiator common.Address) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.Contract.Initialize(&_ContractAlignedLayerServiceManager.TransactOpts, _initialOwner, _rewardsInitiator) +// Solidity: function initializeAggregator(address _alignedAggregator) returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactor) InitializeAggregator(opts *bind.TransactOpts, _alignedAggregator common.Address) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.contract.Transact(opts, "initializeAggregator", _alignedAggregator) +} + +// InitializeAggregator is a paid mutator transaction binding the contract method 0x800fb61f. +// +// Solidity: function initializeAggregator(address _alignedAggregator) returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerSession) InitializeAggregator(_alignedAggregator common.Address) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.Contract.InitializeAggregator(&_ContractAlignedLayerServiceManager.TransactOpts, _alignedAggregator) +} + +// InitializeAggregator is a paid mutator transaction binding the contract method 0x800fb61f. +// +// Solidity: function initializeAggregator(address _alignedAggregator) returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactorSession) InitializeAggregator(_alignedAggregator common.Address) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.Contract.InitializeAggregator(&_ContractAlignedLayerServiceManager.TransactOpts, _alignedAggregator) } // RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. @@ -905,27 +1045,6 @@ func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTra return _ContractAlignedLayerServiceManager.Contract.RenounceOwnership(&_ContractAlignedLayerServiceManager.TransactOpts) } -// RespondToTask is a paid mutator transaction binding the contract method 0x2dd94eba. -// -// Solidity: function respondToTask(bytes32 batchMerkleRoot, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) nonSignerStakesAndSignature) returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactor) RespondToTask(opts *bind.TransactOpts, batchMerkleRoot [32]byte, nonSignerStakesAndSignature IBLSSignatureCheckerNonSignerStakesAndSignature) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.contract.Transact(opts, "respondToTask", batchMerkleRoot, nonSignerStakesAndSignature) -} - -// RespondToTask is a paid mutator transaction binding the contract method 0x2dd94eba. -// -// Solidity: function respondToTask(bytes32 batchMerkleRoot, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) nonSignerStakesAndSignature) returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerSession) RespondToTask(batchMerkleRoot [32]byte, nonSignerStakesAndSignature IBLSSignatureCheckerNonSignerStakesAndSignature) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.Contract.RespondToTask(&_ContractAlignedLayerServiceManager.TransactOpts, batchMerkleRoot, nonSignerStakesAndSignature) -} - -// RespondToTask is a paid mutator transaction binding the contract method 0x2dd94eba. -// -// Solidity: function respondToTask(bytes32 batchMerkleRoot, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) nonSignerStakesAndSignature) returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactorSession) RespondToTask(batchMerkleRoot [32]byte, nonSignerStakesAndSignature IBLSSignatureCheckerNonSignerStakesAndSignature) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.Contract.RespondToTask(&_ContractAlignedLayerServiceManager.TransactOpts, batchMerkleRoot, nonSignerStakesAndSignature) -} - // RespondToTaskV2 is a paid mutator transaction binding the contract method 0xab21739a. // // Solidity: function respondToTaskV2(bytes32 batchMerkleRoot, address senderAddress, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) nonSignerStakesAndSignature) returns() @@ -947,6 +1066,27 @@ func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTra return _ContractAlignedLayerServiceManager.Contract.RespondToTaskV2(&_ContractAlignedLayerServiceManager.TransactOpts, batchMerkleRoot, senderAddress, nonSignerStakesAndSignature) } +// SetAggregator is a paid mutator transaction binding the contract method 0xf9120af6. +// +// Solidity: function setAggregator(address _alignedAggregator) returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactor) SetAggregator(opts *bind.TransactOpts, _alignedAggregator common.Address) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.contract.Transact(opts, "setAggregator", _alignedAggregator) +} + +// SetAggregator is a paid mutator transaction binding the contract method 0xf9120af6. +// +// Solidity: function setAggregator(address _alignedAggregator) returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerSession) SetAggregator(_alignedAggregator common.Address) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.Contract.SetAggregator(&_ContractAlignedLayerServiceManager.TransactOpts, _alignedAggregator) +} + +// SetAggregator is a paid mutator transaction binding the contract method 0xf9120af6. +// +// Solidity: function setAggregator(address _alignedAggregator) returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactorSession) SetAggregator(_alignedAggregator common.Address) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.Contract.SetAggregator(&_ContractAlignedLayerServiceManager.TransactOpts, _alignedAggregator) +} + // SetRewardsInitiator is a paid mutator transaction binding the contract method 0x3bc28c8c. // // Solidity: function setRewardsInitiator(address newRewardsInitiator) returns() @@ -1031,6 +1171,27 @@ func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTra return _ContractAlignedLayerServiceManager.Contract.UpdateAVSMetadataURI(&_ContractAlignedLayerServiceManager.TransactOpts, _metadataURI) } +// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// +// Solidity: function withdraw(uint256 amount) returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactor) Withdraw(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.contract.Transact(opts, "withdraw", amount) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// +// Solidity: function withdraw(uint256 amount) returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerSession) Withdraw(amount *big.Int) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.Contract.Withdraw(&_ContractAlignedLayerServiceManager.TransactOpts, amount) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// +// Solidity: function withdraw(uint256 amount) returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactorSession) Withdraw(amount *big.Int) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.Contract.Withdraw(&_ContractAlignedLayerServiceManager.TransactOpts, amount) +} + // Receive is a paid mutator transaction binding the contract receive function. // // Solidity: receive() payable returns() @@ -1476,9 +1637,9 @@ func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerFil return event, nil } -// ContractAlignedLayerServiceManagerNewBatchIterator is returned from FilterNewBatch and is used to iterate over the raw logs and unpacked data for NewBatch events raised by the ContractAlignedLayerServiceManager contract. -type ContractAlignedLayerServiceManagerNewBatchIterator struct { - Event *ContractAlignedLayerServiceManagerNewBatch // Event containing the contract specifics and raw log +// ContractAlignedLayerServiceManagerNewBatchV2Iterator is returned from FilterNewBatchV2 and is used to iterate over the raw logs and unpacked data for NewBatchV2 events raised by the ContractAlignedLayerServiceManager contract. +type ContractAlignedLayerServiceManagerNewBatchV2Iterator struct { + Event *ContractAlignedLayerServiceManagerNewBatchV2 // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1492,7 +1653,7 @@ type ContractAlignedLayerServiceManagerNewBatchIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *ContractAlignedLayerServiceManagerNewBatchIterator) Next() bool { +func (it *ContractAlignedLayerServiceManagerNewBatchV2Iterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1501,7 +1662,7 @@ func (it *ContractAlignedLayerServiceManagerNewBatchIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ContractAlignedLayerServiceManagerNewBatch) + it.Event = new(ContractAlignedLayerServiceManagerNewBatchV2) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1516,7 +1677,7 @@ func (it *ContractAlignedLayerServiceManagerNewBatchIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ContractAlignedLayerServiceManagerNewBatch) + it.Event = new(ContractAlignedLayerServiceManagerNewBatchV2) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1532,53 +1693,54 @@ func (it *ContractAlignedLayerServiceManagerNewBatchIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractAlignedLayerServiceManagerNewBatchIterator) Error() error { +func (it *ContractAlignedLayerServiceManagerNewBatchV2Iterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ContractAlignedLayerServiceManagerNewBatchIterator) Close() error { +func (it *ContractAlignedLayerServiceManagerNewBatchV2Iterator) Close() error { it.sub.Unsubscribe() return nil } -// ContractAlignedLayerServiceManagerNewBatch represents a NewBatch event raised by the ContractAlignedLayerServiceManager contract. -type ContractAlignedLayerServiceManagerNewBatch struct { +// ContractAlignedLayerServiceManagerNewBatchV2 represents a NewBatchV2 event raised by the ContractAlignedLayerServiceManager contract. +type ContractAlignedLayerServiceManagerNewBatchV2 struct { BatchMerkleRoot [32]byte + SenderAddress common.Address TaskCreatedBlock uint32 BatchDataPointer string Raw types.Log // Blockchain specific contextual infos } -// FilterNewBatch is a free log retrieval operation binding the contract event 0x1871c33134a542e0ab9facf7013d27b9ed95e64d299e9919ee091c9cfcb19fa5. +// FilterNewBatchV2 is a free log retrieval operation binding the contract event 0x130d3e81af62e03ed6fff5e3bb343695ec513892cfad24d286486745dcc61437. // -// Solidity: event NewBatch(bytes32 indexed batchMerkleRoot, uint32 taskCreatedBlock, string batchDataPointer) -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerFilterer) FilterNewBatch(opts *bind.FilterOpts, batchMerkleRoot [][32]byte) (*ContractAlignedLayerServiceManagerNewBatchIterator, error) { +// Solidity: event NewBatchV2(bytes32 indexed batchMerkleRoot, address senderAddress, uint32 taskCreatedBlock, string batchDataPointer) +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerFilterer) FilterNewBatchV2(opts *bind.FilterOpts, batchMerkleRoot [][32]byte) (*ContractAlignedLayerServiceManagerNewBatchV2Iterator, error) { var batchMerkleRootRule []interface{} for _, batchMerkleRootItem := range batchMerkleRoot { batchMerkleRootRule = append(batchMerkleRootRule, batchMerkleRootItem) } - logs, sub, err := _ContractAlignedLayerServiceManager.contract.FilterLogs(opts, "NewBatch", batchMerkleRootRule) + logs, sub, err := _ContractAlignedLayerServiceManager.contract.FilterLogs(opts, "NewBatchV2", batchMerkleRootRule) if err != nil { return nil, err } - return &ContractAlignedLayerServiceManagerNewBatchIterator{contract: _ContractAlignedLayerServiceManager.contract, event: "NewBatch", logs: logs, sub: sub}, nil + return &ContractAlignedLayerServiceManagerNewBatchV2Iterator{contract: _ContractAlignedLayerServiceManager.contract, event: "NewBatchV2", logs: logs, sub: sub}, nil } -// WatchNewBatch is a free log subscription operation binding the contract event 0x1871c33134a542e0ab9facf7013d27b9ed95e64d299e9919ee091c9cfcb19fa5. +// WatchNewBatchV2 is a free log subscription operation binding the contract event 0x130d3e81af62e03ed6fff5e3bb343695ec513892cfad24d286486745dcc61437. // -// Solidity: event NewBatch(bytes32 indexed batchMerkleRoot, uint32 taskCreatedBlock, string batchDataPointer) -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerFilterer) WatchNewBatch(opts *bind.WatchOpts, sink chan<- *ContractAlignedLayerServiceManagerNewBatch, batchMerkleRoot [][32]byte) (event.Subscription, error) { +// Solidity: event NewBatchV2(bytes32 indexed batchMerkleRoot, address senderAddress, uint32 taskCreatedBlock, string batchDataPointer) +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerFilterer) WatchNewBatchV2(opts *bind.WatchOpts, sink chan<- *ContractAlignedLayerServiceManagerNewBatchV2, batchMerkleRoot [][32]byte) (event.Subscription, error) { var batchMerkleRootRule []interface{} for _, batchMerkleRootItem := range batchMerkleRoot { batchMerkleRootRule = append(batchMerkleRootRule, batchMerkleRootItem) } - logs, sub, err := _ContractAlignedLayerServiceManager.contract.WatchLogs(opts, "NewBatch", batchMerkleRootRule) + logs, sub, err := _ContractAlignedLayerServiceManager.contract.WatchLogs(opts, "NewBatchV2", batchMerkleRootRule) if err != nil { return nil, err } @@ -1588,8 +1750,8 @@ func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerFil select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ContractAlignedLayerServiceManagerNewBatch) - if err := _ContractAlignedLayerServiceManager.contract.UnpackLog(event, "NewBatch", log); err != nil { + event := new(ContractAlignedLayerServiceManagerNewBatchV2) + if err := _ContractAlignedLayerServiceManager.contract.UnpackLog(event, "NewBatchV2", log); err != nil { return err } event.Raw = log @@ -1610,21 +1772,21 @@ func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerFil }), nil } -// ParseNewBatch is a log parse operation binding the contract event 0x1871c33134a542e0ab9facf7013d27b9ed95e64d299e9919ee091c9cfcb19fa5. +// ParseNewBatchV2 is a log parse operation binding the contract event 0x130d3e81af62e03ed6fff5e3bb343695ec513892cfad24d286486745dcc61437. // -// Solidity: event NewBatch(bytes32 indexed batchMerkleRoot, uint32 taskCreatedBlock, string batchDataPointer) -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerFilterer) ParseNewBatch(log types.Log) (*ContractAlignedLayerServiceManagerNewBatch, error) { - event := new(ContractAlignedLayerServiceManagerNewBatch) - if err := _ContractAlignedLayerServiceManager.contract.UnpackLog(event, "NewBatch", log); err != nil { +// Solidity: event NewBatchV2(bytes32 indexed batchMerkleRoot, address senderAddress, uint32 taskCreatedBlock, string batchDataPointer) +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerFilterer) ParseNewBatchV2(log types.Log) (*ContractAlignedLayerServiceManagerNewBatchV2, error) { + event := new(ContractAlignedLayerServiceManagerNewBatchV2) + if err := _ContractAlignedLayerServiceManager.contract.UnpackLog(event, "NewBatchV2", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ContractAlignedLayerServiceManagerNewBatchV2Iterator is returned from FilterNewBatchV2 and is used to iterate over the raw logs and unpacked data for NewBatchV2 events raised by the ContractAlignedLayerServiceManager contract. -type ContractAlignedLayerServiceManagerNewBatchV2Iterator struct { - Event *ContractAlignedLayerServiceManagerNewBatchV2 // Event containing the contract specifics and raw log +// ContractAlignedLayerServiceManagerNewBatchV3Iterator is returned from FilterNewBatchV3 and is used to iterate over the raw logs and unpacked data for NewBatchV3 events raised by the ContractAlignedLayerServiceManager contract. +type ContractAlignedLayerServiceManagerNewBatchV3Iterator struct { + Event *ContractAlignedLayerServiceManagerNewBatchV3 // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1638,7 +1800,7 @@ type ContractAlignedLayerServiceManagerNewBatchV2Iterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *ContractAlignedLayerServiceManagerNewBatchV2Iterator) Next() bool { +func (it *ContractAlignedLayerServiceManagerNewBatchV3Iterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1647,7 +1809,7 @@ func (it *ContractAlignedLayerServiceManagerNewBatchV2Iterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ContractAlignedLayerServiceManagerNewBatchV2) + it.Event = new(ContractAlignedLayerServiceManagerNewBatchV3) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1662,7 +1824,7 @@ func (it *ContractAlignedLayerServiceManagerNewBatchV2Iterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ContractAlignedLayerServiceManagerNewBatchV2) + it.Event = new(ContractAlignedLayerServiceManagerNewBatchV3) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1678,54 +1840,55 @@ func (it *ContractAlignedLayerServiceManagerNewBatchV2Iterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractAlignedLayerServiceManagerNewBatchV2Iterator) Error() error { +func (it *ContractAlignedLayerServiceManagerNewBatchV3Iterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ContractAlignedLayerServiceManagerNewBatchV2Iterator) Close() error { +func (it *ContractAlignedLayerServiceManagerNewBatchV3Iterator) Close() error { it.sub.Unsubscribe() return nil } -// ContractAlignedLayerServiceManagerNewBatchV2 represents a NewBatchV2 event raised by the ContractAlignedLayerServiceManager contract. -type ContractAlignedLayerServiceManagerNewBatchV2 struct { - BatchMerkleRoot [32]byte - SenderAddress common.Address - TaskCreatedBlock uint32 - BatchDataPointer string - Raw types.Log // Blockchain specific contextual infos +// ContractAlignedLayerServiceManagerNewBatchV3 represents a NewBatchV3 event raised by the ContractAlignedLayerServiceManager contract. +type ContractAlignedLayerServiceManagerNewBatchV3 struct { + BatchMerkleRoot [32]byte + SenderAddress common.Address + TaskCreatedBlock uint32 + BatchDataPointer string + RespondToTaskFeeLimit *big.Int + Raw types.Log // Blockchain specific contextual infos } -// FilterNewBatchV2 is a free log retrieval operation binding the contract event 0x130d3e81af62e03ed6fff5e3bb343695ec513892cfad24d286486745dcc61437. +// FilterNewBatchV3 is a free log retrieval operation binding the contract event 0x8801fc966deb2c8f563a103c35c9e80740585c292cd97518587e6e7927e6af55. // -// Solidity: event NewBatchV2(bytes32 indexed batchMerkleRoot, address senderAddress, uint32 taskCreatedBlock, string batchDataPointer) -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerFilterer) FilterNewBatchV2(opts *bind.FilterOpts, batchMerkleRoot [][32]byte) (*ContractAlignedLayerServiceManagerNewBatchV2Iterator, error) { +// Solidity: event NewBatchV3(bytes32 indexed batchMerkleRoot, address senderAddress, uint32 taskCreatedBlock, string batchDataPointer, uint256 respondToTaskFeeLimit) +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerFilterer) FilterNewBatchV3(opts *bind.FilterOpts, batchMerkleRoot [][32]byte) (*ContractAlignedLayerServiceManagerNewBatchV3Iterator, error) { var batchMerkleRootRule []interface{} for _, batchMerkleRootItem := range batchMerkleRoot { batchMerkleRootRule = append(batchMerkleRootRule, batchMerkleRootItem) } - logs, sub, err := _ContractAlignedLayerServiceManager.contract.FilterLogs(opts, "NewBatchV2", batchMerkleRootRule) + logs, sub, err := _ContractAlignedLayerServiceManager.contract.FilterLogs(opts, "NewBatchV3", batchMerkleRootRule) if err != nil { return nil, err } - return &ContractAlignedLayerServiceManagerNewBatchV2Iterator{contract: _ContractAlignedLayerServiceManager.contract, event: "NewBatchV2", logs: logs, sub: sub}, nil + return &ContractAlignedLayerServiceManagerNewBatchV3Iterator{contract: _ContractAlignedLayerServiceManager.contract, event: "NewBatchV3", logs: logs, sub: sub}, nil } -// WatchNewBatchV2 is a free log subscription operation binding the contract event 0x130d3e81af62e03ed6fff5e3bb343695ec513892cfad24d286486745dcc61437. +// WatchNewBatchV3 is a free log subscription operation binding the contract event 0x8801fc966deb2c8f563a103c35c9e80740585c292cd97518587e6e7927e6af55. // -// Solidity: event NewBatchV2(bytes32 indexed batchMerkleRoot, address senderAddress, uint32 taskCreatedBlock, string batchDataPointer) -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerFilterer) WatchNewBatchV2(opts *bind.WatchOpts, sink chan<- *ContractAlignedLayerServiceManagerNewBatchV2, batchMerkleRoot [][32]byte) (event.Subscription, error) { +// Solidity: event NewBatchV3(bytes32 indexed batchMerkleRoot, address senderAddress, uint32 taskCreatedBlock, string batchDataPointer, uint256 respondToTaskFeeLimit) +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerFilterer) WatchNewBatchV3(opts *bind.WatchOpts, sink chan<- *ContractAlignedLayerServiceManagerNewBatchV3, batchMerkleRoot [][32]byte) (event.Subscription, error) { var batchMerkleRootRule []interface{} for _, batchMerkleRootItem := range batchMerkleRoot { batchMerkleRootRule = append(batchMerkleRootRule, batchMerkleRootItem) } - logs, sub, err := _ContractAlignedLayerServiceManager.contract.WatchLogs(opts, "NewBatchV2", batchMerkleRootRule) + logs, sub, err := _ContractAlignedLayerServiceManager.contract.WatchLogs(opts, "NewBatchV3", batchMerkleRootRule) if err != nil { return nil, err } @@ -1735,8 +1898,8 @@ func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerFil select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ContractAlignedLayerServiceManagerNewBatchV2) - if err := _ContractAlignedLayerServiceManager.contract.UnpackLog(event, "NewBatchV2", log); err != nil { + event := new(ContractAlignedLayerServiceManagerNewBatchV3) + if err := _ContractAlignedLayerServiceManager.contract.UnpackLog(event, "NewBatchV3", log); err != nil { return err } event.Raw = log @@ -1757,12 +1920,12 @@ func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerFil }), nil } -// ParseNewBatchV2 is a log parse operation binding the contract event 0x130d3e81af62e03ed6fff5e3bb343695ec513892cfad24d286486745dcc61437. +// ParseNewBatchV3 is a log parse operation binding the contract event 0x8801fc966deb2c8f563a103c35c9e80740585c292cd97518587e6e7927e6af55. // -// Solidity: event NewBatchV2(bytes32 indexed batchMerkleRoot, address senderAddress, uint32 taskCreatedBlock, string batchDataPointer) -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerFilterer) ParseNewBatchV2(log types.Log) (*ContractAlignedLayerServiceManagerNewBatchV2, error) { - event := new(ContractAlignedLayerServiceManagerNewBatchV2) - if err := _ContractAlignedLayerServiceManager.contract.UnpackLog(event, "NewBatchV2", log); err != nil { +// Solidity: event NewBatchV3(bytes32 indexed batchMerkleRoot, address senderAddress, uint32 taskCreatedBlock, string batchDataPointer, uint256 respondToTaskFeeLimit) +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerFilterer) ParseNewBatchV3(log types.Log) (*ContractAlignedLayerServiceManagerNewBatchV3, error) { + event := new(ContractAlignedLayerServiceManagerNewBatchV3) + if err := _ContractAlignedLayerServiceManager.contract.UnpackLog(event, "NewBatchV3", log); err != nil { return nil, err } event.Raw = log diff --git a/contracts/bindings/ERC20Mock/binding.go b/contracts/bindings/ERC20Mock/binding.go index 6f9d0fd24..237b5aa71 100644 --- a/contracts/bindings/ERC20Mock/binding.go +++ b/contracts/bindings/ERC20Mock/binding.go @@ -32,7 +32,7 @@ var ( // ContractERC20MockMetaData contains all meta data concerning the ContractERC20Mock contract. var ContractERC20MockMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"allowance\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"approve\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"balanceOf\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"mint\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"totalSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transfer\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferFrom\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Approval\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"spender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Transfer\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x608060405234801561001057600080fd5b50610527806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806340c10f191161005b57806340c10f19146100d257806370a08231146100e7578063a9059cbb14610110578063dd62ed3e1461012357600080fd5b8063095ea7b31461008257806318160ddd146100ad57806323b872dd146100bf575b600080fd5b610098610090366004610410565b600192915050565b60405190151581526020015b60405180910390f35b6002545b6040519081526020016100a4565b6100986100cd36600461043a565b61015c565b6100e56100e0366004610410565b610173565b005b6100b16100f5366004610476565b6001600160a01b031660009081526020819052604090205490565b61009861011e366004610410565b610181565b6100b1610131366004610498565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600061016984848461018b565b5060019392505050565b61017d8282610335565b5050565b6000336101698185855b6001600160a01b0383166101f45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084015b60405180910390fd5b6001600160a01b0382166102565760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016101eb565b6001600160a01b0383166000908152602081905260409020548111156102cd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016101eb565b6001600160a01b038381166000818152602081815260408083208054879003905593861680835291849020805486019055925184815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b03821661038b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016101eb565b806002600082825461039d91906104cb565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b80356001600160a01b038116811461040b57600080fd5b919050565b6000806040838503121561042357600080fd5b61042c836103f4565b946020939093013593505050565b60008060006060848603121561044f57600080fd5b610458846103f4565b9250610466602085016103f4565b9150604084013590509250925092565b60006020828403121561048857600080fd5b610491826103f4565b9392505050565b600080604083850312156104ab57600080fd5b6104b4836103f4565b91506104c2602084016103f4565b90509250929050565b600082198211156104ec57634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220adda763858b2ee86f27467db7ec8b893c350cd0ddfa605ad6608601ca5e1cf3664736f6c634300080c0033", + Bin: "0x608060405234801561001057600080fd5b50610528806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806340c10f191161005b57806340c10f19146100cf57806370a08231146100e4578063a9059cbb1461010d578063dd62ed3e1461012057600080fd5b8063095ea7b31461008257806318160ddd146100aa57806323b872dd146100bc575b600080fd5b610095610090366004610416565b610159565b60405190151581526020015b60405180910390f35b6002545b6040519081526020016100a1565b6100956100ca366004610440565b610162565b6100e26100dd366004610416565b610179565b005b6100ae6100f236600461047c565b6001600160a01b031660009081526020819052604090205490565b61009561011b366004610416565b610187565b6100ae61012e36600461049e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60015b92915050565b600061016f848484610191565b5060019392505050565b610183828261033b565b5050565b60003361016f8185855b6001600160a01b0383166101fa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084015b60405180910390fd5b6001600160a01b03821661025c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016101f1565b6001600160a01b0383166000908152602081905260409020548111156102d35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016101f1565b6001600160a01b038381166000818152602081815260408083208054879003905593861680835291849020805486019055925184815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b0382166103915760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016101f1565b80600260008282546103a391906104d1565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b80356001600160a01b038116811461041157600080fd5b919050565b6000806040838503121561042957600080fd5b610432836103fa565b946020939093013593505050565b60008060006060848603121561045557600080fd5b61045e846103fa565b925061046c602085016103fa565b9150604084013590509250925092565b60006020828403121561048e57600080fd5b610497826103fa565b9392505050565b600080604083850312156104b157600080fd5b6104ba836103fa565b91506104c8602084016103fa565b90509250929050565b8082018082111561015c57634e487b7160e01b600052601160045260246000fdfea264697066735822122020d7e8b980aa0c2b46b040d513e5ae1f916c9610cc2589a32d3485f141c4d93e64736f6c63430008180033", } // ContractERC20MockABI is the input ABI used to generate the binding from. diff --git a/contracts/lib/openzeppelin-contracts b/contracts/lib/openzeppelin-contracts new file mode 160000 index 000000000..dbb6104ce --- /dev/null +++ b/contracts/lib/openzeppelin-contracts @@ -0,0 +1 @@ +Subproject commit dbb6104ce834628e473d2173bbc9d47f81a9eec3 diff --git a/contracts/lib/openzeppelin-contracts-upgradeable b/contracts/lib/openzeppelin-contracts-upgradeable new file mode 160000 index 000000000..723f8cab0 --- /dev/null +++ b/contracts/lib/openzeppelin-contracts-upgradeable @@ -0,0 +1 @@ +Subproject commit 723f8cab09cdae1aca9ec9cc1cfa040c2d4b06c1 diff --git a/contracts/package-lock.json b/contracts/package-lock.json new file mode 100644 index 000000000..7f6aa089e --- /dev/null +++ b/contracts/package-lock.json @@ -0,0 +1,1311 @@ +{ + "name": "contracts", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "solhint": "^5.0.3" + } + }, + "node_modules/@solidity-parser/parser": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.18.0.tgz", + "integrity": "sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv/node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/ajv/node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/ajv/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ajv/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ajv/node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/antlr4": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.13.2.tgz", + "integrity": "sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=16" + } + }, + "node_modules/ast-parents": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/ast-parents/-/ast-parents-0.0.1.tgz", + "integrity": "sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/chalk/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/chalk/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cosmiconfig/node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cosmiconfig/node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cosmiconfig/node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cosmiconfig/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cosmiconfig/node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cosmiconfig/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cosmiconfig/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/cosmiconfig/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig/node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/cosmiconfig/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/cosmiconfig/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/cosmiconfig/node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cosmiconfig/node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig/node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig/node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig/node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cosmiconfig/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cosmiconfig/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cosmiconfig/node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true, + "license": "ISC" + }, + "node_modules/cosmiconfig/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/cosmiconfig/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/glob/node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/glob/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/glob/node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/glob/node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js-yaml/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/latest-version": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", + "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "package-json": "^8.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/latest-version/node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/latest-version/node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/latest-version/node_modules/@pnpm/npm-conf": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", + "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/latest-version/node_modules/@sindresorhus/is": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", + "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/latest-version/node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/latest-version/node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "dev": true, + "license": "MIT" + }, + "node_modules/latest-version/node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/latest-version/node_modules/cacheable-request": { + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", + "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "^4.0.2", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.3", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/latest-version/node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/latest-version/node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/latest-version/node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/latest-version/node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/latest-version/node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/latest-version/node_modules/form-data-encoder": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.17" + } + }, + "node_modules/latest-version/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/latest-version/node_modules/got": { + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", + "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/latest-version/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true, + "license": "ISC" + }, + "node_modules/latest-version/node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/latest-version/node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/latest-version/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, + "node_modules/latest-version/node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/latest-version/node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/latest-version/node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/latest-version/node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/latest-version/node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/latest-version/node_modules/normalize-url": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", + "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/latest-version/node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/latest-version/node_modules/package-json": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", + "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", + "dev": true, + "license": "MIT", + "dependencies": { + "got": "^12.1.0", + "registry-auth-token": "^5.0.1", + "registry-url": "^6.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/latest-version/node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true, + "license": "ISC" + }, + "node_modules/latest-version/node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/latest-version/node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/latest-version/node_modules/registry-auth-token": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", + "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pnpm/npm-conf": "^2.1.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/latest-version/node_modules/registry-url": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", + "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/latest-version/node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/latest-version/node_modules/responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/latest-version/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/solhint": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/solhint/-/solhint-5.0.3.tgz", + "integrity": "sha512-OLCH6qm/mZTCpplTXzXTJGId1zrtNuDYP5c2e6snIv/hdRVxPfBBz/bAlL91bY/Accavkayp2Zp2BaDSrLVXTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@solidity-parser/parser": "^0.18.0", + "ajv": "^6.12.6", + "antlr4": "^4.13.1-patch-1", + "ast-parents": "^0.0.1", + "chalk": "^4.1.2", + "commander": "^10.0.0", + "cosmiconfig": "^8.0.0", + "fast-diff": "^1.2.0", + "glob": "^8.0.3", + "ignore": "^5.2.4", + "js-yaml": "^4.1.0", + "latest-version": "^7.0.0", + "lodash": "^4.17.21", + "pluralize": "^8.0.0", + "semver": "^7.5.2", + "strip-ansi": "^6.0.1", + "table": "^6.8.1", + "text-table": "^0.2.0" + }, + "bin": { + "solhint": "solhint.js" + }, + "optionalDependencies": { + "prettier": "^2.8.3" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/table": { + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", + "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/table/node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/table/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/table/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/table/node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/table/node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", + "dev": true, + "license": "MIT" + }, + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/table/node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/table/node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/table/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/table/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + } + } +} diff --git a/contracts/package.json b/contracts/package.json new file mode 100644 index 000000000..9531b486c --- /dev/null +++ b/contracts/package.json @@ -0,0 +1,8 @@ +{ + "devDependencies": { + "solhint": "^5.0.3" + }, + "scripts": { + "lint:sol": "solhint 'src/core/**/*.sol' --max-warnings 0" + } +} diff --git a/contracts/remappings.txt b/contracts/remappings.txt index 305729e4f..ab4f6e788 100644 --- a/contracts/remappings.txt +++ b/contracts/remappings.txt @@ -2,4 +2,6 @@ eigenlayer-middleware/=lib/eigenlayer-middleware/src/ eigenlayer-core/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/ eigenlayer-core-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core eigenlayer-scripts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/script/ -forge-std/=lib/forge-std/src/ \ No newline at end of file +forge-std/=lib/forge-std/src/ +@openzeppelin/contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/ +@openzeppelin-upgrades/contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/ diff --git a/contracts/script/deploy/AlignedLayerDeployer.s.sol b/contracts/script/deploy/AlignedLayerDeployer.s.sol index 325478656..2d0ce812c 100644 --- a/contracts/script/deploy/AlignedLayerDeployer.s.sol +++ b/contracts/script/deploy/AlignedLayerDeployer.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.8.12; +pragma solidity ^0.8.12; /* This script is a modified version of the Mainnet_Deploy.s.sol script used by EigenDA: @@ -34,6 +34,7 @@ contract AlignedLayerDeployer is ExistingDeploymentParser { address public pauser; uint256 public initalPausedStatus; address public deployer; + address public alignedLayerAggregator; BLSApkRegistry public apkRegistry; AlignedLayerServiceManager public alignedLayerServiceManager; @@ -95,6 +96,11 @@ contract AlignedLayerDeployer is ExistingDeploymentParser { ); emit log_named_address("You are deploying from", deployer); + alignedLayerAggregator = stdJson.readAddress( + config_data, + ".permissions.aggregator" + ); + vm.startBroadcast(); // deploy proxy admin for ability to upgrade proxy contracts @@ -242,7 +248,8 @@ contract AlignedLayerDeployer is ExistingDeploymentParser { abi.encodeWithSelector( AlignedLayerServiceManager.initialize.selector, deployer, - deployer + deployer, + alignedLayerAggregator ) ); @@ -792,6 +799,10 @@ contract AlignedLayerDeployer is ExistingDeploymentParser { config_data, ".permissions.ejector" ); + address alignedLayerAggregator = stdJson.readAddress( + config_data, + ".permissions.aggregator" + ); string memory permissions = "permissions"; vm.serializeAddress( permissions, @@ -804,7 +815,11 @@ contract AlignedLayerDeployer is ExistingDeploymentParser { alignedLayerUpgrader ); vm.serializeAddress(permissions, "alignedLayerChurner", churner); + vm.serializeAddress(permissions, "pauserRegistry", pauser); + + vm.serializeAddress(permissions, "alignedLayerAggregator", alignedLayerAggregator); + string memory permissions_output = vm.serializeAddress( permissions, "alignedLayerEjector", diff --git a/contracts/script/deploy/BatcherPaymentServiceDeployer.s.sol b/contracts/script/deploy/BatcherPaymentServiceDeployer.s.sol index 5881a6249..8f9c8691f 100644 --- a/contracts/script/deploy/BatcherPaymentServiceDeployer.s.sol +++ b/contracts/script/deploy/BatcherPaymentServiceDeployer.s.sol @@ -1,4 +1,4 @@ -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import {BatcherPaymentService} from "../../src/core/BatcherPaymentService.sol"; import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; @@ -29,6 +29,11 @@ contract BatcherPaymentServiceDeployer is Script { ".permissions.owner" ); + bytes32 noncedVerificationDataTypeHash = stdJson.readBytes32( + config_data, + ".eip712.noncedVerificationDataTypeHash" + ); + vm.startBroadcast(); BatcherPaymentService batcherPaymentService = new BatcherPaymentService(); @@ -36,10 +41,11 @@ contract BatcherPaymentServiceDeployer is Script { ERC1967Proxy proxy = new ERC1967Proxy( address(batcherPaymentService), abi.encodeWithSignature( - "initialize(address,address,address)", + "initialize(address,address,address,bytes32)", IAlignedLayerServiceManager(alignedLayerServiceManager), batcherPaymentServiceOwner, - batcherWallet + batcherWallet, + noncedVerificationDataTypeHash ) ); diff --git a/contracts/script/deploy/EigenLayerDeployer.s.sol b/contracts/script/deploy/EigenLayerDeployer.s.sol index 937c524ca..adf901df4 100644 --- a/contracts/script/deploy/EigenLayerDeployer.s.sol +++ b/contracts/script/deploy/EigenLayerDeployer.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.8.12; +pragma solidity ^0.8.12; // The original script used as the base of this one is: // https://github.com/Layr-Labs/eigenlayer-contracts/blob/7229f2b426b6f2a24c7795b1a4687a010eac8ef2/script/deploy/devnet/M2_Deploy_From_Scratch.s.sol diff --git a/contracts/script/deploy/config/devnet/aligned.devnet.config.json b/contracts/script/deploy/config/devnet/aligned.devnet.config.json index e5edeb26c..85da62b5b 100644 --- a/contracts/script/deploy/config/devnet/aligned.devnet.config.json +++ b/contracts/script/deploy/config/devnet/aligned.devnet.config.json @@ -4,7 +4,7 @@ }, "permissions": { "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "aggregator": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "aggregator": "0x15d34aaf54267db7d7c367839aaf71a00a2c6a65", "upgrader": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", "churner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", "ejector": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", diff --git a/contracts/script/deploy/config/devnet/batcher-payment-service.devnet.config.json b/contracts/script/deploy/config/devnet/batcher-payment-service.devnet.config.json index 425f86060..03d903564 100644 --- a/contracts/script/deploy/config/devnet/batcher-payment-service.devnet.config.json +++ b/contracts/script/deploy/config/devnet/batcher-payment-service.devnet.config.json @@ -10,5 +10,8 @@ }, "permissions": { "owner": "0x14dC79964da2C08b23698B3D3cc7Ca32193d9955" + }, + "eip712": { + "noncedVerificationDataTypeHash": "41817b5c5b0c3dcda70ccb43ba175fdcd7e586f9e0484422a2c6bba678fdf4a3" } } diff --git a/contracts/script/deploy/config/holesky/batcher-payment-service.holesky.config.json b/contracts/script/deploy/config/holesky/batcher-payment-service.holesky.config.json index 0bba14592..45b479530 100644 --- a/contracts/script/deploy/config/holesky/batcher-payment-service.holesky.config.json +++ b/contracts/script/deploy/config/holesky/batcher-payment-service.holesky.config.json @@ -9,5 +9,8 @@ }, "permissions": { "owner": "" + }, + "eip712": { + "noncedVerificationDataTypeHash": "41817b5c5b0c3dcda70ccb43ba175fdcd7e586f9e0484422a2c6bba678fdf4a3" } -} \ No newline at end of file +} diff --git a/contracts/script/output/devnet/alignedlayer_deployment_output.json b/contracts/script/output/devnet/alignedlayer_deployment_output.json index 5de86f688..6ec939d60 100644 --- a/contracts/script/output/devnet/alignedlayer_deployment_output.json +++ b/contracts/script/output/devnet/alignedlayer_deployment_output.json @@ -21,6 +21,7 @@ "deploymentBlock": 0 }, "permissions": { + "alignedLayerAggregator": "0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65", "alignedLayerChurner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", "alignedLayerEjector": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", "alignedLayerOwner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", diff --git a/contracts/script/output/holesky/alignedlayer_deployment_output.json b/contracts/script/output/holesky/alignedlayer_deployment_output.json index 3ce1011c7..67a545a8d 100644 --- a/contracts/script/output/holesky/alignedlayer_deployment_output.json +++ b/contracts/script/output/holesky/alignedlayer_deployment_output.json @@ -2,7 +2,7 @@ "addresses": { "alignedLayerProxyAdmin": "0x3eb924d928c138898FC089328f840105969bD6a0", "alignedLayerServiceManager": "0x58F280BeBE9B34c9939C3C39e0890C81f163B623", - "alignedLayerServiceManagerImplementation": "0x1d1D5F13dd25A57fc1Cb36382FeD5398B333d41A", + "alignedLayerServiceManagerImplementation": "0xFc572B73e61B376957BFe88fE577709b1624c6B9", "blsApkRegistry": "0xD0A725d82649f9e4155D7A60B638Fe33b3F25e3b", "blsApkRegistryImplementation": "0xB05BB98a966F58aDAB8dF58350b77fF2131A3b87", "indexRegistry": "0x4A7DE0a9fBBAa4fF0270d31852B363592F68B81F", @@ -14,7 +14,7 @@ "stakeRegistry": "0x51462D5511563A0F97Bb3Ce5475E1c3905b83F4b", "stakeRegistryImplementation": "0xd1555Be14931C061E06D3CE1D1Daadc1B3c6F8c7", "batcherPaymentService": "0x815aeCA64a974297942D2Bbf034ABEe22a38A003", - "batcherPaymentServiceImplementation": "0xa1E835Edc8c3c2284293eE96F1498BD3f88934ab" + "batcherPaymentServiceImplementation": "0x89ebb109f390aed920dC2B2e920743EBA1811013" }, "chainInfo": { "chainId": 17000, diff --git a/contracts/script/output/holesky/alignedlayer_deployment_output.stage.json b/contracts/script/output/holesky/alignedlayer_deployment_output.stage.json index f159f4c3e..d6dca0cd7 100644 --- a/contracts/script/output/holesky/alignedlayer_deployment_output.stage.json +++ b/contracts/script/output/holesky/alignedlayer_deployment_output.stage.json @@ -2,7 +2,7 @@ "addresses": { "alignedLayerProxyAdmin": "0x7262d34478f8fB496a8feDfa0fdaBD1a0401d6cD", "alignedLayerServiceManager": "0x9C5231FC88059C086Ea95712d105A2026048c39B", - "alignedLayerServiceManagerImplementation": "0x58DFadE33c13cC728f3960BeF0CC50DF751b97F5", + "alignedLayerServiceManagerImplementation": "0x4a2040959a12e170EACeF03B2E692d57e652b20C", "blsApkRegistry": "0xEe1b6Dc663F17eC69987b6D56255a7282b358a09", "blsApkRegistryImplementation": "0x875f22C55D5363f7d1d1d63420298E89DcdB7bdF", "indexRegistry": "0xF12b82A933381391fE0e9a0270111f90FB10a810", @@ -14,7 +14,7 @@ "stakeRegistry": "0x1b0C9b87b094d821911500F91914B1A1D2856F14", "stakeRegistryImplementation": "0x52A9e264b98fe2d53805937Bc094a981E7eB6BeE", "batcherPaymentService": "0x7577Ec4ccC1E6C529162ec8019A49C13F6DAd98b", - "batcherPaymentServiceImplementation": "0x8BD8a8a49F44115Be48735c8661F59B1cb20946e" + "batcherPaymentServiceImplementation": "0x0874cf293B81b367ab99A7884B98d6616C295cB6" }, "chainInfo": { "chainId": 17000, diff --git a/contracts/script/upgrade/AlignedLayerUpgradeAddAggregator.s.sol b/contracts/script/upgrade/AlignedLayerUpgradeAddAggregator.s.sol new file mode 100644 index 000000000..8fea4281d --- /dev/null +++ b/contracts/script/upgrade/AlignedLayerUpgradeAddAggregator.s.sol @@ -0,0 +1,114 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.12; + +import {Script} from "forge-std/Script.sol"; +import "eigenlayer-contracts/src/contracts/core/AVSDirectory.sol"; +import {RegistryCoordinator} from "eigenlayer-middleware/RegistryCoordinator.sol"; +import {StakeRegistry} from "eigenlayer-middleware/StakeRegistry.sol"; +import {IRewardsCoordinator} from "eigenlayer-contracts/src/contracts/interfaces/IRewardsCoordinator.sol"; +import {AlignedLayerServiceManager} from "src/core/AlignedLayerServiceManager.sol"; +import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import "forge-std/StdJson.sol"; + +contract AlignedLayerSetAggregator is Script { + function run( + string memory eigenLayerDeploymentFilePath, + string memory alignedLayerDeploymentFilePath, + string memory alignedConfigFilePath + ) external returns (address, address) { + string memory eigen_deployment_file = vm.readFile( + eigenLayerDeploymentFilePath + ); + + string memory aligned_deployment_file = vm.readFile( + alignedLayerDeploymentFilePath + ); + + string memory aligned_config_file = vm.readFile(alignedConfigFilePath); + + ProxyAdmin alignedLayerProxyAdmin = ProxyAdmin( + stdJson.readAddress( + aligned_deployment_file, + ".addresses.alignedLayerProxyAdmin" + ) + ); + + RegistryCoordinator registryCoordinator = RegistryCoordinator( + stdJson.readAddress( + aligned_deployment_file, + ".addresses.registryCoordinator" + ) + ); + + AVSDirectory avsDirectory = AVSDirectory( + stdJson.readAddress( + eigen_deployment_file, + ".addresses.avsDirectory" + ) + ); + + StakeRegistry stakeRegistry = StakeRegistry( + stdJson.readAddress( + aligned_deployment_file, + ".addresses.stakeRegistry" + ) + ); + + IRewardsCoordinator rewardsCoordinator = IRewardsCoordinator( + stdJson.readAddress( + eigen_deployment_file, + ".addresses.rewardsCoordinator" + ) + ); + + address alignedLayerAggregator = stdJson.readAddress( + aligned_config_file, + ".permissions.aggregator" + ); + + vm.startBroadcast(); + + AlignedLayerServiceManager alignedLayerServiceManagerImplementation = new AlignedLayerServiceManager( + avsDirectory, + rewardsCoordinator, + registryCoordinator, + stakeRegistry + ); + + vm.stopBroadcast(); + vm.startBroadcast(); + + // alignedLayerServiceManager is the proxy + AlignedLayerServiceManager alignedLayerServiceManager = AlignedLayerServiceManager( + payable( + stdJson.readAddress( + aligned_deployment_file, + ".addresses.alignedLayerServiceManager" + ) + ) + ); + + vm.stopBroadcast(); + vm.startBroadcast(); + + alignedLayerProxyAdmin.upgrade( + TransparentUpgradeableProxy( + payable(address(alignedLayerServiceManager)) + ), + address(alignedLayerServiceManagerImplementation) + ); + + vm.stopBroadcast(); + vm.startBroadcast(); + + alignedLayerServiceManager.initializeAggregator(alignedLayerAggregator); + + vm.stopBroadcast(); + + return ( + address(alignedLayerServiceManager), + address(alignedLayerServiceManagerImplementation) + ); + } +} diff --git a/contracts/script/upgrade/AlignedLayerUpgrader.s.sol b/contracts/script/upgrade/AlignedLayerUpgrader.s.sol index 0dd228d40..71cb52dea 100644 --- a/contracts/script/upgrade/AlignedLayerUpgrader.s.sol +++ b/contracts/script/upgrade/AlignedLayerUpgrader.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import {Script} from "forge-std/Script.sol"; import "eigenlayer-contracts/src/contracts/core/AVSDirectory.sol"; diff --git a/contracts/script/upgrade/BLSApkRegistryUpgrader.s.sol b/contracts/script/upgrade/BLSApkRegistryUpgrader.s.sol index 6bbd98070..9f7500053 100644 --- a/contracts/script/upgrade/BLSApkRegistryUpgrader.s.sol +++ b/contracts/script/upgrade/BLSApkRegistryUpgrader.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import {Script} from "forge-std/Script.sol"; import "eigenlayer-contracts/src/contracts/core/AVSDirectory.sol"; diff --git a/contracts/script/upgrade/BatcherPaymentServiceUpgradeAddTypeHash.s.sol b/contracts/script/upgrade/BatcherPaymentServiceUpgradeAddTypeHash.s.sol new file mode 100644 index 000000000..0140d6ba6 --- /dev/null +++ b/contracts/script/upgrade/BatcherPaymentServiceUpgradeAddTypeHash.s.sol @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.12; +import {BatcherPaymentService} from "../../src/core/BatcherPaymentService.sol"; + +import "forge-std/Script.sol"; +import "forge-std/StdJson.sol"; + +contract BatcherPaymentServiceUpgradeAddTypeHash is Script { + function run( + string memory alignedLayerDeploymentFilePath, + string memory batcherPaymentServiceConfigFilePath + ) external returns (address, address) { + string memory aligned_deployment_file = vm.readFile( + alignedLayerDeploymentFilePath + ); + + string memory batcherPaymentServiceConfigFile = vm.readFile( + batcherPaymentServiceConfigFilePath + ); + + bytes32 noncedVerificationDataTypeHash = stdJson.readBytes32( + batcherPaymentServiceConfigFile, + ".eip712.noncedVerificationDataTypeHash" + ); + + vm.startBroadcast(); + + BatcherPaymentService BatcherPaymentServiceProxy = BatcherPaymentService( + payable( + stdJson.readAddress( + aligned_deployment_file, + ".addresses.batcherPaymentService" + ) + ) + ); + + BatcherPaymentService newBatcherPaymentServiceImplementation = new BatcherPaymentService(); + BatcherPaymentServiceProxy.upgradeToAndCall( + address(newBatcherPaymentServiceImplementation), + "" + ); + + vm.stopBroadcast(); + + vm.startBroadcast(); + + BatcherPaymentServiceProxy.initializeNoncedVerificationDataTypeHash( + noncedVerificationDataTypeHash + ); + + return ( + address(BatcherPaymentServiceProxy), + address(newBatcherPaymentServiceImplementation) + ); + } +} diff --git a/contracts/script/upgrade/BatcherPaymentServiceUpgrader.s.sol b/contracts/script/upgrade/BatcherPaymentServiceUpgrader.s.sol index 52f41c1cd..d9731bab2 100644 --- a/contracts/script/upgrade/BatcherPaymentServiceUpgrader.s.sol +++ b/contracts/script/upgrade/BatcherPaymentServiceUpgrader.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import {BatcherPaymentService} from "../../src/core/BatcherPaymentService.sol"; import "forge-std/Script.sol"; diff --git a/contracts/script/upgrade/IndexRegistryUpgrader.s.sol b/contracts/script/upgrade/IndexRegistryUpgrader.s.sol index 702273266..26124cf6f 100644 --- a/contracts/script/upgrade/IndexRegistryUpgrader.s.sol +++ b/contracts/script/upgrade/IndexRegistryUpgrader.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import {Script} from "forge-std/Script.sol"; import "eigenlayer-contracts/src/contracts/core/AVSDirectory.sol"; diff --git a/contracts/script/upgrade/RegistryCoordinatorUpgrader.s.sol b/contracts/script/upgrade/RegistryCoordinatorUpgrader.s.sol index 5b573ece7..a8a6b79f8 100644 --- a/contracts/script/upgrade/RegistryCoordinatorUpgrader.s.sol +++ b/contracts/script/upgrade/RegistryCoordinatorUpgrader.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import {Script} from "forge-std/Script.sol"; import "eigenlayer-contracts/src/contracts/core/AVSDirectory.sol"; diff --git a/contracts/script/upgrade/StakeRegistryUpgrader.s.sol b/contracts/script/upgrade/StakeRegistryUpgrader.s.sol index 1b46abadb..3012b280d 100644 --- a/contracts/script/upgrade/StakeRegistryUpgrader.s.sol +++ b/contracts/script/upgrade/StakeRegistryUpgrader.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import {Script} from "forge-std/Script.sol"; import "eigenlayer-contracts/src/contracts/core/AVSDirectory.sol"; diff --git a/contracts/scripts/.env.example.holesky b/contracts/scripts/.env.example.holesky index 74fae877b..1bb8d3cd1 100644 --- a/contracts/scripts/.env.example.holesky +++ b/contracts/scripts/.env.example.holesky @@ -4,3 +4,4 @@ EXISTING_DEPLOYMENT_INFO_PATH=./script/output/holesky/Holesky_current_deployment DEPLOY_CONFIG_PATH=./script/deploy/config/holesky/aligned.holesky.config.json OUTPUT_PATH=./script/output/holesky/alignedlayer_deployment_output.json ETHERSCAN_API_KEY= +BATCHER_PAYMENT_SERVICE_CONFIG_PATH=./script/deploy/config/holesky/batcher-payment-service.holesky.config.json diff --git a/contracts/scripts/anvil/deploy_aligned_contracts.sh b/contracts/scripts/anvil/deploy_aligned_contracts.sh index 4339429a5..765e5e8f1 100755 --- a/contracts/scripts/anvil/deploy_aligned_contracts.sh +++ b/contracts/scripts/anvil/deploy_aligned_contracts.sh @@ -48,18 +48,19 @@ forge_output=$(forge script script/deploy/BatcherPaymentServiceDeployer.s.sol \ batcher_payment_service_proxy=$(echo "$forge_output" | awk '/0: address/ {print $3}') batcher_payment_service_implementation=$(echo "$forge_output" | awk '/1: address/ {print $3}') -# Use the extracted value to replace the batcher payment service values in alignedlayer_deployment_output.json and save it to a temporary file -jq --arg batcher_payment_service_proxy "$batcher_payment_service_proxy" '.addresses.batcherPaymentService = $batcher_payment_service_proxy' "script/output/devnet/alignedlayer_deployment_output.json" > "script/output/devnet/alignedlayer_deployment_output.temp.temp.json" -jq --arg batcher_payment_service_implementation "$batcher_payment_service_implementation" '.addresses.batcherPaymentServiceImplementation = $batcher_payment_service_implementation' "script/output/devnet/alignedlayer_deployment_output.temp.temp.json" > "script/output/devnet/alignedlayer_deployment_output.temp.json" +# Give initial funds to ServiceManager for the Batcher +cast send $ALIGNED_LAYER_SERVICE_MANAGER_ADDRESS "depositToBatcher(address)()" $batcher_payment_service_proxy --value 1ether --private-key "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" --rpc-url "http://localhost:8545" +# Use the extracted value to replace the batcher payment service values in alignedlayer_deployment_output.json and save it to a temporary file +jq --arg batcher_payment_service_proxy "$batcher_payment_service_proxy" '.addresses.batcherPaymentService = $batcher_payment_service_proxy' "script/output/devnet/alignedlayer_deployment_output.json" > "script/output/devnet/alignedlayer_deployment_output.temp1.json" +jq --arg batcher_payment_service_implementation "$batcher_payment_service_implementation" '.addresses.batcherPaymentServiceImplementation = $batcher_payment_service_implementation' "script/output/devnet/alignedlayer_deployment_output.temp1.json" > "script/output/devnet/alignedlayer_deployment_output.temp2.json" # Replace the original file with the temporary file -mv "script/output/devnet/alignedlayer_deployment_output.temp.json" "script/output/devnet/alignedlayer_deployment_output.json" +mv "script/output/devnet/alignedlayer_deployment_output.temp2.json" "script/output/devnet/alignedlayer_deployment_output.json" # Delete the temporary file -rm -f "script/output/devnet/alignedlayer_deployment_output.temp.json" -rm -f "script/output/devnet/alignedlayer_deployment_output.temp.temp.json" - +rm -f "script/output/devnet/alignedlayer_deployment_output.temp1.json" +rm -f "script/output/devnet/alignedlayer_deployment_output.temp2.json" # Kill the anvil process to save state diff --git a/contracts/scripts/anvil/state/alignedlayer-deployed-anvil-state.json b/contracts/scripts/anvil/state/alignedlayer-deployed-anvil-state.json index 1caacf8dd..10fbba4a1 100644 --- a/contracts/scripts/anvil/state/alignedlayer-deployed-anvil-state.json +++ b/contracts/scripts/anvil/state/alignedlayer-deployed-anvil-state.json @@ -1 +1 @@ -{"block":{"number":"0xb","coinbase":"0x0000000000000000000000000000000000000000","timestamp":"0x66cd19e8","gas_limit":"0x1c9c380","basefee":"0x13b491ef","difficulty":"0x0","prevrandao":"0x0000000000000000000000000000000000000000000000000000000000000000","blob_excess_gas_and_price":{"excess_blob_gas":0,"blob_gasprice":1}},"accounts":{"0x0000000000000000000000000000000000000000":{"nonce":0,"balance":"0x1f1eccb","code":"0x","storage":{}},"0x0165878a594ca255338adfa4d48449f69242eb8f":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0xc9":"0x94af000f6f71feb2b8401e668d95fd208038580e89d240930f90ba827aa34858","0xcb":"0x3e80000000000001c2018a0f92ad9645385e8a8f3db7d0f6cf7abbb0ad4","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xb306bf915c4d645ff596e518faf3f9669b97016","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x09635f643e140090a9a8dcd712ed6285858cebef":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061007d5760003560e01c806340c10f191161005b57806340c10f19146100d257806370a08231146100e7578063a9059cbb14610110578063dd62ed3e1461012357600080fd5b8063095ea7b31461008257806318160ddd146100ad57806323b872dd146100bf575b600080fd5b610098610090366004610410565b600192915050565b60405190151581526020015b60405180910390f35b6002545b6040519081526020016100a4565b6100986100cd36600461043a565b61015c565b6100e56100e0366004610410565b610173565b005b6100b16100f5366004610476565b6001600160a01b031660009081526020819052604090205490565b61009861011e366004610410565b610181565b6100b1610131366004610498565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600061016984848461018b565b5060019392505050565b61017d8282610335565b5050565b6000336101698185855b6001600160a01b0383166101f45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084015b60405180910390fd5b6001600160a01b0382166102565760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016101eb565b6001600160a01b0383166000908152602081905260409020548111156102cd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016101eb565b6001600160a01b038381166000818152602081815260408083208054879003905593861680835291849020805486019055925184815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b03821661038b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016101eb565b806002600082825461039d91906104cb565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b80356001600160a01b038116811461040b57600080fd5b919050565b6000806040838503121561042357600080fd5b61042c836103f4565b946020939093013593505050565b60008060006060848603121561044f57600080fd5b610458846103f4565b9250610466602085016103f4565b9150604084013590509250925092565b60006020828403121561048857600080fd5b610491826103f4565b9392505050565b600080604083850312156104ab57600080fd5b6104b4836103f4565b91506104c2602084016103f4565b90509250929050565b600082198211156104ec57634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220adda763858b2ee86f27467db7ec8b893c350cd0ddfa605ad6608601ca5e1cf3664736f6c634300080c0033","storage":{}},"0x0b306bf915c4d645ff596e518faf3f9669b97016":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106102895760003560e01c80636d21117e1161015c578063bf21a8aa116100ce578063f2fde38b11610087578063f2fde38b1461071c578063f698da251461072f578063f8cd844814610737578063fabc1cbc1461074a578063fbf1e2c11461075d578063fce36c7d1461077057600080fd5b8063bf21a8aa14610667578063c46db6061461068e578063d4540a55146106bc578063e221b245146106cf578063e810ce21146106e2578063ea4d3c9b146106f557600080fd5b8063886f119511610120578063886f1195146105ce5780638da5cb5b146105e15780639104c319146105f25780639d45c2811461060d578063a0169ddd14610634578063bb7e451f1461064757600080fd5b80636d21117e14610552578063715018a6146105805780637b8f8b0514610588578063863cb9a914610590578063865c6953146105a357600080fd5b806337838ed01161020057806358baaa3e116101b957806358baaa3e146104c4578063595c6a67146104d75780635971b3f8146104df5780635ac86ab7146105145780635c975abb146105375780635e9d83481461053f57600080fd5b806337838ed01461042257806339b70e38146104495780633a8c0786146104705780633ccc861d146104875780633efe1db61461049a5780634d18cc35146104ad57600080fd5b8063131433b411610252578063131433b414610352578063136439dd14610379578063149bc8721461038c57806322f19a64146103ad5780632b9f64a4146103ce57806336af41fa1461040f57600080fd5b806218572c1461028e57806304a0c502146102c6578063092db007146103025780630eb383451461032a57806310d67a2f1461033f575b600080fd5b6102b161029c366004613120565b60d16020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6102ed7f0000000000000000000000000000000000000000000000000000000000278d0081565b60405163ffffffff90911681526020016102bd565b60cb5461031790600160e01b900461ffff1681565b60405161ffff90911681526020016102bd565b61033d61033836600461314b565b610783565b005b61033d61034d366004613120565b610805565b6102ed7f0000000000000000000000000000000000000000000000000000000065fb788081565b61033d610387366004613184565b6108c1565b61039f61039a3660046131b5565b610a00565b6040519081526020016102bd565b6103176103bb3660046131d1565b505060cb54600160e01b900461ffff1690565b6103f76103dc366004613120565b60cc602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102bd565b61033d61041d3660046131ff565b610a76565b6102ed7f000000000000000000000000000000000000000000000000000000000076a70081565b6103f77f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b60cb546102ed90600160a01b900463ffffffff1681565b61033d610495366004613287565b610cb0565b61033d6104a83660046132e7565b611065565b60cb546102ed90600160c01b900463ffffffff1681565b61033d6104d2366004613313565b611365565b61033d611376565b6104f26104ed366004613184565b61143d565b6040805193845263ffffffff92831660208501529116908201526060016102bd565b6102b161052236600461332e565b606654600160ff9092169190911b9081161490565b60665461039f565b6102b161054d366004613351565b61147d565b6102b1610560366004613386565b60cf60209081526000928352604080842090915290825290205460ff1681565b61033d6114fb565b60ca5461039f565b61033d61059e366004613120565b61150f565b61039f6105b13660046131d1565b60cd60209081526000928352604080842090915290825290205481565b6065546103f7906001600160a01b031681565b6033546001600160a01b03166103f7565b6103f773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6102ed7f0000000000000000000000000000000000000000000000000000000000093a8081565b61033d610642366004613120565b611520565b61039f610655366004613120565b60ce6020526000908152604090205481565b6102ed7f00000000000000000000000000000000000000000000000000000000005c490081565b6102b161069c366004613386565b60d060209081526000928352604080842090915290825290205460ff1681565b61033d6106ca3660046133cf565b61157f565b61033d6106dd366004613442565b6116c7565b6102ed6106f0366004613184565b6116d8565b6103f77f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b61033d61072a366004613120565b6117ba565b61039f611830565b61039f6107453660046131b5565b61186e565b61033d610758366004613184565b61187f565b60cb546103f7906001600160a01b031681565b61033d61077e3660046131ff565b6119db565b61078b611b5a565b6001600160a01b038216600081815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b0391909116600090815260d160205260409020805460ff1916911515919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087c919061345d565b6001600160a01b0316336001600160a01b0316146108b55760405162461bcd60e51b81526004016108ac9061347a565b60405180910390fd5b6108be81611bb4565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092d91906134c4565b6109495760405162461bcd60e51b81526004016108ac906134e1565b606654818116146109c25760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016108ac565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600080610a106020840184613120565b8360200135604051602001610a599392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b60665460019060029081161415610a9f5760405162461bcd60e51b81526004016108ac90613529565b33600090815260d1602052604090205460ff16610b3e5760405162461bcd60e51b815260206004820152605160248201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f60448201527f7420612076616c69642063726561746552657761726473466f72416c6c53756260648201527036b4b9b9b4b7b71039bab136b4ba3a32b960791b608482015260a4016108ac565b60026097541415610b615760405162461bcd60e51b81526004016108ac90613560565b600260975560005b82811015610ca55736848483818110610b8457610b84613597565b9050602002810190610b9691906135ad565b33600081815260ce60209081526040808320549051949550939192610bc192909185918791016136f2565b604051602081830303815290604052805190602001209050610be283611cab565b33600090815260d0602090815260408083208484529091529020805460ff19166001908117909155610c15908390613738565b33600081815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf27048290610c5d908890613750565b60405180910390a4610c8f333060408601803590610c7e9060208901613120565b6001600160a01b0316929190612483565b5050508080610c9d90613763565b915050610b69565b505060016097555050565b60665460029060049081161415610cd95760405162461bcd60e51b81526004016108ac90613529565b60026097541415610cfc5760405162461bcd60e51b81526004016108ac90613560565b6002609755600060ca610d126020860186613313565b63ffffffff1681548110610d2857610d28613597565b6000918252602091829020604080516060810182526002909302909101805483526001015463ffffffff808216948401949094526401000000009004909216918101919091529050610d7a84826124f4565b6000610d8c6080860160608701613120565b6001600160a01b03808216600090815260cc60205260409020549192501680610db25750805b336001600160a01b03821614610e305760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063616c6c6572206973206e6f742076616c696420636c61696d65720000000060648201526084016108ac565b60005b610e4060a088018861377e565b90508110156110575736610e5760e08901896137cf565b83818110610e6757610e67613597565b6001600160a01b038716600090815260cd602090815260408083209302949094019450929091508290610e9c90850185613120565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905080826020013511610f565760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063756d756c61746976654561726e696e6773206d75737420626520677420746064820152741a185b8818dd5b5d5b185d1a5d9950db185a5b5959605a1b608482015260a4016108ac565b6000610f66826020850135613819565b6001600160a01b038716600090815260cd60209081526040822092935085018035929190610f949087613120565b6001600160a01b0316815260208082019290925260400160002091909155610fd6908a908390610fc690870187613120565b6001600160a01b0316919061279d565b86516001600160a01b03808b1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce319061101a6020890189613120565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050808061104f90613763565b915050610e33565b505060016097555050505050565b6066546003906008908116141561108e5760405162461bcd60e51b81526004016108ac90613529565b60cb546001600160a01b031633146111055760405162461bcd60e51b815260206004820152603460248201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f6044820152733a103a3432903932bbb0b93239aab83230ba32b960611b60648201526084016108ac565b60cb5463ffffffff600160c01b9091048116908316116111a15760405162461bcd60e51b815260206004820152604b60248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a206e60448201527f657720726f6f74206d75737420626520666f72206e657765722063616c63756c60648201526a185d1959081c195c9a5bd960aa1b608482015260a4016108ac565b428263ffffffff161061123a5760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a207260448201527f65776172647343616c63756c6174696f6e456e6454696d657374616d702063616064820152746e6e6f7420626520696e207468652066757475726560581b608482015260a4016108ac565b60ca5460cb5460009061125a90600160a01b900463ffffffff1642613830565b6040805160608101825287815263ffffffff878116602080840182815286841685870181815260ca805460018101825560009190915296517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029098029788015591517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee29096018054925196861667ffffffffffffffff19909316929092176401000000009686169690960295909517905560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b61136d611b5a565b6108be816127cd565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156113be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e291906134c4565b6113fe5760405162461bcd60e51b81526004016108ac906134e1565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60ca818154811061144d57600080fd5b60009182526020909120600290910201805460019091015490915063ffffffff8082169164010000000090041683565b60006114f38260ca6114926020830183613313565b63ffffffff16815481106114a8576114a8613597565b6000918252602091829020604080516060810182526002909302909101805483526001015463ffffffff808216948401949094526401000000009004909216918101919091526124f4565b506001919050565b611503611b5a565b61150d600061283e565b565b611517611b5a565b6108be81612890565b33600081815260cc602052604080822080546001600160a01b031981166001600160a01b038781169182179093559251911692839185917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca31291a4505050565b600054610100900460ff161580801561159f5750600054600160ff909116105b806115b95750303b1580156115b9575060005460ff166001145b61161c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108ac565b6000805460ff19166001179055801561163f576000805461ff0019166101001790555b6116476128ec565b60c9556116548686612983565b61165d8761283e565b61166684612890565b61166f836127cd565b61167882612a6d565b80156116be576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6116cf611b5a565b6108be81612a6d565b60ca546000905b63ffffffff81161561174b578260ca6116f9600184613858565b63ffffffff168154811061170f5761170f613597565b906000526020600020906002020160000154141561173957611732600182613858565b9392505050565b806117438161387d565b9150506116df565b5060405162461bcd60e51b815260206004820152603760248201527f52657761726473436f6f7264696e61746f722e676574526f6f74496e6465784660448201527f726f6d486173683a20726f6f74206e6f7420666f756e6400000000000000000060648201526084016108ac565b6117c2611b5a565b6001600160a01b0381166118275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108ac565b6108be8161283e565b60007f0000000000000000000000000000000000000000000000000000000000007a69461415611861575060c95490565b6118696128ec565b905090565b60006001610a106020840184613120565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f6919061345d565b6001600160a01b0316336001600160a01b0316146119265760405162461bcd60e51b81526004016108ac9061347a565b6066541981196066541916146119a45760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016108ac565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016109f5565b60665460009060019081161415611a045760405162461bcd60e51b81526004016108ac90613529565b60026097541415611a275760405162461bcd60e51b81526004016108ac90613560565b600260975560005b82811015610ca55736848483818110611a4a57611a4a613597565b9050602002810190611a5c91906135ad565b33600081815260ce60209081526040808320549051949550939192611a8792909185918791016136f2565b604051602081830303815290604052805190602001209050611aa883611cab565b33600090815260cf602090815260408083208484529091529020805460ff19166001908117909155611adb908390613738565b33600081815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e628190611b23908890613750565b60405180910390a4611b44333060408601803590610c7e9060208901613120565b5050508080611b5290613763565b915050611a2f565b6033546001600160a01b0316331461150d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108ac565b6001600160a01b038116611c425760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016108ac565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6000611cb782806137cf565b905011611d1c576040805162461bcd60e51b81526020600482015260248101919091526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a206e6f20737472617465676965732073657460648201526084016108ac565b6000816040013511611d8e5760405162461bcd60e51b815260206004820152604160248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20616d6f756e742063616e6e6f74206265206064820152600360fc1b608482015260a4016108ac565b6f4b3b4ca85a86c47a098a223fffffffff81604001351115611e065760405162461bcd60e51b815260206004820152603f60248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20616d6f756e7420746f6f206c617267650060648201526084016108ac565b63ffffffff7f00000000000000000000000000000000000000000000000000000000005c490016611e3d60a0830160808401613313565b63ffffffff161115611ec25760405162461bcd60e51b815260206004820152605460248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e20657863656564732060648201527326a0ac2fa922aba0a92229afa22aa920aa24a7a760611b608482015260a4016108ac565b7f0000000000000000000000000000000000000000000000000000000000093a80611ef360a0830160808401613313565b611efd91906138b3565b63ffffffff1615611f9d5760405162461bcd60e51b815260206004820152606a60248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e206d7573742062652060648201527f61206d756c7469706c65206f662043414c43554c4154494f4e5f494e54455256608482015269414c5f5345434f4e445360b01b60a482015260c4016108ac565b7f0000000000000000000000000000000000000000000000000000000000093a80611fce6080830160608401613313565b611fd891906138b3565b63ffffffff161561207e5760405162461bcd60e51b815260206004820152607060248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d70206d7560648201527f73742062652061206d756c7469706c65206f662043414c43554c4154494f4e5f60848201526f494e54455256414c5f5345434f4e445360801b60a482015260c4016108ac565b61208e6080820160608301613313565b63ffffffff167f000000000000000000000000000000000000000000000000000000000076a70063ffffffff16426120c69190613819565b1115801561210f57506120df6080820160608301613313565b63ffffffff167f0000000000000000000000000000000000000000000000000000000065fb788063ffffffff1611155b6121895760405162461bcd60e51b815260206004820152605160248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152701bc819985c881a5b881d1a19481c185cdd607a1b608482015260a4016108ac565b6121b963ffffffff7f0000000000000000000000000000000000000000000000000000000000278d001642613738565b6121c96080830160608401613313565b63ffffffff16111561224d5760405162461bcd60e51b815260206004820152605360248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152726f2066617220696e207468652066757475726560681b608482015260a4016108ac565b6000805b61225b83806137cf565b905081101561247e57600061227084806137cf565b8381811061228057612280613597565b6122969260206040909202019081019150613120565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c99091169063663c1de490602401602060405180830381865afa158015612301573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232591906134c4565b8061234c57506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b6123bf5760405162461bcd60e51b815260206004820152604a60248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20696e76616c69642073747261746567792060648201526918dbdb9cda59195c995960b21b608482015260a4016108ac565b806001600160a01b0316836001600160a01b03161061246c5760405162461bcd60e51b815260206004820152606960248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a2073747261746567696573206d757374206260648201527f6520696e20617363656e64696e67206f7264657220746f2068616e646c65206460848201526875706c69636174657360b81b60a482015260c4016108ac565b915061247781613763565b9050612251565b505050565b6040516001600160a01b03808516602483015283166044820152606481018290526124ee9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612ad8565b50505050565b806040015163ffffffff1642101561256d5760405162461bcd60e51b815260206004820152603660248201527f52657761726473436f6f7264696e61746f722e5f636865636b436c61696d3a206044820152751c9bdbdd081b9bdd081858dd1a5d985d1959081e595d60521b60648201526084016108ac565b61257a60c083018361377e565b905061258960a084018461377e565b9050146126135760405162461bcd60e51b815260206004820152604c60248201527f52657761726473436f6f7264696e61746f722e5f636865636b436c61696d3a2060448201527f746f6b656e496e646963657320616e6420746f6b656e50726f6f6673206c656e60648201526b0cee8d040dad2e6dac2e8c6d60a31b608482015260a4016108ac565b61262060e08301836137cf565b905061262f60c084018461377e565b9050146126b75760405162461bcd60e51b815260206004820152604a60248201527f52657761726473436f6f7264696e61746f722e5f636865636b436c61696d3a2060448201527f746f6b656e5472656550726f6f667320616e64206c6561766573206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a4016108ac565b80516126e3906126cd6040850160208601613313565b6126da60408601866138d6565b86606001612baa565b60005b6126f360a084018461377e565b905081101561247e5761278d608084013561271160a086018661377e565b8481811061272157612721613597565b90506020020160208101906127369190613313565b61274360c087018761377e565b8581811061275357612753613597565b905060200281019061276591906138d6565b61277260e08901896137cf565b8781811061278257612782613597565b905060400201612d1e565b61279681613763565b90506126e6565b6040516001600160a01b03831660248201526044810182905261247e90849063a9059cbb60e01b906064016124b7565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb90600090a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6065546001600160a01b03161580156129a457506001600160a01b03821615155b612a265760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016108ac565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2612a6982611bb4565b5050565b60cb546040805161ffff600160e01b9093048316815291831660208301527f8cdc428b0431b82d1619763f443a48197db344ba96905f3949643acd1c863a06910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b6000612b2d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612e6f9092919063ffffffff16565b80519091501561247e5780806020019051810190612b4b91906134c4565b61247e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108ac565b612bb560208361391d565b6001901b8463ffffffff1610612c3f5760405162461bcd60e51b815260206004820152604360248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e65724c656166496e6064820152620c8caf60eb1b608482015260a4016108ac565b6000612c4a82610a00565b9050612c9584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff8916612e86565b612d165760405162461bcd60e51b815260206004820152604660248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e657220636c61696d60648201526510383937b7b360d11b608482015260a4016108ac565b505050505050565b612d2960208361391d565b6001901b8463ffffffff1610612da75760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e4c656166496e6465780000000060648201526084016108ac565b6000612db28261186e565b9050612dfd84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff8916612e86565b612d165760405162461bcd60e51b815260206004820152603f60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e20636c61696d2070726f6f660060648201526084016108ac565b6060612e7e8484600085612e9e565b949350505050565b600083612e94868585612fcf565b1495945050505050565b606082471015612eff5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016108ac565b6001600160a01b0385163b612f565760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108ac565b600080866001600160a01b03168587604051612f72919061395d565b60006040518083038185875af1925050503d8060008114612faf576040519150601f19603f3d011682016040523d82523d6000602084013e612fb4565b606091505b5091509150612fc48282866130d2565b979650505050505050565b600060208451612fdf919061396f565b156130665760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a4016108ac565b8260205b855181116130c95761307d60028561396f565b61309e578160005280860151602052604060002091506002840493506130b7565b8086015160005281602052604060002091506002840493505b6130c2602082613738565b905061306a565b50949350505050565b606083156130e1575081611732565b8251156130f15782518084602001fd5b8160405162461bcd60e51b81526004016108ac9190613983565b6001600160a01b03811681146108be57600080fd5b60006020828403121561313257600080fd5b81356117328161310b565b80151581146108be57600080fd5b6000806040838503121561315e57600080fd5b82356131698161310b565b915060208301356131798161313d565b809150509250929050565b60006020828403121561319657600080fd5b5035919050565b6000604082840312156131af57600080fd5b50919050565b6000604082840312156131c757600080fd5b611732838361319d565b600080604083850312156131e457600080fd5b82356131ef8161310b565b915060208301356131798161310b565b6000806020838503121561321257600080fd5b823567ffffffffffffffff8082111561322a57600080fd5b818501915085601f83011261323e57600080fd5b81358181111561324d57600080fd5b8660208260051b850101111561326257600080fd5b60209290920196919550909350505050565b600061010082840312156131af57600080fd5b6000806040838503121561329a57600080fd5b823567ffffffffffffffff8111156132b157600080fd5b6132bd85828601613274565b92505060208301356131798161310b565b803563ffffffff811681146132e257600080fd5b919050565b600080604083850312156132fa57600080fd5b8235915061330a602084016132ce565b90509250929050565b60006020828403121561332557600080fd5b611732826132ce565b60006020828403121561334057600080fd5b813560ff8116811461173257600080fd5b60006020828403121561336357600080fd5b813567ffffffffffffffff81111561337a57600080fd5b612e7e84828501613274565b6000806040838503121561339957600080fd5b82356133a48161310b565b946020939093013593505050565b80356132e28161310b565b803561ffff811681146132e257600080fd5b60008060008060008060c087890312156133e857600080fd5b86356133f38161310b565b955060208701356134038161310b565b945060408701359350606087013561341a8161310b565b9250613428608088016132ce565b915061343660a088016133bd565b90509295509295509295565b60006020828403121561345457600080fd5b611732826133bd565b60006020828403121561346f57600080fd5b81516117328161310b565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156134d657600080fd5b81516117328161313d565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60008235609e198336030181126135c357600080fd5b9190910192915050565b818352600060208085019450826000805b868110156136325782356135f18161310b565b6001600160a01b03168852828401356bffffffffffffffffffffffff811680821461361a578384fd5b898601525060409788019792909201916001016135de565b50959695505050505050565b60008135601e1983360301811261365457600080fd5b8201803567ffffffffffffffff81111561366d57600080fd5b8060061b360384131561367f57600080fd5b60a0855261369460a0860182602085016135cd565b9150506136a3602084016133b2565b6001600160a01b03166020850152604083810135908501526136c7606084016132ce565b63ffffffff1660608501526136de608084016132ce565b63ffffffff81166080860152509392505050565b60018060a01b0384168152826020820152606060408201526000613719606083018461363e565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561374b5761374b613722565b500190565b602081526000611732602083018461363e565b600060001982141561377757613777613722565b5060010190565b6000808335601e1984360301811261379557600080fd5b83018035915067ffffffffffffffff8211156137b057600080fd5b6020019150600581901b36038213156137c857600080fd5b9250929050565b6000808335601e198436030181126137e657600080fd5b83018035915067ffffffffffffffff82111561380157600080fd5b6020019150600681901b36038213156137c857600080fd5b60008282101561382b5761382b613722565b500390565b600063ffffffff80831681851680830382111561384f5761384f613722565b01949350505050565b600063ffffffff8381169083168181101561387557613875613722565b039392505050565b600063ffffffff82168061389357613893613722565b6000190192915050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff808416806138ca576138ca61389d565b92169190910692915050565b6000808335601e198436030181126138ed57600080fd5b83018035915067ffffffffffffffff82111561390857600080fd5b6020019150368190038213156137c857600080fd5b60008261392c5761392c61389d565b500490565b60005b8381101561394c578181015183820152602001613934565b838111156124ee5750506000910152565b600082516135c3818460208701613931565b60008261397e5761397e61389d565b500690565b60208152600082518060208401526139a2816040850160208701613931565b601f01601f1916919091016040019291505056fe52657761726473436f6f7264696e61746f722e5f76616c696461746552657761a26469706673582212200d2a9250dcdf7eccff848dd9455a337efdd8ac02e415dd44de3502264f250c4964736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x0dcd1bf9a1b36ce34237eeafef220932846bcd82":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106102065760003560e01c80638da5cb5b1161011a578063c6656702116100ad578063df5cf7231161007c578063df5cf72314610515578063e7a050aa1461053c578063f2fde38b1461054f578063f698da2514610562578063fabc1cbc1461056a57600080fd5b8063c6656702146104c9578063cbc2bd62146104dc578063cf756fdf146104ef578063df5b35471461050257600080fd5b8063b1344271116100e9578063b134427114610469578063b5d8b5b814610490578063c4623ea1146104a3578063c608c7f3146104b657600080fd5b80638da5cb5b1461040157806394f649dd14610412578063967fc0d2146104335780639b4da03d1461044657600080fd5b80635ac86ab71161019d5780637a7e0d921161016c5780637a7e0d92146103675780637ecebe0014610392578063886f1195146103b25780638b8aac3c146103c55780638c80d4e5146103ee57600080fd5b80635ac86ab7146103015780635c975abb14610334578063663c1de41461033c578063715018a61461035f57600080fd5b80634665bcda116101d95780634665bcda1461028057806348825e94146102bf5780634e5a4263146102e6578063595c6a67146102f957600080fd5b806310d67a2f1461020b578063136439dd1461022057806320606b701461023357806332e89ace1461026d575b600080fd5b61021e6102193660046129e8565b61057d565b005b61021e61022e366004612a05565b610639565b61025a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b61025a61027b366004612a34565b610778565b6102a77f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681565b6040516001600160a01b039091168152602001610264565b61025a7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61021e6102f4366004612b3d565b610a66565b61021e610a9e565b61032461030f366004612b76565b609854600160ff9092169190911b9081161490565b6040519015158152602001610264565b60985461025a565b61032461034a3660046129e8565b60d16020526000908152604090205460ff1681565b61021e610b65565b61025a610375366004612b99565b60cd60209081526000928352604080842090915290825290205481565b61025a6103a03660046129e8565b60ca6020526000908152604090205481565b6097546102a7906001600160a01b031681565b61025a6103d33660046129e8565b6001600160a01b0316600090815260ce602052604090205490565b61021e6103fc366004612bc7565b610b79565b6033546001600160a01b03166102a7565b6104256104203660046129e8565b610bd2565b604051610264929190612c08565b60cb546102a7906001600160a01b031681565b6103246104543660046129e8565b60d36020526000908152604090205460ff1681565b6102a77f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b61021e61049e366004612cd1565b610d52565b61021e6104b1366004612d13565b610ec6565b61021e6104c4366004612d64565b610f1a565b61021e6104d73660046129e8565b610fd2565b6102a76104ea366004612db7565b610fe3565b61021e6104fd366004612d13565b61101b565b61021e610510366004612de3565b61114f565b6102a77f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b61025a61054a366004612bc7565b611378565b61021e61055d3660046129e8565b611441565b61025a6114b7565b61021e610578366004612a05565b6114f5565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f49190612e4f565b6001600160a01b0316336001600160a01b03161461062d5760405162461bcd60e51b815260040161062490612e6c565b60405180910390fd5b61063681611651565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610681573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a59190612eb6565b6106c15760405162461bcd60e51b815260040161062490612ed3565b6098548181161461073a5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610624565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6098546000908190600190811614156107cf5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610624565b600260655414156108225760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610624565b60026065556001600160a01b038816600090815260d3602052604090205460ff16156108c95760405162461bcd60e51b815260206004820152604a60248201527f53747261746567794d616e616765722e6465706f736974496e746f537472617460448201527f656779576974685369676e61747572653a207468697264207472616e736665726064820152691cc8191a5cd8589b195960b21b608482015260a401610624565b4284101561094b5760405162461bcd60e51b815260206004820152604360248201527f53747261746567794d616e616765722e6465706f736974496e746f537472617460448201527f656779576974685369676e61747572653a207369676e617475726520657870696064820152621c995960ea1b608482015260a401610624565b6001600160a01b03858116600081815260ca602090815260408083205481517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922493810193909352908201939093528b84166060820152928a16608084015260a0830189905260c0830182905260e0830187905290916101000160408051601f1981840301815291815281516020928301206001600160a01b038a16600090815260ca9093529082206001850190559150610a036114b7565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050610a46888288611748565b610a52888c8c8c611907565b60016065559b9a5050505050505050505050565b60cb546001600160a01b03163314610a905760405162461bcd60e51b815260040161062490612f1b565b610a9a8282611ad6565b5050565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190612eb6565b610b265760405162461bcd60e51b815260040161062490612ed3565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610b6d611b44565b610b776000611b9e565b565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610bc15760405162461bcd60e51b815260040161062490612f85565b610bcc838383611bf0565b50505050565b6001600160a01b038116600090815260ce60205260408120546060918291908167ffffffffffffffff811115610c0a57610c0a612a1e565b604051908082528060200260200182016040528015610c33578160200160208202803683370190505b50905060005b82811015610cc4576001600160a01b038616600090815260cd6020908152604080832060ce9092528220805491929184908110610c7857610c78612fe3565b60009182526020808320909101546001600160a01b031683528201929092526040019020548251839083908110610cb157610cb1612fe3565b6020908102919091010152600101610c39565b5060ce6000866001600160a01b03166001600160a01b031681526020019081526020016000208181805480602002602001604051908101604052809291908181526020018280548015610d4057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d22575b50505050509150935093505050915091565b60cb546001600160a01b03163314610d7c5760405162461bcd60e51b815260040161062490612f1b565b8060005b81811015610bcc5760d16000858584818110610d9e57610d9e612fe3565b9050602002016020810190610db391906129e8565b6001600160a01b0316815260208101919091526040016000205460ff1615610ebe57600060d16000868685818110610ded57610ded612fe3565b9050602002016020810190610e0291906129e8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030848483818110610e5d57610e5d612fe3565b9050602002016020810190610e7291906129e8565b6040516001600160a01b03909116815260200160405180910390a1610ebe848483818110610ea257610ea2612fe3565b9050602002016020810190610eb791906129e8565b6000611ad6565b600101610d80565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610f0e5760405162461bcd60e51b815260040161062490612f85565b610bcc84848484611d4c565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610f625760405162461bcd60e51b815260040161062490612f85565b604051636ce5768960e11b81526001600160a01b03858116600483015282811660248301526044820184905284169063d9caed1290606401600060405180830381600087803b158015610fb457600080fd5b505af1158015610fc8573d6000803e3d6000fd5b5050505050505050565b610fda611b44565b61063681611fd9565b60ce6020528160005260406000208181548110610fff57600080fd5b6000918252602090912001546001600160a01b03169150829050565b600054610100900460ff161580801561103b5750600054600160ff909116105b806110555750303b158015611055575060005460ff166001145b6110b85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610624565b6000805460ff1916600117905580156110db576000805461ff0019166101001790555b6110e3612042565b60c9556110f083836120d9565b6110f985611b9e565b61110284611fd9565b8015611148576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60cb546001600160a01b031633146111795760405162461bcd60e51b815260040161062490612f1b565b8281146112025760405162461bcd60e51b815260206004820152604b60248201527f53747261746567794d616e616765722e61646453747261746567696573546f4460448201527f65706f73697457686974656c6973743a206172726179206c656e67746873206460648201526a0de40dcdee840dac2e8c6d60ab1b608482015260a401610624565b8260005b818110156113705760d1600087878481811061122457611224612fe3565b905060200201602081019061123991906129e8565b6001600160a01b0316815260208101919091526040016000205460ff1661136857600160d1600088888581811061127257611272612fe3565b905060200201602081019061128791906129e8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe8686838181106112e2576112e2612fe3565b90506020020160208101906112f791906129e8565b6040516001600160a01b03909116815260200160405180910390a161136886868381811061132757611327612fe3565b905060200201602081019061133c91906129e8565b85858481811061134e5761134e612fe3565b90506020020160208101906113639190612ff9565b611ad6565b600101611206565b505050505050565b6098546000908190600190811614156113cf5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610624565b600260655414156114225760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610624565b600260655561143333868686611907565b600160655595945050505050565b611449611b44565b6001600160a01b0381166114ae5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610624565b61063681611b9e565b60007f0000000000000000000000000000000000000000000000000000000000007a694614156114e8575060c95490565b6114f0612042565b905090565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156c9190612e4f565b6001600160a01b0316336001600160a01b03161461159c5760405162461bcd60e51b815260040161062490612e6c565b60985419811960985419161461161a5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610624565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161076d565b6001600160a01b0381166116df5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610624565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383163b1561186757604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e90611788908690869060040161306e565b602060405180830381865afa1580156117a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c99190613087565b6001600160e01b031916146118625760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610624565b505050565b826001600160a01b031661187b83836121bf565b6001600160a01b0316146118625760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610624565b6001600160a01b038316600090815260d16020526040812054849060ff166119ad5760405162461bcd60e51b815260206004820152604d60248201527f53747261746567794d616e616765722e6f6e6c7953747261746567696573576860448201527f6974656c6973746564466f724465706f7369743a207374726174656779206e6f60648201526c1d081dda1a5d195b1a5cdd1959609a1b608482015260a401610624565b6119c26001600160a01b0385163387866121e3565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303816000875af1158015611a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3591906130b1565b9150611a4386858785611d4c565b604051631452b9d760e11b81526001600160a01b0387811660048301528681166024830152604482018490527f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916906328a573ae90606401600060405180830381600087803b158015611ab557600080fd5b505af1158015611ac9573d6000803e3d6000fd5b5050505050949350505050565b604080516001600160a01b038416815282151560208201527f77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786910160405180910390a16001600160a01b0391909116600090815260d360205260409020805460ff1916911515919091179055565b6033546001600160a01b03163314610b775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610624565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081611c655760405162461bcd60e51b815260206004820152603e60248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a207360448201527f68617265416d6f756e742073686f756c64206e6f74206265207a65726f2100006064820152608401610624565b6001600160a01b03808516600090815260cd602090815260408083209387168352929052205480831115611cf75760405162461bcd60e51b815260206004820152603360248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a20736044820152720d0c2e4ca82dadeeadce840e8dede40d0d2ced606b1b6064820152608401610624565b6001600160a01b03808616600090815260cd602090815260408083209388168352929052208382039081905590831415611d3f57611d35858561223d565b6001915050611d45565b60009150505b9392505050565b6001600160a01b038416611dc85760405162461bcd60e51b815260206004820152603960248201527f53747261746567794d616e616765722e5f6164645368617265733a207374616b60448201527f65722063616e6e6f74206265207a65726f2061646472657373000000000000006064820152608401610624565b80611e345760405162461bcd60e51b815260206004820152603660248201527f53747261746567794d616e616765722e5f6164645368617265733a207368617260448201527565732073686f756c64206e6f74206265207a65726f2160501b6064820152608401610624565b6001600160a01b03808516600090815260cd6020908152604080832093861683529290522054611f45576001600160a01b038416600090815260ce602090815260409091205410611f065760405162461bcd60e51b815260206004820152605060248201527f53747261746567794d616e616765722e5f6164645368617265733a206465706f60448201527f73697420776f756c6420657863656564204d41585f5354414b45525f5354524160648201526f0a88a8eb2be9892a6a8be988a9c8ea8960831b608482015260a401610624565b6001600160a01b03848116600090815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169184169190911790555b6001600160a01b03808516600090815260cd6020908152604080832093861683529290529081208054839290611f7c9084906130e0565b9091555050604080516001600160a01b03868116825285811660208301528416818301526060810183905290517f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a969181900360800190a150505050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6097546001600160a01b03161580156120fa57506001600160a01b03821615155b61217c5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610624565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610a9a82611651565b60008060006121ce858561242f565b915091506121db8161249f565b509392505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610bcc90859061265a565b6001600160a01b038216600090815260ce6020526040812054905b81811015612358576001600160a01b03848116600090815260ce602052604090208054918516918390811061228f5761228f612fe3565b6000918252602090912001546001600160a01b03161415612350576001600160a01b038416600090815260ce6020526040902080546122d0906001906130f8565b815481106122e0576122e0612fe3565b60009182526020808320909101546001600160a01b03878116845260ce909252604090922080549190921691908390811061231d5761231d612fe3565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550612358565b600101612258565b818114156123e05760405162461bcd60e51b815260206004820152604960248201527f53747261746567794d616e616765722e5f72656d6f766553747261746567794660448201527f726f6d5374616b657253747261746567794c6973743a207374726174656779206064820152681b9bdd08199bdd5b9960ba1b608482015260a401610624565b6001600160a01b038416600090815260ce602052604090208054806124075761240761310f565b600082815260209020810160001990810180546001600160a01b031916905501905550505050565b6000808251604114156124665760208301516040840151606085015160001a61245a8782858561272c565b94509450505050612498565b8251604014156124905760208301516040840151612485868383612819565b935093505050612498565b506000905060025b9250929050565b60008160048111156124b3576124b3613125565b14156124bc5750565b60018160048111156124d0576124d0613125565b141561251e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610624565b600281600481111561253257612532613125565b14156125805760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610624565b600381600481111561259457612594613125565b14156125ed5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610624565b600481600481111561260157612601613125565b14156106365760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610624565b60006126af826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166128529092919063ffffffff16565b80519091501561186257808060200190518101906126cd9190612eb6565b6118625760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610624565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156127635750600090506003612810565b8460ff16601b1415801561277b57508460ff16601c14155b1561278c5750600090506004612810565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156127e0573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661280957600060019250925050612810565b9150600090505b94509492505050565b6000806001600160ff1b0383168161283660ff86901c601b6130e0565b90506128448782888561272c565b935093505050935093915050565b60606128618484600085612869565b949350505050565b6060824710156128ca5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610624565b6001600160a01b0385163b6129215760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610624565b600080866001600160a01b0316858760405161293d919061313b565b60006040518083038185875af1925050503d806000811461297a576040519150601f19603f3d011682016040523d82523d6000602084013e61297f565b606091505b509150915061298f82828661299a565b979650505050505050565b606083156129a9575081611d45565b8251156129b95782518084602001fd5b8160405162461bcd60e51b81526004016106249190613157565b6001600160a01b038116811461063657600080fd5b6000602082840312156129fa57600080fd5b8135611d45816129d3565b600060208284031215612a1757600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c08789031215612a4d57600080fd5b8635612a58816129d3565b95506020870135612a68816129d3565b9450604087013593506060870135612a7f816129d3565b92506080870135915060a087013567ffffffffffffffff80821115612aa357600080fd5b818901915089601f830112612ab757600080fd5b813581811115612ac957612ac9612a1e565b604051601f8201601f19908116603f01168101908382118183101715612af157612af1612a1e565b816040528281528c6020848701011115612b0a57600080fd5b8260208601602083013760006020848301015280955050505050509295509295509295565b801515811461063657600080fd5b60008060408385031215612b5057600080fd5b8235612b5b816129d3565b91506020830135612b6b81612b2f565b809150509250929050565b600060208284031215612b8857600080fd5b813560ff81168114611d4557600080fd5b60008060408385031215612bac57600080fd5b8235612bb7816129d3565b91506020830135612b6b816129d3565b600080600060608486031215612bdc57600080fd5b8335612be7816129d3565b92506020840135612bf7816129d3565b929592945050506040919091013590565b604080825283519082018190526000906020906060840190828701845b82811015612c4a5781516001600160a01b031684529284019290840190600101612c25565b5050508381038285015284518082528583019183019060005b81811015612c7f57835183529284019291840191600101612c63565b5090979650505050505050565b60008083601f840112612c9e57600080fd5b50813567ffffffffffffffff811115612cb657600080fd5b6020830191508360208260051b850101111561249857600080fd5b60008060208385031215612ce457600080fd5b823567ffffffffffffffff811115612cfb57600080fd5b612d0785828601612c8c565b90969095509350505050565b60008060008060808587031215612d2957600080fd5b8435612d34816129d3565b93506020850135612d44816129d3565b92506040850135612d54816129d3565b9396929550929360600135925050565b60008060008060808587031215612d7a57600080fd5b8435612d85816129d3565b93506020850135612d95816129d3565b9250604085013591506060850135612dac816129d3565b939692955090935050565b60008060408385031215612dca57600080fd5b8235612dd5816129d3565b946020939093013593505050565b60008060008060408587031215612df957600080fd5b843567ffffffffffffffff80821115612e1157600080fd5b612e1d88838901612c8c565b90965094506020870135915080821115612e3657600080fd5b50612e4387828801612c8c565b95989497509550505050565b600060208284031215612e6157600080fd5b8151611d45816129d3565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215612ec857600080fd5b8151611d4581612b2f565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526044908201527f53747261746567794d616e616765722e6f6e6c7953747261746567795768697460408201527f656c69737465723a206e6f742074686520737472617465677957686974656c6960608201526339ba32b960e11b608082015260a00190565b602080825260409082018190527f53747261746567794d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561300b57600080fd5b8135611d4581612b2f565b60005b83811015613031578181015183820152602001613019565b83811115610bcc5750506000910152565b6000815180845261305a816020860160208601613016565b601f01601f19169290920160200192915050565b8281526040602082015260006128616040830184613042565b60006020828403121561309957600080fd5b81516001600160e01b031981168114611d4557600080fd5b6000602082840312156130c357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156130f3576130f36130ca565b500190565b60008282101561310a5761310a6130ca565b500390565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000825161314d818460208701613016565b9190910192915050565b602081526000611d45602083018461304256fea264697066735822122078a77ee71704c26ce62db1149f0906c813c896ae6dd2117779e31e5f8a79defd64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x14dc79964da2c08b23698b3d3cc7ca32193d9955":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x15d34aaf54267db7d7c367839aaf71a00a2c6a65":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x1613beb3b2c4f22ee086b2b38c1476a3ce7f78e8":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x809d550fca64d94bd9f66e60752a544199cfac3d","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x9e545e3c0baab3e08cdfd552c960a1050f373042"}},"0x2279b7a0a67db372996a5fab50d91eaa73d2ebe6":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0x97":"0x0","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x9a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x23618e81e3f5cdf7f54c3d65f7fbc0abf5b21e8f":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x2bdcc0de6be1f7d2ee689a0342d76f52e8efaba3":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061012e5760003560e01c8063715018a6116100ab578063b57082301161006f578063b5708230146103cd578063bf322658146103ed578063c0c53b8b1461040d578063d3c7f8331461042d578063f2fde38b1461044d578063f83d08ba1461046d57600080fd5b8063715018a6146103055780638456cb591461031a5780638da5cb5b1461032f5780639907e0ab14610361578063a69df4b5146103b857600080fd5b80634d5431ea116100f25780634d5431ea1461026c5780634f1ef286146102a557806352d1902d146102b85780635a3f631a146102cd5780635c975abb146102e257600080fd5b806317d89c4e146101935780632df4e21e146101df5780632e1a7d4d146102155780633659cfe6146102375780633f4ba83a1461025757600080fd5b3661018e5733600090815260fd602052604081208054349290610152908490611e5d565b909155505060405134815233907f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be7709060200160405180910390a2005b600080fd5b34801561019f57600080fd5b506101cc6101ae366004611e8a565b6001600160a01b0316600090815260fd602052604090206002015490565b6040519081526020015b60405180910390f35b3480156101eb57600080fd5b506101cc6101fa366004611e8a565b6001600160a01b0316600090815260fd602052604090205490565b34801561022157600080fd5b50610235610230366004611ea7565b610482565b005b34801561024357600080fd5b50610235610252366004611e8a565b6105f6565b34801561026357600080fd5b506102356106d6565b34801561027857600080fd5b506101cc610287366004611e8a565b6001600160a01b0316600090815260fd602052604090206001015490565b6102356102b3366004611ed6565b6106e8565b3480156102c457600080fd5b506101cc6107b9565b3480156102d957600080fd5b506101cc606481565b3480156102ee57600080fd5b5060655460ff1660405190151581526020016101d6565b34801561031157600080fd5b5061023561086c565b34801561032657600080fd5b5061023561087e565b34801561033b57600080fd5b506033546001600160a01b03165b6040516001600160a01b0390911681526020016101d6565b34801561036d57600080fd5b5061039d61037c366004611e8a565b60fd6020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016101d6565b3480156103c457600080fd5b5061023561088e565b3480156103d957600080fd5b5060fc54610349906001600160a01b031681565b3480156103f957600080fd5b50610235610408366004611fdf565b61094f565b34801561041957600080fd5b506102356104283660046120c3565b610d24565b34801561043957600080fd5b5060fb54610349906001600160a01b031681565b34801561045957600080fd5b50610235610468366004611e8a565b610e79565b34801561047957600080fd5b50610235610eef565b61048a610f90565b33600090815260fd6020526040902080548211156104ef5760405162461bcd60e51b815260206004820152601e60248201527f50617965722068617320696e73756666696369656e742062616c616e6365000060448201526064015b60405180910390fd5b600181015415801590610506575043816001015411155b6105455760405162461bcd60e51b815260206004820152601060248201526f119d5b991cc8185c99481b1bd8dad95960821b60448201526064016104e6565b81816000016000828254610559919061210e565b909155505060006001820181905560405133917fc5f84593e7086c66a205abab7ee44e1a8e6db58e50bf18ca46cb8239118b5ecd91a2604051339083156108fc029084906000818181858888f193505050501580156105bc573d6000803e3d6000fd5b5060405182815233907feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d9060200160405180910390a25050565b306001600160a01b037f0000000000000000000000002bdcc0de6be1f7d2ee689a0342d76f52e8efaba316141561063f5760405162461bcd60e51b81526004016104e690612125565b7f0000000000000000000000002bdcc0de6be1f7d2ee689a0342d76f52e8efaba36001600160a01b0316610688600080516020612459833981519152546001600160a01b031690565b6001600160a01b0316146106ae5760405162461bcd60e51b81526004016104e690612171565b6106b781610fd6565b604080516000808252602082019092526106d391839190610fde565b50565b6106de61114e565b6106e66111a8565b565b306001600160a01b037f0000000000000000000000002bdcc0de6be1f7d2ee689a0342d76f52e8efaba31614156107315760405162461bcd60e51b81526004016104e690612125565b7f0000000000000000000000002bdcc0de6be1f7d2ee689a0342d76f52e8efaba36001600160a01b031661077a600080516020612459833981519152546001600160a01b031690565b6001600160a01b0316146107a05760405162461bcd60e51b81526004016104e690612171565b6107a982610fd6565b6107b582826001610fde565b5050565b6000306001600160a01b037f0000000000000000000000002bdcc0de6be1f7d2ee689a0342d76f52e8efaba316146108595760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016104e6565b5060008051602061245983398151915290565b61087461114e565b6106e660006111fa565b61088661114e565b6106e661124c565b610896610f90565b33600090815260fd60205260409020546108f25760405162461bcd60e51b815260206004820152601b60248201527f5573657220686173206e6f2066756e647320746f20756e6c6f636b000000000060448201526064016104e6565b6108fd606443611e5d565b33600081815260fd6020526040908190206001018390555190917f43e8fb9d4f009c90c55a3fa108b177b794704d61af7af6f6512db7883f8ed8439161094591815260200190565b60405180910390a2565b60fb546001600160a01b031633146109b55760405162461bcd60e51b815260206004820152602360248201527f4f6e6c7920426174636865722063616e2063616c6c20746869732066756e637460448201526234b7b760e91b60648201526084016104e6565b6109bd610f90565b848360006109cb3a866121bd565b905060006109d93a866121bd565b905060008411610a215760405162461bcd60e51b8152602060048201526013602482015272139bc81b19585d995cc81cdd589b5a5d1d1959606a1b60448201526064016104e6565b60008311610a715760405162461bcd60e51b815260206004820152601d60248201527f4e6f2070726f6f66207375626d6974746572207369676e61747572657300000060448201526064016104e6565b82841015610ab55760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f756768206c656176657360781b60448201526064016104e6565b610ac060018561210e565b841615610b195760405162461bcd60e51b815260206004820152602160248201527f4c6561766573206c656e677468206973206e6f74206120706f776572206f66206044820152601960f91b60648201526084016104e6565b60008211610b615760405162461bcd60e51b815260206004820152601560248201527427379033b0b9903337b91030b3b3b932b3b0ba37b960591b60448201526064016104e6565b60008111610ba45760405162461bcd60e51b815260206004820152601060248201526f27379033b0b9903832b910383937b7b360811b60448201526064016104e6565b81610baf84836121bd565b11610c085760405162461bcd60e51b8152602060048201526024808201527f4e6f7420656e6f7567682067617320746f20706179207468652061676772656760448201526330ba37b960e11b60648201526084016104e6565b610c168a8a8f8b8b86611289565b60fc60009054906101000a90046001600160a01b03166001600160a01b0316635c008994838f8f8f6040518563ffffffff1660e01b8152600401610c5c93929190612205565b6000604051808303818588803b158015610c7557600080fd5b505af1158015610c89573d6000803e3d6000fd5b50505050508c7f42e8b4c4d2caef98adf791972bad42982fe6df907c366fc36f9e0e1e2d29de4e8d8d604051610cc092919061221f565b60405180910390a260fb546001600160a01b03166108fc83610ce286856121bd565b610cec919061210e565b6040518115909202916000818181858888f19350505050158015610d14573d6000803e3d6000fd5b5050505050505050505050505050565b600054610100900460ff1615808015610d445750600054600160ff909116105b80610d5e5750303b158015610d5e575060005460ff166001145b610dc15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104e6565b6000805460ff191660011790558015610de4576000805461ff0019166101001790555b610dec611616565b610df4611645565b610dfd836111fa565b60fc80546001600160a01b038087166001600160a01b03199283161790925560fb8054928516929091169190911790558015610e73576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610e8161114e565b6001600160a01b038116610ee65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104e6565b6106d3816111fa565b610ef7610f90565b33600090815260fd6020526040902054610f535760405162461bcd60e51b815260206004820152601960248201527f5573657220686173206e6f2066756e647320746f206c6f636b0000000000000060448201526064016104e6565b33600081815260fd6020526040808220600101829055517fc5f84593e7086c66a205abab7ee44e1a8e6db58e50bf18ca46cb8239118b5ecd9190a2565b60655460ff16156106e65760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104e6565b6106d361114e565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611016576110118361166c565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611070575060408051601f3d908101601f1916820190925261106d9181019061223b565b60015b6110d35760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016104e6565b60008051602061245983398151915281146111425760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016104e6565b50611011838383611708565b6033546001600160a01b031633146106e65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104e6565b6111b061172d565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611254610f90565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586111dd3390565b6000611296600287612254565b905060008167ffffffffffffffff8111156112b3576112b3611ec0565b6040519080825280602002602001820160405280156112dc578160200160208202803683370190505b50905060005b828163ffffffff1610156114075788886112fd836002612276565b63ffffffff16818110611312576113126122a2565b9050602002013589898360026113289190612276565b6113339060016122b8565b63ffffffff16818110611348576113486122a2565b90506020020135604051602001611369929190918252602082015260400190565b60405160208183030381529060405280519060200120828263ffffffff1681518110611397576113976122a2565b6020026020010181815250506113f589898363ffffffff168181106113be576113be6122a2565b9050602002013587878463ffffffff168181106113dd576113dd6122a2565b90506020028101906113ef91906122e0565b86611776565b806113ff81612300565b9150506112e2565b63ffffffff81168511156114425761143089898363ffffffff168181106113be576113be6122a2565b8061143a81612300565b915050611407565b61144d600284612254565b92505b8215611540575060005b828163ffffffff16101561152e5781611474826002612276565b63ffffffff168151811061148a5761148a6122a2565b6020026020010151828260026114a09190612276565b6114ab9060016122b8565b63ffffffff16815181106114c1576114c16122a2565b60200260200101516040516020016114e3929190918252602082015260400190565b60405160208183030381529060405280519060200120828263ffffffff1681518110611511576115116122a2565b60209081029190910101528061152681612300565b91505061145a565b611539600284612254565b9250611450565b60018814156115ac57868989600081811061155d5761155d6122a2565b90506020020135146115a75760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b595c9adb19481c9bdbdd606a1b60448201526064016104e6565b61160b565b86826000815181106115c0576115c06122a2565b60200260200101511461160b5760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b595c9adb19481c9bdbdd606a1b60448201526064016104e6565b505050505050505050565b600054610100900460ff1661163d5760405162461bcd60e51b81526004016104e690612324565b6106e661192e565b600054610100900460ff166106e65760405162461bcd60e51b81526004016104e690612324565b6001600160a01b0381163b6116d95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016104e6565b60008051602061245983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6117118361195e565b60008251118061171e5750805b1561101157610e73838361199e565b60655460ff166106e65760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104e6565b604080516020808201869052848101358284015246606080840191909152835180840390910181526080909201909252805191012060006117f76117ba858061236f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508693925050611a929050565b90506001600160a01b0381166118435760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016104e6565b6001600160a01b038116600090815260fd6020908152604090912060028101549091860135146118a55760405162461bcd60e51b815260206004820152600d60248201526c496e76616c6964204e6f6e636560981b60448201526064016104e6565b6002810180549060006118b7836123b6565b9091555050805484111561190d5760405162461bcd60e51b815260206004820152601f60248201527f5369676e65722068617320696e73756666696369656e742062616c616e63650060448201526064016104e6565b83816000016000828254611921919061210e565b9091555050505050505050565b600054610100900460ff166119555760405162461bcd60e51b81526004016104e690612324565b6106e6336111fa565b6119678161166c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b611a065760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016104e6565b600080846001600160a01b031684604051611a2191906123fd565b600060405180830381855af49150503d8060008114611a5c576040519150601f19603f3d011682016040523d82523d6000602084013e611a61565b606091505b5091509150611a89828260405180606001604052806027815260200161247960279139611ab6565b95945050505050565b6000806000611aa18585611af6565b91509150611aae81611b66565b509392505050565b60608315611ac5575081611aef565b825115611ad55782518084602001fd5b8160405162461bcd60e51b81526004016104e6919061240f565b9392505050565b600080825160411415611b2d5760208301516040840151606085015160001a611b2187828585611d21565b94509450505050611b5f565b825160401415611b575760208301516040840151611b4c868383611e0e565b935093505050611b5f565b506000905060025b9250929050565b6000816004811115611b7a57611b7a612442565b1415611b835750565b6001816004811115611b9757611b97612442565b1415611be55760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104e6565b6002816004811115611bf957611bf9612442565b1415611c475760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104e6565b6003816004811115611c5b57611c5b612442565b1415611cb45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104e6565b6004816004811115611cc857611cc8612442565b14156106d35760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016104e6565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611d585750600090506003611e05565b8460ff16601b14158015611d7057508460ff16601c14155b15611d815750600090506004611e05565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611dd5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611dfe57600060019250925050611e05565b9150600090505b94509492505050565b6000806001600160ff1b03831681611e2b60ff86901c601b611e5d565b9050611e3987828885611d21565b935093505050935093915050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611e7057611e70611e47565b500190565b6001600160a01b03811681146106d357600080fd5b600060208284031215611e9c57600080fd5b8135611aef81611e75565b600060208284031215611eb957600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215611ee957600080fd5b8235611ef481611e75565b9150602083013567ffffffffffffffff80821115611f1157600080fd5b818501915085601f830112611f2557600080fd5b813581811115611f3757611f37611ec0565b604051601f8201601f19908116603f01168101908382118183101715611f5f57611f5f611ec0565b81604052828152886020848701011115611f7857600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60008083601f840112611fac57600080fd5b50813567ffffffffffffffff811115611fc457600080fd5b6020830191508360208260051b8501011115611b5f57600080fd5b600080600080600080600080600060c08a8c031215611ffd57600080fd5b8935985060208a013567ffffffffffffffff8082111561201c57600080fd5b818c0191508c601f83011261203057600080fd5b81358181111561203f57600080fd5b8d602082850101111561205157600080fd5b602083019a508099505060408c013591508082111561206f57600080fd5b61207b8d838e01611f9a565b909850965060608c013591508082111561209457600080fd5b506120a18c828d01611f9a565b9a9d999c50979a96999598959660808101359660a09091013595509350505050565b6000806000606084860312156120d857600080fd5b83356120e381611e75565b925060208401356120f381611e75565b9150604084013561210381611e75565b809150509250925092565b60008282101561212057612120611e47565b500390565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60008160001904831182151516156121d7576121d7611e47565b500290565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b838152604060208201526000611a896040830184866121dc565b6020815260006122336020830184866121dc565b949350505050565b60006020828403121561224d57600080fd5b5051919050565b60008261227157634e487b7160e01b600052601260045260246000fd5b500490565b600063ffffffff8083168185168183048111821515161561229957612299611e47565b02949350505050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff8083168185168083038211156122d7576122d7611e47565b01949350505050565b60008235603e198336030181126122f657600080fd5b9190910192915050565b600063ffffffff8083168181141561231a5761231a611e47565b6001019392505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000808335601e1984360301811261238657600080fd5b83018035915067ffffffffffffffff8211156123a157600080fd5b602001915036819003821315611b5f57600080fd5b60006000198214156123ca576123ca611e47565b5060010190565b60005b838110156123ec5781810151838201526020016123d4565b83811115610e735750506000910152565b600082516122f68184602087016123d1565b602081526000825180602084015261242e8160408501602087016123d1565b601f01601f19169190910160400192915050565b634e487b7160e01b600052602160045260246000fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220f017ddf418294df667ce25f9726ea8f16136558826945004552399a397f7801564736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x4e59b44847b379578588920ca78fbf26c0b4956c":{"nonce":0,"balance":"0x0","code":"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3","storage":{}},"0x5eb3bc0a489c5a8288765d2336659ebca68fcd00":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106103265760003560e01c80635b0b829f116101b85780639e9923c211610104578063d72d8dd6116100a2578063e65797ad1161007c578063e65797ad1461083b578063f2fde38b146108de578063fabc1cbc146108f1578063fd39105a1461090457600080fd5b8063d72d8dd61461080d578063d75b4c8814610815578063dd8283f31461082857600080fd5b8063a96f783e116100de578063a96f783e146107aa578063c391425e146107b3578063ca0de882146107d3578063ca4f2d97146107fa57600080fd5b80639e9923c2146107495780639feab85914610770578063a50857bf1461079757600080fd5b8063715018a611610171578063886f11951161014b578063886f1195146106f65780638da5cb5b1461070f5780639aa1653d146107175780639b5d177b1461073657600080fd5b8063715018a6146106c857806384ca5213146106d0578063871ef049146106e357600080fd5b80635b0b829f146106395780635c975abb1461064c5780635df45946146106545780636347c9001461067b578063683048351461068e5780636e3b17db146106b557600080fd5b8063249a0c42116102775780633998fdd3116102305780635140a5481161020a5780635140a548146105df5780635865c60c146105f2578063595c6a67146106125780635ac86ab71461061a57600080fd5b80633998fdd31461056c5780633af32abf146105935780633c2a7f4c146105bf57600080fd5b8063249a0c42146104ed57806328f61b311461050d57806329092d0e14610520578063296bb0641461053357806329d1e0c3146105465780632cdd1e861461055957600080fd5b80630d3f2134116102e457806313542a4e116102be57806313542a4e14610435578063136439dd1461045e5780631478851f146104715780631eb812da146104a457600080fd5b80630d3f2134146103ef57806310d67a2f14610402578063125e05841461041557600080fd5b8062cf2ab51461032b57806303fd34921461034057806304ec635114610373578063054310e61461039e5780630a3b0a4f146103c95780630cf4b767146103dc575b600080fd5b61033e610339366004614429565b610940565b005b61036061034e36600461446a565b60009081526098602052604090205490565b6040519081526020015b60405180910390f35b610386610381366004614495565b610a56565b6040516001600160c01b03909116815260200161036a565b609d546103b1906001600160a01b031681565b6040516001600160a01b03909116815260200161036a565b61033e6103d73660046144f2565b610b66565b61033e6103ea3660046145f6565b610b92565b61033e6103fd36600461446a565b610c3c565b61033e6104103660046144f2565b610c49565b6103606104233660046144f2565b609f6020526000908152604090205481565b6103606104433660046144f2565b6001600160a01b031660009081526099602052604090205490565b61033e61046c36600461446a565b610cfc565b61049461047f36600461446a565b609a6020526000908152604090205460ff1681565b604051901515815260200161036a565b6104b76104b2366004614646565b610e39565b60408051825163ffffffff908116825260208085015190911690820152918101516001600160c01b03169082015260600161036a565b6103606104fb366004614679565b609b6020526000908152604090205481565b609e546103b1906001600160a01b031681565b61033e61052e3660046144f2565b610eca565b6103b161054136600461446a565b610ef3565b61033e6105543660046144f2565b610f7f565b61033e6105673660046144f2565b610f90565b6103b17f0000000000000000000000001613beb3b2c4f22ee086b2b38c1476a3ce7f78e881565b6104946105a13660046144f2565b6001600160a01b0316600090815260c8602052604090205460ff1690565b6105d26105cd3660046144f2565b610fa1565b60405161036a9190614694565b61033e6105ed3660046146ec565b611020565b6106056106003660046144f2565b611406565b60405161036a919061478f565b61033e61147a565b610494610628366004614679565b6001805460ff9092161b9081161490565b61033e610647366004614814565b611546565b600154610360565b6103b17f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e81565b6103b161068936600461446a565b6115a0565b6103b17f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377881565b61033e6106c3366004614848565b6115ca565b61033e61171f565b6103606106de3660046148ff565b611733565b6103866106f136600461446a565b61177d565b6000546103b1906201000090046001600160a01b031681565b6103b1611788565b6096546107249060ff1681565b60405160ff909116815260200161036a565b61033e610744366004614a98565b6117a1565b6103b17f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f3681565b6103607f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de681565b61033e6107a5366004614b91565b611abb565b61036060a05481565b6107c66107c1366004614c39565b611c21565b60405161036a9190614cde565b6103607f4d404e3276e7ac2163d8ee476afa6a41d1f68fb71f2d8b6546b24e55ce01b72a81565b61033e610808366004614d28565b611cda565b609c54610360565b61033e610823366004614e0e565b611d41565b61033e610836366004614fc1565b611d54565b6108aa610849366004614679565b60408051606080820183526000808352602080840182905292840181905260ff9490941684526097825292829020825193840183525463ffffffff8116845261ffff600160201b8204811692850192909252600160301b9004169082015290565b60408051825163ffffffff16815260208084015161ffff90811691830191909152928201519092169082015260600161036a565b61033e6108ec3660046144f2565b61201e565b61033e6108ff36600461446a565b612094565b6109336109123660046144f2565b6001600160a01b031660009081526099602052604090206001015460ff1690565b60405161036a9190615095565b600154600290600490811614156109725760405162461bcd60e51b8152600401610969906150a3565b60405180910390fd5b60005b82811015610a50576000848483818110610991576109916150da565b90506020020160208101906109a691906144f2565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff1660028111156109f1576109f1614757565b6002811115610a0257610a02614757565b90525080519091506000610a15826121f0565b90506000610a2b826001600160c01b0316612259565b9050610a38858583612325565b50505050508080610a4890615106565b915050610975565b50505050565b6000838152609860205260408120805482919084908110610a7957610a796150da565b600091825260209182902060408051606081018252929091015463ffffffff808216808552600160201b8304821695850195909552600160401b9091046001600160c01b03169183019190915290925085161015610aff5760405162461bcd60e51b8152602060048201526003602482015262189b8f60ea1b6044820152606401610969565b602081015163ffffffff161580610b255750806020015163ffffffff168463ffffffff16105b610b5a5760405162461bcd60e51b81526004016109699060208082526004908201526331371e1960e11b604082015260600190565b60400151949350505050565b610b6e612412565b6001600160a01b0316600090815260c860205260409020805460ff19166001179055565b60013360009081526099602052604090206001015460ff166002811115610bbb57610bbb614757565b14610bf05760405162461bcd60e51b81526020600482015260056024820152646f2152656760d81b6044820152606401610969565b33600090815260996020526040908190205490517fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa90610c3190849061516e565b60405180910390a250565b610c44612412565b60a055565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc09190615181565b6001600160a01b0316336001600160a01b031614610cf05760405162461bcd60e51b81526004016109699061519e565b610cf981612471565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610d49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6d91906151e8565b610d895760405162461bcd60e51b81526004016109699061520a565b60015481811614610e025760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610969565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d90602001610c31565b60408051606081018252600080825260208201819052918101919091526000838152609860205260409020805483908110610e7657610e766150da565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160c01b03600160401b909304929092169082015290505b92915050565b610ed2612412565b6001600160a01b0316600090815260c860205260409020805460ff19169055565b6040516308f6629d60e31b8152600481018290526000907f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b0316906347b314e890602401602060405180830381865afa158015610f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec49190615181565b610f87612412565b610cf981612576565b610f98612412565b610cf9816125df565b6040805180820190915260008082526020820152610ec461101b7f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de6846040516020016110009291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120612648565b612696565b600154600290600490811614156110495760405162461bcd60e51b8152600401610969906150a3565b600061109184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff1691506127269050565b90508483146110cb5760405162461bcd60e51b81526020600482015260066024820152653931a8a632b760d11b6044820152606401610969565b60005b838110156113fd5760008585838181106110ea576110ea6150da565b919091013560f81c9150369050600089898581811061110b5761110b6150da565b905060200281019061111d9190615252565b6040516379a0849160e11b815260ff8616600482015291935091507f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f366001600160a01b03169063f341092290602401602060405180830381865afa158015611189573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ad919061529b565b63ffffffff1681146111ec5760405162461bcd60e51b81526020600482015260086024820152673931a8a7b82632b760c11b6044820152606401610969565b6000805b8281101561139c57600084848381811061120c5761120c6150da565b905060200201602081019061122191906144f2565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff16600281111561126c5761126c614757565b600281111561127d5761127d614757565b90525080519091506000611290826121f0565b905060016001600160c01b03821660ff8b161c8116146112dd5760405162461bcd60e51b815260206004820152600860248201526772634f702152656760c01b6044820152606401610969565b856001600160a01b0316846001600160a01b0316116113285760405162461bcd60e51b8152602060048201526007602482015266072634475704f760cc1b6044820152606401610969565b5061138683838f8f8d908e600161133f91906152b8565b9261134c939291906152d0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061232592505050565b50909250611395905081615106565b90506111f0565b5060ff84166000818152609b6020908152604091829020439081905591519182527f46077d55330763f16269fd75e5761663f4192d2791747c0189b16ad31db07db4910160405180910390a250505050806113f690615106565b90506110ce565b50505050505050565b60408051808201909152600080825260208201526001600160a01b0382166000908152609960209081526040918290208251808401909352805483526001810154909183019060ff16600281111561146057611460614757565b600281111561147157611471614757565b90525092915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156114c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114eb91906151e8565b6115075760405162461bcd60e51b81526004016109699061520a565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b61154e612412565b609654829060ff908116908216106115915760405162461bcd60e51b815260206004820152600660248201526552433a71214560d01b6044820152606401610969565b61159b83836127b7565b505050565b609c81815481106115b057600080fd5b6000918252602090912001546001600160a01b0316905081565b609e546001600160a01b031633146116115760405162461bcd60e51b815260206004820152600a602482015269292190b2b532b1ba37b960b11b6044820152606401610969565b6001600160a01b0383166000908152609f602090815260408083204290556099825280832080548251601f870185900485028101850190935285835290939092909161167e9187908790819084018382808284376000920191909152505060965460ff1691506127269050565b9050600061168b836121f0565b905060018085015460ff1660028111156116a7576116a7614757565b1480156116bc57506001600160c01b03821615155b80156116da57506116da6001600160c01b0383811690831681161490565b156113fd576113fd8787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061286492505050565b611727612412565b6117316000612bec565b565b60006117737f4d404e3276e7ac2163d8ee476afa6a41d1f68fb71f2d8b6546b24e55ce01b72a8787878787604051602001611000969594939291906152fa565b9695505050505050565b6000610ec4826121f0565b600061179c6064546001600160a01b031690565b905090565b6001805460009190811614156117c95760405162461bcd60e51b8152600401610969906150a3565b33600090815260c8602052604090205460ff1661181a5760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610969565b8389146118525760405162461bcd60e51b81526004016109699060208082526004908201526338a632b760e11b604082015260600190565b600061185e3388612c3e565b90506118be33828888808060200260200160405190810160405280939291908181526020016000905b828210156118b3576118a46040830286013681900381019061537f565b81526020019060010190611887565b505050505087612d6f565b600061190533838e8e8e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250612e4b915050565b90506000609760008e8e6000818110611920576119206150da565b919091013560f81c825250602080820192909252604090810160009081208251606081018452905463ffffffff811680835261ffff600160201b8304811696840196909652600160301b90910490941692810192909252845180519294509161198b5761198b6150da565b602002602001015163ffffffff161115611aac57611a308d8d60008181106119b5576119b56150da565b9050013560f81c60f81b60f81c83604001516000815181106119d9576119d96150da565b60200260200101513385602001516000815181106119f9576119f96150da565b60200260200101518c8c6000818110611a1457611a146150da565b905060400201803603810190611a2a919061537f565b8661330f565b611aac88886000818110611a4657611a466150da565b9050604002016020016020810190611a5e91906144f2565b8e8e600090600192611a72939291906152d0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061286492505050565b50505050505050505050505050565b600180546000919081161415611ae35760405162461bcd60e51b8152600401610969906150a3565b33600090815260c8602052604090205460ff16611b345760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610969565b6000611b403385612c3e565b90506000611b8933838b8b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250612e4b915050565b51600080805260976020527f683723e34a772b6e4f2c919bba7fa32ed8ea11a8325f54da7db716e9d9dd98c754825192935063ffffffff1691839190611bd157611bd16150da565b602002602001015163ffffffff161115611c165760405162461bcd60e51b81526020600482015260066024820152650714d61784f760d41b6044820152606401610969565b505050505050505050565b6060600082516001600160401b03811115611c3e57611c3e61450f565b604051908082528060200260200182016040528015611c67578160200160208202803683370190505b50905060005b8351811015611cd257611c9985858381518110611c8c57611c8c6150da565b60200260200101516134df565b828281518110611cab57611cab6150da565b63ffffffff9092166020928302919091019091015280611cca81615106565b915050611c6d565b509392505050565b6001805460029081161415611d015760405162461bcd60e51b8152600401610969906150a3565b61159b3384848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061286492505050565b611d49612412565b61159b8383836135a2565b600054610100900460ff1615808015611d745750600054600160ff909116105b80611d8e5750303b158015611d8e575060005460ff166001145b611df15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610969565b6000805460ff191660011790558015611e14576000805461ff0019166101001790555b82518451148015611e26575081518351145b611e575760405162461bcd60e51b8152602060048201526002602482015261494560f01b6044820152606401610969565b611e6089612bec565b611e6a8686613784565b611e7388612576565b611e7c876125df565b609c80546001818101835560008381527faf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539c92830180546001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377881166001600160a01b03199283161790925585548085018755850180547f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e841690831617905585549384019095559190920180547f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f3690921691909316179091555b8451811015611fcd57611fbb858281518110611f7a57611f7a6150da565b6020026020010151858381518110611f9457611f946150da565b6020026020010151858481518110611fae57611fae6150da565b60200260200101516135a2565b80611fc581615106565b915050611f5c565b508015611c16576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050565b612026612412565b6001600160a01b03811661208b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610969565b610cf981612bec565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210b9190615181565b6001600160a01b0316336001600160a01b03161461213b5760405162461bcd60e51b81526004016109699061519e565b6001541981196001541916146121b95760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610969565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610c31565b6000818152609860205260408120548061220d5750600092915050565b600083815260986020526040902061222660018361539b565b81548110612236576122366150da565b600091825260209091200154600160401b90046001600160c01b03169392505050565b606060008061226784613874565b61ffff166001600160401b038111156122825761228261450f565b6040519080825280601f01601f1916602001820160405280156122ac576020820181803683370190505b5090506000805b8251821080156122c4575061010081105b1561231b576001811b93508584161561230b578060f81b8383815181106122ed576122ed6150da565b60200101906001600160f81b031916908160001a9053508160010191505b61231481615106565b90506122b3565b5090949350505050565b60018260200151600281111561233d5761233d614757565b1461234757505050565b81516040516333567f7f60e11b81526000906001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377816906366acfefe9061239c908890869088906004016153b2565b6020604051808303816000875af11580156123bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123df91906153e2565b90506001600160c01b0381161561240b5761240b85612406836001600160c01b0316612259565b612864565b5050505050565b3361241b611788565b6001600160a01b0316146117315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610969565b6001600160a01b0381166124ff5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610969565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b609d54604080516001600160a01b03928316815291831660208301527f315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c910160405180910390a1609d80546001600160a01b0319166001600160a01b0392909216919091179055565b609e54604080516001600160a01b03928316815291831660208301527f8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9910160405180910390a1609e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ec461265561389f565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6040805180820190915260008082526020820152600080806126c66000805160206158a283398151915286615421565b90505b6126d2816139c6565b90935091506000805160206158a283398151915282830983141561270c576040805180820190915290815260208101919091529392505050565b6000805160206158a28339815191526001820890506126c9565b60008061273284613a48565b9050808360ff166001901b116127b05760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610969565b9392505050565b60ff8216600081815260976020908152604091829020845181548684018051888701805163ffffffff90951665ffffffffffff199094168417600160201b61ffff938416021767ffff0000000000001916600160301b95831695909502949094179094558551918252518316938101939093525116918101919091527f3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac9060600160405180910390a25050565b6001600160a01b0382166000908152609960205260409020805460018083015460ff16600281111561289857612898614757565b146128cd5760405162461bcd60e51b81526020600482015260056024820152646f2152656760d81b6044820152606401610969565b6096546000906128e190859060ff16612726565b905060006128ee836121f0565b90506001600160c01b03821661292f5760405162461bcd60e51b815260040161096990602080825260049082015263071456d760e41b604082015260600190565b6129466001600160c01b0383811690831681161490565b61297b5760405162461bcd60e51b81526004016109699060208082526004908201526310a9bab160e11b604082015260600190565b6001600160c01b03828116198216166129948482613bd5565b6001600160c01b038116612a635760018501805460ff191660021790556040516351b27a6d60e11b81526001600160a01b0388811660048301527f0000000000000000000000001613beb3b2c4f22ee086b2b38c1476a3ce7f78e8169063a364f4da90602401600060405180830381600087803b158015612a1457600080fd5b505af1158015612a28573d6000803e3d6000fd5b50506040518692506001600160a01b038a1691507f396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e490600090a35b60405163f4e24fe560e01b81526001600160a01b037f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e169063f4e24fe590612ab1908a908a90600401615435565b600060405180830381600087803b158015612acb57600080fd5b505af1158015612adf573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377816925063bd29b8cd9150612b319087908a90600401615459565b600060405180830381600087803b158015612b4b57600080fd5b505af1158015612b5f573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f3616925063bd29b8cd9150612bb19087908a90600401615459565b600060405180830381600087803b158015612bcb57600080fd5b505af1158015612bdf573d6000803e3d6000fd5b5050505050505050505050565b606480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516309aa152760e11b81526001600160a01b0383811660048301526000917f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e909116906313542a4e90602401602060405180830381865afa158015612ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ccd9190615472565b905080610ec4577f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b031663bf79ce588484612d0e87610fa1565b6040518463ffffffff1660e01b8152600401612d2c9392919061548b565b6020604051808303816000875af1158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b09190615472565b6020808201516000908152609a909152604090205460ff1615612dbd5760405162461bcd60e51b815260206004820152600660248201526518da14d85b1d60d21b6044820152606401610969565b4281604001511015612df95760405162461bcd60e51b8152602060048201526005602482015264063684578760dc1b6044820152606401610969565b602080820180516000908152609a909252604091829020805460ff19166001179055609d54905191830151610a50926001600160a01b0390921691612e449188918891889190611733565b8351613d95565b612e6f60405180606001604052806060815260200160608152602001606081525090565b6000612eb786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff1691506127269050565b90506000612ec4886121f0565b90506001600160c01b038216612f055760405162461bcd60e51b815260040161096990602080825260049082015263071456d760e41b604082015260600190565b8082166001600160c01b031615612f475760405162461bcd60e51b81526004016109699060208082526004908201526308509a5d60e21b604082015260600190565b60a0546001600160a01b038a166000908152609f60205260409020546001600160c01b0383811690851617914291612f7f91906152b8565b10612fb45760405162461bcd60e51b815260206004820152600560248201526410b7b822b560d91b6044820152606401610969565b612fbe8982613bd5565b887fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa87604051612fee919061516e565b60405180910390a260016001600160a01b038b1660009081526099602052604090206001015460ff16600281111561302857613028614757565b14613141576040805180820182528a8152600160208083018281526001600160a01b038f166000908152609990925293902082518155925183820180549394939192909160ff19169083600281111561308357613083614757565b021790555050604051639926ee7d60e01b81526001600160a01b037f0000000000000000000000001613beb3b2c4f22ee086b2b38c1476a3ce7f78e8169150639926ee7d906130d8908d90899060040161550a565b600060405180830381600087803b1580156130f257600080fd5b505af1158015613106573d6000803e3d6000fd5b50506040518b92506001600160a01b038d1691507fe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe90600090a35b604051631fd93ca960e11b81526001600160a01b037f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e1690633fb2795290613191908d908c908c9060040161557e565b600060405180830381600087803b1580156131ab57600080fd5b505af11580156131bf573d6000803e3d6000fd5b5050604051632550477760e01b81526001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377816925063255047779150613215908d908d908d908d906004016155a3565b6000604051808303816000875af1158015613234573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261325c919081019061562f565b60408087019190915260208601919091525162bff04d60e01b81526001600160a01b037f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f36169062bff04d906132b9908c908c908c90600401615692565b6000604051808303816000875af11580156132d8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261330091908101906156ac565b84525050509695505050505050565b6020808301516001600160a01b0380821660008181526099909452604090932054919290871614156133695760405162461bcd60e51b815260206004820152600360248201526206368360ec1b6044820152606401610969565b8760ff16846000015160ff16146133a85760405162461bcd60e51b815260206004820152600360248201526263683160e81b6044820152606401610969565b604051635401ed2760e01b81526004810182905260ff891660248201526000907f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b031690635401ed2790604401602060405180830381865afa158015613419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343d9190615745565b90506134498185613f4f565b6001600160601b0316866001600160601b03161161348f5760405162461bcd60e51b815260206004820152600360248201526231b41960e91b6044820152606401610969565b6134998885613f73565b6001600160601b0316816001600160601b031610611c165760405162461bcd60e51b815260206004820152600360248201526263683360e81b6044820152606401610969565b600081815260986020526040812054815b81811015613571576001613504828461539b565b61350e919061539b565b92508463ffffffff16609860008681526020019081526020016000208463ffffffff1681548110613541576135416150da565b60009182526020909120015463ffffffff161161355f575050610ec4565b8061356981615106565b9150506134f0565b5060405162461bcd60e51b81526020600482015260056024820152644f2152656760d81b6044820152606401610969565b60965460ff1660c081106135e15760405162461bcd60e51b8152600401610969906020808252600490820152630e29ac2f60e31b604082015260600190565b6135ec816001615762565b6096805460ff191660ff929092169190911790558061360b81866127b7565b60405160016296b58960e01b031981526001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf6113778169063ff694a779061365e90849088908890600401615787565b600060405180830381600087803b15801561367857600080fd5b505af115801561368c573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f366001600160a01b031692506326d941f29150602401600060405180830381600087803b1580156136f457600080fd5b505af1158015613708573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b031692506326d941f29150602401600060405180830381600087803b15801561377057600080fd5b505af1158015611c16573d6000803e3d6000fd5b6000546201000090046001600160a01b03161580156137ab57506001600160a01b03821615155b61382d5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610969565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261387082612471565b5050565b6000805b8215610ec45761388960018461539b565b909216918061389781615800565b915050613878565b6000306001600160a01b037f0000000000000000000000005eb3bc0a489c5a8288765d2336659ebca68fcd00161480156138f857507f0000000000000000000000000000000000000000000000000000000000007a6946145b1561392257507fc6374306ca0c3d05fd3f0cebbec8fc4308f71679c06b0e30a95d8c9709d43dae90565b50604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527f6ec8a99f0e7f9ebde7354a446dcb9423f3af9c58f386a53c59c5b384f9e82d11828401527f6bda7e3f385e48841048390444cced5cc795af87758af67622e5f4f0882c4a9960608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600080806000805160206158a283398151915260036000805160206158a2833981519152866000805160206158a2833981519152888909090890506000613a3c827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f526000805160206158a2833981519152613f8d565b91959194509092505050565b600061010082511115613ad15760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610969565b8151613adf57506000919050565b60008083600081518110613af557613af56150da565b0160200151600160f89190911c81901b92505b8451811015613bcc57848181518110613b2357613b236150da565b0160200151600160f89190911c1b9150828211613bb85760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610969565b91811791613bc581615106565b9050613b08565b50909392505050565b60008281526098602052604090205480613c7a576000838152609860209081526040808320815160608101835263ffffffff43811682528185018681526001600160c01b03808a16958401958652845460018101865594885295909620915191909201805495519351909416600160401b026001600160401b03938316600160201b0267ffffffffffffffff1990961691909216179390931716919091179055505050565b6000838152609860205260408120613c9360018461539b565b81548110613ca357613ca36150da565b600091825260209091200180549091504363ffffffff90811691161415613ce75780546001600160401b0316600160401b6001600160c01b03851602178155610a50565b805463ffffffff438116600160201b81810267ffffffff0000000019909416939093178455600087815260986020908152604080832081516060810183529485528483018481526001600160c01b03808c1693870193845282546001810184559286529390942094519401805493519151909216600160401b026001600160401b0391861690960267ffffffffffffffff199093169390941692909217179190911691909117905550505050565b6001600160a01b0383163b15613eaf57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e90613dd59086908690600401615459565b602060405180830381865afa158015613df2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e169190615822565b6001600160e01b0319161461159b5760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610969565b826001600160a01b0316613ec3838361403c565b6001600160a01b03161461159b5760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610969565b602081015160009061271090613f699061ffff168561584c565b6127b0919061587b565b604081015160009061271090613f699061ffff168561584c565b600080613f986143a9565b613fa06143c7565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015613fe157613fe3565bfe5b50826140315760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610969565b505195945050505050565b600080600061404b8585614058565b91509150611cd2816140c8565b60008082516041141561408f5760208301516040840151606085015160001a61408387828585614283565b945094505050506140c1565b8251604014156140b957602083015160408401516140ae868383614370565b9350935050506140c1565b506000905060025b9250929050565b60008160048111156140dc576140dc614757565b14156140e55750565b60018160048111156140f9576140f9614757565b14156141475760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610969565b600281600481111561415b5761415b614757565b14156141a95760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610969565b60038160048111156141bd576141bd614757565b14156142165760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610969565b600481600481111561422a5761422a614757565b1415610cf95760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610969565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156142ba5750600090506003614367565b8460ff16601b141580156142d257508460ff16601c14155b156142e35750600090506004614367565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614337573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661436057600060019250925050614367565b9150600090505b94509492505050565b6000806001600160ff1b0383168161438d60ff86901c601b6152b8565b905061439b87828885614283565b935093505050935093915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60008083601f8401126143f757600080fd5b5081356001600160401b0381111561440e57600080fd5b6020830191508360208260051b85010111156140c157600080fd5b6000806020838503121561443c57600080fd5b82356001600160401b0381111561445257600080fd5b61445e858286016143e5565b90969095509350505050565b60006020828403121561447c57600080fd5b5035919050565b63ffffffff81168114610cf957600080fd5b6000806000606084860312156144aa57600080fd5b8335925060208401356144bc81614483565b929592945050506040919091013590565b6001600160a01b0381168114610cf957600080fd5b80356144ed816144cd565b919050565b60006020828403121561450457600080fd5b81356127b0816144cd565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156145475761454761450f565b60405290565b604080519081016001600160401b03811182821017156145475761454761450f565b604051601f8201601f191681016001600160401b03811182821017156145975761459761450f565b604052919050565b60006001600160401b038311156145b8576145b861450f565b6145cb601f8401601f191660200161456f565b90508281528383830111156145df57600080fd5b828260208301376000602084830101529392505050565b60006020828403121561460857600080fd5b81356001600160401b0381111561461e57600080fd5b8201601f8101841361462f57600080fd5b61463e8482356020840161459f565b949350505050565b6000806040838503121561465957600080fd5b50508035926020909101359150565b803560ff811681146144ed57600080fd5b60006020828403121561468b57600080fd5b6127b082614668565b815181526020808301519082015260408101610ec4565b60008083601f8401126146bd57600080fd5b5081356001600160401b038111156146d457600080fd5b6020830191508360208285010111156140c157600080fd5b6000806000806040858703121561470257600080fd5b84356001600160401b038082111561471957600080fd5b614725888389016143e5565b9096509450602087013591508082111561473e57600080fd5b5061474b878288016146ab565b95989497509550505050565b634e487b7160e01b600052602160045260246000fd5b6003811061478b57634e487b7160e01b600052602160045260246000fd5b9052565b8151815260208083015160408301916147aa9084018261476d565b5092915050565b803561ffff811681146144ed57600080fd5b6000606082840312156147d557600080fd5b6147dd614525565b905081356147ea81614483565b81526147f8602083016147b1565b6020820152614809604083016147b1565b604082015292915050565b6000806080838503121561482757600080fd5b61483083614668565b915061483f84602085016147c3565b90509250929050565b60008060006040848603121561485d57600080fd5b8335614868816144cd565b925060208401356001600160401b0381111561488357600080fd5b61488f868287016146ab565b9497909650939450505050565b60006001600160401b038211156148b5576148b561450f565b5060051b60200190565b6000604082840312156148d157600080fd5b6148d961454d565b90506148e482614668565b815260208201356148f4816144cd565b602082015292915050565b600080600080600060a0868803121561491757600080fd5b8535614922816144cd565b945060208681013594506040808801356001600160401b0381111561494657600080fd5b8801601f81018a1361495757600080fd5b803561496a6149658261489c565b61456f565b81815260069190911b8201840190848101908c83111561498957600080fd5b928501925b828410156149af576149a08d856148bf565b8252928401929085019061498e565b999c989b5098996060810135995060800135979650505050505050565b600061010082840312156149df57600080fd5b50919050565b60008083601f8401126149f757600080fd5b5081356001600160401b03811115614a0e57600080fd5b6020830191508360208260061b85010111156140c157600080fd5b600060608284031215614a3b57600080fd5b614a43614525565b905081356001600160401b03811115614a5b57600080fd5b8201601f81018413614a6c57600080fd5b614a7b8482356020840161459f565b825250602082013560208201526040820135604082015292915050565b60008060008060008060008060006101a08a8c031215614ab757600080fd5b89356001600160401b0380821115614ace57600080fd5b614ada8d838e016146ab565b909b50995060208c0135915080821115614af357600080fd5b614aff8d838e016146ab565b9099509750879150614b148d60408e016149cc565b96506101408c0135915080821115614b2b57600080fd5b614b378d838e016149e5565b90965094506101608c0135915080821115614b5157600080fd5b614b5d8d838e01614a29565b93506101808c0135915080821115614b7457600080fd5b50614b818c828d01614a29565b9150509295985092959850929598565b6000806000806000806101608789031215614bab57600080fd5b86356001600160401b0380821115614bc257600080fd5b614bce8a838b016146ab565b90985096506020890135915080821115614be757600080fd5b614bf38a838b016146ab565b9096509450849150614c088a60408b016149cc565b9350610140890135915080821115614c1f57600080fd5b50614c2c89828a01614a29565b9150509295509295509295565b60008060408385031215614c4c57600080fd5b8235614c5781614483565b91506020838101356001600160401b03811115614c7357600080fd5b8401601f81018613614c8457600080fd5b8035614c926149658261489c565b81815260059190911b82018301908381019088831115614cb157600080fd5b928401925b82841015614ccf57833582529284019290840190614cb6565b80955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015614d1c57835163ffffffff1683529284019291840191600101614cfa565b50909695505050505050565b60008060208385031215614d3b57600080fd5b82356001600160401b03811115614d5157600080fd5b61445e858286016146ab565b6001600160601b0381168114610cf957600080fd5b600082601f830112614d8357600080fd5b81356020614d936149658361489c565b82815260069290921b84018101918181019086841115614db257600080fd5b8286015b84811015614e035760408189031215614dcf5760008081fd5b614dd761454d565b8135614de2816144cd565b815281850135614df181614d5d565b81860152835291830191604001614db6565b509695505050505050565b600080600060a08486031215614e2357600080fd5b614e2d85856147c3565b92506060840135614e3d81614d5d565b915060808401356001600160401b03811115614e5857600080fd5b614e6486828701614d72565b9150509250925092565b600082601f830112614e7f57600080fd5b81356020614e8f6149658361489c565b82815260609283028501820192828201919087851115614eae57600080fd5b8387015b85811015614ed157614ec489826147c3565b8452928401928101614eb2565b5090979650505050505050565b600082601f830112614eef57600080fd5b81356020614eff6149658361489c565b82815260059290921b84018101918181019086841115614f1e57600080fd5b8286015b84811015614e03578035614f3581614d5d565b8352918301918301614f22565b600082601f830112614f5357600080fd5b81356020614f636149658361489c565b82815260059290921b84018101918181019086841115614f8257600080fd5b8286015b84811015614e035780356001600160401b03811115614fa55760008081fd5b614fb38986838b0101614d72565b845250918301918301614f86565b600080600080600080600080610100898b031215614fde57600080fd5b614fe7896144e2565b9750614ff560208a016144e2565b965061500360408a016144e2565b955061501160608a016144e2565b94506080890135935060a08901356001600160401b038082111561503457600080fd5b6150408c838d01614e6e565b945060c08b013591508082111561505657600080fd5b6150628c838d01614ede565b935060e08b013591508082111561507857600080fd5b506150858b828c01614f42565b9150509295985092959890939650565b60208101610ec4828461476d565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561511a5761511a6150f0565b5060010190565b6000815180845260005b818110156151475760208185018101518683018201520161512b565b81811115615159576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006127b06020830184615121565b60006020828403121561519357600080fd5b81516127b0816144cd565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156151fa57600080fd5b815180151581146127b057600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000808335601e1984360301811261526957600080fd5b8301803591506001600160401b0382111561528357600080fd5b6020019150600581901b36038213156140c157600080fd5b6000602082840312156152ad57600080fd5b81516127b081614483565b600082198211156152cb576152cb6150f0565b500190565b600080858511156152e057600080fd5b838611156152ed57600080fd5b5050820193919092039150565b600060c08201888352602060018060a01b03808a16828601526040898187015260c0606087015283895180865260e088019150848b01955060005b8181101561535f578651805160ff1684528601518516868401529585019591830191600101615335565b505060808701989098525050505060a09091019190915250949350505050565b60006040828403121561539157600080fd5b6127b083836148bf565b6000828210156153ad576153ad6150f0565b500390565b60018060a01b03841681528260208201526060604082015260006153d96060830184615121565b95945050505050565b6000602082840312156153f457600080fd5b81516001600160c01b03811681146127b057600080fd5b634e487b7160e01b600052601260045260246000fd5b6000826154305761543061540b565b500690565b6001600160a01b038316815260406020820181905260009061463e90830184615121565b82815260406020820152600061463e6040830184615121565b60006020828403121561548457600080fd5b5051919050565b6001600160a01b038416815261016081016154b3602083018580358252602090810135910152565b6154cd606083016040860180358252602090810135910152565b60406080850160a084013760e0820160008152604060c0860182375060006101208301908152835190526020909201516101409091015292915050565b60018060a01b038316815260406020820152600082516060604084015261553460a0840182615121565b90506020840151606084015260408401516080840152809150509392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906153d99083018486615555565b60018060a01b0385168152836020820152606060408201526000611773606083018486615555565b600082601f8301126155dc57600080fd5b815160206155ec6149658361489c565b82815260059290921b8401810191818101908684111561560b57600080fd5b8286015b84811015614e0357805161562281614d5d565b835291830191830161560f565b6000806040838503121561564257600080fd5b82516001600160401b038082111561565957600080fd5b615665868387016155cb565b9350602085015191508082111561567b57600080fd5b50615688858286016155cb565b9150509250929050565b8381526040602082015260006153d9604083018486615555565b600060208083850312156156bf57600080fd5b82516001600160401b038111156156d557600080fd5b8301601f810185136156e657600080fd5b80516156f46149658261489c565b81815260059190911b8201830190838101908783111561571357600080fd5b928401925b8284101561573a57835161572b81614483565b82529284019290840190615718565b979650505050505050565b60006020828403121561575757600080fd5b81516127b081614d5d565b600060ff821660ff84168060ff0382111561577f5761577f6150f0565b019392505050565b60006060820160ff8616835260206001600160601b03808716828601526040606081870152838751808652608088019150848901955060005b818110156157f057865180516001600160a01b0316845286015185168684015295850195918301916001016157c0565b50909a9950505050505050505050565b600061ffff80831681811415615818576158186150f0565b6001019392505050565b60006020828403121561583457600080fd5b81516001600160e01b0319811681146127b057600080fd5b60006001600160601b0380831681851681830481118215151615615872576158726150f0565b02949350505050565b60006001600160601b03808416806158955761589561540b565b9216919091049291505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a2646970667358221220ff8c287943c6fe11e0027554d61cfa2a42e48467b12f2c24712aef8bead3996364736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x5fbdb2315678afecb367f032d93f642f64180aa3":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b038316815260006020604081840152835180604085015260005b8181101561063b5785810183015185820160600152820161061f565b8181111561064d576000606083870101525b50601f01601f19169290920160600194935050505056fea2646970667358221220726e525ba4195f70768543b6eb94d022704c3702dcb1ca686df0d56fdf9f8a4864736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"}},"0x5fc8d32690cc91d4c39d9d3abcbd16989f875707":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0x97":"0x5bc5b424ff8db9bd8202cae3beb193c946b905d8ebddb990e36a723af40eb1c4","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x9a676e781a523b5d0c0e43731313a708cb607508","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x610178da211fef7d417bc0e6fed39f05609ad788":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106101855760003560e01c806374cdd798116100d1578063c49074421161008a578063e251ef5211610064578063e251ef5214610563578063e2c8344514610583578063f2882461146105a3578063fe80b087146105d757600080fd5b8063c490744214610503578063c4d66de814610523578063dda3346c1461054357600080fd5b806374cdd7981461044057806387e0d289146104745780639b4e46341461049b578063a50600f4146104ae578063b522538a146104ce578063baa7145a146104ee57600080fd5b806334bea20a1161013e57806358eaee791161011857806358eaee791461038f5780635d3f65b6146103bc5780636fcd0e53146103dc5780637439841f1461040957600080fd5b806334bea20a146103005780633f65cf191461033b5780634665bcda1461035b57600080fd5b80630b18ff66146101db5780630cd4649e146102185780631a5057be1461022f5780631d905d5c146102635780633106ab53146102af5780633474aa16146102e057600080fd5b366101d657346037600082825461019c9190614c9f565b90915550506040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b600080fd5b3480156101e757600080fd5b506033546101fb906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561022457600080fd5b5061022d6105fb565b005b34801561023b57600080fd5b506101fb7f0000000000000000000000008a791620dd6260079bf849dc5567adc3f2fdc31881565b34801561026f57600080fd5b506102977f000000000000000000000000000000000000000000000000000000077359400081565b6040516001600160401b03909116815260200161020f565b3480156102bb57600080fd5b506034546102d090600160401b900460ff1681565b604051901515815260200161020f565b3480156102ec57600080fd5b50603454610297906001600160401b031681565b34801561030c57600080fd5b506102d061031b366004614cdc565b603560209081526000928352604080842090915290825290205460ff1681565b34801561034757600080fd5b5061022d610356366004614d6f565b610764565b34801561036757600080fd5b506101fb7f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681565b34801561039b57600080fd5b506103af6103aa366004614e80565b610caf565b60405161020f9190614ef9565b3480156103c857600080fd5b50603854610297906001600160401b031681565b3480156103e857600080fd5b506103fc6103f7366004614f07565b610d14565b60405161020f9190614f20565b34801561041557600080fd5b506103af610424366004614f07565b600090815260366020526040902054600160c01b900460ff1690565b34801561044c57600080fd5b506101fb7f000000000000000000000000424242424242424242424242424242424242424281565b34801561048057600080fd5b5060335461029790600160a01b90046001600160401b031681565b61022d6104a9366004614f68565b610dc1565b3480156104ba57600080fd5b5061022d6104c9366004614fdb565b610f6e565b3480156104da57600080fd5b506103fc6104e9366004614e80565b611304565b3480156104fa57600080fd5b5061022d6113f7565b34801561050f57600080fd5b5061022d61051e366004615085565b611462565b34801561052f57600080fd5b5061022d61053e3660046150b1565b61169f565b34801561054f57600080fd5b5061022d61055e3660046151cb565b611877565b34801561056f57600080fd5b5061022d61057e36600461529c565b611a4a565b34801561058f57600080fd5b5061022d61059e366004615085565b611e15565b3480156105af57600080fd5b506102977f000000000000000000000000000000000000000000000000000000006059f46081565b3480156105e357600080fd5b506105ed60375481565b60405190815260200161020f565b604051635ac86ab760e01b8152600260048201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa158015610663573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106879190615397565b156106ad5760405162461bcd60e51b81526004016106a4906153b9565b60405180910390fd5b6033546001600160a01b031633146106d75760405162461bcd60e51b81526004016106a490615416565b603454600160401b900460ff16156107015760405162461bcd60e51b81526004016106a49061545e565b6034805460ff60401b1916600160401b179055603354610729906001600160a01b0316611ff8565b6033546040516001600160a01b03909116907fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a250565b6033546001600160a01b0316331461078e5760405162461bcd60e51b81526004016106a490615416565b604051635ac86ab760e01b8152600260048201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa1580156107f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081a9190615397565b156108375760405162461bcd60e51b81526004016106a4906153b9565b603454600160401b900460ff166108af5760405162461bcd60e51b815260206004820152603660248201527f456967656e506f642e686173456e61626c656452657374616b696e673a2072656044820152751cdd185ada5b99c81a5cc81b9bdd08195b98589b195960521b60648201526084016106a4565b85841480156108bd57508382145b61094d5760405162461bcd60e51b815260206004820152605560248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a2076616c696461746f72496e646963657320616e642070726f6f666064820152740e640daeae6e840c4ca40e6c2daca40d8cadccee8d605b1b608482015260a4016106a4565b603354600160a01b90046001600160401b031615806109a2575060335461098c9061098790600160a01b90046001600160401b031661202c565b612116565b6001600160401b0316896001600160401b031610155b610a2e5760405162461bcd60e51b815260206004820152605160248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a2070726f6f66206d75737420626520696e207468652065706f63686064820152701030b33a32b91030b1ba34bb30ba34b7b760791b608482015260a4016106a4565b42610a44613f486001600160401b038c16614c9f565b1015610acd5760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a207370656369666965642074696d657374616d7020697320746f6f60648201526b0819985c881a5b881c185cdd60a21b608482015260a4016106a4565b60405163d1c64cc960e01b81526001600160401b038a166004820152610b76907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b03169063d1c64cc990602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906154ad565b8935610b7160208c018c6154c6565b612163565b6000805b87811015610c1a57610bfc8b8b358b8b85818110610b9a57610b9a61550c565b9050602002016020810190610baf9190615522565b8a8a86818110610bc157610bc161550c565b9050602002810190610bd391906154c6565b8a8a88818110610be557610be561550c565b9050602002810190610bf79190615549565b6122f1565b610c069083614c9f565b915080610c1281615592565b915050610b7a565b5060335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe69091169063c2c51c40906044015b600060405180830381600087803b158015610c8b57600080fd5b505af1158015610c9f573d6000803e3d6000fd5b5050505050505050505050505050565b600080610cf184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127ab92505050565b600090815260366020526040902054600160c01b900460ff169150505b92915050565b610d3c6040805160808101825260008082526020820181905291810182905290606082015290565b600082815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff166002811115610da757610da7614ec1565b6002811115610db857610db8614ec1565b90525092915050565b336001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe61614610e095760405162461bcd60e51b81526004016106a4906155ad565b346801bc16d674ec80000014610e955760405162461bcd60e51b8152602060048201526044602482018190527f456967656e506f642e7374616b653a206d75737420696e697469616c6c792073908201527f74616b6520666f7220616e792076616c696461746f72207769746820333220656064820152633a3432b960e11b608482015260a4016106a4565b7f00000000000000000000000042424242424242424242424242424242424242426001600160a01b031663228951186801bc16d674ec8000008787610ed86128a5565b8888886040518863ffffffff1660e01b8152600401610efc9695949392919061567f565b6000604051808303818588803b158015610f1557600080fd5b505af1158015610f29573d6000803e3d6000fd5b50505050507f606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e238585604051610f5f9291906156ce565b60405180910390a15050505050565b604051635ac86ab760e01b8152600360048201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa158015610fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffa9190615397565b156110175760405162461bcd60e51b81526004016106a4906153b9565b868414801561102557508382145b6110ae5760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e76657269667942616c616e6365557064617465733a207660448201527f616c696461746f72496e646963657320616e642070726f6f6673206d7573742060648201526d0c4ca40e6c2daca40d8cadccee8d60931b608482015260a4016106a4565b426110c4613f486001600160401b038c16614c9f565b10156111465760405162461bcd60e51b815260206004820152604560248201527f456967656e506f642e76657269667942616c616e6365557064617465733a207360448201527f70656369666965642074696d657374616d7020697320746f6f2066617220696e606482015264081c185cdd60da1b608482015260a4016106a4565b60405163d1c64cc960e01b81526001600160401b038a1660048201526111ea907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b03169063d1c64cc990602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906154ad565b8735610b7160208a018a6154c6565b6000805b8881101561128e576112708b8b8b8481811061120c5761120c61550c565b90506020020160208101906112219190615522565b8a358a8a868181106112355761123561550c565b905060200281019061124791906154c6565b8a8a888181106112595761125961550c565b905060200281019061126b9190615549565b6128ea565b61127a90836156e2565b91508061128681615592565b9150506111ee565b506033546001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681169163c2c51c4091166112d3633b9aca0085615723565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401610c71565b61132c6040805160808101825260008082526020820181905291810182905290606082015290565b6036600061136f85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127ab92505050565b81526020808201929092526040908101600020815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff1660028111156113dc576113dc614ec1565b60028111156113ed576113ed614ec1565b9052509392505050565b6033546001600160a01b031633146114215760405162461bcd60e51b81526004016106a490615416565b603454600160401b900460ff161561144b5760405162461bcd60e51b81526004016106a49061545e565b603354611460906001600160a01b0316611ff8565b565b336001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe616146114aa5760405162461bcd60e51b81526004016106a4906155ad565b6114b8633b9aca00826157be565b156115425760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74576569206d75737420626520612077686f60648201526d1b194811ddd95a48185b5bdd5b9d60921b608482015260a4016106a4565b6000611552633b9aca00836157d2565b6034549091506001600160401b03908116908216111561160b5760405162461bcd60e51b815260206004820152606260248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74477765692065786365656473207769746860648201527f6472617761626c6552657374616b6564457865637574696f6e4c617965724777608482015261656960f01b60a482015260c4016106a4565b603480548291906000906116299084906001600160401b03166157e6565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e8360405161168891815260200190565b60405180910390a261169a8383612dc8565b505050565b600054610100900460ff16158080156116bf5750600054600160ff909116105b806116d95750303b1580156116d9575060005460ff166001145b61173c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106a4565b6000805460ff19166001179055801561175f576000805461ff0019166101001790555b6001600160a01b0382166117d25760405162461bcd60e51b815260206004820152603460248201527f456967656e506f642e696e697469616c697a653a20706f644f776e65722063616044820152736e6e6f74206265207a65726f206164647265737360601b60648201526084016106a4565b603380546001600160a01b0384166001600160a01b031990911681179091556034805460ff60401b1916600160401b1790556040517fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a28015611873576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6033546001600160a01b031633146118a15760405162461bcd60e51b81526004016106a490615416565b604051635ac86ab760e01b8152600560048201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa158015611909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192d9190615397565b1561194a5760405162461bcd60e51b81526004016106a4906153b9565b82518451146119d55760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e7265636f766572546f6b656e733a20746f6b656e4c697360448201527f7420616e6420616d6f756e7473546f5769746864726177206d7573742062652060648201526a0e6c2daca40d8cadccee8d60ab1b608482015260a4016106a4565b60005b8451811015611a4357611a31838583815181106119f7576119f761550c565b6020026020010151878481518110611a1157611a1161550c565b60200260200101516001600160a01b0316612dd29092919063ffffffff16565b80611a3b81615592565b9150506119d8565b5050505050565b604051635ac86ab760e01b81526004808201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa158015611ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad59190615397565b15611af25760405162461bcd60e51b81526004016106a4906153b9565b8386148015611b0057508588145b8015611b0b57508782145b611b7f576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f642e766572696679416e6450726f636573735769746864726160448201527f77616c733a20696e70757473206d7573742062652073616d65206c656e67746860648201526084016106a4565b60405163d1c64cc960e01b81526001600160401b038c166004820152611c23907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b03169063d1c64cc990602401602060405180830381865afa158015611bf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1491906154ad565b8b35610b7160208e018e6154c6565b604080518082019091526000808252602082015260005b83811015611d23576000611cde8d358d8d85818110611c5b57611c5b61550c565b9050602002810190611c6d919061580e565b8c8c86818110611c7f57611c7f61550c565b9050602002810190611c9191906154c6565b8c8c88818110611ca357611ca361550c565b9050602002810190611cb59190615549565b8c8c8a818110611cc757611cc761550c565b9050602002810190611cd99190615549565b612e24565b80518451919250908490611cf3908390614c9f565b9052506020808201519084018051611d0c9083906156e2565b905250819050611d1b81615592565b915050611c3a565b50805115611d52576033548151611d52916001600160a01b031690611d4d90633b9aca009061582f565b61339c565b602081015115611e075760335460208201516001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681169263c2c51c4092911690611da890633b9aca0090615723565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611dee57600080fd5b505af1158015611e02573d6000803e3d6000fd5b505050505b505050505050505050505050565b6033546001600160a01b03163314611e3f5760405162461bcd60e51b81526004016106a490615416565b604051635ac86ab760e01b8152600560048201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa158015611ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ecb9190615397565b15611ee85760405162461bcd60e51b81526004016106a4906153b9565b603754821115611f995760405162461bcd60e51b815260206004820152606a60248201527f456967656e506f642e77697468647261776e6f6e426561636f6e436861696e4560448201527f544842616c616e63655765693a20616d6f756e74546f5769746864726177206960648201527f732067726561746572207468616e206e6f6e426561636f6e436861696e45544860848201526942616c616e636557656960b01b60a482015260c4016106a4565b8160376000828254611fab919061584e565b90915550506040518281526001600160a01b038416907f30420aacd028abb3c1fd03aba253ae725d6ddd52d16c9ac4cb5742cd43f530969060200160405180910390a261169a838361339c565b6033805467ffffffffffffffff60a01b19164263ffffffff16600160a01b021790556000603755612029814761339c565b50565b60007f000000000000000000000000000000000000000000000000000000006059f4606001600160401b0316826001600160401b031610156120d65760405162461bcd60e51b815260206004820152603760248201527f456967656e506f642e5f74696d657374616d70546f45706f63683a2074696d6560448201527f7374616d70206973206265666f72652067656e6573697300000000000000000060648201526084016106a4565b6120e2600c6020615865565b61210c7f000000000000000000000000000000000000000000000000000000006059f460846157e6565b610d0e9190615894565b6000612124600c6020615865565b61212f8360016158ba565b6121399190615865565b610d0e907f000000000000000000000000000000000000000000000000000000006059f4606158ba565b61216f6003602061582f565b81146121ff5760405162461bcd60e51b815260206004820152605360248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a2050726f6f6620686064820152720c2e640d2dcc6dee4e4cac6e840d8cadccee8d606b1b608482015260a4016106a4565b61224482828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892508791506003905061342a565b6122eb5760405162461bcd60e51b815260206004820152606660248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a20496e76616c696460648201527f206c617465737420626c6f636b2068656164657220726f6f74206d65726b6c6560848201526510383937b7b360d11b60a482015260c4016106a4565b50505050565b60008061233084848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061344292505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561239f5761239f614ec1565b60028111156123b0576123b0614ec1565b90525090506000816060015160028111156123cd576123cd614ec1565b146124765760405162461bcd60e51b815260206004820152606760248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2056616c696461746f72206d757374206265206960648201527f6e61637469766520746f2070726f7665207769746864726177616c2063726564608482015266656e7469616c7360c81b60a482015260c4016106a4565b61247e6128a5565b612487906158e5565b6124c386868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061346692505050565b1461254a5760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2050726f6f66206973206e6f7420666f7220746860648201526a1a5cc8115a59d95b941bd960aa1b608482015260a4016106a4565b600061258886868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061347b92505050565b90506125988a87878b8b8e6134a0565b603980549060006125a883615592565b90915550506001606083015264ffffffffff891682526001600160401b038b811660408401527f00000000000000000000000000000000000000000000000000000007735940008116908216111561262e576001600160401b037f000000000000000000000000000000000000000000000000000000077359400016602083015261263e565b6001600160401b03811660208301525b6000838152603660209081526040918290208451815492860151938601516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060850151859391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b8360028111156126dc576126dc614ec1565b02179055505060405164ffffffffff8b1681527f2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449915060200160405180910390a17f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df898c84602001516040516127779392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1633b9aca0082602001516001600160401b031661279c919061582f565b9b9a5050505050505050505050565b600081516030146128345760405162461bcd60e51b815260206004820152604760248201527f456967656e506f642e5f63616c63756c61746556616c696461746f725075626b60448201527f657948617368206d75737420626520612034382d6279746520424c53207075626064820152666c6963206b657960c81b608482015260a4016106a4565b60405160029061284b908490600090602001615909565b60408051601f198184030181529082905261286591615938565b602060405180830381855afa158015612882573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610d0e91906154ad565b60408051600160f81b60208201526000602182015230606090811b6bffffffffffffffffffffffff1916602c8301529101604051602081830303815290604052905090565b60008061292984848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061347b92505050565b9050600061296985858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061344292505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff1660028111156129d8576129d8614ec1565b60028111156129e9576129e9614ec1565b8152505090508a6001600160401b031681604001516001600160401b031610612aa05760405162461bcd60e51b815260206004820152605c60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20566160448201527f6c696461746f72732062616c616e63652068617320616c72656164792062656560648201527f6e207570646174656420666f7220746869732074696d657374616d7000000000608482015260a4016106a4565b600181606001516002811115612ab857612ab8614ec1565b14612b205760405162461bcd60e51b815260206004820152603260248201527f456967656e506f642e76657269667942616c616e63655570646174653a2056616044820152716c696461746f72206e6f742061637469766560701b60648201526084016106a4565b612b298b61202c565b6001600160401b0316612b6e8787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506136f792505050565b6001600160401b031611612c11576000836001600160401b031611612c115760405162461bcd60e51b815260206004820152604d60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20766160448201527f6c696461746f7220697320776974686472617761626c6520627574206861732060648201526c3737ba103bb4ba34323930bbb760991b608482015260a4016106a4565b612c1f8987878b8b8f6134a0565b602081015160006001600160401b037f000000000000000000000000000000000000000000000000000000077359400081169086161115612c8157507f0000000000000000000000000000000000000000000000000000000773594000612c84565b50835b6001600160401b0380821660208086019182528f831660408088019182526000898152603690935290912086518154935192518516600160801b0267ffffffffffffffff60801b19938616600160401b026001600160801b031990951691909516179290921790811683178255606086015186939091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b836002811115612d2c57612d2c614ec1565b0217905550905050816001600160401b0316816001600160401b031614612db8577f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df8c8e83604051612da39392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1612db5818361370f565b95505b5050505050979650505050505050565b611873828261372e565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261169a908490613847565b6040805180820190915260008082526020820152612e49612e44896159b9565b613919565b6033546001600160401b03600160a01b90910481169082161015612f0b5760405162461bcd60e51b815260206004820152606760248201527f456967656e506f642e70726f6f664973466f7256616c696454696d657374616d60448201527f703a20626561636f6e20636861696e2070726f6f66206d75737420626520617460648201527f206f72206166746572206d6f7374526563656e745769746864726177616c546960848201526606d657374616d760cc1b60a482015260c4016106a4565b6000612f19612e448b6159b9565b90506000612f5988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061344292505050565b905060008082815260366020526040902054600160c01b900460ff166002811115612f8657612f86614ec1565b141561303d5760405162461bcd60e51b815260206004820152607460248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a2056616c696461746f72206e657665722070726f76656e20746f2060648201527f68617665207769746864726177616c2063726564656e7469616c7320706f696e6084820152731d1959081d1bc81d1a1a5cc818dbdb9d1c9858dd60621b60a482015260c4016106a4565b60008181526035602090815260408083206001600160401b038616845290915290205460ff16156130fc5760405162461bcd60e51b815260206004820152605b60248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a207769746864726177616c2068617320616c72656164792062656560648201527f6e2070726f76656e20666f7220746869732074696d657374616d700000000000608482015260a4016106a4565b6001603560008381526020019081526020016000206000846001600160401b03166001600160401b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506131d98c87878e7f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b03166344e71c806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d49190615af5565b613929565b600061321787878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061434a92505050565b90506132278d8a8a8e8e866134a0565b600061326588888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061436292505050565b90506132a38a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506136f792505050565b6001600160401b03166132bd6132b88f6159b9565b61437a565b6001600160401b03161061337557603354600084815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b81049093169381019390935261336a93869388938a936001600160a01b03909316928892916060830190600160c01b900460ff16600281111561335157613351614ec1565b600281111561336257613362614ec1565b90525061438c565b95505050505061338f565b60335461336a90839086906001600160a01b0316846145ca565b5098975050505050505050565b603354604051633036cd5360e21b81526001600160a01b03918216600482015283821660248201527f0000000000000000000000008a791620dd6260079bf849dc5567adc3f2fdc3189091169063c0db354c9083906044016000604051808303818588803b15801561340d57600080fd5b505af1158015613421573d6000803e3d6000fd5b50505050505050565b6000836134388685856146a8565b1495945050505050565b6000816000815181106134575761345761550c565b60200260200101519050919050565b6000816001815181106134575761345761550c565b6000610d0e826002815181106134935761349361550c565b60200260200101516147f4565b6134ac60036002615bf6565b84146135375760405162461bcd60e51b815260206004820152604e60248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a2056616c696461746f72206669656c64732068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a4016106a4565b600561354560286001614c9f565b61354f9190614c9f565b61355a90602061582f565b82146135da5760405162461bcd60e51b815260206004820152604360248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a2050726f6f662068617320696e636f7272656374206c656e6064820152620cee8d60eb1b608482015260a4016106a4565b600064ffffffffff82166135f060286001614c9f565b600b901b179050600061363587878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061485b92505050565b905061367b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c925085915086905061342a565b6136ed5760405162461bcd60e51b815260206004820152603d60248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a20496e76616c6964206d65726b6c652070726f6f6600000060648201526084016106a4565b5050505050505050565b6000610d0e826007815181106134935761349361550c565b60006137276001600160401b03808416908516615c02565b9392505050565b8047101561377e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016106a4565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146137cb576040519150601f19603f3d011682016040523d82523d6000602084013e6137d0565b606091505b505090508061169a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016106a4565b600061389c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614b089092919063ffffffff16565b80519091501561169a57808060200190518101906138ba9190615397565b61169a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106a4565b6000610d0e8261014001516147f4565b613934600280615bf6565b83146139a85760405162461bcd60e51b81526020600482015260496024820152600080516020615c8983398151915260448201527f616c3a207769746864726177616c4669656c64732068617320696e636f7272656064820152680c6e840d8cadccee8d60bb1b608482015260a4016106a4565b6139b4600d6002615bf6565b6139c460c0840160a08501615c41565b6001600160401b031610613a2e5760405162461bcd60e51b815260206004820152603f6024820152600080516020615c8983398151915260448201527f616c3a20626c6f636b526f6f74496e64657820697320746f6f206c617267650060648201526084016106a4565b613a3a60046002615bf6565b613a4b610100840160e08501615c41565b6001600160401b031610613ab7576040805162461bcd60e51b8152602060048201526024810191909152600080516020615c8983398151915260448201527f616c3a207769746864726177616c496e64657820697320746f6f206c6172676560648201526084016106a4565b613ac360186002615bf6565b613ad360e0840160c08501615c41565b6001600160401b031610613b4d5760405162461bcd60e51b81526020600482015260476024820152600080516020615c8983398151915260448201527f616c3a20686973746f726963616c53756d6d617279496e64657820697320746f6064820152666f206c6172676560c81b608482015260a4016106a4565b60006001600160401b038216613b65612e44856159b9565b6001600160401b031610613b7a576005613b7d565b60045b9050613b8a600482614c9f565b613b95906001614c9f565b613ba090602061582f565b613baa84806154c6565b905014613c1e5760405162461bcd60e51b81526020600482015260486024820152600080516020615c8983398151915260448201527f616c3a207769746864726177616c50726f6f662068617320696e636f727265636064820152670e840d8cadccee8d60c31b608482015260a4016106a4565b613c2a60046003614c9f565b613c3590602061582f565b613c4260408501856154c6565b905014613cbc5760405162461bcd60e51b815260206004820152604e6024820152600080516020615c8983398151915260448201527f616c3a20657865637574696f6e5061796c6f616450726f6f662068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a4016106a4565b613cc86003602061582f565b613cd560208501856154c6565b905014613d435760405162461bcd60e51b81526020600482015260426024820152600080516020615c8983398151915260448201527f616c3a20736c6f7450726f6f662068617320696e636f7272656374206c656e676064820152610e8d60f31b608482015260a4016106a4565b613d4e81602061582f565b613d5b60608501856154c6565b905014613dce5760405162461bcd60e51b81526020600482015260476024820152600080516020615c8983398151915260448201527f616c3a2074696d657374616d7050726f6f662068617320696e636f7272656374606482015266040d8cadccee8d60cb1b608482015260a4016106a4565b600d613ddc60186001614c9f565b613de7906005614c9f565b613df2906001614c9f565b613dfc9190614c9f565b613e0790602061582f565b613e1460808501856154c6565b905014613e9d5760405162461bcd60e51b81526020600482015260586024820152600080516020615c8983398151915260448201527f616c3a20686973746f726963616c53756d6d617279426c6f636b526f6f74507260648201527f6f6f662068617320696e636f7272656374206c656e6774680000000000000000608482015260a4016106a4565b6000613eaf60c0850160a08601615c41565b6001600160401b03166000613ec6600d6001614c9f565b613ed660e0880160c08901615c41565b6001600160401b0316901b600d613eef60186001614c9f565b613efa906001614c9f565b613f049190614c9f565b601b901b1717179050613f5f613f1d60808601866154c6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b925050506101008701358461342a565b613fd25760405162461bcd60e51b815260206004820152604a6024820152600080516020615c8983398151915260448201527f616c3a20496e76616c696420686973746f726963616c73756d6d617279206d656064820152693935b63290383937b7b360b11b608482015260a4016106a4565b614029613fe260208601866154c6565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008a013593506101208a01359250905061342a565b6140895760405162461bcd60e51b815260206004820152603d6024820152600080516020615c8983398151915260448201527f616c3a20496e76616c696420736c6f74206d65726b6c652070726f6f6600000060648201526084016106a4565b60496140e161409b60408701876154c6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101008701356101608801358461342a565b6141535760405162461bcd60e51b81526020600482015260496024820152600080516020615c8983398151915260448201527f616c3a20496e76616c696420657865637574696f6e5061796c6f6164206d657260648201526835b63290383937b7b360b91b608482015260a4016106a4565b506141ab61416460608601866154c6565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610160860135610140870135600961342a565b6142165760405162461bcd60e51b81526020600482015260426024820152600080516020615c8983398151915260448201527f616c3a20496e76616c69642074696d657374616d70206d65726b6c652070726f60648201526137b360f11b608482015260a4016106a4565b6000614229610100860160e08701615c41565b6001600160401b031661423e60046001614c9f565b600e901b179050600061428388888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061485b92505050565b90506142d361429287806154c6565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610160880135838561342a565b61433f5760405162461bcd60e51b81526020600482015260436024820152600080516020615c8983398151915260448201527f616c3a20496e76616c6964207769746864726177616c206d65726b6c6520707260648201526237b7b360e91b608482015260a4016106a4565b505050505050505050565b6000610d0e826001815181106134935761349361550c565b6000610d0e826003815181106134935761349361550c565b6000602061210c8361012001516147f4565b604080518082019091526000808252602082015260007f00000000000000000000000000000000000000000000000000000007735940006001600160401b0316846001600160401b0316111561440357507f0000000000000000000000000000000000000000000000000000000773594000614406565b50825b604080518082019091526000808252602082015261442482866157e6565b6001600160401b039081168252603480548492600091614446918591166158ba565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555061447882856020015161370f565b602082015260028460600151600281111561449557614495614ec1565b146144b757603980549060006144aa83615c5e565b9091555050600260608501525b600060208086018281528a83526036909152604091829020865181549251938801516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516929091169190911792909217928316821781556060870151879391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b83600281111561455c5761455c614ec1565b0217905550506040805164ffffffffff8c1681526001600160401b038a8116602083015288168183015290516001600160a01b03891692507fb76a93bb649ece524688f1a01d184e0bbebcda58eae80c28a898bec3fb5a09639181900360600190a298975050505050505050565b60408051808201909152600080825260208201526040805164ffffffffff871681526001600160401b0380871660208301528416918101919091526001600160a01b038416907f8a7335714231dbd551aaba6314f4a97a14c201e53a3e25e1140325cdf67d7a4e9060600160405180910390a26038805483919060009061465b9084906001600160401b03166158ba565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506040518060400160405280836001600160401b0316815260200160008152509050949350505050565b600083516000141580156146c75750602084516146c591906157be565b155b6147565760405162461bcd60e51b815260206004820152605460248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f665368613260448201527f35363a2070726f6f66206c656e6774682073686f756c642062652061206e6f6e60648201527316bd32b9379036bab63a34b836329037b310199960611b608482015260a4016106a4565b604080516020808201909252848152905b855181116147ea5761477a6002856157be565b6147ad578151600052808601516020526020826040600060026107d05a03fa6147a257600080fd5b6002840493506147d8565b8086015160005281516020526020826040600060026107d05a03fa6147d157600080fd5b6002840493505b6147e3602082614c9f565b9050614767565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b6000806002835161486c91906157d2565b90506000816001600160401b03811115614888576148886150ce565b6040519080825280602002602001820160405280156148b1578160200160208202803683370190505b50905060005b828110156149b8576002856148cc838361582f565b815181106148dc576148dc61550c565b6020026020010151868360026148f2919061582f565b6148fd906001614c9f565b8151811061490d5761490d61550c565b602002602001015160405160200161492f929190918252602082015260400190565b60408051601f198184030181529082905261494991615938565b602060405180830381855afa158015614966573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061498991906154ad565b82828151811061499b5761499b61550c565b6020908102919091010152806149b081615592565b9150506148b7565b506149c46002836157d2565b91505b8115614ae45760005b82811015614ad1576002826149e5838361582f565b815181106149f5576149f561550c565b602002602001015183836002614a0b919061582f565b614a16906001614c9f565b81518110614a2657614a2661550c565b6020026020010151604051602001614a48929190918252602082015260400190565b60408051601f1981840301815290829052614a6291615938565b602060405180830381855afa158015614a7f573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190614aa291906154ad565b828281518110614ab457614ab461550c565b602090810291909101015280614ac981615592565b9150506149d0565b50614add6002836157d2565b91506149c7565b80600081518110614af757614af761550c565b602002602001015192505050919050565b6060614b178484600085614b1f565b949350505050565b606082471015614b805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106a4565b6001600160a01b0385163b614bd75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a4565b600080866001600160a01b03168587604051614bf39190615938565b60006040518083038185875af1925050503d8060008114614c30576040519150601f19603f3d011682016040523d82523d6000602084013e614c35565b606091505b5091509150614c45828286614c50565b979650505050505050565b60608315614c5f575081613727565b825115614c6f5782518084602001fd5b8160405162461bcd60e51b81526004016106a49190615c75565b634e487b7160e01b600052601160045260246000fd5b60008219821115614cb257614cb2614c89565b500190565b6001600160401b038116811461202957600080fd5b8035614cd781614cb7565b919050565b60008060408385031215614cef57600080fd5b823591506020830135614d0181614cb7565b809150509250929050565b600060408284031215614d1e57600080fd5b50919050565b60008083601f840112614d3657600080fd5b5081356001600160401b03811115614d4d57600080fd5b6020830191508360208260051b8501011115614d6857600080fd5b9250929050565b60008060008060008060008060a0898b031215614d8b57600080fd5b8835614d9681614cb7565b975060208901356001600160401b0380821115614db257600080fd5b614dbe8c838d01614d0c565b985060408b0135915080821115614dd457600080fd5b614de08c838d01614d24565b909850965060608b0135915080821115614df957600080fd5b614e058c838d01614d24565b909650945060808b0135915080821115614e1e57600080fd5b50614e2b8b828c01614d24565b999c989b5096995094979396929594505050565b60008083601f840112614e5157600080fd5b5081356001600160401b03811115614e6857600080fd5b602083019150836020828501011115614d6857600080fd5b60008060208385031215614e9357600080fd5b82356001600160401b03811115614ea957600080fd5b614eb585828601614e3f565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b60038110614ef557634e487b7160e01b600052602160045260246000fd5b9052565b60208101610d0e8284614ed7565b600060208284031215614f1957600080fd5b5035919050565b60006080820190506001600160401b03808451168352806020850151166020840152806040850151166040840152506060830151614f616060840182614ed7565b5092915050565b600080600080600060608688031215614f8057600080fd5b85356001600160401b0380821115614f9757600080fd5b614fa389838a01614e3f565b90975095506020880135915080821115614fbc57600080fd5b50614fc988828901614e3f565b96999598509660400135949350505050565b60008060008060008060008060a0898b031215614ff757600080fd5b883561500281614cb7565b975060208901356001600160401b038082111561501e57600080fd5b61502a8c838d01614d24565b909950975060408b013591508082111561504357600080fd5b61504f8c838d01614d0c565b965060608b0135915080821115614df957600080fd5b6001600160a01b038116811461202957600080fd5b8035614cd781615065565b6000806040838503121561509857600080fd5b82356150a381615065565b946020939093013593505050565b6000602082840312156150c357600080fd5b813561372781615065565b634e487b7160e01b600052604160045260246000fd5b60405161018081016001600160401b0381118282101715615107576151076150ce565b60405290565b604051601f8201601f191681016001600160401b0381118282101715615135576151356150ce565b604052919050565b60006001600160401b03821115615156576151566150ce565b5060051b60200190565b600082601f83011261517157600080fd5b813560206151866151818361513d565b61510d565b82815260059290921b840181019181810190868411156151a557600080fd5b8286015b848110156151c057803583529183019183016151a9565b509695505050505050565b6000806000606084860312156151e057600080fd5b83356001600160401b03808211156151f757600080fd5b818601915086601f83011261520b57600080fd5b8135602061521b6151818361513d565b82815260059290921b8401810191818101908a84111561523a57600080fd5b948201945b8386101561526157853561525281615065565b8252948201949082019061523f565b9750508701359250508082111561527757600080fd5b5061528486828701615160565b9250506152936040850161507a565b90509250925092565b60008060008060008060008060008060c08b8d0312156152bb57600080fd5b6152c48b614ccc565b995060208b01356001600160401b03808211156152e057600080fd5b6152ec8e838f01614d0c565b9a5060408d013591508082111561530257600080fd5b61530e8e838f01614d24565b909a50985060608d013591508082111561532757600080fd5b6153338e838f01614d24565b909850965060808d013591508082111561534c57600080fd5b6153588e838f01614d24565b909650945060a08d013591508082111561537157600080fd5b5061537e8d828e01614d24565b915080935050809150509295989b9194979a5092959850565b6000602082840312156153a957600080fd5b8151801515811461372757600080fd5b6020808252603e908201527f456967656e506f642e6f6e6c795768656e4e6f745061757365643a20696e646560408201527f782069732070617573656420696e20456967656e506f644d616e616765720000606082015260800190565b60208082526028908201527f456967656e506f642e6f6e6c79456967656e506f644f776e65723a206e6f74206040820152673837b227bbb732b960c11b606082015260800190565b6020808252602f908201527f456967656e506f642e6861734e6576657252657374616b65643a20726573746160408201526e1ada5b99c81a5cc8195b98589b1959608a1b606082015260800190565b6000602082840312156154bf57600080fd5b5051919050565b6000808335601e198436030181126154dd57600080fd5b8301803591506001600160401b038211156154f757600080fd5b602001915036819003821315614d6857600080fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561553457600080fd5b813564ffffffffff8116811461372757600080fd5b6000808335601e1984360301811261556057600080fd5b8301803591506001600160401b0382111561557a57600080fd5b6020019150600581901b3603821315614d6857600080fd5b60006000198214156155a6576155a6614c89565b5060010190565b60208082526031908201527f456967656e506f642e6f6e6c79456967656e506f644d616e616765723a206e6f6040820152703a1032b4b3b2b72837b226b0b730b3b2b960791b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60005b8381101561564257818101518382015260200161562a565b838111156122eb5750506000910152565b6000815180845261566b816020860160208601615627565b601f01601f19169290920160200192915050565b60808152600061569360808301888a6155fe565b82810360208401526156a58188615653565b905082810360408401526156ba8186886155fe565b915050826060830152979650505050505050565b602081526000614b176020830184866155fe565b600080821280156001600160ff1b038490038513161561570457615704614c89565b600160ff1b839003841281161561571d5761571d614c89565b50500190565b60006001600160ff1b038184138284138082168684048611161561574957615749614c89565b600160ff1b600087128281168783058912161561576857615768614c89565b6000871292508782058712848416161561578457615784614c89565b8785058712818416161561579a5761579a614c89565b505050929093029392505050565b634e487b7160e01b600052601260045260246000fd5b6000826157cd576157cd6157a8565b500690565b6000826157e1576157e16157a8565b500490565b60006001600160401b038381169083168181101561580657615806614c89565b039392505050565b6000823561017e1983360301811261582557600080fd5b9190910192915050565b600081600019048311821515161561584957615849614c89565b500290565b60008282101561586057615860614c89565b500390565b60006001600160401b038083168185168183048111821515161561588b5761588b614c89565b02949350505050565b60006001600160401b03808416806158ae576158ae6157a8565b92169190910492915050565b60006001600160401b038083168185168083038211156158dc576158dc614c89565b01949350505050565b80516020808301519190811015614d1e5760001960209190910360031b1b16919050565b6000835161591b818460208801615627565b6001600160801b0319939093169190920190815260100192915050565b60008251615825818460208701615627565b600082601f83011261595b57600080fd5b81356001600160401b03811115615974576159746150ce565b615987601f8201601f191660200161510d565b81815284602083860101111561599c57600080fd5b816020850160208301376000918101602001919091529392505050565b600061018082360312156159cc57600080fd5b6159d46150e4565b82356001600160401b03808211156159eb57600080fd5b6159f73683870161594a565b83526020850135915080821115615a0d57600080fd5b615a193683870161594a565b60208401526040850135915080821115615a3257600080fd5b615a3e3683870161594a565b60408401526060850135915080821115615a5757600080fd5b615a633683870161594a565b60608401526080850135915080821115615a7c57600080fd5b50615a893682860161594a565b608083015250615a9b60a08401614ccc565b60a0820152615aac60c08401614ccc565b60c0820152615abd60e08401614ccc565b60e082015261010083810135908201526101208084013590820152610140808401359082015261016092830135928101929092525090565b600060208284031215615b0757600080fd5b815161372781614cb7565b600181815b80851115615b4d578160001904821115615b3357615b33614c89565b80851615615b4057918102915b93841c9390800290615b17565b509250929050565b600082615b6457506001610d0e565b81615b7157506000610d0e565b8160018114615b875760028114615b9157615bad565b6001915050610d0e565b60ff841115615ba257615ba2614c89565b50506001821b610d0e565b5060208310610133831016604e8410600b8410161715615bd0575081810a610d0e565b615bda8383615b12565b8060001904821115615bee57615bee614c89565b029392505050565b60006137278383615b55565b60008083128015600160ff1b850184121615615c2057615c20614c89565b6001600160ff1b0384018313811615615c3b57615c3b614c89565b50500390565b600060208284031215615c5357600080fd5b813561372781614cb7565b600081615c6d57615c6d614c89565b506000190190565b602081526000613727602083018461565356fe426561636f6e436861696e50726f6f66732e7665726966795769746864726177a26469706673582212207b802debd88fb1da4ddbc8905d28e36a41d34702e4e56687893b2f6ebf09657264736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x68b1d87f95878fe05b998f19b66f4baba5de1aed":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061014b5760003560e01c806385594e58116100b6578063e4f4f8871161006f578063e4f4f887146103cc578063e5db06c014610405578063eb990c5914610425578063ecb7cb1b14610445578063f2fde38b14610472578063fabc1cbc1461049257600080fd5b806385594e5814610317578063886f1195146103445780638da5cb5b14610364578063c0db354c14610382578063ca661c0414610395578063d44e1b76146103ac57600080fd5b806350f73e7c1161010857806350f73e7c14610254578063595c6a67146102785780635ac86ab71461028d5780635c975abb146102cd578063715018a6146102e257806375608896146102f757600080fd5b806310d67a2f14610150578063136439dd146101725780631f39d87f146101925780633e1de008146101c85780634665bcda146101e85780634d50f9a414610234575b600080fd5b34801561015c57600080fd5b5061017061016b36600461196d565b6104b2565b005b34801561017e57600080fd5b5061017061018d366004611991565b61056e565b34801561019e57600080fd5b506101b26101ad36600461196d565b6106ad565b6040516101bf91906119c8565b60405180910390f35b3480156101d457600080fd5b506101b26101e336600461196d565b6108a8565b3480156101f457600080fd5b5061021c7f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681565b6040516001600160a01b0390911681526020016101bf565b34801561024057600080fd5b5061017061024f366004611991565b6109ee565b34801561026057600080fd5b5061026a60c95481565b6040519081526020016101bf565b34801561028457600080fd5b506101706109ff565b34801561029957600080fd5b506102bd6102a8366004611a15565b609854600160ff9092169190911b9081161490565b60405190151581526020016101bf565b3480156102d957600080fd5b5060985461026a565b3480156102ee57600080fd5b50610170610ac6565b34801561030357600080fd5b506102bd610312366004611a38565b610ada565b34801561032357600080fd5b50610337610332366004611a38565b610b5d565b6040516101bf9190611a64565b34801561035057600080fd5b5060975461021c906001600160a01b031681565b34801561037057600080fd5b506033546001600160a01b031661021c565b610170610390366004611a72565b610bdd565b3480156103a157600080fd5b5061026a62034bc081565b3480156103b857600080fd5b506101706103c7366004611991565b610e9d565b3480156103d857600080fd5b5061026a6103e736600461196d565b6001600160a01b0316600090815260ca602052604090206001015490565b34801561041157600080fd5b50610170610420366004611a38565b610f31565b34801561043157600080fd5b50610170610440366004611aab565b610fc6565b34801561045157600080fd5b5061046561046036600461196d565b6110ee565b6040516101bf9190611af1565b34801561047e57600080fd5b5061017061048d36600461196d565b6111a8565b34801561049e57600080fd5b506101706104ad366004611991565b61121e565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610505573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105299190611b47565b6001600160a01b0316336001600160a01b0316146105625760405162461bcd60e51b815260040161055990611b64565b60405180910390fd5b61056b8161137a565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da9190611bae565b6105f65760405162461bcd60e51b815260040161055990611bd0565b6098548181161461066f5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926106da8383611c2e565b90508060005b82811015610786576001600160a01b038716600090815260ca6020526040812060010161070d8388611c45565b8154811061071d5761071d611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061076391611c45565b4310156107735781925050610786565b508061077e81611c73565b9150506106e0565b508060008167ffffffffffffffff8111156107a3576107a3611c8e565b6040519080825280602002602001820160405280156107e857816020015b60408051808201909152600080825260208201528152602001906001900390816107c15790505b509050811561089d5760005b8281101561089b576001600160a01b038916600090815260ca602052604090206001016108218289611c45565b8154811061083157610831611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810191909152825183908390811061087d5761087d611c5d565b6020026020010181905250808061089390611c73565b9150506107f4565b505b979650505050505050565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926108d58383611c2e565b905060008167ffffffffffffffff8111156108f2576108f2611c8e565b60405190808252806020026020018201604052801561093757816020015b60408051808201909152600080825260208201528152602001906001900390816109105790505b50905060005b828110156109e4576001600160a01b038716600090815260ca6020526040902060010161096a8287611c45565b8154811061097a5761097a611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff169181019190915282518390839081106109c6576109c6611c5d565b602002602001018190525080806109dc90611c73565b91505061093d565b5095945050505050565b6109f6611471565b61056b816114cb565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611bae565b610a875760405162461bcd60e51b815260040161055990611bd0565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610ace611471565b610ad86000611593565b565b6001600160a01b038216600090815260ca60205260408120548210801590610b54575060c9546001600160a01b038416600090815260ca60205260409020600101805484908110610b2d57610b2d611c5d565b600091825260209091200154610b509190600160e01b900463ffffffff16611c45565b4310155b90505b92915050565b60408051808201909152600080825260208201526001600160a01b038316600090815260ca60205260409020600101805483908110610b9e57610b9e611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff16918101919091529392505050565b60405163a38406a360e01b81526001600160a01b038084166004830152839133917f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe6169063a38406a390602401602060405180830381865afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6b9190611b47565b6001600160a01b031614610ce75760405162461bcd60e51b815260206004820152603d60248201527f44656c617965645769746864726177616c526f757465722e6f6e6c794569676560448201527f6e506f643a206e6f7420706f644f776e6572277320456967656e506f640000006064820152608401610559565b60985460009060019081161415610d105760405162461bcd60e51b815260040161055990611ca4565b6001600160a01b038316610da65760405162461bcd60e51b815260206004820152605160248201527f44656c617965645769746864726177616c526f757465722e637265617465446560448201527f6c617965645769746864726177616c3a20726563697069656e742063616e6e6f60648201527074206265207a65726f206164647265737360781b608482015260a401610559565b346001600160e01b03811615610e96576040805180820182526001600160e01b03808416825263ffffffff43811660208085019182526001600160a01b038a16600081815260ca8352968720600190810180548083018255818a5293892088519551909616600160e01b029490961693909317939091019290925593525490917fb8f1b14c7caf74150801dcc9bc18d575cbeaf5b421943497e409df92c92e0f5991889188918691610e5791611c2e565b604080516001600160a01b0395861681529490931660208501526001600160e01b039091169183019190915260608201526080015b60405180910390a1505b5050505050565b60026065541415610ef05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610f1e5760405162461bcd60e51b815260040161055990611ca4565b610f2833836115e5565b50506001606555565b60026065541415610f845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610fb25760405162461bcd60e51b815260040161055990611ca4565b610fbc83836115e5565b5050600160655550565b600054610100900460ff1615808015610fe65750600054600160ff909116105b806110005750303b158015611000575060005460ff166001145b6110635760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610559565b6000805460ff191660011790558015611086576000805461ff0019166101001790555b61108f85611593565b6110998484611750565b6110a2826114cb565b8015610e96576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260ca6020908152604080832081518083018352815481526001820180548451818702810187019095528085529195929486810194939192919084015b8282101561119a57600084815260209081902060408051808201909152908401546001600160e01b0381168252600160e01b900463ffffffff168183015282526001909201910161114e565b505050915250909392505050565b6111b0611471565b6001600160a01b0381166112155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610559565b61056b81611593565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190611b47565b6001600160a01b0316336001600160a01b0316146112c55760405162461bcd60e51b815260040161055990611b64565b6098541981196098541916146113435760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016106a2565b6001600160a01b0381166114085760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610559565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314610ad85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610559565b62034bc08111156115525760405162461bcd60e51b815260206004820152604560248201527f44656c617965645769746864726177616c526f757465722e5f7365745769746860448201527f64726177616c44656c6179426c6f636b733a206e657756616c756520746f6f206064820152646c6172676560d81b608482015260a401610559565b60c95460408051918252602082018390527f4ffb00400574147429ee377a5633386321e66d45d8b14676014b5fa393e61e9e910160405180910390a160c955565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600090815260ca602052604081208054600190910154825b848110801561161e57508161161c8285611c45565b105b156116cb576001600160a01b038616600090815260ca602052604081206001016116488386611c45565b8154811061165857611658611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061169e91611c45565b4310156116ab57506116cb565b80516116c0906001600160e01b031686611c45565b945050600101611607565b6116d58184611c45565b6001600160a01b038716600090815260ca602052604090205583156116fe576116fe868561183a565b7f6b7151500bd0b5cc211bcc47b3029831b769004df4549e8e1c9a69da05bb0943868561172b8487611c45565b604080516001600160a01b039094168452602084019290925290820152606001610e8c565b6097546001600160a01b031615801561177157506001600160a01b03821615155b6117f35760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26118368261137a565b5050565b8047101561188a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610559565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146118d7576040519150601f19603f3d011682016040523d82523d6000602084013e6118dc565b606091505b50509050806119535760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610559565b505050565b6001600160a01b038116811461056b57600080fd5b60006020828403121561197f57600080fd5b813561198a81611958565b9392505050565b6000602082840312156119a357600080fd5b5035919050565b80516001600160e01b0316825260209081015163ffffffff16910152565b602080825282518282018190526000919060409081850190868401855b82811015611a08576119f88483516119aa565b92840192908501906001016119e5565b5091979650505050505050565b600060208284031215611a2757600080fd5b813560ff8116811461198a57600080fd5b60008060408385031215611a4b57600080fd5b8235611a5681611958565b946020939093013593505050565b60408101610b5782846119aa565b60008060408385031215611a8557600080fd5b8235611a9081611958565b91506020830135611aa081611958565b809150509250929050565b60008060008060808587031215611ac157600080fd5b8435611acc81611958565b93506020850135611adc81611958565b93969395505050506040820135916060013590565b602080825282518282015282810151604080840181905281516060850181905260009392830191849160808701905b8084101561089b57611b338286516119aa565b938501936001939093019290820190611b20565b600060208284031215611b5957600080fd5b815161198a81611958565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611bc057600080fd5b8151801515811461198a57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082821015611c4057611c40611c18565b500390565b60008219821115611c5857611c58611c18565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611c8757611c87611c18565b5060010190565b634e487b7160e01b600052604160045260246000fd5b60208082526019908201527f5061757361626c653a20696e646578206973207061757365640000000000000060408201526060019056fea2646970667358221220380280a60a6f9ee66649ea48441e32dc6c7a726b1bf36930736c05eabb03978964736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x70997970c51812dc3a010c7d01b50e0d17dc79c8":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x70e0ba845a1a0f2da3359c97e0285013525ffc49":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100b35760003560e01c8063890262451161007157806389026245146101b3578063a48bb0ac146101d3578063bd29b8cd146101e6578063caa3cd76146101f9578063e2e685801461020f578063f34109221461025557600080fd5b8062bff04d146100b857806312d1d74d146100e157806326d941f2146101155780632ed583e51461012a5780636d14a9871461013d5780638121906f1461017c575b600080fd5b6100cb6100c6366004610ec7565b610268565b6040516100d89190610f43565b60405180910390f35b6100f46100ef366004610fb7565b6103ca565b60408051825163ffffffff16815260209283015192810192909252016100d8565b610128610123366004610fea565b610410565b005b6100f4610138366004611005565b610534565b6101647f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c81565b6040516001600160a01b0390911681526020016100d8565b61018f61018a366004610fea565b6105ba565b60408051825163ffffffff90811682526020938401511692810192909252016100d8565b6101c66101c1366004610fb7565b610601565b6040516100d89190611048565b61018f6101e1366004610fb7565b61076b565b6101286101f4366004610ec7565b6107e2565b610201600081565b6040519081526020016100d8565b61024061021d366004611080565b600160209081526000928352604080842090915290825290205463ffffffff1681565b60405163ffffffff90911681526020016100d8565b610240610263366004610fea565b6108f0565b6060336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146102bb5760405162461bcd60e51b81526004016102b2906110aa565b60405180910390fd5b60008267ffffffffffffffff8111156102d6576102d661111d565b6040519080825280602002602001820160405280156102ff578160200160208202803683370190505b50905060005b838110156103bf57600085858381811061032157610321611133565b919091013560f81c60008181526003602052604090205490925090508061035a5760405162461bcd60e51b81526004016102b290611149565b60006103658361090f565b905061037c89846103776001856111b4565b610a08565b8085858151811061038f5761038f611133565b602002602001019063ffffffff16908163ffffffff168152505050505080806103b7906111d9565b915050610305565b5090505b9392505050565b60408051808201909152600080825260208201526103e88383610a92565b60408051808201909152815463ffffffff168152600190910154602082015290505b92915050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146104585760405162461bcd60e51b81526004016102b2906110aa565b60ff8116600090815260036020526040902054156104d25760405162461bcd60e51b815260206004820152603160248201527f496e64657852656769737472792e63726561746551756f72756d3a2071756f72604482015270756d20616c72656164792065786973747360781b60648201526084016102b2565b60ff166000908152600360209081526040808320815180830190925263ffffffff438116835282840185815282546001810184559286529390942091519101805492518416600160201b0267ffffffffffffffff199093169190931617179055565b604080518082019091526000808252602082015260ff8416600090815260026020908152604080832063ffffffff8088168552925290912080549091841690811061058157610581611133565b600091825260209182902060408051808201909152600290920201805463ffffffff168252600101549181019190915290509392505050565b60408051808201909152600080825260208201526105d782610aea565b60408051808201909152905463ffffffff8082168352600160201b90910416602082015292915050565b6060600061060f8484610b2c565b905060008163ffffffff1667ffffffffffffffff8111156106325761063261111d565b60405190808252806020026020018201604052801561065b578160200160208202803683370190505b50905060005b8263ffffffff168110156107625761067a868287610c61565b82828151811061068c5761068c611133565b6020026020010181815250506000801b8282815181106106ae576106ae611133565b602002602001015114156107505760405162461bcd60e51b815260206004820152605d60248201527f496e64657852656769737472792e6765744f70657261746f724c69737441744260448201527f6c6f636b4e756d6265723a206f70657261746f7220646f6573206e6f7420657860648201527f6973742061742074686520676976656e20626c6f636b206e756d626572000000608482015260a4016102b2565b8061075a816111d9565b915050610661565b50949350505050565b604080518082019091526000808252602082015260ff83166000908152600360205260409020805463ffffffff84169081106107a9576107a9611133565b60009182526020918290206040805180820190915291015463ffffffff8082168352600160201b90910416918101919091529392505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c161461082a5760405162461bcd60e51b81526004016102b2906110aa565b60005b818110156108ea57600083838381811061084957610849611133565b919091013560f81c6000818152600360205260409020549092509050806108825760405162461bcd60e51b81526004016102b290611149565b60ff8216600090815260016020908152604080832089845290915281205463ffffffff16906108b084610d38565b905060006108be8583610d72565b90508089146108d2576108d2818685610a08565b505050505080806108e2906111d9565b91505061082d565b50505050565b60006108fb82610aea565b54600160201b900463ffffffff1692915050565b60008061091b83610aea565b805490915060009061093b90600160201b900463ffffffff1660016111f4565b9050610948848383610d9c565b60ff84166000908152600260205260408120906109666001846111b4565b63ffffffff1681526020810191909152604001600020546103c35760ff841660009081526002602052604081209061099f6001846111b4565b63ffffffff908116825260208083019390935260409182016000908120835180850190945243831684528385018281528154600180820184559284529590922093516002909502909301805463ffffffff19169490921693909317815591519101559392505050565b6000610a148383610a92565b9050610a2283838387610e3c565b60ff83166000818152600160209081526040808320888452825291829020805463ffffffff191663ffffffff871690811790915582519384529083015285917f6ee1e4f4075f3d067176140d34e87874244dd273294c05b2218133e49a2ba6f6910160405180910390a250505050565b60ff8216600090815260026020908152604080832063ffffffff851684529091528120805490610ac360018361121c565b81548110610ad357610ad3611133565b906000526020600020906002020191505092915050565b60ff81166000908152600360205260408120805490610b0a60018361121c565b81548110610b1a57610b1a611133565b90600052602060002001915050919050565b60ff8216600090815260036020526040812054805b8015610bd45760ff85166000908152600360205260408120610b6460018461121c565b81548110610b7457610b74611133565b60009182526020918290206040805180820190915291015463ffffffff808216808452600160201b90920481169383019390935290925090861610610bc15760200151925061040a915050565b5080610bcc81611233565b915050610b41565b5060405162461bcd60e51b815260206004820152605560248201527f496e64657852656769737472792e5f6f70657261746f72436f756e744174426c60448201527f6f636b4e756d6265723a2071756f72756d20646964206e6f742065786973742060648201527430ba1033b4bb32b710313637b1b590373ab6b132b960591b608482015260a4016102b2565b60ff8316600090815260026020908152604080832063ffffffff86168452909152812054805b8015610d2c5760ff8616600090815260026020908152604080832063ffffffff891684529091528120610cbb60018461121c565b81548110610ccb57610ccb611133565b600091825260209182902060408051808201909152600290920201805463ffffffff9081168084526001909201549383019390935290925090861610610d19576020015192506103c3915050565b5080610d2481611233565b915050610c87565b50600095945050505050565b600080610d4483610aea565b8054909150600090610d6590600190600160201b900463ffffffff166111b4565b90506103c3848383610d9c565b600080610d7f8484610a92565b6001810154909150610d948585846000610e3c565b949350505050565b81544363ffffffff90811691161415610dd357815463ffffffff8216600160201b0267ffffffff0000000019909116178255505050565b60ff83166000908152600360209081526040808320815180830190925263ffffffff438116835285811683850190815282546001810184559286529390942091519101805492518416600160201b0267ffffffffffffffff199093169190931617179055505050565b81544363ffffffff90811691161415610e5b57600182018190556108ea565b60ff93909316600090815260026020818152604080842063ffffffff968716855282528084208151808301909252438716825281830197885280546001808201835591865292909420905191909202909101805463ffffffff1916919094161783559251919092015550565b600080600060408486031215610edc57600080fd5b83359250602084013567ffffffffffffffff80821115610efb57600080fd5b818601915086601f830112610f0f57600080fd5b813581811115610f1e57600080fd5b876020828501011115610f3057600080fd5b6020830194508093505050509250925092565b6020808252825182820181905260009190848201906040850190845b81811015610f8157835163ffffffff1683529284019291840191600101610f5f565b50909695505050505050565b803560ff81168114610f9e57600080fd5b919050565b803563ffffffff81168114610f9e57600080fd5b60008060408385031215610fca57600080fd5b610fd383610f8d565b9150610fe160208401610fa3565b90509250929050565b600060208284031215610ffc57600080fd5b6103c382610f8d565b60008060006060848603121561101a57600080fd5b61102384610f8d565b925061103160208501610fa3565b915061103f60408501610fa3565b90509250925092565b6020808252825182820181905260009190848201906040850190845b81811015610f8157835183529284019291840191600101611064565b6000806040838503121561109357600080fd5b61109c83610f8d565b946020939093013593505050565b6020808252604d908201527f496e64657852656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865207265676973747260608201526c3c9031b7b7b93234b730ba37b960991b608082015260a00190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60208082526035908201527f496e64657852656769737472792e72656769737465724f70657261746f723a206040820152741c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd605a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff838116908316818110156111d1576111d161119e565b039392505050565b60006000198214156111ed576111ed61119e565b5060010190565b600063ffffffff8083168185168083038211156112135761121361119e565b01949350505050565b60008282101561122e5761122e61119e565b500390565b6000816112425761124261119e565b50600019019056fea26469706673582212207f70dacd13e12bd4d8ca024088f99b1851332333bcefaec855541f3cb20e8b6764736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x7969c5ed335650692bc04293b07f5bf2e7a673c0":{"nonce":1,"balance":"0x0","code":"0x60806040523661001357610011610017565b005b6100115b610027610022610067565b61009f565b565b606061004e838360405180606001604052806027815260200161025e602791396100c3565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156100be573d6000f35b3d6000fd5b60606001600160a01b0384163b6101305760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b600080856001600160a01b03168560405161014b919061020e565b600060405180830381855af49150503d8060008114610186576040519150601f19603f3d011682016040523d82523d6000602084013e61018b565b606091505b509150915061019b8282866101a5565b9695505050505050565b606083156101b457508161004e565b8251156101c45782518084602001fd5b8160405162461bcd60e51b8152600401610127919061022a565b60005b838110156101f95781810151838201526020016101e1565b83811115610208576000848401525b50505050565b600082516102208184602087016101de565b9190910192915050565b60208152600082518060208401526102498160408501602087016101de565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220168c9171386e78d19614294924c2aaf713ec506abcf73d5cabd15564835e5e0964736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0x14dc79964da2c08b23698b3d3cc7ca32193d9955","0xfb":"0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc","0xfc":"0x1613beb3b2c4f22ee086b2b38c1476a3ce7f78e8","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x2bdcc0de6be1f7d2ee689a0342d76f52e8efaba3"}},"0x7a2088a1bfc9d81c55368ae168c2c02570cb814f":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80635c975abb116100de578063ab5921e111610097578063df6fadc111610071578063df6fadc114610366578063e3dae51c14610381578063f3e7387514610394578063fabc1cbc146103a757600080fd5b8063ab5921e11461032b578063ce7c2ac214610340578063d9caed121461035357600080fd5b80635c975abb146102c857806361b01b5d146102d05780637a8b2637146102d9578063886f1195146102ec5780638c871019146103055780638f6a62401461031857600080fd5b80633a98ef391161014b578063485cc95511610125578063485cc9551461026b578063553ca5f81461027e578063595c6a67146102915780635ac86ab71461029957600080fd5b80633a98ef391461023857806343fe08b01461024f57806347e7ef241461025857600080fd5b8063019e27291461019357806310d67a2f146101a857806311c70c9d146101bb578063136439dd146101ce5780632495a599146101e157806339b70e3814610211575b600080fd5b6101a66101a13660046117b8565b6103ba565b005b6101a66101b6366004611802565b61049d565b6101a66101c936600461181f565b610550565b6101a66101dc366004611841565b610605565b6032546101f4906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101f47f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b61024160335481565b604051908152602001610208565b61024160645481565b61024161026636600461185a565b610749565b6101a6610279366004611886565b6108ed565b61024161028c366004611802565b6109bb565b6101a66109cf565b6102b86102a73660046118bf565b6001805460ff9092161b9081161490565b6040519015158152602001610208565b600154610241565b61024160655481565b6102416102e7366004611841565b610a9b565b6000546101f4906201000090046001600160a01b031681565b610241610313366004611841565b610ae6565b610241610326366004611802565b610af1565b610333610aff565b6040516102089190611912565b61024161034e366004611802565b610b1f565b6101a6610361366004611945565b610bb4565b60645460655460408051928352602083019190915201610208565b61024161038f366004611841565b610d7d565b6102416103a2366004611841565b610db6565b6101a66103b5366004611841565b610dc1565b600054610100900460ff16158080156103da5750600054600160ff909116105b806103f45750303b1580156103f4575060005460ff166001145b6104195760405162461bcd60e51b815260040161041090611986565b60405180910390fd5b6000805460ff19166001179055801561043c576000805461ff0019166101001790555b6104468585610f1d565b610450838361102a565b8015610496576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051491906119d4565b6001600160a01b0316336001600160a01b0316146105445760405162461bcd60e51b8152600401610410906119f1565b61054d816110bb565b50565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c791906119d4565b6001600160a01b0316336001600160a01b0316146105f75760405162461bcd60e51b8152600401610410906119f1565b6106018282610f1d565b5050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610652573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106769190611a3b565b6106925760405162461bcd60e51b815260040161041090611a5d565b6001548181161461070b5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116141561079e5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c916146108165760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b61082084846111c0565b60335460006108316103e883611abb565b905060006103e86108406112a2565b61084a9190611abb565b905060006108588783611ad3565b9050806108658489611aea565b61086f9190611b09565b9550856108d55760405162461bcd60e51b815260206004820152602e60248201527f5374726174656779426173652e6465706f7369743a206e65775368617265732060448201526d63616e6e6f74206265207a65726f60901b6064820152608401610410565b6108df8685611abb565b603355505050505092915050565b600054610100900460ff161580801561090d5750600054600160ff909116105b806109275750303b158015610927575060005460ff166001145b6109435760405162461bcd60e51b815260040161041090611986565b6000805460ff191660011790558015610966576000805461ff0019166101001790555b610970838361102a565b80156109b6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006109c96102e783610b1f565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a409190611a3b565b610a5c5760405162461bcd60e51b815260040161041090611a5d565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e8603354610aae9190611abb565b905060006103e8610abd6112a2565b610ac79190611abb565b905081610ad48583611aea565b610ade9190611b09565b949350505050565b60006109c982610d7d565b60006109c96103a283610b1f565b60606040518060800160405280604d8152602001611b61604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c990911690637a7e0d9290604401602060405180830381865afa158015610b90573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c99190611b2b565b6001805460029081161415610c075760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614610c7f5760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b610c8a848484611314565b60335480831115610d195760405162461bcd60e51b815260206004820152604d60248201527f5374726174656779426173652e77697468647261773a20616d6f756e7453686160448201527f726573206d757374206265206c657373207468616e206f7220657175616c207460648201526c6f20746f74616c53686172657360981b608482015260a401610410565b6000610d276103e883611abb565b905060006103e8610d366112a2565b610d409190611abb565b9050600082610d4f8784611aea565b610d599190611b09565b9050610d658685611ad3565b603355610d73888883611397565b5050505050505050565b6000806103e8603354610d909190611abb565b905060006103e8610d9f6112a2565b610da99190611abb565b905080610ad48386611aea565b60006109c982610a9b565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3891906119d4565b6001600160a01b0316336001600160a01b031614610e685760405162461bcd60e51b8152600401610410906119f1565b600154198119600154191614610ee65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161073e565b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a18082111561101f5760405162461bcd60e51b815260206004820152604b60248201527f53747261746567794261736554564c4c696d6974732e5f73657454564c4c696d60448201527f6974733a206d61785065724465706f7369742065786365656473206d6178546f60648201526a74616c4465706f7369747360a81b608482015260a401610410565b606491909155606555565b600054610100900460ff166110955760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610410565b603280546001600160a01b0319166001600160a01b0384161790556106018160006113ab565b6001600160a01b0381166111495760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610410565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b60645481111561122a5760405162461bcd60e51b815260206004820152602f60248201527f53747261746567794261736554564c4c696d6974733a206d617820706572206460448201526e195c1bdcda5d08195e18d959591959608a1b6064820152608401610410565b6065546112356112a2565b11156112985760405162461bcd60e51b815260206004820152602c60248201527f53747261746567794261736554564c4c696d6974733a206d6178206465706f7360448201526b1a5d1cc8195e18d95959195960a21b6064820152608401610410565b6106018282611497565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156112eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130f9190611b2b565b905090565b6032546001600160a01b038381169116146109b65760405162461bcd60e51b815260206004820152603b60248201527f5374726174656779426173652e77697468647261773a2043616e206f6e6c792060448201527f77697468647261772074686520737472617465677920746f6b656e00000000006064820152608401610410565b6109b66001600160a01b0383168483611513565b6000546201000090046001600160a01b03161580156113d257506001600160a01b03821615155b6114545760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610601826110bb565b6032546001600160a01b038381169116146106015760405162461bcd60e51b815260206004820152603660248201527f5374726174656779426173652e6465706f7369743a2043616e206f6e6c79206460448201527532b837b9b4ba103ab73232b9363cb4b733aa37b5b2b760511b6064820152608401610410565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908401526109b6928692916000916115a3918516908490611620565b8051909150156109b657808060200190518101906115c19190611a3b565b6109b65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610410565b606061162f8484600085611639565b90505b9392505050565b60608247101561169a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610410565b6001600160a01b0385163b6116f15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610410565b600080866001600160a01b0316858760405161170d9190611b44565b60006040518083038185875af1925050503d806000811461174a576040519150601f19603f3d011682016040523d82523d6000602084013e61174f565b606091505b509150915061175f82828661176a565b979650505050505050565b60608315611779575081611632565b8251156117895782518084602001fd5b8160405162461bcd60e51b81526004016104109190611912565b6001600160a01b038116811461054d57600080fd5b600080600080608085870312156117ce57600080fd5b843593506020850135925060408501356117e7816117a3565b915060608501356117f7816117a3565b939692955090935050565b60006020828403121561181457600080fd5b8135611632816117a3565b6000806040838503121561183257600080fd5b50508035926020909101359150565b60006020828403121561185357600080fd5b5035919050565b6000806040838503121561186d57600080fd5b8235611878816117a3565b946020939093013593505050565b6000806040838503121561189957600080fd5b82356118a4816117a3565b915060208301356118b4816117a3565b809150509250929050565b6000602082840312156118d157600080fd5b813560ff8116811461163257600080fd5b60005b838110156118fd5781810151838201526020016118e5565b8381111561190c576000848401525b50505050565b60208152600082518060208401526119318160408501602087016118e2565b601f01601f19169190910160400192915050565b60008060006060848603121561195a57600080fd5b8335611965816117a3565b92506020840135611975816117a3565b929592945050506040919091013590565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000602082840312156119e657600080fd5b8151611632816117a3565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611a4d57600080fd5b8151801515811461163257600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611ace57611ace611aa5565b500190565b600082821015611ae557611ae5611aa5565b500390565b6000816000190483118215151615611b0457611b04611aa5565b500290565b600082611b2657634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611b3d57600080fd5b5051919050565b60008251611b568184602087016118e2565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220ee4f89775fd0df7e89f51555e886f738dfe996deea6e76052fa01c5ef77f152864736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x809d550fca64d94bd9f66e60752a544199cfac3d":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106101bb5760003560e01c8063715018a6116100ec578063b099627e1161008a578063e481af9d11610064578063e481af9d14610632578063f2fde38b14610647578063fc299dee14610667578063fce36c7d1461068757600080fd5b8063b099627e14610589578063b98d0908146105e4578063df5cf723146105fe57600080fd5b80639926ee7d116100c65780639926ee7d14610509578063a364f4da14610529578063a98fb35514610549578063ab21739a1461056957600080fd5b8063715018a6146104b65780638da5cb5b146104cb57806395c6d604146104e957600080fd5b80634ae07c3711610159578063683048351161013357806368304835146103d75780636b3aa72e1461040b5780636d14a9871461043e57806370a082311461047257600080fd5b80634ae07c371461034a5780635c008994146103785780635df459461461038b57600080fd5b806333cfb7b71161019557806333cfb7b7146102bd5780633bc28c8c146102ea578063416c7e5e1461030a578063485cc9551461032a57600080fd5b806306045a911461022f578063171f1d5b146102645780632dd94eba1461029b57600080fd5b3661022a5733600090815260ca6020526040812080543492906101df90849061407b565b909155505033600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a2005b600080fd5b34801561023b57600080fd5b5061024f61024a3660046141b7565b6106a7565b60405190151581526020015b60405180910390f35b34801561027057600080fd5b5061028461027f366004614318565b610786565b60408051921515835290151560208301520161025b565b3480156102a757600080fd5b506102bb6102b636600461461f565b610910565b005b3480156102c957600080fd5b506102dd6102d8366004614665565b610c10565b60405161025b9190614682565b3480156102f657600080fd5b506102bb610305366004614665565b6110e3565b34801561031657600080fd5b506102bb6103253660046146dd565b6110f7565b34801561033657600080fd5b506102bb6103453660046146fa565b61122e565b34801561035657600080fd5b5061036a610365366004614733565b611343565b60405161025b9291906147cd565b6102bb61038636600461485e565b612296565b34801561039757600080fd5b506103bf7f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e81565b6040516001600160a01b03909116815260200161025b565b3480156103e357600080fd5b506103bf7f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377881565b34801561041757600080fd5b507f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f8757076103bf565b34801561044a57600080fd5b506103bf7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c81565b34801561047e57600080fd5b506104a861048d366004614665565b6001600160a01b0316600090815260ca602052604090205490565b60405190815260200161025b565b3480156104c257600080fd5b506102bb6124cf565b3480156104d757600080fd5b506033546001600160a01b03166103bf565b3480156104f557600080fd5b5061024f6105043660046148a9565b6124e3565b34801561051557600080fd5b506102bb6105243660046148f4565b612508565b34801561053557600080fd5b506102bb610544366004614665565b6125d4565b34801561055557600080fd5b506102bb61056436600461499f565b61269b565b34801561057557600080fd5b506102bb6105843660046149ef565b6126ef565b34801561059557600080fd5b506105c86105a4366004614a16565b60c96020526000908152604090205463ffffffff811690600160201b900460ff1682565b6040805163ffffffff909316835290151560208301520161025b565b3480156105f057600080fd5b5060975461024f9060ff1681565b34801561060a57600080fd5b506103bf7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b34801561063e57600080fd5b506102dd612a50565b34801561065357600080fd5b506102bb610662366004614665565b612e19565b34801561067357600080fd5b506065546103bf906001600160a01b031681565b34801561069357600080fd5b506102bb6106a2366004614a2f565b612e8f565b60008085836040516020016106bd929190614aa3565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff166106f957600091505061077a565b600081815260c96020526040902054600160201b900460ff1661072057600091505061077a565b60408051602081018c90529081018a9052606081018990526001600160601b03198816608082015260009060940160408051601f198184030181529190528051602082012090915061077487848389613247565b93505050505b98975050505050505050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878760000151886020015188600001516000600281106107ce576107ce614abe565b60200201518951600160200201518a602001516000600281106107f3576107f3614abe565b60200201518b6020015160016002811061080f5761080f614abe565b602090810291909101518c518d83015160405161086c9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c61088f9190614ad4565b90506109026108a86108a1888461325f565b86906132f6565b6108b061338a565b6108f86108e9856108e3604080518082018252600080825260209182015281518083019092526001825260029082015290565b9061325f565b6108f28c61344a565b906132f6565b886201d4c06134da565b909890975095505050505050565b737969c5ed335650692bc04293b07f5bf2e7a673c060005a600085815260c9602052604090205490915063ffffffff166109885760405162461bcd60e51b8152602060048201526014602482015273426174636820646f65736e27742065786973747360601b60448201526064015b60405180910390fd5b600084815260c96020526040902054600160201b900460ff16156109e85760405162461bcd60e51b815260206004820152601760248201527610985d18da08185b1c9958591e481c995cdc1bdb991959604a1b604482015260640161097f565b6001600160a01b038216600090815260ca6020526040902054610a465760405162461bcd60e51b81526020600482015260166024820152754261746368657220686173206e6f2062616c616e636560501b604482015260640161097f565b600084815260c960205260408120805464ff00000000198116600160201b179091558190610a7c90879063ffffffff1687611343565b91509150604360ff168260200151600081518110610a9c57610a9c614abe565b6020026020010151610aae9190614af6565b6001600160601b031660648360000151600081518110610ad057610ad0614abe565b60200260200101516001600160601b0316610aeb9190614b25565b1015610b095760405162461bcd60e51b815260040161097f90614b44565b6040516001600160a01b038516815286907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a610b598387614ba2565b610b66906201117061407b565b610b709190614b25565b6001600160a01b038716600090815260ca6020526040902054909150811115610bab5760405162461bcd60e51b815260040161097f90614bb9565b6001600160a01b038616600090815260ca602052604081208054839290610bd3908490614ba2565b9091555050604051339082156108fc029083906000818181858888f19350505050158015610c05573d6000803e3d6000fd5b505050505050505050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16906313542a4e90602401602060405180830381865afa158015610c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca09190614c16565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c169063871ef04990602401602060405180830381865afa158015610d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2f9190614c2f565b90506001600160c01b0381161580610dc957507f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc49190614c58565b60ff16155b15610de95760408051600080825260208201909252905b50949350505050565b6000610dfd826001600160c01b03166136fe565b90506000805b8251811015610ed3577f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b0316633ca5a5f5848381518110610e4d57610e4d614abe565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb59190614c16565b610ebf908361407b565b915080610ecb81614c7b565b915050610e03565b506000816001600160401b03811115610eee57610eee614093565b604051908082528060200260200182016040528015610f17578160200160208202803683370190505b5090506000805b84518110156110d6576000858281518110610f3b57610f3b614abe565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137781690633ca5a5f590602401602060405180830381865afa158015610fb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd49190614c16565b905060005b818110156110c0576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b03169063adc804da906044016040805180830381865afa15801561104e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110729190614cab565b6000015186868151811061108857611088614abe565b6001600160a01b0390921660209283029190910190910152846110aa81614c7b565b95505080806110b890614c7b565b915050610fd9565b50505080806110ce90614c7b565b915050610f1e565b5090979650505050505050565b6110eb6137c0565b6110f48161381a565b50565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611155573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111799190614cec565b6001600160a01b0316336001600160a01b0316146112255760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a40161097f565b6110f481613883565b600054610100900460ff161580801561124e5750600054600160ff909116105b806112685750303b158015611268575060005460ff166001145b6112cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161097f565b6000805460ff1916600117905580156112ee576000805461ff0019166101001790555b6112f883836138ca565b801561133e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040805180820190915260608082526020820152600082604001515160405180604001604052806001815260200160008152505114801561139f57508260a0015151604051806040016040528060018152602001600081525051145b80156113c657508260c0015151604051806040016040528060018152602001600081525051145b80156113ed57508260e0015151604051806040016040528060018152602001600081525051145b6114575760405162461bcd60e51b8152602060048201526041602482015260008051602061517483398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a40161097f565b825151602084015151146114cf5760405162461bcd60e51b815260206004820152604460248201819052600080516020615174833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a40161097f565b4363ffffffff168463ffffffff161061153e5760405162461bcd60e51b815260206004820152603c602482015260008051602061517483398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b00000000606482015260840161097f565b60408051808201825260008082526020808301829052835180850185526060808252818301528451808601865260018082529083019390935284518381528086019095529293919082810190803683370190505060208281019190915260408051808201825260018082526000919093015280518281528082019091529081602001602082028036833701905050815260408051808201909152606080825260208201528560200151516001600160401b038111156115ff576115ff614093565b604051908082528060200260200182016040528015611628578160200160208202803683370190505b5081526020860151516001600160401b0381111561164857611648614093565b604051908082528060200260200182016040528015611671578160200160208202803683370190505b508160200181905250600061171d60405180604001604052806001815260200160008152507f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117189190614c58565b61394b565b905060005b8760200151518110156119b8576117678860200151828151811061174857611748614abe565b6020026020010151805160009081526020918201519091526040902090565b8360200151828151811061177d5761177d614abe565b6020908102919091010152801561183d57602083015161179e600183614ba2565b815181106117ae576117ae614abe565b602002602001015160001c836020015182815181106117cf576117cf614abe565b602002602001015160001c1161183d576040805162461bcd60e51b815260206004820152602481019190915260008051602061517483398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f72746564606482015260840161097f565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b03166304ec63518460200151838151811061188257611882614abe565b60200260200101518b8b6000015185815181106118a1576118a1614abe565b60200260200101516040518463ffffffff1660e01b81526004016118de9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa1580156118fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191f9190614c2f565b6001600160c01b03168360000151828151811061193e5761193e614abe565b6020026020010181815250506119a46108a1611978848660000151858151811061196a5761196a614abe565b6020026020010151166139de565b8a60200151848151811061198e5761198e614abe565b6020026020010151613a0990919063ffffffff16565b9450806119b081614c7b565b915050611722565b50506119c383613aed565b60975490935060ff166000816119da576000611a5c565b7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc96001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190614c16565b905060005b604051806040016040528060018152602001600081525051811015612167578215611bed578963ffffffff16827f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b031663249a0c4260405180604001604052806001815260200160008152508581518110611ae557611ae5614abe565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015611b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4d9190614c16565b611b57919061407b565b11611bed5760405162461bcd60e51b8152602060048201526066602482015260008051602061517483398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c40161097f565b7f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b03166368bccaac60405180604001604052806001815260200160008152508381518110611c4457611c44614abe565b602001015160f81c60f81b60f81c8c8c60a001518581518110611c6957611c69614abe565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611cc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce99190614d09565b6001600160401b031916611d0c8a60400151838151811061174857611748614abe565b67ffffffffffffffff191614611da85760405162461bcd60e51b8152602060048201526061602482015260008051602061517483398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c40161097f565b611dd889604001518281518110611dc157611dc1614abe565b6020026020010151876132f690919063ffffffff16565b95507f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b031663c8294c5660405180604001604052806001815260200160008152508381518110611e3157611e31614abe565b602001015160f81c60f81b60f81c8c8c60c001518581518110611e5657611e56614abe565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed69190614d34565b85602001518281518110611eec57611eec614abe565b6001600160601b03909216602092830291909101820152850151805182908110611f1857611f18614abe565b602002602001015185600001518281518110611f3657611f36614abe565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a602001515181101561215257611fc586600001518281518110611f8057611f80614abe565b602002602001015160405180604001604052806001815260200160008152508581518110611fb057611fb0614abe565b016020015160f81c60ff161c60019081161490565b15612140577f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b031663f2be94ae6040518060400160405280600181526020016000815250858151811061202157612021614abe565b602001015160f81c60f81b60f81c8e8960200151858151811061204657612046614abe565b60200260200101518f60e00151888151811061206457612064614abe565b6020026020010151878151811061207d5761207d614abe565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa1580156120e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121059190614d34565b875180518590811061211957612119614abe565b6020026020010181815161212d9190614d51565b6001600160601b03169052506001909101905b8061214a81614c7b565b915050611f5a565b5050808061215f90614c7b565b915050611a61565b5050506000806121818a868a606001518b60800151610786565b91509150816121f25760405162461bcd60e51b8152602060048201526043602482015260008051602061517483398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a40161097f565b806122535760405162461bcd60e51b8152602060048201526039602482015260008051602061517483398151915260448201527f7265733a207369676e617475726520697320696e76616c696400000000000000606482015260840161097f565b5050600087826020015160405160200161226e929190614d79565b60408051808303601f1901815291905280516020909101209299929850919650505050505050565b600060c84310156122a85750826122d4565b83336040516020016122bb929190614aa3565b6040516020818303038152906040528051906020012090505b600081815260c9602052604090205463ffffffff16156123365760405162461bcd60e51b815260206004820152601b60248201527f42617463682077617320616c7265616479207375626d69747465640000000000604482015260640161097f565b34156123a55733600090815260ca60205260408120805434929061235b90849061407b565b909155505033600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a25b33600090815260ca60205260409020546124015760405162461bcd60e51b815260206004820152601860248201527f426174636865722062616c616e636520697320656d7074790000000000000000604482015260640161097f565b6040805180820182526000602080830182815263ffffffff43818116865287855260c9909352928590208451815492511515600160201b0264ffffffffff19909316941693909317179091559151909186917f1871c33134a542e0ab9facf7013d27b9ed95e64d299e9919ee091c9cfcb19fa5916124829188908890614dea565b60405180910390a2847f130d3e81af62e03ed6fff5e3bb343695ec513892cfad24d286486745dcc61437334387876040516124c09493929190614e13565b60405180910390a25050505050565b6124d76137c0565b6124e16000613b88565b565b60008184846040516124f6929190614e4e565b60405180910390201490509392505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146125505760405162461bcd60e51b815260040161097f90614e5e565b604051639926ee7d60e01b81526001600160a01b037f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f8757071690639926ee7d9061259e9085908590600401614f23565b600060405180830381600087803b1580156125b857600080fd5b505af11580156125cc573d6000803e3d6000fd5b505050505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c161461261c5760405162461bcd60e51b815260040161097f90614e5e565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f875707169063a364f4da906024015b600060405180830381600087803b15801561268057600080fd5b505af1158015612694573d6000803e3d6000fd5b5050505050565b6126a36137c0565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f875707169063a98fb35590612666908490600401614f6e565b60005a905060008484604051602001612709929190614aa3565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff1661277a5760405162461bcd60e51b8152602060048201526014602482015273426174636820646f65736e27742065786973747360601b604482015260640161097f565b600081815260c96020526040902054600160201b900460ff16156127da5760405162461bcd60e51b815260206004820152601760248201527610985d18da08185b1c9958591e481c995cdc1bdb991959604a1b604482015260640161097f565b6001600160a01b038416600090815260ca60205260409020546128385760405162461bcd60e51b81526020600482015260166024820152754261746368657220686173206e6f2062616c616e636560501b604482015260640161097f565b600081815260c960205260408120805464ff00000000198116600160201b17909155819061286e90849063ffffffff1687611343565b91509150604360ff16826020015160008151811061288e5761288e614abe565b60200260200101516128a09190614af6565b6001600160601b0316606483600001516000815181106128c2576128c2614abe565b60200260200101516001600160601b03166128dd9190614b25565b10156128fb5760405162461bcd60e51b815260040161097f90614b44565b6040516001600160a01b038716815287907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a61294b8388614ba2565b612958906201117061407b565b6129629190614b25565b6001600160a01b038916600090815260ca602052604090205490915081111561299d5760405162461bcd60e51b815260040161097f90614bb9565b6001600160a01b038816600090815260ca6020526040812080548392906129c5908490614ba2565b90915550506001600160a01b038816600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015612a44573d6000803e3d6000fd5b50505050505050505050565b606060007f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ab2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad69190614c58565b60ff16905080612af457505060408051600081526020810190915290565b6000805b82811015612ba957604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b8b9190614c16565b612b95908361407b565b915080612ba181614c7b565b915050612af8565b506000816001600160401b03811115612bc457612bc4614093565b604051908082528060200260200182016040528015612bed578160200160208202803683370190505b5090506000805b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c769190614c58565b60ff16811015612e0f57604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612cea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0e9190614c16565b905060005b81811015612dfa576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b03169063adc804da906044016040805180830381865afa158015612d88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dac9190614cab565b60000151858581518110612dc257612dc2614abe565b6001600160a01b039092166020928302919091019091015283612de481614c7b565b9450508080612df290614c7b565b915050612d13565b50508080612e0790614c7b565b915050612bf4565b5090949350505050565b612e216137c0565b6001600160a01b038116612e865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161097f565b6110f481613b88565b6065546001600160a01b03163314612f245760405162461bcd60e51b815260206004820152604c60248201527f536572766963654d616e61676572426173652e6f6e6c7952657761726473496e60448201527f69746961746f723a2063616c6c6572206973206e6f742074686520726577617260648201526b32399034b734ba34b0ba37b960a11b608482015260a40161097f565b60005b818110156131f857828282818110612f4157612f41614abe565b9050602002810190612f539190614f81565b612f64906040810190602001614665565b6001600160a01b03166323b872dd3330868686818110612f8657612f86614abe565b9050602002810190612f989190614f81565b604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152013560448201526064016020604051808303816000875af1158015612fef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130139190614fac565b50600083838381811061302857613028614abe565b905060200281019061303a9190614f81565b61304b906040810190602001614665565b604051636eb1769f60e11b81523060048201526001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81166024830152919091169063dd62ed3e90604401602060405180830381865afa1580156130b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130dd9190614c16565b90508383838181106130f1576130f1614abe565b90506020028101906131039190614f81565b613114906040810190602001614665565b6001600160a01b031663095ea7b37f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f8387878781811061315657613156614abe565b90506020028101906131689190614f81565b60400135613176919061407b565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156131c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e59190614fac565b5050806131f190614c7b565b9050612f27565b5060405163fce36c7d60e01b81526001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f169063fce36c7d9061259e9085908590600401615024565b600083613255868585613bda565b1495945050505050565b604080518082019091526000808252602082015261327b613f8b565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa90508080156132ae576132b0565bfe5b50806132ee5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b604482015260640161097f565b505092915050565b6040805180820190915260008082526020820152613312613fa9565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156132ae5750806132ee5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b604482015260640161097f565b613392613fc7565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201909152600080825260208201526000808061347a60008051602061515483398151915286614ad4565b90505b61348681613cd4565b90935091506000805160206151548339815191528283098314156134c0576040805180820190915290815260208101919091529392505050565b60008051602061515483398151915260018208905061347d565b60408051808201825286815260208082018690528251808401909352868352820184905260009182919061350c613fec565b60005b60028110156136d1576000613525826006614b25565b905084826002811061353957613539614abe565b6020020151518361354b83600061407b565b600c811061355b5761355b614abe565b602002015284826002811061357257613572614abe565b60200201516020015183826001613589919061407b565b600c811061359957613599614abe565b60200201528382600281106135b0576135b0614abe565b60200201515151836135c383600261407b565b600c81106135d3576135d3614abe565b60200201528382600281106135ea576135ea614abe565b602002015151600160200201518361360383600361407b565b600c811061361357613613614abe565b602002015283826002811061362a5761362a614abe565b60200201516020015160006002811061364557613645614abe565b60200201518361365683600461407b565b600c811061366657613666614abe565b602002015283826002811061367d5761367d614abe565b60200201516020015160016002811061369857613698614abe565b6020020151836136a983600561407b565b600c81106136b9576136b9614abe565b602002015250806136c981614c7b565b91505061350f565b506136da61400b565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606060008061370c846139de565b61ffff166001600160401b0381111561372757613727614093565b6040519080825280601f01601f191660200182016040528015613751576020820181803683370190505b5090506000805b825182108015613769575061010081105b15612e0f576001811b9350858416156137b0578060f81b83838151811061379257613792614abe565b60200101906001600160f81b031916908160001a9053508160010191505b6137b981614c7b565b9050613758565b6033546001600160a01b031633146124e15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161097f565b606554604080516001600160a01b03928316815291831660208301527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b600054610100900460ff166139355760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161097f565b61393e82613b88565b6139478161381a565b5050565b60008061395784613d56565b9050808360ff166001901b116139d55760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c756500606482015260840161097f565b90505b92915050565b6000805b82156139d8576139f3600184614ba2565b9092169180613a0181615131565b9150506139e2565b60408051808201909152600080825260208201526102008261ffff1610613a655760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b604482015260640161097f565b8161ffff1660011415613a795750816139d8565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610613ae257600161ffff871660ff83161c81161415613ac557613ac284846132f6565b93505b613acf83846132f6565b92506201fffe600192831b169101613a95565b509195945050505050565b60408051808201909152600080825260208201528151158015613b1257506020820151155b15613b30575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206151548339815191528460200151613b639190614ad4565b613b7b90600080516020615154833981519152614ba2565b905292915050565b919050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208451613bea9190614ad4565b15613c715760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a40161097f565b8260205b85518111610de057613c88600285614ad4565b613ca957816000528086015160205260406000209150600284049350613cc2565b8086015160005281602052604060002091506002840493505b613ccd60208261407b565b9050613c75565b60008080600080516020615154833981519152600360008051602061515483398151915286600080516020615154833981519152888909090890506000613d4a827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615154833981519152613ee3565b91959194509092505050565b600061010082511115613ddf5760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161097f565b8151613ded57506000919050565b60008083600081518110613e0357613e03614abe565b0160200151600160f89190911c81901b92505b8451811015613eda57848181518110613e3157613e31614abe565b0160200151600160f89190911c1b9150828211613ec65760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161097f565b91811791613ed381614c7b565b9050613e16565b50909392505050565b600080613eee61400b565b613ef6614029565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280156132ae575082613f805760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c757265000000000000604482015260640161097f565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613fda614047565b8152602001613fe7614047565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561408e5761408e614065565b500190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156140cb576140cb614093565b60405290565b60405161010081016001600160401b03811182821017156140cb576140cb614093565b604051601f8201601f191681016001600160401b038111828210171561411c5761411c614093565b604052919050565b60006001600160401b0383111561413d5761413d614093565b614150601f8401601f19166020016140f4565b905082815283838301111561416457600080fd5b828260208301376000602084830101529392505050565b600082601f83011261418c57600080fd5b61419b83833560208501614124565b9392505050565b6001600160a01b03811681146110f457600080fd5b600080600080600080600080610100898b0312156141d457600080fd5b88359750602089013596506040890135955060608901356001600160601b03198116811461420157600080fd5b94506080890135935060a08901356001600160401b0381111561422357600080fd5b61422f8b828c0161417b565b93505060c0890135915060e0890135614247816141a2565b809150509295985092959890939650565b60006040828403121561426a57600080fd5b6142726140a9565b9050813581526020820135602082015292915050565b600082601f83011261429957600080fd5b6142a16140a9565b8060408401858111156142b357600080fd5b845b818110156142cd5780358452602093840193016142b5565b509095945050505050565b6000608082840312156142ea57600080fd5b6142f26140a9565b90506142fe8383614288565b815261430d8360408401614288565b602082015292915050565b600080600080610120858703121561432f57600080fd5b843593506143408660208701614258565b925061434f86606087016142d8565b915061435e8660e08701614258565b905092959194509250565b60006001600160401b0382111561438257614382614093565b5060051b60200190565b803563ffffffff81168114613b8357600080fd5b600082601f8301126143b157600080fd5b813560206143c66143c183614369565b6140f4565b82815260059290921b840181019181810190868411156143e557600080fd5b8286015b84811015614407576143fa8161438c565b83529183019183016143e9565b509695505050505050565b600082601f83011261442357600080fd5b813560206144336143c183614369565b82815260069290921b8401810191818101908684111561445257600080fd5b8286015b84811015614407576144688882614258565b835291830191604001614456565b600082601f83011261448757600080fd5b813560206144976143c183614369565b82815260059290921b840181019181810190868411156144b657600080fd5b8286015b848110156144075780356001600160401b038111156144d95760008081fd5b6144e78986838b01016143a0565b8452509183019183016144ba565b6000610180828403121561450857600080fd5b6145106140d1565b905081356001600160401b038082111561452957600080fd5b614535858386016143a0565b8352602084013591508082111561454b57600080fd5b61455785838601614412565b6020840152604084013591508082111561457057600080fd5b61457c85838601614412565b604084015261458e85606086016142d8565b60608401526145a08560e08601614258565b60808401526101208401359150808211156145ba57600080fd5b6145c6858386016143a0565b60a08401526101408401359150808211156145e057600080fd5b6145ec858386016143a0565b60c084015261016084013591508082111561460657600080fd5b5061461384828501614476565b60e08301525092915050565b6000806040838503121561463257600080fd5b8235915060208301356001600160401b0381111561464f57600080fd5b61465b858286016144f5565b9150509250929050565b60006020828403121561467757600080fd5b81356139d5816141a2565b6020808252825182820181905260009190848201906040850190845b818110156146c35783516001600160a01b03168352928401929184019160010161469e565b50909695505050505050565b80151581146110f457600080fd5b6000602082840312156146ef57600080fd5b81356139d5816146cf565b6000806040838503121561470d57600080fd5b8235614718816141a2565b91506020830135614728816141a2565b809150509250929050565b60008060006060848603121561474857600080fd5b833592506147586020850161438c565b915060408401356001600160401b0381111561477357600080fd5b61477f868287016144f5565b9150509250925092565b600081518084526020808501945080840160005b838110156147c25781516001600160601b03168752958201959082019060010161479d565b509495945050505050565b60408152600083516040808401526147e86080840182614789565b90506020850151603f198483030160608501526148058282614789565b925050508260208301529392505050565b60008083601f84011261482857600080fd5b5081356001600160401b0381111561483f57600080fd5b60208301915083602082850101111561485757600080fd5b9250929050565b60008060006040848603121561487357600080fd5b8335925060208401356001600160401b0381111561489057600080fd5b61489c86828701614816565b9497909650939450505050565b6000806000604084860312156148be57600080fd5b83356001600160401b038111156148d457600080fd5b6148e086828701614816565b909790965060209590950135949350505050565b6000806040838503121561490757600080fd5b8235614912816141a2565b915060208301356001600160401b038082111561492e57600080fd5b908401906060828703121561494257600080fd5b60405160608101818110838211171561495d5761495d614093565b60405282358281111561496f57600080fd5b61497b8882860161417b565b82525060208301356020820152604083013560408201528093505050509250929050565b6000602082840312156149b157600080fd5b81356001600160401b038111156149c757600080fd5b8201601f810184136149d857600080fd5b6149e784823560208401614124565b949350505050565b600080600060608486031215614a0457600080fd5b833592506020840135614758816141a2565b600060208284031215614a2857600080fd5b5035919050565b60008060208385031215614a4257600080fd5b82356001600160401b0380821115614a5957600080fd5b818501915085601f830112614a6d57600080fd5b813581811115614a7c57600080fd5b8660208260051b8501011115614a9157600080fd5b60209290920196919550909350505050565b91825260601b6001600160601b031916602082015260340190565b634e487b7160e01b600052603260045260246000fd5b600082614af157634e487b7160e01b600052601260045260246000fd5b500690565b60006001600160601b0380831681851681830481118215151615614b1c57614b1c614065565b02949350505050565b6000816000190483118215151615614b3f57614b3f614065565b500290565b602080825260409082018190527f5369676e61746f7269657320646f206e6f74206f776e206174206c6561737420908201527f7468726573686f6c642070657263656e74616765206f6620612071756f72756d606082015260800190565b600082821015614bb457614bb4614065565b500390565b6020808252603c908201527f4261746368657220686173206e6f742073756666696369656e742066756e647360408201527f20666f7220706179696e672074686973207472616e73616374696f6e00000000606082015260800190565b600060208284031215614c2857600080fd5b5051919050565b600060208284031215614c4157600080fd5b81516001600160c01b03811681146139d557600080fd5b600060208284031215614c6a57600080fd5b815160ff811681146139d557600080fd5b6000600019821415614c8f57614c8f614065565b5060010190565b6001600160601b03811681146110f457600080fd5b600060408284031215614cbd57600080fd5b614cc56140a9565b8251614cd0816141a2565b81526020830151614ce081614c96565b60208201529392505050565b600060208284031215614cfe57600080fd5b81516139d5816141a2565b600060208284031215614d1b57600080fd5b815167ffffffffffffffff19811681146139d557600080fd5b600060208284031215614d4657600080fd5b81516139d581614c96565b60006001600160601b0383811690831681811015614d7157614d71614065565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015614db457815185529382019390820190600101614d98565b5092979650505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff84168152604060208201526000614e0a604083018486614dc1565b95945050505050565b6001600160a01b038516815263ffffffff84166020820152606060408201819052600090614e449083018486614dc1565b9695505050505050565b8183823760009101908152919050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015614efc57602081850181015186830182015201614ee0565b81811115614f0e576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b0383168152604060208201526000825160606040840152614f4d60a0840182614ed6565b90506020840151606084015260408401516080840152809150509392505050565b60208152600061419b6020830184614ed6565b60008235609e19833603018112614f9757600080fd5b9190910192915050565b8035613b83816141a2565b600060208284031215614fbe57600080fd5b81516139d5816146cf565b8183526000602080850194508260005b858110156147c2578135614fec816141a2565b6001600160a01b031687528183013561500481614c96565b6001600160601b0316878401526040968701969190910190600101614fd9565b60208082528181018390526000906040808401600586901b8501820187855b8881101561512357878303603f190184528135368b9003609e1901811261506957600080fd5b8a0160a0813536839003601e1901811261508257600080fd5b820180356001600160401b0381111561509a57600080fd5b8060061b36038413156150ac57600080fd5b8287526150be838801828c8501614fc9565b925050506150cd888301614fa1565b6001600160a01b031688860152818701358786015260606150ef81840161438c565b63ffffffff1690860152608061510683820161438c565b63ffffffff16950194909452509285019290850190600101615043565b509098975050505050505050565b600061ffff8083168181141561514957615149614065565b600101939250505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47424c535369676e6174757265436865636b65722e636865636b5369676e617475a2646970667358221220f3af18a616315479028514dce131e77661a45d54dda3a89866d052a17af15d1f64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x82e01223d51eb87e16a03e24687edf0f294da6f1":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063bd90df701461003b578063fa534dc01461006b575b600080fd5b60005461004e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61007e6100793660046101b7565b61008e565b6040519015158152602001610062565b60008054604051829182916001600160a01b03909116906100bf908c908c908c908c908c908c908c906024016102ed565b60408051601f198184030181529181526020820180516001600160e01b03166303e94d3760e61b179052516100f4919061035c565b600060405180830381855afa9150503d806000811461012f576040519150601f19603f3d011682016040523d82523d6000602084013e610134565b606091505b50915091508161017f5760405162461bcd60e51b81526020600482015260126024820152711cdd185d1a58d7d8d85b1b0819985a5b195960721b604482015260640160405180910390fd5b808060200190518101906101939190610378565b9a9950505050505050505050565b634e487b7160e01b600052604160045260246000fd5b600080600080600080600060e0888a0312156101d257600080fd5b87359650602088013595506040880135945060608801356bffffffffffffffffffffffff198116811461020457600080fd5b93506080880135925060a088013567ffffffffffffffff8082111561022857600080fd5b818a0191508a601f83011261023c57600080fd5b81358181111561024e5761024e6101a1565b604051601f8201601f19908116603f01168101908382118183101715610276576102766101a1565b816040528281528d602084870101111561028f57600080fd5b82602086016020830137600060208483010152809650505050505060c0880135905092959891949750929550565b60005b838110156102d85781810151838201526020016102c0565b838111156102e7576000848401525b50505050565b8781528660208201528560408201526bffffffffffffffffffffffff198516606082015283608082015260e060a0820152600083518060e084015261010061033b82828601602089016102bd565b60c0840194909452601f01601f191691909101909101979650505050505050565b6000825161036e8184602087016102bd565b9190910192915050565b60006020828403121561038a57600080fd5b8151801515811461039a57600080fd5b939250505056fea2646970667358221220890e6c4f803738cdd8143d9c468e06db317af2bf0fc3f3e1815eb0eec51fe54264736f6c634300080c0033","storage":{"0x0":"0x1613beb3b2c4f22ee086b2b38c1476a3ce7f78e8"}},"0x851356ae760d987e095750cceb3bc6014560891c":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0xe7f1725e7734ce288f8367e1bb143e90bb3f05120001","0x1":"0x0","0x64":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x96":"0x1","0x9c":"0x3","0x9d":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x9e":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x5eb3bc0a489c5a8288765d2336659ebca68fcd00","0x683723e34a772b6e4f2c919bba7fa32ed8ea11a8325f54da7db716e9d9dd98c7":"0x322af8000000c8","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539c":"0x95401dc811bb5740090279ba06cfa8fcf6113778","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539d":"0x998abeb3e57409262ae5b751f60747921b33613e","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539e":"0xf5059a5d33d5853360d16c683c16e67980206f36","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x9e545e3c0baab3e08cdfd552c960a1050f373042"}},"0x8a791620dd6260079bf849dc5567adc3f2fdc318":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x97":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x98":"0x0","0xc9":"0xa","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x68b1d87f95878fe05b998f19b66f4baba5de1aed","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x8f86403a4de0bb5791fa46b8e795c547942fe4cf":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101155760003560e01c80636d14a987116100a2578063bf79ce5811610071578063bf79ce58146103cc578063d5254a8c146103df578063de29fac0146103ff578063e8bb9ae61461041f578063f4e24fe51461044857600080fd5b80636d14a9871461030a5780637916cea6146103315780637ff81a8714610372578063a3db80e2146103a557600080fd5b80633fb27952116100e95780633fb27952146101df57806347b314e8146101f25780635f61a88414610233578063605747d51461028f57806368bccaac146102dd57600080fd5b8062a1f4cb1461011a57806313542a4e1461015b57806326d941f214610192578063377ed99d146101a7575b600080fd5b610141610128366004611904565b6003602052600090815260409020805460019091015482565b604080519283526020830191909152015b60405180910390f35b610184610169366004611904565b6001600160a01b031660009081526001602052604090205490565b604051908152602001610152565b6101a56101a0366004611937565b61045b565b005b6101ca6101b5366004611937565b60ff1660009081526004602052604090205490565b60405163ffffffff9091168152602001610152565b6101a56101ed3660046119c2565b6105b4565b61021b610200366004611a68565b6000908152600260205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610152565b610282610241366004611937565b60408051808201909152600080825260208201525060ff16600090815260056020908152604091829020825180840190935280548352600101549082015290565b6040516101529190611a81565b6102a261029d366004611a98565b610672565b60408051825167ffffffffffffffff1916815260208084015163ffffffff908116918301919091529282015190921690820152606001610152565b6102f06102eb366004611ac2565b610705565b60405167ffffffffffffffff199091168152602001610152565b61021b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c81565b61034461033f366004611a98565b6108a0565b6040805167ffffffffffffffff19909416845263ffffffff9283166020850152911690820152606001610152565b610385610380366004611904565b6108eb565b604080518351815260209384015193810193909352820152606001610152565b6101416103b3366004611937565b6005602052600090815260409020805460019091015482565b6101846103da366004611b0a565b6109b8565b6103f26103ed366004611b67565b610e0c565b6040516101529190611bdf565b61018461040d366004611904565b60016020526000908152604090205481565b61021b61042d366004611a68565b6002602052600090815260409020546001600160a01b031681565b6101a56104563660046119c2565b611026565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146104ac5760405162461bcd60e51b81526004016104a390611c29565b60405180910390fd5b60ff81166000908152600460205260409020541561052b5760405162461bcd60e51b815260206004820152603660248201527f424c5341706b52656769737472792e696e697469616c697a6551756f72756d3a6044820152752071756f72756d20616c72656164792065786973747360501b60648201526084016104a3565b60ff166000908152600460209081526040808320815160608101835284815263ffffffff4381168286019081528285018781528454600181018655948852959096209151919092018054955194518316600160e01b026001600160e01b0395909316600160c01b026001600160e01b03199096169190931c179390931791909116919091179055565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146105fc5760405162461bcd60e51b81526004016104a390611c29565b6000610607836108eb565b50905061061482826110cf565b7f73a2b7fb844724b971802ae9b15db094d4b7192df9d7350e14eb466b9b22eb4e83610655856001600160a01b031660009081526001602052604090205490565b8460405161066593929190611c9d565b60405180910390a1505050565b604080516060810182526000808252602080830182905282840182905260ff8616825260049052919091208054839081106106af576106af611d09565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b8204811694830194909452600160e01b90049092169082015290505b92915050565b60ff8316600090815260046020526040812080548291908490811061072c5761072c611d09565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b82048116948301859052600160e01b9091048116928201929092529250851610156107f35760405162461bcd60e51b815260206004820152603e60248201527f424c5341706b52656769737472792e5f76616c696461746541706b486173684160448201527f74426c6f636b4e756d6265723a20696e64657820746f6f20726563656e74000060648201526084016104a3565b604081015163ffffffff1615806108195750806040015163ffffffff168463ffffffff16105b6108975760405162461bcd60e51b815260206004820152604360248201527f424c5341706b52656769737472792e5f76616c696461746541706b486173684160448201527f74426c6f636b4e756d6265723a206e6f74206c61746573742061706b2075706460648201526261746560e81b608482015260a4016104a3565b51949350505050565b600460205281600052604060002081815481106108bc57600080fd5b600091825260209091200154604081901b925063ffffffff600160c01b820481169250600160e01b9091041683565b60408051808201909152600080825260208201526001600160a01b0382166000818152600360209081526040808320815180830183528154815260019182015481850152948452909152812054909190806109ae5760405162461bcd60e51b815260206004820152603e60248201527f424c5341706b52656769737472792e676574526567697374657265645075626b60448201527f65793a206f70657261746f72206973206e6f742072656769737465726564000060648201526084016104a3565b9094909350915050565b6000336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c1614610a025760405162461bcd60e51b81526004016104a390611c29565b6000610a30610a1936869003860160408701611d1f565b805160009081526020918201519091526040902090565b90507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5811415610ab8576040805162461bcd60e51b8152602060048201526024810191909152600080516020611f3683398151915260448201527f4b65793a2063616e6e6f74207265676973746572207a65726f207075626b657960648201526084016104a3565b6001600160a01b03851660009081526001602052604090205415610b425760405162461bcd60e51b81526020600482015260476024820152600080516020611f3683398151915260448201527f4b65793a206f70657261746f7220616c72656164792072656769737465726564606482015266207075626b657960c81b608482015260a4016104a3565b6000818152600260205260409020546001600160a01b031615610bc65760405162461bcd60e51b81526020600482015260426024820152600080516020611f3683398151915260448201527f4b65793a207075626c6963206b657920616c7265616479207265676973746572606482015261195960f21b608482015260a4016104a3565b604080516000917f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000191610c1f918835916020808b0135928b01359160608c01359160808d019160c08e01918d35918e8201359101611d51565b6040516020818303038152906040528051906020012060001c610c429190611d9c565b9050610cdc610c7b610c6683610c60368a90038a0160408b01611d1f565b9061131a565b610c7536899003890189611d1f565b906113b1565b610c83611445565b610cc5610cb685610c60604080518082018252600080825260209182015281518083019092526001825260029082015290565b610c75368a90038a018a611d1f565b610cd7368a90038a0160808b01611e0e565b611505565b610d775760405162461bcd60e51b815260206004820152606c6024820152600080516020611f3683398151915260448201527f4b65793a2065697468657220746865204731207369676e61747572652069732060648201527f77726f6e672c206f7220473120616e642047322070726976617465206b65792060848201526b0c8de40dcdee840dac2e8c6d60a31b60a482015260c4016104a3565b6001600160a01b03861660008181526003602090815260408083208982018035825560608b013560019283015590835281842087905586845260029092529182902080546001600160a01b0319168417905590517fe3fb6613af2e8930cf85d47fcf6db10192224a64c6cbe8023e0eee1ba382804191610dfb9160808a0190611e6b565b60405180910390a250949350505050565b606060008367ffffffffffffffff811115610e2957610e29611952565b604051908082528060200260200182016040528015610e52578160200160208202803683370190505b50905060005b8481101561101d576000868683818110610e7457610e74611d09565b919091013560f81c6000818152600460205260409020549092509050801580610ed7575060ff821660009081526004602052604081208054909190610ebb57610ebb611d09565b600091825260209091200154600160c01b900463ffffffff1686105b15610f645760405162461bcd60e51b815260206004820152605160248201527f424c5341706b52656769737472792e67657441706b496e64696365734174426c60448201527f6f636b4e756d6265723a20626c6f636b4e756d626572206973206265666f7265606482015270207468652066697273742075706461746560781b608482015260a4016104a3565b805b80156110075760ff831660009081526004602052604090208790610f8b600184611eb5565b81548110610f9b57610f9b611d09565b600091825260209091200154600160c01b900463ffffffff1611610ff557610fc4600182611eb5565b858581518110610fd657610fd6611d09565b602002602001019063ffffffff16908163ffffffff1681525050611007565b80610fff81611ecc565b915050610f66565b505050808061101590611ee3565b915050610e58565b50949350505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c161461106e5760405162461bcd60e51b81526004016104a390611c29565b6000611079836108eb565b50905061108e8261108983611772565b6110cf565b7ff843ecd53a563675e62107be1494fdde4a3d49aeedaf8d88c616d85346e3500e83610655856001600160a01b031660009081526001602052604090205490565b604080518082019091526000808252602082015260005b835181101561131457600084828151811061110357611103611d09565b0160209081015160f81c60008181526004909252604090912054909150806111935760405162461bcd60e51b815260206004820152603d60248201527f424c5341706b52656769737472792e5f70726f6365737351756f72756d41706b60448201527f5570646174653a2071756f72756d20646f6573206e6f7420657869737400000060648201526084016104a3565b60ff821660009081526005602090815260409182902082518084019093528054835260010154908201526111c790866113b1565b60ff831660008181526005602090815260408083208551808255868401805160019384015590855251835281842094845260049092528220939750919290916112109085611eb5565b8154811061122057611220611d09565b600091825260209091200180549091504363ffffffff908116600160c01b9092041614156112615780546001600160c01b031916604083901c1781556112fd565b805463ffffffff438116600160e01b8181026001600160e01b0394851617855560ff88166000908152600460209081526040808320815160608101835267ffffffffffffffff198b16815280840196875280830185815282546001810184559286529390942093519301805495519251871690940291909516600160c01b026001600160e01b0319949094169190941c17919091179092161790555b50505050808061130c90611ee3565b9150506110e6565b50505050565b6040805180820190915260008082526020820152611336611831565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa90508080156113695761136b565bfe5b50806113a95760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016104a3565b505092915050565b60408051808201909152600080825260208201526113cd61184f565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156113695750806113a95760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016104a3565b61144d61186d565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082018252858152602080820185905282518084019093528583528201839052600091611534611892565b60005b60028110156116f957600061154d826006611efe565b905084826002811061156157611561611d09565b60200201515183611573836000611f1d565b600c811061158357611583611d09565b602002015284826002811061159a5761159a611d09565b602002015160200151838260016115b19190611f1d565b600c81106115c1576115c1611d09565b60200201528382600281106115d8576115d8611d09565b60200201515151836115eb836002611f1d565b600c81106115fb576115fb611d09565b602002015283826002811061161257611612611d09565b602002015151600160200201518361162b836003611f1d565b600c811061163b5761163b611d09565b602002015283826002811061165257611652611d09565b60200201516020015160006002811061166d5761166d611d09565b60200201518361167e836004611f1d565b600c811061168e5761168e611d09565b60200201528382600281106116a5576116a5611d09565b6020020151602001516001600281106116c0576116c0611d09565b6020020151836116d1836005611f1d565b600c81106116e1576116e1611d09565b602002015250806116f181611ee3565b915050611537565b506117026118b1565b60006020826101808560086107d05a03fa90508080156113695750806117625760405162461bcd60e51b81526020600482015260156024820152741c185a5c9a5b99cb5bdc18dbd9194b59985a5b1959605a1b60448201526064016104a3565b5051151598975050505050505050565b6040805180820190915260008082526020820152815115801561179757506020820151155b156117b5575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516117fa9190611d9c565b611824907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47611eb5565b905292915050565b919050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806118806118cf565b815260200161188d6118cf565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356001600160a01b038116811461182c57600080fd5b60006020828403121561191657600080fd5b61191f826118ed565b9392505050565b803560ff8116811461182c57600080fd5b60006020828403121561194957600080fd5b61191f82611926565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561198b5761198b611952565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156119ba576119ba611952565b604052919050565b600080604083850312156119d557600080fd5b6119de836118ed565b915060208084013567ffffffffffffffff808211156119fc57600080fd5b818601915086601f830112611a1057600080fd5b813581811115611a2257611a22611952565b611a34601f8201601f19168501611991565b91508082528784828501011115611a4a57600080fd5b80848401858401376000848284010152508093505050509250929050565b600060208284031215611a7a57600080fd5b5035919050565b8151815260208083015190820152604081016106ff565b60008060408385031215611aab57600080fd5b611ab483611926565b946020939093013593505050565b600080600060608486031215611ad757600080fd5b611ae084611926565b9250602084013563ffffffff81168114611af957600080fd5b929592945050506040919091013590565b6000806000838503610160811215611b2157600080fd5b611b2a856118ed565b9350610100601f1982011215611b3f57600080fd5b602085019250604061011f1982011215611b5857600080fd5b50610120840190509250925092565b600080600060408486031215611b7c57600080fd5b833567ffffffffffffffff80821115611b9457600080fd5b818601915086601f830112611ba857600080fd5b813581811115611bb757600080fd5b876020828501011115611bc957600080fd5b6020928301989097509590910135949350505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1d57835163ffffffff1683529284019291840191600101611bfb565b50909695505050505050565b6020808252604e908201527f424c5341706b52656769737472792e6f6e6c795265676973747279436f6f726460408201527f696e61746f723a2063616c6c6572206973206e6f74207468652072656769737460608201526d393c9031b7b7b93234b730ba37b960911b608082015260a00190565b60018060a01b038416815260006020848184015260606040840152835180606085015260005b81811015611cdf57858101830151858201608001528201611cc3565b81811115611cf1576000608083870101525b50601f01601f19169290920160800195945050505050565b634e487b7160e01b600052603260045260246000fd5b600060408284031215611d3157600080fd5b611d39611968565b82358152602083013560208201528091505092915050565b8881528760208201528660408201528560608201526040856080830137600060c082016000815260408682375050610100810192909252610120820152610140019695505050505050565b600082611db957634e487b7160e01b600052601260045260246000fd5b500690565b600082601f830112611dcf57600080fd5b611dd7611968565b806040840185811115611de957600080fd5b845b81811015611e03578035845260209384019301611deb565b509095945050505050565b600060808284031215611e2057600080fd5b6040516040810181811067ffffffffffffffff82111715611e4357611e43611952565b604052611e508484611dbe565b8152611e5f8460408501611dbe565b60208201529392505050565b823581526020808401359082015260c081016040838184013760808201600081526040808501823750600081529392505050565b634e487b7160e01b600052601160045260246000fd5b600082821015611ec757611ec7611e9f565b500390565b600081611edb57611edb611e9f565b506000190190565b6000600019821415611ef757611ef7611e9f565b5060010190565b6000816000190483118215151615611f1857611f18611e9f565b500290565b60008219821115611f3057611f30611e9f565b50019056fe424c5341706b52656769737472792e7265676973746572424c535075626c6963a2646970667358221220ea4e5768540668ded6677b9d2f7e8507f41512dd0da89412a3d94f77bc08c43664736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x90f79bf6eb2c4f870365e785982e1f101e93b906":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x95401dc811bb5740090279ba06cfa8fcf6113778":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0xeb5be412f275a18f6e4d622aee4ff40b21467c926224771b782d4c095d1444b":"0x7","0x17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec":"0x1","0x295841a49a1089f4b560f91cfbb0133326654dcbb1041861fc5dde96c724a22f":"0xc5a5c42992decbae36851359345fe25997f5c42d","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x99bba657f2bbc93c02d617f8ba121cb8fc104acf","0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff":"0x1","0xa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49":"0x1","0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5":"0x1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x9e545e3c0baab3e08cdfd552c960a1050f373042","0xcfb339bd1c51c488f6134f4ac63d1594afad827b3401c3fc51ed1da74a8ca14e":"0xde0b6b3a7640000c5a5c42992decbae36851359345fe25997f5c42d"}},"0x959922be3caee4b8cd9a407cc3ac1c251c2007b1":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80637cf72bba1161010f578063d98128c0116100a2578063e921d4fa11610071578063e921d4fa146103c6578063f2fde38b1461044c578063f73b7519146102a9578063fabc1cbc1461045f57600080fd5b8063d98128c014610430578063da16e29b14610322578063df5cf723146102ba578063e58398361461043e57600080fd5b80638da5cb5b116100de5780638da5cb5b146103b5578063a49db732146103c6578063c747075b146103da578063d7b7fa13146103ee57600080fd5b80637cf72bba146103465780638105e04314610354578063855fcc4a1461036b578063886f1195146103a257600080fd5b806339b70e38116101875780636f0c2f74116101565780636f0c2f7414610322578063715018a614610330578063723e59c7146103385780637259a45c1461024257600080fd5b806339b70e38146102ba578063595c6a67146102d55780635ac86ab7146102dd5780635c975abb1461031057600080fd5b80631794bb3c116101c35780631794bb3c1461022f5780631874e5ae14610242578063282670fc1461027257806338c8ee64146102a957600080fd5b80630ffabbce146101f557806310d67a2f14610209578063136439dd1461021c578063175d3205146101f5575b600080fd5b610207610203366004610b25565b5050565b005b610207610217366004610b5a565b610472565b61020761022a366004610b7e565b61052b565b61020761023d366004610b97565b505050565b610258610250366004610b25565b600092915050565b60405163ffffffff90911681526020015b60405180910390f35b610285610280366004610bd8565b61066a565b60408051825163ffffffff9081168252602093840151169281019290925201610269565b6102076102b7366004610b5a565b50565b60005b6040516001600160a01b039091168152602001610269565b610207610685565b6103006102eb366004610c04565b606654600160ff9092169190911b9081161490565b6040519015158152602001610269565b6066545b604051908152602001610269565b610258610250366004610c27565b61020761074c565b610314610250366004610b25565b610207610203366004610c60565b610300610362366004610cd5565b60009392505050565b610385610379366004610c27565b60008060009250925092565b604080519315158452602084019290925290820152606001610269565b6065546102bd906001600160a01b031681565b6033546001600160a01b03166102bd565b6103146103d4366004610b5a565b50600090565b6102076103e8366004610d13565b50505050565b6104016103fc366004610c27565b610760565b60408051825163ffffffff90811682526020808501518216908301529282015190921690820152606001610269565b610300610250366004610c27565b6103006103d4366004610b5a565b61020761045a366004610b5a565b610782565b61020761046d366004610b7e565b6107f8565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e99190610d60565b6001600160a01b0316336001600160a01b0316146105225760405162461bcd60e51b815260040161051990610d7d565b60405180910390fd5b6102b781610954565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105979190610dc7565b6105b35760405162461bcd60e51b815260040161051990610de9565b6066548181161461062c5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610519565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60408051808201909152600080825260208201525b92915050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f19190610dc7565b61070d5760405162461bcd60e51b815260040161051990610de9565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610754610a4b565b61075e6000610aa5565b565b604080516060810182526000808252602082018190529181019190915261067f565b61078a610a4b565b6001600160a01b0381166107ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610519565b6102b781610aa5565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561084b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086f9190610d60565b6001600160a01b0316336001600160a01b03161461089f5760405162461bcd60e51b815260040161051990610d7d565b60665419811960665419161461091d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610519565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161065f565b6001600160a01b0381166109e25760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610519565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b0316331461075e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610519565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811681146102b757600080fd5b803563ffffffff81168114610b2057600080fd5b919050565b60008060408385031215610b3857600080fd5b8235610b4381610af7565b9150610b5160208401610b0c565b90509250929050565b600060208284031215610b6c57600080fd5b8135610b7781610af7565b9392505050565b600060208284031215610b9057600080fd5b5035919050565b600080600060608486031215610bac57600080fd5b8335610bb781610af7565b92506020840135610bc781610af7565b929592945050506040919091013590565b60008060408385031215610beb57600080fd5b8235610bf681610af7565b946020939093013593505050565b600060208284031215610c1657600080fd5b813560ff81168114610b7757600080fd5b60008060408385031215610c3a57600080fd5b8235610c4581610af7565b91506020830135610c5581610af7565b809150509250929050565b60008060208385031215610c7357600080fd5b823567ffffffffffffffff80821115610c8b57600080fd5b818501915085601f830112610c9f57600080fd5b813581811115610cae57600080fd5b8660208260051b8501011115610cc357600080fd5b60209290920196919550909350505050565b600080600060608486031215610cea57600080fd5b8335610cf581610af7565b9250610d0360208501610b0c565b9150604084013590509250925092565b60008060008060808587031215610d2957600080fd5b8435610d3481610af7565b9350610d4260208601610b0c565b9250610d5060408601610b0c565b9396929550929360600135925050565b600060208284031215610d7257600080fd5b8151610b7781610af7565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215610dd957600080fd5b81518015158114610b7757600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b60608201526080019056fea2646970667358221220c164d850158d1f90a32bbe366e1545bff2724ee97114a57f639cabb55989579b64736f6c634300080c0033","storage":{}},"0x976ea74026e726554db657fa54763abd0c3a0aa9":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x998abeb3e57409262ae5b751f60747921b33613e":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec":"0x1","0x295841a49a1089f4b560f91cfbb0133326654dcbb1041861fc5dde96c724a22f":"0x7000000000000000000000000000000000000000000000000","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x8f86403a4de0bb5791fa46b8e795c547942fe4cf","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x9e545e3c0baab3e08cdfd552c960a1050f373042"}},"0x99bba657f2bbc93c02d617f8ba121cb8fc104acf":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80639f3ccf651161010f578063c8294c56116100a2578063f2be94ae11610071578063f2be94ae1461054b578063f851e1981461055e578063fa28c62714610571578063ff694a771461058457600080fd5b8063c8294c56146104d6578063d5eccc05146104e9578063dd9846b9146104fc578063df5cf7231461052457600080fd5b8063bc9a40c3116100de578063bc9a40c314610474578063bd29b8cd14610487578063c46778a51461049a578063c601527d146104c357600080fd5b80639f3ccf65146103ee578063ac6bfb0314610401578063adc804da14610421578063b6904b781461046157600080fd5b80634bd26e091161018757806366acfefe1161015657806366acfefe1461034a5780636d14a987146103755780637c172347146103b457806381c07502146103ce57600080fd5b80634bd26e09146102e55780635401ed27146103155780635e5a6775146103285780635f1f2d771461033757600080fd5b806320b66298116101c357806320b662981461026c57806325504777146102815780632cd95940146102a25780633ca5a5f5146102c257600080fd5b80630491b41c146101ea57806308732461146102205780631f9b74e014610241575b600080fd5b61020d6101f8366004612c27565b60ff1660009081526001602052604090205490565b6040519081526020015b60405180910390f35b61023361022e366004612c42565b610597565b604051610217929190612c6c565b61025461024f366004612ca6565b6105e0565b6040516001600160601b039091168152602001610217565b61027f61027a366004612d21565b610630565b005b61029461028f366004612de2565b610961565b604051610217929190612e81565b6102b56102b0366004612ea6565b610c2c565b6040516102179190612ed2565b61020d6102d0366004612c27565b60ff1660009081526003602052604090205490565b61020d6102f3366004612ea6565b600091825260026020908152604080842060ff93909316845291905290205490565b610254610323366004612ea6565b610ccb565b61020d670de0b6b3a764000081565b61027f610345366004612fdb565b610ce4565b61035d610358366004612de2565b611104565b6040516001600160c01b039091168152602001610217565b61039c7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c81565b6040516001600160a01b039091168152602001610217565b6103bc602081565b60405160ff9091168152602001610217565b6103e16103dc366004613097565b61125e565b60405161021791906130e9565b61039c6103fc366004612c42565b611528565b61041461040f366004613127565b611560565b604051610217919061315a565b61043461042f366004612c42565b6115f8565b6040805182516001600160a01b031681526020928301516001600160601b03169281019290925201610217565b61041461046f366004612c42565b611672565b61027f6104823660046131a6565b611701565b61027f6104953660046131d0565b6117fa565b6102546104a8366004612c27565b6000602081905290815260409020546001600160601b031681565b61027f6104d136600461329c565b611927565b6102546104e43660046132e9565b611a1b565b6102546104f7366004612c27565b611a99565b61050f61050a366004613325565b611aec565b60405163ffffffff9091168152602001610217565b61039c7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b610254610559366004613361565b611b01565b61041461056c366004612ea6565b611b96565b61025461057f366004613325565b611c7b565b61027f6105923660046133a3565b611cdc565b600360205281600052604060002081815481106105b357600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b90046001600160601b0316905082565b60ff8216600090815260016020526040812054839061061a5760405162461bcd60e51b815260040161061190613400565b60405180910390fd5b60006106268585611e47565b5095945050505050565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561068e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b29190613451565b6001600160a01b0316336001600160a01b0316146106e25760405162461bcd60e51b81526004016106119061346e565b846106fe8160ff16600090815260016020526040902054151590565b61071a5760405162461bcd60e51b815260040161061190613400565b8380610790576040805162461bcd60e51b81526020600482015260248101919091527f5374616b6552656769737472792e6d6f6469667953747261746567795061726160448201527f6d733a206e6f20737472617465677920696e64696365732070726f76696465646064820152608401610611565b8281146108055760405162461bcd60e51b815260206004820152603960248201527f5374616b6552656769737472792e6d6f6469667953747261746567795061726160448201527f6d733a20696e707574206c656e677468206d69736d61746368000000000000006064820152608401610611565b60ff87166000908152600360205260408120905b8281101561095657858582818110610833576108336134ea565b90506020020160208101906108489190613500565b8289898481811061085b5761085b6134ea565b9050602002013581548110610872576108726134ea565b9060005260206000200160000160146101000a8154816001600160601b0302191690836001600160601b031602179055508860ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a75838a8a858181106108db576108db6134ea565b90506020020135815481106108f2576108f26134ea565b6000918252602090912001546001600160a01b0316888885818110610919576109196134ea565b905060200201602081019061092e9190613500565b60405161093c929190612c6c565b60405180910390a28061094e81613531565b915050610819565b505050505050505050565b606080336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146109ac5760405162461bcd60e51b81526004016106119061354c565b6000836001600160401b038111156109c6576109c6612f4a565b6040519080825280602002602001820160405280156109ef578160200160208202803683370190505b5090506000846001600160401b03811115610a0c57610a0c612f4a565b604051908082528060200260200182016040528015610a35578160200160208202803683370190505b50905060005b85811015610c1e576000878783818110610a5757610a576134ea565b919091013560f81c60008181526001602052604090205490925015159050610adf5760405162461bcd60e51b815260206004820152603560248201527f5374616b6552656769737472792e72656769737465724f70657261746f723a206044820152741c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd605a1b6064820152608401610611565b600080610aec838d611e47565b9150915080610b895760405162461bcd60e51b815260206004820152605b60248201527f5374616b6552656769737472792e72656769737465724f70657261746f723a2060448201527f4f70657261746f7220646f6573206e6f74206d656574206d696e696d756d207360648201527f74616b6520726571756972656d656e7420666f722071756f72756d0000000000608482015260a401610611565b6000610b968c8585612045565b905082878681518110610bab57610bab6134ea565b60200260200101906001600160601b031690816001600160601b031681525050610bd584826122c5565b868681518110610be757610be76134ea565b60200260200101906001600160601b031690816001600160601b031681525050505050508080610c1690613531565b915050610a3b565b509097909650945050505050565b600082815260026020908152604080832060ff851684528252808320805482518185028101850190935280835260609492939192909184015b82821015610cbe576000848152602090819020604080516060810182529185015463ffffffff8082168452600160201b82041683850152600160401b90046001600160601b031690820152825260019092019101610c65565b5050505090505b92915050565b600080610cd88484611b96565b60400151949350505050565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d669190613451565b6001600160a01b0316336001600160a01b031614610d965760405162461bcd60e51b81526004016106119061346e565b81610db28160ff16600090815260016020526040902054151590565b610dce5760405162461bcd60e51b815260040161061190613400565b815180610e435760405162461bcd60e51b815260206004820152603d60248201527f5374616b6552656769737472792e72656d6f7665537472617465676965733a2060448201527f6e6f20696e646963657320746f2072656d6f76652070726f76696465640000006064820152608401610611565b60ff841660009081526003602090815260408083206004909252822090915b838110156110fb578660ff167f31fa2e2cd280c9375e13ffcf3d81e2378100186e4058f8d3ddb690b82dcd31f784888481518110610ea257610ea26134ea565b602002602001015181548110610eba57610eba6134ea565b600091825260209182902001546040516001600160a01b0390911681520160405180910390a28660ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a7584888481518110610f1857610f186134ea565b602002602001015181548110610f3057610f306134ea565b600091825260208083209190910154604080516001600160a01b039092168252918101929092520160405180910390a282548390610f70906001906135be565b81548110610f8057610f806134ea565b9060005260206000200183878381518110610f9d57610f9d6134ea565b602002602001015181548110610fb557610fb56134ea565b600091825260209091208254910180546001600160a01b0319166001600160a01b03909216918217815591546001600160601b03600160a01b9182900416021790558254839080611008576110086135d5565b60008281526020812082016000199081019190915501905581548290611030906001906135be565b81548110611040576110406134ea565b9060005260206000200160009054906101000a90046001600160a01b031682878381518110611071576110716134ea565b602002602001015181548110611089576110896134ea565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550818054806110c7576110c76135d5565b600082815260209020810160001990810180546001600160a01b0319169055019055806110f381613531565b915050610e62565b50505050505050565b6000336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c161461114e5760405162461bcd60e51b81526004016106119061354c565b6000805b8381101561062657600085858381811061116e5761116e6134ea565b919091013560f81c600081815260016020526040902054909250151590506111fe5760405162461bcd60e51b815260206004820152603860248201527f5374616b6552656769737472792e7570646174654f70657261746f725374616b60448201527f653a2071756f72756d20646f6573206e6f7420657869737400000000000000006064820152608401610611565b60008061120b838b611e47565b915091508061122d5760009150600160ff84161b6001600160c01b0386161794505b600061123a8a8585612045565b905061124684826122c5565b5050505050808061125690613531565b915050611152565b60606000826001600160401b0381111561127a5761127a612f4a565b6040519080825280602002602001820160405280156112a3578160200160208202803683370190505b50905060005b8381101561151d5760008585838181106112c5576112c56134ea565b919091013560f81c600081815260016020526040902054909250151590506113645760405162461bcd60e51b815260206004820152604660248201527f5374616b6552656769737472792e676574546f74616c5374616b65496e64696360448201527f65734174426c6f636b4e756d6265723a2071756f72756d20646f6573206e6f7460648201526508195e1a5cdd60d21b608482015260a401610611565b60ff81166000908152600160205260408120805463ffffffff8a16929061138d5761138d6134ea565b60009182526020909120015463ffffffff1611156114395760405162461bcd60e51b815260206004820152605b60248201527f5374616b6552656769737472792e676574546f74616c5374616b65496e64696360448201527f65734174426c6f636b4e756d6265723a2071756f72756d20686173206e6f207360648201527f74616b6520686973746f727920617420626c6f636b4e756d6265720000000000608482015260a401610611565b60ff8116600090815260016020526040812054905b818110156115075760ff8316600090815260016020819052604090912063ffffffff8b169161147d84866135be565b61148791906135be565b81548110611497576114976134ea565b60009182526020909120015463ffffffff16116114f55760016114ba82846135be565b6114c491906135be565b8585815181106114d6576114d66134ea565b602002602001019063ffffffff16908163ffffffff1681525050611507565b806114ff81613531565b91505061144e565b505050808061151590613531565b9150506112a9565b5090505b9392505050565b6004602052816000526040600020818154811061154457600080fd5b6000918252602090912001546001600160a01b03169150829050565b60408051606081018252600080825260208083018290528284018290528582526002815283822060ff881683529052919091208054839081106115a5576115a56134ea565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b031691810191909152949350505050565b604080518082019091526000808252602082015260ff83166000908152600360205260409020805483908110611630576116306134ea565b6000918252602091829020604080518082019091529101546001600160a01b0381168252600160a01b90046001600160601b0316918101919091529392505050565b604080516060810182526000808252602080830182905282840182905260ff8616825260019052919091208054839081106116af576116af6134ea565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b0316918101919091529392505050565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561175f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117839190613451565b6001600160a01b0316336001600160a01b0316146117b35760405162461bcd60e51b81526004016106119061346e565b816117cf8160ff16600090815260016020526040902054151590565b6117eb5760405162461bcd60e51b815260040161061190613400565b6117f5838361243f565b505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146118425760405162461bcd60e51b81526004016106119061354c565b60005b81811015611921576000838383818110611861576118616134ea565b919091013560f81c600081815260016020526040902054909250151590506118f15760405162461bcd60e51b815260206004820152603760248201527f5374616b6552656769737472792e646572656769737465724f70657261746f7260448201527f3a2071756f72756d20646f6573206e6f742065786973740000000000000000006064820152608401610611565b60006118ff86836000612045565b905061190b82826122c5565b505050808061191990613531565b915050611845565b50505050565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611985573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a99190613451565b6001600160a01b0316336001600160a01b0316146119d95760405162461bcd60e51b81526004016106119061346e565b816119f58160ff16600090815260016020526040902054151590565b611a115760405162461bcd60e51b815260040161061190613400565b6117f583836124a8565b60ff83166000908152600160205260408120805482919084908110611a4257611a426134ea565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529050610cd881856128eb565b60ff81166000908152600160208190526040822080549091611aba916135be565b81548110611aca57611aca6134ea565b600091825260209091200154600160401b90046001600160601b031692915050565b6000611af9848484612a65565b949350505050565b600082815260026020908152604080832060ff881684529091528120805482919084908110611b3257611b326134ea565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529050611b8981866128eb565b6040015195945050505050565b6040805160608082018352600080835260208084018290528385018290528682526002815284822060ff87168352815284822054855193840186528284529083018290529382015290919081611bef579150610cc59050565b600085815260026020908152604080832060ff881684529091529020611c166001846135be565b81548110611c2657611c266134ea565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529250610cc5915050565b600083815260026020908152604080832060ff861684529091528120611ca2858585612a65565b63ffffffff1681548110611cb857611cb86134ea565b600091825260209091200154600160401b90046001600160601b0316949350505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c1614611d245760405162461bcd60e51b81526004016106119061354c565b60ff831660009081526001602052604090205415611da25760405162461bcd60e51b815260206004820152603560248201527f5374616b6552656769737472792e696e697469616c697a6551756f72756d3a2060448201527471756f72756d20616c72656164792065786973747360581b6064820152608401610611565b611dac83826124a8565b611db6838361243f565b505060ff166000908152600160208181526040808420815160608101835263ffffffff438116825281850187815293820187815283549687018455928752939095209451949093018054915193516001600160601b0316600160401b02600160401b600160a01b0319948416600160201b0267ffffffffffffffff1990931695909316949094171791909116179055565b600080600080611e668660ff1660009081526003602052604090205490565b604080518082019091526000808252602082015290915060ff871660009081526004602081905260408083209051639004134760e01b81526001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91692639004134792611edb928c92016135eb565b600060405180830381865afa158015611ef8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f20919081019061364a565b905060005b838110156120115760ff89166000908152600360205260409020805482908110611f5157611f516134ea565b60009182526020808320604080518082019091529201546001600160a01b0381168352600160a01b90046001600160601b0316908201528351909450839083908110611f9f57611f9f6134ea565b60200260200101511115611fff57670de0b6b3a764000083602001516001600160601b0316838381518110611fd657611fd66134ea565b6020026020010151611fe891906136da565b611ff291906136f9565b611ffc908661371b565b94505b8061200981613531565b915050611f25565b50505060ff8616600090815260208190526040902054919350506001600160601b03908116908316101590505b9250929050565b600083815260026020908152604080832060ff8616845290915281205481908061210957600086815260026020908152604080832060ff891684528252808320815160608101835263ffffffff43811682528185018681526001600160601b03808c16958401958652845460018101865594885295909620915191909201805495519351909416600160401b02600160401b600160a01b0319938316600160201b0267ffffffffffffffff199096169190921617939093171691909117905561226b565b600086815260026020908152604080832060ff8916845290915281206121306001846135be565b81548110612140576121406134ea565b600091825260209091200180546001600160601b03600160401b9091048116945090915085168314156121795760009350505050611521565b80544363ffffffff908116911614156121b3578054600160401b600160a01b031916600160401b6001600160601b03871602178155612269565b805467ffffffff000000001916600160201b4363ffffffff90811682810293909317845560008a815260026020908152604080832060ff8d168452825280832081516060810183529687528683018481526001600160601b038d81169389019384528254600181018455928652939094209651960180549351915196851667ffffffffffffffff1990941693909317931690930291909117600160401b600160a01b031916600160401b93909216929092021790555b505b6040805160ff871681526001600160601b038616602082015287917f2f527d527e95d8fe40aec55377743bb779087da3f6d0d08f12e36444da62327d910160405180910390a26122bb8285612bcb565b9695505050505050565b60ff8216600090815260016020819052604082208054918391906122e990846135be565b815481106122f9576122f96134ea565b90600052602060002001905083600014156123285754600160401b90046001600160601b03169150610cc59050565b805460009061234790600160401b90046001600160601b031686612be3565b82549091504363ffffffff90811691161415612384578154600160401b600160a01b031916600160401b6001600160601b03831602178255612436565b815463ffffffff438116600160201b81810267ffffffff000000001990941693909317855560ff8916600090815260016020818152604080842081516060810183529586528583018581526001600160601b03808b169388019384528254958601835591865292909420945194909201805491519251909316600160401b02600160401b600160a01b031992861690960267ffffffffffffffff19909116939094169290921792909217169190911790555b95945050505050565b60ff82166000818152602081815260409182902080546bffffffffffffffffffffffff19166001600160601b03861690811790915591519182527f26eecff2b70b0a71104ff4d940ba7162d23a95c248771fc487a7be17a596b3cf910160405180910390a25050565b600081511161250d5760405162461bcd60e51b815260206004820152603860248201526000805160206137fa83398151915260448201527f3a206e6f20737472617465676965732070726f766964656400000000000000006064820152608401610611565b805160ff8316600090815260036020908152604090912054906125308383613746565b11156125a05760405162461bcd60e51b815260206004820152604560248201526000805160206137fa83398151915260448201527f3a20657863656564204d41585f5745494748494e475f46554e4354494f4e5f4c60648201526408a9c8ea8960db1b608482015260a401610611565b60005b828110156128e45760005b6125b88284613746565b811015612699578482815181106125d1576125d16134ea565b6020026020010151600001516001600160a01b0316600360008860ff1660ff1681526020019081526020016000208281548110612610576126106134ea565b6000918252602090912001546001600160a01b031614156126875760405162461bcd60e51b815260206004820152603d60248201526000805160206137fa83398151915260448201527f3a2063616e6e6f74206164642073616d652073747261746567792032780000006064820152608401610611565b8061269181613531565b9150506125ae565b5060008482815181106126ae576126ae6134ea565b6020026020010151602001516001600160601b0316116127335760405162461bcd60e51b815260206004820152604660248201526000805160206137fa83398151915260448201527f3a2063616e6e6f74206164642073747261746567792077697468207a65726f206064820152651dd95a59da1d60d21b608482015260a401610611565b60ff851660009081526003602052604090208451859083908110612759576127596134ea565b602090810291909101810151825460018101845560009384528284208251928401516001600160601b0316600160a01b026001600160a01b039093169290921791015560ff87168252600490526040902084518590839081106127be576127be6134ea565b6020908102919091018101515182546001810184556000938452919092200180546001600160a01b0319166001600160a01b03909216919091179055835160ff8616907f10565e56cacbf32eca267945f054fec02e59750032d113d3302182ad967f540490869084908110612835576128356134ea565b602090810291909101810151516040516001600160a01b0390911681520160405180910390a28460ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a75858381518110612892576128926134ea565b6020026020010151600001518684815181106128b0576128b06134ea565b6020026020010151602001516040516128ca929190612c6c565b60405180910390a2806128dc81613531565b9150506125a3565b5050505050565b816000015163ffffffff168163ffffffff1610156129905760405162461bcd60e51b815260206004820152605660248201527f5374616b6552656769737472792e5f76616c69646174655374616b655570646160448201527f74654174426c6f636b4e756d6265723a207374616b6555706461746520697320606482015275333937b69030b33a32b910313637b1b5a73ab6b132b960511b608482015260a401610611565b602082015163ffffffff1615806129b65750816020015163ffffffff168163ffffffff16105b612a615760405162461bcd60e51b815260206004820152606a60248201527f5374616b6552656769737472792e5f76616c69646174655374616b655570646160448201527f74654174426c6f636b4e756d6265723a2074686572652069732061206e65776560648201527f72207374616b6555706461746520617661696c61626c65206265666f726520626084820152693637b1b5a73ab6b132b960b11b60a482015260c401610611565b5050565b600083815260026020908152604080832060ff86168452909152812054805b8015612b0657600086815260026020908152604080832060ff89168452909152902063ffffffff851690612ab96001846135be565b81548110612ac957612ac96134ea565b60009182526020909120015463ffffffff1611612af457612aeb6001826135be565b92505050611521565b80612afe8161375e565b915050612a84565b5060405162461bcd60e51b815260206004820152608160248201527f5374616b6552656769737472792e5f6765745374616b65557064617465496e6460448201527f6578466f724f70657261746f724174426c6f636b4e756d6265723a206e6f207360648201527f74616b652075706461746520666f756e6420666f72206f70657261746f72496460848201527f20616e642071756f72756d4e756d62657220617420626c6f636b206e756d626560a4820152603960f91b60c482015260e401610611565b60006115216001600160601b03808516908416613775565b600080821215612c0757612bf6826137b4565b612c0090846137d1565b9050610cc5565b612c00828461371b565b803560ff81168114612c2257600080fd5b919050565b600060208284031215612c3957600080fd5b61152182612c11565b60008060408385031215612c5557600080fd5b612c5e83612c11565b946020939093013593505050565b6001600160a01b039290921682526001600160601b0316602082015260400190565b6001600160a01b0381168114612ca357600080fd5b50565b60008060408385031215612cb957600080fd5b612cc283612c11565b91506020830135612cd281612c8e565b809150509250929050565b60008083601f840112612cef57600080fd5b5081356001600160401b03811115612d0657600080fd5b6020830191508360208260051b850101111561203e57600080fd5b600080600080600060608688031215612d3957600080fd5b612d4286612c11565b945060208601356001600160401b0380821115612d5e57600080fd5b612d6a89838a01612cdd565b90965094506040880135915080821115612d8357600080fd5b50612d9088828901612cdd565b969995985093965092949392505050565b60008083601f840112612db357600080fd5b5081356001600160401b03811115612dca57600080fd5b60208301915083602082850101111561203e57600080fd5b60008060008060608587031215612df857600080fd5b8435612e0381612c8e565b93506020850135925060408501356001600160401b03811115612e2557600080fd5b612e3187828801612da1565b95989497509550505050565b600081518084526020808501945080840160005b83811015612e765781516001600160601b031687529582019590820190600101612e51565b509495945050505050565b604081526000612e946040830185612e3d565b82810360208401526124368185612e3d565b60008060408385031215612eb957600080fd5b82359150612ec960208401612c11565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015612f3e57612f2b83855163ffffffff808251168352806020830151166020840152506001600160601b0360408201511660408301525050565b9284019260609290920191600101612eee565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612f8257612f82612f4a565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612fb057612fb0612f4a565b604052919050565b60006001600160401b03821115612fd157612fd1612f4a565b5060051b60200190565b60008060408385031215612fee57600080fd5b612ff783612c11565b91506020808401356001600160401b0381111561301357600080fd5b8401601f8101861361302457600080fd5b803561303761303282612fb8565b612f88565b81815260059190911b8201830190838101908883111561305657600080fd5b928401925b828410156130745783358252928401929084019061305b565b80955050505050509250929050565b803563ffffffff81168114612c2257600080fd5b6000806000604084860312156130ac57600080fd5b6130b584613083565b925060208401356001600160401b038111156130d057600080fd5b6130dc86828701612da1565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b81811015612f3e57835163ffffffff1683529284019291840191600101613105565b60008060006060848603121561313c57600080fd5b61314584612c11565b95602085013595506040909401359392505050565b815163ffffffff9081168252602080840151909116908201526040808301516001600160601b03169082015260608101610cc5565b80356001600160601b0381168114612c2257600080fd5b600080604083850312156131b957600080fd5b6131c283612c11565b9150612ec96020840161318f565b6000806000604084860312156131e557600080fd5b8335925060208401356001600160401b038111156130d057600080fd5b600082601f83011261321357600080fd5b8135602061322361303283612fb8565b82815260069290921b8401810191818101908684111561324257600080fd5b8286015b84811015613291576040818903121561325f5760008081fd5b613267612f60565b813561327281612c8e565b815261327f82860161318f565b81860152835291830191604001613246565b509695505050505050565b600080604083850312156132af57600080fd5b6132b883612c11565b915060208301356001600160401b038111156132d357600080fd5b6132df85828601613202565b9150509250929050565b6000806000606084860312156132fe57600080fd5b61330784612c11565b925061331560208501613083565b9150604084013590509250925092565b60008060006060848603121561333a57600080fd5b8335925061334a60208501612c11565b915061335860408501613083565b90509250925092565b6000806000806080858703121561337757600080fd5b61338085612c11565b935061338e60208601613083565b93969395505050506040820135916060013590565b6000806000606084860312156133b857600080fd5b6133c184612c11565b92506133cf6020850161318f565b915060408401356001600160401b038111156133ea57600080fd5b6133f686828701613202565b9150509250925092565b60208082526031908201527f5374616b6552656769737472792e71756f72756d4578697374733a2071756f726040820152701d5b48191bd95cc81b9bdd08195e1a5cdd607a1b606082015260800190565b60006020828403121561346357600080fd5b815161152181612c8e565b60208082526056908201527f5374616b6552656769737472792e6f6e6c79436f6f7264696e61746f724f776e60408201527f65723a2063616c6c6572206973206e6f7420746865206f776e6572206f6620746060820152753432903932b3b4b9ba393ca1b7b7b93234b730ba37b960511b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561351257600080fd5b6115218261318f565b634e487b7160e01b600052601160045260246000fd5b60006000198214156135455761354561351b565b5060010190565b6020808252604c908201527f5374616b6552656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865205265676973747260608201526b3ca1b7b7b93234b730ba37b960a11b608082015260a00190565b6000828210156135d0576135d061351b565b500390565b634e487b7160e01b600052603160045260246000fd5b60006040820160018060a01b03808616845260206040818601528286548085526060870191508760005282600020945060005b8181101561363c57855485168352600195860195928401920161361e565b509098975050505050505050565b6000602080838503121561365d57600080fd5b82516001600160401b0381111561367357600080fd5b8301601f8101851361368457600080fd5b805161369261303282612fb8565b81815260059190911b820183019083810190878311156136b157600080fd5b928401925b828410156136cf578351825292840192908401906136b6565b979650505050505050565b60008160001904831182151516156136f4576136f461351b565b500290565b60008261371657634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160601b0380831681851680830382111561373d5761373d61351b565b01949350505050565b600082198211156137595761375961351b565b500190565b60008161376d5761376d61351b565b506000190190565b60008083128015600160ff1b8501841216156137935761379361351b565b6001600160ff1b03840183138116156137ae576137ae61351b565b50500390565b6000600160ff1b8214156137ca576137ca61351b565b5060000390565b60006001600160601b03838116908316818110156137f1576137f161351b565b03939250505056fe5374616b6552656769737472792e5f6164645374726174656779506172616d73a264697066735822122013e43aa0d17be9068c90a8cc3e1e30a67f8fb3af90dd77b77812e62b135f0e1364736f6c634300080c0033","storage":{}},"0x9a676e781a523b5d0c0e43731313a708cb607508":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101425760003560e01c80638da5cb5b116100b8578063d79aceab1161007c578063d79aceab146102f8578063df5cf7231461031f578063ec76f44214610346578063f2fde38b14610359578063f698da251461036c578063fabc1cbc1461037457600080fd5b80638da5cb5b1461029b5780639926ee7d146102ac578063a1060c88146102bf578063a364f4da146102d2578063a98fb355146102e557600080fd5b806349075da31161010a57806349075da3146101fa578063595c6a67146102355780635ac86ab71461023d5780635c975abb14610260578063715018a614610268578063886f11951461027057600080fd5b806310d67a2f14610147578063136439dd1461015c5780631794bb3c1461016f57806320606b7014610182578063374823b5146101bc575b600080fd5b61015a6101553660046118ab565b610387565b005b61015a61016a3660046118cf565b610443565b61015a61017d3660046118e8565b610582565b6101a97f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b6101ea6101ca366004611929565b609960209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101b3565b610228610208366004611955565b609860209081526000928352604080842090915290825290205460ff1681565b6040516101b391906119a4565b61015a6106ac565b6101ea61024b3660046119cc565b606654600160ff9092169190911b9081161490565b6066546101a9565b61015a610773565b606554610283906001600160a01b031681565b6040516001600160a01b0390911681526020016101b3565b6033546001600160a01b0316610283565b61015a6102ba366004611a5f565b610787565b6101a96102cd366004611b46565b610b1a565b61015a6102e03660046118ab565b610bd3565b61015a6102f3366004611b8c565b610d3c565b6101a97fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102837f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b61015a6103543660046118cf565b610d83565b61015a6103673660046118ab565b610e2e565b6101a9610ea4565b61015a6103823660046118cf565b610ee2565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fe9190611bfe565b6001600160a01b0316336001600160a01b0316146104375760405162461bcd60e51b815260040161042e90611c1b565b60405180910390fd5b6104408161103e565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561048b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104af9190611c65565b6104cb5760405162461bcd60e51b815260040161042e90611c87565b606654818116146105445760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161042e565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff16158080156105a25750600054600160ff909116105b806105bc5750303b1580156105bc575060005460ff166001145b61061f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161042e565b6000805460ff191660011790558015610642576000805461ff0019166101001790555b61064c8383611135565b61065461121f565b609755610660846112b6565b80156106a6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190611c65565b6107345760405162461bcd60e51b815260040161042e90611c87565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b61077b611308565b61078560006112b6565b565b606654600090600190811614156107dc5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161042e565b42826040015110156108445760405162461bcd60e51b815260206004820152603e6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f72207369676e617475726520657870697265640000606482015260840161042e565b60013360009081526098602090815260408083206001600160a01b038816845290915290205460ff16600181111561087e5761087e61198e565b14156108e05760405162461bcd60e51b815260206004820152603f6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f7220616c7265616479207265676973746572656400606482015260840161042e565b6001600160a01b038316600090815260996020908152604080832085830151845290915290205460ff16156109645760405162461bcd60e51b81526020600482015260366024820152600080516020611dac8339815191526044820152751594ce881cd85b1d08185b1c9958591e481cdc195b9d60521b606482015260840161042e565b6040516336b87bd760e11b81526001600160a01b0384811660048301527f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91690636d70f7ae90602401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190611c65565b610a645760405162461bcd60e51b815260206004820152604d6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f72206e6f74207265676973746572656420746f204560648201526c1a59d95b93185e595c881e595d609a1b608482015260a40161042e565b6000610a7a843385602001518660400151610b1a565b9050610a8b84828560000151611362565b3360008181526098602090815260408083206001600160a01b0389168085529083528184208054600160ff199182168117909255609985528386208a860151875290945293829020805490931684179092555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610b0c91906119a4565b60405180910390a350505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd6020808301919091526001600160a01b0387811683850152861660608301526080820185905260a08083018590528351808403909101815260c0909201909252805191012060009081610b90610ea4565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b60665460009060019081161415610c285760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161042e565b60013360009081526098602090815260408083206001600160a01b038716845290915290205460ff166001811115610c6257610c6261198e565b14610cd55760405162461bcd60e51b815260206004820152603f60248201527f4156534469726563746f72792e646572656769737465724f70657261746f724660448201527f726f6d4156533a206f70657261746f72206e6f74207265676973746572656400606482015260840161042e565b3360008181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610d3091906119a4565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c9437138383604051610d77929190611ccf565b60405180910390a25050565b33600090815260996020908152604080832084845290915290205460ff1615610e085760405162461bcd60e51b815260206004820152603160248201527f4156534469726563746f72792e63616e63656c53616c743a2063616e6e6f742060448201527018d85b98d95b081cdc195b9d081cd85b1d607a1b606482015260840161042e565b33600090815260996020908152604080832093835292905220805460ff19166001179055565b610e36611308565b6001600160a01b038116610e9b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161042e565b610440816112b6565b60007f0000000000000000000000000000000000000000000000000000000000007a69461415610ed5575060975490565b610edd61121f565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f599190611bfe565b6001600160a01b0316336001600160a01b031614610f895760405162461bcd60e51b815260040161042e90611c1b565b6066541981196066541916146110075760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161042e565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610577565b6001600160a01b0381166110cc5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161042e565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031615801561115657506001600160a01b03821615155b6111d85760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161042e565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261121b8261103e565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6033546001600160a01b031633146107855760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161042e565b6001600160a01b0383163b1561148157604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906113a29086908690600401611cfe565b602060405180830381865afa1580156113bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e39190611d5b565b6001600160e01b0319161461147c5760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a40161042e565b505050565b826001600160a01b03166114958383611521565b6001600160a01b03161461147c5760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a40161042e565b60008060006115308585611545565b9150915061153d816115b5565b509392505050565b60008082516041141561157c5760208301516040840151606085015160001a61157087828585611770565b945094505050506115ae565b8251604014156115a6576020830151604084015161159b86838361185d565b9350935050506115ae565b506000905060025b9250929050565b60008160048111156115c9576115c961198e565b14156115d25750565b60018160048111156115e6576115e661198e565b14156116345760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161042e565b60028160048111156116485761164861198e565b14156116965760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161042e565b60038160048111156116aa576116aa61198e565b14156117035760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161042e565b60048160048111156117175761171761198e565b14156104405760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161042e565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156117a75750600090506003611854565b8460ff16601b141580156117bf57508460ff16601c14155b156117d05750600090506004611854565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611824573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661184d57600060019250925050611854565b9150600090505b94509492505050565b6000806001600160ff1b0383168161187a60ff86901c601b611d85565b905061188887828885611770565b935093505050935093915050565b6001600160a01b038116811461044057600080fd5b6000602082840312156118bd57600080fd5b81356118c881611896565b9392505050565b6000602082840312156118e157600080fd5b5035919050565b6000806000606084860312156118fd57600080fd5b833561190881611896565b9250602084013561191881611896565b929592945050506040919091013590565b6000806040838503121561193c57600080fd5b823561194781611896565b946020939093013593505050565b6000806040838503121561196857600080fd5b823561197381611896565b9150602083013561198381611896565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60208101600283106119c657634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156119de57600080fd5b813560ff811681146118c857600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715611a2857611a286119ef565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611a5757611a576119ef565b604052919050565b60008060408385031215611a7257600080fd5b8235611a7d81611896565b915060208381013567ffffffffffffffff80821115611a9b57600080fd5b9085019060608288031215611aaf57600080fd5b611ab7611a05565b823582811115611ac657600080fd5b8301601f81018913611ad757600080fd5b803583811115611ae957611ae96119ef565b611afb601f8201601f19168701611a2e565b93508084528986828401011115611b1157600080fd5b808683018786013760008682860101525050818152838301358482015260408301356040820152809450505050509250929050565b60008060008060808587031215611b5c57600080fd5b8435611b6781611896565b93506020850135611b7781611896565b93969395505050506040820135916060013590565b60008060208385031215611b9f57600080fd5b823567ffffffffffffffff80821115611bb757600080fd5b818501915085601f830112611bcb57600080fd5b813581811115611bda57600080fd5b866020828501011115611bec57600080fd5b60209290920196919550909350505050565b600060208284031215611c1057600080fd5b81516118c881611896565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611c7757600080fd5b815180151581146118c857600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b82815260006020604081840152835180604085015260005b81811015611d3257858101830151858201606001528201611d16565b81811115611d44576000606083870101525b50601f01601f191692909201606001949350505050565b600060208284031215611d6d57600080fd5b81516001600160e01b0319811681146118c857600080fd5b60008219821115611da657634e487b7160e01b600052601160045260246000fd5b50019056fe4156534469726563746f72792e72656769737465724f70657261746f72546f41a264697066735822122035f03db22cb73fc5cdc009d8cb10aa3fb88ffe01e5760e1af6178cd53c67595f64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x9a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106101ee5760003560e01c80638da5cb5b1161010d578063c052bd61116100a0578063d1c64cc91161006f578063d1c64cc914610604578063ea4d3c9b14610624578063f2fde38b14610658578063f6848d2414610678578063fabc1cbc146106b357600080fd5b8063c052bd6114610584578063c1de3aef146105a4578063c2c51c40146105c4578063cf756fdf146105e457600080fd5b8063a38406a3116100dc578063a38406a3146104fa578063a6a509be1461051a578063b134427114610530578063beffbb891461056457600080fd5b80638da5cb5b1461046b5780639104c319146104895780639b4e4634146104b15780639ba06275146104c457600080fd5b8063595c6a6711610185578063715018a611610154578063715018a6146103ed57806374cdd7981461040257806384d8106214610436578063886f11951461044b57600080fd5b8063595c6a67146103565780635ac86ab71461036b5780635c975abb146103ab57806360f4062b146103c057600080fd5b8063387b1300116101c1578063387b1300146102b457806339b70e38146102d457806344e71c8014610308578063463db0381461033657600080fd5b80630e81073c146101f357806310d67a2f14610226578063136439dd14610248578063292b7b2b14610268575b600080fd5b3480156101ff57600080fd5b5061021361020e366004612406565b6106d3565b6040519081526020015b60405180910390f35b34801561023257600080fd5b50610246610241366004612432565b610911565b005b34801561025457600080fd5b5061024661026336600461244f565b6109c4565b34801561027457600080fd5b5061029c7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6040516001600160a01b03909116815260200161021d565b3480156102c057600080fd5b506102466102cf366004612468565b610b03565b3480156102e057600080fd5b5061029c7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b34801561031457600080fd5b5061031d610ea1565b60405167ffffffffffffffff909116815260200161021d565b34801561034257600080fd5b506102466103513660046124a9565b610eca565b34801561036257600080fd5b50610246611056565b34801561037757600080fd5b5061039b6103863660046124d3565b606654600160ff9092169190911b9081161490565b604051901515815260200161021d565b3480156103b757600080fd5b50606654610213565b3480156103cc57600080fd5b506102136103db366004612432565b609b6020526000908152604090205481565b3480156103f957600080fd5b5061024661111d565b34801561040e57600080fd5b5061029c7f000000000000000000000000424242424242424242424242424242424242424281565b34801561044257600080fd5b5061029c611131565b34801561045757600080fd5b5060655461029c906001600160a01b031681565b34801561047757600080fd5b506033546001600160a01b031661029c565b34801561049557600080fd5b5061029c73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6102466104bf36600461253f565b61121b565b3480156104d057600080fd5b5061029c6104df366004612432565b6098602052600090815260409020546001600160a01b031681565b34801561050657600080fd5b5061029c610515366004612432565b61130a565b34801561052657600080fd5b5061021360995481565b34801561053c57600080fd5b5061029c7f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b34801561057057600080fd5b5061024661057f366004612406565b6113dc565b34801561059057600080fd5b5060975461029c906001600160a01b031681565b3480156105b057600080fd5b506102466105bf366004612432565b6115f3565b3480156105d057600080fd5b506102466105df366004612406565b611604565b3480156105f057600080fd5b506102466105ff3660046125b3565b611a07565b34801561061057600080fd5b5061021361061f3660046124a9565b611b30565b34801561063057600080fd5b5061029c7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b34801561066457600080fd5b50610246610673366004612432565b611c3b565b34801561068457600080fd5b5061039b610693366004612432565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156106bf57600080fd5b506102466106ce36600461244f565b611cb1565b6000336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916146107265760405162461bcd60e51b815260040161071d90612604565b60405180910390fd5b6001600160a01b0383166107a25760405162461bcd60e51b815260206004820152603a60248201527f456967656e506f644d616e616765722e6164645368617265733a20706f644f7760448201527f6e65722063616e6e6f74206265207a65726f2061646472657373000000000000606482015260840161071d565b60008212156108105760405162461bcd60e51b815260206004820152603460248201527f456967656e506f644d616e616765722e6164645368617265733a207368617265604482015273732063616e6e6f74206265206e6567617469766560601b606482015260840161071d565b61081e633b9aca0083612678565b156108915760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f644d616e616765722e6164645368617265733a20736861726560448201527f73206d75737420626520612077686f6c65204777656920616d6f756e74000000606482015260840161071d565b6001600160a01b0383166000908152609b6020526040812054906108b584836126a2565b6001600160a01b0386166000818152609b6020526040908190208390555191925090600080516020613231833981519152906108f49087815260200190565b60405180910390a26109068282611e0d565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610964573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098891906126e3565b6001600160a01b0316336001600160a01b0316146109b85760405162461bcd60e51b815260040161071d90612700565b6109c181611e4f565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a30919061274a565b610a4c5760405162461bcd60e51b815260040161071d9061276c565b60665481811614610ac55760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161071d565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610b4b5760405162461bcd60e51b815260040161071d90612604565b6001600160a01b038316610bc55760405162461bcd60e51b8152602060048201526047602482015260008051602061325183398151915260448201527f546f6b656e733a20706f644f776e65722063616e6e6f74206265207a65726f206064820152666164647265737360c81b608482015260a40161071d565b6001600160a01b038216610c425760405162461bcd60e51b815260206004820152604a602482015260008051602061325183398151915260448201527f546f6b656e733a2064657374696e6174696f6e2063616e6e6f74206265207a65606482015269726f206164647265737360b01b608482015260a40161071d565b6000811215610cb15760405162461bcd60e51b8152602060048201526041602482015260008051602061325183398151915260448201527f546f6b656e733a207368617265732063616e6e6f74206265206e6567617469766064820152606560f81b608482015260a40161071d565b610cbf633b9aca0082612678565b15610d335760405162461bcd60e51b815260206004820152604a602482015260008051602061325183398151915260448201527f546f6b656e733a20736861726573206d75737420626520612077686f6c6520476064820152691dd95a48185b5bdd5b9d60b21b608482015260a40161071d565b6001600160a01b0383166000908152609b602052604081205490811215610e26576000610d5f826127b4565b905080831115610dc4576001600160a01b0385166000908152609b6020526040812055610d8c81846127d1565b9250846001600160a01b031660008051602061323183398151915282604051610db791815260200190565b60405180910390a2610e24565b6001600160a01b0385166000908152609b602052604081208054859290610dec9084906126a2565b90915550506040518381526001600160a01b038616906000805160206132318339815191529060200160405180910390a25050505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610e8357600080fd5b505af1158015610e97573d6000803e3d6000fd5b5050505050505050565b609c5460009067ffffffffffffffff1680610ec55767ffffffffffffffff91505090565b919050565b610ed2611f46565b67ffffffffffffffff8116610f645760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f644d616e616765722e73657444656e6562466f726b54696d6560448201527f7374616d703a2063616e6e6f7420736574206e657744656e6562466f726b546960648201526b06d657374616d7020746f20360a41b608482015260a40161071d565b609c5467ffffffffffffffff16156110005760405162461bcd60e51b815260206004820152605360248201527f456967656e506f644d616e616765722e73657444656e6562466f726b54696d6560448201527f7374616d703a2063616e6e6f74207365742064656e6562466f726b54696d657360648201527274616d70206d6f7265207468616e206f6e636560681b608482015260a40161071d565b609c805467ffffffffffffffff191667ffffffffffffffff83169081179091556040519081527f19200b6fdad58f91b2f496b0c444fc4be3eff74a7e24b07770e04a7137bfd9db9060200160405180910390a150565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c2919061274a565b6110de5760405162461bcd60e51b815260040161071d9061276c565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b611125611f46565b61112f6000611fa0565b565b6066546000908190600190811614156111885760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161071d565b336000908152609860205260409020546001600160a01b03161561120a5760405162461bcd60e51b815260206004820152603360248201527f456967656e506f644d616e616765722e637265617465506f643a2053656e64656044820152721c88185b1c9958591e481a185cc818481c1bd9606a1b606482015260840161071d565b6000611214611ff2565b9250505090565b606654600090600190811614156112705760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161071d565b336000908152609860205260409020546001600160a01b03168061129957611296611ff2565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e46349034906112cf908b908b908b908b908b90600401612811565b6000604051808303818588803b1580156112e857600080fd5b505af11580156112fc573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061090b576113d5836001600160a01b031660001b60405180610940016040528061090e815260200161292361090e9139604080516001600160a01b037f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e166020820152808201919091526000606082015260800160408051601f19818403018152908290526113ba9291602001612886565b60405160208183030381529060405280519060200120612157565b9392505050565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916146114245760405162461bcd60e51b815260040161071d90612604565b600081121561149b5760405162461bcd60e51b815260206004820152603760248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f617265732063616e6e6f74206265206e65676174697665000000000000000000606482015260840161071d565b6114a9633b9aca0082612678565b1561151e576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f61726573206d75737420626520612077686f6c65204777656920616d6f756e74606482015260840161071d565b6001600160a01b0382166000908152609b602052604081205461154290839061289b565b905060008112156115d35760405162461bcd60e51b815260206004820152604f60248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20636160448201527f6e6e6f7420726573756c7420696e20706f64206f776e657220686176696e672060648201526e6e656761746976652073686172657360881b608482015260a40161071d565b6001600160a01b039092166000908152609b602052604090209190915550565b6115fb611f46565b6109c1816121b3565b6001600160a01b03808316600090815260986020526040902054839116331461167f5760405162461bcd60e51b815260206004820152602760248201527f456967656e506f644d616e616765722e6f6e6c79456967656e506f643a206e6f6044820152661d0818481c1bd960ca1b606482015260840161071d565b600260c95414156116d25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161071d565b600260c9556001600160a01b03831661176e5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a20706f644f776e65722063616e6e6064820152716f74206265207a65726f206164647265737360701b608482015260a40161071d565b61177c633b9aca00836128da565b156118155760405162461bcd60e51b815260206004820152605a60248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a2073686172657344656c7461206d60648201527f75737420626520612077686f6c65204777656920616d6f756e74000000000000608482015260a40161071d565b6001600160a01b0383166000908152609b60205260408120549061183984836126a2565b6001600160a01b0386166000908152609b602052604081208290559091506118618383611e0d565b905080156119c957600081121561192c576001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06118c0856127b4565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561190f57600080fd5b505af1158015611923573d6000803e3d6000fd5b505050506119c9565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916906328a573ae90606401600060405180830381600087803b1580156119b057600080fd5b505af11580156119c4573d6000803e3d6000fd5b505050505b856001600160a01b0316600080516020613231833981519152866040516119f291815260200190565b60405180910390a25050600160c95550505050565b600054610100900460ff1615808015611a275750600054600160ff909116105b80611a415750303b158015611a41575060005460ff166001145b611aa45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161071d565b6000805460ff191660011790558015611ac7576000805461ff0019166101001790555b611ad0856121b3565b611ad984611fa0565b611ae383836121fd565b8015611b29576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60975460405163321accf960e11b815267ffffffffffffffff8316600482015260009182916001600160a01b039091169063643599f290602401602060405180830381865afa158015611b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bab91906128ee565b90508061090b5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e676574426c6f636b526f6f744174546960448201527f6d657374616d703a20737461746520726f6f742061742074696d657374616d70606482015271081b9bdd081e595d08199a5b985b1a5e995960721b608482015260a40161071d565b611c43611f46565b6001600160a01b038116611ca85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161071d565b6109c181611fa0565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2891906126e3565b6001600160a01b0316336001600160a01b031614611d585760405162461bcd60e51b815260040161071d90612700565b606654198119606654191614611dd65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161071d565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610af8565b6000808313611e2d5760008213611e265750600061090b565b508061090b565b60008213611e4557611e3e836127b4565b905061090b565b611e3e838361289b565b6001600160a01b038116611edd5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161071d565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b0316331461112f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161071d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060996000815461200390612907565b9091555060408051610940810190915261090e8082526000916120a291839133916129236020830139604080516001600160a01b037f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e166020820152808201919091526000606082015260800160408051601f198184030181529082905261208e9291602001612886565b6040516020818303038152906040526122e7565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b1580156120e657600080fd5b505af11580156120fa573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b16602183015260358201859052605580830185905283518084039091018152607590920190925280519101206000906113d5565b609780546001600160a01b0319166001600160a01b0383169081179091556040517f08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f690600090a250565b6065546001600160a01b031615801561221e57506001600160a01b03821615155b6122a05760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161071d565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26122e382611e4f565b5050565b6000808447101561233a5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015260640161071d565b82516123885760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015260640161071d565b8383516020850187f590506001600160a01b0381166123e95760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015260640161071d565b949350505050565b6001600160a01b03811681146109c157600080fd5b6000806040838503121561241957600080fd5b8235612424816123f1565b946020939093013593505050565b60006020828403121561244457600080fd5b81356113d5816123f1565b60006020828403121561246157600080fd5b5035919050565b60008060006060848603121561247d57600080fd5b8335612488816123f1565b92506020840135612498816123f1565b929592945050506040919091013590565b6000602082840312156124bb57600080fd5b813567ffffffffffffffff811681146113d557600080fd5b6000602082840312156124e557600080fd5b813560ff811681146113d557600080fd5b60008083601f84011261250857600080fd5b50813567ffffffffffffffff81111561252057600080fd5b60208301915083602082850101111561253857600080fd5b9250929050565b60008060008060006060868803121561255757600080fd5b853567ffffffffffffffff8082111561256f57600080fd5b61257b89838a016124f6565b9097509550602088013591508082111561259457600080fd5b506125a1888289016124f6565b96999598509660400135949350505050565b600080600080608085870312156125c957600080fd5b84356125d4816123f1565b935060208501356125e4816123f1565b925060408501356125f4816123f1565b9396929550929360600135925050565b602080825260409082018190527f456967656e506f644d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261268757612687612662565b500690565b634e487b7160e01b600052601160045260246000fd5b600080821280156001600160ff1b03849003851316156126c4576126c461268c565b600160ff1b83900384128116156126dd576126dd61268c565b50500190565b6000602082840312156126f557600080fd5b81516113d5816123f1565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561275c57600080fd5b815180151581146113d557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000600160ff1b8214156127ca576127ca61268c565b5060000390565b6000828210156127e3576127e361268c565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006128256060830187896127e8565b82810360208401526128388186886127e8565b9150508260408301529695505050505050565b6000815160005b8181101561286c5760208185018101518683015201612852565b8181111561287b576000828601525b509290920192915050565b60006123e9612895838661284b565b8461284b565b60008083128015600160ff1b8501841216156128b9576128b961268c565b6001600160ff1b03840183138116156128d4576128d461268c565b50500390565b6000826128e9576128e9612662565b500790565b60006020828403121561290057600080fd5b5051919050565b600060001982141561291b5761291b61268c565b506001019056fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193456967656e506f644d616e616765722e77697468647261775368617265734173a2646970667358221220ef27d84673f8fb0a3acb412819d09dde9de413187461a072f3d1f27b860910e564736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x9e545e3c0baab3e08cdfd552c960a1050f373042":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b038316815260006020604081840152835180604085015260005b8181101561063b5785810183015185820160600152820161061f565b8181111561064d576000606083870101525b50601f01601f19169290920160600194935050505056fea2646970667358221220726e525ba4195f70768543b6eb94d022704c3702dcb1ca686df0d56fdf9f8a4864736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"}},"0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0":{"nonce":1,"balance":"0x0","code":"0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063c298557814602d575b600080fd5b600060405190815260200160405180910390f3fea2646970667358221220b21976f06ef02c2cd93d153abeebc384346023ec0dc78005b008777a8176aa1764736f6c634300080c0033","storage":{}},"0xa0ee7a142d267c1f36714e4a8f75612f20a79720":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0xa513e6e4b8f2a923d98304ec87f64353c4d5c853":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x959922be3caee4b8cd9a407cc3ac1c251c2007b1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xa51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106103425760003560e01c8063635bbd10116101b8578063b7f06ebe11610104578063cf80873e116100a2578063f16172b01161007c578063f16172b014610908578063f2fde38b1461091b578063f698da251461092e578063fabc1cbc1461093657600080fd5b8063cf80873e146108c1578063da8be864146108e2578063eea9064b146108f557600080fd5b8063c488375a116100de578063c488375a146107de578063c5e480db146107fe578063c94b5111146108a4578063ca661c04146108b757600080fd5b8063b7f06ebe14610784578063bb45fef2146107a7578063c448feb8146107d557600080fd5b8063886f1195116101715780639104c3191161014b5780639104c3191461070f57806399be81c81461072a578063a17884841461073d578063b13442711461075d57600080fd5b8063886f1195146106cb5780638da5cb5b146106de57806390041347146106ef57600080fd5b8063635bbd101461063657806365da1264146106495780636d70f7ae14610672578063715018a614610685578063778e55f31461068d5780637f548071146106b857600080fd5b806328a573ae116102925780634665bcda11610230578063597b36da1161020a578063597b36da146105e55780635ac86ab7146105f85780635c975abb1461061b57806360d7faed1461062357600080fd5b80634665bcda146105ac5780634fc40b61146105d3578063595c6a67146105dd57600080fd5b806339b70e381161026c57806339b70e38146104f45780633cdeb5e0146105335780633e28391d14610562578063433773821461058557600080fd5b806328a573ae146104ae57806329c77d4f146104c157806333404396146104e157600080fd5b8063132d4967116102ff57806316928365116102d957806316928365146104285780631bbce0911461046157806320606b701461047457806322bf40e41461049b57600080fd5b8063132d4967146103ef578063136439dd146104025780631522bf021461041557600080fd5b80630449ca391461034757806304a4f9791461036d5780630b9f487a146103945780630dd8dd02146103a75780630f589e59146103c757806310d67a2f146103dc575b600080fd5b61035a610355366004614835565b610949565b6040519081526020015b60405180910390f35b61035a7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b61035a6103a236600461489b565b6109ce565b6103ba6103b5366004614835565b610a90565b60405161036491906148f6565b6103da6103d5366004614993565b610df9565b005b6103da6103ea3660046149e6565b610f3e565b6103da6103fd366004614a0a565b610ff1565b6103da610410366004614a4b565b6110a8565b6103da610423366004614a64565b6111e7565b61035a6104363660046149e6565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b61035a61046f366004614a0a565b6111fb565b61035a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103da6104a9366004614acf565b611229565b6103da6104bc366004614a0a565b61136d565b61035a6104cf3660046149e6565b609b6020526000908152604090205481565b6103da6104ef366004614b76565b61141d565b61051b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b6040516001600160a01b039091168152602001610364565b61051b6105413660046149e6565b6001600160a01b039081166000908152609960205260409020600101541690565b6105756105703660046149e6565b61155a565b6040519015158152602001610364565b61035a7f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b61051b7f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681565b61035a6213c68081565b6103da61157a565b61035a6105f3366004614e73565b611641565b610575610606366004614eaf565b606654600160ff9092169190911b9081161490565b60665461035a565b6103da610631366004614ee0565b611671565b6103da610644366004614a4b565b61170c565b61051b6106573660046149e6565b609a602052600090815260409020546001600160a01b031681565b6105756106803660046149e6565b61171d565b6103da61173e565b61035a61069b366004614f6f565b609860209081526000928352604080842090915290825290205481565b6103da6106c6366004615050565b611752565b60655461051b906001600160a01b031681565b6033546001600160a01b031661051b565b6107026106fd3660046150e0565b61197e565b604051610364919061516a565b61051b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6103da61073836600461517d565b611a58565b61035a61074b3660046149e6565b609f6020526000908152604090205481565b61051b7f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b610575610792366004614a4b565b609e6020526000908152604090205460ff1681565b6105756107b53660046151b2565b609c60209081526000928352604080842090915290825290205460ff1681565b61035a609d5481565b61035a6107ec3660046149e6565b60a16020526000908152604090205481565b61086e61080c3660046149e6565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff1690820152606001610364565b61035a6108b23660046151de565b611b2a565b61035a62034bc081565b6108d46108cf3660046149e6565b611be3565b60405161036492919061525f565b6103ba6108f03660046149e6565b611f9b565b6103da610903366004615284565b61245f565b6103da6109163660046152dc565b61257c565b6103da6109293660046149e6565b61260d565b61035a612683565b6103da610944366004614a4b565b6126c1565b609d54600090815b838110156109c657600060a16000878785818110610971576109716152f8565b905060200201602081019061098691906149e6565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828111156109b5578092505b506109bf81615324565b9050610951565b509392505050565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610a4c612683565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b60665460609060019060029081161415610ac55760405162461bcd60e51b8152600401610abc9061533f565b60405180910390fd5b6000836001600160401b03811115610adf57610adf614c18565b604051908082528060200260200182016040528015610b08578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b85811015610dee57868682818110610b4357610b436152f8565b9050602002810190610b559190615376565b610b63906020810190615396565b9050878783818110610b7757610b776152f8565b9050602002810190610b899190615376565b610b939080615396565b905014610c085760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a20696e707574206c656e677468206d69736d6174636800000000000000006064820152608401610abc565b33878783818110610c1b57610c1b6152f8565b9050602002810190610c2d9190615376565b610c3e9060608101906040016149e6565b6001600160a01b031614610cba5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a2077697468647261776572206d757374206265207374616b6572000000006064820152608401610abc565b610dbf3383898985818110610cd157610cd16152f8565b9050602002810190610ce39190615376565b610cf49060608101906040016149e6565b8a8a86818110610d0657610d066152f8565b9050602002810190610d189190615376565b610d229080615396565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150889050818110610d6857610d686152f8565b9050602002810190610d7a9190615376565b610d88906020810190615396565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061281d92505050565b838281518110610dd157610dd16152f8565b602090810291909101015280610de681615324565b915050610b29565b509095945050505050565b610e023361155a565b15610e885760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e726567697374657241734f70657260448201527f61746f723a2063616c6c657220697320616c7265616479206163746976656c796064820152690819195b1959d85d195960b21b608482015260a401610abc565b610e923384612ddd565b604080518082019091526060815260006020820152610eb43380836000612fd0565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610eed91906153df565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610f30929190615431565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb59190615460565b6001600160a01b0316336001600160a01b031614610fe55760405162461bcd60e51b8152600401610abc9061547d565b610fee81613266565b50565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614806110505750336001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe616145b61106c5760405162461bcd60e51b8152600401610abc906154c7565b6110758361155a565b156110a3576001600160a01b038084166000908152609a6020526040902054166110a18185858561335d565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156110f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111149190615524565b6111305760405162461bcd60e51b8152600401610abc90615541565b606654818116146111a95760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610abc565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6111ef6133d8565b6110a184848484613432565b6001600160a01b0383166000908152609b602052604081205461122085828686611b2a565b95945050505050565b600054610100900460ff16158080156112495750600054600160ff909116105b806112635750303b158015611263575060005460ff166001145b6112c65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610abc565b6000805460ff1916600117905580156112e9576000805461ff0019166101001790555b6112f38888613658565b6112fb613742565b609755611307896137d9565b6113108661382b565b61131c85858585613432565b8015611362576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614806113cc5750336001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe616145b6113e85760405162461bcd60e51b8152600401610abc906154c7565b6113f18361155a565b156110a3576001600160a01b038084166000908152609a6020526040902054166110a181858585613925565b606654600290600490811614156114465760405162461bcd60e51b8152600401610abc9061533f565b600260c95414156114995760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610abc565b600260c95560005b88811015611549576115398a8a838181106114be576114be6152f8565b90506020028101906114d09190615589565b8989848181106114e2576114e26152f8565b90506020028101906114f49190615396565b898986818110611506576115066152f8565b9050602002013588888781811061151f5761151f6152f8565b9050602002016020810190611534919061559f565b6139a0565b61154281615324565b90506114a1565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e69190615524565b6116025760405162461bcd60e51b8152600401610abc90615541565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000816040516020016116549190615630565b604051602081830303815290604052805190602001209050919050565b6066546002906004908116141561169a5760405162461bcd60e51b8152600401610abc9061533f565b600260c95414156116ed5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610abc565b600260c9556116ff86868686866139a0565b5050600160c95550505050565b6117146133d8565b610fee8161382b565b6001600160a01b039081166000818152609a60205260409020549091161490565b6117466133d8565b61175060006137d9565b565b42836020015110156117d65760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b6572207369676e6174757265206578706972656064820152601960fa1b608482015260a401610abc565b6117df8561155a565b156118685760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b657220697320616c726561647920616374697660648201526c195b1e4819195b1959d85d1959609a1b608482015260a401610abc565b6118718461171d565b6118fd5760405162461bcd60e51b815260206004820152605160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a206f70657261746f72206973206e6f7420726567697374656064820152703932b21034b71022b4b3b2b72630bcb2b960791b608482015260a401610abc565b6000609b6000876001600160a01b03166001600160a01b0316815260200190815260200160002054905060006119398783888860200151611b2a565b6001600160a01b0388166000908152609b602052604090206001840190558551909150611969908890839061418a565b61197587878686612fd0565b50505050505050565b6060600082516001600160401b0381111561199b5761199b614c18565b6040519080825280602002602001820160405280156119c4578160200160208202803683370190505b50905060005b83518110156109c6576001600160a01b03851660009081526098602052604081208551909190869084908110611a0257611a026152f8565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110611a3d57611a3d6152f8565b6020908102919091010152611a5181615324565b90506119ca565b611a613361171d565b611ae35760405162461bcd60e51b815260206004820152604760248201527f44656c65676174696f6e4d616e616765722e7570646174654f70657261746f7260448201527f4d657461646174615552493a2063616c6c6572206d75737420626520616e206f6064820152663832b930ba37b960c91b608482015260a401610abc565b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051611b1e929190615431565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c0909201909252805191012060009081611ba0612683565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe6909116906360f4062b90602401602060405180830381865afa158015611c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c779190615643565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9909116906394f649dd90602401600060405180830381865afa158015611ce7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d0f91908101906156b7565b9150915060008313611d2657909590945092505050565b606080835160001415611de0576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611d9b57611d9b6152f8565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611dcf57611dcf6152f8565b602002602001018181525050611f8e565b8351611ded906001615771565b6001600160401b03811115611e0457611e04614c18565b604051908082528060200260200182016040528015611e2d578160200160208202803683370190505b50915081516001600160401b03811115611e4957611e49614c18565b604051908082528060200260200182016040528015611e72578160200160208202803683370190505b50905060005b8451811015611f0c57848181518110611e9357611e936152f8565b6020026020010151838281518110611ead57611ead6152f8565b60200260200101906001600160a01b031690816001600160a01b031681525050838181518110611edf57611edf6152f8565b6020026020010151828281518110611ef957611ef96152f8565b6020908102919091010152600101611e78565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac08260018451611f319190615789565b81518110611f4157611f416152f8565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018451611f719190615789565b81518110611f8157611f816152f8565b6020026020010181815250505b9097909650945050505050565b60665460609060019060029081161415611fc75760405162461bcd60e51b8152600401610abc9061533f565b611fd08361155a565b6120505760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a207374908201527f616b6572206d7573742062652064656c65676174656420746f20756e64656c656064820152636761746560e01b608482015260a401610abc565b6120598361171d565b156120cc5760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a206f7060448201527f657261746f72732063616e6e6f7420626520756e64656c6567617465640000006064820152608401610abc565b6001600160a01b0383166121485760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6e6e6f7420756e64656c6567617465207a65726f2061646472657373000000006064820152608401610abc565b6001600160a01b038084166000818152609a60205260409020549091169033148061217b5750336001600160a01b038216145b806121a257506001600160a01b038181166000908152609960205260409020600101541633145b6122145760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6c6c65722063616e6e6f7420756e64656c6567617465207374616b65720000006064820152608401610abc565b60008061222086611be3565b9092509050336001600160a01b0387161461227657826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040902080546001600160a01b031916905581516122f8576040805160008152602081019091529450612456565b81516001600160401b0381111561231157612311614c18565b60405190808252806020026020018201604052801561233a578160200160208202803683370190505b50945060005b8251811015612454576040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508483815181106123a0576123a06152f8565b6020026020010151826000815181106123bb576123bb6152f8565b60200260200101906001600160a01b031690816001600160a01b0316815250508383815181106123ed576123ed6152f8565b602002602001015181600081518110612408576124086152f8565b60200260200101818152505061242189878b858561281d565b888481518110612433576124336152f8565b6020026020010181815250505050808061244c90615324565b915050612340565b505b50505050919050565b6124683361155a565b156124e65760405162461bcd60e51b815260206004820152604260248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a20737460448201527f616b657220697320616c7265616479206163746976656c792064656c65676174606482015261195960f21b608482015260a401610abc565b6124ef8361171d565b6125705760405162461bcd60e51b815260206004820152604660248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a206f7060448201527f657261746f72206973206e6f74207265676973746572656420696e2045696765606482015265372630bcb2b960d11b608482015260a401610abc565b6110a333848484612fd0565b6125853361171d565b6126035760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e4d616e616765722e6d6f646966794f70657261746f7260448201527f44657461696c733a2063616c6c6572206d75737420626520616e206f706572616064820152623a37b960e91b608482015260a401610abc565b610fee3382612ddd565b6126156133d8565b6001600160a01b03811661267a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abc565b610fee816137d9565b60007f0000000000000000000000000000000000000000000000000000000000007a694614156126b4575060975490565b6126bc613742565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612714573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127389190615460565b6001600160a01b0316336001600160a01b0316146127685760405162461bcd60e51b8152600401610abc9061547d565b6066541981196066541916146127e65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610abc565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016111dc565b60006001600160a01b0386166128b45760405162461bcd60e51b815260206004820152605060248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374616b65722063616e6e6f7460648201526f206265207a65726f206164647265737360801b608482015260a401610abc565b825161293e5760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374726174656769657320636160648201526c6e6e6f7420626520656d70747960981b608482015260a401610abc565b60005b8351811015612ceb576001600160a01b03861615612997576129978688868481518110612970576129706152f8565b602002602001015186858151811061298a5761298a6152f8565b602002602001015161335d565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b03168482815181106129c7576129c76152f8565b60200260200101516001600160a01b03161415612a90577f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031663beffbb8988858481518110612a2057612a206152f8565b60200260200101516040518363ffffffff1660e01b8152600401612a599291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015612a7357600080fd5b505af1158015612a87573d6000803e3d6000fd5b50505050612ce3565b846001600160a01b0316876001600160a01b03161480612b6257507f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b0316639b4da03d858381518110612aec57612aec6152f8565b60200260200101516040518263ffffffff1660e01b8152600401612b1f91906001600160a01b0391909116815260200190565b602060405180830381865afa158015612b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b609190615524565b155b612c2e5760405162461bcd60e51b8152602060048201526084602482018190527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448301527f6e6451756575655769746864726177616c3a2077697468647261776572206d7560648301527f73742062652073616d652061646472657373206173207374616b657220696620908201527f746869726450617274795472616e7366657273466f7262696464656e2061726560a482015263081cd95d60e21b60c482015260e401610abc565b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b0316638c80d4e588868481518110612c7057612c706152f8565b6020026020010151868581518110612c8a57612c8a6152f8565b60200260200101516040518463ffffffff1660e01b8152600401612cb0939291906157a0565b600060405180830381600087803b158015612cca57600080fd5b505af1158015612cde573d6000803e3d6000fd5b505050505b600101612941565b506001600160a01b0386166000908152609f60205260408120805491829190612d1383615324565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff1681526020018681526020018581525090506000612d7b82611641565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f990612dc990839085906157c4565b60405180910390a198975050505050505050565b6213c680612df160608301604084016157dd565b63ffffffff161115612ea65760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401610abc565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff1690612ee290606084019084016157dd565b63ffffffff161015612f785760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401610abc565b6001600160a01b03821660009081526099602052604090208190612f9c828261581a565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac90611b1e9084906153df565b60665460009060019081161415612ff95760405162461bcd60e51b8152600401610abc9061533f565b6001600160a01b0380851660009081526099602052604090206001015416801580159061302f5750336001600160a01b03821614155b80156130445750336001600160a01b03861614155b156131b15742846020015110156130c35760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f766572207369676e617475726520657870697265640000000000000000006064820152608401610abc565b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff161561315d5760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f76657253616c7420616c7265616479207370656e740000000000000000006064820152608401610abc565b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff1916600117905585015161319e9088908890859088906109ce565b90506131af8282876000015161418a565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a360008061321088611be3565b9150915060005b82518110156113625761325e888a858481518110613237576132376152f8565b6020026020010151858581518110613251576132516152f8565b6020026020010151613925565b600101613217565b6001600160a01b0381166132f45760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610abc565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290613394908490615789565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610f30939291906157a0565b6033546001600160a01b031633146117505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610abc565b8281146134ba5760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a20696e707574206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610abc565b8260005b818110156136505760008686838181106134da576134da6152f8565b90506020020160208101906134ef91906149e6565b6001600160a01b038116600090815260a1602052604081205491925086868581811061351d5761351d6152f8565b90506020020135905062034bc08111156135e15760405162461bcd60e51b815260206004820152607360248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a205f7769746864726177616c60648201527f44656c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544860848201527244524157414c5f44454c41595f424c4f434b5360681b60a482015260c401610abc565b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a15050508061364990615324565b90506134be565b505050505050565b6065546001600160a01b031615801561367957506001600160a01b03821615155b6136fb5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610abc565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261373e82613266565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62034bc08111156138e45760405162461bcd60e51b815260206004820152607160248201527f44656c65676174696f6e4d616e616765722e5f7365744d696e5769746864726160448201527f77616c44656c6179426c6f636b733a205f6d696e5769746864726177616c446560648201527f6c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544844526084820152704157414c5f44454c41595f424c4f434b5360781b60a482015260c401610abc565b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b6001600160a01b0380851660009081526098602090815260408083209386168352929052908120805483929061395c908490615771565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610f30939291906157a0565b60006139ae6105f38761587d565b6000818152609e602052604090205490915060ff16613a2f5760405162461bcd60e51b815260206004820152604360248201526000805160206159b583398151915260448201527f645769746864726177616c3a20616374696f6e206973206e6f7420696e20717560648201526265756560e81b608482015260a401610abc565b609d544390613a4460a0890160808a016157dd565b63ffffffff16613a549190615771565b1115613adc5760405162461bcd60e51b815260206004820152605f60248201526000805160206159b583398151915260448201527f645769746864726177616c3a206d696e5769746864726177616c44656c61794260648201527f6c6f636b7320706572696f6420686173206e6f74207965742070617373656400608482015260a401610abc565b613aec60608701604088016149e6565b6001600160a01b0316336001600160a01b031614613b795760405162461bcd60e51b815260206004820152605060248201526000805160206159b583398151915260448201527f645769746864726177616c3a206f6e6c7920776974686472617765722063616e60648201526f1031b7b6b83632ba329030b1ba34b7b760811b608482015260a401610abc565b8115613bfb57613b8c60a0870187615396565b85149050613bfb5760405162461bcd60e51b815260206004820152604260248201526000805160206159b583398151915260448201527f645769746864726177616c3a20696e707574206c656e677468206d69736d61746064820152610c6d60f31b608482015260a401610abc565b6000818152609e60205260409020805460ff191690558115613d605760005b613c2760a0880188615396565b9050811015613d5a574360a16000613c4260a08b018b615396565b85818110613c5257613c526152f8565b9050602002016020810190613c6791906149e6565b6001600160a01b03168152602081019190915260400160002054613c9160a08a0160808b016157dd565b63ffffffff16613ca19190615771565b1115613cbf5760405162461bcd60e51b8152600401610abc9061588f565b613d52613ccf60208901896149e6565b33613cdd60a08b018b615396565b85818110613ced57613ced6152f8565b9050602002016020810190613d0291906149e6565b613d0f60c08c018c615396565b86818110613d1f57613d1f6152f8565b905060200201358a8a87818110613d3857613d386152f8565b9050602002016020810190613d4d91906149e6565b614344565b600101613c1a565b5061414f565b336000908152609a60205260408120546001600160a01b0316905b613d8860a0890189615396565b905081101561414c574360a16000613da360a08c018c615396565b85818110613db357613db36152f8565b9050602002016020810190613dc891906149e6565b6001600160a01b03168152602081019190915260400160002054613df260a08b0160808c016157dd565b63ffffffff16613e029190615771565b1115613e205760405162461bcd60e51b8152600401610abc9061588f565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0613e4260a08a018a615396565b83818110613e5257613e526152f8565b9050602002016020810190613e6791906149e6565b6001600160a01b03161415613fb7576000613e8560208a018a6149e6565b905060006001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe616630e81073c83613ec660c08e018e615396565b87818110613ed657613ed66152f8565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af1158015613f2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4e9190615643565b6001600160a01b038084166000908152609a6020526040902054919250168015613faf57613faf8184613f8460a08f018f615396565b88818110613f9457613f946152f8565b9050602002016020810190613fa991906149e6565b85613925565b505050614144565b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b031663c4623ea133898985818110613ff957613ff96152f8565b905060200201602081019061400e91906149e6565b61401b60a08d018d615396565b8681811061402b5761402b6152f8565b905060200201602081019061404091906149e6565b61404d60c08e018e615396565b8781811061405d5761405d6152f8565b60405160e088901b6001600160e01b03191681526001600160a01b03968716600482015294861660248601529290941660448401526020909102013560648201526084019050600060405180830381600087803b1580156140bd57600080fd5b505af11580156140d1573d6000803e3d6000fd5b505050506001600160a01b038216156141445761414482336140f660a08c018c615396565b85818110614106576141066152f8565b905060200201602081019061411b91906149e6565b61412860c08d018d615396565b86818110614138576141386152f8565b90506020020135613925565b600101613d7b565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6001600160a01b0383163b156142a457604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906141ca9086908690600401615917565b602060405180830381865afa1580156141e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061420b9190615974565b6001600160e01b031916146110a35760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610abc565b826001600160a01b03166142b88383614484565b6001600160a01b0316146110a35760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610abc565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014156143ef5760405162387b1360e81b81526001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe6169063387b1300906143b8908890889087906004016157a0565b600060405180830381600087803b1580156143d257600080fd5b505af11580156143e6573d6000803e3d6000fd5b5050505061447d565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9169063c608c7f390608401600060405180830381600087803b15801561446957600080fd5b505af1158015611362573d6000803e3d6000fd5b5050505050565b600080600061449385856144a0565b915091506109c681614510565b6000808251604114156144d75760208301516040840151606085015160001a6144cb878285856146cb565b94509450505050614509565b82516040141561450157602083015160408401516144f68683836147b8565b935093505050614509565b506000905060025b9250929050565b60008160048111156145245761452461599e565b141561452d5750565b60018160048111156145415761454161599e565b141561458f5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610abc565b60028160048111156145a3576145a361599e565b14156145f15760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610abc565b60038160048111156146055761460561599e565b141561465e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610abc565b60048160048111156146725761467261599e565b1415610fee5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610abc565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561470257506000905060036147af565b8460ff16601b1415801561471a57508460ff16601c14155b1561472b57506000905060046147af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561477f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166147a8576000600192509250506147af565b9150600090505b94509492505050565b6000806001600160ff1b038316816147d560ff86901c601b615771565b90506147e3878288856146cb565b935093505050935093915050565b60008083601f84011261480357600080fd5b5081356001600160401b0381111561481a57600080fd5b6020830191508360208260051b850101111561450957600080fd5b6000806020838503121561484857600080fd5b82356001600160401b0381111561485e57600080fd5b61486a858286016147f1565b90969095509350505050565b6001600160a01b0381168114610fee57600080fd5b803561489681614876565b919050565b600080600080600060a086880312156148b357600080fd5b85356148be81614876565b945060208601356148ce81614876565b935060408601356148de81614876565b94979396509394606081013594506080013592915050565b6020808252825182820181905260009190848201906040850190845b8181101561492e57835183529284019291840191600101614912565b50909695505050505050565b60006060828403121561494c57600080fd5b50919050565b60008083601f84011261496457600080fd5b5081356001600160401b0381111561497b57600080fd5b60208301915083602082850101111561450957600080fd5b6000806000608084860312156149a857600080fd5b6149b2858561493a565b925060608401356001600160401b038111156149cd57600080fd5b6149d986828701614952565b9497909650939450505050565b6000602082840312156149f857600080fd5b8135614a0381614876565b9392505050565b600080600060608486031215614a1f57600080fd5b8335614a2a81614876565b92506020840135614a3a81614876565b929592945050506040919091013590565b600060208284031215614a5d57600080fd5b5035919050565b60008060008060408587031215614a7a57600080fd5b84356001600160401b0380821115614a9157600080fd5b614a9d888389016147f1565b90965094506020870135915080821115614ab657600080fd5b50614ac3878288016147f1565b95989497509550505050565b60008060008060008060008060c0898b031215614aeb57600080fd5b8835614af681614876565b97506020890135614b0681614876565b9650604089013595506060890135945060808901356001600160401b0380821115614b3057600080fd5b614b3c8c838d016147f1565b909650945060a08b0135915080821115614b5557600080fd5b50614b628b828c016147f1565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b031215614b9257600080fd5b88356001600160401b0380821115614ba957600080fd5b614bb58c838d016147f1565b909a50985060208b0135915080821115614bce57600080fd5b614bda8c838d016147f1565b909850965060408b0135915080821115614bf357600080fd5b614bff8c838d016147f1565b909650945060608b0135915080821115614b5557600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715614c5057614c50614c18565b60405290565b604080519081016001600160401b0381118282101715614c5057614c50614c18565b604051601f8201601f191681016001600160401b0381118282101715614ca057614ca0614c18565b604052919050565b63ffffffff81168114610fee57600080fd5b803561489681614ca8565b60006001600160401b03821115614cde57614cde614c18565b5060051b60200190565b600082601f830112614cf957600080fd5b81356020614d0e614d0983614cc5565b614c78565b82815260059290921b84018101918181019086841115614d2d57600080fd5b8286015b84811015614d51578035614d4481614876565b8352918301918301614d31565b509695505050505050565b600082601f830112614d6d57600080fd5b81356020614d7d614d0983614cc5565b82815260059290921b84018101918181019086841115614d9c57600080fd5b8286015b84811015614d515780358352918301918301614da0565b600060e08284031215614dc957600080fd5b614dd1614c2e565b9050614ddc8261488b565b8152614dea6020830161488b565b6020820152614dfb6040830161488b565b604082015260608201356060820152614e1660808301614cba565b608082015260a08201356001600160401b0380821115614e3557600080fd5b614e4185838601614ce8565b60a084015260c0840135915080821115614e5a57600080fd5b50614e6784828501614d5c565b60c08301525092915050565b600060208284031215614e8557600080fd5b81356001600160401b03811115614e9b57600080fd5b614ea784828501614db7565b949350505050565b600060208284031215614ec157600080fd5b813560ff81168114614a0357600080fd5b8015158114610fee57600080fd5b600080600080600060808688031215614ef857600080fd5b85356001600160401b0380821115614f0f57600080fd5b9087019060e0828a031215614f2357600080fd5b90955060208701359080821115614f3957600080fd5b50614f46888289016147f1565b909550935050604086013591506060860135614f6181614ed2565b809150509295509295909350565b60008060408385031215614f8257600080fd5b8235614f8d81614876565b91506020830135614f9d81614876565b809150509250929050565b600060408284031215614fba57600080fd5b614fc2614c56565b905081356001600160401b0380821115614fdb57600080fd5b818401915084601f830112614fef57600080fd5b813560208282111561500357615003614c18565b615015601f8301601f19168201614c78565b9250818352868183860101111561502b57600080fd5b8181850182850137600081838501015282855280860135818601525050505092915050565b600080600080600060a0868803121561506857600080fd5b853561507381614876565b9450602086013561508381614876565b935060408601356001600160401b038082111561509f57600080fd5b6150ab89838a01614fa8565b945060608801359150808211156150c157600080fd5b506150ce88828901614fa8565b95989497509295608001359392505050565b600080604083850312156150f357600080fd5b82356150fe81614876565b915060208301356001600160401b0381111561511957600080fd5b61512585828601614ce8565b9150509250929050565b600081518084526020808501945080840160005b8381101561515f57815187529582019590820190600101615143565b509495945050505050565b602081526000614a03602083018461512f565b6000806020838503121561519057600080fd5b82356001600160401b038111156151a657600080fd5b61486a85828601614952565b600080604083850312156151c557600080fd5b82356151d081614876565b946020939093013593505050565b600080600080608085870312156151f457600080fd5b84356151ff81614876565b935060208501359250604085013561521681614876565b9396929550929360600135925050565b600081518084526020808501945080840160005b8381101561515f5781516001600160a01b03168752958201959082019060010161523a565b6040815260006152726040830185615226565b8281036020840152611220818561512f565b60008060006060848603121561529957600080fd5b83356152a481614876565b925060208401356001600160401b038111156152bf57600080fd5b6152cb86828701614fa8565b925050604084013590509250925092565b6000606082840312156152ee57600080fd5b614a03838361493a565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156153385761533861530e565b5060010190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60008235605e1983360301811261538c57600080fd5b9190910192915050565b6000808335601e198436030181126153ad57600080fd5b8301803591506001600160401b038211156153c757600080fd5b6020019150600581901b360382131561450957600080fd5b6060810182356153ee81614876565b6001600160a01b03908116835260208401359061540a82614876565b166020830152604083013561541e81614ca8565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561547257600080fd5b8151614a0381614876565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526037908201527f44656c65676174696f6e4d616e616765723a206f6e6c7953747261746567794d60408201527f616e616765724f72456967656e506f644d616e61676572000000000000000000606082015260800190565b60006020828403121561553657600080fd5b8151614a0381614ed2565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000823560de1983360301811261538c57600080fd5b6000602082840312156155b157600080fd5b8135614a0381614ed2565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151606084015263ffffffff608083015116608084015260a082015160e060a085015261561760e0850182615226565b905060c083015184820360c0860152611220828261512f565b602081526000614a0360208301846155bc565b60006020828403121561565557600080fd5b5051919050565b600082601f83011261566d57600080fd5b8151602061567d614d0983614cc5565b82815260059290921b8401810191818101908684111561569c57600080fd5b8286015b84811015614d5157805183529183019183016156a0565b600080604083850312156156ca57600080fd5b82516001600160401b03808211156156e157600080fd5b818501915085601f8301126156f557600080fd5b81516020615705614d0983614cc5565b82815260059290921b8401810191818101908984111561572457600080fd5b948201945b8386101561574b57855161573c81614876565b82529482019490820190615729565b9188015191965090935050508082111561576457600080fd5b506151258582860161565c565b600082198211156157845761578461530e565b500190565b60008282101561579b5761579b61530e565b500390565b6001600160a01b039384168152919092166020820152604081019190915260600190565b828152604060208201526000614ea760408301846155bc565b6000602082840312156157ef57600080fd5b8135614a0381614ca8565b80546001600160a01b0319166001600160a01b0392909216919091179055565b813561582581614876565b61582f81836157fa565b5060018101602083013561584281614876565b61584c81836157fa565b50604083013561585b81614ca8565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b60006158893683614db7565b92915050565b6020808252606e908201526000805160206159b583398151915260408201527f645769746864726177616c3a207769746864726177616c44656c6179426c6f6360608201527f6b7320706572696f6420686173206e6f74207965742070617373656420666f7260808201526d207468697320737472617465677960901b60a082015260c00190565b82815260006020604081840152835180604085015260005b8181101561594b5785810183015185820160600152820161592f565b8181111561595d576000606083870101525b50601f01601f191692909201606001949350505050565b60006020828403121561598657600080fd5b81516001600160e01b031981168114614a0357600080fd5b634e487b7160e01b600052602160045260246000fdfe44656c65676174696f6e4d616e616765722e5f636f6d706c6574655175657565a26469706673582212203a9863b190b0abcf799891a42203a11c6933a165f6897ec6ac670f95b48c927b64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0xa82ff9afd8f496c3d6ac40e2a0f282e47488cfc9":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100415760003560e01c80632702747d14610046578063793e1c8e1461006f5780637be6aa6b14610090575b600080fd5b61005961005436600461023e565b6100a3565b6040516100669190610277565b60405180910390f35b61007861dead81565b6040516001600160a01b039091168152602001610066565b61005961009e3660046102c4565b6100fd565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166333cfb7b760e01b1790526060906100f3848261013a565b9150505b92915050565b6040805160048152602481019091526020810180516001600160e01b031663e481af9d60e01b179052606090610133838261013a565b9392505050565b6060600080846001600160a01b03168460405161015791906102e1565b600060405180830381855afa9150503d8060008114610192576040519150601f19603f3d011682016040523d82523d6000602084013e610197565b606091505b50915091508180156101aa575060008151115b156101cc57808060200190518101906101c39190610342565b925050506100f7565b6040805160018082528183019092526000916020808301908036833701905050905061dead8160008151811061020457610204610407565b6001600160a01b039092166020928302919091019091015292506100f7915050565b6001600160a01b038116811461023b57600080fd5b50565b6000806040838503121561025157600080fd5b823561025c81610226565b9150602083013561026c81610226565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156102b85783516001600160a01b031683529284019291840191600101610293565b50909695505050505050565b6000602082840312156102d657600080fd5b813561013381610226565b6000825160005b8181101561030257602081860181015185830152016102e8565b81811115610311576000828501525b509190910192915050565b634e487b7160e01b600052604160045260246000fd5b805161033d81610226565b919050565b6000602080838503121561035557600080fd5b825167ffffffffffffffff8082111561036d57600080fd5b818501915085601f83011261038157600080fd5b8151818111156103935761039361031c565b8060051b604051601f19603f830116810181811085821117156103b8576103b861031c565b6040529182528482019250838101850191888311156103d657600080fd5b938501935b828510156103fb576103ec85610332565b845293850193928501926103db565b98975050505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220e3e34ad152bd88a05fcf1dad9df4581798acdafb958b376a210422ed18bff22564736f6c634300080c0033","storage":{}},"0xb7278a61aa25c888815afc32ad3cc52ff24fe575":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100625760003560e01c806331b36bd9146100675780633563b0d1146100905780634d2b57fe146100b05780634f739f74146100d05780635c155662146100f0578063cefdc1d414610110575b600080fd5b61007a6100753660046113fa565b610131565b60405161008791906114e8565b60405180910390f35b6100a361009e366004611524565b61024d565b604051610087919061167f565b6100c36100be3660046116f8565b6106e3565b6040516100879190611747565b6100e36100de3660046117df565b6107f8565b60405161008791906118d7565b6101036100fe366004611992565b610f22565b60405161008791906119f5565b61012361011e366004611a2d565b6110ea565b604051610087929190611a64565b606081516001600160401b0381111561014c5761014c611391565b604051908082528060200260200182016040528015610175578160200160208202803683370190505b50905060005b825181101561024657836001600160a01b03166313542a4e8483815181106101a5576101a5611a85565b60200260200101516040518263ffffffff1660e01b81526004016101d891906001600160a01b0391909116815260200190565b602060405180830381865afa1580156101f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102199190611a9b565b82828151811061022b5761022b611a85565b602090810291909101015261023f81611aca565b905061017b565b5092915050565b60606000846001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa15801561028f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b39190611ae5565b90506000856001600160a01b0316639e9923c26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103199190611ae5565b90506000866001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037f9190611ae5565b9050600086516001600160401b0381111561039c5761039c611391565b6040519080825280602002602001820160405280156103cf57816020015b60608152602001906001900390816103ba5790505b50905060005b87518110156106d75760008882815181106103f2576103f2611a85565b0160200151604051638902624560e01b815260f89190911c6004820181905263ffffffff8a16602483015291506000906001600160a01b03871690638902624590604401600060405180830381865afa158015610453573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261047b9190810190611b02565b905080516001600160401b0381111561049657610496611391565b6040519080825280602002602001820160405280156104e157816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816104b45790505b508484815181106104f4576104f4611a85565b602002602001018190525060005b81518110156106c1576040518060600160405280876001600160a01b03166347b314e885858151811061053757610537611a85565b60200260200101516040518263ffffffff1660e01b815260040161055d91815260200190565b602060405180830381865afa15801561057a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059e9190611ae5565b6001600160a01b031681526020018383815181106105be576105be611a85565b60200260200101518152602001896001600160a01b031663fa28c6278585815181106105ec576105ec611a85565b60209081029190910101516040516001600160e01b031960e084901b168152600481019190915260ff8816602482015263ffffffff8f166044820152606401602060405180830381865afa158015610648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066c9190611b92565b6001600160601b031681525085858151811061068a5761068a611a85565b602002602001015182815181106106a3576106a3611a85565b602002602001018190525080806106b990611aca565b915050610502565b50505080806106cf90611aca565b9150506103d5565b50979650505050505050565b606081516001600160401b038111156106fe576106fe611391565b604051908082528060200260200182016040528015610727578160200160208202803683370190505b50905060005b825181101561024657836001600160a01b031663296bb06484838151811061075757610757611a85565b60200260200101516040518263ffffffff1660e01b815260040161077d91815260200190565b602060405180830381865afa15801561079a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107be9190611ae5565b8282815181106107d0576107d0611a85565b6001600160a01b03909216602092830291909101909101526107f181611aca565b905061072d565b6108236040518060800160405280606081526020016060815260200160608152602001606081525090565b6000876001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015610863573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108879190611ae5565b90506108b46040518060800160405280606081526020016060815260200160608152602001606081525090565b6040516361c8a12f60e11b81526001600160a01b038a169063c391425e906108e4908b9089908990600401611bbb565b600060405180830381865afa158015610901573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109299190810190611c05565b81526040516340e03a8160e11b81526001600160a01b038316906381c075029061095b908b908b908b90600401611cbc565b600060405180830381865afa158015610978573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109a09190810190611c05565b6040820152856001600160401b038111156109bd576109bd611391565b6040519080825280602002602001820160405280156109f057816020015b60608152602001906001900390816109db5790505b50606082015260005b60ff8116871115610e33576000856001600160401b03811115610a1e57610a1e611391565b604051908082528060200260200182016040528015610a47578160200160208202803683370190505b5083606001518360ff1681518110610a6157610a61611a85565b602002602001018190525060005b86811015610d335760008c6001600160a01b03166304ec63518a8a85818110610a9a57610a9a611a85565b905060200201358e88600001518681518110610ab857610ab8611a85565b60200260200101516040518463ffffffff1660e01b8152600401610af59392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015610b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b369190611ce5565b90506001600160c01b038116610bde5760405162461bcd60e51b815260206004820152605c60248201527f4f70657261746f7253746174655265747269657665722e676574436865636b5360448201527f69676e617475726573496e64696365733a206f70657261746f72206d7573742060648201527f6265207265676973746572656420617420626c6f636b6e756d62657200000000608482015260a40160405180910390fd5b8a8a8560ff16818110610bf357610bf3611a85565b6001600160c01b03841692013560f81c9190911c600190811614159050610d2057856001600160a01b031663dd9846b98a8a85818110610c3557610c35611a85565b905060200201358d8d8860ff16818110610c5157610c51611a85565b6040516001600160e01b031960e087901b1681526004810194909452919091013560f81c60248301525063ffffffff8f166044820152606401602060405180830381865afa158015610ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccb9190611d0e565b85606001518560ff1681518110610ce457610ce4611a85565b60200260200101518481518110610cfd57610cfd611a85565b63ffffffff9092166020928302919091019091015282610d1c81611aca565b9350505b5080610d2b81611aca565b915050610a6f565b506000816001600160401b03811115610d4e57610d4e611391565b604051908082528060200260200182016040528015610d77578160200160208202803683370190505b50905060005b82811015610df85784606001518460ff1681518110610d9e57610d9e611a85565b60200260200101518181518110610db757610db7611a85565b6020026020010151828281518110610dd157610dd1611a85565b63ffffffff9092166020928302919091019091015280610df081611aca565b915050610d7d565b508084606001518460ff1681518110610e1357610e13611a85565b602002602001018190525050508080610e2b90611d2b565b9150506109f9565b506000896001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e989190611ae5565b60405163354952a360e21b81529091506001600160a01b0382169063d5254a8c90610ecb908b908b908e90600401611d4b565b600060405180830381865afa158015610ee8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f109190810190611c05565b60208301525098975050505050505050565b60606000846001600160a01b031663c391425e84866040518363ffffffff1660e01b8152600401610f54929190611d75565b600060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f999190810190611c05565b9050600084516001600160401b03811115610fb657610fb6611391565b604051908082528060200260200182016040528015610fdf578160200160208202803683370190505b50905060005b85518110156110e057866001600160a01b03166304ec635187838151811061100f5761100f611a85565b60200260200101518786858151811061102a5761102a611a85565b60200260200101516040518463ffffffff1660e01b81526004016110679392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015611084573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a89190611ce5565b6001600160c01b03168282815181106110c3576110c3611a85565b6020908102919091010152806110d881611aca565b915050610fe5565b5095945050505050565b604080516001808252818301909252600091606091839160208083019080368337019050509050848160008151811061112557611125611a85565b60209081029190910101526040516361c8a12f60e11b81526000906001600160a01b0388169063c391425e906111619088908690600401611d75565b600060405180830381865afa15801561117e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111a69190810190611c05565b6000815181106111b8576111b8611a85565b60209081029190910101516040516304ec635160e01b81526004810188905263ffffffff87811660248301529091166044820181905291506000906001600160a01b038916906304ec635190606401602060405180830381865afa158015611224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112489190611ce5565b6001600160c01b03169050600061125e8261127c565b90508161126c8a838a61024d565b9550955050505050935093915050565b606060008061128a84611348565b61ffff166001600160401b038111156112a5576112a5611391565b6040519080825280601f01601f1916602001820160405280156112cf576020820181803683370190505b5090506000805b8251821080156112e7575061010081105b1561133e576001811b93508584161561132e578060f81b83838151811061131057611310611a85565b60200101906001600160f81b031916908160001a9053508160010191505b61133781611aca565b90506112d6565b5090949350505050565b6000805b82156113735761135d600184611d94565b909216918061136b81611dab565b91505061134c565b92915050565b6001600160a01b038116811461138e57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156113cf576113cf611391565b604052919050565b60006001600160401b038211156113f0576113f0611391565b5060051b60200190565b6000806040838503121561140d57600080fd5b823561141881611379565b91506020838101356001600160401b0381111561143457600080fd5b8401601f8101861361144557600080fd5b8035611458611453826113d7565b6113a7565b81815260059190911b8201830190838101908883111561147757600080fd5b928401925b8284101561149e57833561148f81611379565b8252928401929084019061147c565b80955050505050509250929050565b600081518084526020808501945080840160005b838110156114dd578151875295820195908201906001016114c1565b509495945050505050565b6020815260006114fb60208301846114ad565b9392505050565b63ffffffff8116811461138e57600080fd5b803561151f81611502565b919050565b60008060006060848603121561153957600080fd5b833561154481611379565b92506020848101356001600160401b038082111561156157600080fd5b818701915087601f83011261157557600080fd5b81358181111561158757611587611391565b611599601f8201601f191685016113a7565b915080825288848285010111156115af57600080fd5b80848401858401376000848284010152508094505050506115d260408501611514565b90509250925092565b600081518084526020808501808196508360051b810191508286016000805b86811015611671578385038a52825180518087529087019087870190845b8181101561165c57835180516001600160a01b031684528a8101518b8501526040908101516001600160601b03169084015292890192606090920191600101611618565b50509a87019a955050918501916001016115fa565b509298975050505050505050565b6020815260006114fb60208301846115db565b600082601f8301126116a357600080fd5b813560206116b3611453836113d7565b82815260059290921b840181019181810190868411156116d257600080fd5b8286015b848110156116ed57803583529183019183016116d6565b509695505050505050565b6000806040838503121561170b57600080fd5b823561171681611379565b915060208301356001600160401b0381111561173157600080fd5b61173d85828601611692565b9150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156117885783516001600160a01b031683529284019291840191600101611763565b50909695505050505050565b60008083601f8401126117a657600080fd5b5081356001600160401b038111156117bd57600080fd5b6020830191508360208260051b85010111156117d857600080fd5b9250929050565b600080600080600080608087890312156117f857600080fd5b863561180381611379565b9550602087013561181381611502565b945060408701356001600160401b038082111561182f57600080fd5b818901915089601f83011261184357600080fd5b81358181111561185257600080fd5b8a602082850101111561186457600080fd5b60208301965080955050606089013591508082111561188257600080fd5b5061188f89828a01611794565b979a9699509497509295939492505050565b600081518084526020808501945080840160005b838110156114dd57815163ffffffff16875295820195908201906001016118b5565b6000602080835283516080828501526118f360a08501826118a1565b905081850151601f198086840301604087015261191083836118a1565b9250604087015191508086840301606087015261192d83836118a1565b60608801518782038301608089015280518083529194508501925084840190600581901b8501860160005b8281101561198457848783030184526119728287516118a1565b95880195938801939150600101611958565b509998505050505050505050565b6000806000606084860312156119a757600080fd5b83356119b281611379565b925060208401356001600160401b038111156119cd57600080fd5b6119d986828701611692565b92505060408401356119ea81611502565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561178857835183529284019291840191600101611a11565b600080600060608486031215611a4257600080fd5b8335611a4d81611379565b92506020840135915060408401356119ea81611502565b828152604060208201526000611a7d60408301846115db565b949350505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611aad57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000600019821415611ade57611ade611ab4565b5060010190565b600060208284031215611af757600080fd5b81516114fb81611379565b60006020808385031215611b1557600080fd5b82516001600160401b03811115611b2b57600080fd5b8301601f81018513611b3c57600080fd5b8051611b4a611453826113d7565b81815260059190911b82018301908381019087831115611b6957600080fd5b928401925b82841015611b8757835182529284019290840190611b6e565b979650505050505050565b600060208284031215611ba457600080fd5b81516001600160601b03811681146114fb57600080fd5b63ffffffff84168152604060208201819052810182905260006001600160fb1b03831115611be857600080fd5b8260051b8085606085013760009201606001918252509392505050565b60006020808385031215611c1857600080fd5b82516001600160401b03811115611c2e57600080fd5b8301601f81018513611c3f57600080fd5b8051611c4d611453826113d7565b81815260059190911b82018301908381019087831115611c6c57600080fd5b928401925b82841015611b87578351611c8481611502565b82529284019290840190611c71565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff84168152604060208201526000611cdc604083018486611c93565b95945050505050565b600060208284031215611cf757600080fd5b81516001600160c01b03811681146114fb57600080fd5b600060208284031215611d2057600080fd5b81516114fb81611502565b600060ff821660ff811415611d4257611d42611ab4565b60010192915050565b604081526000611d5f604083018587611c93565b905063ffffffff83166020830152949350505050565b63ffffffff83168152604060208201526000611a7d60408301846114ad565b600082821015611da657611da6611ab4565b500390565b600061ffff80831681811415611dc357611dc3611ab4565b600101939250505056fea2646970667358221220a2edd1846f1c753b288c7cf2dcc7e6716602845aa7f1c341284fa4c0c4a4612064736f6c634300080c0033","storage":{}},"0xb7f8bc63bbcad18155201308c8f3540b07f84f5e":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100b3575b600080fd5b61006f61006a3660046102ee565b6100c6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f61010e565b6000546001600160a01b031661007e565b61006f6100c13660046102ee565b610122565b6100ce6101af565b6100d781610209565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6101166101af565b610120600061029e565b565b61012a6101af565b6001600160a01b0381166101945760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61019d8161029e565b50565b6001600160a01b03163b151590565b6000546001600160a01b031633146101205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161018b565b6001600160a01b0381163b61027c5760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6044820152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b606482015260840161018b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561030057600080fd5b81356001600160a01b038116811461031757600080fd5b939250505056fea26469706673582212206dc2c0f44c94866033a128f2fc9ced237ec5b2ff470e7fd3ff0497128c9e0ed764736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x1":"0x610178da211fef7d417bc0e6fed39f05609ad788"}},"0xc5a5c42992decbae36851359345fe25997f5c42d":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0xe7f1725e7734ce288f8367e1bb143e90bb3f05120001","0x1":"0x0","0x32":"0x9635f643e140090a9a8dcd712ed6285858cebef","0x64":"0xde0b6b3a7640000","0x65":"0x3635c9adc5dea00000","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x7a2088a1bfc9d81c55368ae168c2c02570cb814f","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0x97":"0x831f01b2aeb61d5d8c019704e62c25763057a8806c5c790bc8b4c99ee54ac8a7","0x9d":"0xa","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xa51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xdc64a140aa3e981100a9beca4e685f962f0cf6c9":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x97":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x98":"0x0","0xc9":"0xd65ac9700cec4e530497617d02afdf0d5de3ed18466aca1578edcbce0d40ee16","0xcb":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xdcd1bf9a1b36ce34237eeafef220932846bcd82","0x3d2729dff03bf559da35a983e55814217363c2a44a7ea59bdf688ab8754ea49d":"0x1","0x6e45a9ad53caf7293849c96e5070a246e20a7cc2986b7660b3fb63e30ab898fc":"0x0","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806346fbf68e146100515780638568520614610089578063ce5484281461009e578063eab66d7a146100b1575b600080fd5b61007461005f366004610313565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009c610097366004610335565b6100dc565b005b61009c6100ac366004610313565b61011d565b6001546100c4906001600160a01b031681565b6040516001600160a01b039091168152602001610080565b6001546001600160a01b0316331461010f5760405162461bcd60e51b815260040161010690610371565b60405180910390fd5b6101198282610153565b5050565b6001546001600160a01b031633146101475760405162461bcd60e51b815260040161010690610371565b61015081610220565b50565b6001600160a01b0382166101bf5760405162461bcd60e51b815260206004820152602d60248201527f50617573657252656769737472792e5f7365745061757365723a207a65726f2060448201526c1859191c995cdcc81a5b9c1d5d609a1b6064820152608401610106565b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b03811661028e5760405162461bcd60e51b815260206004820152602f60248201527f50617573657252656769737472792e5f736574556e7061757365723a207a657260448201526e1bc81859191c995cdcc81a5b9c1d5d608a1b6064820152608401610106565b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461030e57600080fd5b919050565b60006020828403121561032557600080fd5b61032e826102f7565b9392505050565b6000806040838503121561034857600080fd5b610351836102f7565b91506020830135801515811461036657600080fd5b809150509250929050565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b60608201526080019056fea2646970667358221220518767f02bbe792c716d0287095ada64b05cd36824c2ecc66bcd5c5ebe061cd664736f6c634300080c0033","storage":{"0x1":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722":"0x1"}},"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266":{"nonce":57,"balance":"0x21e197e7f576f0e4457","code":"0x","storage":{}},"0xf5059a5d33d5853360d16c683c16e67980206f36":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x70e0ba845a1a0f2da3359c97e0285013525ffc49","0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff":"0x1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x9e545e3c0baab3e08cdfd552c960a1050f373042","0xcfb339bd1c51c488f6134f4ac63d1594afad827b3401c3fc51ed1da74a8ca14e":"0x7"}}},"best_block_number":"0xb"} \ No newline at end of file +{"block":{"number":"0xb","coinbase":"0x0000000000000000000000000000000000000000","timestamp":"0x66ec6ac6","gas_limit":"0x1c9c380","basefee":"0x13be3b0e","difficulty":"0x0","prevrandao":"0x0000000000000000000000000000000000000000000000000000000000000000","blob_excess_gas_and_price":{"excess_blob_gas":0,"blob_gasprice":1}},"accounts":{"0x0000000000000000000000000000000000000000":{"nonce":0,"balance":"0x1f1eccb","code":"0x","storage":{}},"0x0165878a594ca255338adfa4d48449f69242eb8f":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0xc9":"0x94af000f6f71feb2b8401e668d95fd208038580e89d240930f90ba827aa34858","0xcb":"0x3e80000000000001c2018a0f92ad9645385e8a8f3db7d0f6cf7abbb0ad4","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xb306bf915c4d645ff596e518faf3f9669b97016","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x09635f643e140090a9a8dcd712ed6285858cebef":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061007d5760003560e01c806340c10f191161005b57806340c10f19146100d257806370a08231146100e7578063a9059cbb14610110578063dd62ed3e1461012357600080fd5b8063095ea7b31461008257806318160ddd146100ad57806323b872dd146100bf575b600080fd5b610098610090366004610410565b600192915050565b60405190151581526020015b60405180910390f35b6002545b6040519081526020016100a4565b6100986100cd36600461043a565b61015c565b6100e56100e0366004610410565b610173565b005b6100b16100f5366004610476565b6001600160a01b031660009081526020819052604090205490565b61009861011e366004610410565b610181565b6100b1610131366004610498565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600061016984848461018b565b5060019392505050565b61017d8282610335565b5050565b6000336101698185855b6001600160a01b0383166101f45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084015b60405180910390fd5b6001600160a01b0382166102565760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016101eb565b6001600160a01b0383166000908152602081905260409020548111156102cd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016101eb565b6001600160a01b038381166000818152602081815260408083208054879003905593861680835291849020805486019055925184815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b03821661038b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016101eb565b806002600082825461039d91906104cb565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b80356001600160a01b038116811461040b57600080fd5b919050565b6000806040838503121561042357600080fd5b61042c836103f4565b946020939093013593505050565b60008060006060848603121561044f57600080fd5b610458846103f4565b9250610466602085016103f4565b9150604084013590509250925092565b60006020828403121561048857600080fd5b610491826103f4565b9392505050565b600080604083850312156104ab57600080fd5b6104b4836103f4565b91506104c2602084016103f4565b90509250929050565b600082198211156104ec57634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220adda763858b2ee86f27467db7ec8b893c350cd0ddfa605ad6608601ca5e1cf3664736f6c634300080c0033","storage":{}},"0x0b306bf915c4d645ff596e518faf3f9669b97016":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106102895760003560e01c80636d21117e1161015c578063bf21a8aa116100ce578063f2fde38b11610087578063f2fde38b1461071c578063f698da251461072f578063f8cd844814610737578063fabc1cbc1461074a578063fbf1e2c11461075d578063fce36c7d1461077057600080fd5b8063bf21a8aa14610667578063c46db6061461068e578063d4540a55146106bc578063e221b245146106cf578063e810ce21146106e2578063ea4d3c9b146106f557600080fd5b8063886f119511610120578063886f1195146105ce5780638da5cb5b146105e15780639104c319146105f25780639d45c2811461060d578063a0169ddd14610634578063bb7e451f1461064757600080fd5b80636d21117e14610552578063715018a6146105805780637b8f8b0514610588578063863cb9a914610590578063865c6953146105a357600080fd5b806337838ed01161020057806358baaa3e116101b957806358baaa3e146104c4578063595c6a67146104d75780635971b3f8146104df5780635ac86ab7146105145780635c975abb146105375780635e9d83481461053f57600080fd5b806337838ed01461042257806339b70e38146104495780633a8c0786146104705780633ccc861d146104875780633efe1db61461049a5780634d18cc35146104ad57600080fd5b8063131433b411610252578063131433b414610352578063136439dd14610379578063149bc8721461038c57806322f19a64146103ad5780632b9f64a4146103ce57806336af41fa1461040f57600080fd5b806218572c1461028e57806304a0c502146102c6578063092db007146103025780630eb383451461032a57806310d67a2f1461033f575b600080fd5b6102b161029c366004613120565b60d16020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6102ed7f0000000000000000000000000000000000000000000000000000000000278d0081565b60405163ffffffff90911681526020016102bd565b60cb5461031790600160e01b900461ffff1681565b60405161ffff90911681526020016102bd565b61033d61033836600461314b565b610783565b005b61033d61034d366004613120565b610805565b6102ed7f0000000000000000000000000000000000000000000000000000000065fb788081565b61033d610387366004613184565b6108c1565b61039f61039a3660046131b5565b610a00565b6040519081526020016102bd565b6103176103bb3660046131d1565b505060cb54600160e01b900461ffff1690565b6103f76103dc366004613120565b60cc602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102bd565b61033d61041d3660046131ff565b610a76565b6102ed7f000000000000000000000000000000000000000000000000000000000076a70081565b6103f77f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b60cb546102ed90600160a01b900463ffffffff1681565b61033d610495366004613287565b610cb0565b61033d6104a83660046132e7565b611065565b60cb546102ed90600160c01b900463ffffffff1681565b61033d6104d2366004613313565b611365565b61033d611376565b6104f26104ed366004613184565b61143d565b6040805193845263ffffffff92831660208501529116908201526060016102bd565b6102b161052236600461332e565b606654600160ff9092169190911b9081161490565b60665461039f565b6102b161054d366004613351565b61147d565b6102b1610560366004613386565b60cf60209081526000928352604080842090915290825290205460ff1681565b61033d6114fb565b60ca5461039f565b61033d61059e366004613120565b61150f565b61039f6105b13660046131d1565b60cd60209081526000928352604080842090915290825290205481565b6065546103f7906001600160a01b031681565b6033546001600160a01b03166103f7565b6103f773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6102ed7f0000000000000000000000000000000000000000000000000000000000093a8081565b61033d610642366004613120565b611520565b61039f610655366004613120565b60ce6020526000908152604090205481565b6102ed7f00000000000000000000000000000000000000000000000000000000005c490081565b6102b161069c366004613386565b60d060209081526000928352604080842090915290825290205460ff1681565b61033d6106ca3660046133cf565b61157f565b61033d6106dd366004613442565b6116c7565b6102ed6106f0366004613184565b6116d8565b6103f77f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b61033d61072a366004613120565b6117ba565b61039f611830565b61039f6107453660046131b5565b61186e565b61033d610758366004613184565b61187f565b60cb546103f7906001600160a01b031681565b61033d61077e3660046131ff565b6119db565b61078b611b5a565b6001600160a01b038216600081815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b0391909116600090815260d160205260409020805460ff1916911515919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087c919061345d565b6001600160a01b0316336001600160a01b0316146108b55760405162461bcd60e51b81526004016108ac9061347a565b60405180910390fd5b6108be81611bb4565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092d91906134c4565b6109495760405162461bcd60e51b81526004016108ac906134e1565b606654818116146109c25760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016108ac565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600080610a106020840184613120565b8360200135604051602001610a599392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b60665460019060029081161415610a9f5760405162461bcd60e51b81526004016108ac90613529565b33600090815260d1602052604090205460ff16610b3e5760405162461bcd60e51b815260206004820152605160248201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f60448201527f7420612076616c69642063726561746552657761726473466f72416c6c53756260648201527036b4b9b9b4b7b71039bab136b4ba3a32b960791b608482015260a4016108ac565b60026097541415610b615760405162461bcd60e51b81526004016108ac90613560565b600260975560005b82811015610ca55736848483818110610b8457610b84613597565b9050602002810190610b9691906135ad565b33600081815260ce60209081526040808320549051949550939192610bc192909185918791016136f2565b604051602081830303815290604052805190602001209050610be283611cab565b33600090815260d0602090815260408083208484529091529020805460ff19166001908117909155610c15908390613738565b33600081815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf27048290610c5d908890613750565b60405180910390a4610c8f333060408601803590610c7e9060208901613120565b6001600160a01b0316929190612483565b5050508080610c9d90613763565b915050610b69565b505060016097555050565b60665460029060049081161415610cd95760405162461bcd60e51b81526004016108ac90613529565b60026097541415610cfc5760405162461bcd60e51b81526004016108ac90613560565b6002609755600060ca610d126020860186613313565b63ffffffff1681548110610d2857610d28613597565b6000918252602091829020604080516060810182526002909302909101805483526001015463ffffffff808216948401949094526401000000009004909216918101919091529050610d7a84826124f4565b6000610d8c6080860160608701613120565b6001600160a01b03808216600090815260cc60205260409020549192501680610db25750805b336001600160a01b03821614610e305760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063616c6c6572206973206e6f742076616c696420636c61696d65720000000060648201526084016108ac565b60005b610e4060a088018861377e565b90508110156110575736610e5760e08901896137cf565b83818110610e6757610e67613597565b6001600160a01b038716600090815260cd602090815260408083209302949094019450929091508290610e9c90850185613120565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905080826020013511610f565760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063756d756c61746976654561726e696e6773206d75737420626520677420746064820152741a185b8818dd5b5d5b185d1a5d9950db185a5b5959605a1b608482015260a4016108ac565b6000610f66826020850135613819565b6001600160a01b038716600090815260cd60209081526040822092935085018035929190610f949087613120565b6001600160a01b0316815260208082019290925260400160002091909155610fd6908a908390610fc690870187613120565b6001600160a01b0316919061279d565b86516001600160a01b03808b1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce319061101a6020890189613120565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050808061104f90613763565b915050610e33565b505060016097555050505050565b6066546003906008908116141561108e5760405162461bcd60e51b81526004016108ac90613529565b60cb546001600160a01b031633146111055760405162461bcd60e51b815260206004820152603460248201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f6044820152733a103a3432903932bbb0b93239aab83230ba32b960611b60648201526084016108ac565b60cb5463ffffffff600160c01b9091048116908316116111a15760405162461bcd60e51b815260206004820152604b60248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a206e60448201527f657720726f6f74206d75737420626520666f72206e657765722063616c63756c60648201526a185d1959081c195c9a5bd960aa1b608482015260a4016108ac565b428263ffffffff161061123a5760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a207260448201527f65776172647343616c63756c6174696f6e456e6454696d657374616d702063616064820152746e6e6f7420626520696e207468652066757475726560581b608482015260a4016108ac565b60ca5460cb5460009061125a90600160a01b900463ffffffff1642613830565b6040805160608101825287815263ffffffff878116602080840182815286841685870181815260ca805460018101825560009190915296517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029098029788015591517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee29096018054925196861667ffffffffffffffff19909316929092176401000000009686169690960295909517905560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b61136d611b5a565b6108be816127cd565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156113be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e291906134c4565b6113fe5760405162461bcd60e51b81526004016108ac906134e1565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60ca818154811061144d57600080fd5b60009182526020909120600290910201805460019091015490915063ffffffff8082169164010000000090041683565b60006114f38260ca6114926020830183613313565b63ffffffff16815481106114a8576114a8613597565b6000918252602091829020604080516060810182526002909302909101805483526001015463ffffffff808216948401949094526401000000009004909216918101919091526124f4565b506001919050565b611503611b5a565b61150d600061283e565b565b611517611b5a565b6108be81612890565b33600081815260cc602052604080822080546001600160a01b031981166001600160a01b038781169182179093559251911692839185917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca31291a4505050565b600054610100900460ff161580801561159f5750600054600160ff909116105b806115b95750303b1580156115b9575060005460ff166001145b61161c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108ac565b6000805460ff19166001179055801561163f576000805461ff0019166101001790555b6116476128ec565b60c9556116548686612983565b61165d8761283e565b61166684612890565b61166f836127cd565b61167882612a6d565b80156116be576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6116cf611b5a565b6108be81612a6d565b60ca546000905b63ffffffff81161561174b578260ca6116f9600184613858565b63ffffffff168154811061170f5761170f613597565b906000526020600020906002020160000154141561173957611732600182613858565b9392505050565b806117438161387d565b9150506116df565b5060405162461bcd60e51b815260206004820152603760248201527f52657761726473436f6f7264696e61746f722e676574526f6f74496e6465784660448201527f726f6d486173683a20726f6f74206e6f7420666f756e6400000000000000000060648201526084016108ac565b6117c2611b5a565b6001600160a01b0381166118275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108ac565b6108be8161283e565b60007f0000000000000000000000000000000000000000000000000000000000007a69461415611861575060c95490565b6118696128ec565b905090565b60006001610a106020840184613120565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f6919061345d565b6001600160a01b0316336001600160a01b0316146119265760405162461bcd60e51b81526004016108ac9061347a565b6066541981196066541916146119a45760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016108ac565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016109f5565b60665460009060019081161415611a045760405162461bcd60e51b81526004016108ac90613529565b60026097541415611a275760405162461bcd60e51b81526004016108ac90613560565b600260975560005b82811015610ca55736848483818110611a4a57611a4a613597565b9050602002810190611a5c91906135ad565b33600081815260ce60209081526040808320549051949550939192611a8792909185918791016136f2565b604051602081830303815290604052805190602001209050611aa883611cab565b33600090815260cf602090815260408083208484529091529020805460ff19166001908117909155611adb908390613738565b33600081815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e628190611b23908890613750565b60405180910390a4611b44333060408601803590610c7e9060208901613120565b5050508080611b5290613763565b915050611a2f565b6033546001600160a01b0316331461150d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108ac565b6001600160a01b038116611c425760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016108ac565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6000611cb782806137cf565b905011611d1c576040805162461bcd60e51b81526020600482015260248101919091526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a206e6f20737472617465676965732073657460648201526084016108ac565b6000816040013511611d8e5760405162461bcd60e51b815260206004820152604160248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20616d6f756e742063616e6e6f74206265206064820152600360fc1b608482015260a4016108ac565b6f4b3b4ca85a86c47a098a223fffffffff81604001351115611e065760405162461bcd60e51b815260206004820152603f60248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20616d6f756e7420746f6f206c617267650060648201526084016108ac565b63ffffffff7f00000000000000000000000000000000000000000000000000000000005c490016611e3d60a0830160808401613313565b63ffffffff161115611ec25760405162461bcd60e51b815260206004820152605460248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e20657863656564732060648201527326a0ac2fa922aba0a92229afa22aa920aa24a7a760611b608482015260a4016108ac565b7f0000000000000000000000000000000000000000000000000000000000093a80611ef360a0830160808401613313565b611efd91906138b3565b63ffffffff1615611f9d5760405162461bcd60e51b815260206004820152606a60248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e206d7573742062652060648201527f61206d756c7469706c65206f662043414c43554c4154494f4e5f494e54455256608482015269414c5f5345434f4e445360b01b60a482015260c4016108ac565b7f0000000000000000000000000000000000000000000000000000000000093a80611fce6080830160608401613313565b611fd891906138b3565b63ffffffff161561207e5760405162461bcd60e51b815260206004820152607060248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d70206d7560648201527f73742062652061206d756c7469706c65206f662043414c43554c4154494f4e5f60848201526f494e54455256414c5f5345434f4e445360801b60a482015260c4016108ac565b61208e6080820160608301613313565b63ffffffff167f000000000000000000000000000000000000000000000000000000000076a70063ffffffff16426120c69190613819565b1115801561210f57506120df6080820160608301613313565b63ffffffff167f0000000000000000000000000000000000000000000000000000000065fb788063ffffffff1611155b6121895760405162461bcd60e51b815260206004820152605160248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152701bc819985c881a5b881d1a19481c185cdd607a1b608482015260a4016108ac565b6121b963ffffffff7f0000000000000000000000000000000000000000000000000000000000278d001642613738565b6121c96080830160608401613313565b63ffffffff16111561224d5760405162461bcd60e51b815260206004820152605360248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152726f2066617220696e207468652066757475726560681b608482015260a4016108ac565b6000805b61225b83806137cf565b905081101561247e57600061227084806137cf565b8381811061228057612280613597565b6122969260206040909202019081019150613120565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c99091169063663c1de490602401602060405180830381865afa158015612301573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232591906134c4565b8061234c57506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b6123bf5760405162461bcd60e51b815260206004820152604a60248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20696e76616c69642073747261746567792060648201526918dbdb9cda59195c995960b21b608482015260a4016108ac565b806001600160a01b0316836001600160a01b03161061246c5760405162461bcd60e51b815260206004820152606960248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a2073747261746567696573206d757374206260648201527f6520696e20617363656e64696e67206f7264657220746f2068616e646c65206460848201526875706c69636174657360b81b60a482015260c4016108ac565b915061247781613763565b9050612251565b505050565b6040516001600160a01b03808516602483015283166044820152606481018290526124ee9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612ad8565b50505050565b806040015163ffffffff1642101561256d5760405162461bcd60e51b815260206004820152603660248201527f52657761726473436f6f7264696e61746f722e5f636865636b436c61696d3a206044820152751c9bdbdd081b9bdd081858dd1a5d985d1959081e595d60521b60648201526084016108ac565b61257a60c083018361377e565b905061258960a084018461377e565b9050146126135760405162461bcd60e51b815260206004820152604c60248201527f52657761726473436f6f7264696e61746f722e5f636865636b436c61696d3a2060448201527f746f6b656e496e646963657320616e6420746f6b656e50726f6f6673206c656e60648201526b0cee8d040dad2e6dac2e8c6d60a31b608482015260a4016108ac565b61262060e08301836137cf565b905061262f60c084018461377e565b9050146126b75760405162461bcd60e51b815260206004820152604a60248201527f52657761726473436f6f7264696e61746f722e5f636865636b436c61696d3a2060448201527f746f6b656e5472656550726f6f667320616e64206c6561766573206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a4016108ac565b80516126e3906126cd6040850160208601613313565b6126da60408601866138d6565b86606001612baa565b60005b6126f360a084018461377e565b905081101561247e5761278d608084013561271160a086018661377e565b8481811061272157612721613597565b90506020020160208101906127369190613313565b61274360c087018761377e565b8581811061275357612753613597565b905060200281019061276591906138d6565b61277260e08901896137cf565b8781811061278257612782613597565b905060400201612d1e565b61279681613763565b90506126e6565b6040516001600160a01b03831660248201526044810182905261247e90849063a9059cbb60e01b906064016124b7565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb90600090a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6065546001600160a01b03161580156129a457506001600160a01b03821615155b612a265760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016108ac565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2612a6982611bb4565b5050565b60cb546040805161ffff600160e01b9093048316815291831660208301527f8cdc428b0431b82d1619763f443a48197db344ba96905f3949643acd1c863a06910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b6000612b2d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612e6f9092919063ffffffff16565b80519091501561247e5780806020019051810190612b4b91906134c4565b61247e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108ac565b612bb560208361391d565b6001901b8463ffffffff1610612c3f5760405162461bcd60e51b815260206004820152604360248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e65724c656166496e6064820152620c8caf60eb1b608482015260a4016108ac565b6000612c4a82610a00565b9050612c9584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff8916612e86565b612d165760405162461bcd60e51b815260206004820152604660248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e657220636c61696d60648201526510383937b7b360d11b608482015260a4016108ac565b505050505050565b612d2960208361391d565b6001901b8463ffffffff1610612da75760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e4c656166496e6465780000000060648201526084016108ac565b6000612db28261186e565b9050612dfd84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff8916612e86565b612d165760405162461bcd60e51b815260206004820152603f60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e20636c61696d2070726f6f660060648201526084016108ac565b6060612e7e8484600085612e9e565b949350505050565b600083612e94868585612fcf565b1495945050505050565b606082471015612eff5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016108ac565b6001600160a01b0385163b612f565760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108ac565b600080866001600160a01b03168587604051612f72919061395d565b60006040518083038185875af1925050503d8060008114612faf576040519150601f19603f3d011682016040523d82523d6000602084013e612fb4565b606091505b5091509150612fc48282866130d2565b979650505050505050565b600060208451612fdf919061396f565b156130665760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a4016108ac565b8260205b855181116130c95761307d60028561396f565b61309e578160005280860151602052604060002091506002840493506130b7565b8086015160005281602052604060002091506002840493505b6130c2602082613738565b905061306a565b50949350505050565b606083156130e1575081611732565b8251156130f15782518084602001fd5b8160405162461bcd60e51b81526004016108ac9190613983565b6001600160a01b03811681146108be57600080fd5b60006020828403121561313257600080fd5b81356117328161310b565b80151581146108be57600080fd5b6000806040838503121561315e57600080fd5b82356131698161310b565b915060208301356131798161313d565b809150509250929050565b60006020828403121561319657600080fd5b5035919050565b6000604082840312156131af57600080fd5b50919050565b6000604082840312156131c757600080fd5b611732838361319d565b600080604083850312156131e457600080fd5b82356131ef8161310b565b915060208301356131798161310b565b6000806020838503121561321257600080fd5b823567ffffffffffffffff8082111561322a57600080fd5b818501915085601f83011261323e57600080fd5b81358181111561324d57600080fd5b8660208260051b850101111561326257600080fd5b60209290920196919550909350505050565b600061010082840312156131af57600080fd5b6000806040838503121561329a57600080fd5b823567ffffffffffffffff8111156132b157600080fd5b6132bd85828601613274565b92505060208301356131798161310b565b803563ffffffff811681146132e257600080fd5b919050565b600080604083850312156132fa57600080fd5b8235915061330a602084016132ce565b90509250929050565b60006020828403121561332557600080fd5b611732826132ce565b60006020828403121561334057600080fd5b813560ff8116811461173257600080fd5b60006020828403121561336357600080fd5b813567ffffffffffffffff81111561337a57600080fd5b612e7e84828501613274565b6000806040838503121561339957600080fd5b82356133a48161310b565b946020939093013593505050565b80356132e28161310b565b803561ffff811681146132e257600080fd5b60008060008060008060c087890312156133e857600080fd5b86356133f38161310b565b955060208701356134038161310b565b945060408701359350606087013561341a8161310b565b9250613428608088016132ce565b915061343660a088016133bd565b90509295509295509295565b60006020828403121561345457600080fd5b611732826133bd565b60006020828403121561346f57600080fd5b81516117328161310b565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156134d657600080fd5b81516117328161313d565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60008235609e198336030181126135c357600080fd5b9190910192915050565b818352600060208085019450826000805b868110156136325782356135f18161310b565b6001600160a01b03168852828401356bffffffffffffffffffffffff811680821461361a578384fd5b898601525060409788019792909201916001016135de565b50959695505050505050565b60008135601e1983360301811261365457600080fd5b8201803567ffffffffffffffff81111561366d57600080fd5b8060061b360384131561367f57600080fd5b60a0855261369460a0860182602085016135cd565b9150506136a3602084016133b2565b6001600160a01b03166020850152604083810135908501526136c7606084016132ce565b63ffffffff1660608501526136de608084016132ce565b63ffffffff81166080860152509392505050565b60018060a01b0384168152826020820152606060408201526000613719606083018461363e565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561374b5761374b613722565b500190565b602081526000611732602083018461363e565b600060001982141561377757613777613722565b5060010190565b6000808335601e1984360301811261379557600080fd5b83018035915067ffffffffffffffff8211156137b057600080fd5b6020019150600581901b36038213156137c857600080fd5b9250929050565b6000808335601e198436030181126137e657600080fd5b83018035915067ffffffffffffffff82111561380157600080fd5b6020019150600681901b36038213156137c857600080fd5b60008282101561382b5761382b613722565b500390565b600063ffffffff80831681851680830382111561384f5761384f613722565b01949350505050565b600063ffffffff8381169083168181101561387557613875613722565b039392505050565b600063ffffffff82168061389357613893613722565b6000190192915050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff808416806138ca576138ca61389d565b92169190910692915050565b6000808335601e198436030181126138ed57600080fd5b83018035915067ffffffffffffffff82111561390857600080fd5b6020019150368190038213156137c857600080fd5b60008261392c5761392c61389d565b500490565b60005b8381101561394c578181015183820152602001613934565b838111156124ee5750506000910152565b600082516135c3818460208701613931565b60008261397e5761397e61389d565b500690565b60208152600082518060208401526139a2816040850160208701613931565b601f01601f1916919091016040019291505056fe52657761726473436f6f7264696e61746f722e5f76616c696461746552657761a26469706673582212200d2a9250dcdf7eccff848dd9455a337efdd8ac02e415dd44de3502264f250c4964736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x0dcd1bf9a1b36ce34237eeafef220932846bcd82":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106102065760003560e01c80638da5cb5b1161011a578063c6656702116100ad578063df5cf7231161007c578063df5cf72314610515578063e7a050aa1461053c578063f2fde38b1461054f578063f698da2514610562578063fabc1cbc1461056a57600080fd5b8063c6656702146104c9578063cbc2bd62146104dc578063cf756fdf146104ef578063df5b35471461050257600080fd5b8063b1344271116100e9578063b134427114610469578063b5d8b5b814610490578063c4623ea1146104a3578063c608c7f3146104b657600080fd5b80638da5cb5b1461040157806394f649dd14610412578063967fc0d2146104335780639b4da03d1461044657600080fd5b80635ac86ab71161019d5780637a7e0d921161016c5780637a7e0d92146103675780637ecebe0014610392578063886f1195146103b25780638b8aac3c146103c55780638c80d4e5146103ee57600080fd5b80635ac86ab7146103015780635c975abb14610334578063663c1de41461033c578063715018a61461035f57600080fd5b80634665bcda116101d95780634665bcda1461028057806348825e94146102bf5780634e5a4263146102e6578063595c6a67146102f957600080fd5b806310d67a2f1461020b578063136439dd1461022057806320606b701461023357806332e89ace1461026d575b600080fd5b61021e6102193660046129e8565b61057d565b005b61021e61022e366004612a05565b610639565b61025a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b61025a61027b366004612a34565b610778565b6102a77f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681565b6040516001600160a01b039091168152602001610264565b61025a7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61021e6102f4366004612b3d565b610a66565b61021e610a9e565b61032461030f366004612b76565b609854600160ff9092169190911b9081161490565b6040519015158152602001610264565b60985461025a565b61032461034a3660046129e8565b60d16020526000908152604090205460ff1681565b61021e610b65565b61025a610375366004612b99565b60cd60209081526000928352604080842090915290825290205481565b61025a6103a03660046129e8565b60ca6020526000908152604090205481565b6097546102a7906001600160a01b031681565b61025a6103d33660046129e8565b6001600160a01b0316600090815260ce602052604090205490565b61021e6103fc366004612bc7565b610b79565b6033546001600160a01b03166102a7565b6104256104203660046129e8565b610bd2565b604051610264929190612c08565b60cb546102a7906001600160a01b031681565b6103246104543660046129e8565b60d36020526000908152604090205460ff1681565b6102a77f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b61021e61049e366004612cd1565b610d52565b61021e6104b1366004612d13565b610ec6565b61021e6104c4366004612d64565b610f1a565b61021e6104d73660046129e8565b610fd2565b6102a76104ea366004612db7565b610fe3565b61021e6104fd366004612d13565b61101b565b61021e610510366004612de3565b61114f565b6102a77f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b61025a61054a366004612bc7565b611378565b61021e61055d3660046129e8565b611441565b61025a6114b7565b61021e610578366004612a05565b6114f5565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f49190612e4f565b6001600160a01b0316336001600160a01b03161461062d5760405162461bcd60e51b815260040161062490612e6c565b60405180910390fd5b61063681611651565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610681573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a59190612eb6565b6106c15760405162461bcd60e51b815260040161062490612ed3565b6098548181161461073a5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610624565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6098546000908190600190811614156107cf5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610624565b600260655414156108225760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610624565b60026065556001600160a01b038816600090815260d3602052604090205460ff16156108c95760405162461bcd60e51b815260206004820152604a60248201527f53747261746567794d616e616765722e6465706f736974496e746f537472617460448201527f656779576974685369676e61747572653a207468697264207472616e736665726064820152691cc8191a5cd8589b195960b21b608482015260a401610624565b4284101561094b5760405162461bcd60e51b815260206004820152604360248201527f53747261746567794d616e616765722e6465706f736974496e746f537472617460448201527f656779576974685369676e61747572653a207369676e617475726520657870696064820152621c995960ea1b608482015260a401610624565b6001600160a01b03858116600081815260ca602090815260408083205481517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922493810193909352908201939093528b84166060820152928a16608084015260a0830189905260c0830182905260e0830187905290916101000160408051601f1981840301815291815281516020928301206001600160a01b038a16600090815260ca9093529082206001850190559150610a036114b7565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050610a46888288611748565b610a52888c8c8c611907565b60016065559b9a5050505050505050505050565b60cb546001600160a01b03163314610a905760405162461bcd60e51b815260040161062490612f1b565b610a9a8282611ad6565b5050565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190612eb6565b610b265760405162461bcd60e51b815260040161062490612ed3565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610b6d611b44565b610b776000611b9e565b565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610bc15760405162461bcd60e51b815260040161062490612f85565b610bcc838383611bf0565b50505050565b6001600160a01b038116600090815260ce60205260408120546060918291908167ffffffffffffffff811115610c0a57610c0a612a1e565b604051908082528060200260200182016040528015610c33578160200160208202803683370190505b50905060005b82811015610cc4576001600160a01b038616600090815260cd6020908152604080832060ce9092528220805491929184908110610c7857610c78612fe3565b60009182526020808320909101546001600160a01b031683528201929092526040019020548251839083908110610cb157610cb1612fe3565b6020908102919091010152600101610c39565b5060ce6000866001600160a01b03166001600160a01b031681526020019081526020016000208181805480602002602001604051908101604052809291908181526020018280548015610d4057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d22575b50505050509150935093505050915091565b60cb546001600160a01b03163314610d7c5760405162461bcd60e51b815260040161062490612f1b565b8060005b81811015610bcc5760d16000858584818110610d9e57610d9e612fe3565b9050602002016020810190610db391906129e8565b6001600160a01b0316815260208101919091526040016000205460ff1615610ebe57600060d16000868685818110610ded57610ded612fe3565b9050602002016020810190610e0291906129e8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030848483818110610e5d57610e5d612fe3565b9050602002016020810190610e7291906129e8565b6040516001600160a01b03909116815260200160405180910390a1610ebe848483818110610ea257610ea2612fe3565b9050602002016020810190610eb791906129e8565b6000611ad6565b600101610d80565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610f0e5760405162461bcd60e51b815260040161062490612f85565b610bcc84848484611d4c565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610f625760405162461bcd60e51b815260040161062490612f85565b604051636ce5768960e11b81526001600160a01b03858116600483015282811660248301526044820184905284169063d9caed1290606401600060405180830381600087803b158015610fb457600080fd5b505af1158015610fc8573d6000803e3d6000fd5b5050505050505050565b610fda611b44565b61063681611fd9565b60ce6020528160005260406000208181548110610fff57600080fd5b6000918252602090912001546001600160a01b03169150829050565b600054610100900460ff161580801561103b5750600054600160ff909116105b806110555750303b158015611055575060005460ff166001145b6110b85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610624565b6000805460ff1916600117905580156110db576000805461ff0019166101001790555b6110e3612042565b60c9556110f083836120d9565b6110f985611b9e565b61110284611fd9565b8015611148576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60cb546001600160a01b031633146111795760405162461bcd60e51b815260040161062490612f1b565b8281146112025760405162461bcd60e51b815260206004820152604b60248201527f53747261746567794d616e616765722e61646453747261746567696573546f4460448201527f65706f73697457686974656c6973743a206172726179206c656e67746873206460648201526a0de40dcdee840dac2e8c6d60ab1b608482015260a401610624565b8260005b818110156113705760d1600087878481811061122457611224612fe3565b905060200201602081019061123991906129e8565b6001600160a01b0316815260208101919091526040016000205460ff1661136857600160d1600088888581811061127257611272612fe3565b905060200201602081019061128791906129e8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe8686838181106112e2576112e2612fe3565b90506020020160208101906112f791906129e8565b6040516001600160a01b03909116815260200160405180910390a161136886868381811061132757611327612fe3565b905060200201602081019061133c91906129e8565b85858481811061134e5761134e612fe3565b90506020020160208101906113639190612ff9565b611ad6565b600101611206565b505050505050565b6098546000908190600190811614156113cf5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610624565b600260655414156114225760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610624565b600260655561143333868686611907565b600160655595945050505050565b611449611b44565b6001600160a01b0381166114ae5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610624565b61063681611b9e565b60007f0000000000000000000000000000000000000000000000000000000000007a694614156114e8575060c95490565b6114f0612042565b905090565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156c9190612e4f565b6001600160a01b0316336001600160a01b03161461159c5760405162461bcd60e51b815260040161062490612e6c565b60985419811960985419161461161a5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610624565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161076d565b6001600160a01b0381166116df5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610624565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383163b1561186757604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e90611788908690869060040161306e565b602060405180830381865afa1580156117a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c99190613087565b6001600160e01b031916146118625760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610624565b505050565b826001600160a01b031661187b83836121bf565b6001600160a01b0316146118625760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610624565b6001600160a01b038316600090815260d16020526040812054849060ff166119ad5760405162461bcd60e51b815260206004820152604d60248201527f53747261746567794d616e616765722e6f6e6c7953747261746567696573576860448201527f6974656c6973746564466f724465706f7369743a207374726174656779206e6f60648201526c1d081dda1a5d195b1a5cdd1959609a1b608482015260a401610624565b6119c26001600160a01b0385163387866121e3565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303816000875af1158015611a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3591906130b1565b9150611a4386858785611d4c565b604051631452b9d760e11b81526001600160a01b0387811660048301528681166024830152604482018490527f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916906328a573ae90606401600060405180830381600087803b158015611ab557600080fd5b505af1158015611ac9573d6000803e3d6000fd5b5050505050949350505050565b604080516001600160a01b038416815282151560208201527f77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786910160405180910390a16001600160a01b0391909116600090815260d360205260409020805460ff1916911515919091179055565b6033546001600160a01b03163314610b775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610624565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081611c655760405162461bcd60e51b815260206004820152603e60248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a207360448201527f68617265416d6f756e742073686f756c64206e6f74206265207a65726f2100006064820152608401610624565b6001600160a01b03808516600090815260cd602090815260408083209387168352929052205480831115611cf75760405162461bcd60e51b815260206004820152603360248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a20736044820152720d0c2e4ca82dadeeadce840e8dede40d0d2ced606b1b6064820152608401610624565b6001600160a01b03808616600090815260cd602090815260408083209388168352929052208382039081905590831415611d3f57611d35858561223d565b6001915050611d45565b60009150505b9392505050565b6001600160a01b038416611dc85760405162461bcd60e51b815260206004820152603960248201527f53747261746567794d616e616765722e5f6164645368617265733a207374616b60448201527f65722063616e6e6f74206265207a65726f2061646472657373000000000000006064820152608401610624565b80611e345760405162461bcd60e51b815260206004820152603660248201527f53747261746567794d616e616765722e5f6164645368617265733a207368617260448201527565732073686f756c64206e6f74206265207a65726f2160501b6064820152608401610624565b6001600160a01b03808516600090815260cd6020908152604080832093861683529290522054611f45576001600160a01b038416600090815260ce602090815260409091205410611f065760405162461bcd60e51b815260206004820152605060248201527f53747261746567794d616e616765722e5f6164645368617265733a206465706f60448201527f73697420776f756c6420657863656564204d41585f5354414b45525f5354524160648201526f0a88a8eb2be9892a6a8be988a9c8ea8960831b608482015260a401610624565b6001600160a01b03848116600090815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169184169190911790555b6001600160a01b03808516600090815260cd6020908152604080832093861683529290529081208054839290611f7c9084906130e0565b9091555050604080516001600160a01b03868116825285811660208301528416818301526060810183905290517f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a969181900360800190a150505050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6097546001600160a01b03161580156120fa57506001600160a01b03821615155b61217c5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610624565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610a9a82611651565b60008060006121ce858561242f565b915091506121db8161249f565b509392505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610bcc90859061265a565b6001600160a01b038216600090815260ce6020526040812054905b81811015612358576001600160a01b03848116600090815260ce602052604090208054918516918390811061228f5761228f612fe3565b6000918252602090912001546001600160a01b03161415612350576001600160a01b038416600090815260ce6020526040902080546122d0906001906130f8565b815481106122e0576122e0612fe3565b60009182526020808320909101546001600160a01b03878116845260ce909252604090922080549190921691908390811061231d5761231d612fe3565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550612358565b600101612258565b818114156123e05760405162461bcd60e51b815260206004820152604960248201527f53747261746567794d616e616765722e5f72656d6f766553747261746567794660448201527f726f6d5374616b657253747261746567794c6973743a207374726174656779206064820152681b9bdd08199bdd5b9960ba1b608482015260a401610624565b6001600160a01b038416600090815260ce602052604090208054806124075761240761310f565b600082815260209020810160001990810180546001600160a01b031916905501905550505050565b6000808251604114156124665760208301516040840151606085015160001a61245a8782858561272c565b94509450505050612498565b8251604014156124905760208301516040840151612485868383612819565b935093505050612498565b506000905060025b9250929050565b60008160048111156124b3576124b3613125565b14156124bc5750565b60018160048111156124d0576124d0613125565b141561251e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610624565b600281600481111561253257612532613125565b14156125805760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610624565b600381600481111561259457612594613125565b14156125ed5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610624565b600481600481111561260157612601613125565b14156106365760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610624565b60006126af826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166128529092919063ffffffff16565b80519091501561186257808060200190518101906126cd9190612eb6565b6118625760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610624565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156127635750600090506003612810565b8460ff16601b1415801561277b57508460ff16601c14155b1561278c5750600090506004612810565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156127e0573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661280957600060019250925050612810565b9150600090505b94509492505050565b6000806001600160ff1b0383168161283660ff86901c601b6130e0565b90506128448782888561272c565b935093505050935093915050565b60606128618484600085612869565b949350505050565b6060824710156128ca5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610624565b6001600160a01b0385163b6129215760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610624565b600080866001600160a01b0316858760405161293d919061313b565b60006040518083038185875af1925050503d806000811461297a576040519150601f19603f3d011682016040523d82523d6000602084013e61297f565b606091505b509150915061298f82828661299a565b979650505050505050565b606083156129a9575081611d45565b8251156129b95782518084602001fd5b8160405162461bcd60e51b81526004016106249190613157565b6001600160a01b038116811461063657600080fd5b6000602082840312156129fa57600080fd5b8135611d45816129d3565b600060208284031215612a1757600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c08789031215612a4d57600080fd5b8635612a58816129d3565b95506020870135612a68816129d3565b9450604087013593506060870135612a7f816129d3565b92506080870135915060a087013567ffffffffffffffff80821115612aa357600080fd5b818901915089601f830112612ab757600080fd5b813581811115612ac957612ac9612a1e565b604051601f8201601f19908116603f01168101908382118183101715612af157612af1612a1e565b816040528281528c6020848701011115612b0a57600080fd5b8260208601602083013760006020848301015280955050505050509295509295509295565b801515811461063657600080fd5b60008060408385031215612b5057600080fd5b8235612b5b816129d3565b91506020830135612b6b81612b2f565b809150509250929050565b600060208284031215612b8857600080fd5b813560ff81168114611d4557600080fd5b60008060408385031215612bac57600080fd5b8235612bb7816129d3565b91506020830135612b6b816129d3565b600080600060608486031215612bdc57600080fd5b8335612be7816129d3565b92506020840135612bf7816129d3565b929592945050506040919091013590565b604080825283519082018190526000906020906060840190828701845b82811015612c4a5781516001600160a01b031684529284019290840190600101612c25565b5050508381038285015284518082528583019183019060005b81811015612c7f57835183529284019291840191600101612c63565b5090979650505050505050565b60008083601f840112612c9e57600080fd5b50813567ffffffffffffffff811115612cb657600080fd5b6020830191508360208260051b850101111561249857600080fd5b60008060208385031215612ce457600080fd5b823567ffffffffffffffff811115612cfb57600080fd5b612d0785828601612c8c565b90969095509350505050565b60008060008060808587031215612d2957600080fd5b8435612d34816129d3565b93506020850135612d44816129d3565b92506040850135612d54816129d3565b9396929550929360600135925050565b60008060008060808587031215612d7a57600080fd5b8435612d85816129d3565b93506020850135612d95816129d3565b9250604085013591506060850135612dac816129d3565b939692955090935050565b60008060408385031215612dca57600080fd5b8235612dd5816129d3565b946020939093013593505050565b60008060008060408587031215612df957600080fd5b843567ffffffffffffffff80821115612e1157600080fd5b612e1d88838901612c8c565b90965094506020870135915080821115612e3657600080fd5b50612e4387828801612c8c565b95989497509550505050565b600060208284031215612e6157600080fd5b8151611d45816129d3565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215612ec857600080fd5b8151611d4581612b2f565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526044908201527f53747261746567794d616e616765722e6f6e6c7953747261746567795768697460408201527f656c69737465723a206e6f742074686520737472617465677957686974656c6960608201526339ba32b960e11b608082015260a00190565b602080825260409082018190527f53747261746567794d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561300b57600080fd5b8135611d4581612b2f565b60005b83811015613031578181015183820152602001613019565b83811115610bcc5750506000910152565b6000815180845261305a816020860160208601613016565b601f01601f19169290920160200192915050565b8281526040602082015260006128616040830184613042565b60006020828403121561309957600080fd5b81516001600160e01b031981168114611d4557600080fd5b6000602082840312156130c357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156130f3576130f36130ca565b500190565b60008282101561310a5761310a6130ca565b500390565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000825161314d818460208701613016565b9190910192915050565b602081526000611d45602083018461304256fea264697066735822122078a77ee71704c26ce62db1149f0906c813c896ae6dd2117779e31e5f8a79defd64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x14dc79964da2c08b23698b3d3cc7ca32193d9955":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x15d34aaf54267db7d7c367839aaf71a00a2c6a65":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x1613beb3b2c4f22ee086b2b38c1476a3ce7f78e8":{"nonce":1,"balance":"0xde0b6b3a7640000","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106a6565b610118565b61005b6100933660046106c1565b610155565b3480156100a457600080fd5b506100ad6101bc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106a6565b6101ed565b3480156100f557600080fd5b506100ad61020d565b61010661022e565b6101166101116102c3565b6102cd565b565b6101206102f1565b6001600160a01b0316330361014d5761014a81604051806020016040528060008152506000610324565b50565b61014a6100fe565b61015d6102f1565b6001600160a01b031633036101b4576101af8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610324915050565b505050565b6101af6100fe565b60006101c66102f1565b6001600160a01b031633036101e2576101dd6102c3565b905090565b6101ea6100fe565b90565b6101f56102f1565b6001600160a01b0316330361014d5761014a8161034f565b60006102176102f1565b6001600160a01b031633036101e2576101dd6102f1565b6102366102f1565b6001600160a01b031633036101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101dd6103a3565b3660008037600080366000845af43d6000803e8080156102ec573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b61032d836103cb565b60008251118061033a5750805b156101af57610349838361040b565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103786102f1565b604080516001600160a01b03928316815291841660208301520160405180910390a161014a81610437565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610315565b6103d4816104e0565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061043083836040518060600160405280602781526020016107b860279139610574565b9392505050565b6001600160a01b03811661049c5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016102ba565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b61054d5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016102ba565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6104bf565b60606001600160a01b0384163b6105dc5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016102ba565b600080856001600160a01b0316856040516105f79190610768565b600060405180830381855af49150503d8060008114610632576040519150601f19603f3d011682016040523d82523d6000602084013e610637565b606091505b5091509150610647828286610651565b9695505050505050565b60608315610660575081610430565b8251156106705782518084602001fd5b8160405162461bcd60e51b81526004016102ba9190610784565b80356001600160a01b03811681146106a157600080fd5b919050565b6000602082840312156106b857600080fd5b6104308261068a565b6000806000604084860312156106d657600080fd5b6106df8461068a565b9250602084013567ffffffffffffffff808211156106fc57600080fd5b818601915086601f83011261071057600080fd5b81358181111561071f57600080fd5b87602082850101111561073157600080fd5b6020830194508093505050509250925092565b60005b8381101561075f578181015183820152602001610747565b50506000910152565b6000825161077a818460208701610744565b9190910192915050565b60208152600082518060208401526107a3816040850160208701610744565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206f42262012bb1d1a07475f68d95d58d18353d78d57c71d0a11845bbf297d596564736f6c63430008180033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0xcb":"0x15d34aaf54267db7d7c367839aaf71a00a2c6a65","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x809d550fca64d94bd9f66e60752a544199cfac3d","0x8381bda9e63c8f87d23ed12b247ddf76dabbcf462f387619b957f4bfb071aada":"0xde0b6b3a7640000","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x9e545e3c0baab3e08cdfd552c960a1050f373042"}},"0x2279b7a0a67db372996a5fab50d91eaa73d2ebe6":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0x97":"0x0","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x9a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x23618e81e3f5cdf7f54c3d65f7fbc0abf5b21e8f":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x2bdcc0de6be1f7d2ee689a0342d76f52e8efaba3":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061016a5760003560e01c806363acc14d116100d15780638da5cb5b1161008a578063c891091311610064578063c8910913146104ae578063df5ffbc614610505578063f2fde38b14610525578063f83d08ba1461054557600080fd5b80638da5cb5b1461045b578063953ef80714610479578063a69df4b51461049957600080fd5b806363acc14d146103b3578063715018a6146103d357806379225985146103e85780637cb3805a146103fe5780638456cb591461041e57806384b0196e1461043357600080fd5b80634f1ef286116101235780634f1ef286146102fb57806352be56291461030e57806352d1902d1461032e57806358b96e27146103435780635a3f631a1461037b5780635c975abb1461039057600080fd5b806317d89c4e146101e95780632df4e21e146102355780632e1a7d4d1461026b5780633659cfe61461028d5780633f4ba83a146102ad5780634d5431ea146102c257600080fd5b366101e45733600090815260fd60205260408120805434929061018e908490612100565b909155505033600081815260fd602052604080822060010191909155517f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be770906101da9034815260200190565b60405180910390a2005b600080fd5b3480156101f557600080fd5b50610222610204366004612128565b6001600160a01b0316600090815260fd602052604090206002015490565b6040519081526020015b60405180910390f35b34801561024157600080fd5b50610222610250366004612128565b6001600160a01b0316600090815260fd602052604090205490565b34801561027757600080fd5b5061028b610286366004612145565b61055a565b005b34801561029957600080fd5b5061028b6102a8366004612128565b610697565b3480156102b957600080fd5b5061028b610776565b3480156102ce57600080fd5b506102226102dd366004612128565b6001600160a01b0316600090815260fd602052604090206001015490565b61028b610309366004612174565b610788565b34801561031a57600080fd5b5061028b610329366004612145565b610858565b34801561033a57600080fd5b506102226108fc565b34801561034f57600080fd5b5060fc54610363906001600160a01b031681565b6040516001600160a01b03909116815260200161022c565b34801561038757600080fd5b50610222606481565b34801561039c57600080fd5b5060655460ff16604051901515815260200161022c565b3480156103bf57600080fd5b5061028b6103ce366004612238565b6109af565b3480156103df57600080fd5b5061028b610ac3565b3480156103f457600080fd5b5061022260fe5481565b34801561040a57600080fd5b5061028b610419366004612145565b610ad5565b34801561042a57600080fd5b5061028b610ae2565b34801561043f57600080fd5b50610448610af2565b60405161022c97969594939291906122d9565b34801561046757600080fd5b506033546001600160a01b0316610363565b34801561048557600080fd5b5060fb54610363906001600160a01b031681565b3480156104a557600080fd5b5061028b610b38565b3480156104ba57600080fd5b506104ea6104c9366004612128565b60fd6020526000908152604090208054600182015460029092015490919083565b6040805193845260208401929092529082015260600161022c565b34801561051157600080fd5b5061028b6105203660046123b7565b610bce565b34801561053157600080fd5b5061028b610540366004612128565b610e1c565b34801561055157600080fd5b5061028b610e92565b610562610f08565b33600090815260fd6020526040902080548211156105a55780546040516321c3d50f60e01b81526004810191909152602481018390526044015b60405180910390fd5b600181015415806105b95750438160010154115b156105e6576001810154604051635f6e272d60e11b8152600481019190915243602482015260440161059c565b818160000160008282546105fa91906124a3565b909155505060006001820181905560405133917fc5f84593e7086c66a205abab7ee44e1a8e6db58e50bf18ca46cb8239118b5ecd91a2604051339083156108fc029084906000818181858888f1935050505015801561065d573d6000803e3d6000fd5b5060405182815233907feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d9060200160405180910390a25050565b6001600160a01b037f0000000000000000000000002bdcc0de6be1f7d2ee689a0342d76f52e8efaba31630036106df5760405162461bcd60e51b815260040161059c906124b6565b7f0000000000000000000000002bdcc0de6be1f7d2ee689a0342d76f52e8efaba36001600160a01b03166107286000805160206127f4833981519152546001600160a01b031690565b6001600160a01b03161461074e5760405162461bcd60e51b815260040161059c90612502565b61075781610f4e565b6040805160008082526020820190925261077391839190610f56565b50565b61077e6110c6565b610786611120565b565b6001600160a01b037f0000000000000000000000002bdcc0de6be1f7d2ee689a0342d76f52e8efaba31630036107d05760405162461bcd60e51b815260040161059c906124b6565b7f0000000000000000000000002bdcc0de6be1f7d2ee689a0342d76f52e8efaba36001600160a01b03166108196000805160206127f4833981519152546001600160a01b031690565b6001600160a01b03161461083f5760405162461bcd60e51b815260040161059c90612502565b61084882610f4e565b61085482826001610f56565b5050565b600054600290610100900460ff1615801561087a575060005460ff8083169116105b6108965760405162461bcd60e51b815260040161059c9061254e565b6000805461ffff191660ff8316176101001790556108b26110c6565b60fe8290556000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6000306001600160a01b037f0000000000000000000000002bdcc0de6be1f7d2ee689a0342d76f52e8efaba3161461099c5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161059c565b506000805160206127f483398151915290565b600054610100900460ff16158080156109cf5750600054600160ff909116105b806109e95750303b1580156109e9575060005460ff166001145b610a055760405162461bcd60e51b815260040161059c9061254e565b6000805460ff191660011790558015610a28576000805461ff0019166101001790555b610a30611172565b610a386111a1565b610a41846111c8565b60fb80546001600160a01b038088166001600160a01b03199283161790925560fc80549286169290911691909117905560fe8290558015610abc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610acb6110c6565b61078660006111c8565b610add6110c6565b60fe55565b610aea6110c6565b61078661121a565b600060608060008060006060610b06611257565b610b0e61128a565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b610b40610f08565b33600090815260fd60205260408120549003610b715760405163b38340cf60e01b815233600482015260240161059c565b610b7c606443612100565b33600081815260fd6020526040908190206001018390555190917f43e8fb9d4f009c90c55a3fa108b177b794704d61af7af6f6512db7883f8ed84391610bc491815260200190565b60405180910390a2565b60fc546001600160a01b03163314610bfb576040516302a5785160e31b815233600482015260240161059c565b610c03610f08565b85846000829003610c275760405163e5180e0360e01b815260040160405180910390fd5b80600003610c4857604051630c9d0b0160e21b815260040160405180910390fd5b80821015610c735760405163320f0a1b60e01b8152600481018390526024810182905260440161059c565b610c7e6001836124a3565b821615610ca157604051636b1651e160e01b81526004810183905260240161059c565b83600003610cc2576040516351d432c560e11b815260040160405180910390fd5b84610ccd828661259c565b11610cff5784610cdd828661259c565b604051637899ec7160e01b81526004810192909252602482015260440161059c565b610d0d89898e8a8a896112b8565b60fb60009054906101000a90046001600160a01b03166001600160a01b031663d66eaabd868e8e8e886040518663ffffffff1660e01b8152600401610d5594939291906125b3565b6000604051808303818588803b158015610d6e57600080fd5b505af1158015610d82573d6000803e3d6000fd5b50505050508b7f4f9439a5aed9cb470d2e0756e7d293accfe5223e719a9a1a256646378ec4375885604051610db991815260200190565b60405180910390a260fc546001600160a01b03166108fc86610ddb848861259c565b610de591906124a3565b6040518115909202916000818181858888f19350505050158015610e0d573d6000803e3d6000fd5b50505050505050505050505050565b610e246110c6565b6001600160a01b038116610e895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161059c565b610773816111c8565b610e9a610f08565b33600090815260fd60205260408120549003610ecb5760405163366095e160e11b815233600482015260240161059c565b33600081815260fd6020526040808220600101829055517fc5f84593e7086c66a205abab7ee44e1a8e6db58e50bf18ca46cb8239118b5ecd9190a2565b60655460ff16156107865760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161059c565b6107736110c6565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610f8e57610f8983611648565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610fe8575060408051601f3d908101601f19168201909252610fe5918101906125f3565b60015b61104b5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161059c565b6000805160206127f483398151915281146110ba5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161059c565b50610f898383836116e4565b6033546001600160a01b031633146107865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161059c565b61112861170f565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600054610100900460ff166111995760405162461bcd60e51b815260040161059c9061260c565b610786611758565b600054610100900460ff166107865760405162461bcd60e51b815260040161059c9061260c565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611222610f08565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586111553390565b60606112857f416c69676e656400000000000000000000000000000000000000000000000007610116611788565b905090565b60606112857f3100000000000000000000000000000000000000000000000000000000000001610117611788565b60006112c5600287612657565b905060008167ffffffffffffffff8111156112e2576112e261215e565b60405190808252806020026020018201604052801561130b578160200160208202803683370190505b50905060005b828163ffffffff16101561143657888861132c836002612679565b63ffffffff16818110611341576113416126a1565b9050602002013589898360026113579190612679565b6113629060016126b7565b63ffffffff16818110611377576113776126a1565b90506020020135604051602001611398929190918252602082015260400190565b60405160208183030381529060405280519060200120828263ffffffff16815181106113c6576113c66126a1565b60200260200101818152505061142489898363ffffffff168181106113ed576113ed6126a1565b9050602002013587878463ffffffff1681811061140c5761140c6126a1565b905060200281019061141e91906126db565b86611835565b8061142e816126fb565b915050611311565b63ffffffff81168511156114715761145f89898363ffffffff168181106113ed576113ed6126a1565b80611469816126fb565b915050611436565b61147c600284612657565b92505b821561156f575060005b828163ffffffff16101561155d57816114a3826002612679565b63ffffffff16815181106114b9576114b96126a1565b6020026020010151828260026114cf9190612679565b6114da9060016126b7565b63ffffffff16815181106114f0576114f06126a1565b6020026020010151604051602001611512929190918252602082015260400190565b60405160208183030381529060405280519060200120828263ffffffff1681518110611540576115406126a1565b602090810291909101015280611555816126fb565b915050611489565b611568600284612657565b925061147f565b60018890036115dc57868989600081811061158c5761158c6126a1565b90506020020135146115d75786898960008181106115ac576115ac6126a1565b905060200201356040516327c4ed9760e21b815260040161059c929190918252602082015260400190565b61163d565b86826000815181106115f0576115f06126a1565b60200260200101511461163d578682600081518110611611576116116126a1565b60200260200101516040516327c4ed9760e21b815260040161059c929190918252602082015260400190565b505050505050505050565b6001600160a01b0381163b6116b55760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161059c565b6000805160206127f483398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6116ed83611a49565b6000825111806116fa5750805b15610f89576117098383611a89565b50505050565b60655460ff166107865760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161059c565b600054610100900460ff1661177f5760405162461bcd60e51b815260040161059c9061260c565b610786336111c8565b606060ff83146117a25761179b83611b7d565b905061182f565b8180546117ae9061271e565b80601f01602080910402602001604051908101604052809291908181526020018280546117da9061271e565b80156118275780601f106117fc57610100808354040283529160200191611827565b820191906000526020600020905b81548152906001019060200180831161180a57829003601f168201915b505050505090505b92915050565b80826040013510156118675760408051637acd6fa560e11b81529083013560048201526024810182905260440161059c565b600060fe5484846020013560405160200161188491815260200190565b60408051601f198184030181528282528051602091820120926118af92890135910190815260200190565b60408051601f198184030181528282528051602091820120908301959095528101929092526060820152608081019190915260a001604051602081830303815290604052805190602001209050600061190782611bbc565b90506000611953826119198780612758565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611be992505050565b90506001600160a01b03811661197c57604051638baa579f60e01b815260040160405180910390fd5b6001600160a01b038116600090815260fd6020908152604090912060028101549091870135146119d25760028101546040516306427aeb60e01b815260048101919091526020870135602482015260440161059c565b6002810180549060006119e48361279f565b90915550508054851115611a27578054604051632557019960e21b81526001600160a01b038416600482015260248101919091526044810186905260640161059c565b84816000016000828254611a3b91906124a3565b909155505050505050505050565b611a5281611648565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b611af15760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161059c565b600080846001600160a01b031684604051611b0c91906127b8565b600060405180830381855af49150503d8060008114611b47576040519150601f19603f3d011682016040523d82523d6000602084013e611b4c565b606091505b5091509150611b74828260405180606001604052806027815260200161281460279139611c0d565b95945050505050565b60606000611b8a83611c4d565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600061182f611bc9611c75565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000611bf88585611da0565b91509150611c0581611e0e565b509392505050565b60608315611c1c575081611c46565b825115611c2c5782518084602001fd5b8160405162461bcd60e51b815260040161059c91906127ca565b9392505050565b600060ff8216601f81111561182f57604051632cd44ac360e21b815260040160405180910390fd5b6000306001600160a01b037f0000000000000000000000002bdcc0de6be1f7d2ee689a0342d76f52e8efaba316148015611cce57507f0000000000000000000000000000000000000000000000000000000000007a6946145b15611cf857507f994ed1746c3df72f34b6debe24c32ca2b9d17cd5406a9ed1381920d0c72d7a0b90565b611285604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f95e689cfc15cb3a505d84daa940120af738f97fc8621aa93523d07e331753beb918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6000808251604103611dd65760208301516040840151606085015160001a611dca87828585611fc4565b94509450505050611e07565b8251604003611dff5760208301516040840151611df48683836120b1565b935093505050611e07565b506000905060025b9250929050565b6000816004811115611e2257611e226127dd565b03611e2a5750565b6001816004811115611e3e57611e3e6127dd565b03611e8b5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161059c565b6002816004811115611e9f57611e9f6127dd565b03611eec5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161059c565b6003816004811115611f0057611f006127dd565b03611f585760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161059c565b6004816004811115611f6c57611f6c6127dd565b036107735760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161059c565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611ffb57506000905060036120a8565b8460ff16601b1415801561201357508460ff16601c14155b1561202457506000905060046120a8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612078573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166120a1576000600192509250506120a8565b9150600090505b94509492505050565b6000806001600160ff1b038316816120ce60ff86901c601b612100565b90506120dc87828885611fc4565b935093505050935093915050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561182f5761182f6120ea565b6001600160a01b038116811461077357600080fd5b60006020828403121561213a57600080fd5b8135611c4681612113565b60006020828403121561215757600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561218757600080fd5b823561219281612113565b9150602083013567ffffffffffffffff808211156121af57600080fd5b818501915085601f8301126121c357600080fd5b8135818111156121d5576121d561215e565b604051601f8201601f19908116603f011681019083821181831017156121fd576121fd61215e565b8160405282815288602084870101111561221657600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000806000806080858703121561224e57600080fd5b843561225981612113565b9350602085013561226981612113565b9250604085013561227981612113565b9396929550929360600135925050565b60005b838110156122a457818101518382015260200161228c565b50506000910152565b600081518084526122c5816020860160208601612289565b601f01601f19169290920160200192915050565b60ff60f81b881681526000602060e060208401526122fa60e084018a6122ad565b838103604085015261230c818a6122ad565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b8181101561236057835183529284019291840191600101612344565b50909c9b505050505050505050505050565b60008083601f84011261238457600080fd5b50813567ffffffffffffffff81111561239c57600080fd5b6020830191508360208260051b8501011115611e0757600080fd5b60008060008060008060008060008060e08b8d0312156123d657600080fd5b8a35995060208b013567ffffffffffffffff808211156123f557600080fd5b818d0191508d601f83011261240957600080fd5b81358181111561241857600080fd5b8e602082850101111561242a57600080fd5b602083019b50809a505060408d013591508082111561244857600080fd5b6124548e838f01612372565b909950975060608d013591508082111561246d57600080fd5b5061247a8d828e01612372565b9b9e9a9d50989b979a9699969760808101359760a0820135975060c09091013595509350505050565b8181038181111561182f5761182f6120ea565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b808202811582820484141761182f5761182f6120ea565b848152606060208201528260608201528284608083013760006080848301015260006080601f19601f860116830101905082604083015295945050505050565b60006020828403121561260557600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008261267457634e487b7160e01b600052601260045260246000fd5b500490565b63ffffffff818116838216028082169190828114612699576126996120ea565b505092915050565b634e487b7160e01b600052603260045260246000fd5b63ffffffff8181168382160190808211156126d4576126d46120ea565b5092915050565b60008235605e198336030181126126f157600080fd5b9190910192915050565b600063ffffffff808316818103612714576127146120ea565b6001019392505050565b600181811c9082168061273257607f821691505b60208210810361275257634e487b7160e01b600052602260045260246000fd5b50919050565b6000808335601e1984360301811261276f57600080fd5b83018035915067ffffffffffffffff82111561278a57600080fd5b602001915036819003821315611e0757600080fd5b6000600182016127b1576127b16120ea565b5060010190565b600082516126f1818460208701612289565b602081526000611c4660208301846122ad565b634e487b7160e01b600052602160045260246000fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220830beabe052e990a59998747866a037d2586dc5843fc7e7a9a8b657f68f8cd7064736f6c63430008180033","storage":{"0x0":"0xff"}},"0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x4e59b44847b379578588920ca78fbf26c0b4956c":{"nonce":0,"balance":"0x0","code":"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3","storage":{}},"0x5eb3bc0a489c5a8288765d2336659ebca68fcd00":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106103265760003560e01c80635b0b829f116101b85780639e9923c211610104578063d72d8dd6116100a2578063e65797ad1161007c578063e65797ad1461083b578063f2fde38b146108de578063fabc1cbc146108f1578063fd39105a1461090457600080fd5b8063d72d8dd61461080d578063d75b4c8814610815578063dd8283f31461082857600080fd5b8063a96f783e116100de578063a96f783e146107aa578063c391425e146107b3578063ca0de882146107d3578063ca4f2d97146107fa57600080fd5b80639e9923c2146107495780639feab85914610770578063a50857bf1461079757600080fd5b8063715018a611610171578063886f11951161014b578063886f1195146106f65780638da5cb5b1461070f5780639aa1653d146107175780639b5d177b1461073657600080fd5b8063715018a6146106c857806384ca5213146106d0578063871ef049146106e357600080fd5b80635b0b829f146106395780635c975abb1461064c5780635df45946146106545780636347c9001461067b578063683048351461068e5780636e3b17db146106b557600080fd5b8063249a0c42116102775780633998fdd3116102305780635140a5481161020a5780635140a548146105df5780635865c60c146105f2578063595c6a67146106125780635ac86ab71461061a57600080fd5b80633998fdd31461056c5780633af32abf146105935780633c2a7f4c146105bf57600080fd5b8063249a0c42146104ed57806328f61b311461050d57806329092d0e14610520578063296bb0641461053357806329d1e0c3146105465780632cdd1e861461055957600080fd5b80630d3f2134116102e457806313542a4e116102be57806313542a4e14610435578063136439dd1461045e5780631478851f146104715780631eb812da146104a457600080fd5b80630d3f2134146103ef57806310d67a2f14610402578063125e05841461041557600080fd5b8062cf2ab51461032b57806303fd34921461034057806304ec635114610373578063054310e61461039e5780630a3b0a4f146103c95780630cf4b767146103dc575b600080fd5b61033e6103393660046143e3565b610940565b005b61036061034e366004614424565b60009081526098602052604090205490565b6040519081526020015b60405180910390f35b61038661038136600461444f565b610a4e565b6040516001600160c01b03909116815260200161036a565b609d546103b1906001600160a01b031681565b6040516001600160a01b03909116815260200161036a565b61033e6103d73660046144ac565b610b5e565b61033e6103ea3660046145b0565b610b8a565b61033e6103fd366004614424565b610c34565b61033e6104103660046144ac565b610c41565b6103606104233660046144ac565b609f6020526000908152604090205481565b6103606104433660046144ac565b6001600160a01b031660009081526099602052604090205490565b61033e61046c366004614424565b610cf4565b61049461047f366004614424565b609a6020526000908152604090205460ff1681565b604051901515815260200161036a565b6104b76104b2366004614600565b610e31565b60408051825163ffffffff908116825260208085015190911690820152918101516001600160c01b03169082015260600161036a565b6103606104fb366004614633565b609b6020526000908152604090205481565b609e546103b1906001600160a01b031681565b61033e61052e3660046144ac565b610ec2565b6103b1610541366004614424565b610eeb565b61033e6105543660046144ac565b610f77565b61033e6105673660046144ac565b610f88565b6103b17f0000000000000000000000001613beb3b2c4f22ee086b2b38c1476a3ce7f78e881565b6104946105a13660046144ac565b6001600160a01b0316600090815260c8602052604090205460ff1690565b6105d26105cd3660046144ac565b610f99565b60405161036a919061464e565b61033e6105ed3660046146a6565b611018565b6106056106003660046144ac565b6113ee565b60405161036a9190614749565b61033e611462565b610494610628366004614633565b6001805460ff9092161b9081161490565b61033e6106473660046147ce565b61152e565b600154610360565b6103b17f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e81565b6103b1610689366004614424565b611588565b6103b17f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377881565b61033e6106c3366004614802565b6115b2565b61033e611707565b6103606106de3660046148b9565b61171b565b6103866106f1366004614424565b611765565b6000546103b1906201000090046001600160a01b031681565b6103b1611770565b6096546107249060ff1681565b60405160ff909116815260200161036a565b61033e610744366004614a57565b611789565b6103b17f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f3681565b6103607f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de681565b61033e6107a5366004614b50565b611aa2565b61036060a05481565b6107c66107c1366004614bf8565b611c07565b60405161036a9190614c9d565b6103607f4d404e3276e7ac2163d8ee476afa6a41d1f68fb71f2d8b6546b24e55ce01b72a81565b61033e610808366004614ce7565b611cb6565b609c54610360565b61033e610823366004614dcd565b611d1c565b61033e610836366004614f8a565b611d2f565b6108aa610849366004614633565b60408051606080820183526000808352602080840182905292840181905260ff9490941684526097825292829020825193840183525463ffffffff8116845261ffff600160201b8204811692850192909252600160301b9004169082015290565b60408051825163ffffffff16815260208084015161ffff90811691830191909152928201519092169082015260600161036a565b61033e6108ec3660046144ac565b611fef565b61033e6108ff366004614424565b612065565b6109336109123660046144ac565b6001600160a01b031660009081526099602052604090206001015460ff1690565b60405161036a919061505e565b6001546002906004908116036109715760405162461bcd60e51b81526004016109689061506c565b60405180910390fd5b60005b82811015610a48576000848483818110610990576109906150a3565b90506020020160208101906109a591906144ac565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff1660028111156109f0576109f0614711565b6002811115610a0157610a01614711565b90525080519091506000610a14826121c1565b90506000610a2a826001600160c01b031661222c565b9050610a378585836122f8565b505060019093019250610974915050565b50505050565b6000838152609860205260408120805482919084908110610a7157610a716150a3565b600091825260209182902060408051606081018252929091015463ffffffff808216808552600160201b8304821695850195909552600160401b9091046001600160c01b03169183019190915290925085161015610af75760405162461bcd60e51b8152602060048201526003602482015262189b8f60ea1b6044820152606401610968565b602081015163ffffffff161580610b1d5750806020015163ffffffff168463ffffffff16105b610b525760405162461bcd60e51b81526004016109689060208082526004908201526331371e1960e11b604082015260600190565b60400151949350505050565b610b666123e5565b6001600160a01b0316600090815260c860205260409020805460ff19166001179055565b60013360009081526099602052604090206001015460ff166002811115610bb357610bb3614711565b14610be85760405162461bcd60e51b81526020600482015260056024820152646f2152656760d81b6044820152606401610968565b33600090815260996020526040908190205490517fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa90610c299084906150ff565b60405180910390a250565b610c3c6123e5565b60a055565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb89190615112565b6001600160a01b0316336001600160a01b031614610ce85760405162461bcd60e51b81526004016109689061512f565b610cf181612444565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d659190615179565b610d815760405162461bcd60e51b81526004016109689061519b565b60015481811614610dfa5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610968565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d90602001610c29565b60408051606081018252600080825260208201819052918101919091526000838152609860205260409020805483908110610e6e57610e6e6150a3565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160c01b03600160401b909304929092169082015290505b92915050565b610eca6123e5565b6001600160a01b0316600090815260c860205260409020805460ff19169055565b6040516308f6629d60e31b8152600481018290526000907f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b0316906347b314e890602401602060405180830381865afa158015610f53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebc9190615112565b610f7f6123e5565b610cf181612549565b610f906123e5565b610cf1816125b2565b6040805180820190915260008082526020820152610ebc6110137f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de684604051602001610ff89291909182526001600160a01b0316602082015260400190565b6040516020818303038152906040528051906020012061261b565b612669565b6001546002906004908116036110405760405162461bcd60e51b81526004016109689061506c565b600061108884848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff1691506126f89050565b90508483146110c25760405162461bcd60e51b81526020600482015260066024820152653931a8a632b760d11b6044820152606401610968565b60005b838110156113e55760008585838181106110e1576110e16150a3565b919091013560f81c91503690506000898985818110611102576111026150a3565b905060200281019061111491906151e3565b6040516379a0849160e11b815260ff8616600482015291935091507f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f366001600160a01b03169063f341092290602401602060405180830381865afa158015611180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a4919061522c565b63ffffffff1681146111e35760405162461bcd60e51b81526020600482015260086024820152673931a8a7b82632b760c11b6044820152606401610968565b6000805b8281101561138a576000848483818110611203576112036150a3565b905060200201602081019061121891906144ac565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff16600281111561126357611263614711565b600281111561127457611274614711565b90525080519091506000611287826121c1565b905060016001600160c01b03821660ff8b161c8116146112d45760405162461bcd60e51b815260206004820152600860248201526772634f702152656760c01b6044820152606401610968565b856001600160a01b0316846001600160a01b03161161131f5760405162461bcd60e51b8152602060048201526007602482015266072634475704f760cc1b6044820152606401610968565b5061137d83838f8f8d908e6001611336919061525f565b9261134393929190615272565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506122f892505050565b50909250506001016111e7565b5060ff84166000818152609b6020908152604091829020439081905591519182527f46077d55330763f16269fd75e5761663f4192d2791747c0189b16ad31db07db4910160405180910390a2505050508060010190506110c5565b50505050505050565b60408051808201909152600080825260208201526001600160a01b0382166000908152609960209081526040918290208251808401909352805483526001810154909183019060ff16600281111561144857611448614711565b600281111561145957611459614711565b90525092915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156114af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d39190615179565b6114ef5760405162461bcd60e51b81526004016109689061519b565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6115366123e5565b609654829060ff908116908216106115795760405162461bcd60e51b815260206004820152600660248201526552433a71214560d01b6044820152606401610968565b6115838383612789565b505050565b609c818154811061159857600080fd5b6000918252602090912001546001600160a01b0316905081565b609e546001600160a01b031633146115f95760405162461bcd60e51b815260206004820152600a602482015269292190b2b532b1ba37b960b11b6044820152606401610968565b6001600160a01b0383166000908152609f602090815260408083204290556099825280832080548251601f87018590048502810185019093528583529093909290916116669187908790819084018382808284376000920191909152505060965460ff1691506126f89050565b90506000611673836121c1565b905060018085015460ff16600281111561168f5761168f614711565b1480156116a457506001600160c01b03821615155b80156116c257506116c26001600160c01b0383811690831681161490565b156113e5576113e58787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061283692505050565b61170f6123e5565b6117196000612bbe565b565b600061175b7f4d404e3276e7ac2163d8ee476afa6a41d1f68fb71f2d8b6546b24e55ce01b72a8787878787604051602001610ff89695949392919061529c565b9695505050505050565b6000610ebc826121c1565b60006117846064546001600160a01b031690565b905090565b60018054600091908116036117b05760405162461bcd60e51b81526004016109689061506c565b33600090815260c8602052604090205460ff166118015760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610968565b8389146118395760405162461bcd60e51b81526004016109689060208082526004908201526338a632b760e11b604082015260600190565b60006118453388612c10565b90506118a533828888808060200260200160405190810160405280939291908181526020016000905b8282101561189a5761188b60408302860136819003810190615324565b8152602001906001019061186e565b505050505087612d45565b60006118ec33838e8e8e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250612e21915050565b90506000609760008e8e6000818110611907576119076150a3565b919091013560f81c825250602080820192909252604090810160009081208251606081018452905463ffffffff811680835261ffff600160201b8304811696840196909652600160301b909104909416928101929092528451805192945091611972576119726150a3565b602002602001015163ffffffff161115611a9357611a178d8d600081811061199c5761199c6150a3565b9050013560f81c60f81b60f81c83604001516000815181106119c0576119c06150a3565b60200260200101513385602001516000815181106119e0576119e06150a3565b60200260200101518c8c60008181106119fb576119fb6150a3565b905060400201803603810190611a119190615324565b866132e5565b611a9388886000818110611a2d57611a2d6150a3565b9050604002016020016020810190611a4591906144ac565b8e8e600090600192611a5993929190615272565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061283692505050565b50505050505050505050505050565b6001805460009190811603611ac95760405162461bcd60e51b81526004016109689061506c565b33600090815260c8602052604090205460ff16611b1a5760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610968565b6000611b263385612c10565b90506000611b6f33838b8b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250612e21915050565b51600080805260976020527f683723e34a772b6e4f2c919bba7fa32ed8ea11a8325f54da7db716e9d9dd98c754825192935063ffffffff1691839190611bb757611bb76150a3565b602002602001015163ffffffff161115611bfc5760405162461bcd60e51b81526020600482015260066024820152650714d61784f760d41b6044820152606401610968565b505050505050505050565b6060600082516001600160401b03811115611c2457611c246144c9565b604051908082528060200260200182016040528015611c4d578160200160208202803683370190505b50905060005b8351811015611cae57611c7f85858381518110611c7257611c726150a3565b60200260200101516134b4565b828281518110611c9157611c916150a3565b63ffffffff90921660209283029190910190910152600101611c53565b509392505050565b60018054600290811603611cdc5760405162461bcd60e51b81526004016109689061506c565b6115833384848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061283692505050565b611d246123e5565b61158383838361356d565b600054610100900460ff1615808015611d4f5750600054600160ff909116105b80611d695750303b158015611d69575060005460ff166001145b611dcc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610968565b6000805460ff191660011790558015611def576000805461ff0019166101001790555b82518451148015611e01575081518351145b611e325760405162461bcd60e51b8152602060048201526002602482015261494560f01b6044820152606401610968565b611e3b89612bbe565b611e45868661374f565b611e4e88612549565b611e57876125b2565b609c80546001818101835560008381527faf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539c92830180546001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377881166001600160a01b03199283161790925585548085018755850180547f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e841690831617905585549384019095559190920180547f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f3690921691909316179091555b8451811015611f9e57611f96858281518110611f5557611f556150a3565b6020026020010151858381518110611f6f57611f6f6150a3565b6020026020010151858481518110611f8957611f896150a3565b602002602001015161356d565b600101611f37565b508015611bfc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050565b611ff76123e5565b6001600160a01b03811661205c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610968565b610cf181612bbe565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120dc9190615112565b6001600160a01b0316336001600160a01b03161461210c5760405162461bcd60e51b81526004016109689061512f565b60015419811960015419161461218a5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610968565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610c29565b6000818152609860205260408120548082036121e05750600092915050565b60008381526098602052604090206121f9600183615340565b81548110612209576122096150a3565b600091825260209091200154600160401b90046001600160c01b03169392505050565b606060008061223a8461383f565b61ffff166001600160401b03811115612255576122556144c9565b6040519080825280601f01601f19166020018201604052801561227f576020820181803683370190505b5090506000805b825182108015612297575061010081105b156122ee576001811b9350858416156122de578060f81b8383815181106122c0576122c06150a3565b60200101906001600160f81b031916908160001a9053508160010191505b6122e781615353565b9050612286565b5090949350505050565b60018260200151600281111561231057612310614711565b1461231a57505050565b81516040516333567f7f60e11b81526000906001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377816906366acfefe9061236f9088908690889060040161536c565b6020604051808303816000875af115801561238e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b2919061539c565b90506001600160c01b038116156123de576123de856123d9836001600160c01b031661222c565b612836565b5050505050565b336123ee611770565b6001600160a01b0316146117195760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610968565b6001600160a01b0381166124d25760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610968565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b609d54604080516001600160a01b03928316815291831660208301527f315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c910160405180910390a1609d80546001600160a01b0319166001600160a01b0392909216919091179055565b609e54604080516001600160a01b03928316815291831660208301527f8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9910160405180910390a1609e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ebc61262861386a565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b604080518082019091526000808252602082015260008080612699600080516020615843833981519152866153db565b90505b6126a581613991565b909350915060008051602061584383398151915282830983036126de576040805180820190915290815260208101919091529392505050565b60008051602061584383398151915260018208905061269c565b60008061270484613a13565b9050808360ff166001901b116127825760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610968565b9392505050565b60ff8216600081815260976020908152604091829020845181548684018051888701805163ffffffff90951665ffffffffffff199094168417600160201b61ffff938416021767ffff0000000000001916600160301b95831695909502949094179094558551918252518316938101939093525116918101919091527f3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac9060600160405180910390a25050565b6001600160a01b0382166000908152609960205260409020805460018083015460ff16600281111561286a5761286a614711565b1461289f5760405162461bcd60e51b81526020600482015260056024820152646f2152656760d81b6044820152606401610968565b6096546000906128b390859060ff166126f8565b905060006128c0836121c1565b90506001600160c01b0382166129015760405162461bcd60e51b815260040161096890602080825260049082015263071456d760e41b604082015260600190565b6129186001600160c01b0383811690831681161490565b61294d5760405162461bcd60e51b81526004016109689060208082526004908201526310a9bab160e11b604082015260600190565b6001600160c01b03828116198216166129668482613b9b565b6001600160c01b038116612a355760018501805460ff191660021790556040516351b27a6d60e11b81526001600160a01b0388811660048301527f0000000000000000000000001613beb3b2c4f22ee086b2b38c1476a3ce7f78e8169063a364f4da90602401600060405180830381600087803b1580156129e657600080fd5b505af11580156129fa573d6000803e3d6000fd5b50506040518692506001600160a01b038a1691507f396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e490600090a35b60405163f4e24fe560e01b81526001600160a01b037f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e169063f4e24fe590612a83908a908a906004016153ef565b600060405180830381600087803b158015612a9d57600080fd5b505af1158015612ab1573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377816925063bd29b8cd9150612b039087908a90600401615413565b600060405180830381600087803b158015612b1d57600080fd5b505af1158015612b31573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f3616925063bd29b8cd9150612b839087908a90600401615413565b600060405180830381600087803b158015612b9d57600080fd5b505af1158015612bb1573d6000803e3d6000fd5b5050505050505050505050565b606480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516309aa152760e11b81526001600160a01b0383811660048301526000917f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e909116906313542a4e90602401602060405180830381865afa158015612c7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9f919061542c565b90506000819003610ebc577f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b031663bf79ce588484612ce487610f99565b6040518463ffffffff1660e01b8152600401612d0293929190615445565b6020604051808303816000875af1158015612d21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612782919061542c565b6020808201516000908152609a909152604090205460ff1615612d935760405162461bcd60e51b815260206004820152600660248201526518da14d85b1d60d21b6044820152606401610968565b4281604001511015612dcf5760405162461bcd60e51b8152602060048201526005602482015264063684578760dc1b6044820152606401610968565b602080820180516000908152609a909252604091829020805460ff19166001179055609d54905191830151610a48926001600160a01b0390921691612e1a918891889188919061171b565b8351613d5c565b612e4560405180606001604052806060815260200160608152602001606081525090565b6000612e8d86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff1691506126f89050565b90506000612e9a886121c1565b90506001600160c01b038216612edb5760405162461bcd60e51b815260040161096890602080825260049082015263071456d760e41b604082015260600190565b8082166001600160c01b031615612f1d5760405162461bcd60e51b81526004016109689060208082526004908201526308509a5d60e21b604082015260600190565b60a0546001600160a01b038a166000908152609f60205260409020546001600160c01b0383811690851617914291612f55919061525f565b10612f8a5760405162461bcd60e51b815260206004820152600560248201526410b7b822b560d91b6044820152606401610968565b612f948982613b9b565b887fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa87604051612fc491906150ff565b60405180910390a260016001600160a01b038b1660009081526099602052604090206001015460ff166002811115612ffe57612ffe614711565b14613117576040805180820182528a8152600160208083018281526001600160a01b038f166000908152609990925293902082518155925183820180549394939192909160ff19169083600281111561305957613059614711565b021790555050604051639926ee7d60e01b81526001600160a01b037f0000000000000000000000001613beb3b2c4f22ee086b2b38c1476a3ce7f78e8169150639926ee7d906130ae908d9089906004016154b5565b600060405180830381600087803b1580156130c857600080fd5b505af11580156130dc573d6000803e3d6000fd5b50506040518b92506001600160a01b038d1691507fe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe90600090a35b604051631fd93ca960e11b81526001600160a01b037f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e1690633fb2795290613167908d908c908c90600401615529565b600060405180830381600087803b15801561318157600080fd5b505af1158015613195573d6000803e3d6000fd5b5050604051632550477760e01b81526001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf6113778169250632550477791506131eb908d908d908d908d9060040161554e565b6000604051808303816000875af115801561320a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261323291908101906155de565b60408087019190915260208601919091525162bff04d60e01b81526001600160a01b037f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f36169062bff04d9061328f908c908c908c90600401615641565b6000604051808303816000875af11580156132ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132d6919081019061565b565b84525050509695505050505050565b6020808301516001600160a01b038082166000818152609990945260409093205491929087160361333e5760405162461bcd60e51b815260206004820152600360248201526206368360ec1b6044820152606401610968565b8760ff16846000015160ff161461337d5760405162461bcd60e51b815260206004820152600360248201526263683160e81b6044820152606401610968565b604051635401ed2760e01b81526004810182905260ff891660248201526000907f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b031690635401ed2790604401602060405180830381865afa1580156133ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341291906156f4565b905061341e8185613f16565b6001600160601b0316866001600160601b0316116134645760405162461bcd60e51b815260206004820152600360248201526231b41960e91b6044820152606401610968565b61346e8885613f3a565b6001600160601b0316816001600160601b031610611bfc5760405162461bcd60e51b815260206004820152600360248201526263683360e81b6044820152606401610968565b600081815260986020526040812054815b8181101561353c5760016134d98284615340565b6134e39190615340565b92508463ffffffff16609860008681526020019081526020016000208463ffffffff1681548110613516576135166150a3565b60009182526020909120015463ffffffff1611613534575050610ebc565b6001016134c5565b5060405162461bcd60e51b81526020600482015260056024820152644f2152656760d81b6044820152606401610968565b60965460ff1660c081106135ac5760405162461bcd60e51b8152600401610968906020808252600490820152630e29ac2f60e31b604082015260600190565b6135b7816001615711565b6096805460ff191660ff92909216919091179055806135d68186612789565b60405160016296b58960e01b031981526001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf6113778169063ff694a77906136299084908890889060040161572a565b600060405180830381600087803b15801561364357600080fd5b505af1158015613657573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f366001600160a01b031692506326d941f29150602401600060405180830381600087803b1580156136bf57600080fd5b505af11580156136d3573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b031692506326d941f29150602401600060405180830381600087803b15801561373b57600080fd5b505af1158015611bfc573d6000803e3d6000fd5b6000546201000090046001600160a01b031615801561377657506001600160a01b03821615155b6137f85760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610968565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261383b82612444565b5050565b6000805b8215610ebc57613854600184615340565b9092169180613862816157a6565b915050613843565b6000306001600160a01b037f0000000000000000000000005eb3bc0a489c5a8288765d2336659ebca68fcd00161480156138c357507f0000000000000000000000000000000000000000000000000000000000007a6946145b156138ed57507fc6374306ca0c3d05fd3f0cebbec8fc4308f71679c06b0e30a95d8c9709d43dae90565b50604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527f6ec8a99f0e7f9ebde7354a446dcb9423f3af9c58f386a53c59c5b384f9e82d11828401527f6bda7e3f385e48841048390444cced5cc795af87758af67622e5f4f0882c4a9960608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60008080600080516020615843833981519152600360008051602061584383398151915286600080516020615843833981519152888909090890506000613a07827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615843833981519152613f54565b91959194509092505050565b600061010082511115613a9c5760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610968565b8151600003613aad57506000919050565b60008083600081518110613ac357613ac36150a3565b0160200151600160f89190911c81901b92505b8451811015613b9257848181518110613af157613af16150a3565b0160200151600160f89190911c1b9150828211613b865760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610968565b91811791600101613ad6565b50909392505050565b60008281526098602052604081205490819003613c43576000838152609860209081526040808320815160608101835263ffffffff43811682528185018681526001600160c01b03808a16958401958652845460018101865594885295909620915191909201805495519351909416600160401b026001600160401b03938316600160201b0267ffffffffffffffff1990961691909216179390931716919091179055505050565b6000838152609860205260408120613c5c600184615340565b81548110613c6c57613c6c6150a3565b6000918252602090912001805490915063ffffffff438116911603613cae5780546001600160401b0316600160401b6001600160c01b03851602178155610a48565b805463ffffffff438116600160201b81810267ffffffff0000000019909416939093178455600087815260986020908152604080832081516060810183529485528483018481526001600160c01b03808c1693870193845282546001810184559286529390942094519401805493519151909216600160401b026001600160401b0391861690960267ffffffffffffffff199093169390941692909217179190911691909117905550505050565b6001600160a01b0383163b15613e7657604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e90613d9c9086908690600401615413565b602060405180830381865afa158015613db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ddd91906157c7565b6001600160e01b031916146115835760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610968565b826001600160a01b0316613e8a8383613ffd565b6001600160a01b0316146115835760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610968565b602081015160009061271090613f309061ffff16856157f1565b612782919061581c565b604081015160009061271090613f309061ffff16856157f1565b600080613f5f614363565b613f67614381565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280613fa457fe5b5082613ff25760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610968565b505195945050505050565b600080600061400c8585614019565b91509150611cae81614087565b600080825160410361404f5760208301516040840151606085015160001a6140438782858561423d565b94509450505050614080565b8251604003614078576020830151604084015161406d86838361432a565b935093505050614080565b506000905060025b9250929050565b600081600481111561409b5761409b614711565b036140a35750565b60018160048111156140b7576140b7614711565b036141045760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610968565b600281600481111561411857614118614711565b036141655760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610968565b600381600481111561417957614179614711565b036141d15760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610968565b60048160048111156141e5576141e5614711565b03610cf15760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610968565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156142745750600090506003614321565b8460ff16601b1415801561428c57508460ff16601c14155b1561429d5750600090506004614321565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156142f1573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661431a57600060019250925050614321565b9150600090505b94509492505050565b6000806001600160ff1b0383168161434760ff86901c601b61525f565b90506143558782888561423d565b935093505050935093915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60008083601f8401126143b157600080fd5b5081356001600160401b038111156143c857600080fd5b6020830191508360208260051b850101111561408057600080fd5b600080602083850312156143f657600080fd5b82356001600160401b0381111561440c57600080fd5b6144188582860161439f565b90969095509350505050565b60006020828403121561443657600080fd5b5035919050565b63ffffffff81168114610cf157600080fd5b60008060006060848603121561446457600080fd5b8335925060208401356144768161443d565b929592945050506040919091013590565b6001600160a01b0381168114610cf157600080fd5b80356144a781614487565b919050565b6000602082840312156144be57600080fd5b813561278281614487565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715614501576145016144c9565b60405290565b604080519081016001600160401b0381118282101715614501576145016144c9565b604051601f8201601f191681016001600160401b0381118282101715614551576145516144c9565b604052919050565b60006001600160401b03831115614572576145726144c9565b614585601f8401601f1916602001614529565b905082815283838301111561459957600080fd5b828260208301376000602084830101529392505050565b6000602082840312156145c257600080fd5b81356001600160401b038111156145d857600080fd5b8201601f810184136145e957600080fd5b6145f884823560208401614559565b949350505050565b6000806040838503121561461357600080fd5b50508035926020909101359150565b803560ff811681146144a757600080fd5b60006020828403121561464557600080fd5b61278282614622565b815181526020808301519082015260408101610ebc565b60008083601f84011261467757600080fd5b5081356001600160401b0381111561468e57600080fd5b60208301915083602082850101111561408057600080fd5b600080600080604085870312156146bc57600080fd5b84356001600160401b03808211156146d357600080fd5b6146df8883890161439f565b909650945060208701359150808211156146f857600080fd5b5061470587828801614665565b95989497509550505050565b634e487b7160e01b600052602160045260246000fd5b6003811061474557634e487b7160e01b600052602160045260246000fd5b9052565b81518152602080830151604083019161476490840182614727565b5092915050565b803561ffff811681146144a757600080fd5b60006060828403121561478f57600080fd5b6147976144df565b905081356147a48161443d565b81526147b26020830161476b565b60208201526147c36040830161476b565b604082015292915050565b600080608083850312156147e157600080fd5b6147ea83614622565b91506147f9846020850161477d565b90509250929050565b60008060006040848603121561481757600080fd5b833561482281614487565b925060208401356001600160401b0381111561483d57600080fd5b61484986828701614665565b9497909650939450505050565b60006001600160401b0382111561486f5761486f6144c9565b5060051b60200190565b60006040828403121561488b57600080fd5b614893614507565b905061489e82614622565b815260208201356148ae81614487565b602082015292915050565b600080600080600060a086880312156148d157600080fd5b85356148dc81614487565b945060208681013594506040808801356001600160401b0381111561490057600080fd5b8801601f81018a1361491157600080fd5b803561492461491f82614856565b614529565b8082825260208201915060208360061b85010192508c83111561494657600080fd5b6020840193505b8284101561496e5761495f8d85614879565b8252928401929085019061494d565b999c989b5098996060810135995060800135979650505050505050565b6000610100828403121561499e57600080fd5b50919050565b60008083601f8401126149b657600080fd5b5081356001600160401b038111156149cd57600080fd5b6020830191508360208260061b850101111561408057600080fd5b6000606082840312156149fa57600080fd5b614a026144df565b905081356001600160401b03811115614a1a57600080fd5b8201601f81018413614a2b57600080fd5b614a3a84823560208401614559565b825250602082013560208201526040820135604082015292915050565b60008060008060008060008060006101a08a8c031215614a7657600080fd5b89356001600160401b0380821115614a8d57600080fd5b614a998d838e01614665565b909b50995060208c0135915080821115614ab257600080fd5b614abe8d838e01614665565b9099509750879150614ad38d60408e0161498b565b96506101408c0135915080821115614aea57600080fd5b614af68d838e016149a4565b90965094506101608c0135915080821115614b1057600080fd5b614b1c8d838e016149e8565b93506101808c0135915080821115614b3357600080fd5b50614b408c828d016149e8565b9150509295985092959850929598565b6000806000806000806101608789031215614b6a57600080fd5b86356001600160401b0380821115614b8157600080fd5b614b8d8a838b01614665565b90985096506020890135915080821115614ba657600080fd5b614bb28a838b01614665565b9096509450849150614bc78a60408b0161498b565b9350610140890135915080821115614bde57600080fd5b50614beb89828a016149e8565b9150509295509295509295565b60008060408385031215614c0b57600080fd5b8235614c168161443d565b91506020838101356001600160401b03811115614c3257600080fd5b8401601f81018613614c4357600080fd5b8035614c5161491f82614856565b81815260059190911b82018301908381019088831115614c7057600080fd5b928401925b82841015614c8e57833582529284019290840190614c75565b80955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015614cdb57835163ffffffff1683529284019291840191600101614cb9565b50909695505050505050565b60008060208385031215614cfa57600080fd5b82356001600160401b03811115614d1057600080fd5b61441885828601614665565b6001600160601b0381168114610cf157600080fd5b600082601f830112614d4257600080fd5b81356020614d5261491f83614856565b82815260069290921b84018101918181019086841115614d7157600080fd5b8286015b84811015614dc25760408189031215614d8e5760008081fd5b614d96614507565b8135614da181614487565b815281850135614db081614d1c565b81860152835291830191604001614d75565b509695505050505050565b600080600060a08486031215614de257600080fd5b614dec858561477d565b92506060840135614dfc81614d1c565b915060808401356001600160401b03811115614e1757600080fd5b614e2386828701614d31565b9150509250925092565b600082601f830112614e3e57600080fd5b81356020614e4e61491f83614856565b808382526020820191506060602060608602880101945087851115614e7257600080fd5b602087015b85811015614e9657614e89898261477d565b8452928401928101614e77565b5090979650505050505050565b600082601f830112614eb457600080fd5b81356020614ec461491f83614856565b8083825260208201915060208460051b870101935086841115614ee657600080fd5b602086015b84811015614dc2578035614efe81614d1c565b8352918301918301614eeb565b600082601f830112614f1c57600080fd5b81356020614f2c61491f83614856565b82815260059290921b84018101918181019086841115614f4b57600080fd5b8286015b84811015614dc25780356001600160401b03811115614f6e5760008081fd5b614f7c8986838b0101614d31565b845250918301918301614f4f565b600080600080600080600080610100898b031215614fa757600080fd5b614fb08961449c565b9750614fbe60208a0161449c565b9650614fcc60408a0161449c565b9550614fda60608a0161449c565b94506080890135935060a08901356001600160401b0380821115614ffd57600080fd5b6150098c838d01614e2d565b945060c08b013591508082111561501f57600080fd5b61502b8c838d01614ea3565b935060e08b013591508082111561504157600080fd5b5061504e8b828c01614f0b565b9150509295985092959890939650565b60208101610ebc8284614727565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000815180845260005b818110156150df576020818501810151868301820152016150c3565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061278260208301846150b9565b60006020828403121561512457600080fd5b815161278281614487565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561518b57600080fd5b8151801515811461278257600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000808335601e198436030181126151fa57600080fd5b8301803591506001600160401b0382111561521457600080fd5b6020019150600581901b360382131561408057600080fd5b60006020828403121561523e57600080fd5b81516127828161443d565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ebc57610ebc615249565b6000808585111561528257600080fd5b8386111561528f57600080fd5b5050820193919092039150565b600060c08201888352602060018060a01b03808a166020860152604089604087015260c0606087015283895180865260e08801915060208b01955060005b81811015615304578651805160ff16845286015185168684015295850195918301916001016152da565b505060808701989098525050505060a09091019190915250949350505050565b60006040828403121561533657600080fd5b6127828383614879565b81810381811115610ebc57610ebc615249565b60006001820161536557615365615249565b5060010190565b60018060a01b038416815282602082015260606040820152600061539360608301846150b9565b95945050505050565b6000602082840312156153ae57600080fd5b81516001600160c01b038116811461278257600080fd5b634e487b7160e01b600052601260045260246000fd5b6000826153ea576153ea6153c5565b500690565b6001600160a01b03831681526040602082018190526000906145f8908301846150b9565b8281526040602082015260006145f860408301846150b9565b60006020828403121561543e57600080fd5b5051919050565b6001600160a01b0384168152610160810161546d602083018580358252602090810135910152565b615487606083016040860180358252602090810135910152565b60406080850160a0840137604060c0850160e0840137825161012083015260208301516101408301526145f8565b60018060a01b03831681526040602082015260008251606060408401526154df60a08401826150b9565b90506020840151606084015260408401516080840152809150509392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906153939083018486615500565b60018060a01b038516815283602082015260606040820152600061175b606083018486615500565b600082601f83011261558757600080fd5b8151602061559761491f83614856565b8083825260208201915060208460051b8701019350868411156155b957600080fd5b602086015b84811015614dc25780516155d181614d1c565b83529183019183016155be565b600080604083850312156155f157600080fd5b82516001600160401b038082111561560857600080fd5b61561486838701615576565b9350602085015191508082111561562a57600080fd5b5061563785828601615576565b9150509250929050565b838152604060208201526000615393604083018486615500565b6000602080838503121561566e57600080fd5b82516001600160401b0381111561568457600080fd5b8301601f8101851361569557600080fd5b80516156a361491f82614856565b81815260059190911b820183019083810190878311156156c257600080fd5b928401925b828410156156e95783516156da8161443d565b825292840192908401906156c7565b979650505050505050565b60006020828403121561570657600080fd5b815161278281614d1c565b60ff8181168382160190811115610ebc57610ebc615249565b60006060820160ff8616835260206001600160601b03808716602086015260406060604087015283875180865260808801915060208901955060005b8181101561579657865180516001600160a01b031684528601518516868401529585019591830191600101615766565b50909a9950505050505050505050565b600061ffff8083168181036157bd576157bd615249565b6001019392505050565b6000602082840312156157d957600080fd5b81516001600160e01b03198116811461278257600080fd5b6001600160601b0381811683821602808216919082811461581457615814615249565b505092915050565b60006001600160601b0380841680615836576158366153c5565b9216919091049291505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a26469706673582212201548f9af61e602bb8d6829508f90d0118c101ac55f6e1786ac860c8fab06071f64736f6c63430008180033","storage":{"0x0":"0xff"}},"0x5fbdb2315678afecb367f032d93f642f64180aa3":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b038316815260006020604081840152835180604085015260005b8181101561063b5785810183015185820160600152820161061f565b8181111561064d576000606083870101525b50601f01601f19169290920160600194935050505056fea2646970667358221220726e525ba4195f70768543b6eb94d022704c3702dcb1ca686df0d56fdf9f8a4864736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"}},"0x5fc8d32690cc91d4c39d9d3abcbd16989f875707":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0x97":"0x5bc5b424ff8db9bd8202cae3beb193c946b905d8ebddb990e36a723af40eb1c4","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x9a676e781a523b5d0c0e43731313a708cb607508","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x610178da211fef7d417bc0e6fed39f05609ad788":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106101855760003560e01c806374cdd798116100d1578063c49074421161008a578063e251ef5211610064578063e251ef5214610563578063e2c8344514610583578063f2882461146105a3578063fe80b087146105d757600080fd5b8063c490744214610503578063c4d66de814610523578063dda3346c1461054357600080fd5b806374cdd7981461044057806387e0d289146104745780639b4e46341461049b578063a50600f4146104ae578063b522538a146104ce578063baa7145a146104ee57600080fd5b806334bea20a1161013e57806358eaee791161011857806358eaee791461038f5780635d3f65b6146103bc5780636fcd0e53146103dc5780637439841f1461040957600080fd5b806334bea20a146103005780633f65cf191461033b5780634665bcda1461035b57600080fd5b80630b18ff66146101db5780630cd4649e146102185780631a5057be1461022f5780631d905d5c146102635780633106ab53146102af5780633474aa16146102e057600080fd5b366101d657346037600082825461019c9190614c9f565b90915550506040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b600080fd5b3480156101e757600080fd5b506033546101fb906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561022457600080fd5b5061022d6105fb565b005b34801561023b57600080fd5b506101fb7f0000000000000000000000008a791620dd6260079bf849dc5567adc3f2fdc31881565b34801561026f57600080fd5b506102977f000000000000000000000000000000000000000000000000000000077359400081565b6040516001600160401b03909116815260200161020f565b3480156102bb57600080fd5b506034546102d090600160401b900460ff1681565b604051901515815260200161020f565b3480156102ec57600080fd5b50603454610297906001600160401b031681565b34801561030c57600080fd5b506102d061031b366004614cdc565b603560209081526000928352604080842090915290825290205460ff1681565b34801561034757600080fd5b5061022d610356366004614d6f565b610764565b34801561036757600080fd5b506101fb7f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681565b34801561039b57600080fd5b506103af6103aa366004614e80565b610caf565b60405161020f9190614ef9565b3480156103c857600080fd5b50603854610297906001600160401b031681565b3480156103e857600080fd5b506103fc6103f7366004614f07565b610d14565b60405161020f9190614f20565b34801561041557600080fd5b506103af610424366004614f07565b600090815260366020526040902054600160c01b900460ff1690565b34801561044c57600080fd5b506101fb7f000000000000000000000000424242424242424242424242424242424242424281565b34801561048057600080fd5b5060335461029790600160a01b90046001600160401b031681565b61022d6104a9366004614f68565b610dc1565b3480156104ba57600080fd5b5061022d6104c9366004614fdb565b610f6e565b3480156104da57600080fd5b506103fc6104e9366004614e80565b611304565b3480156104fa57600080fd5b5061022d6113f7565b34801561050f57600080fd5b5061022d61051e366004615085565b611462565b34801561052f57600080fd5b5061022d61053e3660046150b1565b61169f565b34801561054f57600080fd5b5061022d61055e3660046151cb565b611877565b34801561056f57600080fd5b5061022d61057e36600461529c565b611a4a565b34801561058f57600080fd5b5061022d61059e366004615085565b611e15565b3480156105af57600080fd5b506102977f000000000000000000000000000000000000000000000000000000006059f46081565b3480156105e357600080fd5b506105ed60375481565b60405190815260200161020f565b604051635ac86ab760e01b8152600260048201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa158015610663573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106879190615397565b156106ad5760405162461bcd60e51b81526004016106a4906153b9565b60405180910390fd5b6033546001600160a01b031633146106d75760405162461bcd60e51b81526004016106a490615416565b603454600160401b900460ff16156107015760405162461bcd60e51b81526004016106a49061545e565b6034805460ff60401b1916600160401b179055603354610729906001600160a01b0316611ff8565b6033546040516001600160a01b03909116907fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a250565b6033546001600160a01b0316331461078e5760405162461bcd60e51b81526004016106a490615416565b604051635ac86ab760e01b8152600260048201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa1580156107f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081a9190615397565b156108375760405162461bcd60e51b81526004016106a4906153b9565b603454600160401b900460ff166108af5760405162461bcd60e51b815260206004820152603660248201527f456967656e506f642e686173456e61626c656452657374616b696e673a2072656044820152751cdd185ada5b99c81a5cc81b9bdd08195b98589b195960521b60648201526084016106a4565b85841480156108bd57508382145b61094d5760405162461bcd60e51b815260206004820152605560248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a2076616c696461746f72496e646963657320616e642070726f6f666064820152740e640daeae6e840c4ca40e6c2daca40d8cadccee8d605b1b608482015260a4016106a4565b603354600160a01b90046001600160401b031615806109a2575060335461098c9061098790600160a01b90046001600160401b031661202c565b612116565b6001600160401b0316896001600160401b031610155b610a2e5760405162461bcd60e51b815260206004820152605160248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a2070726f6f66206d75737420626520696e207468652065706f63686064820152701030b33a32b91030b1ba34bb30ba34b7b760791b608482015260a4016106a4565b42610a44613f486001600160401b038c16614c9f565b1015610acd5760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a207370656369666965642074696d657374616d7020697320746f6f60648201526b0819985c881a5b881c185cdd60a21b608482015260a4016106a4565b60405163d1c64cc960e01b81526001600160401b038a166004820152610b76907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b03169063d1c64cc990602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906154ad565b8935610b7160208c018c6154c6565b612163565b6000805b87811015610c1a57610bfc8b8b358b8b85818110610b9a57610b9a61550c565b9050602002016020810190610baf9190615522565b8a8a86818110610bc157610bc161550c565b9050602002810190610bd391906154c6565b8a8a88818110610be557610be561550c565b9050602002810190610bf79190615549565b6122f1565b610c069083614c9f565b915080610c1281615592565b915050610b7a565b5060335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe69091169063c2c51c40906044015b600060405180830381600087803b158015610c8b57600080fd5b505af1158015610c9f573d6000803e3d6000fd5b5050505050505050505050505050565b600080610cf184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127ab92505050565b600090815260366020526040902054600160c01b900460ff169150505b92915050565b610d3c6040805160808101825260008082526020820181905291810182905290606082015290565b600082815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff166002811115610da757610da7614ec1565b6002811115610db857610db8614ec1565b90525092915050565b336001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe61614610e095760405162461bcd60e51b81526004016106a4906155ad565b346801bc16d674ec80000014610e955760405162461bcd60e51b8152602060048201526044602482018190527f456967656e506f642e7374616b653a206d75737420696e697469616c6c792073908201527f74616b6520666f7220616e792076616c696461746f72207769746820333220656064820152633a3432b960e11b608482015260a4016106a4565b7f00000000000000000000000042424242424242424242424242424242424242426001600160a01b031663228951186801bc16d674ec8000008787610ed86128a5565b8888886040518863ffffffff1660e01b8152600401610efc9695949392919061567f565b6000604051808303818588803b158015610f1557600080fd5b505af1158015610f29573d6000803e3d6000fd5b50505050507f606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e238585604051610f5f9291906156ce565b60405180910390a15050505050565b604051635ac86ab760e01b8152600360048201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa158015610fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffa9190615397565b156110175760405162461bcd60e51b81526004016106a4906153b9565b868414801561102557508382145b6110ae5760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e76657269667942616c616e6365557064617465733a207660448201527f616c696461746f72496e646963657320616e642070726f6f6673206d7573742060648201526d0c4ca40e6c2daca40d8cadccee8d60931b608482015260a4016106a4565b426110c4613f486001600160401b038c16614c9f565b10156111465760405162461bcd60e51b815260206004820152604560248201527f456967656e506f642e76657269667942616c616e6365557064617465733a207360448201527f70656369666965642074696d657374616d7020697320746f6f2066617220696e606482015264081c185cdd60da1b608482015260a4016106a4565b60405163d1c64cc960e01b81526001600160401b038a1660048201526111ea907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b03169063d1c64cc990602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906154ad565b8735610b7160208a018a6154c6565b6000805b8881101561128e576112708b8b8b8481811061120c5761120c61550c565b90506020020160208101906112219190615522565b8a358a8a868181106112355761123561550c565b905060200281019061124791906154c6565b8a8a888181106112595761125961550c565b905060200281019061126b9190615549565b6128ea565b61127a90836156e2565b91508061128681615592565b9150506111ee565b506033546001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681169163c2c51c4091166112d3633b9aca0085615723565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401610c71565b61132c6040805160808101825260008082526020820181905291810182905290606082015290565b6036600061136f85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127ab92505050565b81526020808201929092526040908101600020815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff1660028111156113dc576113dc614ec1565b60028111156113ed576113ed614ec1565b9052509392505050565b6033546001600160a01b031633146114215760405162461bcd60e51b81526004016106a490615416565b603454600160401b900460ff161561144b5760405162461bcd60e51b81526004016106a49061545e565b603354611460906001600160a01b0316611ff8565b565b336001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe616146114aa5760405162461bcd60e51b81526004016106a4906155ad565b6114b8633b9aca00826157be565b156115425760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74576569206d75737420626520612077686f60648201526d1b194811ddd95a48185b5bdd5b9d60921b608482015260a4016106a4565b6000611552633b9aca00836157d2565b6034549091506001600160401b03908116908216111561160b5760405162461bcd60e51b815260206004820152606260248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74477765692065786365656473207769746860648201527f6472617761626c6552657374616b6564457865637574696f6e4c617965724777608482015261656960f01b60a482015260c4016106a4565b603480548291906000906116299084906001600160401b03166157e6565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e8360405161168891815260200190565b60405180910390a261169a8383612dc8565b505050565b600054610100900460ff16158080156116bf5750600054600160ff909116105b806116d95750303b1580156116d9575060005460ff166001145b61173c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106a4565b6000805460ff19166001179055801561175f576000805461ff0019166101001790555b6001600160a01b0382166117d25760405162461bcd60e51b815260206004820152603460248201527f456967656e506f642e696e697469616c697a653a20706f644f776e65722063616044820152736e6e6f74206265207a65726f206164647265737360601b60648201526084016106a4565b603380546001600160a01b0384166001600160a01b031990911681179091556034805460ff60401b1916600160401b1790556040517fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a28015611873576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6033546001600160a01b031633146118a15760405162461bcd60e51b81526004016106a490615416565b604051635ac86ab760e01b8152600560048201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa158015611909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192d9190615397565b1561194a5760405162461bcd60e51b81526004016106a4906153b9565b82518451146119d55760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e7265636f766572546f6b656e733a20746f6b656e4c697360448201527f7420616e6420616d6f756e7473546f5769746864726177206d7573742062652060648201526a0e6c2daca40d8cadccee8d60ab1b608482015260a4016106a4565b60005b8451811015611a4357611a31838583815181106119f7576119f761550c565b6020026020010151878481518110611a1157611a1161550c565b60200260200101516001600160a01b0316612dd29092919063ffffffff16565b80611a3b81615592565b9150506119d8565b5050505050565b604051635ac86ab760e01b81526004808201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa158015611ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad59190615397565b15611af25760405162461bcd60e51b81526004016106a4906153b9565b8386148015611b0057508588145b8015611b0b57508782145b611b7f576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f642e766572696679416e6450726f636573735769746864726160448201527f77616c733a20696e70757473206d7573742062652073616d65206c656e67746860648201526084016106a4565b60405163d1c64cc960e01b81526001600160401b038c166004820152611c23907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b03169063d1c64cc990602401602060405180830381865afa158015611bf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1491906154ad565b8b35610b7160208e018e6154c6565b604080518082019091526000808252602082015260005b83811015611d23576000611cde8d358d8d85818110611c5b57611c5b61550c565b9050602002810190611c6d919061580e565b8c8c86818110611c7f57611c7f61550c565b9050602002810190611c9191906154c6565b8c8c88818110611ca357611ca361550c565b9050602002810190611cb59190615549565b8c8c8a818110611cc757611cc761550c565b9050602002810190611cd99190615549565b612e24565b80518451919250908490611cf3908390614c9f565b9052506020808201519084018051611d0c9083906156e2565b905250819050611d1b81615592565b915050611c3a565b50805115611d52576033548151611d52916001600160a01b031690611d4d90633b9aca009061582f565b61339c565b602081015115611e075760335460208201516001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681169263c2c51c4092911690611da890633b9aca0090615723565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611dee57600080fd5b505af1158015611e02573d6000803e3d6000fd5b505050505b505050505050505050505050565b6033546001600160a01b03163314611e3f5760405162461bcd60e51b81526004016106a490615416565b604051635ac86ab760e01b8152600560048201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa158015611ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ecb9190615397565b15611ee85760405162461bcd60e51b81526004016106a4906153b9565b603754821115611f995760405162461bcd60e51b815260206004820152606a60248201527f456967656e506f642e77697468647261776e6f6e426561636f6e436861696e4560448201527f544842616c616e63655765693a20616d6f756e74546f5769746864726177206960648201527f732067726561746572207468616e206e6f6e426561636f6e436861696e45544860848201526942616c616e636557656960b01b60a482015260c4016106a4565b8160376000828254611fab919061584e565b90915550506040518281526001600160a01b038416907f30420aacd028abb3c1fd03aba253ae725d6ddd52d16c9ac4cb5742cd43f530969060200160405180910390a261169a838361339c565b6033805467ffffffffffffffff60a01b19164263ffffffff16600160a01b021790556000603755612029814761339c565b50565b60007f000000000000000000000000000000000000000000000000000000006059f4606001600160401b0316826001600160401b031610156120d65760405162461bcd60e51b815260206004820152603760248201527f456967656e506f642e5f74696d657374616d70546f45706f63683a2074696d6560448201527f7374616d70206973206265666f72652067656e6573697300000000000000000060648201526084016106a4565b6120e2600c6020615865565b61210c7f000000000000000000000000000000000000000000000000000000006059f460846157e6565b610d0e9190615894565b6000612124600c6020615865565b61212f8360016158ba565b6121399190615865565b610d0e907f000000000000000000000000000000000000000000000000000000006059f4606158ba565b61216f6003602061582f565b81146121ff5760405162461bcd60e51b815260206004820152605360248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a2050726f6f6620686064820152720c2e640d2dcc6dee4e4cac6e840d8cadccee8d606b1b608482015260a4016106a4565b61224482828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892508791506003905061342a565b6122eb5760405162461bcd60e51b815260206004820152606660248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a20496e76616c696460648201527f206c617465737420626c6f636b2068656164657220726f6f74206d65726b6c6560848201526510383937b7b360d11b60a482015260c4016106a4565b50505050565b60008061233084848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061344292505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561239f5761239f614ec1565b60028111156123b0576123b0614ec1565b90525090506000816060015160028111156123cd576123cd614ec1565b146124765760405162461bcd60e51b815260206004820152606760248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2056616c696461746f72206d757374206265206960648201527f6e61637469766520746f2070726f7665207769746864726177616c2063726564608482015266656e7469616c7360c81b60a482015260c4016106a4565b61247e6128a5565b612487906158e5565b6124c386868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061346692505050565b1461254a5760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2050726f6f66206973206e6f7420666f7220746860648201526a1a5cc8115a59d95b941bd960aa1b608482015260a4016106a4565b600061258886868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061347b92505050565b90506125988a87878b8b8e6134a0565b603980549060006125a883615592565b90915550506001606083015264ffffffffff891682526001600160401b038b811660408401527f00000000000000000000000000000000000000000000000000000007735940008116908216111561262e576001600160401b037f000000000000000000000000000000000000000000000000000000077359400016602083015261263e565b6001600160401b03811660208301525b6000838152603660209081526040918290208451815492860151938601516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060850151859391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b8360028111156126dc576126dc614ec1565b02179055505060405164ffffffffff8b1681527f2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449915060200160405180910390a17f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df898c84602001516040516127779392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1633b9aca0082602001516001600160401b031661279c919061582f565b9b9a5050505050505050505050565b600081516030146128345760405162461bcd60e51b815260206004820152604760248201527f456967656e506f642e5f63616c63756c61746556616c696461746f725075626b60448201527f657948617368206d75737420626520612034382d6279746520424c53207075626064820152666c6963206b657960c81b608482015260a4016106a4565b60405160029061284b908490600090602001615909565b60408051601f198184030181529082905261286591615938565b602060405180830381855afa158015612882573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610d0e91906154ad565b60408051600160f81b60208201526000602182015230606090811b6bffffffffffffffffffffffff1916602c8301529101604051602081830303815290604052905090565b60008061292984848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061347b92505050565b9050600061296985858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061344292505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff1660028111156129d8576129d8614ec1565b60028111156129e9576129e9614ec1565b8152505090508a6001600160401b031681604001516001600160401b031610612aa05760405162461bcd60e51b815260206004820152605c60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20566160448201527f6c696461746f72732062616c616e63652068617320616c72656164792062656560648201527f6e207570646174656420666f7220746869732074696d657374616d7000000000608482015260a4016106a4565b600181606001516002811115612ab857612ab8614ec1565b14612b205760405162461bcd60e51b815260206004820152603260248201527f456967656e506f642e76657269667942616c616e63655570646174653a2056616044820152716c696461746f72206e6f742061637469766560701b60648201526084016106a4565b612b298b61202c565b6001600160401b0316612b6e8787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506136f792505050565b6001600160401b031611612c11576000836001600160401b031611612c115760405162461bcd60e51b815260206004820152604d60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20766160448201527f6c696461746f7220697320776974686472617761626c6520627574206861732060648201526c3737ba103bb4ba34323930bbb760991b608482015260a4016106a4565b612c1f8987878b8b8f6134a0565b602081015160006001600160401b037f000000000000000000000000000000000000000000000000000000077359400081169086161115612c8157507f0000000000000000000000000000000000000000000000000000000773594000612c84565b50835b6001600160401b0380821660208086019182528f831660408088019182526000898152603690935290912086518154935192518516600160801b0267ffffffffffffffff60801b19938616600160401b026001600160801b031990951691909516179290921790811683178255606086015186939091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b836002811115612d2c57612d2c614ec1565b0217905550905050816001600160401b0316816001600160401b031614612db8577f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df8c8e83604051612da39392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1612db5818361370f565b95505b5050505050979650505050505050565b611873828261372e565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261169a908490613847565b6040805180820190915260008082526020820152612e49612e44896159b9565b613919565b6033546001600160401b03600160a01b90910481169082161015612f0b5760405162461bcd60e51b815260206004820152606760248201527f456967656e506f642e70726f6f664973466f7256616c696454696d657374616d60448201527f703a20626561636f6e20636861696e2070726f6f66206d75737420626520617460648201527f206f72206166746572206d6f7374526563656e745769746864726177616c546960848201526606d657374616d760cc1b60a482015260c4016106a4565b6000612f19612e448b6159b9565b90506000612f5988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061344292505050565b905060008082815260366020526040902054600160c01b900460ff166002811115612f8657612f86614ec1565b141561303d5760405162461bcd60e51b815260206004820152607460248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a2056616c696461746f72206e657665722070726f76656e20746f2060648201527f68617665207769746864726177616c2063726564656e7469616c7320706f696e6084820152731d1959081d1bc81d1a1a5cc818dbdb9d1c9858dd60621b60a482015260c4016106a4565b60008181526035602090815260408083206001600160401b038616845290915290205460ff16156130fc5760405162461bcd60e51b815260206004820152605b60248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a207769746864726177616c2068617320616c72656164792062656560648201527f6e2070726f76656e20666f7220746869732074696d657374616d700000000000608482015260a4016106a4565b6001603560008381526020019081526020016000206000846001600160401b03166001600160401b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506131d98c87878e7f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b03166344e71c806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d49190615af5565b613929565b600061321787878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061434a92505050565b90506132278d8a8a8e8e866134a0565b600061326588888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061436292505050565b90506132a38a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506136f792505050565b6001600160401b03166132bd6132b88f6159b9565b61437a565b6001600160401b03161061337557603354600084815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b81049093169381019390935261336a93869388938a936001600160a01b03909316928892916060830190600160c01b900460ff16600281111561335157613351614ec1565b600281111561336257613362614ec1565b90525061438c565b95505050505061338f565b60335461336a90839086906001600160a01b0316846145ca565b5098975050505050505050565b603354604051633036cd5360e21b81526001600160a01b03918216600482015283821660248201527f0000000000000000000000008a791620dd6260079bf849dc5567adc3f2fdc3189091169063c0db354c9083906044016000604051808303818588803b15801561340d57600080fd5b505af1158015613421573d6000803e3d6000fd5b50505050505050565b6000836134388685856146a8565b1495945050505050565b6000816000815181106134575761345761550c565b60200260200101519050919050565b6000816001815181106134575761345761550c565b6000610d0e826002815181106134935761349361550c565b60200260200101516147f4565b6134ac60036002615bf6565b84146135375760405162461bcd60e51b815260206004820152604e60248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a2056616c696461746f72206669656c64732068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a4016106a4565b600561354560286001614c9f565b61354f9190614c9f565b61355a90602061582f565b82146135da5760405162461bcd60e51b815260206004820152604360248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a2050726f6f662068617320696e636f7272656374206c656e6064820152620cee8d60eb1b608482015260a4016106a4565b600064ffffffffff82166135f060286001614c9f565b600b901b179050600061363587878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061485b92505050565b905061367b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c925085915086905061342a565b6136ed5760405162461bcd60e51b815260206004820152603d60248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a20496e76616c6964206d65726b6c652070726f6f6600000060648201526084016106a4565b5050505050505050565b6000610d0e826007815181106134935761349361550c565b60006137276001600160401b03808416908516615c02565b9392505050565b8047101561377e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016106a4565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146137cb576040519150601f19603f3d011682016040523d82523d6000602084013e6137d0565b606091505b505090508061169a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016106a4565b600061389c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614b089092919063ffffffff16565b80519091501561169a57808060200190518101906138ba9190615397565b61169a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106a4565b6000610d0e8261014001516147f4565b613934600280615bf6565b83146139a85760405162461bcd60e51b81526020600482015260496024820152600080516020615c8983398151915260448201527f616c3a207769746864726177616c4669656c64732068617320696e636f7272656064820152680c6e840d8cadccee8d60bb1b608482015260a4016106a4565b6139b4600d6002615bf6565b6139c460c0840160a08501615c41565b6001600160401b031610613a2e5760405162461bcd60e51b815260206004820152603f6024820152600080516020615c8983398151915260448201527f616c3a20626c6f636b526f6f74496e64657820697320746f6f206c617267650060648201526084016106a4565b613a3a60046002615bf6565b613a4b610100840160e08501615c41565b6001600160401b031610613ab7576040805162461bcd60e51b8152602060048201526024810191909152600080516020615c8983398151915260448201527f616c3a207769746864726177616c496e64657820697320746f6f206c6172676560648201526084016106a4565b613ac360186002615bf6565b613ad360e0840160c08501615c41565b6001600160401b031610613b4d5760405162461bcd60e51b81526020600482015260476024820152600080516020615c8983398151915260448201527f616c3a20686973746f726963616c53756d6d617279496e64657820697320746f6064820152666f206c6172676560c81b608482015260a4016106a4565b60006001600160401b038216613b65612e44856159b9565b6001600160401b031610613b7a576005613b7d565b60045b9050613b8a600482614c9f565b613b95906001614c9f565b613ba090602061582f565b613baa84806154c6565b905014613c1e5760405162461bcd60e51b81526020600482015260486024820152600080516020615c8983398151915260448201527f616c3a207769746864726177616c50726f6f662068617320696e636f727265636064820152670e840d8cadccee8d60c31b608482015260a4016106a4565b613c2a60046003614c9f565b613c3590602061582f565b613c4260408501856154c6565b905014613cbc5760405162461bcd60e51b815260206004820152604e6024820152600080516020615c8983398151915260448201527f616c3a20657865637574696f6e5061796c6f616450726f6f662068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a4016106a4565b613cc86003602061582f565b613cd560208501856154c6565b905014613d435760405162461bcd60e51b81526020600482015260426024820152600080516020615c8983398151915260448201527f616c3a20736c6f7450726f6f662068617320696e636f7272656374206c656e676064820152610e8d60f31b608482015260a4016106a4565b613d4e81602061582f565b613d5b60608501856154c6565b905014613dce5760405162461bcd60e51b81526020600482015260476024820152600080516020615c8983398151915260448201527f616c3a2074696d657374616d7050726f6f662068617320696e636f7272656374606482015266040d8cadccee8d60cb1b608482015260a4016106a4565b600d613ddc60186001614c9f565b613de7906005614c9f565b613df2906001614c9f565b613dfc9190614c9f565b613e0790602061582f565b613e1460808501856154c6565b905014613e9d5760405162461bcd60e51b81526020600482015260586024820152600080516020615c8983398151915260448201527f616c3a20686973746f726963616c53756d6d617279426c6f636b526f6f74507260648201527f6f6f662068617320696e636f7272656374206c656e6774680000000000000000608482015260a4016106a4565b6000613eaf60c0850160a08601615c41565b6001600160401b03166000613ec6600d6001614c9f565b613ed660e0880160c08901615c41565b6001600160401b0316901b600d613eef60186001614c9f565b613efa906001614c9f565b613f049190614c9f565b601b901b1717179050613f5f613f1d60808601866154c6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b925050506101008701358461342a565b613fd25760405162461bcd60e51b815260206004820152604a6024820152600080516020615c8983398151915260448201527f616c3a20496e76616c696420686973746f726963616c73756d6d617279206d656064820152693935b63290383937b7b360b11b608482015260a4016106a4565b614029613fe260208601866154c6565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008a013593506101208a01359250905061342a565b6140895760405162461bcd60e51b815260206004820152603d6024820152600080516020615c8983398151915260448201527f616c3a20496e76616c696420736c6f74206d65726b6c652070726f6f6600000060648201526084016106a4565b60496140e161409b60408701876154c6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101008701356101608801358461342a565b6141535760405162461bcd60e51b81526020600482015260496024820152600080516020615c8983398151915260448201527f616c3a20496e76616c696420657865637574696f6e5061796c6f6164206d657260648201526835b63290383937b7b360b91b608482015260a4016106a4565b506141ab61416460608601866154c6565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610160860135610140870135600961342a565b6142165760405162461bcd60e51b81526020600482015260426024820152600080516020615c8983398151915260448201527f616c3a20496e76616c69642074696d657374616d70206d65726b6c652070726f60648201526137b360f11b608482015260a4016106a4565b6000614229610100860160e08701615c41565b6001600160401b031661423e60046001614c9f565b600e901b179050600061428388888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061485b92505050565b90506142d361429287806154c6565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610160880135838561342a565b61433f5760405162461bcd60e51b81526020600482015260436024820152600080516020615c8983398151915260448201527f616c3a20496e76616c6964207769746864726177616c206d65726b6c6520707260648201526237b7b360e91b608482015260a4016106a4565b505050505050505050565b6000610d0e826001815181106134935761349361550c565b6000610d0e826003815181106134935761349361550c565b6000602061210c8361012001516147f4565b604080518082019091526000808252602082015260007f00000000000000000000000000000000000000000000000000000007735940006001600160401b0316846001600160401b0316111561440357507f0000000000000000000000000000000000000000000000000000000773594000614406565b50825b604080518082019091526000808252602082015261442482866157e6565b6001600160401b039081168252603480548492600091614446918591166158ba565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555061447882856020015161370f565b602082015260028460600151600281111561449557614495614ec1565b146144b757603980549060006144aa83615c5e565b9091555050600260608501525b600060208086018281528a83526036909152604091829020865181549251938801516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516929091169190911792909217928316821781556060870151879391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b83600281111561455c5761455c614ec1565b0217905550506040805164ffffffffff8c1681526001600160401b038a8116602083015288168183015290516001600160a01b03891692507fb76a93bb649ece524688f1a01d184e0bbebcda58eae80c28a898bec3fb5a09639181900360600190a298975050505050505050565b60408051808201909152600080825260208201526040805164ffffffffff871681526001600160401b0380871660208301528416918101919091526001600160a01b038416907f8a7335714231dbd551aaba6314f4a97a14c201e53a3e25e1140325cdf67d7a4e9060600160405180910390a26038805483919060009061465b9084906001600160401b03166158ba565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506040518060400160405280836001600160401b0316815260200160008152509050949350505050565b600083516000141580156146c75750602084516146c591906157be565b155b6147565760405162461bcd60e51b815260206004820152605460248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f665368613260448201527f35363a2070726f6f66206c656e6774682073686f756c642062652061206e6f6e60648201527316bd32b9379036bab63a34b836329037b310199960611b608482015260a4016106a4565b604080516020808201909252848152905b855181116147ea5761477a6002856157be565b6147ad578151600052808601516020526020826040600060026107d05a03fa6147a257600080fd5b6002840493506147d8565b8086015160005281516020526020826040600060026107d05a03fa6147d157600080fd5b6002840493505b6147e3602082614c9f565b9050614767565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b6000806002835161486c91906157d2565b90506000816001600160401b03811115614888576148886150ce565b6040519080825280602002602001820160405280156148b1578160200160208202803683370190505b50905060005b828110156149b8576002856148cc838361582f565b815181106148dc576148dc61550c565b6020026020010151868360026148f2919061582f565b6148fd906001614c9f565b8151811061490d5761490d61550c565b602002602001015160405160200161492f929190918252602082015260400190565b60408051601f198184030181529082905261494991615938565b602060405180830381855afa158015614966573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061498991906154ad565b82828151811061499b5761499b61550c565b6020908102919091010152806149b081615592565b9150506148b7565b506149c46002836157d2565b91505b8115614ae45760005b82811015614ad1576002826149e5838361582f565b815181106149f5576149f561550c565b602002602001015183836002614a0b919061582f565b614a16906001614c9f565b81518110614a2657614a2661550c565b6020026020010151604051602001614a48929190918252602082015260400190565b60408051601f1981840301815290829052614a6291615938565b602060405180830381855afa158015614a7f573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190614aa291906154ad565b828281518110614ab457614ab461550c565b602090810291909101015280614ac981615592565b9150506149d0565b50614add6002836157d2565b91506149c7565b80600081518110614af757614af761550c565b602002602001015192505050919050565b6060614b178484600085614b1f565b949350505050565b606082471015614b805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106a4565b6001600160a01b0385163b614bd75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a4565b600080866001600160a01b03168587604051614bf39190615938565b60006040518083038185875af1925050503d8060008114614c30576040519150601f19603f3d011682016040523d82523d6000602084013e614c35565b606091505b5091509150614c45828286614c50565b979650505050505050565b60608315614c5f575081613727565b825115614c6f5782518084602001fd5b8160405162461bcd60e51b81526004016106a49190615c75565b634e487b7160e01b600052601160045260246000fd5b60008219821115614cb257614cb2614c89565b500190565b6001600160401b038116811461202957600080fd5b8035614cd781614cb7565b919050565b60008060408385031215614cef57600080fd5b823591506020830135614d0181614cb7565b809150509250929050565b600060408284031215614d1e57600080fd5b50919050565b60008083601f840112614d3657600080fd5b5081356001600160401b03811115614d4d57600080fd5b6020830191508360208260051b8501011115614d6857600080fd5b9250929050565b60008060008060008060008060a0898b031215614d8b57600080fd5b8835614d9681614cb7565b975060208901356001600160401b0380821115614db257600080fd5b614dbe8c838d01614d0c565b985060408b0135915080821115614dd457600080fd5b614de08c838d01614d24565b909850965060608b0135915080821115614df957600080fd5b614e058c838d01614d24565b909650945060808b0135915080821115614e1e57600080fd5b50614e2b8b828c01614d24565b999c989b5096995094979396929594505050565b60008083601f840112614e5157600080fd5b5081356001600160401b03811115614e6857600080fd5b602083019150836020828501011115614d6857600080fd5b60008060208385031215614e9357600080fd5b82356001600160401b03811115614ea957600080fd5b614eb585828601614e3f565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b60038110614ef557634e487b7160e01b600052602160045260246000fd5b9052565b60208101610d0e8284614ed7565b600060208284031215614f1957600080fd5b5035919050565b60006080820190506001600160401b03808451168352806020850151166020840152806040850151166040840152506060830151614f616060840182614ed7565b5092915050565b600080600080600060608688031215614f8057600080fd5b85356001600160401b0380821115614f9757600080fd5b614fa389838a01614e3f565b90975095506020880135915080821115614fbc57600080fd5b50614fc988828901614e3f565b96999598509660400135949350505050565b60008060008060008060008060a0898b031215614ff757600080fd5b883561500281614cb7565b975060208901356001600160401b038082111561501e57600080fd5b61502a8c838d01614d24565b909950975060408b013591508082111561504357600080fd5b61504f8c838d01614d0c565b965060608b0135915080821115614df957600080fd5b6001600160a01b038116811461202957600080fd5b8035614cd781615065565b6000806040838503121561509857600080fd5b82356150a381615065565b946020939093013593505050565b6000602082840312156150c357600080fd5b813561372781615065565b634e487b7160e01b600052604160045260246000fd5b60405161018081016001600160401b0381118282101715615107576151076150ce565b60405290565b604051601f8201601f191681016001600160401b0381118282101715615135576151356150ce565b604052919050565b60006001600160401b03821115615156576151566150ce565b5060051b60200190565b600082601f83011261517157600080fd5b813560206151866151818361513d565b61510d565b82815260059290921b840181019181810190868411156151a557600080fd5b8286015b848110156151c057803583529183019183016151a9565b509695505050505050565b6000806000606084860312156151e057600080fd5b83356001600160401b03808211156151f757600080fd5b818601915086601f83011261520b57600080fd5b8135602061521b6151818361513d565b82815260059290921b8401810191818101908a84111561523a57600080fd5b948201945b8386101561526157853561525281615065565b8252948201949082019061523f565b9750508701359250508082111561527757600080fd5b5061528486828701615160565b9250506152936040850161507a565b90509250925092565b60008060008060008060008060008060c08b8d0312156152bb57600080fd5b6152c48b614ccc565b995060208b01356001600160401b03808211156152e057600080fd5b6152ec8e838f01614d0c565b9a5060408d013591508082111561530257600080fd5b61530e8e838f01614d24565b909a50985060608d013591508082111561532757600080fd5b6153338e838f01614d24565b909850965060808d013591508082111561534c57600080fd5b6153588e838f01614d24565b909650945060a08d013591508082111561537157600080fd5b5061537e8d828e01614d24565b915080935050809150509295989b9194979a5092959850565b6000602082840312156153a957600080fd5b8151801515811461372757600080fd5b6020808252603e908201527f456967656e506f642e6f6e6c795768656e4e6f745061757365643a20696e646560408201527f782069732070617573656420696e20456967656e506f644d616e616765720000606082015260800190565b60208082526028908201527f456967656e506f642e6f6e6c79456967656e506f644f776e65723a206e6f74206040820152673837b227bbb732b960c11b606082015260800190565b6020808252602f908201527f456967656e506f642e6861734e6576657252657374616b65643a20726573746160408201526e1ada5b99c81a5cc8195b98589b1959608a1b606082015260800190565b6000602082840312156154bf57600080fd5b5051919050565b6000808335601e198436030181126154dd57600080fd5b8301803591506001600160401b038211156154f757600080fd5b602001915036819003821315614d6857600080fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561553457600080fd5b813564ffffffffff8116811461372757600080fd5b6000808335601e1984360301811261556057600080fd5b8301803591506001600160401b0382111561557a57600080fd5b6020019150600581901b3603821315614d6857600080fd5b60006000198214156155a6576155a6614c89565b5060010190565b60208082526031908201527f456967656e506f642e6f6e6c79456967656e506f644d616e616765723a206e6f6040820152703a1032b4b3b2b72837b226b0b730b3b2b960791b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60005b8381101561564257818101518382015260200161562a565b838111156122eb5750506000910152565b6000815180845261566b816020860160208601615627565b601f01601f19169290920160200192915050565b60808152600061569360808301888a6155fe565b82810360208401526156a58188615653565b905082810360408401526156ba8186886155fe565b915050826060830152979650505050505050565b602081526000614b176020830184866155fe565b600080821280156001600160ff1b038490038513161561570457615704614c89565b600160ff1b839003841281161561571d5761571d614c89565b50500190565b60006001600160ff1b038184138284138082168684048611161561574957615749614c89565b600160ff1b600087128281168783058912161561576857615768614c89565b6000871292508782058712848416161561578457615784614c89565b8785058712818416161561579a5761579a614c89565b505050929093029392505050565b634e487b7160e01b600052601260045260246000fd5b6000826157cd576157cd6157a8565b500690565b6000826157e1576157e16157a8565b500490565b60006001600160401b038381169083168181101561580657615806614c89565b039392505050565b6000823561017e1983360301811261582557600080fd5b9190910192915050565b600081600019048311821515161561584957615849614c89565b500290565b60008282101561586057615860614c89565b500390565b60006001600160401b038083168185168183048111821515161561588b5761588b614c89565b02949350505050565b60006001600160401b03808416806158ae576158ae6157a8565b92169190910492915050565b60006001600160401b038083168185168083038211156158dc576158dc614c89565b01949350505050565b80516020808301519190811015614d1e5760001960209190910360031b1b16919050565b6000835161591b818460208801615627565b6001600160801b0319939093169190920190815260100192915050565b60008251615825818460208701615627565b600082601f83011261595b57600080fd5b81356001600160401b03811115615974576159746150ce565b615987601f8201601f191660200161510d565b81815284602083860101111561599c57600080fd5b816020850160208301376000918101602001919091529392505050565b600061018082360312156159cc57600080fd5b6159d46150e4565b82356001600160401b03808211156159eb57600080fd5b6159f73683870161594a565b83526020850135915080821115615a0d57600080fd5b615a193683870161594a565b60208401526040850135915080821115615a3257600080fd5b615a3e3683870161594a565b60408401526060850135915080821115615a5757600080fd5b615a633683870161594a565b60608401526080850135915080821115615a7c57600080fd5b50615a893682860161594a565b608083015250615a9b60a08401614ccc565b60a0820152615aac60c08401614ccc565b60c0820152615abd60e08401614ccc565b60e082015261010083810135908201526101208084013590820152610140808401359082015261016092830135928101929092525090565b600060208284031215615b0757600080fd5b815161372781614cb7565b600181815b80851115615b4d578160001904821115615b3357615b33614c89565b80851615615b4057918102915b93841c9390800290615b17565b509250929050565b600082615b6457506001610d0e565b81615b7157506000610d0e565b8160018114615b875760028114615b9157615bad565b6001915050610d0e565b60ff841115615ba257615ba2614c89565b50506001821b610d0e565b5060208310610133831016604e8410600b8410161715615bd0575081810a610d0e565b615bda8383615b12565b8060001904821115615bee57615bee614c89565b029392505050565b60006137278383615b55565b60008083128015600160ff1b850184121615615c2057615c20614c89565b6001600160ff1b0384018313811615615c3b57615c3b614c89565b50500390565b600060208284031215615c5357600080fd5b813561372781614cb7565b600081615c6d57615c6d614c89565b506000190190565b602081526000613727602083018461565356fe426561636f6e436861696e50726f6f66732e7665726966795769746864726177a26469706673582212207b802debd88fb1da4ddbc8905d28e36a41d34702e4e56687893b2f6ebf09657264736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x68b1d87f95878fe05b998f19b66f4baba5de1aed":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061014b5760003560e01c806385594e58116100b6578063e4f4f8871161006f578063e4f4f887146103cc578063e5db06c014610405578063eb990c5914610425578063ecb7cb1b14610445578063f2fde38b14610472578063fabc1cbc1461049257600080fd5b806385594e5814610317578063886f1195146103445780638da5cb5b14610364578063c0db354c14610382578063ca661c0414610395578063d44e1b76146103ac57600080fd5b806350f73e7c1161010857806350f73e7c14610254578063595c6a67146102785780635ac86ab71461028d5780635c975abb146102cd578063715018a6146102e257806375608896146102f757600080fd5b806310d67a2f14610150578063136439dd146101725780631f39d87f146101925780633e1de008146101c85780634665bcda146101e85780634d50f9a414610234575b600080fd5b34801561015c57600080fd5b5061017061016b36600461196d565b6104b2565b005b34801561017e57600080fd5b5061017061018d366004611991565b61056e565b34801561019e57600080fd5b506101b26101ad36600461196d565b6106ad565b6040516101bf91906119c8565b60405180910390f35b3480156101d457600080fd5b506101b26101e336600461196d565b6108a8565b3480156101f457600080fd5b5061021c7f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681565b6040516001600160a01b0390911681526020016101bf565b34801561024057600080fd5b5061017061024f366004611991565b6109ee565b34801561026057600080fd5b5061026a60c95481565b6040519081526020016101bf565b34801561028457600080fd5b506101706109ff565b34801561029957600080fd5b506102bd6102a8366004611a15565b609854600160ff9092169190911b9081161490565b60405190151581526020016101bf565b3480156102d957600080fd5b5060985461026a565b3480156102ee57600080fd5b50610170610ac6565b34801561030357600080fd5b506102bd610312366004611a38565b610ada565b34801561032357600080fd5b50610337610332366004611a38565b610b5d565b6040516101bf9190611a64565b34801561035057600080fd5b5060975461021c906001600160a01b031681565b34801561037057600080fd5b506033546001600160a01b031661021c565b610170610390366004611a72565b610bdd565b3480156103a157600080fd5b5061026a62034bc081565b3480156103b857600080fd5b506101706103c7366004611991565b610e9d565b3480156103d857600080fd5b5061026a6103e736600461196d565b6001600160a01b0316600090815260ca602052604090206001015490565b34801561041157600080fd5b50610170610420366004611a38565b610f31565b34801561043157600080fd5b50610170610440366004611aab565b610fc6565b34801561045157600080fd5b5061046561046036600461196d565b6110ee565b6040516101bf9190611af1565b34801561047e57600080fd5b5061017061048d36600461196d565b6111a8565b34801561049e57600080fd5b506101706104ad366004611991565b61121e565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610505573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105299190611b47565b6001600160a01b0316336001600160a01b0316146105625760405162461bcd60e51b815260040161055990611b64565b60405180910390fd5b61056b8161137a565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da9190611bae565b6105f65760405162461bcd60e51b815260040161055990611bd0565b6098548181161461066f5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926106da8383611c2e565b90508060005b82811015610786576001600160a01b038716600090815260ca6020526040812060010161070d8388611c45565b8154811061071d5761071d611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061076391611c45565b4310156107735781925050610786565b508061077e81611c73565b9150506106e0565b508060008167ffffffffffffffff8111156107a3576107a3611c8e565b6040519080825280602002602001820160405280156107e857816020015b60408051808201909152600080825260208201528152602001906001900390816107c15790505b509050811561089d5760005b8281101561089b576001600160a01b038916600090815260ca602052604090206001016108218289611c45565b8154811061083157610831611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810191909152825183908390811061087d5761087d611c5d565b6020026020010181905250808061089390611c73565b9150506107f4565b505b979650505050505050565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926108d58383611c2e565b905060008167ffffffffffffffff8111156108f2576108f2611c8e565b60405190808252806020026020018201604052801561093757816020015b60408051808201909152600080825260208201528152602001906001900390816109105790505b50905060005b828110156109e4576001600160a01b038716600090815260ca6020526040902060010161096a8287611c45565b8154811061097a5761097a611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff169181019190915282518390839081106109c6576109c6611c5d565b602002602001018190525080806109dc90611c73565b91505061093d565b5095945050505050565b6109f6611471565b61056b816114cb565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611bae565b610a875760405162461bcd60e51b815260040161055990611bd0565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610ace611471565b610ad86000611593565b565b6001600160a01b038216600090815260ca60205260408120548210801590610b54575060c9546001600160a01b038416600090815260ca60205260409020600101805484908110610b2d57610b2d611c5d565b600091825260209091200154610b509190600160e01b900463ffffffff16611c45565b4310155b90505b92915050565b60408051808201909152600080825260208201526001600160a01b038316600090815260ca60205260409020600101805483908110610b9e57610b9e611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff16918101919091529392505050565b60405163a38406a360e01b81526001600160a01b038084166004830152839133917f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe6169063a38406a390602401602060405180830381865afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6b9190611b47565b6001600160a01b031614610ce75760405162461bcd60e51b815260206004820152603d60248201527f44656c617965645769746864726177616c526f757465722e6f6e6c794569676560448201527f6e506f643a206e6f7420706f644f776e6572277320456967656e506f640000006064820152608401610559565b60985460009060019081161415610d105760405162461bcd60e51b815260040161055990611ca4565b6001600160a01b038316610da65760405162461bcd60e51b815260206004820152605160248201527f44656c617965645769746864726177616c526f757465722e637265617465446560448201527f6c617965645769746864726177616c3a20726563697069656e742063616e6e6f60648201527074206265207a65726f206164647265737360781b608482015260a401610559565b346001600160e01b03811615610e96576040805180820182526001600160e01b03808416825263ffffffff43811660208085019182526001600160a01b038a16600081815260ca8352968720600190810180548083018255818a5293892088519551909616600160e01b029490961693909317939091019290925593525490917fb8f1b14c7caf74150801dcc9bc18d575cbeaf5b421943497e409df92c92e0f5991889188918691610e5791611c2e565b604080516001600160a01b0395861681529490931660208501526001600160e01b039091169183019190915260608201526080015b60405180910390a1505b5050505050565b60026065541415610ef05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610f1e5760405162461bcd60e51b815260040161055990611ca4565b610f2833836115e5565b50506001606555565b60026065541415610f845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610fb25760405162461bcd60e51b815260040161055990611ca4565b610fbc83836115e5565b5050600160655550565b600054610100900460ff1615808015610fe65750600054600160ff909116105b806110005750303b158015611000575060005460ff166001145b6110635760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610559565b6000805460ff191660011790558015611086576000805461ff0019166101001790555b61108f85611593565b6110998484611750565b6110a2826114cb565b8015610e96576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260ca6020908152604080832081518083018352815481526001820180548451818702810187019095528085529195929486810194939192919084015b8282101561119a57600084815260209081902060408051808201909152908401546001600160e01b0381168252600160e01b900463ffffffff168183015282526001909201910161114e565b505050915250909392505050565b6111b0611471565b6001600160a01b0381166112155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610559565b61056b81611593565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190611b47565b6001600160a01b0316336001600160a01b0316146112c55760405162461bcd60e51b815260040161055990611b64565b6098541981196098541916146113435760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016106a2565b6001600160a01b0381166114085760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610559565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314610ad85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610559565b62034bc08111156115525760405162461bcd60e51b815260206004820152604560248201527f44656c617965645769746864726177616c526f757465722e5f7365745769746860448201527f64726177616c44656c6179426c6f636b733a206e657756616c756520746f6f206064820152646c6172676560d81b608482015260a401610559565b60c95460408051918252602082018390527f4ffb00400574147429ee377a5633386321e66d45d8b14676014b5fa393e61e9e910160405180910390a160c955565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600090815260ca602052604081208054600190910154825b848110801561161e57508161161c8285611c45565b105b156116cb576001600160a01b038616600090815260ca602052604081206001016116488386611c45565b8154811061165857611658611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061169e91611c45565b4310156116ab57506116cb565b80516116c0906001600160e01b031686611c45565b945050600101611607565b6116d58184611c45565b6001600160a01b038716600090815260ca602052604090205583156116fe576116fe868561183a565b7f6b7151500bd0b5cc211bcc47b3029831b769004df4549e8e1c9a69da05bb0943868561172b8487611c45565b604080516001600160a01b039094168452602084019290925290820152606001610e8c565b6097546001600160a01b031615801561177157506001600160a01b03821615155b6117f35760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26118368261137a565b5050565b8047101561188a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610559565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146118d7576040519150601f19603f3d011682016040523d82523d6000602084013e6118dc565b606091505b50509050806119535760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610559565b505050565b6001600160a01b038116811461056b57600080fd5b60006020828403121561197f57600080fd5b813561198a81611958565b9392505050565b6000602082840312156119a357600080fd5b5035919050565b80516001600160e01b0316825260209081015163ffffffff16910152565b602080825282518282018190526000919060409081850190868401855b82811015611a08576119f88483516119aa565b92840192908501906001016119e5565b5091979650505050505050565b600060208284031215611a2757600080fd5b813560ff8116811461198a57600080fd5b60008060408385031215611a4b57600080fd5b8235611a5681611958565b946020939093013593505050565b60408101610b5782846119aa565b60008060408385031215611a8557600080fd5b8235611a9081611958565b91506020830135611aa081611958565b809150509250929050565b60008060008060808587031215611ac157600080fd5b8435611acc81611958565b93506020850135611adc81611958565b93969395505050506040820135916060013590565b602080825282518282015282810151604080840181905281516060850181905260009392830191849160808701905b8084101561089b57611b338286516119aa565b938501936001939093019290820190611b20565b600060208284031215611b5957600080fd5b815161198a81611958565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611bc057600080fd5b8151801515811461198a57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082821015611c4057611c40611c18565b500390565b60008219821115611c5857611c58611c18565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611c8757611c87611c18565b5060010190565b634e487b7160e01b600052604160045260246000fd5b60208082526019908201527f5061757361626c653a20696e646578206973207061757365640000000000000060408201526060019056fea2646970667358221220380280a60a6f9ee66649ea48441e32dc6c7a726b1bf36930736c05eabb03978964736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x70997970c51812dc3a010c7d01b50e0d17dc79c8":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x70e0ba845a1a0f2da3359c97e0285013525ffc49":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100b35760003560e01c8063890262451161007157806389026245146101b3578063a48bb0ac146101d3578063bd29b8cd146101e6578063caa3cd76146101f9578063e2e685801461020f578063f34109221461025557600080fd5b8062bff04d146100b857806312d1d74d146100e157806326d941f2146101155780632ed583e51461012a5780636d14a9871461013d5780638121906f1461017c575b600080fd5b6100cb6100c6366004610eac565b610268565b6040516100d89190610f28565b60405180910390f35b6100f46100ef366004610f9c565b6103be565b60408051825163ffffffff16815260209283015192810192909252016100d8565b610128610123366004610fcf565b610404565b005b6100f4610138366004610fea565b610528565b6101647f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c81565b6040516001600160a01b0390911681526020016100d8565b61018f61018a366004610fcf565b6105ae565b60408051825163ffffffff90811682526020938401511692810192909252016100d8565b6101c66101c1366004610f9c565b6105f5565b6040516100d8919061102d565b61018f6101e1366004610f9c565b610754565b6101286101f4366004610eac565b6107cb565b610201600081565b6040519081526020016100d8565b61024061021d366004611065565b600160209081526000928352604080842090915290825290205463ffffffff1681565b60405163ffffffff90911681526020016100d8565b610240610263366004610fcf565b6108d5565b6060336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146102bb5760405162461bcd60e51b81526004016102b29061108f565b60405180910390fd5b60008267ffffffffffffffff8111156102d6576102d6611102565b6040519080825280602002602001820160405280156102ff578160200160208202803683370190505b50905060005b838110156103b357600085858381811061032157610321611118565b919091013560f81c60008181526003602052604081205491935090915081900361035d5760405162461bcd60e51b81526004016102b29061112e565b6000610368836108f4565b905061037f898461037a600185611199565b6109f1565b8085858151811061039257610392611118565b63ffffffff9290921660209283029190910190910152505050600101610305565b5090505b9392505050565b60408051808201909152600080825260208201526103dc8383610a7b565b60408051808201909152815463ffffffff168152600190910154602082015290505b92915050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c161461044c5760405162461bcd60e51b81526004016102b29061108f565b60ff8116600090815260036020526040902054156104c65760405162461bcd60e51b815260206004820152603160248201527f496e64657852656769737472792e63726561746551756f72756d3a2071756f72604482015270756d20616c72656164792065786973747360781b60648201526084016102b2565b60ff166000908152600360209081526040808320815180830190925263ffffffff438116835282840185815282546001810184559286529390942091519101805492518416600160201b0267ffffffffffffffff199093169190931617179055565b604080518082019091526000808252602082015260ff8416600090815260026020908152604080832063ffffffff8088168552925290912080549091841690811061057557610575611118565b600091825260209182902060408051808201909152600290920201805463ffffffff168252600101549181019190915290509392505050565b60408051808201909152600080825260208201526105cb82610ad3565b60408051808201909152905463ffffffff8082168352600160201b90910416602082015292915050565b606060006106038484610b15565b905060008163ffffffff1667ffffffffffffffff81111561062657610626611102565b60405190808252806020026020018201604052801561064f578160200160208202803683370190505b50905060005b8263ffffffff1681101561074b5761066e868287610c4a565b82828151811061068057610680611118565b6020026020010181815250506000801b8282815181106106a2576106a2611118565b6020026020010151036107435760405162461bcd60e51b815260206004820152605d60248201527f496e64657852656769737472792e6765744f70657261746f724c69737441744260448201527f6c6f636b4e756d6265723a206f70657261746f7220646f6573206e6f7420657860648201527f6973742061742074686520676976656e20626c6f636b206e756d626572000000608482015260a4016102b2565b600101610655565b50949350505050565b604080518082019091526000808252602082015260ff83166000908152600360205260409020805463ffffffff841690811061079257610792611118565b60009182526020918290206040805180820190915291015463ffffffff8082168352600160201b90910416918101919091529392505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146108135760405162461bcd60e51b81526004016102b29061108f565b60005b818110156108cf57600083838381811061083257610832611118565b919091013560f81c60008181526003602052604081205491935090915081900361086e5760405162461bcd60e51b81526004016102b29061112e565b60ff8216600090815260016020908152604080832089845290915281205463ffffffff169061089c84610d21565b905060006108aa8583610d5b565b90508089146108be576108be8186856109f1565b505060019093019250610816915050565b50505050565b60006108e082610ad3565b54600160201b900463ffffffff1692915050565b60008061090083610ad3565b805490915060009061092090600160201b900463ffffffff1660016111bd565b905061092d848383610d85565b60ff841660009081526002602052604081209061094b600184611199565b63ffffffff168152602081019190915260400160009081205490036103b75760ff8416600090815260026020526040812090610988600184611199565b63ffffffff908116825260208083019390935260409182016000908120835180850190945243831684528385018281528154600180820184559284529590922093516002909502909301805463ffffffff19169490921693909317815591519101559392505050565b60006109fd8383610a7b565b9050610a0b83838387610e23565b60ff83166000818152600160209081526040808320888452825291829020805463ffffffff191663ffffffff871690811790915582519384529083015285917f6ee1e4f4075f3d067176140d34e87874244dd273294c05b2218133e49a2ba6f6910160405180910390a250505050565b60ff8216600090815260026020908152604080832063ffffffff851684529091528120805490610aac6001836111da565b81548110610abc57610abc611118565b906000526020600020906002020191505092915050565b60ff81166000908152600360205260408120805490610af36001836111da565b81548110610b0357610b03611118565b90600052602060002001915050919050565b60ff8216600090815260036020526040812054805b8015610bbd5760ff85166000908152600360205260408120610b4d6001846111da565b81548110610b5d57610b5d611118565b60009182526020918290206040805180820190915291015463ffffffff808216808452600160201b90920481169383019390935290925090861610610baa576020015192506103fe915050565b5080610bb5816111ed565b915050610b2a565b5060405162461bcd60e51b815260206004820152605560248201527f496e64657852656769737472792e5f6f70657261746f72436f756e744174426c60448201527f6f636b4e756d6265723a2071756f72756d20646964206e6f742065786973742060648201527430ba1033b4bb32b710313637b1b590373ab6b132b960591b608482015260a4016102b2565b60ff8316600090815260026020908152604080832063ffffffff86168452909152812054805b8015610d155760ff8616600090815260026020908152604080832063ffffffff891684529091528120610ca46001846111da565b81548110610cb457610cb4611118565b600091825260209182902060408051808201909152600290920201805463ffffffff9081168084526001909201549383019390935290925090861610610d02576020015192506103b7915050565b5080610d0d816111ed565b915050610c70565b50600095945050505050565b600080610d2d83610ad3565b8054909150600090610d4e90600190600160201b900463ffffffff16611199565b90506103b7848383610d85565b600080610d688484610a7b565b6001810154909150610d7d8585846000610e23565b949350505050565b815463ffffffff438116911603610dba57815463ffffffff8216600160201b0267ffffffff0000000019909116178255505050565b60ff83166000908152600360209081526040808320815180830190925263ffffffff438116835285811683850190815282546001810184559286529390942091519101805492518416600160201b0267ffffffffffffffff199093169190931617179055505050565b815463ffffffff438116911603610e4057600182018190556108cf565b60ff93909316600090815260026020818152604080842063ffffffff968716855282528084208151808301909252438716825281830197885280546001808201835591865292909420905191909202909101805463ffffffff1916919094161783559251919092015550565b600080600060408486031215610ec157600080fd5b83359250602084013567ffffffffffffffff80821115610ee057600080fd5b818601915086601f830112610ef457600080fd5b813581811115610f0357600080fd5b876020828501011115610f1557600080fd5b6020830194508093505050509250925092565b6020808252825182820181905260009190848201906040850190845b81811015610f6657835163ffffffff1683529284019291840191600101610f44565b50909695505050505050565b803560ff81168114610f8357600080fd5b919050565b803563ffffffff81168114610f8357600080fd5b60008060408385031215610faf57600080fd5b610fb883610f72565b9150610fc660208401610f88565b90509250929050565b600060208284031215610fe157600080fd5b6103b782610f72565b600080600060608486031215610fff57600080fd5b61100884610f72565b925061101660208501610f88565b915061102460408501610f88565b90509250925092565b6020808252825182820181905260009190848201906040850190845b81811015610f6657835183529284019291840191600101611049565b6000806040838503121561107857600080fd5b61108183610f72565b946020939093013593505050565b6020808252604d908201527f496e64657852656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865207265676973747260608201526c3c9031b7b7b93234b730ba37b960991b608082015260a00190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60208082526035908201527f496e64657852656769737472792e72656769737465724f70657261746f723a206040820152741c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd605a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b63ffffffff8281168282160390808211156111b6576111b6611183565b5092915050565b63ffffffff8181168382160190808211156111b6576111b6611183565b818103818111156103fe576103fe611183565b6000816111fc576111fc611183565b50600019019056fea2646970667358221220af8de4d3486e0b797de225bb92c1953126cca4d69399c73bf6885ce4485dc52464736f6c63430008180033","storage":{"0x0":"0xff"}},"0x7969c5ed335650692bc04293b07f5bf2e7a673c0":{"nonce":1,"balance":"0x0","code":"0x608060405236601057600e6013565b005b600e5b601f601b6021565b6058565b565b600060537f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156076573d6000f35b3d6000fdfea26469706673582212201b5f899d9100d05ffd16b26a8e94bf20e28dd085fba06b911d8ef847c76d3bf864736f6c63430008180033","storage":{"0x0":"0x1","0x33":"0x14dc79964da2c08b23698b3d3cc7ca32193d9955","0xfb":"0x1613beb3b2c4f22ee086b2b38c1476a3ce7f78e8","0xfc":"0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc","0xfe":"0x41817b5c5b0c3dcda70ccb43ba175fdcd7e586f9e0484422a2c6bba678fdf4a3","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x2bdcc0de6be1f7d2ee689a0342d76f52e8efaba3"}},"0x7a2088a1bfc9d81c55368ae168c2c02570cb814f":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80635c975abb116100de578063ab5921e111610097578063df6fadc111610071578063df6fadc114610366578063e3dae51c14610381578063f3e7387514610394578063fabc1cbc146103a757600080fd5b8063ab5921e11461032b578063ce7c2ac214610340578063d9caed121461035357600080fd5b80635c975abb146102c857806361b01b5d146102d05780637a8b2637146102d9578063886f1195146102ec5780638c871019146103055780638f6a62401461031857600080fd5b80633a98ef391161014b578063485cc95511610125578063485cc9551461026b578063553ca5f81461027e578063595c6a67146102915780635ac86ab71461029957600080fd5b80633a98ef391461023857806343fe08b01461024f57806347e7ef241461025857600080fd5b8063019e27291461019357806310d67a2f146101a857806311c70c9d146101bb578063136439dd146101ce5780632495a599146101e157806339b70e3814610211575b600080fd5b6101a66101a13660046117b8565b6103ba565b005b6101a66101b6366004611802565b61049d565b6101a66101c936600461181f565b610550565b6101a66101dc366004611841565b610605565b6032546101f4906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101f47f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b61024160335481565b604051908152602001610208565b61024160645481565b61024161026636600461185a565b610749565b6101a6610279366004611886565b6108ed565b61024161028c366004611802565b6109bb565b6101a66109cf565b6102b86102a73660046118bf565b6001805460ff9092161b9081161490565b6040519015158152602001610208565b600154610241565b61024160655481565b6102416102e7366004611841565b610a9b565b6000546101f4906201000090046001600160a01b031681565b610241610313366004611841565b610ae6565b610241610326366004611802565b610af1565b610333610aff565b6040516102089190611912565b61024161034e366004611802565b610b1f565b6101a6610361366004611945565b610bb4565b60645460655460408051928352602083019190915201610208565b61024161038f366004611841565b610d7d565b6102416103a2366004611841565b610db6565b6101a66103b5366004611841565b610dc1565b600054610100900460ff16158080156103da5750600054600160ff909116105b806103f45750303b1580156103f4575060005460ff166001145b6104195760405162461bcd60e51b815260040161041090611986565b60405180910390fd5b6000805460ff19166001179055801561043c576000805461ff0019166101001790555b6104468585610f1d565b610450838361102a565b8015610496576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051491906119d4565b6001600160a01b0316336001600160a01b0316146105445760405162461bcd60e51b8152600401610410906119f1565b61054d816110bb565b50565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c791906119d4565b6001600160a01b0316336001600160a01b0316146105f75760405162461bcd60e51b8152600401610410906119f1565b6106018282610f1d565b5050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610652573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106769190611a3b565b6106925760405162461bcd60e51b815260040161041090611a5d565b6001548181161461070b5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116141561079e5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c916146108165760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b61082084846111c0565b60335460006108316103e883611abb565b905060006103e86108406112a2565b61084a9190611abb565b905060006108588783611ad3565b9050806108658489611aea565b61086f9190611b09565b9550856108d55760405162461bcd60e51b815260206004820152602e60248201527f5374726174656779426173652e6465706f7369743a206e65775368617265732060448201526d63616e6e6f74206265207a65726f60901b6064820152608401610410565b6108df8685611abb565b603355505050505092915050565b600054610100900460ff161580801561090d5750600054600160ff909116105b806109275750303b158015610927575060005460ff166001145b6109435760405162461bcd60e51b815260040161041090611986565b6000805460ff191660011790558015610966576000805461ff0019166101001790555b610970838361102a565b80156109b6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006109c96102e783610b1f565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a409190611a3b565b610a5c5760405162461bcd60e51b815260040161041090611a5d565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e8603354610aae9190611abb565b905060006103e8610abd6112a2565b610ac79190611abb565b905081610ad48583611aea565b610ade9190611b09565b949350505050565b60006109c982610d7d565b60006109c96103a283610b1f565b60606040518060800160405280604d8152602001611b61604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c990911690637a7e0d9290604401602060405180830381865afa158015610b90573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c99190611b2b565b6001805460029081161415610c075760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614610c7f5760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b610c8a848484611314565b60335480831115610d195760405162461bcd60e51b815260206004820152604d60248201527f5374726174656779426173652e77697468647261773a20616d6f756e7453686160448201527f726573206d757374206265206c657373207468616e206f7220657175616c207460648201526c6f20746f74616c53686172657360981b608482015260a401610410565b6000610d276103e883611abb565b905060006103e8610d366112a2565b610d409190611abb565b9050600082610d4f8784611aea565b610d599190611b09565b9050610d658685611ad3565b603355610d73888883611397565b5050505050505050565b6000806103e8603354610d909190611abb565b905060006103e8610d9f6112a2565b610da99190611abb565b905080610ad48386611aea565b60006109c982610a9b565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3891906119d4565b6001600160a01b0316336001600160a01b031614610e685760405162461bcd60e51b8152600401610410906119f1565b600154198119600154191614610ee65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161073e565b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a18082111561101f5760405162461bcd60e51b815260206004820152604b60248201527f53747261746567794261736554564c4c696d6974732e5f73657454564c4c696d60448201527f6974733a206d61785065724465706f7369742065786365656473206d6178546f60648201526a74616c4465706f7369747360a81b608482015260a401610410565b606491909155606555565b600054610100900460ff166110955760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610410565b603280546001600160a01b0319166001600160a01b0384161790556106018160006113ab565b6001600160a01b0381166111495760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610410565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b60645481111561122a5760405162461bcd60e51b815260206004820152602f60248201527f53747261746567794261736554564c4c696d6974733a206d617820706572206460448201526e195c1bdcda5d08195e18d959591959608a1b6064820152608401610410565b6065546112356112a2565b11156112985760405162461bcd60e51b815260206004820152602c60248201527f53747261746567794261736554564c4c696d6974733a206d6178206465706f7360448201526b1a5d1cc8195e18d95959195960a21b6064820152608401610410565b6106018282611497565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156112eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130f9190611b2b565b905090565b6032546001600160a01b038381169116146109b65760405162461bcd60e51b815260206004820152603b60248201527f5374726174656779426173652e77697468647261773a2043616e206f6e6c792060448201527f77697468647261772074686520737472617465677920746f6b656e00000000006064820152608401610410565b6109b66001600160a01b0383168483611513565b6000546201000090046001600160a01b03161580156113d257506001600160a01b03821615155b6114545760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610601826110bb565b6032546001600160a01b038381169116146106015760405162461bcd60e51b815260206004820152603660248201527f5374726174656779426173652e6465706f7369743a2043616e206f6e6c79206460448201527532b837b9b4ba103ab73232b9363cb4b733aa37b5b2b760511b6064820152608401610410565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908401526109b6928692916000916115a3918516908490611620565b8051909150156109b657808060200190518101906115c19190611a3b565b6109b65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610410565b606061162f8484600085611639565b90505b9392505050565b60608247101561169a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610410565b6001600160a01b0385163b6116f15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610410565b600080866001600160a01b0316858760405161170d9190611b44565b60006040518083038185875af1925050503d806000811461174a576040519150601f19603f3d011682016040523d82523d6000602084013e61174f565b606091505b509150915061175f82828661176a565b979650505050505050565b60608315611779575081611632565b8251156117895782518084602001fd5b8160405162461bcd60e51b81526004016104109190611912565b6001600160a01b038116811461054d57600080fd5b600080600080608085870312156117ce57600080fd5b843593506020850135925060408501356117e7816117a3565b915060608501356117f7816117a3565b939692955090935050565b60006020828403121561181457600080fd5b8135611632816117a3565b6000806040838503121561183257600080fd5b50508035926020909101359150565b60006020828403121561185357600080fd5b5035919050565b6000806040838503121561186d57600080fd5b8235611878816117a3565b946020939093013593505050565b6000806040838503121561189957600080fd5b82356118a4816117a3565b915060208301356118b4816117a3565b809150509250929050565b6000602082840312156118d157600080fd5b813560ff8116811461163257600080fd5b60005b838110156118fd5781810151838201526020016118e5565b8381111561190c576000848401525b50505050565b60208152600082518060208401526119318160408501602087016118e2565b601f01601f19169190910160400192915050565b60008060006060848603121561195a57600080fd5b8335611965816117a3565b92506020840135611975816117a3565b929592945050506040919091013590565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000602082840312156119e657600080fd5b8151611632816117a3565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611a4d57600080fd5b8151801515811461163257600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611ace57611ace611aa5565b500190565b600082821015611ae557611ae5611aa5565b500390565b6000816000190483118215151615611b0457611b04611aa5565b500290565b600082611b2657634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611b3d57600080fd5b5051919050565b60008251611b568184602087016118e2565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220ee4f89775fd0df7e89f51555e886f738dfe996deea6e76052fa01c5ef77f152864736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x809d550fca64d94bd9f66e60752a544199cfac3d":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106101fd5760003560e01c806395c6d6041161010d578063d66eaabd116100a0578063f474b5201161006f578063f474b520146106ab578063f9120af6146106d8578063fa534dc0146106f8578063fc299dee14610718578063fce36c7d1461073857600080fd5b8063d66eaabd1461062f578063df5cf72314610642578063e481af9d14610676578063f2fde38b1461068b57600080fd5b8063ab21739a116100dc578063ab21739a1461056b578063b099627e1461058b578063b98d0908146105f5578063c0c53b8b1461060f57600080fd5b806395c6d604146104eb5780639926ee7d1461050b578063a364f4da1461052b578063a98fb3551461054b57600080fd5b80634ae07c37116101905780636d14a9871161015f5780636d14a9871461042057806370a0823114610454578063715018a614610498578063800fb61f146104ad5780638da5cb5b146104cd57600080fd5b80634ae07c37146103575780635df459461461038557806368304835146103b95780636b3aa72e146103ed57600080fd5b80633bc28c8c116101cc5780633bc28c8c146102cc578063416c7e5e146102ec5780634223d5511461030c5780634a5bf6321461031f57600080fd5b806306045a9114610213578063171f1d5b146102485780632e1a7d4d1461027f57806333cfb7b71461029f57600080fd5b3661020e5761020c3334610758565b005b600080fd5b34801561021f57600080fd5b5061023361022e366004614159565b6107ed565b60405190151581526020015b60405180910390f35b34801561025457600080fd5b506102686102633660046142ab565b6108e4565b60408051921515835290151560208301520161023f565b34801561028b57600080fd5b5061020c61029a3660046142fc565b610a6e565b3480156102ab57600080fd5b506102bf6102ba366004614315565b610b46565b60405161023f9190614332565b3480156102d857600080fd5b5061020c6102e7366004614315565b610ff9565b3480156102f857600080fd5b5061020c61030736600461438d565b61100d565b61020c61031a366004614315565b611144565b34801561032b57600080fd5b5060cb5461033f906001600160a01b031681565b6040516001600160a01b03909116815260200161023f565b34801561036357600080fd5b50610377610372366004614668565b61114e565b60405161023f929190614703565b34801561039157600080fd5b5061033f7f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e81565b3480156103c557600080fd5b5061033f7f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377881565b3480156103f957600080fd5b507f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570761033f565b34801561042c57600080fd5b5061033f7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c81565b34801561046057600080fd5b5061048a61046f366004614315565b6001600160a01b0316600090815260ca602052604090205490565b60405190815260200161023f565b3480156104a457600080fd5b5061020c612082565b3480156104b957600080fd5b5061020c6104c8366004614315565b612096565b3480156104d957600080fd5b506033546001600160a01b031661033f565b3480156104f757600080fd5b50610233610506366004614794565b612136565b34801561051757600080fd5b5061020c6105263660046147df565b61215b565b34801561053757600080fd5b5061020c610546366004614315565b612227565b34801561055757600080fd5b5061020c61056636600461488a565b6122ee565b34801561057757600080fd5b5061020c6105863660046148da565b612342565b34801561059757600080fd5b506105d36105a63660046142fc565b60c9602052600090815260409020805460019091015463ffffffff821691640100000000900460ff169083565b6040805163ffffffff909416845291151560208401529082015260600161023f565b34801561060157600080fd5b506097546102339060ff1681565b34801561061b57600080fd5b5061020c61062a366004614901565b612701565b61020c61063d36600461494c565b6127eb565b34801561064e57600080fd5b5061033f7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b34801561068257600080fd5b506102bf6129a5565b34801561069757600080fd5b5061020c6106a6366004614315565b612d51565b3480156106b757600080fd5b5061048a6106c6366004614315565b60ca6020526000908152604090205481565b3480156106e457600080fd5b5061020c6106f3366004614315565b612dc7565b34801561070457600080fd5b5061023361071336600461499e565b612df1565b34801561072457600080fd5b5060655461033f906001600160a01b031681565b34801561074457600080fd5b5061020c610753366004614a1b565b612e66565b8060000361078157604051632097692160e11b8152600481018290526024015b60405180910390fd5b6001600160a01b038216600090815260ca6020526040812080548392906107a9908490614aa5565b90915550506001600160a01b038216600081815260ca6020908152604091829020549151918252600080516020615126833981519152910160405180910390a25050565b6000806001600160a01b038316610805575084610831565b8583604051602001610818929190614ab8565b6040516020818303038152906040528051906020012090505b600081815260c9602052604081205463ffffffff1690036108565760009150506108d8565b600081815260c96020526040902054640100000000900460ff1661087e5760009150506108d8565b60408051602081018c90529081018a9052606081018990526001600160601b03198816608082015260009060940160408051601f19818403018152919052805160208201209091506108d287898389613215565b93505050505b98975050505050505050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018787600001518860200151886000015160006002811061092c5761092c614ad3565b60200201518951600160200201518a6020015160006002811061095157610951614ad3565b60200201518b6020015160016002811061096d5761096d614ad3565b602090810291909101518c518d8301516040516109ca9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c6109ed9190614ae9565b9050610a60610a066109ff888461322d565b86906132be565b610a0e613353565b610a56610a4785610a41604080518082018252600080825260209182015281518083019092526001825260029082015290565b9061322d565b610a508c613413565b906132be565b886201d4c06134a2565b909890975095505050505050565b33600090815260ca6020526040902054811115610abf5733600081815260ca602052604090819020549051632e2a182f60e11b81526004810192909252602482018390526044820152606401610778565b33600090815260ca602052604081208054839290610ade908490614b0b565b909155505033600081815260ca6020908152604091829020549151918252600080516020615126833981519152910160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015610b42573d6000803e3d6000fd5b5050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16906313542a4e90602401602060405180830381865afa158015610bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd69190614b1e565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c169063871ef04990602401602060405180830381865afa158015610c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c659190614b37565b90506001600160c01b0381161580610cff57507f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfa9190614b60565b60ff16155b15610d1f5760408051600080825260208201909252905b50949350505050565b6000610d33826001600160c01b03166136bc565b90506000805b8251811015610dff577f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b0316633ca5a5f5848381518110610d8357610d83614ad3565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610deb9190614b1e565b610df59083614aa5565b9150600101610d39565b506000816001600160401b03811115610e1a57610e1a614035565b604051908082528060200260200182016040528015610e43578160200160208202803683370190505b5090506000805b8451811015610fec576000858281518110610e6757610e67614ad3565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137781690633ca5a5f590602401602060405180830381865afa158015610edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f009190614b1e565b905060005b81811015610fe1576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b03169063adc804da906044016040805180830381865afa158015610f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9e9190614b98565b60000151868681518110610fb457610fb4614ad3565b6001600160a01b039092166020928302919091019091015284610fd681614bd9565b955050600101610f05565b505050600101610e4a565b5090979650505050505050565b61100161377e565b61100a816137d8565b50565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561106b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108f9190614bf2565b6001600160a01b0316336001600160a01b03161461113b5760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a401610778565b61100a81613841565b61100a8134610758565b604080518082019091526060808252602082015260008260400151516040518060400160405280600181526020016000815250511480156111aa57508260a0015151604051806040016040528060018152602001600081525051145b80156111d157508260c0015151604051806040016040528060018152602001600081525051145b80156111f857508260e0015151604051806040016040528060018152602001600081525051145b6112625760405162461bcd60e51b8152602060048201526041602482015260008051602061514683398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a401610778565b825151602084015151146112da5760405162461bcd60e51b815260206004820152604460248201819052600080516020615146833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a401610778565b4363ffffffff168463ffffffff16106113495760405162461bcd60e51b815260206004820152603c602482015260008051602061514683398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b000000006064820152608401610778565b60408051808201825260008082526020808301829052835180850185526060808252818301528451808601865260018082529083019390935284518381528086019095529293919082810190803683370190505060208281019190915260408051808201825260018082526000919093015280518281528082019091529081602001602082028036833701905050815260408051808201909152606080825260208201528560200151516001600160401b0381111561140a5761140a614035565b604051908082528060200260200182016040528015611433578160200160208202803683370190505b5081526020860151516001600160401b0381111561145357611453614035565b60405190808252806020026020018201604052801561147c578160200160208202803683370190505b508160200181905250600061152860405180604001604052806001815260200160008152507f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115239190614b60565b613888565b905060005b8760200151518110156117b9576115728860200151828151811061155357611553614ad3565b6020026020010151805160009081526020918201519091526040902090565b8360200151828151811061158857611588614ad3565b602090810291909101015280156116485760208301516115a9600183614b0b565b815181106115b9576115b9614ad3565b602002602001015160001c836020015182815181106115da576115da614ad3565b602002602001015160001c11611648576040805162461bcd60e51b815260206004820152602481019190915260008051602061514683398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f727465646064820152608401610778565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b03166304ec63518460200151838151811061168d5761168d614ad3565b60200260200101518b8b6000015185815181106116ac576116ac614ad3565b60200260200101516040518463ffffffff1660e01b81526004016116e99392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015611706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172a9190614b37565b6001600160c01b03168360000151828151811061174957611749614ad3565b6020026020010181815250506117af6109ff611783848660000151858151811061177557611775614ad3565b60200260200101511661391b565b8a60200151848151811061179957611799614ad3565b602002602001015161394690919063ffffffff16565b945060010161152d565b50506117c483613a29565b60975490935060ff166000816117db57600061185d565b7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc96001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d9190614b1e565b905060005b604051806040016040528060018152602001600081525051811015611f535782156119ee578963ffffffff16827f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b031663249a0c42604051806040016040528060018152602001600081525085815181106118e6576118e6614ad3565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa15801561192a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194e9190614b1e565b6119589190614aa5565b116119ee5760405162461bcd60e51b8152602060048201526066602482015260008051602061514683398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c401610778565b7f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b03166368bccaac60405180604001604052806001815260200160008152508381518110611a4557611a45614ad3565b602001015160f81c60f81b60f81c8c8c60a001518581518110611a6a57611a6a614ad3565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611ac6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aea9190614c0f565b6001600160401b031916611b0d8a60400151838151811061155357611553614ad3565b67ffffffffffffffff191614611ba95760405162461bcd60e51b8152602060048201526061602482015260008051602061514683398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c401610778565b611bd989604001518281518110611bc257611bc2614ad3565b6020026020010151876132be90919063ffffffff16565b95507f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b031663c8294c5660405180604001604052806001815260200160008152508381518110611c3257611c32614ad3565b602001015160f81c60f81b60f81c8c8c60c001518581518110611c5757611c57614ad3565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611cb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd79190614c3a565b85602001518281518110611ced57611ced614ad3565b6001600160601b03909216602092830291909101820152850151805182908110611d1957611d19614ad3565b602002602001015185600001518281518110611d3757611d37614ad3565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015611f4957611dc686600001518281518110611d8157611d81614ad3565b602002602001015160405180604001604052806001815260200160008152508581518110611db157611db1614ad3565b016020015160f81c60ff161c60019081161490565b15611f41577f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b031663f2be94ae60405180604001604052806001815260200160008152508581518110611e2257611e22614ad3565b602001015160f81c60f81b60f81c8e89602001518581518110611e4757611e47614ad3565b60200260200101518f60e001518881518110611e6557611e65614ad3565b60200260200101518781518110611e7e57611e7e614ad3565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa158015611ee2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f069190614c3a565b8751805185908110611f1a57611f1a614ad3565b60200260200101818151611f2e9190614c57565b6001600160601b03169052506001909101905b600101611d5b565b5050600101611862565b505050600080611f6d8a868a606001518b608001516108e4565b9150915081611fde5760405162461bcd60e51b8152602060048201526043602482015260008051602061514683398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a401610778565b8061203f5760405162461bcd60e51b8152602060048201526039602482015260008051602061514683398151915260448201527f7265733a207369676e617475726520697320696e76616c6964000000000000006064820152608401610778565b5050600087826020015160405160200161205a929190614c7e565b60408051808303601f1901815291905280516020909101209299929850919650505050505050565b61208a61377e565b6120946000613ac4565b565b600054600290610100900460ff161580156120b8575060005460ff8083169116105b6120d45760405162461bcd60e51b815260040161077890614cc6565b6000805461ffff191660ff8316176101001790556120f182612dc7565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6000818484604051612149929190614d14565b60405180910390201490509392505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146121a35760405162461bcd60e51b815260040161077890614d24565b604051639926ee7d60e01b81526001600160a01b037f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f8757071690639926ee7d906121f19085908590600401614de2565b600060405180830381600087803b15801561220b57600080fd5b505af115801561221f573d6000803e3d6000fd5b505050505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c161461226f5760405162461bcd60e51b815260040161077890614d24565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f875707169063a364f4da906024015b600060405180830381600087803b1580156122d357600080fd5b505af11580156122e7573d6000803e3d6000fd5b5050505050565b6122f661377e565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f875707169063a98fb355906122b9908490600401614e2d565b60cb546001600160a01b031633146123825760cb54604051632cbe419560e01b81523360048201526001600160a01b039091166024820152604401610778565b60005a90506000848460405160200161239c929190614ab8565b60408051601f198184030181529181528151602092830120600081815260c990935290822080549193509163ffffffff90911690036123f1576040516311cb69a760e11b815260048101839052602401610778565b8054640100000000900460ff161561241f57604051634e78d7f960e11b815260048101839052602401610778565b805464ff00000000191664010000000017815560018101546001600160a01b038616600090815260ca602052604090205410156124a25760018101546001600160a01b038616600081815260ca602052604090819020549051632e2a182f60e11b8152600481019290925260248201929092526044810191909152606401610778565b80546000906124b990849063ffffffff168761114e565b509050604360ff1681602001516000815181106124d8576124d8614ad3565b60200260200101516124ea9190614e40565b6001600160601b03166064826000015160008151811061250c5761250c614ad3565b60200260200101516001600160601b03166125279190614e63565b10156125ba576064816000015160008151811061254657612546614ad3565b60200260200101516001600160601b03166125619190614e63565b604360ff16826020015160008151811061257d5761257d614ad3565b602002602001015161258f9190614e40565b60405163530f5c4560e11b815260048101929092526001600160601b03166024820152604401610778565b6040516001600160a01b038716815287907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260003a5a6126069087614b0b565b6126139062011170614aa5565b61261d9190614e63565b9050826001015481111561265457600183015460405163437e283f60e11b8152600481019190915260248101829052604401610778565b6001600160a01b038716600090815260ca60205260408120805483929061267c908490614b0b565b90915550506001600160a01b038716600081815260ca6020908152604091829020549151918252600080516020615126833981519152910160405180910390a260cb546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156126f6573d6000803e3d6000fd5b505050505050505050565b600054610100900460ff16158080156127215750600054600160ff909116105b8061273b5750303b15801561273b575060005460ff166001145b6127575760405162461bcd60e51b815260040161077890614cc6565b6000805460ff19166001179055801561277a576000805461ff0019166101001790555b6127848484613b16565b60cb80546001600160a01b0319166001600160a01b03841617905580156127e5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60008433604051602001612800929190614ab8565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff161561284f57604051630c40bc4360e21b815260048101829052602401610778565b34156128ac5733600090815260ca602052604081208054349290612874908490614aa5565b909155505033600081815260ca6020908152604091829020549151918252600080516020615126833981519152910160405180910390a25b33600090815260ca60205260409020548211156128fd5733600081815260ca602052604090819020549051632e2a182f60e11b81526004810192909252602482018490526044820152606401610778565b604080516060810182526000602080830182815263ffffffff43818116865285870189815288865260c99094529386902085518154935115156401000000000264ffffffffff1990941692169190911791909117815590516001909101559151909187917f8801fc966deb2c8f563a103c35c9e80740585c292cd97518587e6e7927e6af5591612995913391908a908a908a90614e7a565b60405180910390a2505050505050565b606060007f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2b9190614b60565b60ff16905080600003612a4c57505060408051600081526020810190915290565b6000805b82811015612af757604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612abf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae39190614b1e565b612aed9083614aa5565b9150600101612a50565b506000816001600160401b03811115612b1257612b12614035565b604051908082528060200260200182016040528015612b3b578160200160208202803683370190505b5090506000805b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc49190614b60565b60ff16811015612d4757604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5c9190614b1e565b905060005b81811015612d3d576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b03169063adc804da906044016040805180830381865afa158015612cd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfa9190614b98565b60000151858581518110612d1057612d10614ad3565b6001600160a01b039092166020928302919091019091015283612d3281614bd9565b945050600101612c61565b5050600101612b42565b5090949350505050565b612d5961377e565b6001600160a01b038116612dbe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610778565b61100a81613ac4565b612dcf61377e565b60cb80546001600160a01b0319166001600160a01b0392909216919091179055565b6040516306045a9160e01b815260009030906306045a9190612e25908b908b908b908b908b908b908b908b90600401614ed1565b602060405180830381865afa158015612e42573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d89190614f33565b6065546001600160a01b03163314612efb5760405162461bcd60e51b815260206004820152604c60248201527f536572766963654d616e61676572426173652e6f6e6c7952657761726473496e60448201527f69746961746f723a2063616c6c6572206973206e6f742074686520726577617260648201526b32399034b734ba34b0ba37b960a11b608482015260a401610778565b60005b818110156131c657828282818110612f1857612f18614ad3565b9050602002810190612f2a9190614f50565b612f3b906040810190602001614315565b6001600160a01b03166323b872dd3330868686818110612f5d57612f5d614ad3565b9050602002810190612f6f9190614f50565b604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152013560448201526064016020604051808303816000875af1158015612fc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fea9190614f33565b506000838383818110612fff57612fff614ad3565b90506020028101906130119190614f50565b613022906040810190602001614315565b604051636eb1769f60e11b81523060048201526001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81166024830152919091169063dd62ed3e90604401602060405180830381865afa158015613090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b49190614b1e565b90508383838181106130c8576130c8614ad3565b90506020028101906130da9190614f50565b6130eb906040810190602001614315565b6001600160a01b031663095ea7b37f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f8387878781811061312d5761312d614ad3565b905060200281019061313f9190614f50565b6040013561314d9190614aa5565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015613198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131bc9190614f33565b5050600101612efe565b5060405163fce36c7d60e01b81526001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f169063fce36c7d906121f19085908590600401614fd6565b600083613223868585613b93565b1495945050505050565b6040805180820190915260008082526020820152613249613f43565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808061327857fe5b50806132b65760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610778565b505092915050565b60408051808201909152600080825260208201526132da613f61565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808061331557fe5b50806132b65760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610778565b61335b613f7f565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201909152600080825260208201526000808061344360008051602061510683398151915286614ae9565b90505b61344f81613c90565b90935091506000805160206151068339815191528283098303613488576040805180820190915290815260208101919091529392505050565b600080516020615106833981519152600182089050613446565b6040805180820182528681526020808201869052825180840190935286835282018490526000918291906134d4613fa4565b60005b600281101561368f5760006134ed826006614e63565b905084826002811061350157613501614ad3565b60200201515183613513836000614aa5565b600c811061352357613523614ad3565b602002015284826002811061353a5761353a614ad3565b602002015160200151838260016135519190614aa5565b600c811061356157613561614ad3565b602002015283826002811061357857613578614ad3565b602002015151518361358b836002614aa5565b600c811061359b5761359b614ad3565b60200201528382600281106135b2576135b2614ad3565b60200201515160016020020151836135cb836003614aa5565b600c81106135db576135db614ad3565b60200201528382600281106135f2576135f2614ad3565b60200201516020015160006002811061360d5761360d614ad3565b60200201518361361e836004614aa5565b600c811061362e5761362e614ad3565b602002015283826002811061364557613645614ad3565b60200201516020015160016002811061366057613660614ad3565b602002015183613671836005614aa5565b600c811061368157613681614ad3565b6020020152506001016134d7565b50613698613fc3565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b60606000806136ca8461391b565b61ffff166001600160401b038111156136e5576136e5614035565b6040519080825280601f01601f19166020018201604052801561370f576020820181803683370190505b5090506000805b825182108015613727575061010081105b15612d47576001811b93508584161561376e578060f81b83838151811061375057613750614ad3565b60200101906001600160f81b031916908160001a9053508160010191505b61377781614bd9565b9050613716565b6033546001600160a01b031633146120945760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610778565b606554604080516001600160a01b03928316815291831660208301527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b60008061389484613d12565b9050808360ff166001901b116139125760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610778565b90505b92915050565b6000805b821561391557613930600184614b0b565b909216918061393e816150e4565b91505061391f565b60408051808201909152600080825260208201526102008261ffff16106139a25760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b6044820152606401610778565b8161ffff166001036139b5575081613915565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610613a1e57600161ffff871660ff83161c81169003613a01576139fe84846132be565b93505b613a0b83846132be565b92506201fffe600192831b1691016139d1565b509195945050505050565b60408051808201909152600080825260208201528151158015613a4e57506020820151155b15613a6c575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206151068339815191528460200151613a9f9190614ae9565b613ab790600080516020615106833981519152614b0b565b905292915050565b919050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613b815760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610778565b613b8a82613ac4565b610b42816137d8565b600060208451613ba39190614ae9565b15613c2a5760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a401610778565b8260205b85518111610d1657613c41600285614ae9565b600003613c6557816000528086015160205260406000209150600284049350613c7e565b8086015160005281602052604060002091506002840493505b613c89602082614aa5565b9050613c2e565b60008080600080516020615106833981519152600360008051602061510683398151915286600080516020615106833981519152888909090890506000613d06827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615106833981519152613e9a565b91959194509092505050565b600061010082511115613d9b5760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610778565b8151600003613dac57506000919050565b60008083600081518110613dc257613dc2614ad3565b0160200151600160f89190911c81901b92505b8451811015613e9157848181518110613df057613df0614ad3565b0160200151600160f89190911c1b9150828211613e855760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610778565b91811791600101613dd5565b50909392505050565b600080613ea5613fc3565b613ead613fe1565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280613eea57fe5b5082613f385760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610778565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613f92613fff565b8152602001613f9f613fff565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356001600160601b031981168114613abf57600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561406d5761406d614035565b60405290565b60405161010081016001600160401b038111828210171561406d5761406d614035565b604051601f8201601f191681016001600160401b03811182821017156140be576140be614035565b604052919050565b60006001600160401b038311156140df576140df614035565b6140f2601f8401601f1916602001614096565b905082815283838301111561410657600080fd5b828260208301376000602084830101529392505050565b600082601f83011261412e57600080fd5b61413d838335602085016140c6565b9392505050565b6001600160a01b038116811461100a57600080fd5b600080600080600080600080610100898b03121561417657600080fd5b88359750602089013596506040890135955061419460608a0161401d565b94506080890135935060a08901356001600160401b038111156141b657600080fd5b6141c28b828c0161411d565b93505060c0890135915060e08901356141da81614144565b809150509295985092959890939650565b6000604082840312156141fd57600080fd5b61420561404b565b9050813581526020820135602082015292915050565b600082601f83011261422c57600080fd5b61423461404b565b80604084018581111561424657600080fd5b845b81811015614260578035845260209384019301614248565b509095945050505050565b60006080828403121561427d57600080fd5b61428561404b565b9050614291838361421b565b81526142a0836040840161421b565b602082015292915050565b60008060008061012085870312156142c257600080fd5b843593506142d386602087016141eb565b92506142e2866060870161426b565b91506142f18660e087016141eb565b905092959194509250565b60006020828403121561430e57600080fd5b5035919050565b60006020828403121561432757600080fd5b813561391281614144565b6020808252825182820181905260009190848201906040850190845b818110156143735783516001600160a01b03168352928401929184019160010161434e565b50909695505050505050565b801515811461100a57600080fd5b60006020828403121561439f57600080fd5b81356139128161437f565b803563ffffffff81168114613abf57600080fd5b60006001600160401b038211156143d7576143d7614035565b5060051b60200190565b600082601f8301126143f257600080fd5b81356020614407614402836143be565b614096565b8083825260208201915060208460051b87010193508684111561442957600080fd5b602086015b8481101561444c5761443f816143aa565b835291830191830161442e565b509695505050505050565b600082601f83011261446857600080fd5b81356020614478614402836143be565b8083825260208201915060208460061b87010193508684111561449a57600080fd5b602086015b8481101561444c576144b188826141eb565b83529183019160400161449f565b600082601f8301126144d057600080fd5b813560206144e0614402836143be565b82815260059290921b840181019181810190868411156144ff57600080fd5b8286015b8481101561444c5780356001600160401b038111156145225760008081fd5b6145308986838b01016143e1565b845250918301918301614503565b6000610180828403121561455157600080fd5b614559614073565b905081356001600160401b038082111561457257600080fd5b61457e858386016143e1565b8352602084013591508082111561459457600080fd5b6145a085838601614457565b602084015260408401359150808211156145b957600080fd5b6145c585838601614457565b60408401526145d7856060860161426b565b60608401526145e98560e086016141eb565b608084015261012084013591508082111561460357600080fd5b61460f858386016143e1565b60a084015261014084013591508082111561462957600080fd5b614635858386016143e1565b60c084015261016084013591508082111561464f57600080fd5b5061465c848285016144bf565b60e08301525092915050565b60008060006060848603121561467d57600080fd5b8335925061468d602085016143aa565b915060408401356001600160401b038111156146a857600080fd5b6146b48682870161453e565b9150509250925092565b60008151808452602080850194506020840160005b838110156146f85781516001600160601b0316875295820195908201906001016146d3565b509495945050505050565b604081526000835160408084015261471e60808401826146be565b90506020850151603f1984830301606085015261473b82826146be565b925050508260208301529392505050565b60008083601f84011261475e57600080fd5b5081356001600160401b0381111561477557600080fd5b60208301915083602082850101111561478d57600080fd5b9250929050565b6000806000604084860312156147a957600080fd5b83356001600160401b038111156147bf57600080fd5b6147cb8682870161474c565b909790965060209590950135949350505050565b600080604083850312156147f257600080fd5b82356147fd81614144565b915060208301356001600160401b038082111561481957600080fd5b908401906060828703121561482d57600080fd5b60405160608101818110838211171561484857614848614035565b60405282358281111561485a57600080fd5b6148668882860161411d565b82525060208301356020820152604083013560408201528093505050509250929050565b60006020828403121561489c57600080fd5b81356001600160401b038111156148b257600080fd5b8201601f810184136148c357600080fd5b6148d2848235602084016140c6565b949350505050565b6000806000606084860312156148ef57600080fd5b83359250602084013561468d81614144565b60008060006060848603121561491657600080fd5b833561492181614144565b9250602084013561493181614144565b9150604084013561494181614144565b809150509250925092565b6000806000806060858703121561496257600080fd5b8435935060208501356001600160401b0381111561497f57600080fd5b61498b8782880161474c565b9598909750949560400135949350505050565b600080600080600080600060e0888a0312156149b957600080fd5b8735965060208801359550604088013594506149d76060890161401d565b93506080880135925060a08801356001600160401b038111156149f957600080fd5b614a058a828b0161411d565b92505060c0880135905092959891949750929550565b60008060208385031215614a2e57600080fd5b82356001600160401b0380821115614a4557600080fd5b818501915085601f830112614a5957600080fd5b813581811115614a6857600080fd5b8660208260051b8501011115614a7d57600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561391557613915614a8f565b91825260601b6001600160601b031916602082015260340190565b634e487b7160e01b600052603260045260246000fd5b600082614b0657634e487b7160e01b600052601260045260246000fd5b500690565b8181038181111561391557613915614a8f565b600060208284031215614b3057600080fd5b5051919050565b600060208284031215614b4957600080fd5b81516001600160c01b038116811461391257600080fd5b600060208284031215614b7257600080fd5b815160ff8116811461391257600080fd5b6001600160601b038116811461100a57600080fd5b600060408284031215614baa57600080fd5b614bb261404b565b8251614bbd81614144565b81526020830151614bcd81614b83565b60208201529392505050565b600060018201614beb57614beb614a8f565b5060010190565b600060208284031215614c0457600080fd5b815161391281614144565b600060208284031215614c2157600080fd5b815167ffffffffffffffff198116811461391257600080fd5b600060208284031215614c4c57600080fd5b815161391281614b83565b6001600160601b03828116828216039080821115614c7757614c77614a8f565b5092915050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015614cb957815185529382019390820190600101614c9d565b5092979650505050505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b8183823760009101908152919050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015614dc257602081850181015186830182015201614da6565b506000602082860101526020601f19601f83011685010191505092915050565b60018060a01b0383168152604060208201526000825160606040840152614e0c60a0840182614d9c565b90506020840151606084015260408401516080840152809150509392505050565b60208152600061413d6020830184614d9c565b6001600160601b038181168382160280821691908281146132b6576132b6614a8f565b808202811582820484141761391557613915614a8f565b6001600160a01b038616815263ffffffff851660208201526080604082018190528101839052828460a0830137600060a08483010152600060a0601f19601f86011683010190508260608301529695505050505050565b60006101008a83528960208401528860408401526001600160601b0319881660608401528660808401528060a0840152614f0d81840187614d9c565b60c084019590955250506001600160a01b039190911660e0909101529695505050505050565b600060208284031215614f4557600080fd5b81516139128161437f565b60008235609e19833603018112614f6657600080fd5b9190910192915050565b8035613abf81614144565b8183526000602080850194508260005b858110156146f8578135614f9e81614144565b6001600160a01b0316875281830135614fb681614b83565b6001600160601b0316878401526040968701969190910190600101614f8b565b60208082528181018390526000906040808401600586901b8501820187855b888110156150d657878303603f190184528135368b9003609e1901811261501b57600080fd5b8a0160a0813536839003601e1901811261503457600080fd5b820188810190356001600160401b0381111561504f57600080fd5b8060061b360382131561506157600080fd5b8287526150718388018284614f7b565b92505050615080888301614f70565b6001600160a01b031688860152818701358786015260606150a28184016143aa565b63ffffffff169086015260806150b98382016143aa565b63ffffffff16950194909452509285019290850190600101614ff5565b509098975050505050505050565b600061ffff8083168181036150fb576150fb614a8f565b600101939250505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0424c535369676e6174757265436865636b65722e636865636b5369676e617475a264697066735822122017381a449597ef4922b265b1d7131ee36bc696eb6b14b71efceea2c44e79114764736f6c63430008180033","storage":{"0x0":"0xff"}},"0x82e01223d51eb87e16a03e24687edf0f294da6f1":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063bd90df701461003b578063fa534dc01461006b575b600080fd5b60005461004e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61007e6100793660046101b7565b61008e565b6040519015158152602001610062565b60008054604051829182916001600160a01b03909116906100bf908c908c908c908c908c908c908c906024016102ed565b60408051601f198184030181529181526020820180516001600160e01b03166303e94d3760e61b179052516100f4919061035c565b600060405180830381855afa9150503d806000811461012f576040519150601f19603f3d011682016040523d82523d6000602084013e610134565b606091505b50915091508161017f5760405162461bcd60e51b81526020600482015260126024820152711cdd185d1a58d7d8d85b1b0819985a5b195960721b604482015260640160405180910390fd5b808060200190518101906101939190610378565b9a9950505050505050505050565b634e487b7160e01b600052604160045260246000fd5b600080600080600080600060e0888a0312156101d257600080fd5b87359650602088013595506040880135945060608801356bffffffffffffffffffffffff198116811461020457600080fd5b93506080880135925060a088013567ffffffffffffffff8082111561022857600080fd5b818a0191508a601f83011261023c57600080fd5b81358181111561024e5761024e6101a1565b604051601f8201601f19908116603f01168101908382118183101715610276576102766101a1565b816040528281528d602084870101111561028f57600080fd5b82602086016020830137600060208483010152809650505050505060c0880135905092959891949750929550565b60005b838110156102d85781810151838201526020016102c0565b838111156102e7576000848401525b50505050565b8781528660208201528560408201526bffffffffffffffffffffffff198516606082015283608082015260e060a0820152600083518060e084015261010061033b82828601602089016102bd565b60c0840194909452601f01601f191691909101909101979650505050505050565b6000825161036e8184602087016102bd565b9190910192915050565b60006020828403121561038a57600080fd5b8151801515811461039a57600080fd5b939250505056fea2646970667358221220355151a18763854f71011cb9636c419bc4393ef5d1924777a929c1e19aaa390964736f6c634300080c0033","storage":{"0x0":"0x1613beb3b2c4f22ee086b2b38c1476a3ce7f78e8"}},"0x851356ae760d987e095750cceb3bc6014560891c":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106a6565b610118565b61005b6100933660046106c1565b610155565b3480156100a457600080fd5b506100ad6101bc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106a6565b6101ed565b3480156100f557600080fd5b506100ad61020d565b61010661022e565b6101166101116102c3565b6102cd565b565b6101206102f1565b6001600160a01b0316330361014d5761014a81604051806020016040528060008152506000610324565b50565b61014a6100fe565b61015d6102f1565b6001600160a01b031633036101b4576101af8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610324915050565b505050565b6101af6100fe565b60006101c66102f1565b6001600160a01b031633036101e2576101dd6102c3565b905090565b6101ea6100fe565b90565b6101f56102f1565b6001600160a01b0316330361014d5761014a8161034f565b60006102176102f1565b6001600160a01b031633036101e2576101dd6102f1565b6102366102f1565b6001600160a01b031633036101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101dd6103a3565b3660008037600080366000845af43d6000803e8080156102ec573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b61032d836103cb565b60008251118061033a5750805b156101af57610349838361040b565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103786102f1565b604080516001600160a01b03928316815291841660208301520160405180910390a161014a81610437565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610315565b6103d4816104e0565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061043083836040518060600160405280602781526020016107b860279139610574565b9392505050565b6001600160a01b03811661049c5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016102ba565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b61054d5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016102ba565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6104bf565b60606001600160a01b0384163b6105dc5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016102ba565b600080856001600160a01b0316856040516105f79190610768565b600060405180830381855af49150503d8060008114610632576040519150601f19603f3d011682016040523d82523d6000602084013e610637565b606091505b5091509150610647828286610651565b9695505050505050565b60608315610660575081610430565b8251156106705782518084602001fd5b8160405162461bcd60e51b81526004016102ba9190610784565b80356001600160a01b03811681146106a157600080fd5b919050565b6000602082840312156106b857600080fd5b6104308261068a565b6000806000604084860312156106d657600080fd5b6106df8461068a565b9250602084013567ffffffffffffffff808211156106fc57600080fd5b818601915086601f83011261071057600080fd5b81358181111561071f57600080fd5b87602082850101111561073157600080fd5b6020830194508093505050509250925092565b60005b8381101561075f578181015183820152602001610747565b50506000910152565b6000825161077a818460208701610744565b9190910192915050565b60208152600082518060208401526107a3816040850160208701610744565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206f42262012bb1d1a07475f68d95d58d18353d78d57c71d0a11845bbf297d596564736f6c63430008180033","storage":{"0x0":"0xe7f1725e7734ce288f8367e1bb143e90bb3f05120001","0x1":"0x0","0x64":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x96":"0x1","0x9c":"0x3","0x9d":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x9e":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x5eb3bc0a489c5a8288765d2336659ebca68fcd00","0x683723e34a772b6e4f2c919bba7fa32ed8ea11a8325f54da7db716e9d9dd98c7":"0x322af8000000c8","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539c":"0x95401dc811bb5740090279ba06cfa8fcf6113778","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539d":"0x998abeb3e57409262ae5b751f60747921b33613e","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539e":"0xf5059a5d33d5853360d16c683c16e67980206f36","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x9e545e3c0baab3e08cdfd552c960a1050f373042"}},"0x8a791620dd6260079bf849dc5567adc3f2fdc318":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x97":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x98":"0x0","0xc9":"0xa","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x68b1d87f95878fe05b998f19b66f4baba5de1aed","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x8f86403a4de0bb5791fa46b8e795c547942fe4cf":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101155760003560e01c80636d14a987116100a2578063bf79ce5811610071578063bf79ce58146103cc578063d5254a8c146103df578063de29fac0146103ff578063e8bb9ae61461041f578063f4e24fe51461044857600080fd5b80636d14a9871461030a5780637916cea6146103315780637ff81a8714610372578063a3db80e2146103a557600080fd5b80633fb27952116100e95780633fb27952146101df57806347b314e8146101f25780635f61a88414610233578063605747d51461028f57806368bccaac146102dd57600080fd5b8062a1f4cb1461011a57806313542a4e1461015b57806326d941f214610192578063377ed99d146101a7575b600080fd5b6101416101283660046118e3565b6003602052600090815260409020805460019091015482565b604080519283526020830191909152015b60405180910390f35b6101846101693660046118e3565b6001600160a01b031660009081526001602052604090205490565b604051908152602001610152565b6101a56101a0366004611916565b61045b565b005b6101ca6101b5366004611916565b60ff1660009081526004602052604090205490565b60405163ffffffff9091168152602001610152565b6101a56101ed3660046119a1565b6105b4565b61021b610200366004611a47565b6000908152600260205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610152565b610282610241366004611916565b60408051808201909152600080825260208201525060ff16600090815260056020908152604091829020825180840190935280548352600101549082015290565b6040516101529190611a60565b6102a261029d366004611a77565b610672565b60408051825167ffffffffffffffff1916815260208084015163ffffffff908116918301919091529282015190921690820152606001610152565b6102f06102eb366004611aa1565b610705565b60405167ffffffffffffffff199091168152602001610152565b61021b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c81565b61034461033f366004611a77565b6108a0565b6040805167ffffffffffffffff19909416845263ffffffff9283166020850152911690820152606001610152565b6103856103803660046118e3565b6108eb565b604080518351815260209384015193810193909352820152606001610152565b6101416103b3366004611916565b6005602052600090815260409020805460019091015482565b6101846103da366004611ae9565b6109b8565b6103f26103ed366004611b46565b610e0b565b6040516101529190611bbe565b61018461040d3660046118e3565b60016020526000908152604090205481565b61021b61042d366004611a47565b6002602052600090815260409020546001600160a01b031681565b6101a56104563660046119a1565b61101a565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146104ac5760405162461bcd60e51b81526004016104a390611c08565b60405180910390fd5b60ff81166000908152600460205260409020541561052b5760405162461bcd60e51b815260206004820152603660248201527f424c5341706b52656769737472792e696e697469616c697a6551756f72756d3a6044820152752071756f72756d20616c72656164792065786973747360501b60648201526084016104a3565b60ff166000908152600460209081526040808320815160608101835284815263ffffffff4381168286019081528285018781528454600181018655948852959096209151919092018054955194518316600160e01b026001600160e01b0395909316600160c01b026001600160e01b03199096169190931c179390931791909116919091179055565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146105fc5760405162461bcd60e51b81526004016104a390611c08565b6000610607836108eb565b50905061061482826110c3565b7f73a2b7fb844724b971802ae9b15db094d4b7192df9d7350e14eb466b9b22eb4e83610655856001600160a01b031660009081526001602052604090205490565b8460405161066593929190611c7c565b60405180910390a1505050565b604080516060810182526000808252602080830182905282840182905260ff8616825260049052919091208054839081106106af576106af611ce2565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b8204811694830194909452600160e01b90049092169082015290505b92915050565b60ff8316600090815260046020526040812080548291908490811061072c5761072c611ce2565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b82048116948301859052600160e01b9091048116928201929092529250851610156107f35760405162461bcd60e51b815260206004820152603e60248201527f424c5341706b52656769737472792e5f76616c696461746541706b486173684160448201527f74426c6f636b4e756d6265723a20696e64657820746f6f20726563656e74000060648201526084016104a3565b604081015163ffffffff1615806108195750806040015163ffffffff168463ffffffff16105b6108975760405162461bcd60e51b815260206004820152604360248201527f424c5341706b52656769737472792e5f76616c696461746541706b486173684160448201527f74426c6f636b4e756d6265723a206e6f74206c61746573742061706b2075706460648201526261746560e81b608482015260a4016104a3565b51949350505050565b600460205281600052604060002081815481106108bc57600080fd5b600091825260209091200154604081901b925063ffffffff600160c01b820481169250600160e01b9091041683565b60408051808201909152600080825260208201526001600160a01b0382166000818152600360209081526040808320815180830183528154815260019182015481850152948452909152812054909190806109ae5760405162461bcd60e51b815260206004820152603e60248201527f424c5341706b52656769737472792e676574526567697374657265645075626b60448201527f65793a206f70657261746f72206973206e6f742072656769737465726564000060648201526084016104a3565b9094909350915050565b6000336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c1614610a025760405162461bcd60e51b81526004016104a390611c08565b6000610a30610a1936869003860160408701611cf8565b805160009081526020918201519091526040902090565b90507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb58103610ab7576040805162461bcd60e51b8152602060048201526024810191909152600080516020611eb283398151915260448201527f4b65793a2063616e6e6f74207265676973746572207a65726f207075626b657960648201526084016104a3565b6001600160a01b03851660009081526001602052604090205415610b415760405162461bcd60e51b81526020600482015260476024820152600080516020611eb283398151915260448201527f4b65793a206f70657261746f7220616c72656164792072656769737465726564606482015266207075626b657960c81b608482015260a4016104a3565b6000818152600260205260409020546001600160a01b031615610bc55760405162461bcd60e51b81526020600482015260426024820152600080516020611eb283398151915260448201527f4b65793a207075626c6963206b657920616c7265616479207265676973746572606482015261195960f21b608482015260a4016104a3565b604080516000917f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000191610c1e918835916020808b0135928b01359160608c01359160808d019160c08e01918d35918e8201359101611d2a565b6040516020818303038152906040528051906020012060001c610c419190611d6c565b9050610cdb610c7a610c6583610c5f368a90038a0160408b01611cf8565b90611307565b610c7436899003890189611cf8565b90611398565b610c8261142d565b610cc4610cb585610c5f604080518082018252600080825260209182015281518083019092526001825260029082015290565b610c74368a90038a018a611cf8565b610cd6368a90038a0160808b01611dde565b6114ed565b610d765760405162461bcd60e51b815260206004820152606c6024820152600080516020611eb283398151915260448201527f4b65793a2065697468657220746865204731207369676e61747572652069732060648201527f77726f6e672c206f7220473120616e642047322070726976617465206b65792060848201526b0c8de40dcdee840dac2e8c6d60a31b60a482015260c4016104a3565b6001600160a01b03861660008181526003602090815260408083208982018035825560608b013560019283015590835281842087905586845260029092529182902080546001600160a01b0319168417905590517fe3fb6613af2e8930cf85d47fcf6db10192224a64c6cbe8023e0eee1ba382804191610dfa9160808a0190611e1d565b60405180910390a250949350505050565b606060008367ffffffffffffffff811115610e2857610e28611931565b604051908082528060200260200182016040528015610e51578160200160208202803683370190505b50905060005b84811015611011576000868683818110610e7357610e73611ce2565b919091013560f81c6000818152600460205260409020549092509050801580610ed6575060ff821660009081526004602052604081208054909190610eba57610eba611ce2565b600091825260209091200154600160c01b900463ffffffff1686105b15610f635760405162461bcd60e51b815260206004820152605160248201527f424c5341706b52656769737472792e67657441706b496e64696365734174426c60448201527f6f636b4e756d6265723a20626c6f636b4e756d626572206973206265666f7265606482015270207468652066697273742075706461746560781b608482015260a4016104a3565b805b80156110065760ff831660009081526004602052604090208790610f8a600184611e5d565b81548110610f9a57610f9a611ce2565b600091825260209091200154600160c01b900463ffffffff1611610ff457610fc3600182611e5d565b858581518110610fd557610fd5611ce2565b602002602001019063ffffffff16908163ffffffff1681525050611006565b80610ffe81611e70565b915050610f65565b505050600101610e57565b50949350505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146110625760405162461bcd60e51b81526004016104a390611c08565b600061106d836108eb565b5090506110828261107d83611751565b6110c3565b7ff843ecd53a563675e62107be1494fdde4a3d49aeedaf8d88c616d85346e3500e83610655856001600160a01b031660009081526001602052604090205490565b604080518082019091526000808252602082015260005b83518110156113015760008482815181106110f7576110f7611ce2565b0160209081015160f81c600081815260049092526040822054909250908190036111895760405162461bcd60e51b815260206004820152603d60248201527f424c5341706b52656769737472792e5f70726f6365737351756f72756d41706b60448201527f5570646174653a2071756f72756d20646f6573206e6f7420657869737400000060648201526084016104a3565b60ff821660009081526005602090815260409182902082518084019093528054835260010154908201526111bd9086611398565b60ff831660008181526005602090815260408083208551808255868401805160019384015590855251835281842094845260049092528220939750919290916112069085611e5d565b8154811061121657611216611ce2565b6000918252602090912001805490915063ffffffff438116600160c01b90920416036112555780546001600160c01b031916604083901c1781556112f1565b805463ffffffff438116600160e01b8181026001600160e01b0394851617855560ff88166000908152600460209081526040808320815160608101835267ffffffffffffffff198b16815280840196875280830185815282546001810184559286529390942093519301805495519251871690940291909516600160c01b026001600160e01b0319949094169190941c17919091179092161790555b5050600190920191506110da9050565b50505050565b6040805180820190915260008082526020820152611323611810565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808061135257fe5b50806113905760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016104a3565b505092915050565b60408051808201909152600080825260208201526113b461182e565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa905080806113ef57fe5b50806113905760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016104a3565b61143561184c565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201825285815260208082018590528251808401909352858352820183905260009161151c611871565b60005b60028110156116d7576000611535826006611e87565b905084826002811061154957611549611ce2565b6020020151518361155b836000611e9e565b600c811061156b5761156b611ce2565b602002015284826002811061158257611582611ce2565b602002015160200151838260016115999190611e9e565b600c81106115a9576115a9611ce2565b60200201528382600281106115c0576115c0611ce2565b60200201515151836115d3836002611e9e565b600c81106115e3576115e3611ce2565b60200201528382600281106115fa576115fa611ce2565b6020020151516001602002015183611613836003611e9e565b600c811061162357611623611ce2565b602002015283826002811061163a5761163a611ce2565b60200201516020015160006002811061165557611655611ce2565b602002015183611666836004611e9e565b600c811061167657611676611ce2565b602002015283826002811061168d5761168d611ce2565b6020020151602001516001600281106116a8576116a8611ce2565b6020020151836116b9836005611e9e565b600c81106116c9576116c9611ce2565b60200201525060010161151f565b506116e0611890565b60006020826101808560086107d05a03fa905080806116fb57fe5b50806117415760405162461bcd60e51b81526020600482015260156024820152741c185a5c9a5b99cb5bdc18dbd9194b59985a5b1959605a1b60448201526064016104a3565b5051151598975050505050505050565b6040805180820190915260008082526020820152815115801561177657506020820151155b15611794575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516117d99190611d6c565b611803907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47611e5d565b905292915050565b919050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806040016040528061185f6118ae565b815260200161186c6118ae565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356001600160a01b038116811461180b57600080fd5b6000602082840312156118f557600080fd5b6118fe826118cc565b9392505050565b803560ff8116811461180b57600080fd5b60006020828403121561192857600080fd5b6118fe82611905565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561196a5761196a611931565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561199957611999611931565b604052919050565b600080604083850312156119b457600080fd5b6119bd836118cc565b915060208084013567ffffffffffffffff808211156119db57600080fd5b818601915086601f8301126119ef57600080fd5b813581811115611a0157611a01611931565b611a13601f8201601f19168501611970565b91508082528784828501011115611a2957600080fd5b80848401858401376000848284010152508093505050509250929050565b600060208284031215611a5957600080fd5b5035919050565b8151815260208083015190820152604081016106ff565b60008060408385031215611a8a57600080fd5b611a9383611905565b946020939093013593505050565b600080600060608486031215611ab657600080fd5b611abf84611905565b9250602084013563ffffffff81168114611ad857600080fd5b929592945050506040919091013590565b6000806000838503610160811215611b0057600080fd5b611b09856118cc565b9350610100601f1982011215611b1e57600080fd5b602085019250604061011f1982011215611b3757600080fd5b50610120840190509250925092565b600080600060408486031215611b5b57600080fd5b833567ffffffffffffffff80821115611b7357600080fd5b818601915086601f830112611b8757600080fd5b813581811115611b9657600080fd5b876020828501011115611ba857600080fd5b6020928301989097509590910135949350505050565b6020808252825182820181905260009190848201906040850190845b81811015611bfc57835163ffffffff1683529284019291840191600101611bda565b50909695505050505050565b6020808252604e908201527f424c5341706b52656769737472792e6f6e6c795265676973747279436f6f726460408201527f696e61746f723a2063616c6c6572206973206e6f74207468652072656769737460608201526d393c9031b7b7b93234b730ba37b960911b608082015260a00190565b60018060a01b03841681526000602084602084015260606040840152835180606085015260005b81811015611cbf57858101830151858201608001528201611ca3565b506000608082860101526080601f19601f83011685010192505050949350505050565b634e487b7160e01b600052603260045260246000fd5b600060408284031215611d0a57600080fd5b611d12611947565b82358152602083013560208201528091505092915050565b888152876020820152866040820152856060820152604085608083013760408460c0830137610100810192909252610120820152610140019695505050505050565b600082611d8957634e487b7160e01b600052601260045260246000fd5b500690565b600082601f830112611d9f57600080fd5b611da7611947565b806040840185811115611db957600080fd5b845b81811015611dd3578035845260209384019301611dbb565b509095945050505050565b600060808284031215611df057600080fd5b611df8611947565b611e028484611d8e565b8152611e118460408501611d8e565b60208201529392505050565b823581526020808401359082015260c0810160408381840137604080840160808401379392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106ff576106ff611e47565b600081611e7f57611e7f611e47565b506000190190565b80820281158282048414176106ff576106ff611e47565b808201808211156106ff576106ff611e4756fe424c5341706b52656769737472792e7265676973746572424c535075626c6963a264697066735822122032bb5054c7a2f6432e5be9a0f6a1c05e87838a89c3e8ae01d982bce76ffd2a6064736f6c63430008180033","storage":{"0x0":"0xff"}},"0x90f79bf6eb2c4f870365e785982e1f101e93b906":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x95401dc811bb5740090279ba06cfa8fcf6113778":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106a6565b610118565b61005b6100933660046106c1565b610155565b3480156100a457600080fd5b506100ad6101bc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106a6565b6101ed565b3480156100f557600080fd5b506100ad61020d565b61010661022e565b6101166101116102c3565b6102cd565b565b6101206102f1565b6001600160a01b0316330361014d5761014a81604051806020016040528060008152506000610324565b50565b61014a6100fe565b61015d6102f1565b6001600160a01b031633036101b4576101af8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610324915050565b505050565b6101af6100fe565b60006101c66102f1565b6001600160a01b031633036101e2576101dd6102c3565b905090565b6101ea6100fe565b90565b6101f56102f1565b6001600160a01b0316330361014d5761014a8161034f565b60006102176102f1565b6001600160a01b031633036101e2576101dd6102f1565b6102366102f1565b6001600160a01b031633036101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101dd6103a3565b3660008037600080366000845af43d6000803e8080156102ec573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b61032d836103cb565b60008251118061033a5750805b156101af57610349838361040b565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103786102f1565b604080516001600160a01b03928316815291841660208301520160405180910390a161014a81610437565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610315565b6103d4816104e0565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061043083836040518060600160405280602781526020016107b860279139610574565b9392505050565b6001600160a01b03811661049c5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016102ba565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b61054d5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016102ba565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6104bf565b60606001600160a01b0384163b6105dc5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016102ba565b600080856001600160a01b0316856040516105f79190610768565b600060405180830381855af49150503d8060008114610632576040519150601f19603f3d011682016040523d82523d6000602084013e610637565b606091505b5091509150610647828286610651565b9695505050505050565b60608315610660575081610430565b8251156106705782518084602001fd5b8160405162461bcd60e51b81526004016102ba9190610784565b80356001600160a01b03811681146106a157600080fd5b919050565b6000602082840312156106b857600080fd5b6104308261068a565b6000806000604084860312156106d657600080fd5b6106df8461068a565b9250602084013567ffffffffffffffff808211156106fc57600080fd5b818601915086601f83011261071057600080fd5b81358181111561071f57600080fd5b87602082850101111561073157600080fd5b6020830194508093505050509250925092565b60005b8381101561075f578181015183820152602001610747565b50506000910152565b6000825161077a818460208701610744565b9190910192915050565b60208152600082518060208401526107a3816040850160208701610744565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206f42262012bb1d1a07475f68d95d58d18353d78d57c71d0a11845bbf297d596564736f6c63430008180033","storage":{"0xeb5be412f275a18f6e4d622aee4ff40b21467c926224771b782d4c095d1444b":"0x5","0x17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec":"0x1","0x295841a49a1089f4b560f91cfbb0133326654dcbb1041861fc5dde96c724a22f":"0xc5a5c42992decbae36851359345fe25997f5c42d","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x99bba657f2bbc93c02d617f8ba121cb8fc104acf","0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff":"0x1","0xa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49":"0x1","0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5":"0x1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x9e545e3c0baab3e08cdfd552c960a1050f373042","0xcfb339bd1c51c488f6134f4ac63d1594afad827b3401c3fc51ed1da74a8ca14e":"0xde0b6b3a7640000c5a5c42992decbae36851359345fe25997f5c42d"}},"0x959922be3caee4b8cd9a407cc3ac1c251c2007b1":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80637cf72bba1161010f578063d98128c0116100a2578063e921d4fa11610071578063e921d4fa146103c6578063f2fde38b1461044c578063f73b7519146102a9578063fabc1cbc1461045f57600080fd5b8063d98128c014610430578063da16e29b14610322578063df5cf723146102ba578063e58398361461043e57600080fd5b80638da5cb5b116100de5780638da5cb5b146103b5578063a49db732146103c6578063c747075b146103da578063d7b7fa13146103ee57600080fd5b80637cf72bba146103465780638105e04314610354578063855fcc4a1461036b578063886f1195146103a257600080fd5b806339b70e38116101875780636f0c2f74116101565780636f0c2f7414610322578063715018a614610330578063723e59c7146103385780637259a45c1461024257600080fd5b806339b70e38146102ba578063595c6a67146102d55780635ac86ab7146102dd5780635c975abb1461031057600080fd5b80631794bb3c116101c35780631794bb3c1461022f5780631874e5ae14610242578063282670fc1461027257806338c8ee64146102a957600080fd5b80630ffabbce146101f557806310d67a2f14610209578063136439dd1461021c578063175d3205146101f5575b600080fd5b610207610203366004610b25565b5050565b005b610207610217366004610b5a565b610472565b61020761022a366004610b7e565b61052b565b61020761023d366004610b97565b505050565b610258610250366004610b25565b600092915050565b60405163ffffffff90911681526020015b60405180910390f35b610285610280366004610bd8565b61066a565b60408051825163ffffffff9081168252602093840151169281019290925201610269565b6102076102b7366004610b5a565b50565b60005b6040516001600160a01b039091168152602001610269565b610207610685565b6103006102eb366004610c04565b606654600160ff9092169190911b9081161490565b6040519015158152602001610269565b6066545b604051908152602001610269565b610258610250366004610c27565b61020761074c565b610314610250366004610b25565b610207610203366004610c60565b610300610362366004610cd5565b60009392505050565b610385610379366004610c27565b60008060009250925092565b604080519315158452602084019290925290820152606001610269565b6065546102bd906001600160a01b031681565b6033546001600160a01b03166102bd565b6103146103d4366004610b5a565b50600090565b6102076103e8366004610d13565b50505050565b6104016103fc366004610c27565b610760565b60408051825163ffffffff90811682526020808501518216908301529282015190921690820152606001610269565b610300610250366004610c27565b6103006103d4366004610b5a565b61020761045a366004610b5a565b610782565b61020761046d366004610b7e565b6107f8565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e99190610d60565b6001600160a01b0316336001600160a01b0316146105225760405162461bcd60e51b815260040161051990610d7d565b60405180910390fd5b6102b781610954565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105979190610dc7565b6105b35760405162461bcd60e51b815260040161051990610de9565b6066548181161461062c5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610519565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60408051808201909152600080825260208201525b92915050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f19190610dc7565b61070d5760405162461bcd60e51b815260040161051990610de9565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610754610a4b565b61075e6000610aa5565b565b604080516060810182526000808252602082018190529181019190915261067f565b61078a610a4b565b6001600160a01b0381166107ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610519565b6102b781610aa5565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561084b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086f9190610d60565b6001600160a01b0316336001600160a01b03161461089f5760405162461bcd60e51b815260040161051990610d7d565b60665419811960665419161461091d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610519565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161065f565b6001600160a01b0381166109e25760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610519565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b0316331461075e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610519565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811681146102b757600080fd5b803563ffffffff81168114610b2057600080fd5b919050565b60008060408385031215610b3857600080fd5b8235610b4381610af7565b9150610b5160208401610b0c565b90509250929050565b600060208284031215610b6c57600080fd5b8135610b7781610af7565b9392505050565b600060208284031215610b9057600080fd5b5035919050565b600080600060608486031215610bac57600080fd5b8335610bb781610af7565b92506020840135610bc781610af7565b929592945050506040919091013590565b60008060408385031215610beb57600080fd5b8235610bf681610af7565b946020939093013593505050565b600060208284031215610c1657600080fd5b813560ff81168114610b7757600080fd5b60008060408385031215610c3a57600080fd5b8235610c4581610af7565b91506020830135610c5581610af7565b809150509250929050565b60008060208385031215610c7357600080fd5b823567ffffffffffffffff80821115610c8b57600080fd5b818501915085601f830112610c9f57600080fd5b813581811115610cae57600080fd5b8660208260051b8501011115610cc357600080fd5b60209290920196919550909350505050565b600080600060608486031215610cea57600080fd5b8335610cf581610af7565b9250610d0360208501610b0c565b9150604084013590509250925092565b60008060008060808587031215610d2957600080fd5b8435610d3481610af7565b9350610d4260208601610b0c565b9250610d5060408601610b0c565b9396929550929360600135925050565b600060208284031215610d7257600080fd5b8151610b7781610af7565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215610dd957600080fd5b81518015158114610b7757600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b60608201526080019056fea2646970667358221220c164d850158d1f90a32bbe366e1545bff2724ee97114a57f639cabb55989579b64736f6c634300080c0033","storage":{}},"0x976ea74026e726554db657fa54763abd0c3a0aa9":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x998abeb3e57409262ae5b751f60747921b33613e":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106a6565b610118565b61005b6100933660046106c1565b610155565b3480156100a457600080fd5b506100ad6101bc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106a6565b6101ed565b3480156100f557600080fd5b506100ad61020d565b61010661022e565b6101166101116102c3565b6102cd565b565b6101206102f1565b6001600160a01b0316330361014d5761014a81604051806020016040528060008152506000610324565b50565b61014a6100fe565b61015d6102f1565b6001600160a01b031633036101b4576101af8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610324915050565b505050565b6101af6100fe565b60006101c66102f1565b6001600160a01b031633036101e2576101dd6102c3565b905090565b6101ea6100fe565b90565b6101f56102f1565b6001600160a01b0316330361014d5761014a8161034f565b60006102176102f1565b6001600160a01b031633036101e2576101dd6102f1565b6102366102f1565b6001600160a01b031633036101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101dd6103a3565b3660008037600080366000845af43d6000803e8080156102ec573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b61032d836103cb565b60008251118061033a5750805b156101af57610349838361040b565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103786102f1565b604080516001600160a01b03928316815291841660208301520160405180910390a161014a81610437565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610315565b6103d4816104e0565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061043083836040518060600160405280602781526020016107b860279139610574565b9392505050565b6001600160a01b03811661049c5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016102ba565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b61054d5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016102ba565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6104bf565b60606001600160a01b0384163b6105dc5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016102ba565b600080856001600160a01b0316856040516105f79190610768565b600060405180830381855af49150503d8060008114610632576040519150601f19603f3d011682016040523d82523d6000602084013e610637565b606091505b5091509150610647828286610651565b9695505050505050565b60608315610660575081610430565b8251156106705782518084602001fd5b8160405162461bcd60e51b81526004016102ba9190610784565b80356001600160a01b03811681146106a157600080fd5b919050565b6000602082840312156106b857600080fd5b6104308261068a565b6000806000604084860312156106d657600080fd5b6106df8461068a565b9250602084013567ffffffffffffffff808211156106fc57600080fd5b818601915086601f83011261071057600080fd5b81358181111561071f57600080fd5b87602082850101111561073157600080fd5b6020830194508093505050509250925092565b60005b8381101561075f578181015183820152602001610747565b50506000910152565b6000825161077a818460208701610744565b9190910192915050565b60208152600082518060208401526107a3816040850160208701610744565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206f42262012bb1d1a07475f68d95d58d18353d78d57c71d0a11845bbf297d596564736f6c63430008180033","storage":{"0x17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec":"0x1","0x295841a49a1089f4b560f91cfbb0133326654dcbb1041861fc5dde96c724a22f":"0x5000000000000000000000000000000000000000000000000","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x8f86403a4de0bb5791fa46b8e795c547942fe4cf","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x9e545e3c0baab3e08cdfd552c960a1050f373042"}},"0x99bba657f2bbc93c02d617f8ba121cb8fc104acf":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80639f3ccf651161010f578063c8294c56116100a2578063f2be94ae11610071578063f2be94ae1461054b578063f851e1981461055e578063fa28c62714610571578063ff694a771461058457600080fd5b8063c8294c56146104d6578063d5eccc05146104e9578063dd9846b9146104fc578063df5cf7231461052457600080fd5b8063bc9a40c3116100de578063bc9a40c314610474578063bd29b8cd14610487578063c46778a51461049a578063c601527d146104c357600080fd5b80639f3ccf65146103ee578063ac6bfb0314610401578063adc804da14610421578063b6904b781461046157600080fd5b80634bd26e091161018757806366acfefe1161015657806366acfefe1461034a5780636d14a987146103755780637c172347146103b457806381c07502146103ce57600080fd5b80634bd26e09146102e55780635401ed27146103155780635e5a6775146103285780635f1f2d771461033757600080fd5b806320b66298116101c357806320b662981461026c57806325504777146102815780632cd95940146102a25780633ca5a5f5146102c257600080fd5b80630491b41c146101ea57806308732461146102205780631f9b74e014610241575b600080fd5b61020d6101f8366004612bca565b60ff1660009081526001602052604090205490565b6040519081526020015b60405180910390f35b61023361022e366004612be5565b610597565b604051610217929190612c0f565b61025461024f366004612c49565b6105e0565b6040516001600160601b039091168152602001610217565b61027f61027a366004612cc4565b610632565b005b61029461028f366004612d85565b610959565b604051610217929190612e25565b6102b56102b0366004612e4a565b610c15565b6040516102179190612e76565b61020d6102d0366004612bca565b60ff1660009081526003602052604090205490565b61020d6102f3366004612e4a565b600091825260026020908152604080842060ff93909316845291905290205490565b610254610323366004612e4a565b610cb4565b61020d670de0b6b3a764000081565b61027f610345366004612f7f565b610ccd565b61035d610358366004612d85565b6110e3565b6040516001600160c01b039091168152602001610217565b61039c7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c81565b6040516001600160a01b039091168152602001610217565b6103bc602081565b60405160ff9091168152602001610217565b6103e16103dc36600461303b565b611240565b604051610217919061308d565b61039c6103fc366004612be5565b6114f5565b61041461040f3660046130cb565b61152d565b60405161021791906130fe565b61043461042f366004612be5565b6115c5565b6040805182516001600160a01b031681526020928301516001600160601b03169281019290925201610217565b61041461046f366004612be5565b61163f565b61027f61048236600461314a565b6116ce565b61027f610495366004613174565b6117c7565b6102546104a8366004612bca565b6000602081905290815260409020546001600160601b031681565b61027f6104d1366004613240565b6118e9565b6102546104e436600461328d565b6119dd565b6102546104f7366004612bca565b611a5b565b61050f61050a3660046132c9565b611aae565b60405163ffffffff9091168152602001610217565b61039c7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b610254610559366004613305565b611ac3565b61041461056c366004612e4a565b611b58565b61025461057f3660046132c9565b611c41565b61027f610592366004613347565b611ca2565b600360205281600052604060002081815481106105b357600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b90046001600160601b0316905082565b60ff8216600090815260016020526040812054839061061a5760405162461bcd60e51b8152600401610611906133a4565b60405180910390fd5b60006106268585611e0d565b509250505b5092915050565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b491906133f5565b6001600160a01b0316336001600160a01b0316146106e45760405162461bcd60e51b815260040161061190613412565b846107008160ff16600090815260016020526040902054151590565b61071c5760405162461bcd60e51b8152600401610611906133a4565b8380610792576040805162461bcd60e51b81526020600482015260248101919091527f5374616b6552656769737472792e6d6f6469667953747261746567795061726160448201527f6d733a206e6f20737472617465677920696e64696365732070726f76696465646064820152608401610611565b8281146108075760405162461bcd60e51b815260206004820152603960248201527f5374616b6552656769737472792e6d6f6469667953747261746567795061726160448201527f6d733a20696e707574206c656e677468206d69736d61746368000000000000006064820152608401610611565b60ff87166000908152600360205260408120905b8281101561094e578585828181106108355761083561348e565b905060200201602081019061084a91906134a4565b8289898481811061085d5761085d61348e565b90506020020135815481106108745761087461348e565b9060005260206000200160000160146101000a8154816001600160601b0302191690836001600160601b031602179055508860ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a75838a8a858181106108dd576108dd61348e565b90506020020135815481106108f4576108f461348e565b6000918252602090912001546001600160a01b031688888581811061091b5761091b61348e565b905060200201602081019061093091906134a4565b60405161093e929190612c0f565b60405180910390a260010161081b565b505050505050505050565b606080336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146109a45760405162461bcd60e51b8152600401610611906134bf565b6000836001600160401b038111156109be576109be612eee565b6040519080825280602002602001820160405280156109e7578160200160208202803683370190505b5090506000846001600160401b03811115610a0457610a04612eee565b604051908082528060200260200182016040528015610a2d578160200160208202803683370190505b50905060005b85811015610c07576000878783818110610a4f57610a4f61348e565b919091013560f81c60008181526001602052604090205490925015159050610ad75760405162461bcd60e51b815260206004820152603560248201527f5374616b6552656769737472792e72656769737465724f70657261746f723a206044820152741c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd605a1b6064820152608401610611565b600080610ae4838d611e0d565b9150915080610b815760405162461bcd60e51b815260206004820152605b60248201527f5374616b6552656769737472792e72656769737465724f70657261746f723a2060448201527f4f70657261746f7220646f6573206e6f74206d656574206d696e696d756d207360648201527f74616b6520726571756972656d656e7420666f722071756f72756d0000000000608482015260a401610611565b6000610b8e8c8585612001565b905082878681518110610ba357610ba361348e565b60200260200101906001600160601b031690816001600160601b031681525050610bcd8482612280565b868681518110610bdf57610bdf61348e565b6001600160601b0390921660209283029190910190910152505060019092019150610a339050565b509097909650945050505050565b600082815260026020908152604080832060ff851684528252808320805482518185028101850190935280835260609492939192909184015b82821015610ca7576000848152602090819020604080516060810182529185015463ffffffff8082168452600160201b82041683850152600160401b90046001600160601b031690820152825260019092019101610c4e565b5050505090505b92915050565b600080610cc18484611b58565b60400151949350505050565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f91906133f5565b6001600160a01b0316336001600160a01b031614610d7f5760405162461bcd60e51b815260040161061190613412565b81610d9b8160ff16600090815260016020526040902054151590565b610db75760405162461bcd60e51b8152600401610611906133a4565b815180610e2c5760405162461bcd60e51b815260206004820152603d60248201527f5374616b6552656769737472792e72656d6f7665537472617465676965733a2060448201527f6e6f20696e646963657320746f2072656d6f76652070726f76696465640000006064820152608401610611565b60ff841660009081526003602090815260408083206004909252822090915b838110156110da578660ff167f31fa2e2cd280c9375e13ffcf3d81e2378100186e4058f8d3ddb690b82dcd31f784888481518110610e8b57610e8b61348e565b602002602001015181548110610ea357610ea361348e565b600091825260209182902001546040516001600160a01b0390911681520160405180910390a28660ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a7584888481518110610f0157610f0161348e565b602002602001015181548110610f1957610f1961348e565b600091825260208083209190910154604080516001600160a01b039092168252918101929092520160405180910390a282548390610f5990600190613547565b81548110610f6957610f6961348e565b9060005260206000200183878381518110610f8657610f8661348e565b602002602001015181548110610f9e57610f9e61348e565b600091825260209091208254910180546001600160a01b0319166001600160a01b03909216918217815591546001600160601b03600160a01b9182900416021790558254839080610ff157610ff161355a565b6000828152602081208201600019908101919091550190558154829061101990600190613547565b815481106110295761102961348e565b9060005260206000200160009054906101000a90046001600160a01b03168287838151811061105a5761105a61348e565b6020026020010151815481106110725761107261348e565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550818054806110b0576110b061355a565b600082815260209020810160001990810180546001600160a01b0319169055019055600101610e4b565b50505050505050565b6000336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c161461112d5760405162461bcd60e51b8152600401610611906134bf565b6000805b8381101561123657600085858381811061114d5761114d61348e565b919091013560f81c600081815260016020526040902054909250151590506111dd5760405162461bcd60e51b815260206004820152603860248201527f5374616b6552656769737472792e7570646174654f70657261746f725374616b60448201527f653a2071756f72756d20646f6573206e6f7420657869737400000000000000006064820152608401610611565b6000806111ea838b611e0d565b915091508061120c5760009150600160ff84161b6001600160c01b0386161794505b60006112198a8585612001565b90506112258482612280565b505060019093019250611131915050565b5095945050505050565b60606000826001600160401b0381111561125c5761125c612eee565b604051908082528060200260200182016040528015611285578160200160208202803683370190505b50905060005b838110156114ea5760008585838181106112a7576112a761348e565b919091013560f81c600081815260016020526040902054909250151590506113465760405162461bcd60e51b815260206004820152604660248201527f5374616b6552656769737472792e676574546f74616c5374616b65496e64696360448201527f65734174426c6f636b4e756d6265723a2071756f72756d20646f6573206e6f7460648201526508195e1a5cdd60d21b608482015260a401610611565b60ff81166000908152600160205260408120805463ffffffff8a16929061136f5761136f61348e565b60009182526020909120015463ffffffff16111561141b5760405162461bcd60e51b815260206004820152605b60248201527f5374616b6552656769737472792e676574546f74616c5374616b65496e64696360448201527f65734174426c6f636b4e756d6265723a2071756f72756d20686173206e6f207360648201527f74616b6520686973746f727920617420626c6f636b4e756d6265720000000000608482015260a401610611565b60ff8116600090815260016020526040812054905b818110156114df5760ff8316600090815260016020819052604090912063ffffffff8b169161145f8486613547565b6114699190613547565b815481106114795761147961348e565b60009182526020909120015463ffffffff16116114d757600161149c8284613547565b6114a69190613547565b8585815181106114b8576114b861348e565b602002602001019063ffffffff16908163ffffffff16815250506114df565b600101611430565b50505060010161128b565b5090505b9392505050565b6004602052816000526040600020818154811061151157600080fd5b6000918252602090912001546001600160a01b03169150829050565b60408051606081018252600080825260208083018290528284018290528582526002815283822060ff881683529052919091208054839081106115725761157261348e565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b031691810191909152949350505050565b604080518082019091526000808252602082015260ff831660009081526003602052604090208054839081106115fd576115fd61348e565b6000918252602091829020604080518082019091529101546001600160a01b0381168252600160a01b90046001600160601b0316918101919091529392505050565b604080516060810182526000808252602080830182905282840182905260ff86168252600190529190912080548390811061167c5761167c61348e565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b0316918101919091529392505050565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175091906133f5565b6001600160a01b0316336001600160a01b0316146117805760405162461bcd60e51b815260040161061190613412565b8161179c8160ff16600090815260016020526040902054151590565b6117b85760405162461bcd60e51b8152600401610611906133a4565b6117c283836123f7565b505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c161461180f5760405162461bcd60e51b8152600401610611906134bf565b60005b818110156118e357600083838381811061182e5761182e61348e565b919091013560f81c600081815260016020526040902054909250151590506118be5760405162461bcd60e51b815260206004820152603760248201527f5374616b6552656769737472792e646572656769737465724f70657261746f7260448201527f3a2071756f72756d20646f6573206e6f742065786973740000000000000000006064820152608401610611565b60006118cc86836000612001565b90506118d88282612280565b505050600101611812565b50505050565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611947573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196b91906133f5565b6001600160a01b0316336001600160a01b03161461199b5760405162461bcd60e51b815260040161061190613412565b816119b78160ff16600090815260016020526040902054151590565b6119d35760405162461bcd60e51b8152600401610611906133a4565b6117c28383612460565b60ff83166000908152600160205260408120805482919084908110611a0457611a0461348e565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529050610cc1818561288e565b60ff81166000908152600160208190526040822080549091611a7c91613547565b81548110611a8c57611a8c61348e565b600091825260209091200154600160401b90046001600160601b031692915050565b6000611abb848484612a08565b949350505050565b600082815260026020908152604080832060ff881684529091528120805482919084908110611af457611af461348e565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529050611b4b818661288e565b6040015195945050505050565b6040805160608082018352600080835260208084018290528385018290528682526002815284822060ff8716835281528482205485519384018652828452908301829052938201819052919291829003611bb5579150610cae9050565b600085815260026020908152604080832060ff881684529091529020611bdc600184613547565b81548110611bec57611bec61348e565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529250610cae915050565b600083815260026020908152604080832060ff861684529091528120611c68858585612a08565b63ffffffff1681548110611c7e57611c7e61348e565b600091825260209091200154600160401b90046001600160601b0316949350505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c1614611cea5760405162461bcd60e51b8152600401610611906134bf565b60ff831660009081526001602052604090205415611d685760405162461bcd60e51b815260206004820152603560248201527f5374616b6552656769737472792e696e697469616c697a6551756f72756d3a2060448201527471756f72756d20616c72656164792065786973747360581b6064820152608401610611565b611d728382612460565b611d7c83836123f7565b505060ff166000908152600160208181526040808420815160608101835263ffffffff438116825281850187815293820187815283549687018455928752939095209451949093018054915193516001600160601b0316600160401b02600160401b600160a01b0319948416600160201b0267ffffffffffffffff1990931695909316949094171791909116179055565b600080600080611e2c8660ff1660009081526003602052604090205490565b604080518082019091526000808252602082015290915060ff871660009081526004602081905260408083209051639004134760e01b81526001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91692639004134792611ea1928c9201613570565b600060405180830381865afa158015611ebe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ee691908101906135d1565b905060005b83811015611fcd5760ff89166000908152600360205260409020805482908110611f1757611f1761348e565b60009182526020808320604080518082019091529201546001600160a01b0381168352600160a01b90046001600160601b0316908201528351909450839083908110611f6557611f6561348e565b60200260200101511115611fc557670de0b6b3a764000083602001516001600160601b0316838381518110611f9c57611f9c61348e565b6020026020010151611fae9190613661565b611fb89190613678565b611fc2908661369a565b94505b600101611eeb565b50505060ff8616600090815260208190526040902054919350506001600160601b03908116908316101590505b9250929050565b600083815260026020908152604080832060ff8616845290915281205481908082036120c757600086815260026020908152604080832060ff891684528252808320815160608101835263ffffffff43811682528185018681526001600160601b03808c16958401958652845460018101865594885295909620915191909201805495519351909416600160401b02600160401b600160a01b0319938316600160201b0267ffffffffffffffff1990961691909216179390931716919091179055612226565b600086815260026020908152604080832060ff8916845290915281206120ee600184613547565b815481106120fe576120fe61348e565b600091825260209091200180546001600160601b03600160401b909104811694509091508516830361213657600093505050506114ee565b805463ffffffff43811691160361216e578054600160401b600160a01b031916600160401b6001600160601b03871602178155612224565b805467ffffffff000000001916600160201b4363ffffffff90811682810293909317845560008a815260026020908152604080832060ff8d168452825280832081516060810183529687528683018481526001600160601b038d81169389019384528254600181018455928652939094209651960180549351915196851667ffffffffffffffff1990941693909317931690930291909117600160401b600160a01b031916600160401b93909216929092021790555b505b6040805160ff871681526001600160601b038616602082015287917f2f527d527e95d8fe40aec55377743bb779087da3f6d0d08f12e36444da62327d910160405180910390a26122768285612b6e565b9695505050505050565b60ff8216600090815260016020819052604082208054918391906122a49084613547565b815481106122b4576122b461348e565b906000526020600020019050836000036122e25754600160401b90046001600160601b03169150610cae9050565b805460009061230190600160401b90046001600160601b031686612b86565b825490915063ffffffff43811691160361233c578154600160401b600160a01b031916600160401b6001600160601b038316021782556123ee565b815463ffffffff438116600160201b81810267ffffffff000000001990941693909317855560ff8916600090815260016020818152604080842081516060810183529586528583018581526001600160601b03808b169388019384528254958601835591865292909420945194909201805491519251909316600160401b02600160401b600160a01b031992861690960267ffffffffffffffff19909116939094169290921792909217169190911790555b95945050505050565b60ff82166000818152602081815260409182902080546bffffffffffffffffffffffff19166001600160601b03861690811790915591519182527f26eecff2b70b0a71104ff4d940ba7162d23a95c248771fc487a7be17a596b3cf910160405180910390a25050565b60008151116124c55760405162461bcd60e51b8152602060048201526038602482015260008051602061374183398151915260448201527f3a206e6f20737472617465676965732070726f766964656400000000000000006064820152608401610611565b805160ff8316600090815260036020908152604090912054906124e883836136ba565b11156125585760405162461bcd60e51b8152602060048201526045602482015260008051602061374183398151915260448201527f3a20657863656564204d41585f5745494748494e475f46554e4354494f4e5f4c60648201526408a9c8ea8960db1b608482015260a401610611565b60005b828110156128875760005b61257082846136ba565b811015612646578482815181106125895761258961348e565b6020026020010151600001516001600160a01b0316600360008860ff1660ff16815260200190815260200160002082815481106125c8576125c861348e565b6000918252602090912001546001600160a01b03160361263e5760405162461bcd60e51b815260206004820152603d602482015260008051602061374183398151915260448201527f3a2063616e6e6f74206164642073616d652073747261746567792032780000006064820152608401610611565b600101612566565b50600084828151811061265b5761265b61348e565b6020026020010151602001516001600160601b0316116126e05760405162461bcd60e51b8152602060048201526046602482015260008051602061374183398151915260448201527f3a2063616e6e6f74206164642073747261746567792077697468207a65726f206064820152651dd95a59da1d60d21b608482015260a401610611565b60ff8516600090815260036020526040902084518590839081106127065761270661348e565b602090810291909101810151825460018101845560009384528284208251928401516001600160601b0316600160a01b026001600160a01b039093169290921791015560ff871682526004905260409020845185908390811061276b5761276b61348e565b6020908102919091018101515182546001810184556000938452919092200180546001600160a01b0319166001600160a01b03909216919091179055835160ff8616907f10565e56cacbf32eca267945f054fec02e59750032d113d3302182ad967f5404908690849081106127e2576127e261348e565b602090810291909101810151516040516001600160a01b0390911681520160405180910390a28460ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a7585838151811061283f5761283f61348e565b60200260200101516000015186848151811061285d5761285d61348e565b602002602001015160200151604051612877929190612c0f565b60405180910390a260010161255b565b5050505050565b816000015163ffffffff168163ffffffff1610156129335760405162461bcd60e51b815260206004820152605660248201527f5374616b6552656769737472792e5f76616c69646174655374616b655570646160448201527f74654174426c6f636b4e756d6265723a207374616b6555706461746520697320606482015275333937b69030b33a32b910313637b1b5a73ab6b132b960511b608482015260a401610611565b602082015163ffffffff1615806129595750816020015163ffffffff168163ffffffff16105b612a045760405162461bcd60e51b815260206004820152606a60248201527f5374616b6552656769737472792e5f76616c69646174655374616b655570646160448201527f74654174426c6f636b4e756d6265723a2074686572652069732061206e65776560648201527f72207374616b6555706461746520617661696c61626c65206265666f726520626084820152693637b1b5a73ab6b132b960b11b60a482015260c401610611565b5050565b600083815260026020908152604080832060ff86168452909152812054805b8015612aa957600086815260026020908152604080832060ff89168452909152902063ffffffff851690612a5c600184613547565b81548110612a6c57612a6c61348e565b60009182526020909120015463ffffffff1611612a9757612a8e600182613547565b925050506114ee565b80612aa1816136cd565b915050612a27565b5060405162461bcd60e51b815260206004820152608160248201527f5374616b6552656769737472792e5f6765745374616b65557064617465496e6460448201527f6578466f724f70657261746f724174426c6f636b4e756d6265723a206e6f207360648201527f74616b652075706461746520666f756e6420666f72206f70657261746f72496460848201527f20616e642071756f72756d4e756d62657220617420626c6f636b206e756d626560a4820152603960f91b60c482015260e401610611565b60006114ee6001600160601b038085169084166136e4565b600080821215612baa57612b9982613704565b612ba39084613720565b9050610cae565b612ba3828461369a565b803560ff81168114612bc557600080fd5b919050565b600060208284031215612bdc57600080fd5b6114ee82612bb4565b60008060408385031215612bf857600080fd5b612c0183612bb4565b946020939093013593505050565b6001600160a01b039290921682526001600160601b0316602082015260400190565b6001600160a01b0381168114612c4657600080fd5b50565b60008060408385031215612c5c57600080fd5b612c6583612bb4565b91506020830135612c7581612c31565b809150509250929050565b60008083601f840112612c9257600080fd5b5081356001600160401b03811115612ca957600080fd5b6020830191508360208260051b8501011115611ffa57600080fd5b600080600080600060608688031215612cdc57600080fd5b612ce586612bb4565b945060208601356001600160401b0380821115612d0157600080fd5b612d0d89838a01612c80565b90965094506040880135915080821115612d2657600080fd5b50612d3388828901612c80565b969995985093965092949392505050565b60008083601f840112612d5657600080fd5b5081356001600160401b03811115612d6d57600080fd5b602083019150836020828501011115611ffa57600080fd5b60008060008060608587031215612d9b57600080fd5b8435612da681612c31565b93506020850135925060408501356001600160401b03811115612dc857600080fd5b612dd487828801612d44565b95989497509550505050565b60008151808452602080850194506020840160005b83811015612e1a5781516001600160601b031687529582019590820190600101612df5565b509495945050505050565b604081526000612e386040830185612de0565b82810360208401526123ee8185612de0565b60008060408385031215612e5d57600080fd5b82359150612e6d60208401612bb4565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015612ee257612ecf83855163ffffffff808251168352806020830151166020840152506001600160601b0360408201511660408301525050565b9284019260609290920191600101612e92565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612f2657612f26612eee565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612f5457612f54612eee565b604052919050565b60006001600160401b03821115612f7557612f75612eee565b5060051b60200190565b60008060408385031215612f9257600080fd5b612f9b83612bb4565b91506020808401356001600160401b03811115612fb757600080fd5b8401601f81018613612fc857600080fd5b8035612fdb612fd682612f5c565b612f2c565b81815260059190911b82018301908381019088831115612ffa57600080fd5b928401925b8284101561301857833582529284019290840190612fff565b80955050505050509250929050565b803563ffffffff81168114612bc557600080fd5b60008060006040848603121561305057600080fd5b61305984613027565b925060208401356001600160401b0381111561307457600080fd5b61308086828701612d44565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b81811015612ee257835163ffffffff16835292840192918401916001016130a9565b6000806000606084860312156130e057600080fd5b6130e984612bb4565b95602085013595506040909401359392505050565b815163ffffffff9081168252602080840151909116908201526040808301516001600160601b03169082015260608101610cae565b80356001600160601b0381168114612bc557600080fd5b6000806040838503121561315d57600080fd5b61316683612bb4565b9150612e6d60208401613133565b60008060006040848603121561318957600080fd5b8335925060208401356001600160401b0381111561307457600080fd5b600082601f8301126131b757600080fd5b813560206131c7612fd683612f5c565b82815260069290921b840181019181810190868411156131e657600080fd5b8286015b8481101561323557604081890312156132035760008081fd5b61320b612f04565b813561321681612c31565b8152613223828601613133565b818601528352918301916040016131ea565b509695505050505050565b6000806040838503121561325357600080fd5b61325c83612bb4565b915060208301356001600160401b0381111561327757600080fd5b613283858286016131a6565b9150509250929050565b6000806000606084860312156132a257600080fd5b6132ab84612bb4565b92506132b960208501613027565b9150604084013590509250925092565b6000806000606084860312156132de57600080fd5b833592506132ee60208501612bb4565b91506132fc60408501613027565b90509250925092565b6000806000806080858703121561331b57600080fd5b61332485612bb4565b935061333260208601613027565b93969395505050506040820135916060013590565b60008060006060848603121561335c57600080fd5b61336584612bb4565b925061337360208501613133565b915060408401356001600160401b0381111561338e57600080fd5b61339a868287016131a6565b9150509250925092565b60208082526031908201527f5374616b6552656769737472792e71756f72756d4578697374733a2071756f726040820152701d5b48191bd95cc81b9bdd08195e1a5cdd607a1b606082015260800190565b60006020828403121561340757600080fd5b81516114ee81612c31565b60208082526056908201527f5374616b6552656769737472792e6f6e6c79436f6f7264696e61746f724f776e60408201527f65723a2063616c6c6572206973206e6f7420746865206f776e6572206f6620746060820152753432903932b3b4b9ba393ca1b7b7b93234b730ba37b960511b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156134b657600080fd5b6114ee82613133565b6020808252604c908201527f5374616b6552656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865205265676973747260608201526b3ca1b7b7b93234b730ba37b960a11b608082015260a00190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610cae57610cae613531565b634e487b7160e01b600052603160045260246000fd5b60006040820160018060a01b038086168452602060406020860152828654808552606087019150876000526020600020945060005b818110156135c35785548516835260019586019592840192016135a5565b509098975050505050505050565b600060208083850312156135e457600080fd5b82516001600160401b038111156135fa57600080fd5b8301601f8101851361360b57600080fd5b8051613619612fd682612f5c565b81815260059190911b8201830190838101908783111561363857600080fd5b928401925b828410156136565783518252928401929084019061363d565b979650505050505050565b8082028115828204841417610cae57610cae613531565b60008261369557634e487b7160e01b600052601260045260246000fd5b500490565b6001600160601b0381811683821601908082111561062b5761062b613531565b80820180821115610cae57610cae613531565b6000816136dc576136dc613531565b506000190190565b818103600083128015838313168383128216171561062b5761062b613531565b6000600160ff1b820161371957613719613531565b5060000390565b6001600160601b0382811682821603908082111561062b5761062b61353156fe5374616b6552656769737472792e5f6164645374726174656779506172616d73a264697066735822122086a228217be3aa4346ddc514699a0ca7893ec8b64cbf2023e3b1369fe2efcf1164736f6c63430008180033","storage":{}},"0x9a676e781a523b5d0c0e43731313a708cb607508":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101425760003560e01c80638da5cb5b116100b8578063d79aceab1161007c578063d79aceab146102f8578063df5cf7231461031f578063ec76f44214610346578063f2fde38b14610359578063f698da251461036c578063fabc1cbc1461037457600080fd5b80638da5cb5b1461029b5780639926ee7d146102ac578063a1060c88146102bf578063a364f4da146102d2578063a98fb355146102e557600080fd5b806349075da31161010a57806349075da3146101fa578063595c6a67146102355780635ac86ab71461023d5780635c975abb14610260578063715018a614610268578063886f11951461027057600080fd5b806310d67a2f14610147578063136439dd1461015c5780631794bb3c1461016f57806320606b7014610182578063374823b5146101bc575b600080fd5b61015a6101553660046118ab565b610387565b005b61015a61016a3660046118cf565b610443565b61015a61017d3660046118e8565b610582565b6101a97f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b6101ea6101ca366004611929565b609960209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101b3565b610228610208366004611955565b609860209081526000928352604080842090915290825290205460ff1681565b6040516101b391906119a4565b61015a6106ac565b6101ea61024b3660046119cc565b606654600160ff9092169190911b9081161490565b6066546101a9565b61015a610773565b606554610283906001600160a01b031681565b6040516001600160a01b0390911681526020016101b3565b6033546001600160a01b0316610283565b61015a6102ba366004611a5f565b610787565b6101a96102cd366004611b46565b610b1a565b61015a6102e03660046118ab565b610bd3565b61015a6102f3366004611b8c565b610d3c565b6101a97fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102837f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b61015a6103543660046118cf565b610d83565b61015a6103673660046118ab565b610e2e565b6101a9610ea4565b61015a6103823660046118cf565b610ee2565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fe9190611bfe565b6001600160a01b0316336001600160a01b0316146104375760405162461bcd60e51b815260040161042e90611c1b565b60405180910390fd5b6104408161103e565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561048b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104af9190611c65565b6104cb5760405162461bcd60e51b815260040161042e90611c87565b606654818116146105445760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161042e565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff16158080156105a25750600054600160ff909116105b806105bc5750303b1580156105bc575060005460ff166001145b61061f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161042e565b6000805460ff191660011790558015610642576000805461ff0019166101001790555b61064c8383611135565b61065461121f565b609755610660846112b6565b80156106a6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190611c65565b6107345760405162461bcd60e51b815260040161042e90611c87565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b61077b611308565b61078560006112b6565b565b606654600090600190811614156107dc5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161042e565b42826040015110156108445760405162461bcd60e51b815260206004820152603e6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f72207369676e617475726520657870697265640000606482015260840161042e565b60013360009081526098602090815260408083206001600160a01b038816845290915290205460ff16600181111561087e5761087e61198e565b14156108e05760405162461bcd60e51b815260206004820152603f6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f7220616c7265616479207265676973746572656400606482015260840161042e565b6001600160a01b038316600090815260996020908152604080832085830151845290915290205460ff16156109645760405162461bcd60e51b81526020600482015260366024820152600080516020611dac8339815191526044820152751594ce881cd85b1d08185b1c9958591e481cdc195b9d60521b606482015260840161042e565b6040516336b87bd760e11b81526001600160a01b0384811660048301527f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91690636d70f7ae90602401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190611c65565b610a645760405162461bcd60e51b815260206004820152604d6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f72206e6f74207265676973746572656420746f204560648201526c1a59d95b93185e595c881e595d609a1b608482015260a40161042e565b6000610a7a843385602001518660400151610b1a565b9050610a8b84828560000151611362565b3360008181526098602090815260408083206001600160a01b0389168085529083528184208054600160ff199182168117909255609985528386208a860151875290945293829020805490931684179092555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610b0c91906119a4565b60405180910390a350505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd6020808301919091526001600160a01b0387811683850152861660608301526080820185905260a08083018590528351808403909101815260c0909201909252805191012060009081610b90610ea4565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b60665460009060019081161415610c285760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161042e565b60013360009081526098602090815260408083206001600160a01b038716845290915290205460ff166001811115610c6257610c6261198e565b14610cd55760405162461bcd60e51b815260206004820152603f60248201527f4156534469726563746f72792e646572656769737465724f70657261746f724660448201527f726f6d4156533a206f70657261746f72206e6f74207265676973746572656400606482015260840161042e565b3360008181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610d3091906119a4565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c9437138383604051610d77929190611ccf565b60405180910390a25050565b33600090815260996020908152604080832084845290915290205460ff1615610e085760405162461bcd60e51b815260206004820152603160248201527f4156534469726563746f72792e63616e63656c53616c743a2063616e6e6f742060448201527018d85b98d95b081cdc195b9d081cd85b1d607a1b606482015260840161042e565b33600090815260996020908152604080832093835292905220805460ff19166001179055565b610e36611308565b6001600160a01b038116610e9b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161042e565b610440816112b6565b60007f0000000000000000000000000000000000000000000000000000000000007a69461415610ed5575060975490565b610edd61121f565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f599190611bfe565b6001600160a01b0316336001600160a01b031614610f895760405162461bcd60e51b815260040161042e90611c1b565b6066541981196066541916146110075760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161042e565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610577565b6001600160a01b0381166110cc5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161042e565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031615801561115657506001600160a01b03821615155b6111d85760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161042e565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261121b8261103e565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6033546001600160a01b031633146107855760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161042e565b6001600160a01b0383163b1561148157604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906113a29086908690600401611cfe565b602060405180830381865afa1580156113bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e39190611d5b565b6001600160e01b0319161461147c5760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a40161042e565b505050565b826001600160a01b03166114958383611521565b6001600160a01b03161461147c5760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a40161042e565b60008060006115308585611545565b9150915061153d816115b5565b509392505050565b60008082516041141561157c5760208301516040840151606085015160001a61157087828585611770565b945094505050506115ae565b8251604014156115a6576020830151604084015161159b86838361185d565b9350935050506115ae565b506000905060025b9250929050565b60008160048111156115c9576115c961198e565b14156115d25750565b60018160048111156115e6576115e661198e565b14156116345760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161042e565b60028160048111156116485761164861198e565b14156116965760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161042e565b60038160048111156116aa576116aa61198e565b14156117035760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161042e565b60048160048111156117175761171761198e565b14156104405760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161042e565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156117a75750600090506003611854565b8460ff16601b141580156117bf57508460ff16601c14155b156117d05750600090506004611854565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611824573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661184d57600060019250925050611854565b9150600090505b94509492505050565b6000806001600160ff1b0383168161187a60ff86901c601b611d85565b905061188887828885611770565b935093505050935093915050565b6001600160a01b038116811461044057600080fd5b6000602082840312156118bd57600080fd5b81356118c881611896565b9392505050565b6000602082840312156118e157600080fd5b5035919050565b6000806000606084860312156118fd57600080fd5b833561190881611896565b9250602084013561191881611896565b929592945050506040919091013590565b6000806040838503121561193c57600080fd5b823561194781611896565b946020939093013593505050565b6000806040838503121561196857600080fd5b823561197381611896565b9150602083013561198381611896565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60208101600283106119c657634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156119de57600080fd5b813560ff811681146118c857600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715611a2857611a286119ef565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611a5757611a576119ef565b604052919050565b60008060408385031215611a7257600080fd5b8235611a7d81611896565b915060208381013567ffffffffffffffff80821115611a9b57600080fd5b9085019060608288031215611aaf57600080fd5b611ab7611a05565b823582811115611ac657600080fd5b8301601f81018913611ad757600080fd5b803583811115611ae957611ae96119ef565b611afb601f8201601f19168701611a2e565b93508084528986828401011115611b1157600080fd5b808683018786013760008682860101525050818152838301358482015260408301356040820152809450505050509250929050565b60008060008060808587031215611b5c57600080fd5b8435611b6781611896565b93506020850135611b7781611896565b93969395505050506040820135916060013590565b60008060208385031215611b9f57600080fd5b823567ffffffffffffffff80821115611bb757600080fd5b818501915085601f830112611bcb57600080fd5b813581811115611bda57600080fd5b866020828501011115611bec57600080fd5b60209290920196919550909350505050565b600060208284031215611c1057600080fd5b81516118c881611896565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611c7757600080fd5b815180151581146118c857600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b82815260006020604081840152835180604085015260005b81811015611d3257858101830151858201606001528201611d16565b81811115611d44576000606083870101525b50601f01601f191692909201606001949350505050565b600060208284031215611d6d57600080fd5b81516001600160e01b0319811681146118c857600080fd5b60008219821115611da657634e487b7160e01b600052601160045260246000fd5b50019056fe4156534469726563746f72792e72656769737465724f70657261746f72546f41a264697066735822122035f03db22cb73fc5cdc009d8cb10aa3fb88ffe01e5760e1af6178cd53c67595f64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x9a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106101ee5760003560e01c80638da5cb5b1161010d578063c052bd61116100a0578063d1c64cc91161006f578063d1c64cc914610604578063ea4d3c9b14610624578063f2fde38b14610658578063f6848d2414610678578063fabc1cbc146106b357600080fd5b8063c052bd6114610584578063c1de3aef146105a4578063c2c51c40146105c4578063cf756fdf146105e457600080fd5b8063a38406a3116100dc578063a38406a3146104fa578063a6a509be1461051a578063b134427114610530578063beffbb891461056457600080fd5b80638da5cb5b1461046b5780639104c319146104895780639b4e4634146104b15780639ba06275146104c457600080fd5b8063595c6a6711610185578063715018a611610154578063715018a6146103ed57806374cdd7981461040257806384d8106214610436578063886f11951461044b57600080fd5b8063595c6a67146103565780635ac86ab71461036b5780635c975abb146103ab57806360f4062b146103c057600080fd5b8063387b1300116101c1578063387b1300146102b457806339b70e38146102d457806344e71c8014610308578063463db0381461033657600080fd5b80630e81073c146101f357806310d67a2f14610226578063136439dd14610248578063292b7b2b14610268575b600080fd5b3480156101ff57600080fd5b5061021361020e366004612406565b6106d3565b6040519081526020015b60405180910390f35b34801561023257600080fd5b50610246610241366004612432565b610911565b005b34801561025457600080fd5b5061024661026336600461244f565b6109c4565b34801561027457600080fd5b5061029c7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6040516001600160a01b03909116815260200161021d565b3480156102c057600080fd5b506102466102cf366004612468565b610b03565b3480156102e057600080fd5b5061029c7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b34801561031457600080fd5b5061031d610ea1565b60405167ffffffffffffffff909116815260200161021d565b34801561034257600080fd5b506102466103513660046124a9565b610eca565b34801561036257600080fd5b50610246611056565b34801561037757600080fd5b5061039b6103863660046124d3565b606654600160ff9092169190911b9081161490565b604051901515815260200161021d565b3480156103b757600080fd5b50606654610213565b3480156103cc57600080fd5b506102136103db366004612432565b609b6020526000908152604090205481565b3480156103f957600080fd5b5061024661111d565b34801561040e57600080fd5b5061029c7f000000000000000000000000424242424242424242424242424242424242424281565b34801561044257600080fd5b5061029c611131565b34801561045757600080fd5b5060655461029c906001600160a01b031681565b34801561047757600080fd5b506033546001600160a01b031661029c565b34801561049557600080fd5b5061029c73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6102466104bf36600461253f565b61121b565b3480156104d057600080fd5b5061029c6104df366004612432565b6098602052600090815260409020546001600160a01b031681565b34801561050657600080fd5b5061029c610515366004612432565b61130a565b34801561052657600080fd5b5061021360995481565b34801561053c57600080fd5b5061029c7f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b34801561057057600080fd5b5061024661057f366004612406565b6113dc565b34801561059057600080fd5b5060975461029c906001600160a01b031681565b3480156105b057600080fd5b506102466105bf366004612432565b6115f3565b3480156105d057600080fd5b506102466105df366004612406565b611604565b3480156105f057600080fd5b506102466105ff3660046125b3565b611a07565b34801561061057600080fd5b5061021361061f3660046124a9565b611b30565b34801561063057600080fd5b5061029c7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b34801561066457600080fd5b50610246610673366004612432565b611c3b565b34801561068457600080fd5b5061039b610693366004612432565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156106bf57600080fd5b506102466106ce36600461244f565b611cb1565b6000336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916146107265760405162461bcd60e51b815260040161071d90612604565b60405180910390fd5b6001600160a01b0383166107a25760405162461bcd60e51b815260206004820152603a60248201527f456967656e506f644d616e616765722e6164645368617265733a20706f644f7760448201527f6e65722063616e6e6f74206265207a65726f2061646472657373000000000000606482015260840161071d565b60008212156108105760405162461bcd60e51b815260206004820152603460248201527f456967656e506f644d616e616765722e6164645368617265733a207368617265604482015273732063616e6e6f74206265206e6567617469766560601b606482015260840161071d565b61081e633b9aca0083612678565b156108915760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f644d616e616765722e6164645368617265733a20736861726560448201527f73206d75737420626520612077686f6c65204777656920616d6f756e74000000606482015260840161071d565b6001600160a01b0383166000908152609b6020526040812054906108b584836126a2565b6001600160a01b0386166000818152609b6020526040908190208390555191925090600080516020613231833981519152906108f49087815260200190565b60405180910390a26109068282611e0d565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610964573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098891906126e3565b6001600160a01b0316336001600160a01b0316146109b85760405162461bcd60e51b815260040161071d90612700565b6109c181611e4f565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a30919061274a565b610a4c5760405162461bcd60e51b815260040161071d9061276c565b60665481811614610ac55760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161071d565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610b4b5760405162461bcd60e51b815260040161071d90612604565b6001600160a01b038316610bc55760405162461bcd60e51b8152602060048201526047602482015260008051602061325183398151915260448201527f546f6b656e733a20706f644f776e65722063616e6e6f74206265207a65726f206064820152666164647265737360c81b608482015260a40161071d565b6001600160a01b038216610c425760405162461bcd60e51b815260206004820152604a602482015260008051602061325183398151915260448201527f546f6b656e733a2064657374696e6174696f6e2063616e6e6f74206265207a65606482015269726f206164647265737360b01b608482015260a40161071d565b6000811215610cb15760405162461bcd60e51b8152602060048201526041602482015260008051602061325183398151915260448201527f546f6b656e733a207368617265732063616e6e6f74206265206e6567617469766064820152606560f81b608482015260a40161071d565b610cbf633b9aca0082612678565b15610d335760405162461bcd60e51b815260206004820152604a602482015260008051602061325183398151915260448201527f546f6b656e733a20736861726573206d75737420626520612077686f6c6520476064820152691dd95a48185b5bdd5b9d60b21b608482015260a40161071d565b6001600160a01b0383166000908152609b602052604081205490811215610e26576000610d5f826127b4565b905080831115610dc4576001600160a01b0385166000908152609b6020526040812055610d8c81846127d1565b9250846001600160a01b031660008051602061323183398151915282604051610db791815260200190565b60405180910390a2610e24565b6001600160a01b0385166000908152609b602052604081208054859290610dec9084906126a2565b90915550506040518381526001600160a01b038616906000805160206132318339815191529060200160405180910390a25050505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610e8357600080fd5b505af1158015610e97573d6000803e3d6000fd5b5050505050505050565b609c5460009067ffffffffffffffff1680610ec55767ffffffffffffffff91505090565b919050565b610ed2611f46565b67ffffffffffffffff8116610f645760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f644d616e616765722e73657444656e6562466f726b54696d6560448201527f7374616d703a2063616e6e6f7420736574206e657744656e6562466f726b546960648201526b06d657374616d7020746f20360a41b608482015260a40161071d565b609c5467ffffffffffffffff16156110005760405162461bcd60e51b815260206004820152605360248201527f456967656e506f644d616e616765722e73657444656e6562466f726b54696d6560448201527f7374616d703a2063616e6e6f74207365742064656e6562466f726b54696d657360648201527274616d70206d6f7265207468616e206f6e636560681b608482015260a40161071d565b609c805467ffffffffffffffff191667ffffffffffffffff83169081179091556040519081527f19200b6fdad58f91b2f496b0c444fc4be3eff74a7e24b07770e04a7137bfd9db9060200160405180910390a150565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c2919061274a565b6110de5760405162461bcd60e51b815260040161071d9061276c565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b611125611f46565b61112f6000611fa0565b565b6066546000908190600190811614156111885760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161071d565b336000908152609860205260409020546001600160a01b03161561120a5760405162461bcd60e51b815260206004820152603360248201527f456967656e506f644d616e616765722e637265617465506f643a2053656e64656044820152721c88185b1c9958591e481a185cc818481c1bd9606a1b606482015260840161071d565b6000611214611ff2565b9250505090565b606654600090600190811614156112705760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161071d565b336000908152609860205260409020546001600160a01b03168061129957611296611ff2565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e46349034906112cf908b908b908b908b908b90600401612811565b6000604051808303818588803b1580156112e857600080fd5b505af11580156112fc573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061090b576113d5836001600160a01b031660001b60405180610940016040528061090e815260200161292361090e9139604080516001600160a01b037f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e166020820152808201919091526000606082015260800160408051601f19818403018152908290526113ba9291602001612886565b60405160208183030381529060405280519060200120612157565b9392505050565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916146114245760405162461bcd60e51b815260040161071d90612604565b600081121561149b5760405162461bcd60e51b815260206004820152603760248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f617265732063616e6e6f74206265206e65676174697665000000000000000000606482015260840161071d565b6114a9633b9aca0082612678565b1561151e576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f61726573206d75737420626520612077686f6c65204777656920616d6f756e74606482015260840161071d565b6001600160a01b0382166000908152609b602052604081205461154290839061289b565b905060008112156115d35760405162461bcd60e51b815260206004820152604f60248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20636160448201527f6e6e6f7420726573756c7420696e20706f64206f776e657220686176696e672060648201526e6e656761746976652073686172657360881b608482015260a40161071d565b6001600160a01b039092166000908152609b602052604090209190915550565b6115fb611f46565b6109c1816121b3565b6001600160a01b03808316600090815260986020526040902054839116331461167f5760405162461bcd60e51b815260206004820152602760248201527f456967656e506f644d616e616765722e6f6e6c79456967656e506f643a206e6f6044820152661d0818481c1bd960ca1b606482015260840161071d565b600260c95414156116d25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161071d565b600260c9556001600160a01b03831661176e5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a20706f644f776e65722063616e6e6064820152716f74206265207a65726f206164647265737360701b608482015260a40161071d565b61177c633b9aca00836128da565b156118155760405162461bcd60e51b815260206004820152605a60248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a2073686172657344656c7461206d60648201527f75737420626520612077686f6c65204777656920616d6f756e74000000000000608482015260a40161071d565b6001600160a01b0383166000908152609b60205260408120549061183984836126a2565b6001600160a01b0386166000908152609b602052604081208290559091506118618383611e0d565b905080156119c957600081121561192c576001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06118c0856127b4565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561190f57600080fd5b505af1158015611923573d6000803e3d6000fd5b505050506119c9565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916906328a573ae90606401600060405180830381600087803b1580156119b057600080fd5b505af11580156119c4573d6000803e3d6000fd5b505050505b856001600160a01b0316600080516020613231833981519152866040516119f291815260200190565b60405180910390a25050600160c95550505050565b600054610100900460ff1615808015611a275750600054600160ff909116105b80611a415750303b158015611a41575060005460ff166001145b611aa45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161071d565b6000805460ff191660011790558015611ac7576000805461ff0019166101001790555b611ad0856121b3565b611ad984611fa0565b611ae383836121fd565b8015611b29576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60975460405163321accf960e11b815267ffffffffffffffff8316600482015260009182916001600160a01b039091169063643599f290602401602060405180830381865afa158015611b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bab91906128ee565b90508061090b5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e676574426c6f636b526f6f744174546960448201527f6d657374616d703a20737461746520726f6f742061742074696d657374616d70606482015271081b9bdd081e595d08199a5b985b1a5e995960721b608482015260a40161071d565b611c43611f46565b6001600160a01b038116611ca85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161071d565b6109c181611fa0565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2891906126e3565b6001600160a01b0316336001600160a01b031614611d585760405162461bcd60e51b815260040161071d90612700565b606654198119606654191614611dd65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161071d565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610af8565b6000808313611e2d5760008213611e265750600061090b565b508061090b565b60008213611e4557611e3e836127b4565b905061090b565b611e3e838361289b565b6001600160a01b038116611edd5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161071d565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b0316331461112f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161071d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060996000815461200390612907565b9091555060408051610940810190915261090e8082526000916120a291839133916129236020830139604080516001600160a01b037f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e166020820152808201919091526000606082015260800160408051601f198184030181529082905261208e9291602001612886565b6040516020818303038152906040526122e7565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b1580156120e657600080fd5b505af11580156120fa573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b16602183015260358201859052605580830185905283518084039091018152607590920190925280519101206000906113d5565b609780546001600160a01b0319166001600160a01b0383169081179091556040517f08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f690600090a250565b6065546001600160a01b031615801561221e57506001600160a01b03821615155b6122a05760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161071d565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26122e382611e4f565b5050565b6000808447101561233a5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015260640161071d565b82516123885760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015260640161071d565b8383516020850187f590506001600160a01b0381166123e95760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015260640161071d565b949350505050565b6001600160a01b03811681146109c157600080fd5b6000806040838503121561241957600080fd5b8235612424816123f1565b946020939093013593505050565b60006020828403121561244457600080fd5b81356113d5816123f1565b60006020828403121561246157600080fd5b5035919050565b60008060006060848603121561247d57600080fd5b8335612488816123f1565b92506020840135612498816123f1565b929592945050506040919091013590565b6000602082840312156124bb57600080fd5b813567ffffffffffffffff811681146113d557600080fd5b6000602082840312156124e557600080fd5b813560ff811681146113d557600080fd5b60008083601f84011261250857600080fd5b50813567ffffffffffffffff81111561252057600080fd5b60208301915083602082850101111561253857600080fd5b9250929050565b60008060008060006060868803121561255757600080fd5b853567ffffffffffffffff8082111561256f57600080fd5b61257b89838a016124f6565b9097509550602088013591508082111561259457600080fd5b506125a1888289016124f6565b96999598509660400135949350505050565b600080600080608085870312156125c957600080fd5b84356125d4816123f1565b935060208501356125e4816123f1565b925060408501356125f4816123f1565b9396929550929360600135925050565b602080825260409082018190527f456967656e506f644d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261268757612687612662565b500690565b634e487b7160e01b600052601160045260246000fd5b600080821280156001600160ff1b03849003851316156126c4576126c461268c565b600160ff1b83900384128116156126dd576126dd61268c565b50500190565b6000602082840312156126f557600080fd5b81516113d5816123f1565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561275c57600080fd5b815180151581146113d557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000600160ff1b8214156127ca576127ca61268c565b5060000390565b6000828210156127e3576127e361268c565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006128256060830187896127e8565b82810360208401526128388186886127e8565b9150508260408301529695505050505050565b6000815160005b8181101561286c5760208185018101518683015201612852565b8181111561287b576000828601525b509290920192915050565b60006123e9612895838661284b565b8461284b565b60008083128015600160ff1b8501841216156128b9576128b961268c565b6001600160ff1b03840183138116156128d4576128d461268c565b50500390565b6000826128e9576128e9612662565b500790565b60006020828403121561290057600080fd5b5051919050565b600060001982141561291b5761291b61268c565b506001019056fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193456967656e506f644d616e616765722e77697468647261775368617265734173a2646970667358221220ef27d84673f8fb0a3acb412819d09dde9de413187461a072f3d1f27b860910e564736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x9e545e3c0baab3e08cdfd552c960a1050f373042":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b03831681526000602060406020840152835180604085015260005b8181101561063c57858101830151858201606001528201610620565b506000606082860101526060601f19601f83011685010192505050939250505056fea26469706673582212204991d74046566cb91b8d4cf7495532eedcea4124e157cfebcba924ceb7fba96464736f6c63430008180033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"}},"0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0":{"nonce":1,"balance":"0x0","code":"0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063c298557814602d575b600080fd5b600060405190815260200160405180910390f3fea2646970667358221220b21976f06ef02c2cd93d153abeebc384346023ec0dc78005b008777a8176aa1764736f6c634300080c0033","storage":{}},"0xa0ee7a142d267c1f36714e4a8f75612f20a79720":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0xa513e6e4b8f2a923d98304ec87f64353c4d5c853":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x959922be3caee4b8cd9a407cc3ac1c251c2007b1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xa51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106103425760003560e01c8063635bbd10116101b8578063b7f06ebe11610104578063cf80873e116100a2578063f16172b01161007c578063f16172b014610908578063f2fde38b1461091b578063f698da251461092e578063fabc1cbc1461093657600080fd5b8063cf80873e146108c1578063da8be864146108e2578063eea9064b146108f557600080fd5b8063c488375a116100de578063c488375a146107de578063c5e480db146107fe578063c94b5111146108a4578063ca661c04146108b757600080fd5b8063b7f06ebe14610784578063bb45fef2146107a7578063c448feb8146107d557600080fd5b8063886f1195116101715780639104c3191161014b5780639104c3191461070f57806399be81c81461072a578063a17884841461073d578063b13442711461075d57600080fd5b8063886f1195146106cb5780638da5cb5b146106de57806390041347146106ef57600080fd5b8063635bbd101461063657806365da1264146106495780636d70f7ae14610672578063715018a614610685578063778e55f31461068d5780637f548071146106b857600080fd5b806328a573ae116102925780634665bcda11610230578063597b36da1161020a578063597b36da146105e55780635ac86ab7146105f85780635c975abb1461061b57806360d7faed1461062357600080fd5b80634665bcda146105ac5780634fc40b61146105d3578063595c6a67146105dd57600080fd5b806339b70e381161026c57806339b70e38146104f45780633cdeb5e0146105335780633e28391d14610562578063433773821461058557600080fd5b806328a573ae146104ae57806329c77d4f146104c157806333404396146104e157600080fd5b8063132d4967116102ff57806316928365116102d957806316928365146104285780631bbce0911461046157806320606b701461047457806322bf40e41461049b57600080fd5b8063132d4967146103ef578063136439dd146104025780631522bf021461041557600080fd5b80630449ca391461034757806304a4f9791461036d5780630b9f487a146103945780630dd8dd02146103a75780630f589e59146103c757806310d67a2f146103dc575b600080fd5b61035a610355366004614835565b610949565b6040519081526020015b60405180910390f35b61035a7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b61035a6103a236600461489b565b6109ce565b6103ba6103b5366004614835565b610a90565b60405161036491906148f6565b6103da6103d5366004614993565b610df9565b005b6103da6103ea3660046149e6565b610f3e565b6103da6103fd366004614a0a565b610ff1565b6103da610410366004614a4b565b6110a8565b6103da610423366004614a64565b6111e7565b61035a6104363660046149e6565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b61035a61046f366004614a0a565b6111fb565b61035a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103da6104a9366004614acf565b611229565b6103da6104bc366004614a0a565b61136d565b61035a6104cf3660046149e6565b609b6020526000908152604090205481565b6103da6104ef366004614b76565b61141d565b61051b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b6040516001600160a01b039091168152602001610364565b61051b6105413660046149e6565b6001600160a01b039081166000908152609960205260409020600101541690565b6105756105703660046149e6565b61155a565b6040519015158152602001610364565b61035a7f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b61051b7f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681565b61035a6213c68081565b6103da61157a565b61035a6105f3366004614e73565b611641565b610575610606366004614eaf565b606654600160ff9092169190911b9081161490565b60665461035a565b6103da610631366004614ee0565b611671565b6103da610644366004614a4b565b61170c565b61051b6106573660046149e6565b609a602052600090815260409020546001600160a01b031681565b6105756106803660046149e6565b61171d565b6103da61173e565b61035a61069b366004614f6f565b609860209081526000928352604080842090915290825290205481565b6103da6106c6366004615050565b611752565b60655461051b906001600160a01b031681565b6033546001600160a01b031661051b565b6107026106fd3660046150e0565b61197e565b604051610364919061516a565b61051b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6103da61073836600461517d565b611a58565b61035a61074b3660046149e6565b609f6020526000908152604090205481565b61051b7f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b610575610792366004614a4b565b609e6020526000908152604090205460ff1681565b6105756107b53660046151b2565b609c60209081526000928352604080842090915290825290205460ff1681565b61035a609d5481565b61035a6107ec3660046149e6565b60a16020526000908152604090205481565b61086e61080c3660046149e6565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff1690820152606001610364565b61035a6108b23660046151de565b611b2a565b61035a62034bc081565b6108d46108cf3660046149e6565b611be3565b60405161036492919061525f565b6103ba6108f03660046149e6565b611f9b565b6103da610903366004615284565b61245f565b6103da6109163660046152dc565b61257c565b6103da6109293660046149e6565b61260d565b61035a612683565b6103da610944366004614a4b565b6126c1565b609d54600090815b838110156109c657600060a16000878785818110610971576109716152f8565b905060200201602081019061098691906149e6565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828111156109b5578092505b506109bf81615324565b9050610951565b509392505050565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610a4c612683565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b60665460609060019060029081161415610ac55760405162461bcd60e51b8152600401610abc9061533f565b60405180910390fd5b6000836001600160401b03811115610adf57610adf614c18565b604051908082528060200260200182016040528015610b08578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b85811015610dee57868682818110610b4357610b436152f8565b9050602002810190610b559190615376565b610b63906020810190615396565b9050878783818110610b7757610b776152f8565b9050602002810190610b899190615376565b610b939080615396565b905014610c085760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a20696e707574206c656e677468206d69736d6174636800000000000000006064820152608401610abc565b33878783818110610c1b57610c1b6152f8565b9050602002810190610c2d9190615376565b610c3e9060608101906040016149e6565b6001600160a01b031614610cba5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a2077697468647261776572206d757374206265207374616b6572000000006064820152608401610abc565b610dbf3383898985818110610cd157610cd16152f8565b9050602002810190610ce39190615376565b610cf49060608101906040016149e6565b8a8a86818110610d0657610d066152f8565b9050602002810190610d189190615376565b610d229080615396565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150889050818110610d6857610d686152f8565b9050602002810190610d7a9190615376565b610d88906020810190615396565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061281d92505050565b838281518110610dd157610dd16152f8565b602090810291909101015280610de681615324565b915050610b29565b509095945050505050565b610e023361155a565b15610e885760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e726567697374657241734f70657260448201527f61746f723a2063616c6c657220697320616c7265616479206163746976656c796064820152690819195b1959d85d195960b21b608482015260a401610abc565b610e923384612ddd565b604080518082019091526060815260006020820152610eb43380836000612fd0565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610eed91906153df565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610f30929190615431565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb59190615460565b6001600160a01b0316336001600160a01b031614610fe55760405162461bcd60e51b8152600401610abc9061547d565b610fee81613266565b50565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614806110505750336001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe616145b61106c5760405162461bcd60e51b8152600401610abc906154c7565b6110758361155a565b156110a3576001600160a01b038084166000908152609a6020526040902054166110a18185858561335d565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156110f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111149190615524565b6111305760405162461bcd60e51b8152600401610abc90615541565b606654818116146111a95760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610abc565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6111ef6133d8565b6110a184848484613432565b6001600160a01b0383166000908152609b602052604081205461122085828686611b2a565b95945050505050565b600054610100900460ff16158080156112495750600054600160ff909116105b806112635750303b158015611263575060005460ff166001145b6112c65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610abc565b6000805460ff1916600117905580156112e9576000805461ff0019166101001790555b6112f38888613658565b6112fb613742565b609755611307896137d9565b6113108661382b565b61131c85858585613432565b8015611362576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614806113cc5750336001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe616145b6113e85760405162461bcd60e51b8152600401610abc906154c7565b6113f18361155a565b156110a3576001600160a01b038084166000908152609a6020526040902054166110a181858585613925565b606654600290600490811614156114465760405162461bcd60e51b8152600401610abc9061533f565b600260c95414156114995760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610abc565b600260c95560005b88811015611549576115398a8a838181106114be576114be6152f8565b90506020028101906114d09190615589565b8989848181106114e2576114e26152f8565b90506020028101906114f49190615396565b898986818110611506576115066152f8565b9050602002013588888781811061151f5761151f6152f8565b9050602002016020810190611534919061559f565b6139a0565b61154281615324565b90506114a1565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e69190615524565b6116025760405162461bcd60e51b8152600401610abc90615541565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000816040516020016116549190615630565b604051602081830303815290604052805190602001209050919050565b6066546002906004908116141561169a5760405162461bcd60e51b8152600401610abc9061533f565b600260c95414156116ed5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610abc565b600260c9556116ff86868686866139a0565b5050600160c95550505050565b6117146133d8565b610fee8161382b565b6001600160a01b039081166000818152609a60205260409020549091161490565b6117466133d8565b61175060006137d9565b565b42836020015110156117d65760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b6572207369676e6174757265206578706972656064820152601960fa1b608482015260a401610abc565b6117df8561155a565b156118685760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b657220697320616c726561647920616374697660648201526c195b1e4819195b1959d85d1959609a1b608482015260a401610abc565b6118718461171d565b6118fd5760405162461bcd60e51b815260206004820152605160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a206f70657261746f72206973206e6f7420726567697374656064820152703932b21034b71022b4b3b2b72630bcb2b960791b608482015260a401610abc565b6000609b6000876001600160a01b03166001600160a01b0316815260200190815260200160002054905060006119398783888860200151611b2a565b6001600160a01b0388166000908152609b602052604090206001840190558551909150611969908890839061418a565b61197587878686612fd0565b50505050505050565b6060600082516001600160401b0381111561199b5761199b614c18565b6040519080825280602002602001820160405280156119c4578160200160208202803683370190505b50905060005b83518110156109c6576001600160a01b03851660009081526098602052604081208551909190869084908110611a0257611a026152f8565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110611a3d57611a3d6152f8565b6020908102919091010152611a5181615324565b90506119ca565b611a613361171d565b611ae35760405162461bcd60e51b815260206004820152604760248201527f44656c65676174696f6e4d616e616765722e7570646174654f70657261746f7260448201527f4d657461646174615552493a2063616c6c6572206d75737420626520616e206f6064820152663832b930ba37b960c91b608482015260a401610abc565b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051611b1e929190615431565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c0909201909252805191012060009081611ba0612683565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe6909116906360f4062b90602401602060405180830381865afa158015611c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c779190615643565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9909116906394f649dd90602401600060405180830381865afa158015611ce7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d0f91908101906156b7565b9150915060008313611d2657909590945092505050565b606080835160001415611de0576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611d9b57611d9b6152f8565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611dcf57611dcf6152f8565b602002602001018181525050611f8e565b8351611ded906001615771565b6001600160401b03811115611e0457611e04614c18565b604051908082528060200260200182016040528015611e2d578160200160208202803683370190505b50915081516001600160401b03811115611e4957611e49614c18565b604051908082528060200260200182016040528015611e72578160200160208202803683370190505b50905060005b8451811015611f0c57848181518110611e9357611e936152f8565b6020026020010151838281518110611ead57611ead6152f8565b60200260200101906001600160a01b031690816001600160a01b031681525050838181518110611edf57611edf6152f8565b6020026020010151828281518110611ef957611ef96152f8565b6020908102919091010152600101611e78565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac08260018451611f319190615789565b81518110611f4157611f416152f8565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018451611f719190615789565b81518110611f8157611f816152f8565b6020026020010181815250505b9097909650945050505050565b60665460609060019060029081161415611fc75760405162461bcd60e51b8152600401610abc9061533f565b611fd08361155a565b6120505760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a207374908201527f616b6572206d7573742062652064656c65676174656420746f20756e64656c656064820152636761746560e01b608482015260a401610abc565b6120598361171d565b156120cc5760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a206f7060448201527f657261746f72732063616e6e6f7420626520756e64656c6567617465640000006064820152608401610abc565b6001600160a01b0383166121485760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6e6e6f7420756e64656c6567617465207a65726f2061646472657373000000006064820152608401610abc565b6001600160a01b038084166000818152609a60205260409020549091169033148061217b5750336001600160a01b038216145b806121a257506001600160a01b038181166000908152609960205260409020600101541633145b6122145760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6c6c65722063616e6e6f7420756e64656c6567617465207374616b65720000006064820152608401610abc565b60008061222086611be3565b9092509050336001600160a01b0387161461227657826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040902080546001600160a01b031916905581516122f8576040805160008152602081019091529450612456565b81516001600160401b0381111561231157612311614c18565b60405190808252806020026020018201604052801561233a578160200160208202803683370190505b50945060005b8251811015612454576040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508483815181106123a0576123a06152f8565b6020026020010151826000815181106123bb576123bb6152f8565b60200260200101906001600160a01b031690816001600160a01b0316815250508383815181106123ed576123ed6152f8565b602002602001015181600081518110612408576124086152f8565b60200260200101818152505061242189878b858561281d565b888481518110612433576124336152f8565b6020026020010181815250505050808061244c90615324565b915050612340565b505b50505050919050565b6124683361155a565b156124e65760405162461bcd60e51b815260206004820152604260248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a20737460448201527f616b657220697320616c7265616479206163746976656c792064656c65676174606482015261195960f21b608482015260a401610abc565b6124ef8361171d565b6125705760405162461bcd60e51b815260206004820152604660248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a206f7060448201527f657261746f72206973206e6f74207265676973746572656420696e2045696765606482015265372630bcb2b960d11b608482015260a401610abc565b6110a333848484612fd0565b6125853361171d565b6126035760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e4d616e616765722e6d6f646966794f70657261746f7260448201527f44657461696c733a2063616c6c6572206d75737420626520616e206f706572616064820152623a37b960e91b608482015260a401610abc565b610fee3382612ddd565b6126156133d8565b6001600160a01b03811661267a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abc565b610fee816137d9565b60007f0000000000000000000000000000000000000000000000000000000000007a694614156126b4575060975490565b6126bc613742565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612714573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127389190615460565b6001600160a01b0316336001600160a01b0316146127685760405162461bcd60e51b8152600401610abc9061547d565b6066541981196066541916146127e65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610abc565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016111dc565b60006001600160a01b0386166128b45760405162461bcd60e51b815260206004820152605060248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374616b65722063616e6e6f7460648201526f206265207a65726f206164647265737360801b608482015260a401610abc565b825161293e5760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374726174656769657320636160648201526c6e6e6f7420626520656d70747960981b608482015260a401610abc565b60005b8351811015612ceb576001600160a01b03861615612997576129978688868481518110612970576129706152f8565b602002602001015186858151811061298a5761298a6152f8565b602002602001015161335d565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b03168482815181106129c7576129c76152f8565b60200260200101516001600160a01b03161415612a90577f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031663beffbb8988858481518110612a2057612a206152f8565b60200260200101516040518363ffffffff1660e01b8152600401612a599291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015612a7357600080fd5b505af1158015612a87573d6000803e3d6000fd5b50505050612ce3565b846001600160a01b0316876001600160a01b03161480612b6257507f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b0316639b4da03d858381518110612aec57612aec6152f8565b60200260200101516040518263ffffffff1660e01b8152600401612b1f91906001600160a01b0391909116815260200190565b602060405180830381865afa158015612b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b609190615524565b155b612c2e5760405162461bcd60e51b8152602060048201526084602482018190527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448301527f6e6451756575655769746864726177616c3a2077697468647261776572206d7560648301527f73742062652073616d652061646472657373206173207374616b657220696620908201527f746869726450617274795472616e7366657273466f7262696464656e2061726560a482015263081cd95d60e21b60c482015260e401610abc565b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b0316638c80d4e588868481518110612c7057612c706152f8565b6020026020010151868581518110612c8a57612c8a6152f8565b60200260200101516040518463ffffffff1660e01b8152600401612cb0939291906157a0565b600060405180830381600087803b158015612cca57600080fd5b505af1158015612cde573d6000803e3d6000fd5b505050505b600101612941565b506001600160a01b0386166000908152609f60205260408120805491829190612d1383615324565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff1681526020018681526020018581525090506000612d7b82611641565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f990612dc990839085906157c4565b60405180910390a198975050505050505050565b6213c680612df160608301604084016157dd565b63ffffffff161115612ea65760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401610abc565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff1690612ee290606084019084016157dd565b63ffffffff161015612f785760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401610abc565b6001600160a01b03821660009081526099602052604090208190612f9c828261581a565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac90611b1e9084906153df565b60665460009060019081161415612ff95760405162461bcd60e51b8152600401610abc9061533f565b6001600160a01b0380851660009081526099602052604090206001015416801580159061302f5750336001600160a01b03821614155b80156130445750336001600160a01b03861614155b156131b15742846020015110156130c35760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f766572207369676e617475726520657870697265640000000000000000006064820152608401610abc565b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff161561315d5760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f76657253616c7420616c7265616479207370656e740000000000000000006064820152608401610abc565b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff1916600117905585015161319e9088908890859088906109ce565b90506131af8282876000015161418a565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a360008061321088611be3565b9150915060005b82518110156113625761325e888a858481518110613237576132376152f8565b6020026020010151858581518110613251576132516152f8565b6020026020010151613925565b600101613217565b6001600160a01b0381166132f45760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610abc565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290613394908490615789565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610f30939291906157a0565b6033546001600160a01b031633146117505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610abc565b8281146134ba5760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a20696e707574206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610abc565b8260005b818110156136505760008686838181106134da576134da6152f8565b90506020020160208101906134ef91906149e6565b6001600160a01b038116600090815260a1602052604081205491925086868581811061351d5761351d6152f8565b90506020020135905062034bc08111156135e15760405162461bcd60e51b815260206004820152607360248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a205f7769746864726177616c60648201527f44656c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544860848201527244524157414c5f44454c41595f424c4f434b5360681b60a482015260c401610abc565b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a15050508061364990615324565b90506134be565b505050505050565b6065546001600160a01b031615801561367957506001600160a01b03821615155b6136fb5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610abc565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261373e82613266565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62034bc08111156138e45760405162461bcd60e51b815260206004820152607160248201527f44656c65676174696f6e4d616e616765722e5f7365744d696e5769746864726160448201527f77616c44656c6179426c6f636b733a205f6d696e5769746864726177616c446560648201527f6c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544844526084820152704157414c5f44454c41595f424c4f434b5360781b60a482015260c401610abc565b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b6001600160a01b0380851660009081526098602090815260408083209386168352929052908120805483929061395c908490615771565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610f30939291906157a0565b60006139ae6105f38761587d565b6000818152609e602052604090205490915060ff16613a2f5760405162461bcd60e51b815260206004820152604360248201526000805160206159b583398151915260448201527f645769746864726177616c3a20616374696f6e206973206e6f7420696e20717560648201526265756560e81b608482015260a401610abc565b609d544390613a4460a0890160808a016157dd565b63ffffffff16613a549190615771565b1115613adc5760405162461bcd60e51b815260206004820152605f60248201526000805160206159b583398151915260448201527f645769746864726177616c3a206d696e5769746864726177616c44656c61794260648201527f6c6f636b7320706572696f6420686173206e6f74207965742070617373656400608482015260a401610abc565b613aec60608701604088016149e6565b6001600160a01b0316336001600160a01b031614613b795760405162461bcd60e51b815260206004820152605060248201526000805160206159b583398151915260448201527f645769746864726177616c3a206f6e6c7920776974686472617765722063616e60648201526f1031b7b6b83632ba329030b1ba34b7b760811b608482015260a401610abc565b8115613bfb57613b8c60a0870187615396565b85149050613bfb5760405162461bcd60e51b815260206004820152604260248201526000805160206159b583398151915260448201527f645769746864726177616c3a20696e707574206c656e677468206d69736d61746064820152610c6d60f31b608482015260a401610abc565b6000818152609e60205260409020805460ff191690558115613d605760005b613c2760a0880188615396565b9050811015613d5a574360a16000613c4260a08b018b615396565b85818110613c5257613c526152f8565b9050602002016020810190613c6791906149e6565b6001600160a01b03168152602081019190915260400160002054613c9160a08a0160808b016157dd565b63ffffffff16613ca19190615771565b1115613cbf5760405162461bcd60e51b8152600401610abc9061588f565b613d52613ccf60208901896149e6565b33613cdd60a08b018b615396565b85818110613ced57613ced6152f8565b9050602002016020810190613d0291906149e6565b613d0f60c08c018c615396565b86818110613d1f57613d1f6152f8565b905060200201358a8a87818110613d3857613d386152f8565b9050602002016020810190613d4d91906149e6565b614344565b600101613c1a565b5061414f565b336000908152609a60205260408120546001600160a01b0316905b613d8860a0890189615396565b905081101561414c574360a16000613da360a08c018c615396565b85818110613db357613db36152f8565b9050602002016020810190613dc891906149e6565b6001600160a01b03168152602081019190915260400160002054613df260a08b0160808c016157dd565b63ffffffff16613e029190615771565b1115613e205760405162461bcd60e51b8152600401610abc9061588f565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0613e4260a08a018a615396565b83818110613e5257613e526152f8565b9050602002016020810190613e6791906149e6565b6001600160a01b03161415613fb7576000613e8560208a018a6149e6565b905060006001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe616630e81073c83613ec660c08e018e615396565b87818110613ed657613ed66152f8565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af1158015613f2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4e9190615643565b6001600160a01b038084166000908152609a6020526040902054919250168015613faf57613faf8184613f8460a08f018f615396565b88818110613f9457613f946152f8565b9050602002016020810190613fa991906149e6565b85613925565b505050614144565b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b031663c4623ea133898985818110613ff957613ff96152f8565b905060200201602081019061400e91906149e6565b61401b60a08d018d615396565b8681811061402b5761402b6152f8565b905060200201602081019061404091906149e6565b61404d60c08e018e615396565b8781811061405d5761405d6152f8565b60405160e088901b6001600160e01b03191681526001600160a01b03968716600482015294861660248601529290941660448401526020909102013560648201526084019050600060405180830381600087803b1580156140bd57600080fd5b505af11580156140d1573d6000803e3d6000fd5b505050506001600160a01b038216156141445761414482336140f660a08c018c615396565b85818110614106576141066152f8565b905060200201602081019061411b91906149e6565b61412860c08d018d615396565b86818110614138576141386152f8565b90506020020135613925565b600101613d7b565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6001600160a01b0383163b156142a457604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906141ca9086908690600401615917565b602060405180830381865afa1580156141e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061420b9190615974565b6001600160e01b031916146110a35760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610abc565b826001600160a01b03166142b88383614484565b6001600160a01b0316146110a35760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610abc565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014156143ef5760405162387b1360e81b81526001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe6169063387b1300906143b8908890889087906004016157a0565b600060405180830381600087803b1580156143d257600080fd5b505af11580156143e6573d6000803e3d6000fd5b5050505061447d565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9169063c608c7f390608401600060405180830381600087803b15801561446957600080fd5b505af1158015611362573d6000803e3d6000fd5b5050505050565b600080600061449385856144a0565b915091506109c681614510565b6000808251604114156144d75760208301516040840151606085015160001a6144cb878285856146cb565b94509450505050614509565b82516040141561450157602083015160408401516144f68683836147b8565b935093505050614509565b506000905060025b9250929050565b60008160048111156145245761452461599e565b141561452d5750565b60018160048111156145415761454161599e565b141561458f5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610abc565b60028160048111156145a3576145a361599e565b14156145f15760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610abc565b60038160048111156146055761460561599e565b141561465e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610abc565b60048160048111156146725761467261599e565b1415610fee5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610abc565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561470257506000905060036147af565b8460ff16601b1415801561471a57508460ff16601c14155b1561472b57506000905060046147af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561477f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166147a8576000600192509250506147af565b9150600090505b94509492505050565b6000806001600160ff1b038316816147d560ff86901c601b615771565b90506147e3878288856146cb565b935093505050935093915050565b60008083601f84011261480357600080fd5b5081356001600160401b0381111561481a57600080fd5b6020830191508360208260051b850101111561450957600080fd5b6000806020838503121561484857600080fd5b82356001600160401b0381111561485e57600080fd5b61486a858286016147f1565b90969095509350505050565b6001600160a01b0381168114610fee57600080fd5b803561489681614876565b919050565b600080600080600060a086880312156148b357600080fd5b85356148be81614876565b945060208601356148ce81614876565b935060408601356148de81614876565b94979396509394606081013594506080013592915050565b6020808252825182820181905260009190848201906040850190845b8181101561492e57835183529284019291840191600101614912565b50909695505050505050565b60006060828403121561494c57600080fd5b50919050565b60008083601f84011261496457600080fd5b5081356001600160401b0381111561497b57600080fd5b60208301915083602082850101111561450957600080fd5b6000806000608084860312156149a857600080fd5b6149b2858561493a565b925060608401356001600160401b038111156149cd57600080fd5b6149d986828701614952565b9497909650939450505050565b6000602082840312156149f857600080fd5b8135614a0381614876565b9392505050565b600080600060608486031215614a1f57600080fd5b8335614a2a81614876565b92506020840135614a3a81614876565b929592945050506040919091013590565b600060208284031215614a5d57600080fd5b5035919050565b60008060008060408587031215614a7a57600080fd5b84356001600160401b0380821115614a9157600080fd5b614a9d888389016147f1565b90965094506020870135915080821115614ab657600080fd5b50614ac3878288016147f1565b95989497509550505050565b60008060008060008060008060c0898b031215614aeb57600080fd5b8835614af681614876565b97506020890135614b0681614876565b9650604089013595506060890135945060808901356001600160401b0380821115614b3057600080fd5b614b3c8c838d016147f1565b909650945060a08b0135915080821115614b5557600080fd5b50614b628b828c016147f1565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b031215614b9257600080fd5b88356001600160401b0380821115614ba957600080fd5b614bb58c838d016147f1565b909a50985060208b0135915080821115614bce57600080fd5b614bda8c838d016147f1565b909850965060408b0135915080821115614bf357600080fd5b614bff8c838d016147f1565b909650945060608b0135915080821115614b5557600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715614c5057614c50614c18565b60405290565b604080519081016001600160401b0381118282101715614c5057614c50614c18565b604051601f8201601f191681016001600160401b0381118282101715614ca057614ca0614c18565b604052919050565b63ffffffff81168114610fee57600080fd5b803561489681614ca8565b60006001600160401b03821115614cde57614cde614c18565b5060051b60200190565b600082601f830112614cf957600080fd5b81356020614d0e614d0983614cc5565b614c78565b82815260059290921b84018101918181019086841115614d2d57600080fd5b8286015b84811015614d51578035614d4481614876565b8352918301918301614d31565b509695505050505050565b600082601f830112614d6d57600080fd5b81356020614d7d614d0983614cc5565b82815260059290921b84018101918181019086841115614d9c57600080fd5b8286015b84811015614d515780358352918301918301614da0565b600060e08284031215614dc957600080fd5b614dd1614c2e565b9050614ddc8261488b565b8152614dea6020830161488b565b6020820152614dfb6040830161488b565b604082015260608201356060820152614e1660808301614cba565b608082015260a08201356001600160401b0380821115614e3557600080fd5b614e4185838601614ce8565b60a084015260c0840135915080821115614e5a57600080fd5b50614e6784828501614d5c565b60c08301525092915050565b600060208284031215614e8557600080fd5b81356001600160401b03811115614e9b57600080fd5b614ea784828501614db7565b949350505050565b600060208284031215614ec157600080fd5b813560ff81168114614a0357600080fd5b8015158114610fee57600080fd5b600080600080600060808688031215614ef857600080fd5b85356001600160401b0380821115614f0f57600080fd5b9087019060e0828a031215614f2357600080fd5b90955060208701359080821115614f3957600080fd5b50614f46888289016147f1565b909550935050604086013591506060860135614f6181614ed2565b809150509295509295909350565b60008060408385031215614f8257600080fd5b8235614f8d81614876565b91506020830135614f9d81614876565b809150509250929050565b600060408284031215614fba57600080fd5b614fc2614c56565b905081356001600160401b0380821115614fdb57600080fd5b818401915084601f830112614fef57600080fd5b813560208282111561500357615003614c18565b615015601f8301601f19168201614c78565b9250818352868183860101111561502b57600080fd5b8181850182850137600081838501015282855280860135818601525050505092915050565b600080600080600060a0868803121561506857600080fd5b853561507381614876565b9450602086013561508381614876565b935060408601356001600160401b038082111561509f57600080fd5b6150ab89838a01614fa8565b945060608801359150808211156150c157600080fd5b506150ce88828901614fa8565b95989497509295608001359392505050565b600080604083850312156150f357600080fd5b82356150fe81614876565b915060208301356001600160401b0381111561511957600080fd5b61512585828601614ce8565b9150509250929050565b600081518084526020808501945080840160005b8381101561515f57815187529582019590820190600101615143565b509495945050505050565b602081526000614a03602083018461512f565b6000806020838503121561519057600080fd5b82356001600160401b038111156151a657600080fd5b61486a85828601614952565b600080604083850312156151c557600080fd5b82356151d081614876565b946020939093013593505050565b600080600080608085870312156151f457600080fd5b84356151ff81614876565b935060208501359250604085013561521681614876565b9396929550929360600135925050565b600081518084526020808501945080840160005b8381101561515f5781516001600160a01b03168752958201959082019060010161523a565b6040815260006152726040830185615226565b8281036020840152611220818561512f565b60008060006060848603121561529957600080fd5b83356152a481614876565b925060208401356001600160401b038111156152bf57600080fd5b6152cb86828701614fa8565b925050604084013590509250925092565b6000606082840312156152ee57600080fd5b614a03838361493a565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156153385761533861530e565b5060010190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60008235605e1983360301811261538c57600080fd5b9190910192915050565b6000808335601e198436030181126153ad57600080fd5b8301803591506001600160401b038211156153c757600080fd5b6020019150600581901b360382131561450957600080fd5b6060810182356153ee81614876565b6001600160a01b03908116835260208401359061540a82614876565b166020830152604083013561541e81614ca8565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561547257600080fd5b8151614a0381614876565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526037908201527f44656c65676174696f6e4d616e616765723a206f6e6c7953747261746567794d60408201527f616e616765724f72456967656e506f644d616e61676572000000000000000000606082015260800190565b60006020828403121561553657600080fd5b8151614a0381614ed2565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000823560de1983360301811261538c57600080fd5b6000602082840312156155b157600080fd5b8135614a0381614ed2565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151606084015263ffffffff608083015116608084015260a082015160e060a085015261561760e0850182615226565b905060c083015184820360c0860152611220828261512f565b602081526000614a0360208301846155bc565b60006020828403121561565557600080fd5b5051919050565b600082601f83011261566d57600080fd5b8151602061567d614d0983614cc5565b82815260059290921b8401810191818101908684111561569c57600080fd5b8286015b84811015614d5157805183529183019183016156a0565b600080604083850312156156ca57600080fd5b82516001600160401b03808211156156e157600080fd5b818501915085601f8301126156f557600080fd5b81516020615705614d0983614cc5565b82815260059290921b8401810191818101908984111561572457600080fd5b948201945b8386101561574b57855161573c81614876565b82529482019490820190615729565b9188015191965090935050508082111561576457600080fd5b506151258582860161565c565b600082198211156157845761578461530e565b500190565b60008282101561579b5761579b61530e565b500390565b6001600160a01b039384168152919092166020820152604081019190915260600190565b828152604060208201526000614ea760408301846155bc565b6000602082840312156157ef57600080fd5b8135614a0381614ca8565b80546001600160a01b0319166001600160a01b0392909216919091179055565b813561582581614876565b61582f81836157fa565b5060018101602083013561584281614876565b61584c81836157fa565b50604083013561585b81614ca8565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b60006158893683614db7565b92915050565b6020808252606e908201526000805160206159b583398151915260408201527f645769746864726177616c3a207769746864726177616c44656c6179426c6f6360608201527f6b7320706572696f6420686173206e6f74207965742070617373656420666f7260808201526d207468697320737472617465677960901b60a082015260c00190565b82815260006020604081840152835180604085015260005b8181101561594b5785810183015185820160600152820161592f565b8181111561595d576000606083870101525b50601f01601f191692909201606001949350505050565b60006020828403121561598657600080fd5b81516001600160e01b031981168114614a0357600080fd5b634e487b7160e01b600052602160045260246000fdfe44656c65676174696f6e4d616e616765722e5f636f6d706c6574655175657565a26469706673582212203a9863b190b0abcf799891a42203a11c6933a165f6897ec6ac670f95b48c927b64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0xa82ff9afd8f496c3d6ac40e2a0f282e47488cfc9":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100415760003560e01c80632702747d14610046578063793e1c8e1461006f5780637be6aa6b14610090575b600080fd5b61005961005436600461023e565b6100a3565b6040516100669190610277565b60405180910390f35b61007861dead81565b6040516001600160a01b039091168152602001610066565b61005961009e3660046102c4565b6100fd565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166333cfb7b760e01b1790526060906100f3848261013a565b9150505b92915050565b6040805160048152602481019091526020810180516001600160e01b031663e481af9d60e01b179052606090610133838261013a565b9392505050565b6060600080846001600160a01b03168460405161015791906102e1565b600060405180830381855afa9150503d8060008114610192576040519150601f19603f3d011682016040523d82523d6000602084013e610197565b606091505b50915091508180156101aa575060008151115b156101cc57808060200190518101906101c39190610336565b925050506100f7565b6040805160018082528183019092526000916020808301908036833701905050905061dead81600081518110610204576102046103fb565b6001600160a01b039092166020928302919091019091015292506100f7915050565b6001600160a01b038116811461023b57600080fd5b50565b6000806040838503121561025157600080fd5b823561025c81610226565b9150602083013561026c81610226565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156102b85783516001600160a01b031683529284019291840191600101610293565b50909695505050505050565b6000602082840312156102d657600080fd5b813561013381610226565b6000825160005b8181101561030257602081860181015185830152016102e8565b506000920191825250919050565b634e487b7160e01b600052604160045260246000fd5b805161033181610226565b919050565b6000602080838503121561034957600080fd5b825167ffffffffffffffff8082111561036157600080fd5b818501915085601f83011261037557600080fd5b81518181111561038757610387610310565b8060051b604051601f19603f830116810181811085821117156103ac576103ac610310565b6040529182528482019250838101850191888311156103ca57600080fd5b938501935b828510156103ef576103e085610326565b845293850193928501926103cf565b98975050505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220d2a1dc3d5b3de166be22fce7e789ceac2302c613380087624652f3f48de1ed0864736f6c63430008180033","storage":{}},"0xb7278a61aa25c888815afc32ad3cc52ff24fe575":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100625760003560e01c806331b36bd9146100675780633563b0d1146100905780634d2b57fe146100b05780634f739f74146100d05780635c155662146100f0578063cefdc1d414610110575b600080fd5b61007a6100753660046113b8565b610131565b60405161008791906114a7565b60405180910390f35b6100a361009e3660046114e3565b610245565b6040516100879190611641565b6100c36100be3660046116be565b6106c5565b604051610087919061170d565b6100e36100de3660046117a5565b6107d2565b604051610087919061189e565b6101036100fe366004611959565b610eea565b60405161008791906119bc565b61012361011e3660046119f4565b6110a8565b604051610087929190611a2b565b606081516001600160401b0381111561014c5761014c61134f565b604051908082528060200260200182016040528015610175578160200160208202803683370190505b50905060005b825181101561023e57836001600160a01b03166313542a4e8483815181106101a5576101a5611a4c565b60200260200101516040518263ffffffff1660e01b81526004016101d891906001600160a01b0391909116815260200190565b602060405180830381865afa1580156101f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102199190611a62565b82828151811061022b5761022b611a4c565b602090810291909101015260010161017b565b5092915050565b60606000846001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015610287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ab9190611a7b565b90506000856001600160a01b0316639e9923c26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103119190611a7b565b90506000866001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa158015610353573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103779190611a7b565b9050600086516001600160401b038111156103945761039461134f565b6040519080825280602002602001820160405280156103c757816020015b60608152602001906001900390816103b25790505b50905060005b87518110156106b95760008882815181106103ea576103ea611a4c565b0160200151604051638902624560e01b815260f89190911c6004820181905263ffffffff8a16602483015291506000906001600160a01b03871690638902624590604401600060405180830381865afa15801561044b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104739190810190611a98565b905080516001600160401b0381111561048e5761048e61134f565b6040519080825280602002602001820160405280156104d957816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816104ac5790505b508484815181106104ec576104ec611a4c565b602002602001018190525060005b81518110156106ae576040518060600160405280876001600160a01b03166347b314e885858151811061052f5761052f611a4c565b60200260200101516040518263ffffffff1660e01b815260040161055591815260200190565b602060405180830381865afa158015610572573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105969190611a7b565b6001600160a01b031681526020018383815181106105b6576105b6611a4c565b60200260200101518152602001896001600160a01b031663fa28c6278585815181106105e4576105e4611a4c565b60209081029190910101516040516001600160e01b031960e084901b168152600481019190915260ff8816602482015263ffffffff8f166044820152606401602060405180830381865afa158015610640573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106649190611b28565b6001600160601b031681525085858151811061068257610682611a4c565b6020026020010151828151811061069b5761069b611a4c565b60209081029190910101526001016104fa565b5050506001016103cd565b50979650505050505050565b606081516001600160401b038111156106e0576106e061134f565b604051908082528060200260200182016040528015610709578160200160208202803683370190505b50905060005b825181101561023e57836001600160a01b031663296bb06484838151811061073957610739611a4c565b60200260200101516040518263ffffffff1660e01b815260040161075f91815260200190565b602060405180830381865afa15801561077c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a09190611a7b565b8282815181106107b2576107b2611a4c565b6001600160a01b039092166020928302919091019091015260010161070f565b6107fd6040518060800160405280606081526020016060815260200160608152602001606081525090565b6000876001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa15801561083d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108619190611a7b565b905061088e6040518060800160405280606081526020016060815260200160608152602001606081525090565b6040516361c8a12f60e11b81526001600160a01b038a169063c391425e906108be908b9089908990600401611b51565b600060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109039190810190611b98565b81526040516340e03a8160e11b81526001600160a01b038316906381c0750290610935908b908b908b90600401611c4f565b600060405180830381865afa158015610952573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261097a9190810190611b98565b6040820152856001600160401b038111156109975761099761134f565b6040519080825280602002602001820160405280156109ca57816020015b60608152602001906001900390816109b55790505b50606082015260005b60ff8116871115610dfb576000856001600160401b038111156109f8576109f861134f565b604051908082528060200260200182016040528015610a21578160200160208202803683370190505b5083606001518360ff1681518110610a3b57610a3b611a4c565b602002602001018190525060005b86811015610d055760008c6001600160a01b03166304ec63518a8a85818110610a7457610a74611a4c565b905060200201358e88600001518681518110610a9257610a92611a4c565b60200260200101516040518463ffffffff1660e01b8152600401610acf9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015610aec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b109190611c78565b9050806001600160c01b0316600003610bbb5760405162461bcd60e51b815260206004820152605c60248201527f4f70657261746f7253746174655265747269657665722e676574436865636b5360448201527f69676e617475726573496e64696365733a206f70657261746f72206d7573742060648201527f6265207265676973746572656420617420626c6f636b6e756d62657200000000608482015260a40160405180910390fd5b8a8a8560ff16818110610bd057610bd0611a4c565b60016001600160c01b038516919093013560f81c1c82169091039050610cfc57856001600160a01b031663dd9846b98a8a85818110610c1157610c11611a4c565b905060200201358d8d8860ff16818110610c2d57610c2d611a4c565b6040516001600160e01b031960e087901b1681526004810194909452919091013560f81c60248301525063ffffffff8f166044820152606401602060405180830381865afa158015610c83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca79190611ca1565b85606001518560ff1681518110610cc057610cc0611a4c565b60200260200101518481518110610cd957610cd9611a4c565b63ffffffff9092166020928302919091019091015282610cf881611cd4565b9350505b50600101610a49565b506000816001600160401b03811115610d2057610d2061134f565b604051908082528060200260200182016040528015610d49578160200160208202803683370190505b50905060005b82811015610dc05784606001518460ff1681518110610d7057610d70611a4c565b60200260200101518181518110610d8957610d89611a4c565b6020026020010151828281518110610da357610da3611a4c565b63ffffffff90921660209283029190910190910152600101610d4f565b508084606001518460ff1681518110610ddb57610ddb611a4c565b602002602001018190525050508080610df390611ced565b9150506109d3565b506000896001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e609190611a7b565b60405163354952a360e21b81529091506001600160a01b0382169063d5254a8c90610e93908b908b908e90600401611d0c565b600060405180830381865afa158015610eb0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ed89190810190611b98565b60208301525098975050505050505050565b60606000846001600160a01b031663c391425e84866040518363ffffffff1660e01b8152600401610f1c929190611d36565b600060405180830381865afa158015610f39573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f619190810190611b98565b9050600084516001600160401b03811115610f7e57610f7e61134f565b604051908082528060200260200182016040528015610fa7578160200160208202803683370190505b50905060005b855181101561109e57866001600160a01b03166304ec6351878381518110610fd757610fd7611a4c565b602002602001015187868581518110610ff257610ff2611a4c565b60200260200101516040518463ffffffff1660e01b815260040161102f9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa15801561104c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110709190611c78565b6001600160c01b031682828151811061108b5761108b611a4c565b6020908102919091010152600101610fad565b5095945050505050565b60408051600180825281830190925260009160609183916020808301908036833701905050905084816000815181106110e3576110e3611a4c565b60209081029190910101526040516361c8a12f60e11b81526000906001600160a01b0388169063c391425e9061111f9088908690600401611d36565b600060405180830381865afa15801561113c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111649190810190611b98565b60008151811061117657611176611a4c565b60209081029190910101516040516304ec635160e01b81526004810188905263ffffffff87811660248301529091166044820181905291506000906001600160a01b038916906304ec635190606401602060405180830381865afa1580156111e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112069190611c78565b6001600160c01b03169050600061121c8261123a565b90508161122a8a838a610245565b9550955050505050935093915050565b606060008061124884611306565b61ffff166001600160401b038111156112635761126361134f565b6040519080825280601f01601f19166020018201604052801561128d576020820181803683370190505b5090506000805b8251821080156112a5575061010081105b156112fc576001811b9350858416156112ec578060f81b8383815181106112ce576112ce611a4c565b60200101906001600160f81b031916908160001a9053508160010191505b6112f581611cd4565b9050611294565b5090949350505050565b6000805b82156113315761131b600184611d55565b909216918061132981611d68565b91505061130a565b92915050565b6001600160a01b038116811461134c57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561138d5761138d61134f565b604052919050565b60006001600160401b038211156113ae576113ae61134f565b5060051b60200190565b600080604083850312156113cb57600080fd5b82356113d681611337565b91506020838101356001600160401b038111156113f257600080fd5b8401601f8101861361140357600080fd5b803561141661141182611395565b611365565b81815260059190911b8201830190838101908883111561143557600080fd5b928401925b8284101561145c57833561144d81611337565b8252928401929084019061143a565b80955050505050509250929050565b60008151808452602080850194506020840160005b8381101561149c57815187529582019590820190600101611480565b509495945050505050565b6020815260006114ba602083018461146b565b9392505050565b63ffffffff8116811461134c57600080fd5b80356114de816114c1565b919050565b6000806000606084860312156114f857600080fd5b833561150381611337565b92506020848101356001600160401b038082111561152057600080fd5b818701915087601f83011261153457600080fd5b8135818111156115465761154661134f565b611558601f8201601f19168501611365565b9150808252888482850101111561156e57600080fd5b8084840185840137600084828401015250809450505050611591604085016114d3565b90509250925092565b600082825180855260208086019550808260051b8401018186016000805b8581101561163357868403601f19018a52825180518086529086019086860190845b8181101561161e57835180516001600160a01b03168452898101518a8501526040908101516001600160601b031690840152928801926060909201916001016115da565b50509a86019a945050918401916001016115b8565b509198975050505050505050565b6020815260006114ba602083018461159a565b600082601f83011261166557600080fd5b8135602061167561141183611395565b8083825260208201915060208460051b87010193508684111561169757600080fd5b602086015b848110156116b3578035835291830191830161169c565b509695505050505050565b600080604083850312156116d157600080fd5b82356116dc81611337565b915060208301356001600160401b038111156116f757600080fd5b61170385828601611654565b9150509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561174e5783516001600160a01b031683529284019291840191600101611729565b50909695505050505050565b60008083601f84011261176c57600080fd5b5081356001600160401b0381111561178357600080fd5b6020830191508360208260051b850101111561179e57600080fd5b9250929050565b600080600080600080608087890312156117be57600080fd5b86356117c981611337565b955060208701356117d9816114c1565b945060408701356001600160401b03808211156117f557600080fd5b818901915089601f83011261180957600080fd5b81358181111561181857600080fd5b8a602082850101111561182a57600080fd5b60208301965080955050606089013591508082111561184857600080fd5b5061185589828a0161175a565b979a9699509497509295939492505050565b60008151808452602080850194506020840160005b8381101561149c57815163ffffffff168752958201959082019060010161187c565b6000602080835283516080828501526118ba60a0850182611867565b905081850151601f19808684030160408701526118d78383611867565b925060408701519150808684030160608701526118f48383611867565b60608801518782038301608089015280518083529194508501925084840190600581901b8501860160005b8281101561194b5784878303018452611939828751611867565b9588019593880193915060010161191f565b509998505050505050505050565b60008060006060848603121561196e57600080fd5b833561197981611337565b925060208401356001600160401b0381111561199457600080fd5b6119a086828701611654565b92505060408401356119b1816114c1565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561174e578351835292840192918401916001016119d8565b600080600060608486031215611a0957600080fd5b8335611a1481611337565b92506020840135915060408401356119b1816114c1565b828152604060208201526000611a44604083018461159a565b949350505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611a7457600080fd5b5051919050565b600060208284031215611a8d57600080fd5b81516114ba81611337565b60006020808385031215611aab57600080fd5b82516001600160401b03811115611ac157600080fd5b8301601f81018513611ad257600080fd5b8051611ae061141182611395565b81815260059190911b82018301908381019087831115611aff57600080fd5b928401925b82841015611b1d57835182529284019290840190611b04565b979650505050505050565b600060208284031215611b3a57600080fd5b81516001600160601b03811681146114ba57600080fd5b63ffffffff84168152604060208201819052810182905260006001600160fb1b03831115611b7e57600080fd5b8260051b8085606085013791909101606001949350505050565b60006020808385031215611bab57600080fd5b82516001600160401b03811115611bc157600080fd5b8301601f81018513611bd257600080fd5b8051611be061141182611395565b81815260059190911b82018301908381019087831115611bff57600080fd5b928401925b82841015611b1d578351611c17816114c1565b82529284019290840190611c04565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff84168152604060208201526000611c6f604083018486611c26565b95945050505050565b600060208284031215611c8a57600080fd5b81516001600160c01b03811681146114ba57600080fd5b600060208284031215611cb357600080fd5b81516114ba816114c1565b634e487b7160e01b600052601160045260246000fd5b600060018201611ce657611ce6611cbe565b5060010190565b600060ff821660ff8103611d0357611d03611cbe565b60010192915050565b604081526000611d20604083018587611c26565b905063ffffffff83166020830152949350505050565b63ffffffff83168152604060208201526000611a44604083018461146b565b8181038181111561133157611331611cbe565b600061ffff808316818103611d7f57611d7f611cbe565b600101939250505056fea26469706673582212202b3e36f430d5f7f12f8124a33676c0954c36bdaf4a71ac7e145cf85fb593480b64736f6c63430008180033","storage":{}},"0xb7f8bc63bbcad18155201308c8f3540b07f84f5e":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100b3575b600080fd5b61006f61006a3660046102ee565b6100c6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f61010e565b6000546001600160a01b031661007e565b61006f6100c13660046102ee565b610122565b6100ce6101af565b6100d781610209565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6101166101af565b610120600061029e565b565b61012a6101af565b6001600160a01b0381166101945760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61019d8161029e565b50565b6001600160a01b03163b151590565b6000546001600160a01b031633146101205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161018b565b6001600160a01b0381163b61027c5760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6044820152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b606482015260840161018b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561030057600080fd5b81356001600160a01b038116811461031757600080fd5b939250505056fea26469706673582212206dc2c0f44c94866033a128f2fc9ced237ec5b2ff470e7fd3ff0497128c9e0ed764736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x1":"0x610178da211fef7d417bc0e6fed39f05609ad788"}},"0xc5a5c42992decbae36851359345fe25997f5c42d":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0xe7f1725e7734ce288f8367e1bb143e90bb3f05120001","0x1":"0x0","0x32":"0x9635f643e140090a9a8dcd712ed6285858cebef","0x64":"0xde0b6b3a7640000","0x65":"0x3635c9adc5dea00000","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x7a2088a1bfc9d81c55368ae168c2c02570cb814f","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0x97":"0x831f01b2aeb61d5d8c019704e62c25763057a8806c5c790bc8b4c99ee54ac8a7","0x9d":"0xa","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xa51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xdc64a140aa3e981100a9beca4e685f962f0cf6c9":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x97":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x98":"0x0","0xc9":"0xd65ac9700cec4e530497617d02afdf0d5de3ed18466aca1578edcbce0d40ee16","0xcb":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xdcd1bf9a1b36ce34237eeafef220932846bcd82","0x3d2729dff03bf559da35a983e55814217363c2a44a7ea59bdf688ab8754ea49d":"0x1","0x6e45a9ad53caf7293849c96e5070a246e20a7cc2986b7660b3fb63e30ab898fc":"0x0","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806346fbf68e146100515780638568520614610089578063ce5484281461009e578063eab66d7a146100b1575b600080fd5b61007461005f366004610313565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009c610097366004610335565b6100dc565b005b61009c6100ac366004610313565b61011d565b6001546100c4906001600160a01b031681565b6040516001600160a01b039091168152602001610080565b6001546001600160a01b0316331461010f5760405162461bcd60e51b815260040161010690610371565b60405180910390fd5b6101198282610153565b5050565b6001546001600160a01b031633146101475760405162461bcd60e51b815260040161010690610371565b61015081610220565b50565b6001600160a01b0382166101bf5760405162461bcd60e51b815260206004820152602d60248201527f50617573657252656769737472792e5f7365745061757365723a207a65726f2060448201526c1859191c995cdcc81a5b9c1d5d609a1b6064820152608401610106565b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b03811661028e5760405162461bcd60e51b815260206004820152602f60248201527f50617573657252656769737472792e5f736574556e7061757365723a207a657260448201526e1bc81859191c995cdcc81a5b9c1d5d608a1b6064820152608401610106565b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461030e57600080fd5b919050565b60006020828403121561032557600080fd5b61032e826102f7565b9392505050565b6000806040838503121561034857600080fd5b610351836102f7565b91506020830135801515811461036657600080fd5b809150509250929050565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b60608201526080019056fea2646970667358221220518767f02bbe792c716d0287095ada64b05cd36824c2ecc66bcd5c5ebe061cd664736f6c634300080c0033","storage":{"0x1":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722":"0x1"}},"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266":{"nonce":58,"balance":"0x21e0b97e1b86ad316f1","code":"0x","storage":{}},"0xf5059a5d33d5853360d16c683c16e67980206f36":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106a6565b610118565b61005b6100933660046106c1565b610155565b3480156100a457600080fd5b506100ad6101bc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106a6565b6101ed565b3480156100f557600080fd5b506100ad61020d565b61010661022e565b6101166101116102c3565b6102cd565b565b6101206102f1565b6001600160a01b0316330361014d5761014a81604051806020016040528060008152506000610324565b50565b61014a6100fe565b61015d6102f1565b6001600160a01b031633036101b4576101af8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610324915050565b505050565b6101af6100fe565b60006101c66102f1565b6001600160a01b031633036101e2576101dd6102c3565b905090565b6101ea6100fe565b90565b6101f56102f1565b6001600160a01b0316330361014d5761014a8161034f565b60006102176102f1565b6001600160a01b031633036101e2576101dd6102f1565b6102366102f1565b6001600160a01b031633036101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101dd6103a3565b3660008037600080366000845af43d6000803e8080156102ec573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b61032d836103cb565b60008251118061033a5750805b156101af57610349838361040b565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103786102f1565b604080516001600160a01b03928316815291841660208301520160405180910390a161014a81610437565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610315565b6103d4816104e0565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061043083836040518060600160405280602781526020016107b860279139610574565b9392505050565b6001600160a01b03811661049c5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016102ba565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b61054d5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016102ba565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6104bf565b60606001600160a01b0384163b6105dc5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016102ba565b600080856001600160a01b0316856040516105f79190610768565b600060405180830381855af49150503d8060008114610632576040519150601f19603f3d011682016040523d82523d6000602084013e610637565b606091505b5091509150610647828286610651565b9695505050505050565b60608315610660575081610430565b8251156106705782518084602001fd5b8160405162461bcd60e51b81526004016102ba9190610784565b80356001600160a01b03811681146106a157600080fd5b919050565b6000602082840312156106b857600080fd5b6104308261068a565b6000806000604084860312156106d657600080fd5b6106df8461068a565b9250602084013567ffffffffffffffff808211156106fc57600080fd5b818601915086601f83011261071057600080fd5b81358181111561071f57600080fd5b87602082850101111561073157600080fd5b6020830194508093505050509250925092565b60005b8381101561075f578181015183820152602001610747565b50506000910152565b6000825161077a818460208701610744565b9190910192915050565b60208152600082518060208401526107a3816040850160208701610744565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206f42262012bb1d1a07475f68d95d58d18353d78d57c71d0a11845bbf297d596564736f6c63430008180033","storage":{"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x70e0ba845a1a0f2da3359c97e0285013525ffc49","0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff":"0x1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x9e545e3c0baab3e08cdfd552c960a1050f373042","0xcfb339bd1c51c488f6134f4ac63d1594afad827b3401c3fc51ed1da74a8ca14e":"0x5"}}},"best_block_number":"0xb"} \ No newline at end of file diff --git a/contracts/scripts/anvil/upgrade_add_aggregator_to_service_manager.sh b/contracts/scripts/anvil/upgrade_add_aggregator_to_service_manager.sh new file mode 100644 index 000000000..1a176e149 --- /dev/null +++ b/contracts/scripts/anvil/upgrade_add_aggregator_to_service_manager.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +# cd to the directory of this script so that this can be run from anywhere +parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P ) + +cd "$parent_path" + +cd ../../ + +jq 'del(.block)' scripts/anvil/state/alignedlayer-deployed-anvil-state.json > scripts/anvil/state/alignedlayer-deployed-anvil-state-tmp.json + +cp -f scripts/anvil/state/alignedlayer-deployed-anvil-state-tmp.json scripts/anvil/state/alignedlayer-deployed-anvil-state.json + +rm scripts/anvil/state/alignedlayer-deployed-anvil-state-tmp.json + +anvil --load-state scripts/anvil/state/alignedlayer-deployed-anvil-state.json --dump-state scripts/anvil/state/alignedlayer-deployed-anvil-state.json & + +sleep 2 + +# Save the output to a variable to later extract the address of the new deployed contract +forge_output=$(forge script script/upgrade/AlignedLayerUpgradeAddAggregator.s.sol \ + "./script/output/devnet/eigenlayer_deployment_output.json" \ + "./script/output/devnet/alignedlayer_deployment_output.json" \ + "./script/deploy/config/devnet/aligned.devnet.config.json" \ + --rpc-url "http://localhost:8545" \ + --private-key "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" \ + --broadcast \ + --sig "run(string memory eigenLayerDeploymentFilePath, string memory alignedLayerDeploymentFilePath, string memory alignedConfigFilePath)") + +echo "$forge_output" + +pkill anvil + +ALIGNED_LAYER_AGGREGATOR_ADDRESS=$(jq -r '.permissions.aggregator' ./script/deploy/config/devnet/aligned.devnet.config.json) +jq --arg alignedLayerAggregator "$ALIGNED_LAYER_AGGREGATOR_ADDRESS" '.permissions += {"alignedLayerAggregator": $alignedLayerAggregator}' "script/output/devnet/alignedlayer_deployment_output.json" > "script/output/devnet/alignedlayer_deployment_output.temp.json" + +mv "script/output/devnet/alignedlayer_deployment_output.temp.json" "script/output/devnet/alignedlayer_deployment_output.json" +rm -f "script/output/devnet/alignedlayer_deployment_output.temp.json" diff --git a/contracts/scripts/anvil/upgrade_add_type_hash_to_batcher_payment_service.sh b/contracts/scripts/anvil/upgrade_add_type_hash_to_batcher_payment_service.sh new file mode 100644 index 000000000..08b4456fd --- /dev/null +++ b/contracts/scripts/anvil/upgrade_add_type_hash_to_batcher_payment_service.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +# cd to the directory of this script so that this can be run from anywhere +parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P ) + +cd "$parent_path" + +cd ../../ + +jq 'del(.block)' scripts/anvil/state/alignedlayer-deployed-anvil-state.json > scripts/anvil/state/alignedlayer-deployed-anvil-state-tmp.json + +cp -f scripts/anvil/state/alignedlayer-deployed-anvil-state-tmp.json scripts/anvil/state/alignedlayer-deployed-anvil-state.json + +rm scripts/anvil/state/alignedlayer-deployed-anvil-state-tmp.json + +anvil --load-state scripts/anvil/state/alignedlayer-deployed-anvil-state.json --dump-state scripts/anvil/state/alignedlayer-deployed-anvil-state.json & + +sleep 2 + +# Deploy Batcher Payments Contract +forge_output=$(forge script script/upgrade/BatcherPaymentServiceUpgradeAddTypeHash.s.sol \ + "./script/output/devnet/alignedlayer_deployment_output.json" \ + "./script/deploy/config/devnet/batcher-payment-service.devnet.config.json" \ + --rpc-url "http://localhost:8545" \ + --private-key "0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356" \ + --broadcast \ + --legacy \ + --verify \ + --sig "run(string alignedLayerDeploymentFilePath,string batcherPaymentServiceConfigFilePath)") + +echo "$forge_output" + +pkill anvil + +# Extract the batcher payment service values from the output +batcher_payment_service_implementation=$(echo "$forge_output" | awk '/1: address/ {print $3}') + +# Use the extracted value to replace the batcher payment service values in alignedlayer_deployment_output.json and save it to a temporary file +jq --arg batcher_payment_service_implementation "$batcher_payment_service_implementation" '.addresses.batcherPaymentServiceImplementation = $batcher_payment_service_implementation' "./script/output/devnet/alignedlayer_deployment_output.json" > "./script/output/devnet/alignedlayer_deployment_output.temp.json" + +# Replace the original file with the temporary file +mv "./script/output/devnet/alignedlayer_deployment_output.temp.json" "./script/output/devnet/alignedlayer_deployment_output.json" + +# Delete the temporary file +rm -f "./script/output/devnet/alignedlayer_deployment_output.temp.json" diff --git a/contracts/scripts/anvil/upgrade_batcher_payment_service.sh b/contracts/scripts/anvil/upgrade_batcher_payment_service.sh new file mode 100644 index 000000000..c2536155d --- /dev/null +++ b/contracts/scripts/anvil/upgrade_batcher_payment_service.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +# cd to the directory of this script so that this can be run from anywhere +parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P ) + +cd "$parent_path" + +cd ../../ + +jq 'del(.block)' scripts/anvil/state/alignedlayer-deployed-anvil-state.json > scripts/anvil/state/alignedlayer-deployed-anvil-state-tmp.json + +cp -f scripts/anvil/state/alignedlayer-deployed-anvil-state-tmp.json scripts/anvil/state/alignedlayer-deployed-anvil-state.json + +rm scripts/anvil/state/alignedlayer-deployed-anvil-state-tmp.json + +anvil --load-state scripts/anvil/state/alignedlayer-deployed-anvil-state.json --dump-state scripts/anvil/state/alignedlayer-deployed-anvil-state.json & + +sleep 2 + +# Deploy Batcher Payments Contract +forge_output=$(forge script script/upgrade/BatcherPaymentServiceUpgrader.s.sol \ + "./script/output/devnet/alignedlayer_deployment_output.json" \ + --rpc-url "http://localhost:8545" \ + --private-key "0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356" \ + --broadcast \ + --legacy \ + --verify \ + --sig "run(string batcherConfigPath)") + +echo "$forge_output" + +pkill anvil + +# Extract the batcher payment service values from the output +batcher_payment_service_implementation=$(echo "$forge_output" | awk '/1: address/ {print $3}') + +# Use the extracted value to replace the batcher payment service values in alignedlayer_deployment_output.json and save it to a temporary file +jq --arg batcher_payment_service_implementation "$batcher_payment_service_implementation" '.addresses.batcherPaymentServiceImplementation = $batcher_payment_service_implementation' "./script/output/devnet/alignedlayer_deployment_output.json" > "./script/output/devnet/alignedlayer_deployment_output.temp.json" + +# Replace the original file with the temporary file +mv "./script/output/devnet/alignedlayer_deployment_output.temp.json" "./script/output/devnet/alignedlayer_deployment_output.json" + +# Delete the temporary file +rm -f "./script/output/devnet/alignedlayer_deployment_output.temp.json" diff --git a/contracts/scripts/deploy_batcher_payment_service.sh b/contracts/scripts/deploy_batcher_payment_service.sh index bd1c83276..a7f2ce950 100755 --- a/contracts/scripts/deploy_batcher_payment_service.sh +++ b/contracts/scripts/deploy_batcher_payment_service.sh @@ -12,14 +12,14 @@ source scripts/.env # Deploy Batcher Payments Contract forge_output=$(forge script script/deploy/BatcherPaymentServiceDeployer.s.sol \ - ./script/deploy/config/holesky/batcher-payment-service.holesky.config.json \ + $BATCHER_PAYMENT_SERVICE_CONFIG_PATH \ --rpc-url $RPC_URL \ --private-key $PRIVATE_KEY \ --broadcast \ --legacy \ --verify \ --etherscan-api-key $ETHERSCAN_API_KEY \ - --sig "run(string batcherConfigPath)") + --sig "run(string memory batcherConfigPath)") echo "$forge_output" @@ -39,5 +39,3 @@ mv "script/output/holesky/alignedlayer_deployment_output.temp.json" "script/outp # Delete the temporary file rm -f "script/output/holesky/alignedlayer_deployment_output.temp.json" rm -f "script/output/holesky/alignedlayer_deployment_output.temp.temp.json" - - diff --git a/contracts/scripts/upgrade_add_aggregator_to_service_manager.sh b/contracts/scripts/upgrade_add_aggregator_to_service_manager.sh new file mode 100644 index 000000000..43f209d94 --- /dev/null +++ b/contracts/scripts/upgrade_add_aggregator_to_service_manager.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +# cd to the directory of this script so that this can be run from anywhere +parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P ) + +cd "$parent_path" + +cd ../../contracts + +# Save the output to a variable to later extract the address of the new deployed contract +forge_output=$(forge script script/upgrade/AlignedLayerUpgradeAddAggregator.s.sol \ + $EXISTING_DEPLOYMENT_INFO_PATH \ + $OUTPUT_PATH \ + $DEPLOY_CONFIG_PATH \ + --rpc-url $RPC_URL \ + --private-key $PRIVATE_KEY \ + --broadcast \ + --verify \ + --etherscan-api-key $ETHERSCAN_API_KEY \ + --sig "run(string memory eigenLayerDeploymentFilePath, string memory alignedLayerDeploymentFilePath, string memory alignedConfigFilePath)") + +echo "$forge_output" + +# Extract the alignedLayerServiceManagerImplementation value from the output +new_aligned_layer_service_manager_implementation=$(echo "$forge_output" | awk '/1: address/ {print $3}') + +# Use the extracted value to replace the alignedLayerServiceManagerImplementation value in alignedlayer_deployment_output.json and save it to a temporary file +jq --arg new_aligned_layer_service_manager_implementation "$new_aligned_layer_service_manager_implementation" '.addresses.alignedLayerServiceManagerImplementation = $new_aligned_layer_service_manager_implementation' $OUTPUT_PATH > "script/output/holesky/alignedlayer_deployment_output.temp.json" + +# Write aggregator addres to deployment output file +ALIGNED_LAYER_AGGREGATOR_ADDRESS=$(jq -r '.permissions.aggregator' $DEPLOY_CONFIG_PATH) +jq --arg alignedLayerAggregator "$ALIGNED_LAYER_AGGREGATOR_ADDRESS" '.permissions += {"alignedLayerAggregator": $alignedLayerAggregator}' "script/output/holesky/alignedlayer_deployment_output.temp.json" > "script/output/holesky/alignedlayer_deployment_output.temp2.json" + +# Replace the original file with the temporary file +mv "script/output/holesky/alignedlayer_deployment_output.temp2.json" $OUTPUT_PATH + +# Delete the temporary file +rm -f "script/output/holesky/alignedlayer_deployment_output.temp.json" diff --git a/contracts/scripts/upgrade_add_type_hash_to_batcher_payment_service.sh b/contracts/scripts/upgrade_add_type_hash_to_batcher_payment_service.sh new file mode 100644 index 000000000..9d7558508 --- /dev/null +++ b/contracts/scripts/upgrade_add_type_hash_to_batcher_payment_service.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +# cd to the directory of this script so that this can be run from anywhere +parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P ) + +cd "$parent_path" + +cd ../ + +source scripts/.env + +# Deploy Batcher Payments Contract +forge_output=$(forge script script/upgrade/BatcherPaymentServiceUpgradeAddTypeHash.s.sol \ + $OUTPUT_PATH \ + $BATCHER_PAYMENT_SERVICE_CONFIG_PATH \ + --rpc-url $RPC_URL \ + --private-key $PRIVATE_KEY \ + --broadcast \ + --legacy \ + --verify \ + --etherscan-api-key $ETHERSCAN_API_KEY \ + --sig "run(string alignedLayerDeploymentFilePath,string batcherPaymentServiceConfigFilePath)") + +echo "$forge_output" + +pkill anvil + +# Extract the batcher payment service values from the output +batcher_payment_service_implementation=$(echo "$forge_output" | awk '/1: address/ {print $3}') + +# Use the extracted value to replace the batcher payment service values in alignedlayer_deployment_output.json and save it to a temporary file +jq --arg batcher_payment_service_implementation "$batcher_payment_service_implementation" '.addresses.batcherPaymentServiceImplementation = $batcher_payment_service_implementation' $OUTPUT_PATH > "$OUTPUT_PATH.temp" + +# Replace the original file with the temporary file +mv "$OUTPUT_PATH.temp" $OUTPUT_PATH + +# Delete the temporary file +rm -f "$OUTPUT_PATH.temp" diff --git a/contracts/src/core/AlignedLayerServiceManager.sol b/contracts/src/core/AlignedLayerServiceManager.sol index 9ddd474b2..5dbf0406f 100644 --- a/contracts/src/core/AlignedLayerServiceManager.sol +++ b/contracts/src/core/AlignedLayerServiceManager.sol @@ -1,8 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.12; - -import {Pausable} from "eigenlayer-core/contracts/permissions/Pausable.sol"; -import {IPauserRegistry} from "eigenlayer-core/contracts/interfaces/IPauserRegistry.sol"; +pragma solidity ^0.8.12; import {ServiceManagerBase, IAVSDirectory} from "eigenlayer-middleware/ServiceManagerBase.sol"; import {BLSSignatureChecker} from "eigenlayer-middleware/BLSSignatureChecker.sol"; @@ -25,23 +22,6 @@ contract AlignedLayerServiceManager is uint256 internal constant THRESHOLD_DENOMINATOR = 100; uint8 internal constant QUORUM_THRESHOLD_PERCENTAGE = 67; - //old NewBatch event, for smooth Operator upgradeability - event NewBatch( - bytes32 indexed batchMerkleRoot, - uint32 taskCreatedBlock, - string batchDataPointer - ); - // EVENTS - event NewBatchV2( - bytes32 indexed batchMerkleRoot, - address senderAddress, - uint32 taskCreatedBlock, - string batchDataPointer - ); - - event BatchVerified(bytes32 indexed batchMerkleRoot, address senderAddress); - event BatcherBalanceUpdated(address indexed batcher, uint256 newBalance); - constructor( IAVSDirectory __avsDirectory, IRewardsCoordinator __rewardsCoordinator, @@ -62,26 +42,35 @@ contract AlignedLayerServiceManager is // @param _rewardsInitiator The address which is allowed to create AVS rewards submissions. function initialize( address _initialOwner, - address _rewardsInitiator + address _rewardsInitiator, + address _alignedAggregator ) public initializer { __ServiceManagerBase_init(_initialOwner, _rewardsInitiator); + alignedAggregator = _alignedAggregator; //can't do setAggregator(aggregator) since caller is not the owner + } + + // This function is to be run only on upgrade + // If a new contract is deployed, this function should be removed + // Because this new value is also added in the initializer + function initializeAggregator( + address _alignedAggregator + ) public reinitializer(2) { + setAggregator(_alignedAggregator); } function createNewTask( bytes32 batchMerkleRoot, - string calldata batchDataPointer + string calldata batchDataPointer, + uint256 respondToTaskFeeLimit ) external payable { - bytes32 batchIdentifier; - if (block.number < 2_268_375) // TODO set number of blocks - batchIdentifier = batchMerkleRoot; - else - batchIdentifier = keccak256(abi.encodePacked(batchMerkleRoot, msg.sender)); - - require( - batchesState[batchIdentifier].taskCreatedBlock == 0, - "Batch was already submitted" + bytes32 batchIdentifier = keccak256( + abi.encodePacked(batchMerkleRoot, msg.sender) ); + if (batchesState[batchIdentifier].taskCreatedBlock != 0) { + revert BatchAlreadySubmitted(batchIdentifier); + } + if (msg.value > 0) { batchersBalances[msg.sender] += msg.value; emit BatcherBalanceUpdated( @@ -90,100 +79,30 @@ contract AlignedLayerServiceManager is ); } - require(batchersBalances[msg.sender] > 0, "Batcher balance is empty"); + if (batchersBalances[msg.sender] < respondToTaskFeeLimit) { + revert InsufficientFunds( + msg.sender, + respondToTaskFeeLimit, + batchersBalances[msg.sender] + ); + } BatchState memory batchState; batchState.taskCreatedBlock = uint32(block.number); batchState.responded = false; + batchState.respondToTaskFeeLimit = respondToTaskFeeLimit; batchesState[batchIdentifier] = batchState; - // old event for smooth Operator upgradeability: - emit NewBatch( - batchMerkleRoot, - uint32(block.number), - batchDataPointer - ); - emit NewBatchV2( + // For aggregator and operators in v0.7.0 + emit NewBatchV3( batchMerkleRoot, msg.sender, uint32(block.number), - batchDataPointer - ); - } - - // previous version of this function, for smooth upgradeability - function respondToTask( - // Root is signed as a way to verify the batch was right - bytes32 batchMerkleRoot, - NonSignerStakesAndSignature memory nonSignerStakesAndSignature - ) external { - // address batcherAddress = address(0x7969c5eD335650692Bc04293B07F5BF2e7A673C0); // Devnet - // address batcherAddress = address(0x7577Ec4ccC1E6C529162ec8019A49C13F6DAd98b); // Stage - // address batcherAddress = address(0x815aeCA64a974297942D2Bbf034ABEe22a38A003); // Prod - address batcherAddress = address(0x7969c5eD335650692Bc04293B07F5BF2e7A673C0); - uint256 initialGasLeft = gasleft(); - - /* CHECKING SIGNATURES & WHETHER THRESHOLD IS MET OR NOT */ - - // Note: This is a hacky solidity way to see that the element exists - // Value 0 would mean that the task is in block 0 so this can't happen. - require( - batchesState[batchMerkleRoot].taskCreatedBlock != 0, - "Batch doesn't exists" - ); - - // Check task hasn't been responsed yet - require( - batchesState[batchMerkleRoot].responded == false, - "Batch already responded" - ); - - require( - batchersBalances[batcherAddress] > 0, - "Batcher has no balance" - ); - - batchesState[batchMerkleRoot].responded = true; - - /* CHECKING SIGNATURES & WHETHER THRESHOLD IS MET OR NOT */ - // check that aggregated BLS signature is valid - ( - QuorumStakeTotals memory quorumStakeTotals, - bytes32 _hashOfNonSigners - ) = checkSignatures( - batchMerkleRoot, - batchesState[batchMerkleRoot].taskCreatedBlock, - nonSignerStakesAndSignature - ); - - // check that signatories own at least a threshold percentage of each quourm - require( - quorumStakeTotals.signedStakeForQuorum[0] * THRESHOLD_DENOMINATOR >= - quorumStakeTotals.totalStakeForQuorum[0] * - QUORUM_THRESHOLD_PERCENTAGE, - "Signatories do not own at least threshold percentage of a quorum" - ); - - emit BatchVerified(batchMerkleRoot, batcherAddress); - - // Calculate estimation of gas used, check that batcher has sufficient funds - // and send transaction cost to aggregator. - uint256 finalGasLeft = gasleft(); - // 70k was measured by trial and error until the aggregator got paid a bit over what it needed - uint256 txCost = (initialGasLeft - finalGasLeft + 70000) * tx.gasprice; - - require( - batchersBalances[batcherAddress] >= - txCost, - "Batcher has not sufficient funds for paying this transaction" + batchDataPointer, + respondToTaskFeeLimit ); - - batchersBalances[ - batcherAddress - ] -= txCost; - payable(msg.sender).transfer(txCost); } function respondToTaskV2( @@ -191,71 +110,79 @@ contract AlignedLayerServiceManager is bytes32 batchMerkleRoot, address senderAddress, NonSignerStakesAndSignature memory nonSignerStakesAndSignature - ) external { + ) external onlyAggregator { uint256 initialGasLeft = gasleft(); bytes32 batchIdentifierHash = keccak256( abi.encodePacked(batchMerkleRoot, senderAddress) ); - /* CHECKING SIGNATURES & WHETHER THRESHOLD IS MET OR NOT */ + BatchState storage currentBatch = batchesState[batchIdentifierHash]; // Note: This is a hacky solidity way to see that the element exists // Value 0 would mean that the task is in block 0 so this can't happen. - require( - batchesState[batchIdentifierHash].taskCreatedBlock != 0, - "Batch doesn't exists" - ); + if (currentBatch.taskCreatedBlock == 0) { + revert BatchDoesNotExist(batchIdentifierHash); + } // Check task hasn't been responsed yet - require( - batchesState[batchIdentifierHash].responded == false, - "Batch already responded" - ); - - require(batchersBalances[senderAddress] > 0, "Batcher has no balance"); - - batchesState[batchIdentifierHash].responded = true; + if (currentBatch.responded) { + revert BatchAlreadyResponded(batchIdentifierHash); + } + currentBatch.responded = true; + + // Check that batcher has enough funds to fund response + if (batchersBalances[senderAddress] < currentBatch.respondToTaskFeeLimit) { + revert InsufficientFunds( + senderAddress, + currentBatch.respondToTaskFeeLimit, + batchersBalances[senderAddress] + ); + } /* CHECKING SIGNATURES & WHETHER THRESHOLD IS MET OR NOT */ + // check that aggregated BLS signature is valid - ( - QuorumStakeTotals memory quorumStakeTotals, - bytes32 _hashOfNonSigners - ) = checkSignatures( - batchIdentifierHash, - batchesState[batchIdentifierHash].taskCreatedBlock, - nonSignerStakesAndSignature - ); + (QuorumStakeTotals memory quorumStakeTotals, ) = checkSignatures( + batchIdentifierHash, + currentBatch.taskCreatedBlock, + nonSignerStakesAndSignature + ); // check that signatories own at least a threshold percentage of each quourm - require( - quorumStakeTotals.signedStakeForQuorum[0] * THRESHOLD_DENOMINATOR >= + if ( + quorumStakeTotals.signedStakeForQuorum[0] * THRESHOLD_DENOMINATOR < + quorumStakeTotals.totalStakeForQuorum[0] * + QUORUM_THRESHOLD_PERCENTAGE + ) { + revert InvalidQuorumThreshold( + quorumStakeTotals.signedStakeForQuorum[0] * + THRESHOLD_DENOMINATOR, quorumStakeTotals.totalStakeForQuorum[0] * - QUORUM_THRESHOLD_PERCENTAGE, - "Signatories do not own at least threshold percentage of a quorum" - ); + QUORUM_THRESHOLD_PERCENTAGE + ); + } emit BatchVerified(batchMerkleRoot, senderAddress); - // Calculate estimation of gas used, check that batcher has sufficient funds - // and send transaction cost to aggregator. - uint256 finalGasLeft = gasleft(); - // 70k was measured by trial and error until the aggregator got paid a bit over what it needed - uint256 txCost = (initialGasLeft - finalGasLeft + 70000) * tx.gasprice; + uint256 txCost = (initialGasLeft - gasleft() + 70_000) * tx.gasprice; - require( - batchersBalances[senderAddress] >= txCost, - "Batcher has not sufficient funds for paying this transaction" - ); + if (txCost > currentBatch.respondToTaskFeeLimit) { + revert ExceededMaxRespondFee( + currentBatch.respondToTaskFeeLimit, + txCost + ); + } + // Subtract the txCost from the batcher's balance batchersBalances[senderAddress] -= txCost; emit BatcherBalanceUpdated( senderAddress, batchersBalances[senderAddress] ); - payable(msg.sender).transfer(txCost); + + payable(alignedAggregator).transfer(txCost); } function verifyBatchInclusion( @@ -268,15 +195,20 @@ contract AlignedLayerServiceManager is uint256 verificationDataBatchIndex, address senderAddress ) external view returns (bool) { - bytes32 batchIdentifierHash = keccak256( - abi.encodePacked(batchMerkleRoot, senderAddress) - ); + bytes32 batchIdentifier; + if (senderAddress == address(0)) { + batchIdentifier = batchMerkleRoot; + } else { + batchIdentifier = keccak256( + abi.encodePacked(batchMerkleRoot, senderAddress) + ); + } - if (batchesState[batchIdentifierHash].taskCreatedBlock == 0) { + if (batchesState[batchIdentifier].taskCreatedBlock == 0) { return false; } - if (!batchesState[batchIdentifierHash].responded) { + if (!batchesState[batchIdentifier].responded) { return false; } @@ -292,19 +224,71 @@ contract AlignedLayerServiceManager is return Merkle.verifyInclusionKeccak( merkleProof, - batchIdentifierHash, + batchMerkleRoot, hashedLeaf, verificationDataBatchIndex ); } + // Old function signature for backwards compatibility + function verifyBatchInclusion( + bytes32 proofCommitment, + bytes32 pubInputCommitment, + bytes32 provingSystemAuxDataCommitment, + bytes20 proofGeneratorAddr, + bytes32 batchMerkleRoot, + bytes memory merkleProof, + uint256 verificationDataBatchIndex + ) external view returns (bool) { + return this.verifyBatchInclusion( + proofCommitment, + pubInputCommitment, + provingSystemAuxDataCommitment, + proofGeneratorAddr, + batchMerkleRoot, + merkleProof, + verificationDataBatchIndex, + address(0) + ); + } + + function setAggregator(address _alignedAggregator) public onlyOwner { + alignedAggregator = _alignedAggregator; + } + + function withdraw(uint256 amount) external { + if (batchersBalances[msg.sender] < amount) { + revert InsufficientFunds( + msg.sender, + amount, + batchersBalances[msg.sender] + ); + } + + batchersBalances[msg.sender] -= amount; + emit BatcherBalanceUpdated(msg.sender, batchersBalances[msg.sender]); + + payable(msg.sender).transfer(amount); + } + function balanceOf(address account) public view returns (uint256) { return batchersBalances[account]; } + function depositToBatcher(address account) external payable { + _depositToBatcher(account, msg.value); + } + + function _depositToBatcher(address account, uint256 amount) internal { + if (amount == 0) { + revert InvalidDepositAmount(amount); + } + batchersBalances[account] += amount; + emit BatcherBalanceUpdated(account, batchersBalances[account]); + } + receive() external payable { - batchersBalances[msg.sender] += msg.value; - emit BatcherBalanceUpdated(msg.sender, batchersBalances[msg.sender]); + _depositToBatcher(msg.sender, msg.value); } function checkPublicInput( @@ -313,4 +297,11 @@ contract AlignedLayerServiceManager is ) public pure returns (bool) { return keccak256(publicInput) == hash; } + + modifier onlyAggregator() { + if (msg.sender != alignedAggregator) { + revert SenderIsNotAggregator(msg.sender, alignedAggregator); + } + _; + } } diff --git a/contracts/src/core/AlignedLayerServiceManagerStorage.sol b/contracts/src/core/AlignedLayerServiceManagerStorage.sol index b4eec7cfe..9ee465a63 100644 --- a/contracts/src/core/AlignedLayerServiceManagerStorage.sol +++ b/contracts/src/core/AlignedLayerServiceManagerStorage.sol @@ -1,11 +1,10 @@ pragma solidity ^0.8.12; -import "eigenlayer-middleware/interfaces/IServiceManager.sol"; - abstract contract AlignedLayerServiceManagerStorage { struct BatchState { uint32 taskCreatedBlock; bool responded; + uint256 respondToTaskFeeLimit; } /* STORAGE */ @@ -13,8 +12,11 @@ abstract contract AlignedLayerServiceManagerStorage { mapping(bytes32 => BatchState) public batchesState; // Storage for batchers balances. Used by aggregator to pay for respondToTask - mapping(address => uint256) internal batchersBalances; + mapping(address => uint256) public batchersBalances; + + address public alignedAggregator; // storage gap for upgradeability - uint256[48] private __GAP; + // solhint-disable-next-line var-name-mixedcase + uint256[47] private __GAP; } diff --git a/contracts/src/core/BatcherPaymentService.sol b/contracts/src/core/BatcherPaymentService.sol index 88e6fc269..d041cc994 100644 --- a/contracts/src/core/BatcherPaymentService.sol +++ b/contracts/src/core/BatcherPaymentService.sol @@ -1,17 +1,21 @@ -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import {Initializable} from "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; import {OwnableUpgradeable} from "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; import {PausableUpgradeable} from "@openzeppelin-upgrades/contracts/security/PausableUpgradeable.sol"; import {UUPSUpgradeable} from "@openzeppelin-upgrades/contracts/proxy/utils/UUPSUpgradeable.sol"; import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import {EIP712} from "../../lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol"; import {IAlignedLayerServiceManager} from "./IAlignedLayerServiceManager.sol"; +import {BatcherPaymentServiceStorage} from "./BatcherPaymentServiceStorage.sol"; contract BatcherPaymentService is Initializable, OwnableUpgradeable, PausableUpgradeable, - UUPSUpgradeable + UUPSUpgradeable, + BatcherPaymentServiceStorage, + EIP712 { using ECDSA for bytes32; @@ -21,53 +25,76 @@ contract BatcherPaymentService is // EVENTS event PaymentReceived(address indexed sender, uint256 amount); event FundsWithdrawn(address indexed recipient, uint256 amount); - event TaskCreated(bytes32 indexed batchMerkleRoot, string batchDataPointer); event BalanceLocked(address indexed user); event BalanceUnlocked(address indexed user, uint256 unlockBlock); - - struct SignatureData { - bytes signature; - uint256 nonce; - } - - struct UserInfo { - uint256 balance; - uint256 unlockBlock; - uint256 nonce; - } - - // STORAGE - address public BatcherWallet; - - IAlignedLayerServiceManager public AlignedLayerServiceManager; - - // map to user data - mapping(address => UserInfo) public UserData; - - // storage gap for upgradeability - uint256[24] private __GAP; + event TaskCreated(bytes32 indexed batchMerkleRoot, uint256 feePerProof); + + // ERRORS + error OnlyBatcherAllowed(address caller); // 152bc288 + error NoLeavesSubmitted(); // e5180e03 + error NoProofSubmitterSignatures(); // 32742c04 + error NotEnoughLeaves(uint256 leavesQty, uint256 signaturesQty); // 320f0a1b + error LeavesNotPowerOfTwo(uint256 leavesQty); // 6b1651e1 + error NoFeePerProof(); // a3a8658a + error InsufficientFeeForAggregator(uint256 required, uint256 available); // 7899ec71 + error UserHasNoFundsToUnlock(address user); // b38340cf + error UserHasNoFundsToLock(address user); // 6cc12bc2 + error PayerInsufficientBalance(uint256 balance, uint256 amount); // 21c3d50f + error FundsLocked(uint256 unlockBlock, uint256 currentBlock); // bedc4e5a + error InvalidSignature(); // 8baa579f + error InvalidNonce(uint256 expected, uint256 actual); // 06427aeb + error InvalidMaxFee(uint256 maxFee, uint256 actualFee); // f59adf4a + error SignerInsufficientBalance( + address signer, + uint256 balance, + uint256 required + ); // 955c0664 + error InvalidMerkleRoot(bytes32 expected, bytes32 actual); // 9f13b65c // CONSTRUCTOR & INITIALIZER - constructor() { + constructor() EIP712("Aligned", "1") { _disableInitializers(); } + // MODIFIERS + modifier onlyBatcher() { + if (msg.sender != batcherWallet) { + revert OnlyBatcherAllowed(msg.sender); + } + _; + } + function initialize( - IAlignedLayerServiceManager _AlignedLayerServiceManager, - address _BatcherPaymentServiceOwner, - address _BatcherWallet + IAlignedLayerServiceManager _alignedLayerServiceManager, + address _batcherPaymentServiceOwner, + address _batcherWallet, + bytes32 _noncedVerificationDataTypeHash ) public initializer { __Ownable_init(); // default is msg.sender __UUPSUpgradeable_init(); - _transferOwnership(_BatcherPaymentServiceOwner); + _transferOwnership(_batcherPaymentServiceOwner); - AlignedLayerServiceManager = _AlignedLayerServiceManager; - BatcherWallet = _BatcherWallet; + alignedLayerServiceManager = _alignedLayerServiceManager; + batcherWallet = _batcherWallet; + noncedVerificationDataTypeHash = _noncedVerificationDataTypeHash; + } + + function initializeNoncedVerificationDataTypeHash( + bytes32 _noncedVerificationDataTypeHash + ) public reinitializer(2) onlyOwner { + noncedVerificationDataTypeHash = _noncedVerificationDataTypeHash; + } + + function setNoncedVerificationDataTypeHash( + bytes32 _newTypeHash + ) public onlyOwner { + noncedVerificationDataTypeHash = _newTypeHash; } // PAYABLE FUNCTIONS receive() external payable { - UserData[msg.sender].balance += msg.value; + userData[msg.sender].balance += msg.value; + userData[msg.sender].unlockBlock = 0; emit PaymentReceived(msg.sender, msg.value); } @@ -77,29 +104,39 @@ contract BatcherPaymentService is string calldata batchDataPointer, bytes32[] calldata leaves, // padded to the next power of 2 SignatureData[] calldata signatures, // actual length (proof sumbitters == proofs submitted) - uint256 gasForAggregator, - uint256 gasPerProof + uint256 feeForAggregator, + uint256 feePerProof, + uint256 respondToTaskFeeLimit ) external onlyBatcher whenNotPaused { uint256 leavesQty = leaves.length; uint256 signaturesQty = signatures.length; - uint256 feeForAggregator = gasForAggregator * tx.gasprice; - uint256 feePerProof = gasPerProof * tx.gasprice; + if (leavesQty == 0) { + revert NoLeavesSubmitted(); + } - require(leavesQty > 0, "No leaves submitted"); - require(signaturesQty > 0, "No proof submitter signatures"); - require(leavesQty >= signaturesQty, "Not enough leaves"); - require( - (leavesQty & (leavesQty - 1)) == 0, - "Leaves length is not a power of 2" - ); + if (signaturesQty == 0) { + revert NoProofSubmitterSignatures(); + } - require(feeForAggregator > 0, "No gas for aggregator"); - require(feePerProof > 0, "No gas per proof"); - require( - feePerProof * signaturesQty > feeForAggregator, - "Not enough gas to pay the aggregator" - ); + if (leavesQty < signaturesQty) { + revert NotEnoughLeaves(leavesQty, signaturesQty); + } + + if ((leavesQty & (leavesQty - 1)) != 0) { + revert LeavesNotPowerOfTwo(leavesQty); + } + + if (feePerProof == 0) { + revert NoFeePerProof(); + } + + if (feePerProof * signaturesQty <= feeForAggregator) { + revert InsufficientFeeForAggregator( + feeForAggregator, + feePerProof * signaturesQty + ); + } _checkMerkleRootAndVerifySignatures( leaves, @@ -110,45 +147,50 @@ contract BatcherPaymentService is // call alignedLayerServiceManager // with value to fund the task's response - AlignedLayerServiceManager.createNewTask{value: feeForAggregator}( + alignedLayerServiceManager.createNewTask{value: feeForAggregator}( batchMerkleRoot, - batchDataPointer + batchDataPointer, + respondToTaskFeeLimit ); - emit TaskCreated(batchMerkleRoot, batchDataPointer); + emit TaskCreated(batchMerkleRoot, feePerProof); - payable(BatcherWallet).transfer( + payable(batcherWallet).transfer( (feePerProof * signaturesQty) - feeForAggregator ); } function unlock() external whenNotPaused { - require( - UserData[msg.sender].balance > 0, - "User has no funds to unlock" - ); + if (userData[msg.sender].balance == 0) { + revert UserHasNoFundsToUnlock(msg.sender); + } - UserData[msg.sender].unlockBlock = block.number + UNLOCK_BLOCK_COUNT; - emit BalanceUnlocked(msg.sender, UserData[msg.sender].unlockBlock); + userData[msg.sender].unlockBlock = block.number + UNLOCK_BLOCK_COUNT; + emit BalanceUnlocked(msg.sender, userData[msg.sender].unlockBlock); } function lock() external whenNotPaused { - require(UserData[msg.sender].balance > 0, "User has no funds to lock"); - UserData[msg.sender].unlockBlock = 0; + if (userData[msg.sender].balance == 0) { + revert UserHasNoFundsToLock(msg.sender); + } + userData[msg.sender].unlockBlock = 0; emit BalanceLocked(msg.sender); } function withdraw(uint256 amount) external whenNotPaused { - UserInfo storage user_data = UserData[msg.sender]; - require(user_data.balance >= amount, "Payer has insufficient balance"); + UserInfo storage senderData = userData[msg.sender]; + if (senderData.balance < amount) { + revert PayerInsufficientBalance(senderData.balance, amount); + } - require( - user_data.unlockBlock != 0 && user_data.unlockBlock <= block.number, - "Funds are locked" - ); + if ( + senderData.unlockBlock == 0 || senderData.unlockBlock > block.number + ) { + revert FundsLocked(senderData.unlockBlock, block.number); + } - user_data.balance -= amount; - user_data.unlockBlock = 0; + senderData.balance -= amount; + senderData.unlockBlock = 0; emit BalanceLocked(msg.sender); payable(msg.sender).transfer(amount); emit FundsWithdrawn(msg.sender, amount); @@ -164,16 +206,11 @@ contract BatcherPaymentService is function _authorizeUpgrade( address newImplementation - ) internal override onlyOwner {} - - // MODIFIERS - modifier onlyBatcher() { - require( - msg.sender == BatcherWallet, - "Only Batcher can call this function" - ); - _; - } + ) + internal + override + onlyOwner // solhint-disable-next-line no-empty-blocks + {} function _checkMerkleRootAndVerifySignatures( bytes32[] calldata leaves, @@ -226,46 +263,67 @@ contract BatcherPaymentService is } if (leaves.length == 1) { - require(leaves[0] == batchMerkleRoot, "Invalid merkle root"); - } else { - require(layer[0] == batchMerkleRoot, "Invalid merkle root"); + if (leaves[0] != batchMerkleRoot) { + revert InvalidMerkleRoot(batchMerkleRoot, leaves[0]); + } + } else if (layer[0] != batchMerkleRoot) { + revert InvalidMerkleRoot(batchMerkleRoot, layer[0]); } } function _verifySignatureAndDecreaseBalance( - bytes32 hash, + bytes32 leaf, SignatureData calldata signatureData, uint256 feePerProof ) private { - bytes32 noncedHash = keccak256( - abi.encodePacked(hash, signatureData.nonce, block.chainid) + if (signatureData.maxFee < feePerProof) { + revert InvalidMaxFee(signatureData.maxFee, feePerProof); + } + + bytes32 structHash = keccak256( + abi.encode( + noncedVerificationDataTypeHash, + leaf, + keccak256(abi.encodePacked(signatureData.nonce)), + keccak256(abi.encodePacked(signatureData.maxFee)) + ) ); - address signer = noncedHash.recover(signatureData.signature); - require(signer != address(0), "Invalid signature"); + bytes32 hash = _hashTypedDataV4(structHash); - UserInfo storage user_data = UserData[signer]; + address signer = ECDSA.recover(hash, signatureData.signature); - require(user_data.nonce == signatureData.nonce, "Invalid Nonce"); - user_data.nonce++; + if (signer == address(0)) { + revert InvalidSignature(); + } - require( - user_data.balance >= feePerProof, - "Signer has insufficient balance" - ); + UserInfo storage signerData = userData[signer]; + + if (signerData.nonce != signatureData.nonce) { + revert InvalidNonce(signerData.nonce, signatureData.nonce); + } + signerData.nonce++; + + if (signerData.balance < feePerProof) { + revert SignerInsufficientBalance( + signer, + signerData.balance, + feePerProof + ); + } - user_data.balance -= feePerProof; + signerData.balance -= feePerProof; } function user_balances(address account) public view returns (uint256) { - return UserData[account].balance; + return userData[account].balance; } function user_nonces(address account) public view returns (uint256) { - return UserData[account].nonce; + return userData[account].nonce; } function user_unlock_block(address account) public view returns (uint256) { - return UserData[account].unlockBlock; + return userData[account].unlockBlock; } } diff --git a/contracts/src/core/BatcherPaymentServiceStorage.sol b/contracts/src/core/BatcherPaymentServiceStorage.sol new file mode 100644 index 000000000..8b502ce05 --- /dev/null +++ b/contracts/src/core/BatcherPaymentServiceStorage.sol @@ -0,0 +1,29 @@ +pragma solidity ^0.8.12; +import {IAlignedLayerServiceManager} from "./IAlignedLayerServiceManager.sol"; + +abstract contract BatcherPaymentServiceStorage { + struct SignatureData { + bytes signature; + uint256 nonce; + uint256 maxFee; + } + + struct UserInfo { + uint256 balance; + uint256 unlockBlock; + uint256 nonce; + } + + IAlignedLayerServiceManager public alignedLayerServiceManager; + + address public batcherWallet; + + // map to user data + mapping(address => UserInfo) public userData; + + bytes32 public noncedVerificationDataTypeHash; + + // storage gap for upgradeability + // solhint-disable-next-line var-name-mixedcase + uint256[23] private __GAP; +} diff --git a/contracts/src/core/ERC20Mock.sol b/contracts/src/core/ERC20Mock.sol index 2ac1a3f8b..d44f24808 100644 --- a/contracts/src/core/ERC20Mock.sol +++ b/contracts/src/core/ERC20Mock.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import "@openzeppelin/contracts/interfaces/IERC20.sol"; import "@openzeppelin/contracts/utils/Context.sol"; diff --git a/contracts/src/core/IAlignedLayerServiceManager.sol b/contracts/src/core/IAlignedLayerServiceManager.sol index c89206d68..2c89c0551 100644 --- a/contracts/src/core/IAlignedLayerServiceManager.sol +++ b/contracts/src/core/IAlignedLayerServiceManager.sol @@ -1,21 +1,46 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import {IBLSSignatureChecker} from "eigenlayer-middleware/interfaces/IBLSSignatureChecker.sol"; interface IAlignedLayerServiceManager { + // EVENTS + event NewBatchV2( + bytes32 indexed batchMerkleRoot, + address senderAddress, + uint32 taskCreatedBlock, + string batchDataPointer + ); + event NewBatchV3( + bytes32 indexed batchMerkleRoot, + address senderAddress, + uint32 taskCreatedBlock, + string batchDataPointer, + uint256 respondToTaskFeeLimit + ); + event BatchVerified(bytes32 indexed batchMerkleRoot, address senderAddress); + event BatcherBalanceUpdated(address indexed batcher, uint256 newBalance); + + // ERRORS + error BatchAlreadySubmitted(bytes32 batchIdentifierHash); // 3102f10c + error BatchDoesNotExist(bytes32 batchIdentifierHash); // 2396d34e + error BatchAlreadyResponded(bytes32 batchIdentifierHash); // 9cf1aff2 + error InsufficientFunds( + address batcher, + uint256 required, + uint256 available + ); // 5c54305e + error InvalidQuorumThreshold(uint256 signedStake, uint256 requiredStake); // a61eb88a + error SenderIsNotAggregator(address sender, address alignedAggregator); // 2cbe4195 + error InvalidDepositAmount(uint256 amount); // 412ed242 + error ExceededMaxRespondFee(uint256 respondToTaskFeeLimit, uint256 txCost); // 86fc507e + function createNewTask( bytes32 batchMerkleRoot, - string calldata batchDataPointer + string calldata batchDataPointer, + uint256 respondToTaskFeeLimit ) external payable; - // old respondToTask for smooth upgradeability: - function respondToTask( - bytes32 batchMerkleRoot, - IBLSSignatureChecker.NonSignerStakesAndSignature - memory nonSignerStakesAndSignature - ) external; - function respondToTaskV2( bytes32 batchMerkleRoot, address senderAddress, @@ -35,4 +60,6 @@ interface IAlignedLayerServiceManager { ) external view returns (bool); function balanceOf(address account) external view returns (uint256); + + function setAggregator(address _aggregator) external; } diff --git a/contracts/test/AlignedLayerServiceManager.t.sol b/contracts/test/AlignedLayerServiceManager.t.sol index 32456e864..8798cc6fe 100644 --- a/contracts/test/AlignedLayerServiceManager.t.sol +++ b/contracts/test/AlignedLayerServiceManager.t.sol @@ -16,12 +16,20 @@ contract AlignedLayerServiceManagerTest is BLSMockAVSDeployer { using stdStorage for StdStorage; - event NewBatch( + event NewBatchV2( bytes32 indexed batchMerkleRoot, address senderAddress, uint32 taskCreatedBlock, string batchDataPointer ); + event NewBatchV3( + bytes32 indexed batchMerkleRoot, + address senderAddress, + uint32 taskCreatedBlock, + string batchDataPointer, + uint256 maxFeeToRespond + ); + struct BatchIdentifier { bytes32 batchMerkleRoot; @@ -50,24 +58,26 @@ contract AlignedLayerServiceManagerTest is BLSMockAVSDeployer { function testCreateNewTask( string memory root, - string memory batchDataPointer + string memory batchDataPointer, + uint256 maxFeeToRespond ) public { vm.assume(bytes(batchDataPointer).length > 50); bytes32 batchMerkleRoot = keccak256(abi.encodePacked(root)); address batcher = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); - hoax(batcher, 1 ether); + hoax(batcher, maxFeeToRespond); // transfer to serviceManager - address(alignedLayerServiceManager).call{value: 0.1 ether}(""); + address(alignedLayerServiceManager).call{value: maxFeeToRespond}(""); vm.expectEmit(true, true, true, true); - emit NewBatch(batchMerkleRoot, batcher, uint32(block.number), batchDataPointer); + emit NewBatchV3(batchMerkleRoot, batcher, uint32(block.number), batchDataPointer, maxFeeToRespond); vm.prank(batcher); alignedLayerServiceManager.createNewTask( batchMerkleRoot, - batchDataPointer + batchDataPointer, + maxFeeToRespond ); bytes32 batchIdentifierHash = keccak256( @@ -76,10 +86,12 @@ contract AlignedLayerServiceManagerTest is BLSMockAVSDeployer { ( uint32 taskCreatedBlock, - bool responded + bool responded, + uint256 _maxFeeToRespond ) = alignedLayerServiceManager.batchesState(batchIdentifierHash); assertEq(taskCreatedBlock, uint32(block.number)); assertEq(responded, false); + assertEq(_maxFeeToRespond, maxFeeToRespond); } } diff --git a/core/chainio/avs_subscriber.go b/core/chainio/avs_subscriber.go index 31eed927e..0c8438a2c 100644 --- a/core/chainio/avs_subscriber.go +++ b/core/chainio/avs_subscriber.go @@ -65,18 +65,18 @@ func NewAvsSubscriberFromConfig(baseConfig *config.BaseConfig) (*AvsSubscriber, }, nil } -func (s *AvsSubscriber) SubscribeToNewTasks(newTaskCreatedChan chan *servicemanager.ContractAlignedLayerServiceManagerNewBatch) (chan error, error) { +func (s *AvsSubscriber) SubscribeToNewTasksV2(newTaskCreatedChan chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2) (chan error, error) { // Create a new channel to receive new tasks - internalChannel := make(chan *servicemanager.ContractAlignedLayerServiceManagerNewBatch) + internalChannel := make(chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2) // Subscribe to new tasks - sub, err := subscribeToNewTasks(s.AvsContractBindings.ServiceManager, internalChannel, s.logger) + sub, err := subscribeToNewTasksV2(s.AvsContractBindings.ServiceManager, internalChannel, s.logger) if err != nil { s.logger.Error("Failed to subscribe to new AlignedLayer tasks", "err", err) return nil, err } - subFallback, err := subscribeToNewTasks(s.AvsContractBindings.ServiceManagerFallback, internalChannel, s.logger) + subFallback, err := subscribeToNewTasksV2(s.AvsContractBindings.ServiceManagerFallback, internalChannel, s.logger) if err != nil { s.logger.Error("Failed to subscribe to new AlignedLayer tasks", "err", err) return nil, err @@ -95,14 +95,14 @@ func (s *AvsSubscriber) SubscribeToNewTasks(newTaskCreatedChan chan *servicemana for { select { case newBatch := <-internalChannel: - s.processNewBatch(newBatch, batchesSet, newBatchMutex, newTaskCreatedChan) + s.processNewBatchV2(newBatch, batchesSet, newBatchMutex, newTaskCreatedChan) case <-pollLatestBatchTicker.C: - latestBatch, err := s.getLatestTaskFromEthereum() + latestBatch, err := s.getLatestTaskFromEthereumV2() if err != nil { s.logger.Debug("Failed to get latest task from blockchain", "err", err) continue } - s.processNewBatch(latestBatch, batchesSet, newBatchMutex, newTaskCreatedChan) + s.processNewBatchV2(latestBatch, batchesSet, newBatchMutex, newTaskCreatedChan) } } @@ -115,14 +115,14 @@ func (s *AvsSubscriber) SubscribeToNewTasks(newTaskCreatedChan chan *servicemana case err := <-sub.Err(): s.logger.Warn("Error in new task subscription", "err", err) sub.Unsubscribe() - sub, err = subscribeToNewTasks(s.AvsContractBindings.ServiceManager, internalChannel, s.logger) + sub, err = subscribeToNewTasksV2(s.AvsContractBindings.ServiceManager, internalChannel, s.logger) if err != nil { errorChannel <- err } case err := <-subFallback.Err(): s.logger.Warn("Error in fallback new task subscription", "err", err) subFallback.Unsubscribe() - subFallback, err = subscribeToNewTasks(s.AvsContractBindings.ServiceManagerFallback, internalChannel, s.logger) + subFallback, err = subscribeToNewTasksV2(s.AvsContractBindings.ServiceManagerFallback, internalChannel, s.logger) if err != nil { errorChannel <- err } @@ -132,18 +132,19 @@ func (s *AvsSubscriber) SubscribeToNewTasks(newTaskCreatedChan chan *servicemana return errorChannel, nil } -func (s *AvsSubscriber) SubscribeToNewTasksV2(newTaskCreatedChan chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2) (chan error, error) { + +func (s *AvsSubscriber) SubscribeToNewTasksV3(newTaskCreatedChan chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV3) (chan error, error) { // Create a new channel to receive new tasks - internalChannel := make(chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2) + internalChannel := make(chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV3) // Subscribe to new tasks - sub, err := subscribeToNewTasksV2(s.AvsContractBindings.ServiceManager, internalChannel, s.logger) + sub, err := subscribeToNewTasksV3(s.AvsContractBindings.ServiceManager, internalChannel, s.logger) if err != nil { s.logger.Error("Failed to subscribe to new AlignedLayer tasks", "err", err) return nil, err } - subFallback, err := subscribeToNewTasksV2(s.AvsContractBindings.ServiceManagerFallback, internalChannel, s.logger) + subFallback, err := subscribeToNewTasksV3(s.AvsContractBindings.ServiceManagerFallback, internalChannel, s.logger) if err != nil { s.logger.Error("Failed to subscribe to new AlignedLayer tasks", "err", err) return nil, err @@ -162,14 +163,14 @@ func (s *AvsSubscriber) SubscribeToNewTasksV2(newTaskCreatedChan chan *servicema for { select { case newBatch := <-internalChannel: - s.processNewBatchV2(newBatch, batchesSet, newBatchMutex, newTaskCreatedChan) + s.processNewBatchV3(newBatch, batchesSet, newBatchMutex, newTaskCreatedChan) case <-pollLatestBatchTicker.C: - latestBatch, err := s.getLatestTaskFromEthereumV2() + latestBatch, err := s.getLatestTaskFromEthereumV3() if err != nil { s.logger.Debug("Failed to get latest task from blockchain", "err", err) continue } - s.processNewBatchV2(latestBatch, batchesSet, newBatchMutex, newTaskCreatedChan) + s.processNewBatchV3(latestBatch, batchesSet, newBatchMutex, newTaskCreatedChan) } } @@ -182,14 +183,14 @@ func (s *AvsSubscriber) SubscribeToNewTasksV2(newTaskCreatedChan chan *servicema case err := <-sub.Err(): s.logger.Warn("Error in new task subscription", "err", err) sub.Unsubscribe() - sub, err = subscribeToNewTasksV2(s.AvsContractBindings.ServiceManager, internalChannel, s.logger) + sub, err = subscribeToNewTasksV3(s.AvsContractBindings.ServiceManager, internalChannel, s.logger) if err != nil { errorChannel <- err } case err := <-subFallback.Err(): s.logger.Warn("Error in fallback new task subscription", "err", err) subFallback.Unsubscribe() - subFallback, err = subscribeToNewTasksV2(s.AvsContractBindings.ServiceManagerFallback, internalChannel, s.logger) + subFallback, err = subscribeToNewTasksV3(s.AvsContractBindings.ServiceManagerFallback, internalChannel, s.logger) if err != nil { errorChannel <- err } @@ -200,13 +201,13 @@ func (s *AvsSubscriber) SubscribeToNewTasksV2(newTaskCreatedChan chan *servicema return errorChannel, nil } -func subscribeToNewTasks( +func subscribeToNewTasksV2( serviceManager *servicemanager.ContractAlignedLayerServiceManager, - newTaskCreatedChan chan *servicemanager.ContractAlignedLayerServiceManagerNewBatch, + newTaskCreatedChan chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2, logger sdklogging.Logger, ) (event.Subscription, error) { for i := 0; i < MaxRetries; i++ { - sub, err := serviceManager.WatchNewBatch( + sub, err := serviceManager.WatchNewBatchV2( &bind.WatchOpts{}, newTaskCreatedChan, nil, ) if err != nil { @@ -221,13 +222,14 @@ func subscribeToNewTasks( return nil, fmt.Errorf("failed to subscribe to new AlignedLayer tasks after %d retries", MaxRetries) } -func subscribeToNewTasksV2( + +func subscribeToNewTasksV3( serviceManager *servicemanager.ContractAlignedLayerServiceManager, - newTaskCreatedChan chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2, + newTaskCreatedChan chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV3, logger sdklogging.Logger, ) (event.Subscription, error) { for i := 0; i < MaxRetries; i++ { - sub, err := serviceManager.WatchNewBatchV2( + sub, err := serviceManager.WatchNewBatchV3( &bind.WatchOpts{}, newTaskCreatedChan, nil, ) if err != nil { @@ -243,27 +245,33 @@ func subscribeToNewTasksV2( return nil, fmt.Errorf("failed to subscribe to new AlignedLayer tasks after %d retries", MaxRetries) } -func (s *AvsSubscriber) processNewBatch(batch *servicemanager.ContractAlignedLayerServiceManagerNewBatch, batchesSet map[[32]byte]struct{}, newBatchMutex *sync.Mutex, newTaskCreatedChan chan<- *servicemanager.ContractAlignedLayerServiceManagerNewBatch) { +func (s *AvsSubscriber) processNewBatchV2(batch *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2, batchesSet map[[32]byte]struct{}, newBatchMutex *sync.Mutex, newTaskCreatedChan chan<- *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2) { newBatchMutex.Lock() defer newBatchMutex.Unlock() - if _, ok := batchesSet[batch.BatchMerkleRoot]; !ok { - s.logger.Info("Received new task", "batchMerkleRoot", hex.EncodeToString(batch.BatchMerkleRoot[:])) - batchesSet[batch.BatchMerkleRoot] = struct{}{} + batchIdentifier := append(batch.BatchMerkleRoot[:], batch.SenderAddress[:]...) + var batchIdentifierHash = *(*[32]byte)(crypto.Keccak256(batchIdentifier)) + + if _, ok := batchesSet[batchIdentifierHash]; !ok { + s.logger.Info("Received new task", + "batchMerkleRoot", hex.EncodeToString(batch.BatchMerkleRoot[:]), + "senderAddress", hex.EncodeToString(batch.SenderAddress[:]), + "batchIdentifierHash", hex.EncodeToString(batchIdentifierHash[:]),) + batchesSet[batchIdentifierHash] = struct{}{} newTaskCreatedChan <- batch // Remove the batch from the set after RemoveBatchFromSetInterval time go func() { time.Sleep(RemoveBatchFromSetInterval) newBatchMutex.Lock() - delete(batchesSet, batch.BatchMerkleRoot) + delete(batchesSet, batchIdentifierHash) newBatchMutex.Unlock() }() } } -func (s *AvsSubscriber) processNewBatchV2(batch *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2, batchesSet map[[32]byte]struct{}, newBatchMutex *sync.Mutex, newTaskCreatedChan chan<- *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2) { +func (s *AvsSubscriber) processNewBatchV3(batch *servicemanager.ContractAlignedLayerServiceManagerNewBatchV3, batchesSet map[[32]byte]struct{}, newBatchMutex *sync.Mutex, newTaskCreatedChan chan<- *servicemanager.ContractAlignedLayerServiceManagerNewBatchV3) { newBatchMutex.Lock() defer newBatchMutex.Unlock() @@ -292,7 +300,7 @@ func (s *AvsSubscriber) processNewBatchV2(batch *servicemanager.ContractAlignedL // getLatestTaskFromEthereum queries the blockchain for the latest task using the FilterLogs method. // The alternative to this is using the FilterNewBatch method from the contract's filterer, but it requires // to iterate over all the logs, which is not efficient and not needed since we only need the latest task. -func (s *AvsSubscriber) getLatestTaskFromEthereum() (*servicemanager.ContractAlignedLayerServiceManagerNewBatch, error) { +func (s *AvsSubscriber) getLatestTaskFromEthereumV2() (*servicemanager.ContractAlignedLayerServiceManagerNewBatchV2, error) { latestBlock, err := s.AvsContractBindings.ethClient.BlockNumber(context.Background()) if err != nil { latestBlock, err = s.AvsContractBindings.ethClientFallback.BlockNumber(context.Background()) @@ -315,7 +323,7 @@ func (s *AvsSubscriber) getLatestTaskFromEthereum() (*servicemanager.ContractAli } // We just care about the NewBatch event - newBatchEvent := alignedLayerServiceManagerABI.Events["NewBatch"] + newBatchEvent := alignedLayerServiceManagerABI.Events["NewBatchV2"] if newBatchEvent.ID == (ethcommon.Hash{}) { return nil, fmt.Errorf("NewBatch event not found in ABI") } @@ -341,8 +349,8 @@ func (s *AvsSubscriber) getLatestTaskFromEthereum() (*servicemanager.ContractAli lastLog := logs[len(logs)-1] - var latestTask servicemanager.ContractAlignedLayerServiceManagerNewBatch - err = alignedLayerServiceManagerABI.UnpackIntoInterface(&latestTask, "NewBatch", lastLog.Data) + var latestTask servicemanager.ContractAlignedLayerServiceManagerNewBatchV2 + err = alignedLayerServiceManagerABI.UnpackIntoInterface(&latestTask, "NewBatchV2", lastLog.Data) if err != nil { return nil, fmt.Errorf("failed to unpack log data: %w", err) } @@ -352,7 +360,11 @@ func (s *AvsSubscriber) getLatestTaskFromEthereum() (*servicemanager.ContractAli return &latestTask, nil } -func (s *AvsSubscriber) getLatestTaskFromEthereumV2() (*servicemanager.ContractAlignedLayerServiceManagerNewBatchV2, error) { + +// getLatestTaskFromEthereum queries the blockchain for the latest task using the FilterLogs method. +// The alternative to this is using the FilterNewBatch method from the contract's filterer, but it requires +// to iterate over all the logs, which is not efficient and not needed since we only need the latest task. +func (s *AvsSubscriber) getLatestTaskFromEthereumV3() (*servicemanager.ContractAlignedLayerServiceManagerNewBatchV3, error) { latestBlock, err := s.AvsContractBindings.ethClient.BlockNumber(context.Background()) if err != nil { latestBlock, err = s.AvsContractBindings.ethClientFallback.BlockNumber(context.Background()) @@ -375,7 +387,7 @@ func (s *AvsSubscriber) getLatestTaskFromEthereumV2() (*servicemanager.ContractA } // We just care about the NewBatch event - newBatchEvent := alignedLayerServiceManagerABI.Events["NewBatch"] + newBatchEvent := alignedLayerServiceManagerABI.Events["NewBatchV3"] if newBatchEvent.ID == (ethcommon.Hash{}) { return nil, fmt.Errorf("NewBatch event not found in ABI") } @@ -401,8 +413,8 @@ func (s *AvsSubscriber) getLatestTaskFromEthereumV2() (*servicemanager.ContractA lastLog := logs[len(logs)-1] - var latestTask servicemanager.ContractAlignedLayerServiceManagerNewBatchV2 - err = alignedLayerServiceManagerABI.UnpackIntoInterface(&latestTask, "NewBatchV2", lastLog.Data) + var latestTask servicemanager.ContractAlignedLayerServiceManagerNewBatchV3 + err = alignedLayerServiceManagerABI.UnpackIntoInterface(&latestTask, "NewBatchV3", lastLog.Data) if err != nil { return nil, fmt.Errorf("failed to unpack log data: %w", err) } diff --git a/core/chainio/avs_writer.go b/core/chainio/avs_writer.go index d59b35164..f6c817358 100644 --- a/core/chainio/avs_writer.go +++ b/core/chainio/avs_writer.go @@ -2,16 +2,20 @@ package chainio import ( "context" + "fmt" + "math/big" + "time" "github.com/Layr-Labs/eigensdk-go/chainio/clients" "github.com/Layr-Labs/eigensdk-go/chainio/clients/avsregistry" "github.com/Layr-Labs/eigensdk-go/chainio/clients/eth" "github.com/Layr-Labs/eigensdk-go/logging" "github.com/Layr-Labs/eigensdk-go/signer" + "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" servicemanager "github.com/yetanotherco/aligned_layer/contracts/bindings/AlignedLayerServiceManager" "github.com/yetanotherco/aligned_layer/core/config" - "github.com/yetanotherco/aligned_layer/core/utils" ) type AvsWriter struct { @@ -20,6 +24,7 @@ type AvsWriter struct { logger logging.Logger Signer signer.Signer Client eth.Client + ClientFallback eth.Client } func NewAvsWriterFromConfig(baseConfig *config.BaseConfig, ecdsaConfig *config.EcdsaConfig) (*AvsWriter, error) { @@ -61,50 +66,34 @@ func NewAvsWriterFromConfig(baseConfig *config.BaseConfig, ecdsaConfig *config.E logger: baseConfig.Logger, Signer: privateKeySigner, Client: baseConfig.EthRpcClient, + ClientFallback: baseConfig.EthRpcClientFallback, }, nil } -func (w *AvsWriter) SendTask(context context.Context, batchMerkleRoot [32]byte, batchDataPointer string) error { - - txOpts := w.Signer.GetTxOpts() - - tx, err := w.AvsContractBindings.ServiceManager.CreateNewTask( - txOpts, - batchMerkleRoot, - batchDataPointer, - ) - if err != nil { - w.logger.Error("Error assembling CreateNewTask tx", "err", err) - return err - } - - _, err = utils.WaitForTransactionReceipt(w.Client, context, tx.Hash()) - if err != nil { - return err - } - - return nil -} - -func (w *AvsWriter) SendAggregatedResponse(batchMerkleRoot [32]byte, nonSignerStakesAndSignature servicemanager.IBLSSignatureCheckerNonSignerStakesAndSignature) (*common.Hash, error) { +func (w *AvsWriter) SendAggregatedResponse(batchIdentifierHash [32]byte, batchMerkleRoot [32]byte, senderAddress [20]byte, nonSignerStakesAndSignature servicemanager.IBLSSignatureCheckerNonSignerStakesAndSignature) (*common.Hash, error) { txOpts := *w.Signer.GetTxOpts() txOpts.NoSend = true // simulate the transaction - tx, err := w.AvsContractBindings.ServiceManager.RespondToTask(&txOpts, batchMerkleRoot, nonSignerStakesAndSignature) + tx, err := w.AvsContractBindings.ServiceManager.RespondToTaskV2(&txOpts, batchMerkleRoot, senderAddress, nonSignerStakesAndSignature) if err != nil { // Retry with fallback - tx, err = w.AvsContractBindings.ServiceManagerFallback.RespondToTask(&txOpts, batchMerkleRoot, nonSignerStakesAndSignature) + tx, err = w.AvsContractBindings.ServiceManagerFallback.RespondToTaskV2(&txOpts, batchMerkleRoot, senderAddress, nonSignerStakesAndSignature) if err != nil { - return nil, err + return nil, fmt.Errorf("transaction simulation failed: %v", err) } } + err = w.checkRespondToTaskFeeLimit(tx, txOpts, batchIdentifierHash, senderAddress) + if err != nil { + return nil, err + } + // Send the transaction txOpts.NoSend = false txOpts.GasLimit = tx.Gas() * 110 / 100 // Add 10% to the gas limit - tx, err = w.AvsContractBindings.ServiceManager.RespondToTask(&txOpts, batchMerkleRoot, nonSignerStakesAndSignature) + tx, err = w.AvsContractBindings.ServiceManager.RespondToTaskV2(&txOpts, batchMerkleRoot, senderAddress, nonSignerStakesAndSignature) if err != nil { // Retry with fallback - tx, err = w.AvsContractBindings.ServiceManagerFallback.RespondToTask(&txOpts, batchMerkleRoot, nonSignerStakesAndSignature) + tx, err = w.AvsContractBindings.ServiceManagerFallback.RespondToTaskV2(&txOpts, batchMerkleRoot, senderAddress, nonSignerStakesAndSignature) if err != nil { return nil, err } @@ -115,31 +104,81 @@ func (w *AvsWriter) SendAggregatedResponse(batchMerkleRoot [32]byte, nonSignerSt return &txHash, nil } -func (w *AvsWriter) SendAggregatedResponseV2(batchMerkleRoot [32]byte, senderAddress [20]byte, nonSignerStakesAndSignature servicemanager.IBLSSignatureCheckerNonSignerStakesAndSignature) (*common.Hash, error) { - txOpts := *w.Signer.GetTxOpts() - txOpts.NoSend = true // simulate the transaction - tx, err := w.AvsContractBindings.ServiceManager.RespondToTaskV2(&txOpts, batchMerkleRoot, senderAddress, nonSignerStakesAndSignature) +func (w *AvsWriter) checkRespondToTaskFeeLimit(tx *types.Transaction, txOpts bind.TransactOpts, batchIdentifierHash [32]byte, senderAddress [20]byte) error { + aggregatorAddress := txOpts.From + simulatedCost := new(big.Int).Mul(new(big.Int).SetUint64(tx.Gas()), tx.GasPrice()) + w.logger.Info("Simulated cost", "cost", simulatedCost) + + // Get RespondToTaskFeeLimit + batchState, err := w.AvsContractBindings.ServiceManager.BatchesState(&bind.CallOpts{}, batchIdentifierHash) if err != nil { // Retry with fallback - tx, err = w.AvsContractBindings.ServiceManagerFallback.RespondToTaskV2(&txOpts, batchMerkleRoot, senderAddress, nonSignerStakesAndSignature) + batchState, err = w.AvsContractBindings.ServiceManagerFallback.BatchesState(&bind.CallOpts{}, batchIdentifierHash) if err != nil { - return nil, err + // Fallback also failed + // Proceed to check values against simulated costs + w.logger.Error("Failed to get batch state", "error", err) + w.logger.Info("Proceeding with simulated cost checks") + + return w.compareBalances(simulatedCost, aggregatorAddress, senderAddress) } } + // At this point, batchState was successfully retrieved + // Proceed to check values against RespondToTaskFeeLimit + respondToTaskFeeLimit := batchState.RespondToTaskFeeLimit + w.logger.Info("Batch RespondToTaskFeeLimit", "RespondToTaskFeeLimit", respondToTaskFeeLimit) - // Send the transaction - txOpts.NoSend = false - txOpts.GasLimit = tx.Gas() * 110 / 100 // Add 10% to the gas limit - tx, err = w.AvsContractBindings.ServiceManager.RespondToTaskV2(&txOpts, batchMerkleRoot, senderAddress, nonSignerStakesAndSignature) + if respondToTaskFeeLimit.Cmp(simulatedCost) < 0 { + return fmt.Errorf("cost of transaction is higher than Batch.RespondToTaskFeeLimit") + } + + return w.compareBalances(respondToTaskFeeLimit, aggregatorAddress, senderAddress) +} + +func (w *AvsWriter) compareBalances(amount *big.Int, aggregatorAddress common.Address, senderAddress [20]byte) error { + if err := w.compareAggregatorBalance(amount, aggregatorAddress); err != nil { + return err + } + if err := w.compareBatcherBalance(amount, senderAddress); err != nil { + return err + } + return nil +} + +func (w *AvsWriter) compareAggregatorBalance(amount *big.Int, aggregatorAddress common.Address) error { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + // Get Agg wallet balance + aggregatorBalance, err := w.Client.BalanceAt(ctx, aggregatorAddress, nil) if err != nil { - // Retry with fallback - tx, err = w.AvsContractBindings.ServiceManagerFallback.RespondToTaskV2(&txOpts, batchMerkleRoot, senderAddress, nonSignerStakesAndSignature) + aggregatorBalance, err = w.ClientFallback.BalanceAt(ctx, aggregatorAddress, nil) if err != nil { - return nil, err + // Ignore and continue. + w.logger.Error("failed to get aggregator balance: %v", err) + return nil } } + w.logger.Info("Aggregator balance", "balance", aggregatorBalance) + if aggregatorBalance.Cmp(amount) < 0 { + return fmt.Errorf("cost is higher than Aggregator balance") + } + return nil +} - txHash := tx.Hash() - - return &txHash, nil +func (w *AvsWriter) compareBatcherBalance(amount *big.Int, senderAddress [20]byte) error { + // Get batcher balance + batcherBalance, err := w.AvsContractBindings.ServiceManager.BatchersBalances(&bind.CallOpts{}, senderAddress) + if err != nil { + batcherBalance, err = w.AvsContractBindings.ServiceManagerFallback.BatchersBalances(&bind.CallOpts{}, senderAddress) + if err != nil { + // Ignore and continue. + w.logger.Error("Failed to get batcherBalance", "error", err) + return nil + } + } + w.logger.Info("Batcher balance", "balance", batcherBalance) + if batcherBalance.Cmp(amount) < 0 { + return fmt.Errorf("cost is higher than Batcher balance") + } + return nil } diff --git a/core/types/signed_task_response.go b/core/types/signed_task_response.go index 1e5f9870d..f3cbb4827 100644 --- a/core/types/signed_task_response.go +++ b/core/types/signed_task_response.go @@ -6,12 +6,6 @@ import ( ) type SignedTaskResponse struct { - BatchMerkleRoot [32]byte - BlsSignature bls.Signature - OperatorId eigentypes.OperatorId -} - -type SignedTaskResponseV2 struct { BatchMerkleRoot [32]byte SenderAddress [20]byte BatchIdentifierHash [32]byte diff --git a/docs/1_introduction/1_getting_started.md b/docs/1_introduction/1_getting_started.md index 89e30ed87..864153ab0 100644 --- a/docs/1_introduction/1_getting_started.md +++ b/docs/1_introduction/1_getting_started.md @@ -30,6 +30,7 @@ aligned submit \ --vm_program ~/.aligned/test_files/sp1_fibonacci.elf \ --aligned_verification_data_path ~/.aligned/aligned_verification_data \ --batcher_url wss://batcher.alignedlayer.com \ +--chain holesky \ --rpc_url https://ethereum-holesky-rpc.publicnode.com \ --payment_service_addr 0x815aeCA64a974297942D2Bbf034ABEe22a38A003 ``` @@ -52,6 +53,7 @@ Use the link in the response to check the status of your transaction in the Alig aligned verify-proof-onchain \ --aligned-verification-data ~/.aligned/aligned_verification_data/*.json \ --rpc_url https://ethereum-holesky-rpc.publicnode.com \ +--chain holesky \ --payment_service_addr 0x815aeCA64a974297942D2Bbf034ABEe22a38A003 ``` diff --git a/docs/2_architecture/components/6_explorer.md b/docs/2_architecture/components/6_explorer.md index 8e9b272bc..41670815b 100644 --- a/docs/2_architecture/components/6_explorer.md +++ b/docs/2_architecture/components/6_explorer.md @@ -6,27 +6,69 @@ The Explorer keeps track of [Aligned Service Manager](./3_service_manager_contra It has an internal state of previous batches, actively listens for new batches and their responses. The Explorer then displays this information for Users to visualize the submitted batches, their states and more useful information in real time. -In the landing page we can see information such as how many [Operators](./4_operator.md) are currently registered and running, how many Batches and how many total Proofs have been verified. +In the landing page, +we can see information such as how many [Operators](./4_operator.md) are currently registered and active, +total ETH restaked by said Operators, how many Batches and how many total Proofs have been verified. -![](../../images/explorer-landing-page.png) +The main Aligned contracts such as the Aligned Service Manager or the Batcher Payment Service are easily accessible +from the Explorer with links to etherscan. -From here, we can search for a specific batch by its Merkle Root, we can directly jump to any one of the last 5 submitted batches, and we can easily go to the `Latest Batches` page, where we can navigate through the various pages of batches of proofs submitted to aligned, ordered by latest submission, and easily check their on-chain status, timestamp, and block number. +![Figure 1: Explorer Landing Page](../../images/explorer-landing-page.png) -![](../../images/explorer-latest-batches.png) +From here, we can search for a specific batch by its Merkle Root or even find a batch, or if you want to find which batch contains a specific proof, you can also search by proof hash. +We can also directly jump to any one of the last 5 submitted batches, and we can easily go to the `Batches` page, +where we can navigate through the various pages of batches of proofs submitted to aligned, ordered by latest submission, +and easily check their on-chain status, timestamp, and block number. -From there we can also click any individual batch Merkle Root to view its details. +![Figure 2: Explorer Batches Page](../../images/explorer-latest-batches.png) -From here we can visualize: +We can also click any individual batch hash to view its details. -- the whole `Merkle Root` -- `Amount of Proofs` in the batch +From the details view, we can visualize: + +- The `Batch Hash` Merkle Root and a copy to clipboard button +- The batch's `Status`, either `Pending` or `Verified` +- `Batcher Sender Address` which is the address of the batcher that submitted the batch +- `Number of Proofs in this Batch`, the number of proofs included in the batch +- `Fee per Proof`, fee paid per proof in the batch in ETH and USD +- `Proofs in the Batch`, which when pressed will show a list of all the proof hashes included in the batch - Ethereum's `Submission Block Number`, linked to etherscan - `Submission Transaction Hash`, linked to etherscan - `Submission Timestamp` of the batch -- `Status`, either `Pending` or `Verified` - Ethereum's `Response Block Number`, linked to etherscan - `Response Transaction Hash`, linked to etherscan - `Response Timestamp` of the batch +- Lastly, if the batch is `Verified`, we can see a small X Post button that lets us easily share on X that the batch has been verified. + +![Figure 3: Explorer Batch Details Page](../../images/explorer-batch-details.png) + +The `Operators` page shows a list of all registered operators, +their restake concentration in %, the total amount of ETH they have restaked and their status. + +These are ordered by the amount of ETH restaked, with the top operator being the one with the most ETH restaked. + +When hovering over an operator, we can see the operator's address and id. + +![Figure 4: Explorer Operators Page](../../images/explorer-operators.png) + +The `Operator Details` page shows the operator's id, address, total ETH restaked, +restake concentration in %, and the assets restaked order by the amount of ETH restaked. + +The Operators image is also displayed, and we access other information the operator chose to share, such as their +website, X, and EigenLayer dashboard profile for more details. + +![Figure 5: Explorer Operator Detail Page](../../images/explorer-operator-detail.png) + +The `Restake` page can be accessed by clicking the `Total Restaked` call-to-action button on either the landing page or +the operators' page. + +Here we can see the various assets that can be restaked, and the amount of ETH restaked in each asset. + +The table is ordered by the amount of ETH restaked, with the top asset being the one with the most ETH restaked. + +![Figure 6: Explorer Restake Page](../../images/explorer-restake.png) -![](../../images/explorer-batch-details.png) +The `Restake Details` page shows the asset's name, +symbol, total ETH restaked, Strategy Address and Token Address both linked to etherscan. +![Figure 7: Explorer Restake Detail Page](../../images/explorer-restake-detail.png) diff --git a/docs/3_guides/0_submitting_proofs.md b/docs/3_guides/0_submitting_proofs.md index b9b2ecf8d..01967c534 100644 --- a/docs/3_guides/0_submitting_proofs.md +++ b/docs/3_guides/0_submitting_proofs.md @@ -108,6 +108,7 @@ Proof submission is done via the `submit` command of the Aligned CLI. The argume * `vm_program`: When the proving system involves the execution of a program in a zkVM, this argument is associated with the compiled program or some other identifier of the program. * `pub_input`: The path to the file with the public input associated with the proof. * `batcher_url`: The batcher websocket URL. +* `chain` to specify the chain id to be used. Could be holesky or devnet. * `rpc_url`: The RPC Ethereum node URL. * `payment_service_addr`: The Ethereum address of the Batcher Payments System contract. * `proof_generator_addr`: An optional parameter that can be used in some applications to avoid front-running. @@ -129,6 +130,7 @@ aligned submit \ --proof_generator_addr [proof_generator_addr] \ --batch_inclusion_data_directory_path [batch_inclusion_data_directory_path] \ --keystore_path \ +--chain holesky \ --rpc_url https://ethereum-holesky-rpc.publicnode.com \ --payment_service_addr 0x815aeCA64a974297942D2Bbf034ABEe22a38A003 ``` @@ -143,6 +145,7 @@ aligned submit \ --vm_program ./scripts/test_files/sp1/sp1_fibonacci.elf \ --batcher_url wss://batcher.alignedlayer.com \ --keystore_path ~/.aligned_keystore/keystore0 \ +--chain holesky \ --rpc_url https://ethereum-holesky-rpc.publicnode.com \ --payment_service_addr 0x815aeCA64a974297942D2Bbf034ABEe22a38A003 ``` @@ -164,6 +167,7 @@ aligned submit \ --proof_generator_addr [proof_generator_addr] \ --batch_inclusion_data_directory_path [batch_inclusion_data_directory_path] \ --keystore_path \ +--chain holesky \ --rpc_url https://ethereum-holesky-rpc.publicnode.com \ --payment_service_addr 0x815aeCA64a974297942D2Bbf034ABEe22a38A003 ``` @@ -180,6 +184,7 @@ aligned submit \ --batcher_url wss://batcher.alignedlayer.com \ --aligned_verification_data_path ~/.aligned/aligned_verification_data \ --keystore_path ~/.aligned_keystore/keystore0 \ +--chain holesky \ --rpc_url https://ethereum-holesky-rpc.publicnode.com \ --payment_service_addr 0x815aeCA64a974297942D2Bbf034ABEe22a38A003 ``` @@ -199,6 +204,7 @@ aligned submit \ --proof_generator_addr [proof_generator_addr] \ --batch_inclusion_data_directory_path [batch_inclusion_data_directory_path] \ --keystore_path \ +--chain holesky \ --rpc_url https://ethereum-holesky-rpc.publicnode.com \ --payment_service_addr 0x815aeCA64a974297942D2Bbf034ABEe22a38A003 ``` @@ -214,6 +220,7 @@ aligned submit \ --vk ./scripts/test_files/gnark_plonk_bn254_script/plonk.vk \ --batcher_url wss://batcher.alignedlayer.com \ --keystore_path ~/.aligned_keystore/keystore0 \ +--chain holesky \ --rpc_url https://ethereum-holesky-rpc.publicnode.com \ --payment_service_addr 0x815aeCA64a974297942D2Bbf034ABEe22a38A003 ``` @@ -227,6 +234,7 @@ aligned submit \ --vk ./scripts/test_files/gnark_plonk_bls12_381_script/plonk.vk \ --batcher_url wss://batcher.alignedlayer.com \ --keystore_path ~/.aligned_keystore/keystore0 \ +--chain holesky \ --rpc_url https://ethereum-holesky-rpc.publicnode.com \ --payment_service_addr 0x815aeCA64a974297942D2Bbf034ABEe22a38A003 ``` @@ -240,6 +248,7 @@ aligned submit \ --vk ./scripts/test_files/gnark_groth16_bn254_infinite_script/infinite_proofs/ineq_1_groth16.vk \ --batcher_url wss://batcher.alignedlayer.com \ --keystore_path ~/.aligned_keystore/keystore0 \ +--chain holesky \ --rpc_url https://ethereum-holesky-rpc.publicnode.com \ --payment_service_addr 0x815aeCA64a974297942D2Bbf034ABEe22a38A003 ``` @@ -260,6 +269,7 @@ aligned submit \ --batcher_url wss://batcher.alignedlayer.com \ --keystore_path \ --proof_generator_addr \ + --chain holesky \ --rpc_url https://ethereum-holesky-rpc.publicnode.com \ --payment_service_addr 0x815aeCA64a974297942D2Bbf034ABEe22a38A003 \ ``` @@ -276,6 +286,7 @@ aligned submit \ --batcher_url wss://batcher.alignedlayer.com \ --keystore_path \ --proof_generator_addr \ + --chain holesky \ --rpc_url https://ethereum-holesky-rpc.publicnode.com \ --payment_service_addr 0x815aeCA64a974297942D2Bbf034ABEe22a38A003 ``` @@ -292,6 +303,7 @@ aligned submit \ --batcher_url wss://batcher.alignedlayer.com \ --keystore_path ~/.aligned_keystore/keystore0 \ --proof_generator_addr 0x66f9664f97F2b50F62D13eA064982f936dE76657 \ + --chain holesky \ --rpc_url https://ethereum-holesky-rpc.publicnode.com \ --payment_service_addr 0x815aeCA64a974297942D2Bbf034ABEe22a38A003 ``` @@ -306,6 +318,7 @@ aligned submit \ --batcher_url wss://batcher.alignedlayer.com \ --keystore_path ~/.aligned_keystore/keystore0 \ --proof_generator_addr 0x66f9664f97F2b50F62D13eA064982f936dE76657 \ + --chain holesky \ --rpc_url https://ethereum-holesky-rpc.publicnode.com \ --payment_service_addr 0x815aeCA64a974297942D2Bbf034ABEe22a38A003 ``` diff --git a/docs/3_guides/1.2_SDK_api_reference.md b/docs/3_guides/1.2_SDK_api_reference.md index 31cd77124..8aa0381e2 100644 --- a/docs/3_guides/1.2_SDK_api_reference.md +++ b/docs/3_guides/1.2_SDK_api_reference.md @@ -9,7 +9,9 @@ Submits a proof to the batcher to be verified and returns an aligned verificatio ```rust pub async fn submit( batcher_url: &str, + chain: Chain, verification_data: &VerificationData, + max_fee; U256, wallet: Wallet, nonce: U256, ) -> Result @@ -18,7 +20,9 @@ pub async fn submit( #### Arguments - `batcher_url` - The url of the batcher to which the proof will be submitted. +- `chain` - The chain on which the proof will be submitted. - `verification_data` - The verification data for the proof. +- `max_fee` - The maximum fee that the submitter is willing to pay for the proof verification. - `wallet` - The wallet used to sign the proof. Should be using correct chain id. See `get_chain_id`. - `nonce` - The nonce of the submitter address. See `get_next_nonce`. @@ -36,6 +40,7 @@ pub async fn submit( - `WebSocketClosedUnexpectedlyError` if the connection with the batcher is closed unexpectedly. - `InvalidSignature` if the signature is invalid. - `InvalidNonce` if the nonce is invalid. +- `InvalidMaxFee` if the max fee is invalid. - `InvalidProof` if the proof is invalid. - `ProofTooLarge` if the proof is too large. - `InsufficientBalance` if the sender balance is not enough or unlocked @@ -49,7 +54,9 @@ Submits multiple proofs to the batcher to be verified and returns an aligned ver ```rust pub async fn submit_multiple( batcher_url: &str, + chain: Chain, verification_data: &[VerificationData], + max_fees: &[U256], wallet: Wallet, nonce: U256, ) -> Result, errors::SubmitError> @@ -58,7 +65,9 @@ pub async fn submit_multiple( #### Arguments - `batcher_url` - The url of the batcher to which the proof will be submitted. +- `chain` - The chain on which the proof will be submitted. - `verification_data` - A verification data array. +- `max_fees` - A max fee array. - `wallet` - The wallet used to sign the proof. Should be using correct chain id. See `get_chain_id`. - `nonce` - The nonce of the submitter address. See `get_next_nonce`. @@ -76,6 +85,7 @@ pub async fn submit_multiple( - `WebSocketClosedUnexpectedlyError` if the connection with the batcher is closed unexpectedly. - `InvalidSignature` if the signature is invalid. - `InvalidNonce` if the nonce is invalid. +- `InvalidMaxFee` if the max fee is invalid. - `InvalidProof` if the proof is invalid. - `ProofTooLarge` if the proof is too large. - `InsufficientBalance` if the sender balance is not enough or unlocked @@ -93,6 +103,7 @@ pub async fn submit_and_wait_verification( eth_rpc_url: &str, chain: Chain, verification_data: &VerificationData, + max_fee: U256, wallet: Wallet, nonce: U256, payment_service_addr: &str, @@ -105,6 +116,7 @@ pub async fn submit_and_wait_verification( - `eth_rpc_url` - The URL of the Ethereum RPC node. - `chain` - The chain on which the verification will be done. - `verification_data` - The verification data for the proof. +- `max_fee` - The maximum fee that the submitter is willing to pay for the proof verification. - `wallet` - The wallet used to sign the proof. Should be using correct chain id. See `get_chain_id`. - `nonce` - The nonce of the submitter address. See `get_next_nonce`. - `payment_service_addr` - The address of the batcher payment service contract. @@ -126,6 +138,7 @@ pub async fn submit_and_wait_verification( - `BatchVerificationTimeout` if there is a timeout waiting for the batch verification. - `InvalidSignature` if the signature is invalid. - `InvalidNonce` if the nonce is invalid. +- `InvalidMaxFee` if the max fee is invalid. - `InvalidProof` if the proof is invalid. - `ProofTooLarge` if the proof is too large. - `InsufficientBalance` if the sender balance is not enough or unlocked @@ -155,6 +168,7 @@ pub async fn submit_multiple_and_wait_verification( - `eth_rpc_url` - The URL of the Ethereum RPC node. - `chain` - The chain on which the verification will be done. - `verification_data` - A verification data array. +- `max_fees` - A max fee array. - `wallet` - The wallet used to sign the proof. Should be using correct chain id. See `get_chain_id`. - `nonce` - The nonce of the submitter address. See `get_next_nonce`. - `payment_service_addr` - The address of the batcher payment service contract. @@ -176,6 +190,7 @@ pub async fn submit_multiple_and_wait_verification( - `BatchVerificationTimeout` if there is a timeout waiting for the batch verification. - `InvalidSignature` if the signature is invalid. - `InvalidNonce` if the nonce is invalid. +- `InvalidMaxFee` if the max fee is invalid. - `InvalidProof` if the proof is invalid. - `ProofTooLarge` if the proof is too large. - `InsufficientBalance` if the sender balance is not enough or unlocked diff --git a/docs/3_guides/1_SDK_how_to.md b/docs/3_guides/1_SDK_how_to.md index f630373af..575ac6d3f 100644 --- a/docs/3_guides/1_SDK_how_to.md +++ b/docs/3_guides/1_SDK_how_to.md @@ -12,7 +12,7 @@ To use this SDK in your Rust project, add the following to your `Cargo.toml`: ```toml [dependencies] -aligned-sdk = { git = "https://github.com/yetanotherco/aligned_layer", tag="v0.6.0" } +aligned-sdk = { git = "https://github.com/yetanotherco/aligned_layer", tag="v0.7.0" } ``` To find the latest release tag go to [releases](https://github.com/yetanotherco/aligned_layer/releases) and copy the diff --git a/docs/3_guides/2_integrating_aligned_into_your_application.md b/docs/3_guides/2_integrating_aligned_into_your_application.md index b704f483e..038630601 100644 --- a/docs/3_guides/2_integrating_aligned_into_your_application.md +++ b/docs/3_guides/2_integrating_aligned_into_your_application.md @@ -116,12 +116,14 @@ The proof submission and verification can be done either with the SDK or by usin #### Using the SDK -To submit a proof using the SDK, you can use the `submit` function, and then you can use the `verify_proof_onchain` function to check if the proof was correctly verified in Aligned. +To submit a proof using the SDK, you can use the `submit_and_wait_verification` function. +This function submits the proof to aligned and waits for it to be verified in Aligned. +Alternatively you can call `submit` if you don't want to wait for proof verification. The following code is an example of how to submit a proof using the SDK: ```rust -use aligned_sdk::sdk::{submit, get_next_nonce}; +use aligned_sdk::sdk::{submit_and_wait_verification, get_next_nonce}; use aligned_sdk::types::{ProvingSystemId, VerificationData}; use ethers::prelude::*; @@ -147,8 +149,15 @@ async fn submit_proof_to_aligned( .await .map_err(|e| anyhow::anyhow!("Failed to get next nonce: {:?}", e))?; - submit(BATCHER_URL, &verification_data, wallet, nonce).await - .map_err(|e| anyhow::anyhow!("Failed to submit proof: {:?}", e)) + match submit_and_wait_verification( + BATCHER_URL, + RPC_URL, + Chain::Holesky, + &verification_data, + wallet, + nonce, + BATCHER_CONTRACT_ADDRESS + ).await.map_err(|e| anyhow::anyhow!("Failed to submit proof: {:?}", e)) } #[tokio::main] diff --git a/docs/3_guides/3_validating_public_input.md b/docs/3_guides/3_validating_public_input.md index 9b0900966..c9e7985e7 100644 --- a/docs/3_guides/3_validating_public_input.md +++ b/docs/3_guides/3_validating_public_input.md @@ -42,6 +42,7 @@ pragma solidity ^0.8.12; contract FibonacciValidator { address public alignedServiceManager; + address public paymentServiceAddr; bytes32 public fibonacciProgramId; bytes32 public fibonacciProgramIdCommitment = @@ -49,8 +50,9 @@ contract FibonacciValidator { event FibonacciNumbers(uint32 fibN, uint32 fibNPlusOne); - constructor(address _alignedServiceManager) { + constructor(address _alignedServiceManager, address _paymentServiceAddr) { alignedServiceManager = _alignedServiceManager; + paymentServiceAddr = _paymentServiceAddr; } function verifyBatchInclusion( @@ -78,14 +80,15 @@ contract FibonacciValidator { bytes memory proofIsIncluded ) = alignedServiceManager.staticcall( abi.encodeWithSignature( - "verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256)", + "verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256,address)", proofCommitment, pubInputCommitment, programIdCommitment, proofGeneratorAddr, batchMerkleRoot, merkleProof, - verificationDataBatchIndex + verificationDataBatchIndex, + paymentServiceAddr ) ); @@ -146,14 +149,15 @@ require( bytes memory proofIsIncluded ) = alignedServiceManager.staticcall( abi.encodeWithSignature( - "verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256)", + "verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256,address)", proofCommitment, pubInputCommitment, programIdCommitment, proofGeneratorAddr, batchMerkleRoot, merkleProof, - verificationDataBatchIndex + verificationDataBatchIndex, + paymentServiceAddr ) ); @@ -192,6 +196,7 @@ To deploy the contract, first you will need to set up the `.env` file in the con RPC_URL= #You can use publicnode RPC: https://ethereum-holesky-rpc.publicnode.com PRIVATE_KEY= ALIGNED_SERVICE_MANAGER_ADDRESS= #0x58F280BeBE9B34c9939C3C39e0890C81f163B623 for Holesky +PAYMENT_SERVICE_ADDRESS= #0x815aeCA64a974297942D2Bbf034ABEe22a38A003 for Holesky ``` Then, run `make deploy_fibonacci_validator`. diff --git a/docs/3_guides/4_generating_proofs.md b/docs/3_guides/4_generating_proofs.md index dd4947646..306fa12df 100644 --- a/docs/3_guides/4_generating_proofs.md +++ b/docs/3_guides/4_generating_proofs.md @@ -276,6 +276,7 @@ aligned submit \ --public_input \ --conn wss://batcher.alignedlayer.com \ --proof_generator_addr \ + --chain holesky \ --rpc https://ethereum-holesky-rpc.publicnode.com \ --batcher_addr 0x815aeCA64a974297942D2Bbf034ABEe22a38A003 ``` diff --git a/docs/3_guides/6_setup_aligned.md b/docs/3_guides/6_setup_aligned.md index 3c541a8af..b9c64fd3b 100644 --- a/docs/3_guides/6_setup_aligned.md +++ b/docs/3_guides/6_setup_aligned.md @@ -534,6 +534,9 @@ to run it using the following documentation: - [Erlang 26](https://github.com/asdf-vm/asdf-erlang) - [Elixir 1.16.2](https://elixir-ko.github.io/install.html), compiled with OTP 26 - [Docker](https://docs.docker.com/get-docker/) +- [NodeJS](https://nodejs.org/en/download/package-manager) + - Tested with node 20 and 22 +- [pnpm](https://pnpm.io/installation) ### DB Setup diff --git a/docs/images/explorer-batch-details.png b/docs/images/explorer-batch-details.png index bafdbcc63..9f6aec264 100644 Binary files a/docs/images/explorer-batch-details.png and b/docs/images/explorer-batch-details.png differ diff --git a/docs/images/explorer-landing-page.png b/docs/images/explorer-landing-page.png index 8737cf5ac..b2c359d7c 100644 Binary files a/docs/images/explorer-landing-page.png and b/docs/images/explorer-landing-page.png differ diff --git a/docs/images/explorer-latest-batches.png b/docs/images/explorer-latest-batches.png index 208e81a86..7d9be5712 100644 Binary files a/docs/images/explorer-latest-batches.png and b/docs/images/explorer-latest-batches.png differ diff --git a/docs/images/explorer-operator-detail.png b/docs/images/explorer-operator-detail.png new file mode 100644 index 000000000..1c40c1009 Binary files /dev/null and b/docs/images/explorer-operator-detail.png differ diff --git a/docs/images/explorer-operators.png b/docs/images/explorer-operators.png new file mode 100644 index 000000000..5320619eb Binary files /dev/null and b/docs/images/explorer-operators.png differ diff --git a/docs/images/explorer-restake-detail.png b/docs/images/explorer-restake-detail.png new file mode 100644 index 000000000..ff636daf5 Binary files /dev/null and b/docs/images/explorer-restake-detail.png differ diff --git a/docs/images/explorer-restake.png b/docs/images/explorer-restake.png new file mode 100644 index 000000000..45d8f9da8 Binary files /dev/null and b/docs/images/explorer-restake.png differ diff --git a/docs/operator_guides/0_running_an_operator.md b/docs/operator_guides/0_running_an_operator.md index 2a80f23e6..e0046b686 100644 --- a/docs/operator_guides/0_running_an_operator.md +++ b/docs/operator_guides/0_running_an_operator.md @@ -1,7 +1,7 @@ # Register as an Aligned operator in testnet > **CURRENT VERSION:** -> Aligned Operator [v0.5.2](https://github.com/yetanotherco/aligned_layer/releases/tag/v0.5.2) +> Aligned Operator [v0.7.0](https://github.com/yetanotherco/aligned_layer/releases/tag/v0.7.0) > **IMPORTANT:** > You must be [whitelisted](https://docs.google.com/forms/d/e/1FAIpQLSdH9sgfTz4v33lAvwj6BvYJGAeIshQia3FXz36PFfF-WQAWEQ/viewform) to become an Aligned operator. @@ -26,7 +26,7 @@ Minimum hardware requirements: To start with, clone the Aligned repository and move inside it ```bash -git clone https://github.com/yetanotherco/aligned_layer.git --branch v0.5.2 +git clone https://github.com/yetanotherco/aligned_layer.git --branch v0.7.0 cd aligned_layer ``` diff --git a/examples/validating-public-input/.gitignore b/examples/validating-public-input/.gitignore index 85198aaa5..a58d2c4c0 100644 --- a/examples/validating-public-input/.gitignore +++ b/examples/validating-public-input/.gitignore @@ -12,3 +12,7 @@ docs/ # Dotenv file .env + +risc_zero/fibonacci_proof_generator/risc_zero_fibonacci.proof +risc_zero/fibonacci_proof_generator/risc_zero_fibonacci.pub +risc_zero/fibonacci_proof_generator/risc_zero_fibonacci_id.bin diff --git a/examples/validating-public-input/aligned-integration/Cargo.lock b/examples/validating-public-input/aligned-integration/Cargo.lock index 9a2e89daa..60dcddac2 100644 --- a/examples/validating-public-input/aligned-integration/Cargo.lock +++ b/examples/validating-public-input/aligned-integration/Cargo.lock @@ -14,18 +14,18 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aes" @@ -63,7 +63,7 @@ dependencies = [ [[package]] name = "aligned-sdk" version = "0.1.0" -source = "git+https://github.com/yetanotherco/aligned_layer?rev=6908110aaa04ec3107f15ab8a8bb2603e7bbead9#6908110aaa04ec3107f15ab8a8bb2603e7bbead9" +source = "git+https://github.com/yetanotherco/aligned_layer?tag=v0.6.0#bdda0d2efdb563c5d49a2562bebb27d52182807d" dependencies = [ "ciborium", "ethers", @@ -82,9 +82,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" dependencies = [ "anstyle", "anstyle-parse", @@ -97,33 +97,33 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" +checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" dependencies = [ "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" dependencies = [ "anstyle", "windows-sys 0.52.0", @@ -131,9 +131,9 @@ dependencies = [ [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "ascii-canvas" @@ -146,13 +146,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.81" +version = "0.1.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -174,7 +174,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -185,17 +185,17 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -312,9 +312,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.1" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" dependencies = [ "serde", ] @@ -342,9 +342,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.7" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" dependencies = [ "serde", ] @@ -374,12 +374,13 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.5" +version = "1.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "324c74f2155653c90b04f25b2a47a8a631360cb908f92a772695f430c7e31052" +checksum = "2d74707dde2ba56f86ae90effb3b43ddd369504387e718014de010cec7959800" dependencies = [ "jobserver", "libc", + "shlex", ] [[package]] @@ -488,9 +489,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" [[package]] name = "const-hex" @@ -529,15 +530,15 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] @@ -646,7 +647,7 @@ checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -705,9 +706,9 @@ dependencies = [ [[package]] name = "dunce" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "ecdsa" @@ -786,9 +787,9 @@ dependencies = [ [[package]] name = "env_filter" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" +checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" dependencies = [ "log", "regex", @@ -796,9 +797,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.3" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" +checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" dependencies = [ "anstream", "anstyle", @@ -955,7 +956,7 @@ dependencies = [ "reqwest", "serde", "serde_json", - "syn 2.0.71", + "syn 2.0.77", "toml", "walkdir", ] @@ -972,7 +973,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -997,7 +998,7 @@ dependencies = [ "serde", "serde_json", "strum", - "syn 2.0.71", + "syn 2.0.77", "tempfile", "thiserror", "tiny-keccak", @@ -1143,9 +1144,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "ff" @@ -1177,9 +1178,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.30" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" dependencies = [ "crc32fast", "miniz_oxide", @@ -1297,7 +1298,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -1373,9 +1374,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" [[package]] name = "glob" @@ -1631,9 +1632,9 @@ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "indexmap" -version = "2.2.6" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" dependencies = [ "equivalent", "hashbrown", @@ -1659,15 +1660,15 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4" [[package]] name = "is_terminal_polyfill" -version = "1.70.0" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itertools" @@ -1686,18 +1687,18 @@ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "jobserver" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" dependencies = [ "wasm-bindgen", ] @@ -1799,9 +1800,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.155" +version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" [[package]] name = "libm" @@ -1865,22 +1866,23 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "0.8.11" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ + "hermit-abi", "libc", "wasi", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -1953,30 +1955,30 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] name = "object" -version = "0.36.1" +version = "0.36.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" +checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" dependencies = [ "memchr", ] @@ -2014,9 +2016,9 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.64" +version = "0.10.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" dependencies = [ "bitflags 2.6.0", "cfg-if", @@ -2035,7 +2037,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -2046,9 +2048,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.102" +version = "0.9.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" dependencies = [ "cc", "libc", @@ -2215,7 +2217,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -2253,7 +2255,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -2292,9 +2294,12 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "precomputed-hash" @@ -2304,12 +2309,12 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "prettyplease" -version = "0.2.20" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +checksum = "479cf940fbbb3426c32c5d5176f62ad57549a0bb84773423ba8be9d089f5faba" dependencies = [ "proc-macro2", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -2328,11 +2333,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" dependencies = [ - "toml_edit 0.21.1", + "toml_edit", ] [[package]] @@ -2362,9 +2367,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -2436,18 +2441,18 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "0884ad60e090bf1345b93da0a5de8923c93884cd03f40dfcfddd3b4bee661853" dependencies = [ "bitflags 2.6.0", ] [[package]] name = "redox_users" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom", "libredox", @@ -2456,9 +2461,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.5" +version = "1.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" dependencies = [ "aho-corasick", "memchr", @@ -2609,18 +2614,18 @@ checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" dependencies = [ "bitflags 2.6.0", "errno", @@ -2716,11 +2721,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2811,31 +2816,32 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.204" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.204" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] name = "serde_json" -version = "1.0.120" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -2848,14 +2854,14 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] name = "serde_spanned" -version = "0.6.6" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" +checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" dependencies = [ "serde", ] @@ -2904,6 +2910,12 @@ dependencies = [ "keccak", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signature" version = "2.2.0" @@ -3031,7 +3043,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -3073,9 +3085,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.71" +version = "2.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b146dcf730474b4bcd16c311627b31ede9ab149045db4d6088b3becaea046462" +checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" dependencies = [ "proc-macro2", "quote", @@ -3117,14 +3129,15 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.10.1" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" dependencies = [ "cfg-if", "fastrand", + "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3140,22 +3153,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.62" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2675633b1499176c2dff06b0856a27976a8f9d436737b4cf4f312d4d91d8bbb" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.62" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d20468752b09f49e909e55a5d338caa8bedf615594e9d80bc4c565d30faf798c" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -3215,30 +3228,29 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.38.1" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb2caba9f80616f438e09748d5acda951967e1ea58508ef53d9c6402485a46df" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" dependencies = [ "backtrace", "bytes", "libc", "mio", - "num_cpus", "pin-project-lite", "socket2", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -3292,9 +3304,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", @@ -3305,54 +3317,43 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.14" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.15", + "toml_edit", ] [[package]] name = "toml_datetime" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.21.1" +version = "0.22.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.22.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59a3a72298453f564e2b111fa896f8d07fabb36f51f06d7e875fc5e0b5a3ef1" +checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" dependencies = [ "indexmap", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.13", + "winnow", ] [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" @@ -3373,7 +3374,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -3472,9 +3473,9 @@ checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-normalization" @@ -3487,9 +3488,9 @@ dependencies = [ [[package]] name = "unicode-xid" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" [[package]] name = "untrusted" @@ -3544,9 +3545,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "walkdir" @@ -3575,34 +3576,35 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" dependencies = [ "cfg-if", "js-sys", @@ -3612,9 +3614,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3622,28 +3624,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" dependencies = [ "js-sys", "wasm-bindgen", @@ -3673,11 +3675,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3704,6 +3706,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -3827,18 +3838,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - -[[package]] -name = "winnow" -version = "0.6.13" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" +checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" dependencies = [ "memchr", ] @@ -3887,6 +3889,27 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + [[package]] name = "zeroize" version = "1.8.1" @@ -3934,9 +3957,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.12+zstd.1.5.6" +version = "2.0.13+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a4e40c320c3cb459d9a9ff6de98cff88f4751ee9275d140e2be94a2b74e4c13" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" dependencies = [ "cc", "pkg-config", diff --git a/examples/validating-public-input/aligned-integration/Cargo.toml b/examples/validating-public-input/aligned-integration/Cargo.toml index 018529fc7..6c672f79d 100644 --- a/examples/validating-public-input/aligned-integration/Cargo.toml +++ b/examples/validating-public-input/aligned-integration/Cargo.toml @@ -4,9 +4,19 @@ version = "0.1.0" edition = "2021" [dependencies] -aligned-sdk = { git = "https://github.com/yetanotherco/aligned_layer", rev="6908110aaa04ec3107f15ab8a8bb2603e7bbead9" } -tokio = { version = "1.37.0", features = ["io-std", "time", "macros", "rt", "rt-multi-thread", "sync"] } -ethers = { tag = "v2.0.15-fix-reconnections", features = ["ws", "rustls"], git = "https://github.com/yetanotherco/ethers-rs.git" } +aligned-sdk = { git = "https://github.com/yetanotherco/aligned_layer", tag = "v0.6.0" } +tokio = { version = "1.37.0", features = [ + "io-std", + "time", + "macros", + "rt", + "rt-multi-thread", + "sync", +] } +ethers = { tag = "v2.0.15-fix-reconnections", features = [ + "ws", + "rustls", +], git = "https://github.com/yetanotherco/ethers-rs.git" } serde = { version = "1.0.201", features = ["derive"] } serde_json = "1.0.117" log = "0.4.21" diff --git a/examples/validating-public-input/aligned-integration/src/main.rs b/examples/validating-public-input/aligned-integration/src/main.rs index f1de3f85f..d02d4cc13 100644 --- a/examples/validating-public-input/aligned-integration/src/main.rs +++ b/examples/validating-public-input/aligned-integration/src/main.rs @@ -50,6 +50,7 @@ async fn main() -> Result<(), SubmitError> { proof_generator_addr, }; + // Create a wallet and set chain id to holesky let wallet = LocalWallet::from_str(WALLET_PRIVATE_KEY) .expect("Failed to create wallet") .with_chain_id(17000u64); @@ -70,13 +71,20 @@ async fn main() -> Result<(), SubmitError> { ) .await?; - let batch_inclusion_data_directory_path = PathBuf::from("./batch_inclusion_data"); + let batch_inclusion_data_directory_path = PathBuf::from("batch_inclusion_data"); info!( "Saving verification data to {:?}", batch_inclusion_data_directory_path ); + info!("Proof submitted to aligned. See the batch in the explorer:"); + + info!( + "https://explorer.alignedlayer.com/batches/0x{}", + hex::encode(aligned_verification_data.batch_merkle_root) + ); + save_response( batch_inclusion_data_directory_path, &aligned_verification_data, diff --git a/examples/validating-public-input/risc_zero/fibonacci_proof_generator/Cargo.lock b/examples/validating-public-input/risc_zero/fibonacci_proof_generator/Cargo.lock index f8073a597..38b1353e4 100644 --- a/examples/validating-public-input/risc_zero/fibonacci_proof_generator/Cargo.lock +++ b/examples/validating-public-input/risc_zero/fibonacci_proof_generator/Cargo.lock @@ -34,6 +34,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + [[package]] name = "ahash" version = "0.8.11" @@ -260,7 +266,7 @@ dependencies = [ "cc", "cfg-if", "libc", - "miniz_oxide", + "miniz_oxide 0.7.4", "object 0.36.3", "rustc-demangle", ] @@ -330,12 +336,10 @@ dependencies = [ [[package]] name = "bonsai-sdk" -version = "0.9.0" -source = "git+https://github.com/risc0/risc0?tag=v1.0.5#a165a6e3443fbc2e4f7093d7552399cd56337928" +version = "0.8.0" +source = "git+https://github.com/risc0/risc0?tag=v1.0.1#79de616506543634cb5d75b9db7f3aee3640d68c" dependencies = [ - "duplicate", - "maybe-async", - "reqwest 0.12.5", + "reqwest 0.12.7", "risc0-groth16", "serde", "thiserror", @@ -349,22 +353,22 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.16.3" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "102087e286b4677862ea56cf8fc58bb2cdfa8725c40ffb80fe3a008eb7f2fc83" +checksum = "773d90827bc3feecfb67fab12e24de0749aad83c74b9504ecde46237b5cd24e2" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.7.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee891b04274a59bd38b412188e24b849617b2e45a0fd8d057deb63e7403761b" +checksum = "0cc8b54b395f2fcfbb3d90c47b01c7f444d94d05bdeb775811dec868ac3bbc26" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -384,9 +388,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.7" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" dependencies = [ "serde", ] @@ -416,12 +420,13 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.8" +version = "1.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504bdec147f2cc13c8b57ed9401fd8a147cc66b67ad5cb241394244f2c947549" +checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6" dependencies = [ "jobserver", "libc", + "shlex", ] [[package]] @@ -448,24 +453,24 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpp_demangle" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8227005286ec39567949b33df9896bcadfa6051bccca2488129f108ca23119" +checksum = "96e58d342ad113c2b878f16d5d034c03be492ae460cdbc02b7f0f2284d310c7d" dependencies = [ "cfg-if", ] [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" dependencies = [ "libc", ] @@ -584,7 +589,7 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -595,7 +600,7 @@ checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -648,7 +653,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -677,16 +682,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "duplicate" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de78e66ac9061e030587b2a2e75cc88f22304913c907b11307bca737141230cb" -dependencies = [ - "heck", - "proc-macro-error", -] - [[package]] name = "either" version = "1.13.0" @@ -742,9 +737,9 @@ checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" [[package]] name = "fastrand" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "ff" @@ -777,12 +772,12 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.31" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f211bbe8e69bbd0cfdea405084f128ae8b4aaa6b0b522fc8f2b009084797920" +checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.8.0", ] [[package]] @@ -862,7 +857,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -966,12 +961,6 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - [[package]] name = "hermit-abi" version = "0.3.9" @@ -1186,9 +1175,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0" +checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c" dependencies = [ "equivalent", "hashbrown 0.14.5", @@ -1241,18 +1230,18 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" dependencies = [ "wasm-bindgen", ] [[package]] name = "lazy-regex" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "576c8060ecfdf2e56995cf3274b4f2d71fa5e4fa3607c1c0b63c10180ee58741" +checksum = "8d8e41c97e6bc7ecb552016274b99fbb5d035e8de288c582d9b933af6677bfda" dependencies = [ "lazy-regex-proc_macros", "once_cell", @@ -1261,14 +1250,14 @@ dependencies = [ [[package]] name = "lazy-regex-proc_macros" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9efb9e65d4503df81c615dc33ff07042a9408ac7f26b45abee25566f7fbfd12c" +checksum = "76e1d8b05d672c53cb9c7b920bbba8783845ae4f0b076e02a3db1d02c81b4163" dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -1279,9 +1268,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.155" +version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" [[package]] name = "libm" @@ -1346,17 +1335,6 @@ dependencies = [ "rawpointer", ] -[[package]] -name = "maybe-async" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] - [[package]] name = "memchr" version = "2.7.4" @@ -1394,11 +1372,20 @@ dependencies = [ "adler", ] +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + [[package]] name = "mio" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ "hermit-abi", "libc", @@ -1577,7 +1564,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -1601,30 +1588,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - [[package]] name = "proc-macro2" version = "1.0.86" @@ -1654,7 +1617,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -1707,9 +1670,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -1787,9 +1750,9 @@ dependencies = [ [[package]] name = "redox_users" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom", "libredox", @@ -1878,14 +1841,14 @@ dependencies = [ "wasm-bindgen-futures", "web-sys", "webpki-roots 0.25.4", - "winreg 0.50.0", + "winreg", ] [[package]] name = "reqwest" -version = "0.12.5" +version = "0.12.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" dependencies = [ "base64 0.22.1", "bytes", @@ -1915,15 +1878,13 @@ dependencies = [ "sync_wrapper 1.0.1", "tokio", "tokio-rustls 0.26.0", - "tokio-util", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", - "wasm-streams", "web-sys", "webpki-roots 0.26.3", - "winreg 0.52.0", + "windows-registry", ] [[package]] @@ -1943,8 +1904,8 @@ dependencies = [ [[package]] name = "risc0-binfmt" -version = "1.0.5" -source = "git+https://github.com/risc0/risc0?tag=v1.0.5#a165a6e3443fbc2e4f7093d7552399cd56337928" +version = "1.0.1" +source = "git+https://github.com/risc0/risc0?tag=v1.0.1#79de616506543634cb5d75b9db7f3aee3640d68c" dependencies = [ "anyhow", "elf", @@ -1956,8 +1917,8 @@ dependencies = [ [[package]] name = "risc0-build" -version = "1.0.5" -source = "git+https://github.com/risc0/risc0?tag=v1.0.5#a165a6e3443fbc2e4f7093d7552399cd56337928" +version = "1.0.1" +source = "git+https://github.com/risc0/risc0?tag=v1.0.1#79de616506543634cb5d75b9db7f3aee3640d68c" dependencies = [ "anyhow", "cargo_metadata", @@ -1973,8 +1934,8 @@ dependencies = [ [[package]] name = "risc0-build-kernel" -version = "1.0.5" -source = "git+https://github.com/risc0/risc0?tag=v1.0.5#a165a6e3443fbc2e4f7093d7552399cd56337928" +version = "1.0.1" +source = "git+https://github.com/risc0/risc0?tag=v1.0.1#79de616506543634cb5d75b9db7f3aee3640d68c" dependencies = [ "cc", "directories", @@ -1988,8 +1949,8 @@ dependencies = [ [[package]] name = "risc0-circuit-recursion" -version = "1.0.5" -source = "git+https://github.com/risc0/risc0?tag=v1.0.5#a165a6e3443fbc2e4f7093d7552399cd56337928" +version = "1.0.1" +source = "git+https://github.com/risc0/risc0?tag=v1.0.1#79de616506543634cb5d75b9db7f3aee3640d68c" dependencies = [ "anyhow", "bytemuck", @@ -2009,8 +1970,8 @@ dependencies = [ [[package]] name = "risc0-circuit-recursion-sys" -version = "1.0.5" -source = "git+https://github.com/risc0/risc0?tag=v1.0.5#a165a6e3443fbc2e4f7093d7552399cd56337928" +version = "1.0.1" +source = "git+https://github.com/risc0/risc0?tag=v1.0.1#79de616506543634cb5d75b9db7f3aee3640d68c" dependencies = [ "glob", "risc0-build-kernel", @@ -2020,8 +1981,8 @@ dependencies = [ [[package]] name = "risc0-circuit-rv32im" -version = "1.0.5" -source = "git+https://github.com/risc0/risc0?tag=v1.0.5#a165a6e3443fbc2e4f7093d7552399cd56337928" +version = "1.0.1" +source = "git+https://github.com/risc0/risc0?tag=v1.0.1#79de616506543634cb5d75b9db7f3aee3640d68c" dependencies = [ "anyhow", "bytemuck", @@ -2046,8 +2007,8 @@ dependencies = [ [[package]] name = "risc0-circuit-rv32im-sys" -version = "1.0.5" -source = "git+https://github.com/risc0/risc0?tag=v1.0.5#a165a6e3443fbc2e4f7093d7552399cd56337928" +version = "1.0.1" +source = "git+https://github.com/risc0/risc0?tag=v1.0.1#79de616506543634cb5d75b9db7f3aee3640d68c" dependencies = [ "glob", "risc0-build-kernel", @@ -2057,8 +2018,8 @@ dependencies = [ [[package]] name = "risc0-core" -version = "1.0.5" -source = "git+https://github.com/risc0/risc0?tag=v1.0.5#a165a6e3443fbc2e4f7093d7552399cd56337928" +version = "1.0.1" +source = "git+https://github.com/risc0/risc0?tag=v1.0.1#79de616506543634cb5d75b9db7f3aee3640d68c" dependencies = [ "bytemuck", "rand_core", @@ -2066,8 +2027,8 @@ dependencies = [ [[package]] name = "risc0-groth16" -version = "1.0.5" -source = "git+https://github.com/risc0/risc0?tag=v1.0.5#a165a6e3443fbc2e4f7093d7552399cd56337928" +version = "1.0.1" +source = "git+https://github.com/risc0/risc0?tag=v1.0.1#79de616506543634cb5d75b9db7f3aee3640d68c" dependencies = [ "anyhow", "ark-bn254", @@ -2089,8 +2050,8 @@ dependencies = [ [[package]] name = "risc0-sys" -version = "1.0.5" -source = "git+https://github.com/risc0/risc0?tag=v1.0.5#a165a6e3443fbc2e4f7093d7552399cd56337928" +version = "1.0.1" +source = "git+https://github.com/risc0/risc0?tag=v1.0.1#79de616506543634cb5d75b9db7f3aee3640d68c" dependencies = [ "cc", "risc0-build-kernel", @@ -2098,8 +2059,8 @@ dependencies = [ [[package]] name = "risc0-zkp" -version = "1.0.5" -source = "git+https://github.com/risc0/risc0?tag=v1.0.5#a165a6e3443fbc2e4f7093d7552399cd56337928" +version = "1.0.1" +source = "git+https://github.com/risc0/risc0?tag=v1.0.1#79de616506543634cb5d75b9db7f3aee3640d68c" dependencies = [ "anyhow", "blake2", @@ -2126,8 +2087,8 @@ dependencies = [ [[package]] name = "risc0-zkvm" -version = "1.0.5" -source = "git+https://github.com/risc0/risc0?tag=v1.0.5#a165a6e3443fbc2e4f7093d7552399cd56337928" +version = "1.0.1" +source = "git+https://github.com/risc0/risc0?tag=v1.0.1#79de616506543634cb5d75b9db7f3aee3640d68c" dependencies = [ "addr2line", "anyhow", @@ -2163,8 +2124,8 @@ dependencies = [ [[package]] name = "risc0-zkvm-platform" -version = "1.0.5" -source = "git+https://github.com/risc0/risc0?tag=v1.0.5#a165a6e3443fbc2e4f7093d7552399cd56337928" +version = "1.0.1" +source = "git+https://github.com/risc0/risc0?tag=v1.0.1#79de616506543634cb5d75b9db7f3aee3640d68c" dependencies = [ "bytemuck", "getrandom", @@ -2195,18 +2156,18 @@ checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "a85d50532239da68e9addb745ba38ff4612a242c1c7ceea689c4bc7c2f43c36f" dependencies = [ "bitflags 2.6.0", "errno", @@ -2236,7 +2197,7 @@ dependencies = [ "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.102.6", + "rustls-webpki 0.102.7", "subtle", "zeroize", ] @@ -2278,9 +2239,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.6" +version = "0.102.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" +checksum = "84678086bd54edf2b415183ed7a94d0efb049f1b646a33e22a36f3794be6ae56" dependencies = [ "ring", "rustls-pki-types", @@ -2331,29 +2292,29 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.205" +version = "1.0.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33aedb1a7135da52b7c21791455563facbbcc43d0f0f66165b42c21b3dfb150" +checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.205" +version = "1.0.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692d6f5ac90220161d6774db30c662202721e64aed9058d2c394f451261420c1" +checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] name = "serde_json" -version = "1.0.122" +version = "1.0.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da" +checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" dependencies = [ "itoa", "memchr", @@ -2393,6 +2354,12 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "simd-adler32" version = "0.3.7" @@ -2461,9 +2428,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.72" +version = "2.0.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" +checksum = "578e081a14e0cefc3279b0472138c513f37b41a08d5a3cca9b6e4e8ceb6cd525" dependencies = [ "proc-macro2", "quote", @@ -2481,6 +2448,9 @@ name = "sync_wrapper" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] [[package]] name = "system-configuration" @@ -2539,7 +2509,7 @@ checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -2569,9 +2539,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.39.2" +version = "1.39.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" +checksum = "9babc99b9923bfa4804bd74722ff02c0381021eafa4db9949217e3be8e84fff5" dependencies = [ "backtrace", "bytes", @@ -2633,15 +2603,15 @@ dependencies = [ [[package]] name = "tower-layer" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" @@ -2663,7 +2633,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -2732,9 +2702,9 @@ dependencies = [ [[package]] name = "typeid" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "059d83cc991e7a42fc37bd50941885db0888e34209f8cfd9aab07ddec03bc9cf" +checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" [[package]] name = "typenum" @@ -2744,9 +2714,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "typetag" -version = "0.2.17" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f7ec175048b96728c30152928c52161bfcc8ea2bd3fb7ed4ccb7dec060b2834" +checksum = "52ba3b6e86ffe0054b2c44f2d86407388b933b16cb0a70eea3929420db1d9bbe" dependencies = [ "erased-serde", "inventory", @@ -2757,13 +2727,13 @@ dependencies = [ [[package]] name = "typetag-impl" -version = "0.2.17" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84b5474fd169a5b02b6782b56bbbbff27e85947d4488e5501123687db3148647" +checksum = "70b20a22c42c8f1cd23ce5e34f165d4d37038f5b663ad20fb6adbdf029172483" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -2833,34 +2803,35 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" dependencies = [ "cfg-if", "js-sys", @@ -2870,9 +2841,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2880,41 +2851,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" - -[[package]] -name = "wasm-streams" -version = "0.4.0" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" dependencies = [ "js-sys", "wasm-bindgen", @@ -2937,9 +2895,9 @@ dependencies = [ [[package]] name = "which" -version = "6.0.2" +version = "6.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d9c5ed668ee1f17edb3b627225343d210006a90bb1e3745ce1f30b1fb115075" +checksum = "b4ee928febd44d98f2f459a4a79bd4d928591333a494a10a868418ac1b39cf1f" dependencies = [ "either", "home", @@ -2969,6 +2927,36 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -3127,16 +3115,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "winreg" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - [[package]] name = "winsafe" version = "0.0.19" @@ -3170,7 +3148,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -3190,14 +3168,14 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] name = "zip" -version = "2.1.6" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40dd8c92efc296286ce1fbd16657c5dbefff44f1b4ca01cc5f517d8b7b3d3e2e" +checksum = "dc5e4288ea4057ae23afc69a4472434a87a2495cafce6632fd1c4ec9f5cf3494" dependencies = [ "arbitrary", "crc32fast", diff --git a/examples/validating-public-input/risc_zero/fibonacci_proof_generator/host/Cargo.toml b/examples/validating-public-input/risc_zero/fibonacci_proof_generator/host/Cargo.toml index b29e39d92..799b0f7db 100644 --- a/examples/validating-public-input/risc_zero/fibonacci_proof_generator/host/Cargo.toml +++ b/examples/validating-public-input/risc_zero/fibonacci_proof_generator/host/Cargo.toml @@ -5,7 +5,9 @@ edition = "2021" [dependencies] methods = { path = "../methods" } -risc0-zkvm = { git = "https://github.com/risc0/risc0", tag="v1.0.5", default-features = false, features = ["prove"] } +risc0-zkvm = { git = "https://github.com/risc0/risc0", tag = "v1.0.1", default-features = false, features = [ + "prove", +] } tracing-subscriber = { version = "0.3", features = ["env-filter"] } serde = "1.0" bincode = "1.3.3" diff --git a/examples/validating-public-input/risc_zero/fibonacci_proof_generator/host/src/main.rs b/examples/validating-public-input/risc_zero/fibonacci_proof_generator/host/src/main.rs index 7fa621a74..d23586608 100644 --- a/examples/validating-public-input/risc_zero/fibonacci_proof_generator/host/src/main.rs +++ b/examples/validating-public-input/risc_zero/fibonacci_proof_generator/host/src/main.rs @@ -60,7 +60,8 @@ fn main() { println!("Verification result: {}", verification_result); - let serialized = bincode::serialize(&receipt).unwrap(); + // Note that we serialize receipt.inner to avoid serializing the public inputs along with the proof + let serialized = bincode::serialize(&receipt.inner).unwrap(); std::fs::write(PROOF_FILE_PATH, serialized).expect("Failed to write proof file"); diff --git a/examples/validating-public-input/risc_zero/fibonacci_proof_generator/methods/Cargo.toml b/examples/validating-public-input/risc_zero/fibonacci_proof_generator/methods/Cargo.toml index 1f3809b1f..7f23a1f84 100644 --- a/examples/validating-public-input/risc_zero/fibonacci_proof_generator/methods/Cargo.toml +++ b/examples/validating-public-input/risc_zero/fibonacci_proof_generator/methods/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2021" [build-dependencies] -risc0-build = { git = "https://github.com/risc0/risc0", tag="v1.0.5"} +risc0-build = { git = "https://github.com/risc0/risc0", tag = "v1.0.1" } [package.metadata.risc0] methods = ["guest"] diff --git a/examples/validating-public-input/risc_zero/fibonacci_proof_generator/methods/guest/Cargo.lock b/examples/validating-public-input/risc_zero/fibonacci_proof_generator/methods/guest/Cargo.lock index 458a866c4..a55f6b849 100644 --- a/examples/validating-public-input/risc_zero/fibonacci_proof_generator/methods/guest/Cargo.lock +++ b/examples/validating-public-input/risc_zero/fibonacci_proof_generator/methods/guest/Cargo.lock @@ -219,22 +219,22 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.16.3" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "102087e286b4677862ea56cf8fc58bb2cdfa8725c40ffb80fe3a008eb7f2fc83" +checksum = "773d90827bc3feecfb67fab12e24de0749aad83c74b9504ecde46237b5cd24e2" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.7.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee891b04274a59bd38b412188e24b849617b2e45a0fd8d057deb63e7403761b" +checksum = "0cc8b54b395f2fcfbb3d90c47b01c7f444d94d05bdeb775811dec868ac3bbc26" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -257,9 +257,9 @@ checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" dependencies = [ "libc", ] @@ -375,9 +375,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.155" +version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" [[package]] name = "libm" @@ -451,9 +451,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -486,8 +486,8 @@ checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" [[package]] name = "risc0-binfmt" -version = "1.0.5" -source = "git+https://github.com/risc0/risc0?tag=v1.0.5#a165a6e3443fbc2e4f7093d7552399cd56337928" +version = "1.0.1" +source = "git+https://github.com/risc0/risc0?tag=v1.0.1#79de616506543634cb5d75b9db7f3aee3640d68c" dependencies = [ "anyhow", "elf", @@ -499,8 +499,8 @@ dependencies = [ [[package]] name = "risc0-circuit-recursion" -version = "1.0.5" -source = "git+https://github.com/risc0/risc0?tag=v1.0.5#a165a6e3443fbc2e4f7093d7552399cd56337928" +version = "1.0.1" +source = "git+https://github.com/risc0/risc0?tag=v1.0.1#79de616506543634cb5d75b9db7f3aee3640d68c" dependencies = [ "anyhow", "bytemuck", @@ -512,8 +512,8 @@ dependencies = [ [[package]] name = "risc0-circuit-rv32im" -version = "1.0.5" -source = "git+https://github.com/risc0/risc0?tag=v1.0.5#a165a6e3443fbc2e4f7093d7552399cd56337928" +version = "1.0.1" +source = "git+https://github.com/risc0/risc0?tag=v1.0.1#79de616506543634cb5d75b9db7f3aee3640d68c" dependencies = [ "anyhow", "risc0-binfmt", @@ -526,8 +526,8 @@ dependencies = [ [[package]] name = "risc0-core" -version = "1.0.5" -source = "git+https://github.com/risc0/risc0?tag=v1.0.5#a165a6e3443fbc2e4f7093d7552399cd56337928" +version = "1.0.1" +source = "git+https://github.com/risc0/risc0?tag=v1.0.1#79de616506543634cb5d75b9db7f3aee3640d68c" dependencies = [ "bytemuck", "rand_core", @@ -535,8 +535,8 @@ dependencies = [ [[package]] name = "risc0-groth16" -version = "1.0.5" -source = "git+https://github.com/risc0/risc0?tag=v1.0.5#a165a6e3443fbc2e4f7093d7552399cd56337928" +version = "1.0.1" +source = "git+https://github.com/risc0/risc0?tag=v1.0.1#79de616506543634cb5d75b9db7f3aee3640d68c" dependencies = [ "anyhow", "ark-bn254", @@ -553,8 +553,8 @@ dependencies = [ [[package]] name = "risc0-zkp" -version = "1.0.5" -source = "git+https://github.com/risc0/risc0?tag=v1.0.5#a165a6e3443fbc2e4f7093d7552399cd56337928" +version = "1.0.1" +source = "git+https://github.com/risc0/risc0?tag=v1.0.1#79de616506543634cb5d75b9db7f3aee3640d68c" dependencies = [ "anyhow", "blake2", @@ -574,8 +574,8 @@ dependencies = [ [[package]] name = "risc0-zkvm" -version = "1.0.5" -source = "git+https://github.com/risc0/risc0?tag=v1.0.5#a165a6e3443fbc2e4f7093d7552399cd56337928" +version = "1.0.1" +source = "git+https://github.com/risc0/risc0?tag=v1.0.1#79de616506543634cb5d75b9db7f3aee3640d68c" dependencies = [ "anyhow", "bytemuck", @@ -598,8 +598,8 @@ dependencies = [ [[package]] name = "risc0-zkvm-platform" -version = "1.0.5" -source = "git+https://github.com/risc0/risc0?tag=v1.0.5#a165a6e3443fbc2e4f7093d7552399cd56337928" +version = "1.0.1" +source = "git+https://github.com/risc0/risc0?tag=v1.0.1#79de616506543634cb5d75b9db7f3aee3640d68c" dependencies = [ "bytemuck", "getrandom", @@ -618,9 +618,9 @@ dependencies = [ [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] @@ -633,22 +633,22 @@ checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "serde" -version = "1.0.205" +version = "1.0.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33aedb1a7135da52b7c21791455563facbbcc43d0f0f66165b42c21b3dfb150" +checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.205" +version = "1.0.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692d6f5ac90220161d6774db30c662202721e64aed9058d2c394f451261420c1" +checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -681,9 +681,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.72" +version = "2.0.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" +checksum = "578e081a14e0cefc3279b0472138c513f37b41a08d5a3cca9b6e4e8ceb6cd525" dependencies = [ "proc-macro2", "quote", @@ -709,7 +709,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -760,7 +760,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -780,5 +780,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] diff --git a/examples/validating-public-input/risc_zero/fibonacci_proof_generator/methods/guest/Cargo.toml b/examples/validating-public-input/risc_zero/fibonacci_proof_generator/methods/guest/Cargo.toml index ee4029c28..8a6c4545c 100644 --- a/examples/validating-public-input/risc_zero/fibonacci_proof_generator/methods/guest/Cargo.toml +++ b/examples/validating-public-input/risc_zero/fibonacci_proof_generator/methods/guest/Cargo.toml @@ -7,4 +7,4 @@ edition = "2021" [dependencies] # If you want to try (experimental) std support, add `features = [ "std" ]` to risc0-zkvm -risc0-zkvm = { git = "https://github.com/risc0/risc0", tag="v1.0.5", default-features = false } +risc0-zkvm = { git = "https://github.com/risc0/risc0", tag = "v1.0.1", default-features = false } diff --git a/examples/validating-public-input/risc_zero/fibonacci_proof_generator/risc_zero_fibonacci.proof b/examples/validating-public-input/risc_zero/fibonacci_proof_generator/risc_zero_fibonacci.proof deleted file mode 100644 index e70545747..000000000 Binary files a/examples/validating-public-input/risc_zero/fibonacci_proof_generator/risc_zero_fibonacci.proof and /dev/null differ diff --git a/examples/validating-public-input/risc_zero/fibonacci_proof_generator/risc_zero_fibonacci.pub b/examples/validating-public-input/risc_zero/fibonacci_proof_generator/risc_zero_fibonacci.pub deleted file mode 100644 index 1d920b8af..000000000 Binary files a/examples/validating-public-input/risc_zero/fibonacci_proof_generator/risc_zero_fibonacci.pub and /dev/null differ diff --git a/examples/validating-public-input/risc_zero/fibonacci_proof_generator/risc_zero_fibonacci_id.bin b/examples/validating-public-input/risc_zero/fibonacci_proof_generator/risc_zero_fibonacci_id.bin deleted file mode 100644 index 710bc748d..000000000 Binary files a/examples/validating-public-input/risc_zero/fibonacci_proof_generator/risc_zero_fibonacci_id.bin and /dev/null differ diff --git a/examples/zkquiz/README.md b/examples/zkquiz/README.md index 9f692fe57..1b32c390e 100644 --- a/examples/zkquiz/README.md +++ b/examples/zkquiz/README.md @@ -1,5 +1,17 @@ # ZK Aligned Quiz +## Introduction + +This is an example of a program running over Aligned, leveraging its ZK verification infrastructure. It consists of a simple quiz program, which if answered correctly, will grant the user an NFT acknowledging this. + +The User first runs the ZKQuiz program, answers the questions on the quiz, and ZKQuiz will generate a ZK Proof stating the user has answered the quiz correctly. After this, ZKQuiz will post the ZK Proof on Aligned. Once this proof is verified by Aligned, ZKQuiz mints an NFT through a Smart Contract that checks if the user has indeed verified a correct ZKQuiz proof. + +This way, the User can only obtain this NFT if he knows the answers to the ZKQuiz; +- If the User answers incorrectly, the proof generation will fail. +- If the User tries to tamper ZKQuiz code, the ZK Proof will correspond to another Rust code, with another checksum. Therefore, the Smart Contract will not mint an NFT for the User + +Next, we will see how to execute ZKQuiz, so you can get your own ZKQuiz NFT! + ## Requirements 1. [Rust](https://www.rust-lang.org/tools/install) diff --git a/examples/zkquiz/quiz/program/Cargo.lock b/examples/zkquiz/quiz/program/Cargo.lock index 4ebdb9e8d..600c2bf9f 100644 --- a/examples/zkquiz/quiz/program/Cargo.lock +++ b/examples/zkquiz/quiz/program/Cargo.lock @@ -4,15 +4,15 @@ version = 3 [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "autocfg" @@ -68,6 +68,12 @@ version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + [[package]] name = "cfg-if" version = "1.0.0" @@ -82,9 +88,9 @@ checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] @@ -135,7 +141,7 @@ checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.77", ] [[package]] @@ -274,9 +280,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" dependencies = [ "equivalent", "hashbrown", @@ -304,9 +310,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.155" +version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" [[package]] name = "libm" @@ -336,9 +342,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", @@ -435,15 +441,18 @@ dependencies = [ [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "proc-macro-crate" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" dependencies = [ "toml_edit", ] @@ -467,9 +476,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -560,22 +569,22 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.203" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.203" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.77", ] [[package]] @@ -673,9 +682,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.68" +version = "2.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "901fa70d88b9d6c98022e23b4136f9f3e54e4662c3bc1bd1d84a42a9a0f0c1e9" +checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" dependencies = [ "proc-macro2", "quote", @@ -699,15 +708,15 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" [[package]] name = "toml_edit" -version = "0.21.1" +version = "0.22.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" dependencies = [ "indexmap", "toml_datetime", @@ -722,15 +731,15 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "wasi" @@ -740,9 +749,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "winnow" -version = "0.5.40" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" dependencies = [ "memchr", ] @@ -756,6 +765,27 @@ dependencies = [ "tap", ] +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + [[package]] name = "zeroize" version = "1.8.1" diff --git a/examples/zkquiz/quiz/program/src/main.rs b/examples/zkquiz/quiz/program/src/main.rs index dcfa95344..7187c8477 100644 --- a/examples/zkquiz/quiz/program/src/main.rs +++ b/examples/zkquiz/quiz/program/src/main.rs @@ -12,11 +12,16 @@ pub fn main() { let mut sha3 = Sha3::v256(); let mut output = [0u8; 32]; - sha3.update(&answers.as_bytes()); + sha3.update(answers.as_bytes()); sha3.finalize(&mut output); - if output != [232,202,155,157,82,242,126,73,75,22,197,34,41,170,163,190,22,29,192,5,99,134,186,25,77,128,188,154,238,70,245,229] { + if output + != [ + 232, 202, 155, 157, 82, 242, 126, 73, 75, 22, 197, 34, 41, 170, 163, 190, 22, 29, 192, + 5, 99, 134, 186, 25, 77, 128, 188, 154, 238, 70, 245, 229, + ] + { panic!("Answers do not match"); } } diff --git a/examples/zkquiz/quiz/script/Cargo.lock b/examples/zkquiz/quiz/script/Cargo.lock index b018fae39..096b8e767 100644 --- a/examples/zkquiz/quiz/script/Cargo.lock +++ b/examples/zkquiz/quiz/script/Cargo.lock @@ -25,18 +25,18 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aes" @@ -73,7 +73,7 @@ dependencies = [ [[package]] name = "aligned-sdk" version = "0.1.0" -source = "git+https://github.com/yetanotherco/aligned_layer?rev=6908110aaa04ec3107f15ab8a8bb2603e7bbead9#6908110aaa04ec3107f15ab8a8bb2603e7bbead9" +source = "git+https://github.com/yetanotherco/aligned_layer?tag=v0.6.0#bdda0d2efdb563c5d49a2562bebb27d52182807d" dependencies = [ "ciborium", "ethers 2.0.14 (git+https://github.com/yetanotherco/ethers-rs.git?tag=v2.0.15-fix-reconnections)", @@ -120,9 +120,9 @@ dependencies = [ [[package]] name = "alloy-rlp" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a43b18702501396fa9bcdeecd533bc85fac75150d308fc0f6800a01e6234a003" +checksum = "26154390b1d205a4a7ac7352aa2eb4f81f391399d4e2f546fb81a2f8bb383f62" dependencies = [ "arrayvec", "bytes", @@ -139,7 +139,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -151,11 +151,11 @@ dependencies = [ "alloy-sol-macro-input", "const-hex", "heck", - "indexmap 2.2.6", + "indexmap 2.5.0", "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", "syn-solidity", "tiny-keccak", ] @@ -171,7 +171,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", "syn-solidity", ] @@ -262,9 +262,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" [[package]] name = "ark-ff" @@ -300,7 +300,7 @@ dependencies = [ "num-bigint 0.4.6", "num-traits", "paste", - "rustc_version 0.4.0", + "rustc_version 0.4.1", "zeroize", ] @@ -392,15 +392,15 @@ dependencies = [ [[package]] name = "arrayref" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "ascii-canvas" @@ -413,13 +413,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.81" +version = "0.1.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -430,7 +430,7 @@ checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" dependencies = [ "futures", "pharos", - "rustc_version 0.4.0", + "rustc_version 0.4.1", ] [[package]] @@ -447,7 +447,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -513,18 +513,18 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", "serde", + "windows-targets 0.52.6", ] [[package]] @@ -589,9 +589,9 @@ dependencies = [ "proc-macro2", "quote", "regex", - "rustc-hash", + "rustc-hash 1.1.0", "shlex", - "syn 2.0.72", + "syn 2.0.77", "which", ] @@ -651,20 +651,20 @@ checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" dependencies = [ "arrayref", "arrayvec", - "constant_time_eq 0.3.0", + "constant_time_eq 0.3.1", ] [[package]] name = "blake3" -version = "1.5.3" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9ec96fe9a81b5e365f9db71fe00edc4fe4ca2cc7dcb7861f0603012a7caa210" +checksum = "d82033247fd8e890df8f740e407ad4d038debb9eb1f40533fffb32e7d17dc6f7" dependencies = [ "arrayref", "arrayvec", "cc", "cfg-if", - "constant_time_eq 0.3.0", + "constant_time_eq 0.3.1", "rayon-core", ] @@ -714,9 +714,9 @@ checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "bytemuck" -version = "1.16.1" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" +checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" [[package]] name = "byteorder" @@ -726,9 +726,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.1" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" dependencies = [ "serde", ] @@ -756,9 +756,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.7" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" dependencies = [ "serde", ] @@ -788,12 +788,13 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.6" +version = "1.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f" +checksum = "2d74707dde2ba56f86ae90effb3b43ddd369504387e718014de010cec7959800" dependencies = [ "jobserver", "libc", + "shlex", ] [[package]] @@ -874,9 +875,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.11" +version = "4.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35723e6a11662c2afb578bcf0b88bf6ea8e21282a953428f240574fcc3a2b5b3" +checksum = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac" dependencies = [ "clap_builder", "clap_derive", @@ -884,9 +885,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.11" +version = "4.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49eb96cbfa7cfa35017b7cd548c75b14c3118c98b423041d70562665e07fb0fa" +checksum = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73" dependencies = [ "anstream", "anstyle", @@ -896,14 +897,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.11" +version = "4.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d029b67f89d30bbb547c89fd5161293c0aec155fc691d7924b64550662db93e" +checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -1016,9 +1017,9 @@ checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" [[package]] name = "constant_time_eq" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" [[package]] name = "convert_case" @@ -1038,15 +1039,15 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] @@ -1132,7 +1133,7 @@ dependencies = [ "cpufeatures", "curve25519-dalek-derive", "fiat-crypto", - "rustc_version 0.4.0", + "rustc_version 0.4.1", "subtle", "zeroize", ] @@ -1145,7 +1146,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -1169,7 +1170,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -1180,7 +1181,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -1229,8 +1230,8 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "rustc_version 0.4.0", - "syn 2.0.72", + "rustc_version 0.4.1", + "syn 2.0.77", ] [[package]] @@ -1317,9 +1318,9 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "dunce" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "ecdsa" @@ -1372,6 +1373,12 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" +[[package]] +name = "embedded-io" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + [[package]] name = "ena" version = "0.14.3" @@ -1606,7 +1613,7 @@ dependencies = [ "regex", "serde", "serde_json", - "syn 2.0.72", + "syn 2.0.77", "toml", "walkdir", ] @@ -1629,7 +1636,7 @@ dependencies = [ "reqwest 0.11.27", "serde", "serde_json", - "syn 2.0.72", + "syn 2.0.77", "toml", "walkdir", ] @@ -1647,7 +1654,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -1662,7 +1669,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -1680,7 +1687,7 @@ dependencies = [ "ethabi", "generic-array 0.14.7", "k256", - "num_enum 0.7.2", + "num_enum 0.7.3", "once_cell", "open-fastrlp", "rand", @@ -1688,7 +1695,7 @@ dependencies = [ "serde", "serde_json", "strum", - "syn 2.0.72", + "syn 2.0.77", "tempfile", "thiserror", "tiny-keccak", @@ -1709,7 +1716,7 @@ dependencies = [ "ethabi", "generic-array 0.14.7", "k256", - "num_enum 0.7.2", + "num_enum 0.7.3", "once_cell", "open-fastrlp", "rand", @@ -1717,7 +1724,7 @@ dependencies = [ "serde", "serde_json", "strum", - "syn 2.0.72", + "syn 2.0.77", "tempfile", "thiserror", "tiny-keccak", @@ -1944,9 +1951,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "fastrlp" @@ -2025,9 +2032,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.30" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" dependencies = [ "crc32fast", "miniz_oxide", @@ -2145,7 +2152,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -2237,9 +2244,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" [[package]] name = "git2" @@ -2307,7 +2314,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.2.6", + "indexmap 2.5.0", "slab", "tokio", "tokio-util", @@ -2316,9 +2323,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" dependencies = [ "atomic-waker", "bytes", @@ -2326,7 +2333,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.1.0", - "indexmap 2.2.6", + "indexmap 2.5.0", "slab", "tokio", "tokio-util", @@ -2535,7 +2542,7 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.5", + "h2 0.4.6", "http 1.1.0", "http-body 1.0.1", "httparse", @@ -2563,20 +2570,20 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ "futures-util", "http 1.1.0", "hyper 1.4.1", "hyper-util", - "rustls 0.23.12", + "rustls 0.23.13", "rustls-pki-types", "tokio", "tokio-rustls 0.26.0", "tower-service", - "webpki-roots 0.26.3", + "webpki-roots 0.26.5", ] [[package]] @@ -2597,9 +2604,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" +checksum = "da62f120a8a37763efb0cf8fdf264b884c7b8b9ac8660b900c8661030c00e6ba" dependencies = [ "bytes", "futures-channel", @@ -2617,9 +2624,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -2711,9 +2718,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" dependencies = [ "equivalent", "hashbrown 0.14.5", @@ -2753,9 +2760,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4" [[package]] name = "is_terminal_polyfill" @@ -2816,9 +2823,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" dependencies = [ "wasm-bindgen", ] @@ -2876,9 +2883,9 @@ dependencies = [ [[package]] name = "keccak-asm" -version = "0.1.1" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47a3633291834c4fbebf8673acbc1b04ec9d151418ff9b8e26dcd79129928758" +checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6" dependencies = [ "digest 0.10.7", "sha3-asm", @@ -2953,9 +2960,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.155" +version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" [[package]] name = "libgit2-sys" @@ -2997,9 +3004,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.18" +version = "1.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c15da26e5af7e25c90b37a2d75cdbf940cf4a55316de9d84c679c9b8bfabf82e" +checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" dependencies = [ "cc", "libc", @@ -3080,18 +3087,18 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ "hermit-abi", "libc", @@ -3269,11 +3276,11 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ - "num_enum_derive 0.7.2", + "num_enum_derive 0.7.3", ] [[package]] @@ -3290,14 +3297,14 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -3317,9 +3324,9 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "object" -version = "0.36.2" +version = "0.36.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f203fa8daa7bb185f760ae12bd8e097f63d17041dcdcaf675ac54cdf863170e" +checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" dependencies = [ "memchr", ] @@ -3384,7 +3391,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -3717,7 +3724,7 @@ version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.2.0", "proc-macro2", "quote", "syn 1.0.109", @@ -3838,9 +3845,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.11" +version = "2.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd53dff83f26735fdc1ca837098ccf133605d794cdae66acfc2bfac3ec809d95" +checksum = "9c73c26c01b8c87956cea613c907c9d6ecffd8d18a2a5908e5de0adfaa185cea" dependencies = [ "memchr", "thiserror", @@ -3854,7 +3861,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.2.6", + "indexmap 2.5.0", ] [[package]] @@ -3864,7 +3871,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" dependencies = [ "futures", - "rustc_version 0.4.0", + "rustc_version 0.4.1", ] [[package]] @@ -3897,7 +3904,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -3935,7 +3942,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -3974,12 +3981,13 @@ checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" [[package]] name = "postcard" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a55c51ee6c0db07e68448e336cf8ea4131a620edefebf9893e759b2d793420f8" +checksum = "5f7f0a8d620d71c457dd1d47df76bb18960378da56af4527aaa10f515eee732e" dependencies = [ "cobs", - "embedded-io", + "embedded-io 0.4.0", + "embedded-io 0.6.1", "serde", ] @@ -3991,9 +3999,12 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "precomputed-hash" @@ -4003,12 +4014,12 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "prettyplease" -version = "0.2.20" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +checksum = "479cf940fbbb3426c32c5d5176f62ad57549a0bb84773423ba8be9d089f5faba" dependencies = [ "proc-macro2", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -4037,11 +4048,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" dependencies = [ - "toml_edit 0.21.1", + "toml_edit 0.22.20", ] [[package]] @@ -4117,14 +4128,14 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] name = "psm" -version = "0.1.21" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +checksum = "aa37f80ca58604976033fae9515a8a2989fc13797d953f7c04fb8fa36a11f205" dependencies = [ "cc", ] @@ -4137,16 +4148,17 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quinn" -version = "0.11.2" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4ceeeeabace7857413798eb1ffa1e9c905a9946a57d81fb69b4b71c4d8eb3ad" +checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684" dependencies = [ "bytes", "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash", - "rustls 0.23.12", + "rustc-hash 2.0.0", + "rustls 0.23.13", + "socket2", "thiserror", "tokio", "tracing", @@ -4154,15 +4166,15 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.3" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddf517c03a109db8100448a4be38d498df8a210a99fe0e1b9eaf39e78c640efe" +checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" dependencies = [ "bytes", "rand", "ring 0.17.8", - "rustc-hash", - "rustls 0.23.12", + "rustc-hash 2.0.0", + "rustls 0.23.13", "slab", "thiserror", "tinyvec", @@ -4171,14 +4183,15 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bffec3605b73c6f1754535084a85229fa8a30f86014e6c81aeec4abb68b0285" +checksum = "4fe68c2e9e1a1234e218683dbdf9f9dfcb094113c5ac2b938dfcb9bab4c4140b" dependencies = [ "libc", "once_cell", "socket2", - "windows-sys 0.52.0", + "tracing", + "windows-sys 0.59.0", ] [[package]] @@ -4201,9 +4214,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -4284,18 +4297,18 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "0884ad60e090bf1345b93da0a5de8923c93884cd03f40dfcfddd3b4bee661853" dependencies = [ "bitflags 2.6.0", ] [[package]] name = "redox_users" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom", "libredox", @@ -4304,9 +4317,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.5" +version = "1.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" dependencies = [ "aho-corasick", "memchr", @@ -4375,7 +4388,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "sync_wrapper 0.1.2", - "system-configuration", + "system-configuration 0.5.1", "tokio", "tokio-rustls 0.24.1", "tower-service", @@ -4384,26 +4397,26 @@ dependencies = [ "wasm-bindgen-futures", "web-sys", "webpki-roots 0.25.4", - "winreg 0.50.0", + "winreg", ] [[package]] name = "reqwest" -version = "0.12.5" +version = "0.12.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" dependencies = [ "base64 0.22.1", "bytes", "encoding_rs", "futures-core", "futures-util", - "h2 0.4.5", + "h2 0.4.6", "http 1.1.0", "http-body 1.0.1", "http-body-util", "hyper 1.4.1", - "hyper-rustls 0.27.2", + "hyper-rustls 0.27.3", "hyper-tls", "hyper-util", "ipnet", @@ -4415,14 +4428,14 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.12", - "rustls-pemfile 2.1.2", + "rustls 0.23.13", + "rustls-pemfile 2.1.3", "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", "sync_wrapper 1.0.1", - "system-configuration", + "system-configuration 0.6.1", "tokio", "tokio-native-tls", "tokio-rustls 0.26.0", @@ -4433,20 +4446,20 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 0.26.3", - "winreg 0.52.0", + "webpki-roots 0.26.5", + "windows-registry", ] [[package]] name = "reqwest-middleware" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39346a33ddfe6be00cbc17a34ce996818b97b230b87229f10114693becca1268" +checksum = "562ceb5a604d3f7c885a792d42c199fd8af239d0a51b2fa6a78aafa092452b04" dependencies = [ "anyhow", "async-trait", "http 1.1.0", - "reqwest 0.12.5", + "reqwest 0.12.7", "serde", "thiserror", "tower-service", @@ -4597,6 +4610,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc-hash" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" + [[package]] name = "rustc-hex" version = "2.1.0" @@ -4614,18 +4633,18 @@ dependencies = [ [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver 1.0.23", ] [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" dependencies = [ "bitflags 2.6.0", "errno", @@ -4648,14 +4667,14 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.12" +version = "0.23.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" +checksum = "f2dabaac7466917e566adb06783a81ca48944c6898a1b08b9374106dd671f4c8" dependencies = [ "once_cell", "ring 0.17.8", "rustls-pki-types", - "rustls-webpki 0.102.6", + "rustls-webpki 0.102.8", "subtle", "zeroize", ] @@ -4671,9 +4690,9 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" dependencies = [ "base64 0.22.1", "rustls-pki-types", @@ -4681,9 +4700,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" +checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" [[package]] name = "rustls-webpki" @@ -4697,9 +4716,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.6" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring 0.17.8", "rustls-pki-types", @@ -4766,7 +4785,7 @@ version = "2.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.2.0", "proc-macro2", "quote", "syn 1.0.109", @@ -4774,20 +4793,20 @@ dependencies = [ [[package]] name = "scc" -version = "2.1.5" +version = "2.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fadf67e3cf23f8b11a6c8c48a16cb2437381503615acd91094ec7b4686a5a53" +checksum = "0c947adb109a8afce5fc9c7bf951f87f146e9147b3a6a58413105628fb1d1e66" dependencies = [ "sdd", ] [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4820,9 +4839,9 @@ dependencies = [ [[package]] name = "sdd" -version = "1.7.0" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85f05a494052771fc5bd0619742363b5e24e5ad72ab3111ec2e27925b8edc5f3" +checksum = "60a7b59a5d9b0099720b417b6325d91a52cbf5b3dcb5041d864be53eefa58abc" [[package]] name = "sec1" @@ -4902,31 +4921,32 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.204" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.204" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] name = "serde_json" -version = "1.0.120" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -4949,7 +4969,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -4983,7 +5003,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.2.6", + "indexmap 2.5.0", "serde", "serde_derive", "serde_json", @@ -5000,7 +5020,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -5025,7 +5045,7 @@ checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -5062,9 +5082,9 @@ dependencies = [ [[package]] name = "sha3-asm" -version = "0.1.1" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9b57fd861253bff08bb1919e995f90ba8f4889de2726091c8876f3a4e823b40" +checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" dependencies = [ "cc", "cfg-if", @@ -5495,7 +5515,7 @@ dependencies = [ "p3-fri", "p3-matrix", "prost", - "reqwest 0.12.5", + "reqwest 0.12.7", "reqwest-middleware", "serde", "serde_json", @@ -5537,15 +5557,15 @@ dependencies = [ [[package]] name = "stacker" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce" +checksum = "799c883d55abdb5e98af1a7b3f23b9b6de8ecada0ecac058672d7635eb48ca7b" dependencies = [ "cc", "cfg-if", "libc", "psm", - "winapi", + "windows-sys 0.59.0", ] [[package]] @@ -5592,7 +5612,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -5643,9 +5663,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.72" +version = "2.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" +checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" dependencies = [ "proc-macro2", "quote", @@ -5661,7 +5681,7 @@ dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -5675,6 +5695,9 @@ name = "sync_wrapper" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] [[package]] name = "sysinfo" @@ -5699,7 +5722,18 @@ checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags 1.3.2", "core-foundation", - "system-configuration-sys", + "system-configuration-sys 0.5.0", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "system-configuration-sys 0.6.0", ] [[package]] @@ -5712,6 +5746,16 @@ dependencies = [ "libc", ] +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tap" version = "1.0.1" @@ -5720,14 +5764,15 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.10.1" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" dependencies = [ "cfg-if", "fastrand", + "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -5758,7 +5803,7 @@ checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -5830,9 +5875,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.39.1" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d040ac2b29ab03b09d4129c2f5bbd012a3ac2f79d38ff506a4bf8dd34b0eac8a" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" dependencies = [ "backtrace", "bytes", @@ -5854,7 +5899,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -5883,7 +5928,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.12", + "rustls 0.23.13", "rustls-pki-types", "tokio", ] @@ -5919,9 +5964,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", @@ -5932,21 +5977,21 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.16" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81967dd0dd2c1ab0bc3468bd7caecc32b8a4aa47d0c8c695d8c2b2108168d62c" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.17", + "toml_edit 0.22.20", ] [[package]] name = "toml_datetime" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8fb9f64314842840f1d940ac544da178732128f1c78c21772e876579e0da1db" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" dependencies = [ "serde", ] @@ -5957,33 +6002,22 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.5.0", "toml_datetime", "winnow 0.5.40", ] [[package]] name = "toml_edit" -version = "0.21.1" +version = "0.22.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" dependencies = [ - "indexmap 2.2.6", - "toml_datetime", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.22.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d9f8729f5aea9562aac1cc0441f5d6de3cff1ee0c5d67293eeca5eb36ee7c16" -dependencies = [ - "indexmap 2.2.6", + "indexmap 2.5.0", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.16", + "winnow 0.6.18", ] [[package]] @@ -6004,15 +6038,15 @@ dependencies = [ [[package]] name = "tower-layer" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" @@ -6034,7 +6068,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -6158,7 +6192,7 @@ dependencies = [ "http-body-util", "hyper 1.4.1", "prost", - "reqwest 0.12.5", + "reqwest 0.12.7", "serde", "serde_json", "thiserror", @@ -6205,9 +6239,9 @@ checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-normalization" @@ -6226,9 +6260,9 @@ checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" [[package]] name = "unicode-xid" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" [[package]] name = "untrusted" @@ -6302,9 +6336,9 @@ dependencies = [ [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "wait-timeout" @@ -6342,34 +6376,35 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" dependencies = [ "cfg-if", "js-sys", @@ -6379,9 +6414,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6389,22 +6424,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" [[package]] name = "wasm-streams" @@ -6421,9 +6456,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" dependencies = [ "js-sys", "wasm-bindgen", @@ -6447,9 +6482,9 @@ checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "webpki-roots" -version = "0.26.3" +version = "0.26.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" +checksum = "0bd24728e5af82c6c4ec1b66ac4844bdf8156257fccda846ec58b42cd0cdbe6a" dependencies = [ "rustls-pki-types", ] @@ -6484,11 +6519,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -6516,6 +6551,36 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -6534,6 +6599,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -6666,9 +6740,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.6.16" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b480ae9340fc261e6be3e95a1ba86d54ae3f9171132a73ce8d4bbaf68339507c" +checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" dependencies = [ "memchr", ] @@ -6683,16 +6757,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "winreg" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - [[package]] name = "ws_stream_wasm" version = "0.7.4" @@ -6704,7 +6768,7 @@ dependencies = [ "js-sys", "log", "pharos", - "rustc_version 0.4.0", + "rustc_version 0.4.1", "send_wrapper 0.6.0", "thiserror", "wasm-bindgen", @@ -6733,6 +6797,7 @@ version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] @@ -6744,7 +6809,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -6764,7 +6829,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -6835,9 +6900,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.12+zstd.1.5.6" +version = "2.0.13+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a4e40c320c3cb459d9a9ff6de98cff88f4751ee9275d140e2be94a2b74e4c13" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" dependencies = [ "cc", "pkg-config", diff --git a/examples/zkquiz/quiz/script/Cargo.toml b/examples/zkquiz/quiz/script/Cargo.toml index 6aa3eb935..470fc28a3 100644 --- a/examples/zkquiz/quiz/script/Cargo.toml +++ b/examples/zkquiz/quiz/script/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" [dependencies] sp1-sdk = { git = "https://github.com/succinctlabs/sp1.git", rev = "v1.0.1" } -aligned-sdk = { git = "https://github.com/yetanotherco/aligned_layer", rev = "6908110aaa04ec3107f15ab8a8bb2603e7bbead9" } +aligned-sdk = { git = "https://github.com/yetanotherco/aligned_layer", tag = "v0.6.0" } ethers = { tag = "v2.0.15-fix-reconnections", features = [ "ws", "rustls", diff --git a/examples/zkquiz/quiz/script/src/main.rs b/examples/zkquiz/quiz/script/src/main.rs index 383d3a763..235da8d92 100644 --- a/examples/zkquiz/quiz/script/src/main.rs +++ b/examples/zkquiz/quiz/script/src/main.rs @@ -106,7 +106,8 @@ async fn main() { pub_input: None, }; - let nonce = get_next_nonce(&rpc_url, wallet.address(), BATCHER_PAYMENTS_ADDRESS).await + let nonce = get_next_nonce(&rpc_url, wallet.address(), BATCHER_PAYMENTS_ADDRESS) + .await .expect("Failed to get next nonce"); match submit_and_wait_verification( @@ -116,7 +117,7 @@ async fn main() { &verification_data, wallet.clone(), nonce, - BATCHER_PAYMENTS_ADDRESS + BATCHER_PAYMENTS_ADDRESS, ) .await { @@ -125,6 +126,7 @@ async fn main() { "Proof submitted and verified successfully on batch {}, claiming prize...", hex::encode(aligned_verification_data.batch_merkle_root) ); + if let Err(e) = verify_batch_inclusion( aligned_verification_data.clone(), signer.clone(), diff --git a/explorer/.env.dev b/explorer/.env.dev index da4e2516d..c93bcea2c 100644 --- a/explorer/.env.dev +++ b/explorer/.env.dev @@ -3,7 +3,7 @@ RPC_URL=http://localhost:8545 ENVIRONMENT=devnet # Elixir -PHX_HOST=http://localhost:4000 +PHX_HOST=localhost ELIXIR_HOSTNAME=MAC # Database @@ -17,3 +17,6 @@ ALIGNED_CONFIG_FILE="../contracts/script/output/devnet/alignedlayer_deployment_o # Debug DEBUG_ERRORS=true + +# Operator version tracker API +TRACKER_API_URL=http://localhost:3030 diff --git a/explorer/.env.example b/explorer/.env.example index 5701c445b..290801b6a 100644 --- a/explorer/.env.example +++ b/explorer/.env.example @@ -17,3 +17,6 @@ ALIGNED_CONFIG_FILE="" # Debug DEBUG_ERRORS= + +# Tracker API +TRACKER_API_URL= diff --git a/explorer/config/config.exs b/explorer/config/config.exs index 070db71d6..74e986d08 100644 --- a/explorer/config/config.exs +++ b/explorer/config/config.exs @@ -8,7 +8,8 @@ import Config config :explorer, - generators: [timestamp_type: :utc_datetime] + generators: [timestamp_type: :utc_datetime], + tracker_api_url: System.get_env("TRACKER_API_URL") host = System.get_env("PHX_HOST") || "localhost" diff --git a/explorer/lib/abi/AlignedLayerServiceManager.json b/explorer/lib/abi/AlignedLayerServiceManager.json index 89b483d00..a97ba08c6 100644 --- a/explorer/lib/abi/AlignedLayerServiceManager.json +++ b/explorer/lib/abi/AlignedLayerServiceManager.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"__avsDirectory","type":"address","internalType":"contract IAVSDirectory"},{"name":"__rewardsCoordinator","type":"address","internalType":"contract IRewardsCoordinator"},{"name":"__registryCoordinator","type":"address","internalType":"contract IRegistryCoordinator"},{"name":"__stakeRegistry","type":"address","internalType":"contract IStakeRegistry"}],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"avsDirectory","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"batchesState","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"taskCreatedBlock","type":"uint32","internalType":"uint32"},{"name":"responded","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"blsApkRegistry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IBLSApkRegistry"}],"stateMutability":"view"},{"type":"function","name":"checkPublicInput","inputs":[{"name":"publicInput","type":"bytes","internalType":"bytes"},{"name":"hash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"checkSignatures","inputs":[{"name":"msgHash","type":"bytes32","internalType":"bytes32"},{"name":"referenceBlockNumber","type":"uint32","internalType":"uint32"},{"name":"params","type":"tuple","internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","components":[{"name":"nonSignerQuorumBitmapIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerPubkeys","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApks","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApkIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"totalStakeIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerStakeIndices","type":"uint32[][]","internalType":"uint32[][]"}]}],"outputs":[{"name":"","type":"tuple","internalType":"struct IBLSSignatureChecker.QuorumStakeTotals","components":[{"name":"signedStakeForQuorum","type":"uint96[]","internalType":"uint96[]"},{"name":"totalStakeForQuorum","type":"uint96[]","internalType":"uint96[]"}]},{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"createAVSRewardsSubmission","inputs":[{"name":"rewardsSubmissions","type":"tuple[]","internalType":"struct IRewardsCoordinator.RewardsSubmission[]","components":[{"name":"strategiesAndMultipliers","type":"tuple[]","internalType":"struct IRewardsCoordinator.StrategyAndMultiplier[]","components":[{"name":"strategy","type":"address","internalType":"contract IStrategy"},{"name":"multiplier","type":"uint96","internalType":"uint96"}]},{"name":"token","type":"address","internalType":"contract IERC20"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"startTimestamp","type":"uint32","internalType":"uint32"},{"name":"duration","type":"uint32","internalType":"uint32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"createNewTask","inputs":[{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"batchDataPointer","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"delegation","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IDelegationManager"}],"stateMutability":"view"},{"type":"function","name":"deregisterOperatorFromAVS","inputs":[{"name":"operator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getOperatorRestakedStrategies","inputs":[{"name":"operator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getRestakeableStrategies","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_initialOwner","type":"address","internalType":"address"},{"name":"_rewardsInitiator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"registerOperatorToAVS","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"operatorSignature","type":"tuple","internalType":"struct ISignatureUtils.SignatureWithSaltAndExpiry","components":[{"name":"signature","type":"bytes","internalType":"bytes"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"expiry","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registryCoordinator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IRegistryCoordinator"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"respondToTask","inputs":[{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"nonSignerStakesAndSignature","type":"tuple","internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","components":[{"name":"nonSignerQuorumBitmapIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerPubkeys","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApks","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApkIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"totalStakeIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerStakeIndices","type":"uint32[][]","internalType":"uint32[][]"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"respondToTaskV2","inputs":[{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"senderAddress","type":"address","internalType":"address"},{"name":"nonSignerStakesAndSignature","type":"tuple","internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","components":[{"name":"nonSignerQuorumBitmapIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerPubkeys","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApks","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApkIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"totalStakeIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerStakeIndices","type":"uint32[][]","internalType":"uint32[][]"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rewardsInitiator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"setRewardsInitiator","inputs":[{"name":"newRewardsInitiator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setStaleStakesForbidden","inputs":[{"name":"value","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stakeRegistry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IStakeRegistry"}],"stateMutability":"view"},{"type":"function","name":"staleStakesForbidden","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"trySignatureAndApkVerification","inputs":[{"name":"msgHash","type":"bytes32","internalType":"bytes32"},{"name":"apk","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]}],"outputs":[{"name":"pairingSuccessful","type":"bool","internalType":"bool"},{"name":"siganatureIsValid","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"updateAVSMetadataURI","inputs":[{"name":"_metadataURI","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifyBatchInclusion","inputs":[{"name":"proofCommitment","type":"bytes32","internalType":"bytes32"},{"name":"pubInputCommitment","type":"bytes32","internalType":"bytes32"},{"name":"provingSystemAuxDataCommitment","type":"bytes32","internalType":"bytes32"},{"name":"proofGeneratorAddr","type":"bytes20","internalType":"bytes20"},{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"merkleProof","type":"bytes","internalType":"bytes"},{"name":"verificationDataBatchIndex","type":"uint256","internalType":"uint256"},{"name":"senderAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"event","name":"BatchVerified","inputs":[{"name":"batchMerkleRoot","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"senderAddress","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"BatcherBalanceUpdated","inputs":[{"name":"batcher","type":"address","indexed":true,"internalType":"address"},{"name":"newBalance","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"NewBatch","inputs":[{"name":"batchMerkleRoot","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"taskCreatedBlock","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"batchDataPointer","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"NewBatchV2","inputs":[{"name":"batchMerkleRoot","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"senderAddress","type":"address","indexed":false,"internalType":"address"},{"name":"taskCreatedBlock","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"batchDataPointer","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RewardsInitiatorUpdated","inputs":[{"name":"prevRewardsInitiator","type":"address","indexed":false,"internalType":"address"},{"name":"newRewardsInitiator","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"StaleStakesForbiddenUpdate","inputs":[{"name":"value","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false}],"bytecode":{"object":"0x6101806040523480156200001257600080fd5b506040516200563b3803806200563b8339810160408190526200003591620002e5565b6001600160a01b0380851660805280841660a05280831660c052811660e0528184848284620000636200020a565b50505050806001600160a01b0316610100816001600160a01b031681525050806001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e791906200034d565b6001600160a01b0316610120816001600160a01b031681525050806001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000140573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016691906200034d565b6001600160a01b0316610140816001600160a01b031681525050610120516001600160a01b031663df5cf7236040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e891906200034d565b6001600160a01b03166101605250620002006200020a565b5050505062000374565b600054610100900460ff1615620002775760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620002ca576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620002e257600080fd5b50565b60008060008060808587031215620002fc57600080fd5b84516200030981620002cc565b60208601519094506200031c81620002cc565b60408601519093506200032f81620002cc565b60608601519092506200034281620002cc565b939692955090935050565b6000602082840312156200036057600080fd5b81516200036d81620002cc565b9392505050565b60805160a05160c05160e051610100516101205161014051610160516151b9620004826000396000818161061001526119dc01526000818161039d0152611bef0152600081816103e901528181611ddc0152611fcc015260008181610450015281816110f9015281816116980152818161183f0152611a90015260008181610e0e01528181610f690152818161100001528181612b0801528181612c8b0152612d2a015260008181610c3501528181610cc401528181610d4401528181612503015281816125cf01528181612a460152612be601526000818161305801528181613114015261320001526000818161041a015281816125570152818161262b01526126aa01526151b96000f3fe6080604052600436106101bb5760003560e01c8063715018a6116100ec578063b099627e1161008a578063e481af9d11610064578063e481af9d14610632578063f2fde38b14610647578063fc299dee14610667578063fce36c7d1461068757600080fd5b8063b099627e14610589578063b98d0908146105e4578063df5cf723146105fe57600080fd5b80639926ee7d116100c65780639926ee7d14610509578063a364f4da14610529578063a98fb35514610549578063ab21739a1461056957600080fd5b8063715018a6146104b65780638da5cb5b146104cb57806395c6d604146104e957600080fd5b80634ae07c3711610159578063683048351161013357806368304835146103d75780636b3aa72e1461040b5780636d14a9871461043e57806370a082311461047257600080fd5b80634ae07c371461034a5780635c008994146103785780635df459461461038b57600080fd5b806333cfb7b71161019557806333cfb7b7146102bd5780633bc28c8c146102ea578063416c7e5e1461030a578063485cc9551461032a57600080fd5b806306045a911461022f578063171f1d5b146102645780632dd94eba1461029b57600080fd5b3661022a5733600090815260ca6020526040812080543492906101df90849061406b565b909155505033600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a2005b600080fd5b34801561023b57600080fd5b5061024f61024a3660046141a7565b6106a7565b60405190151581526020015b60405180910390f35b34801561027057600080fd5b5061028461027f366004614308565b610786565b60408051921515835290151560208301520161025b565b3480156102a757600080fd5b506102bb6102b636600461460f565b610910565b005b3480156102c957600080fd5b506102dd6102d8366004614655565b610c10565b60405161025b9190614672565b3480156102f657600080fd5b506102bb610305366004614655565b6110e3565b34801561031657600080fd5b506102bb6103253660046146cd565b6110f7565b34801561033657600080fd5b506102bb6103453660046146ea565b61122e565b34801561035657600080fd5b5061036a610365366004614723565b611343565b60405161025b9291906147bd565b6102bb61038636600461484e565b612296565b34801561039757600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161025b565b3480156103e357600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561041757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103bf565b34801561044a57600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561047e57600080fd5b506104a861048d366004614655565b6001600160a01b0316600090815260ca602052604090205490565b60405190815260200161025b565b3480156104c257600080fd5b506102bb6124bf565b3480156104d757600080fd5b506033546001600160a01b03166103bf565b3480156104f557600080fd5b5061024f610504366004614899565b6124d3565b34801561051557600080fd5b506102bb6105243660046148e4565b6124f8565b34801561053557600080fd5b506102bb610544366004614655565b6125c4565b34801561055557600080fd5b506102bb61056436600461498f565b61268b565b34801561057557600080fd5b506102bb6105843660046149df565b6126df565b34801561059557600080fd5b506105c86105a4366004614a06565b60c96020526000908152604090205463ffffffff811690600160201b900460ff1682565b6040805163ffffffff909316835290151560208301520161025b565b3480156105f057600080fd5b5060975461024f9060ff1681565b34801561060a57600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561063e57600080fd5b506102dd612a40565b34801561065357600080fd5b506102bb610662366004614655565b612e09565b34801561067357600080fd5b506065546103bf906001600160a01b031681565b34801561069357600080fd5b506102bb6106a2366004614a1f565b612e7f565b60008085836040516020016106bd929190614a93565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff166106f957600091505061077a565b600081815260c96020526040902054600160201b900460ff1661072057600091505061077a565b60408051602081018c90529081018a9052606081018990526001600160601b03198816608082015260009060940160408051601f198184030181529190528051602082012090915061077487848389613237565b93505050505b98975050505050505050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878760000151886020015188600001516000600281106107ce576107ce614aae565b60200201518951600160200201518a602001516000600281106107f3576107f3614aae565b60200201518b6020015160016002811061080f5761080f614aae565b602090810291909101518c518d83015160405161086c9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c61088f9190614ac4565b90506109026108a86108a1888461324f565b86906132e6565b6108b061337a565b6108f86108e9856108e3604080518082018252600080825260209182015281518083019092526001825260029082015290565b9061324f565b6108f28c61343a565b906132e6565b886201d4c06134ca565b909890975095505050505050565b737969c5ed335650692bc04293b07f5bf2e7a673c060005a600085815260c9602052604090205490915063ffffffff166109885760405162461bcd60e51b8152602060048201526014602482015273426174636820646f65736e27742065786973747360601b60448201526064015b60405180910390fd5b600084815260c96020526040902054600160201b900460ff16156109e85760405162461bcd60e51b815260206004820152601760248201527610985d18da08185b1c9958591e481c995cdc1bdb991959604a1b604482015260640161097f565b6001600160a01b038216600090815260ca6020526040902054610a465760405162461bcd60e51b81526020600482015260166024820152754261746368657220686173206e6f2062616c616e636560501b604482015260640161097f565b600084815260c960205260408120805464ff00000000198116600160201b179091558190610a7c90879063ffffffff1687611343565b91509150604360ff168260200151600081518110610a9c57610a9c614aae565b6020026020010151610aae9190614ae6565b6001600160601b031660648360000151600081518110610ad057610ad0614aae565b60200260200101516001600160601b0316610aeb9190614b15565b1015610b095760405162461bcd60e51b815260040161097f90614b34565b6040516001600160a01b038516815286907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a610b598387614b92565b610b66906201117061406b565b610b709190614b15565b6001600160a01b038716600090815260ca6020526040902054909150811115610bab5760405162461bcd60e51b815260040161097f90614ba9565b6001600160a01b038616600090815260ca602052604081208054839290610bd3908490614b92565b9091555050604051339082156108fc029083906000818181858888f19350505050158015610c05573d6000803e3d6000fd5b505050505050505050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90602401602060405180830381865afa158015610c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca09190614c06565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa158015610d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2f9190614c1f565b90506001600160c01b0381161580610dc957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc49190614c48565b60ff16155b15610de95760408051600080825260208201909252905b50949350505050565b6000610dfd826001600160c01b03166136ee565b90506000805b8251811015610ed3577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f5848381518110610e4d57610e4d614aae565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb59190614c06565b610ebf908361406b565b915080610ecb81614c6b565b915050610e03565b506000816001600160401b03811115610eee57610eee614083565b604051908082528060200260200182016040528015610f17578160200160208202803683370190505b5090506000805b84518110156110d6576000858281518110610f3b57610f3b614aae565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610fb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd49190614c06565b905060005b818110156110c0576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa15801561104e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110729190614c9b565b6000015186868151811061108857611088614aae565b6001600160a01b0390921660209283029190910190910152846110aa81614c6b565b95505080806110b890614c6b565b915050610fd9565b50505080806110ce90614c6b565b915050610f1e565b5090979650505050505050565b6110eb6137b0565b6110f48161380a565b50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611155573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111799190614cdc565b6001600160a01b0316336001600160a01b0316146112255760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a40161097f565b6110f481613873565b600054610100900460ff161580801561124e5750600054600160ff909116105b806112685750303b158015611268575060005460ff166001145b6112cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161097f565b6000805460ff1916600117905580156112ee576000805461ff0019166101001790555b6112f883836138ba565b801561133e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040805180820190915260608082526020820152600082604001515160405180604001604052806001815260200160008152505114801561139f57508260a0015151604051806040016040528060018152602001600081525051145b80156113c657508260c0015151604051806040016040528060018152602001600081525051145b80156113ed57508260e0015151604051806040016040528060018152602001600081525051145b6114575760405162461bcd60e51b8152602060048201526041602482015260008051602061516483398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a40161097f565b825151602084015151146114cf5760405162461bcd60e51b815260206004820152604460248201819052600080516020615164833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a40161097f565b4363ffffffff168463ffffffff161061153e5760405162461bcd60e51b815260206004820152603c602482015260008051602061516483398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b00000000606482015260840161097f565b60408051808201825260008082526020808301829052835180850185526060808252818301528451808601865260018082529083019390935284518381528086019095529293919082810190803683370190505060208281019190915260408051808201825260018082526000919093015280518281528082019091529081602001602082028036833701905050815260408051808201909152606080825260208201528560200151516001600160401b038111156115ff576115ff614083565b604051908082528060200260200182016040528015611628578160200160208202803683370190505b5081526020860151516001600160401b0381111561164857611648614083565b604051908082528060200260200182016040528015611671578160200160208202803683370190505b508160200181905250600061171d60405180604001604052806001815260200160008152507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117189190614c48565b61393b565b905060005b8760200151518110156119b8576117678860200151828151811061174857611748614aae565b6020026020010151805160009081526020918201519091526040902090565b8360200151828151811061177d5761177d614aae565b6020908102919091010152801561183d57602083015161179e600183614b92565b815181106117ae576117ae614aae565b602002602001015160001c836020015182815181106117cf576117cf614aae565b602002602001015160001c1161183d576040805162461bcd60e51b815260206004820152602481019190915260008051602061516483398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f72746564606482015260840161097f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec63518460200151838151811061188257611882614aae565b60200260200101518b8b6000015185815181106118a1576118a1614aae565b60200260200101516040518463ffffffff1660e01b81526004016118de9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa1580156118fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191f9190614c1f565b6001600160c01b03168360000151828151811061193e5761193e614aae565b6020026020010181815250506119a46108a1611978848660000151858151811061196a5761196a614aae565b6020026020010151166139ce565b8a60200151848151811061198e5761198e614aae565b60200260200101516139f990919063ffffffff16565b9450806119b081614c6b565b915050611722565b50506119c383613add565b60975490935060ff166000816119da576000611a5c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190614c06565b905060005b604051806040016040528060018152602001600081525051811015612167578215611bed578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c4260405180604001604052806001815260200160008152508581518110611ae557611ae5614aae565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015611b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4d9190614c06565b611b57919061406b565b11611bed5760405162461bcd60e51b8152602060048201526066602482015260008051602061516483398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c40161097f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac60405180604001604052806001815260200160008152508381518110611c4457611c44614aae565b602001015160f81c60f81b60f81c8c8c60a001518581518110611c6957611c69614aae565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611cc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce99190614cf9565b6001600160401b031916611d0c8a60400151838151811061174857611748614aae565b67ffffffffffffffff191614611da85760405162461bcd60e51b8152602060048201526061602482015260008051602061516483398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c40161097f565b611dd889604001518281518110611dc157611dc1614aae565b6020026020010151876132e690919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c5660405180604001604052806001815260200160008152508381518110611e3157611e31614aae565b602001015160f81c60f81b60f81c8c8c60c001518581518110611e5657611e56614aae565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed69190614d24565b85602001518281518110611eec57611eec614aae565b6001600160601b03909216602092830291909101820152850151805182908110611f1857611f18614aae565b602002602001015185600001518281518110611f3657611f36614aae565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a602001515181101561215257611fc586600001518281518110611f8057611f80614aae565b602002602001015160405180604001604052806001815260200160008152508581518110611fb057611fb0614aae565b016020015160f81c60ff161c60019081161490565b15612140577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae6040518060400160405280600181526020016000815250858151811061202157612021614aae565b602001015160f81c60f81b60f81c8e8960200151858151811061204657612046614aae565b60200260200101518f60e00151888151811061206457612064614aae565b6020026020010151878151811061207d5761207d614aae565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa1580156120e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121059190614d24565b875180518590811061211957612119614aae565b6020026020010181815161212d9190614d41565b6001600160601b03169052506001909101905b8061214a81614c6b565b915050611f5a565b5050808061215f90614c6b565b915050611a61565b5050506000806121818a868a606001518b60800151610786565b91509150816121f25760405162461bcd60e51b8152602060048201526043602482015260008051602061516483398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a40161097f565b806122535760405162461bcd60e51b8152602060048201526039602482015260008051602061516483398151915260448201527f7265733a207369676e617475726520697320696e76616c696400000000000000606482015260840161097f565b5050600087826020015160405160200161226e929190614d69565b60408051808303601f1901815291905280516020909101209299929850919650505050505050565b600083336040516020016122ab929190614a93565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff16156123265760405162461bcd60e51b815260206004820152601b60248201527f42617463682077617320616c7265616479207375626d69747465640000000000604482015260640161097f565b34156123955733600090815260ca60205260408120805434929061234b90849061406b565b909155505033600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a25b33600090815260ca60205260409020546123f15760405162461bcd60e51b815260206004820152601860248201527f426174636865722062616c616e636520697320656d7074790000000000000000604482015260640161097f565b6040805180820182526000602080830182815263ffffffff43818116865287855260c9909352928590208451815492511515600160201b0264ffffffffff19909316941693909317179091559151909186917f1871c33134a542e0ab9facf7013d27b9ed95e64d299e9919ee091c9cfcb19fa5916124729188908890614dda565b60405180910390a2847f130d3e81af62e03ed6fff5e3bb343695ec513892cfad24d286486745dcc61437334387876040516124b09493929190614e03565b60405180910390a25050505050565b6124c76137b0565b6124d16000613b78565b565b60008184846040516124e6929190614e3e565b60405180910390201490509392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146125405760405162461bcd60e51b815260040161097f90614e4e565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d9061258e9085908590600401614f13565b600060405180830381600087803b1580156125a857600080fd5b505af11580156125bc573d6000803e3d6000fd5b505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461260c5760405162461bcd60e51b815260040161097f90614e4e565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da906024015b600060405180830381600087803b15801561267057600080fd5b505af1158015612684573d6000803e3d6000fd5b5050505050565b6126936137b0565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb35590612656908490600401614f5e565b60005a9050600084846040516020016126f9929190614a93565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff1661276a5760405162461bcd60e51b8152602060048201526014602482015273426174636820646f65736e27742065786973747360601b604482015260640161097f565b600081815260c96020526040902054600160201b900460ff16156127ca5760405162461bcd60e51b815260206004820152601760248201527610985d18da08185b1c9958591e481c995cdc1bdb991959604a1b604482015260640161097f565b6001600160a01b038416600090815260ca60205260409020546128285760405162461bcd60e51b81526020600482015260166024820152754261746368657220686173206e6f2062616c616e636560501b604482015260640161097f565b600081815260c960205260408120805464ff00000000198116600160201b17909155819061285e90849063ffffffff1687611343565b91509150604360ff16826020015160008151811061287e5761287e614aae565b60200260200101516128909190614ae6565b6001600160601b0316606483600001516000815181106128b2576128b2614aae565b60200260200101516001600160601b03166128cd9190614b15565b10156128eb5760405162461bcd60e51b815260040161097f90614b34565b6040516001600160a01b038716815287907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a61293b8388614b92565b612948906201117061406b565b6129529190614b15565b6001600160a01b038916600090815260ca602052604090205490915081111561298d5760405162461bcd60e51b815260040161097f90614ba9565b6001600160a01b038816600090815260ca6020526040812080548392906129b5908490614b92565b90915550506001600160a01b038816600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015612a34573d6000803e3d6000fd5b50505050505050505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac69190614c48565b60ff16905080612ae457505060408051600081526020810190915290565b6000805b82811015612b9957604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612b57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b7b9190614c06565b612b85908361406b565b915080612b9181614c6b565b915050612ae8565b506000816001600160401b03811115612bb457612bb4614083565b604051908082528060200260200182016040528015612bdd578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c669190614c48565b60ff16811015612dff57604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe9190614c06565b905060005b81811015612dea576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015612d78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9c9190614c9b565b60000151858581518110612db257612db2614aae565b6001600160a01b039092166020928302919091019091015283612dd481614c6b565b9450508080612de290614c6b565b915050612d03565b50508080612df790614c6b565b915050612be4565b5090949350505050565b612e116137b0565b6001600160a01b038116612e765760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161097f565b6110f481613b78565b6065546001600160a01b03163314612f145760405162461bcd60e51b815260206004820152604c60248201527f536572766963654d616e61676572426173652e6f6e6c7952657761726473496e60448201527f69746961746f723a2063616c6c6572206973206e6f742074686520726577617260648201526b32399034b734ba34b0ba37b960a11b608482015260a40161097f565b60005b818110156131e857828282818110612f3157612f31614aae565b9050602002810190612f439190614f71565b612f54906040810190602001614655565b6001600160a01b03166323b872dd3330868686818110612f7657612f76614aae565b9050602002810190612f889190614f71565b604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152013560448201526064016020604051808303816000875af1158015612fdf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130039190614f9c565b50600083838381811061301857613018614aae565b905060200281019061302a9190614f71565b61303b906040810190602001614655565b604051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa1580156130a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130cd9190614c06565b90508383838181106130e1576130e1614aae565b90506020028101906130f39190614f71565b613104906040810190602001614655565b6001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000008387878781811061314657613146614aae565b90506020028101906131589190614f71565b60400135613166919061406b565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156131b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d59190614f9c565b5050806131e190614c6b565b9050612f17565b5060405163fce36c7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fce36c7d9061258e9085908590600401615014565b600083613245868585613bca565b1495945050505050565b604080518082019091526000808252602082015261326b613f7b565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa905080801561329e576132a0565bfe5b50806132de5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b604482015260640161097f565b505092915050565b6040805180820190915260008082526020820152613302613f99565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa905080801561329e5750806132de5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b604482015260640161097f565b613382613fb7565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201909152600080825260208201526000808061346a60008051602061514483398151915286614ac4565b90505b61347681613cc4565b90935091506000805160206151448339815191528283098314156134b0576040805180820190915290815260208101919091529392505050565b60008051602061514483398151915260018208905061346d565b6040805180820182528681526020808201869052825180840190935286835282018490526000918291906134fc613fdc565b60005b60028110156136c1576000613515826006614b15565b905084826002811061352957613529614aae565b6020020151518361353b83600061406b565b600c811061354b5761354b614aae565b602002015284826002811061356257613562614aae565b60200201516020015183826001613579919061406b565b600c811061358957613589614aae565b60200201528382600281106135a0576135a0614aae565b60200201515151836135b383600261406b565b600c81106135c3576135c3614aae565b60200201528382600281106135da576135da614aae565b60200201515160016020020151836135f383600361406b565b600c811061360357613603614aae565b602002015283826002811061361a5761361a614aae565b60200201516020015160006002811061363557613635614aae565b60200201518361364683600461406b565b600c811061365657613656614aae565b602002015283826002811061366d5761366d614aae565b60200201516020015160016002811061368857613688614aae565b60200201518361369983600561406b565b600c81106136a9576136a9614aae565b602002015250806136b981614c6b565b9150506134ff565b506136ca613ffb565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b60606000806136fc846139ce565b61ffff166001600160401b0381111561371757613717614083565b6040519080825280601f01601f191660200182016040528015613741576020820181803683370190505b5090506000805b825182108015613759575061010081105b15612dff576001811b9350858416156137a0578060f81b83838151811061378257613782614aae565b60200101906001600160f81b031916908160001a9053508160010191505b6137a981614c6b565b9050613748565b6033546001600160a01b031633146124d15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161097f565b606554604080516001600160a01b03928316815291831660208301527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b600054610100900460ff166139255760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161097f565b61392e82613b78565b6139378161380a565b5050565b60008061394784613d46565b9050808360ff166001901b116139c55760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c756500606482015260840161097f565b90505b92915050565b6000805b82156139c8576139e3600184614b92565b90921691806139f181615121565b9150506139d2565b60408051808201909152600080825260208201526102008261ffff1610613a555760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b604482015260640161097f565b8161ffff1660011415613a695750816139c8565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610613ad257600161ffff871660ff83161c81161415613ab557613ab284846132e6565b93505b613abf83846132e6565b92506201fffe600192831b169101613a85565b509195945050505050565b60408051808201909152600080825260208201528151158015613b0257506020820151155b15613b20575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206151448339815191528460200151613b539190614ac4565b613b6b90600080516020615144833981519152614b92565b905292915050565b919050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208451613bda9190614ac4565b15613c615760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a40161097f565b8260205b85518111610de057613c78600285614ac4565b613c9957816000528086015160205260406000209150600284049350613cb2565b8086015160005281602052604060002091506002840493505b613cbd60208261406b565b9050613c65565b60008080600080516020615144833981519152600360008051602061514483398151915286600080516020615144833981519152888909090890506000613d3a827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615144833981519152613ed3565b91959194509092505050565b600061010082511115613dcf5760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161097f565b8151613ddd57506000919050565b60008083600081518110613df357613df3614aae565b0160200151600160f89190911c81901b92505b8451811015613eca57848181518110613e2157613e21614aae565b0160200151600160f89190911c1b9150828211613eb65760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161097f565b91811791613ec381614c6b565b9050613e06565b50909392505050565b600080613ede613ffb565b613ee6614019565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa925082801561329e575082613f705760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c757265000000000000604482015260640161097f565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613fca614037565b8152602001613fd7614037565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561407e5761407e614055565b500190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156140bb576140bb614083565b60405290565b60405161010081016001600160401b03811182821017156140bb576140bb614083565b604051601f8201601f191681016001600160401b038111828210171561410c5761410c614083565b604052919050565b60006001600160401b0383111561412d5761412d614083565b614140601f8401601f19166020016140e4565b905082815283838301111561415457600080fd5b828260208301376000602084830101529392505050565b600082601f83011261417c57600080fd5b61418b83833560208501614114565b9392505050565b6001600160a01b03811681146110f457600080fd5b600080600080600080600080610100898b0312156141c457600080fd5b88359750602089013596506040890135955060608901356001600160601b0319811681146141f157600080fd5b94506080890135935060a08901356001600160401b0381111561421357600080fd5b61421f8b828c0161416b565b93505060c0890135915060e089013561423781614192565b809150509295985092959890939650565b60006040828403121561425a57600080fd5b614262614099565b9050813581526020820135602082015292915050565b600082601f83011261428957600080fd5b614291614099565b8060408401858111156142a357600080fd5b845b818110156142bd5780358452602093840193016142a5565b509095945050505050565b6000608082840312156142da57600080fd5b6142e2614099565b90506142ee8383614278565b81526142fd8360408401614278565b602082015292915050565b600080600080610120858703121561431f57600080fd5b843593506143308660208701614248565b925061433f86606087016142c8565b915061434e8660e08701614248565b905092959194509250565b60006001600160401b0382111561437257614372614083565b5060051b60200190565b803563ffffffff81168114613b7357600080fd5b600082601f8301126143a157600080fd5b813560206143b66143b183614359565b6140e4565b82815260059290921b840181019181810190868411156143d557600080fd5b8286015b848110156143f7576143ea8161437c565b83529183019183016143d9565b509695505050505050565b600082601f83011261441357600080fd5b813560206144236143b183614359565b82815260069290921b8401810191818101908684111561444257600080fd5b8286015b848110156143f7576144588882614248565b835291830191604001614446565b600082601f83011261447757600080fd5b813560206144876143b183614359565b82815260059290921b840181019181810190868411156144a657600080fd5b8286015b848110156143f75780356001600160401b038111156144c95760008081fd5b6144d78986838b0101614390565b8452509183019183016144aa565b600061018082840312156144f857600080fd5b6145006140c1565b905081356001600160401b038082111561451957600080fd5b61452585838601614390565b8352602084013591508082111561453b57600080fd5b61454785838601614402565b6020840152604084013591508082111561456057600080fd5b61456c85838601614402565b604084015261457e85606086016142c8565b60608401526145908560e08601614248565b60808401526101208401359150808211156145aa57600080fd5b6145b685838601614390565b60a08401526101408401359150808211156145d057600080fd5b6145dc85838601614390565b60c08401526101608401359150808211156145f657600080fd5b5061460384828501614466565b60e08301525092915050565b6000806040838503121561462257600080fd5b8235915060208301356001600160401b0381111561463f57600080fd5b61464b858286016144e5565b9150509250929050565b60006020828403121561466757600080fd5b81356139c581614192565b6020808252825182820181905260009190848201906040850190845b818110156146b35783516001600160a01b03168352928401929184019160010161468e565b50909695505050505050565b80151581146110f457600080fd5b6000602082840312156146df57600080fd5b81356139c5816146bf565b600080604083850312156146fd57600080fd5b823561470881614192565b9150602083013561471881614192565b809150509250929050565b60008060006060848603121561473857600080fd5b833592506147486020850161437c565b915060408401356001600160401b0381111561476357600080fd5b61476f868287016144e5565b9150509250925092565b600081518084526020808501945080840160005b838110156147b25781516001600160601b03168752958201959082019060010161478d565b509495945050505050565b60408152600083516040808401526147d86080840182614779565b90506020850151603f198483030160608501526147f58282614779565b925050508260208301529392505050565b60008083601f84011261481857600080fd5b5081356001600160401b0381111561482f57600080fd5b60208301915083602082850101111561484757600080fd5b9250929050565b60008060006040848603121561486357600080fd5b8335925060208401356001600160401b0381111561488057600080fd5b61488c86828701614806565b9497909650939450505050565b6000806000604084860312156148ae57600080fd5b83356001600160401b038111156148c457600080fd5b6148d086828701614806565b909790965060209590950135949350505050565b600080604083850312156148f757600080fd5b823561490281614192565b915060208301356001600160401b038082111561491e57600080fd5b908401906060828703121561493257600080fd5b60405160608101818110838211171561494d5761494d614083565b60405282358281111561495f57600080fd5b61496b8882860161416b565b82525060208301356020820152604083013560408201528093505050509250929050565b6000602082840312156149a157600080fd5b81356001600160401b038111156149b757600080fd5b8201601f810184136149c857600080fd5b6149d784823560208401614114565b949350505050565b6000806000606084860312156149f457600080fd5b83359250602084013561474881614192565b600060208284031215614a1857600080fd5b5035919050565b60008060208385031215614a3257600080fd5b82356001600160401b0380821115614a4957600080fd5b818501915085601f830112614a5d57600080fd5b813581811115614a6c57600080fd5b8660208260051b8501011115614a8157600080fd5b60209290920196919550909350505050565b91825260601b6001600160601b031916602082015260340190565b634e487b7160e01b600052603260045260246000fd5b600082614ae157634e487b7160e01b600052601260045260246000fd5b500690565b60006001600160601b0380831681851681830481118215151615614b0c57614b0c614055565b02949350505050565b6000816000190483118215151615614b2f57614b2f614055565b500290565b602080825260409082018190527f5369676e61746f7269657320646f206e6f74206f776e206174206c6561737420908201527f7468726573686f6c642070657263656e74616765206f6620612071756f72756d606082015260800190565b600082821015614ba457614ba4614055565b500390565b6020808252603c908201527f4261746368657220686173206e6f742073756666696369656e742066756e647360408201527f20666f7220706179696e672074686973207472616e73616374696f6e00000000606082015260800190565b600060208284031215614c1857600080fd5b5051919050565b600060208284031215614c3157600080fd5b81516001600160c01b03811681146139c557600080fd5b600060208284031215614c5a57600080fd5b815160ff811681146139c557600080fd5b6000600019821415614c7f57614c7f614055565b5060010190565b6001600160601b03811681146110f457600080fd5b600060408284031215614cad57600080fd5b614cb5614099565b8251614cc081614192565b81526020830151614cd081614c86565b60208201529392505050565b600060208284031215614cee57600080fd5b81516139c581614192565b600060208284031215614d0b57600080fd5b815167ffffffffffffffff19811681146139c557600080fd5b600060208284031215614d3657600080fd5b81516139c581614c86565b60006001600160601b0383811690831681811015614d6157614d61614055565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015614da457815185529382019390820190600101614d88565b5092979650505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff84168152604060208201526000614dfa604083018486614db1565b95945050505050565b6001600160a01b038516815263ffffffff84166020820152606060408201819052600090614e349083018486614db1565b9695505050505050565b8183823760009101908152919050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015614eec57602081850181015186830182015201614ed0565b81811115614efe576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b0383168152604060208201526000825160606040840152614f3d60a0840182614ec6565b90506020840151606084015260408401516080840152809150509392505050565b60208152600061418b6020830184614ec6565b60008235609e19833603018112614f8757600080fd5b9190910192915050565b8035613b7381614192565b600060208284031215614fae57600080fd5b81516139c5816146bf565b8183526000602080850194508260005b858110156147b2578135614fdc81614192565b6001600160a01b0316875281830135614ff481614c86565b6001600160601b0316878401526040968701969190910190600101614fc9565b60208082528181018390526000906040808401600586901b8501820187855b8881101561511357878303603f190184528135368b9003609e1901811261505957600080fd5b8a0160a0813536839003601e1901811261507257600080fd5b820180356001600160401b0381111561508a57600080fd5b8060061b360384131561509c57600080fd5b8287526150ae838801828c8501614fb9565b925050506150bd888301614f91565b6001600160a01b031688860152818701358786015260606150df81840161437c565b63ffffffff169086015260806150f683820161437c565b63ffffffff16950194909452509285019290850190600101615033565b509098975050505050505050565b600061ffff8083168181141561513957615139614055565b600101939250505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47424c535369676e6174757265436865636b65722e636865636b5369676e617475a26469706673582212207c07849930c3fc43881ea132ac36e666158e05b68d72acd832cb538b6fe1a4cf64736f6c634300080c0033","sourceMap":"1015:10080:179:-:0;;;1837:455;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1590:30:121;;;;;1630:42;;;;;1682:44;;;;;1736:32;;;;2063:21:179;2126:14;2154:20;2063:21;2223:15;2276:22:120::1;:20;:22::i;:::-;1894:411:::0;;;;1793:20:114;-1:-1:-1;;;;;1771:42:114;;;-1:-1:-1;;;;;1771:42:114;;;;;1839:20;-1:-1:-1;;;;;1839:34:114;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1823:52:114;;;-1:-1:-1;;;;;1823:52:114;;;;;1902:20;-1:-1:-1;;;;;1902:35:114;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1885:54:114;;;-1:-1:-1;;;;;1885:54:114;;;;;1962:13;;-1:-1:-1;;;;;1962:24:114;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1949:39:114;;;-1:-1:-1;2263:22:179::2;:20;:22::i;:::-;1837:455:::0;;;;1015:10080;;5388:279:46;5456:13;;;;;;;5455:14;5447:66;;;;-1:-1:-1;;;5447:66:46;;2079:2:185;5447:66:46;;;2061:21:185;2118:2;2098:18;;;2091:30;2157:34;2137:18;;;2130:62;-1:-1:-1;;;2208:18:185;;;2201:37;2255:19;;5447:66:46;;;;;;;;5527:12;;5542:15;5527:12;;;:30;5523:138;;;5573:12;:30;;-1:-1:-1;;5573:30:46;5588:15;5573:30;;;;;;5622:28;;2427:36:185;;;5622:28:46;;2415:2:185;2400:18;5622:28:46;;;;;;;5523:138;5388:279::o;14:146:185:-;-1:-1:-1;;;;;104:31:185;;94:42;;84:70;;150:1;147;140:12;84:70;14:146;:::o;165:818::-;366:6;374;382;390;443:3;431:9;422:7;418:23;414:33;411:53;;;460:1;457;450:12;411:53;492:9;486:16;511:46;551:5;511:46;:::i;:::-;626:2;611:18;;605:25;576:5;;-1:-1:-1;639:48:185;605:25;639:48;:::i;:::-;758:2;743:18;;737:25;706:7;;-1:-1:-1;771:48:185;737:25;771:48;:::i;:::-;890:2;875:18;;869:25;838:7;;-1:-1:-1;903:48:185;869:25;903:48;:::i;:::-;165:818;;;;-1:-1:-1;165:818:185;;-1:-1:-1;;165:818:185:o;988:290::-;1082:6;1135:2;1123:9;1114:7;1110:23;1106:32;1103:52;;;1151:1;1148;1141:12;1103:52;1183:9;1177:16;1202:46;1242:5;1202:46;:::i;:::-;1267:5;988:290;-1:-1:-1;;;988:290:185:o;2285:184::-;1015:10080:179;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101bb5760003560e01c8063715018a6116100ec578063b099627e1161008a578063e481af9d11610064578063e481af9d14610632578063f2fde38b14610647578063fc299dee14610667578063fce36c7d1461068757600080fd5b8063b099627e14610589578063b98d0908146105e4578063df5cf723146105fe57600080fd5b80639926ee7d116100c65780639926ee7d14610509578063a364f4da14610529578063a98fb35514610549578063ab21739a1461056957600080fd5b8063715018a6146104b65780638da5cb5b146104cb57806395c6d604146104e957600080fd5b80634ae07c3711610159578063683048351161013357806368304835146103d75780636b3aa72e1461040b5780636d14a9871461043e57806370a082311461047257600080fd5b80634ae07c371461034a5780635c008994146103785780635df459461461038b57600080fd5b806333cfb7b71161019557806333cfb7b7146102bd5780633bc28c8c146102ea578063416c7e5e1461030a578063485cc9551461032a57600080fd5b806306045a911461022f578063171f1d5b146102645780632dd94eba1461029b57600080fd5b3661022a5733600090815260ca6020526040812080543492906101df90849061406b565b909155505033600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a2005b600080fd5b34801561023b57600080fd5b5061024f61024a3660046141a7565b6106a7565b60405190151581526020015b60405180910390f35b34801561027057600080fd5b5061028461027f366004614308565b610786565b60408051921515835290151560208301520161025b565b3480156102a757600080fd5b506102bb6102b636600461460f565b610910565b005b3480156102c957600080fd5b506102dd6102d8366004614655565b610c10565b60405161025b9190614672565b3480156102f657600080fd5b506102bb610305366004614655565b6110e3565b34801561031657600080fd5b506102bb6103253660046146cd565b6110f7565b34801561033657600080fd5b506102bb6103453660046146ea565b61122e565b34801561035657600080fd5b5061036a610365366004614723565b611343565b60405161025b9291906147bd565b6102bb61038636600461484e565b612296565b34801561039757600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161025b565b3480156103e357600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561041757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103bf565b34801561044a57600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561047e57600080fd5b506104a861048d366004614655565b6001600160a01b0316600090815260ca602052604090205490565b60405190815260200161025b565b3480156104c257600080fd5b506102bb6124bf565b3480156104d757600080fd5b506033546001600160a01b03166103bf565b3480156104f557600080fd5b5061024f610504366004614899565b6124d3565b34801561051557600080fd5b506102bb6105243660046148e4565b6124f8565b34801561053557600080fd5b506102bb610544366004614655565b6125c4565b34801561055557600080fd5b506102bb61056436600461498f565b61268b565b34801561057557600080fd5b506102bb6105843660046149df565b6126df565b34801561059557600080fd5b506105c86105a4366004614a06565b60c96020526000908152604090205463ffffffff811690600160201b900460ff1682565b6040805163ffffffff909316835290151560208301520161025b565b3480156105f057600080fd5b5060975461024f9060ff1681565b34801561060a57600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561063e57600080fd5b506102dd612a40565b34801561065357600080fd5b506102bb610662366004614655565b612e09565b34801561067357600080fd5b506065546103bf906001600160a01b031681565b34801561069357600080fd5b506102bb6106a2366004614a1f565b612e7f565b60008085836040516020016106bd929190614a93565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff166106f957600091505061077a565b600081815260c96020526040902054600160201b900460ff1661072057600091505061077a565b60408051602081018c90529081018a9052606081018990526001600160601b03198816608082015260009060940160408051601f198184030181529190528051602082012090915061077487848389613237565b93505050505b98975050505050505050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878760000151886020015188600001516000600281106107ce576107ce614aae565b60200201518951600160200201518a602001516000600281106107f3576107f3614aae565b60200201518b6020015160016002811061080f5761080f614aae565b602090810291909101518c518d83015160405161086c9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c61088f9190614ac4565b90506109026108a86108a1888461324f565b86906132e6565b6108b061337a565b6108f86108e9856108e3604080518082018252600080825260209182015281518083019092526001825260029082015290565b9061324f565b6108f28c61343a565b906132e6565b886201d4c06134ca565b909890975095505050505050565b737969c5ed335650692bc04293b07f5bf2e7a673c060005a600085815260c9602052604090205490915063ffffffff166109885760405162461bcd60e51b8152602060048201526014602482015273426174636820646f65736e27742065786973747360601b60448201526064015b60405180910390fd5b600084815260c96020526040902054600160201b900460ff16156109e85760405162461bcd60e51b815260206004820152601760248201527610985d18da08185b1c9958591e481c995cdc1bdb991959604a1b604482015260640161097f565b6001600160a01b038216600090815260ca6020526040902054610a465760405162461bcd60e51b81526020600482015260166024820152754261746368657220686173206e6f2062616c616e636560501b604482015260640161097f565b600084815260c960205260408120805464ff00000000198116600160201b179091558190610a7c90879063ffffffff1687611343565b91509150604360ff168260200151600081518110610a9c57610a9c614aae565b6020026020010151610aae9190614ae6565b6001600160601b031660648360000151600081518110610ad057610ad0614aae565b60200260200101516001600160601b0316610aeb9190614b15565b1015610b095760405162461bcd60e51b815260040161097f90614b34565b6040516001600160a01b038516815286907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a610b598387614b92565b610b66906201117061406b565b610b709190614b15565b6001600160a01b038716600090815260ca6020526040902054909150811115610bab5760405162461bcd60e51b815260040161097f90614ba9565b6001600160a01b038616600090815260ca602052604081208054839290610bd3908490614b92565b9091555050604051339082156108fc029083906000818181858888f19350505050158015610c05573d6000803e3d6000fd5b505050505050505050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90602401602060405180830381865afa158015610c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca09190614c06565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa158015610d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2f9190614c1f565b90506001600160c01b0381161580610dc957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc49190614c48565b60ff16155b15610de95760408051600080825260208201909252905b50949350505050565b6000610dfd826001600160c01b03166136ee565b90506000805b8251811015610ed3577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f5848381518110610e4d57610e4d614aae565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb59190614c06565b610ebf908361406b565b915080610ecb81614c6b565b915050610e03565b506000816001600160401b03811115610eee57610eee614083565b604051908082528060200260200182016040528015610f17578160200160208202803683370190505b5090506000805b84518110156110d6576000858281518110610f3b57610f3b614aae565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610fb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd49190614c06565b905060005b818110156110c0576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa15801561104e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110729190614c9b565b6000015186868151811061108857611088614aae565b6001600160a01b0390921660209283029190910190910152846110aa81614c6b565b95505080806110b890614c6b565b915050610fd9565b50505080806110ce90614c6b565b915050610f1e565b5090979650505050505050565b6110eb6137b0565b6110f48161380a565b50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611155573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111799190614cdc565b6001600160a01b0316336001600160a01b0316146112255760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a40161097f565b6110f481613873565b600054610100900460ff161580801561124e5750600054600160ff909116105b806112685750303b158015611268575060005460ff166001145b6112cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161097f565b6000805460ff1916600117905580156112ee576000805461ff0019166101001790555b6112f883836138ba565b801561133e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040805180820190915260608082526020820152600082604001515160405180604001604052806001815260200160008152505114801561139f57508260a0015151604051806040016040528060018152602001600081525051145b80156113c657508260c0015151604051806040016040528060018152602001600081525051145b80156113ed57508260e0015151604051806040016040528060018152602001600081525051145b6114575760405162461bcd60e51b8152602060048201526041602482015260008051602061516483398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a40161097f565b825151602084015151146114cf5760405162461bcd60e51b815260206004820152604460248201819052600080516020615164833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a40161097f565b4363ffffffff168463ffffffff161061153e5760405162461bcd60e51b815260206004820152603c602482015260008051602061516483398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b00000000606482015260840161097f565b60408051808201825260008082526020808301829052835180850185526060808252818301528451808601865260018082529083019390935284518381528086019095529293919082810190803683370190505060208281019190915260408051808201825260018082526000919093015280518281528082019091529081602001602082028036833701905050815260408051808201909152606080825260208201528560200151516001600160401b038111156115ff576115ff614083565b604051908082528060200260200182016040528015611628578160200160208202803683370190505b5081526020860151516001600160401b0381111561164857611648614083565b604051908082528060200260200182016040528015611671578160200160208202803683370190505b508160200181905250600061171d60405180604001604052806001815260200160008152507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117189190614c48565b61393b565b905060005b8760200151518110156119b8576117678860200151828151811061174857611748614aae565b6020026020010151805160009081526020918201519091526040902090565b8360200151828151811061177d5761177d614aae565b6020908102919091010152801561183d57602083015161179e600183614b92565b815181106117ae576117ae614aae565b602002602001015160001c836020015182815181106117cf576117cf614aae565b602002602001015160001c1161183d576040805162461bcd60e51b815260206004820152602481019190915260008051602061516483398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f72746564606482015260840161097f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec63518460200151838151811061188257611882614aae565b60200260200101518b8b6000015185815181106118a1576118a1614aae565b60200260200101516040518463ffffffff1660e01b81526004016118de9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa1580156118fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191f9190614c1f565b6001600160c01b03168360000151828151811061193e5761193e614aae565b6020026020010181815250506119a46108a1611978848660000151858151811061196a5761196a614aae565b6020026020010151166139ce565b8a60200151848151811061198e5761198e614aae565b60200260200101516139f990919063ffffffff16565b9450806119b081614c6b565b915050611722565b50506119c383613add565b60975490935060ff166000816119da576000611a5c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190614c06565b905060005b604051806040016040528060018152602001600081525051811015612167578215611bed578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c4260405180604001604052806001815260200160008152508581518110611ae557611ae5614aae565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015611b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4d9190614c06565b611b57919061406b565b11611bed5760405162461bcd60e51b8152602060048201526066602482015260008051602061516483398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c40161097f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac60405180604001604052806001815260200160008152508381518110611c4457611c44614aae565b602001015160f81c60f81b60f81c8c8c60a001518581518110611c6957611c69614aae565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611cc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce99190614cf9565b6001600160401b031916611d0c8a60400151838151811061174857611748614aae565b67ffffffffffffffff191614611da85760405162461bcd60e51b8152602060048201526061602482015260008051602061516483398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c40161097f565b611dd889604001518281518110611dc157611dc1614aae565b6020026020010151876132e690919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c5660405180604001604052806001815260200160008152508381518110611e3157611e31614aae565b602001015160f81c60f81b60f81c8c8c60c001518581518110611e5657611e56614aae565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed69190614d24565b85602001518281518110611eec57611eec614aae565b6001600160601b03909216602092830291909101820152850151805182908110611f1857611f18614aae565b602002602001015185600001518281518110611f3657611f36614aae565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a602001515181101561215257611fc586600001518281518110611f8057611f80614aae565b602002602001015160405180604001604052806001815260200160008152508581518110611fb057611fb0614aae565b016020015160f81c60ff161c60019081161490565b15612140577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae6040518060400160405280600181526020016000815250858151811061202157612021614aae565b602001015160f81c60f81b60f81c8e8960200151858151811061204657612046614aae565b60200260200101518f60e00151888151811061206457612064614aae565b6020026020010151878151811061207d5761207d614aae565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa1580156120e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121059190614d24565b875180518590811061211957612119614aae565b6020026020010181815161212d9190614d41565b6001600160601b03169052506001909101905b8061214a81614c6b565b915050611f5a565b5050808061215f90614c6b565b915050611a61565b5050506000806121818a868a606001518b60800151610786565b91509150816121f25760405162461bcd60e51b8152602060048201526043602482015260008051602061516483398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a40161097f565b806122535760405162461bcd60e51b8152602060048201526039602482015260008051602061516483398151915260448201527f7265733a207369676e617475726520697320696e76616c696400000000000000606482015260840161097f565b5050600087826020015160405160200161226e929190614d69565b60408051808303601f1901815291905280516020909101209299929850919650505050505050565b600083336040516020016122ab929190614a93565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff16156123265760405162461bcd60e51b815260206004820152601b60248201527f42617463682077617320616c7265616479207375626d69747465640000000000604482015260640161097f565b34156123955733600090815260ca60205260408120805434929061234b90849061406b565b909155505033600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a25b33600090815260ca60205260409020546123f15760405162461bcd60e51b815260206004820152601860248201527f426174636865722062616c616e636520697320656d7074790000000000000000604482015260640161097f565b6040805180820182526000602080830182815263ffffffff43818116865287855260c9909352928590208451815492511515600160201b0264ffffffffff19909316941693909317179091559151909186917f1871c33134a542e0ab9facf7013d27b9ed95e64d299e9919ee091c9cfcb19fa5916124729188908890614dda565b60405180910390a2847f130d3e81af62e03ed6fff5e3bb343695ec513892cfad24d286486745dcc61437334387876040516124b09493929190614e03565b60405180910390a25050505050565b6124c76137b0565b6124d16000613b78565b565b60008184846040516124e6929190614e3e565b60405180910390201490509392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146125405760405162461bcd60e51b815260040161097f90614e4e565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d9061258e9085908590600401614f13565b600060405180830381600087803b1580156125a857600080fd5b505af11580156125bc573d6000803e3d6000fd5b505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461260c5760405162461bcd60e51b815260040161097f90614e4e565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da906024015b600060405180830381600087803b15801561267057600080fd5b505af1158015612684573d6000803e3d6000fd5b5050505050565b6126936137b0565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb35590612656908490600401614f5e565b60005a9050600084846040516020016126f9929190614a93565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff1661276a5760405162461bcd60e51b8152602060048201526014602482015273426174636820646f65736e27742065786973747360601b604482015260640161097f565b600081815260c96020526040902054600160201b900460ff16156127ca5760405162461bcd60e51b815260206004820152601760248201527610985d18da08185b1c9958591e481c995cdc1bdb991959604a1b604482015260640161097f565b6001600160a01b038416600090815260ca60205260409020546128285760405162461bcd60e51b81526020600482015260166024820152754261746368657220686173206e6f2062616c616e636560501b604482015260640161097f565b600081815260c960205260408120805464ff00000000198116600160201b17909155819061285e90849063ffffffff1687611343565b91509150604360ff16826020015160008151811061287e5761287e614aae565b60200260200101516128909190614ae6565b6001600160601b0316606483600001516000815181106128b2576128b2614aae565b60200260200101516001600160601b03166128cd9190614b15565b10156128eb5760405162461bcd60e51b815260040161097f90614b34565b6040516001600160a01b038716815287907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a61293b8388614b92565b612948906201117061406b565b6129529190614b15565b6001600160a01b038916600090815260ca602052604090205490915081111561298d5760405162461bcd60e51b815260040161097f90614ba9565b6001600160a01b038816600090815260ca6020526040812080548392906129b5908490614b92565b90915550506001600160a01b038816600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015612a34573d6000803e3d6000fd5b50505050505050505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac69190614c48565b60ff16905080612ae457505060408051600081526020810190915290565b6000805b82811015612b9957604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612b57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b7b9190614c06565b612b85908361406b565b915080612b9181614c6b565b915050612ae8565b506000816001600160401b03811115612bb457612bb4614083565b604051908082528060200260200182016040528015612bdd578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c669190614c48565b60ff16811015612dff57604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe9190614c06565b905060005b81811015612dea576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015612d78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9c9190614c9b565b60000151858581518110612db257612db2614aae565b6001600160a01b039092166020928302919091019091015283612dd481614c6b565b9450508080612de290614c6b565b915050612d03565b50508080612df790614c6b565b915050612be4565b5090949350505050565b612e116137b0565b6001600160a01b038116612e765760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161097f565b6110f481613b78565b6065546001600160a01b03163314612f145760405162461bcd60e51b815260206004820152604c60248201527f536572766963654d616e61676572426173652e6f6e6c7952657761726473496e60448201527f69746961746f723a2063616c6c6572206973206e6f742074686520726577617260648201526b32399034b734ba34b0ba37b960a11b608482015260a40161097f565b60005b818110156131e857828282818110612f3157612f31614aae565b9050602002810190612f439190614f71565b612f54906040810190602001614655565b6001600160a01b03166323b872dd3330868686818110612f7657612f76614aae565b9050602002810190612f889190614f71565b604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152013560448201526064016020604051808303816000875af1158015612fdf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130039190614f9c565b50600083838381811061301857613018614aae565b905060200281019061302a9190614f71565b61303b906040810190602001614655565b604051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa1580156130a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130cd9190614c06565b90508383838181106130e1576130e1614aae565b90506020028101906130f39190614f71565b613104906040810190602001614655565b6001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000008387878781811061314657613146614aae565b90506020028101906131589190614f71565b60400135613166919061406b565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156131b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d59190614f9c565b5050806131e190614c6b565b9050612f17565b5060405163fce36c7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fce36c7d9061258e9085908590600401615014565b600083613245868585613bca565b1495945050505050565b604080518082019091526000808252602082015261326b613f7b565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa905080801561329e576132a0565bfe5b50806132de5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b604482015260640161097f565b505092915050565b6040805180820190915260008082526020820152613302613f99565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa905080801561329e5750806132de5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b604482015260640161097f565b613382613fb7565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201909152600080825260208201526000808061346a60008051602061514483398151915286614ac4565b90505b61347681613cc4565b90935091506000805160206151448339815191528283098314156134b0576040805180820190915290815260208101919091529392505050565b60008051602061514483398151915260018208905061346d565b6040805180820182528681526020808201869052825180840190935286835282018490526000918291906134fc613fdc565b60005b60028110156136c1576000613515826006614b15565b905084826002811061352957613529614aae565b6020020151518361353b83600061406b565b600c811061354b5761354b614aae565b602002015284826002811061356257613562614aae565b60200201516020015183826001613579919061406b565b600c811061358957613589614aae565b60200201528382600281106135a0576135a0614aae565b60200201515151836135b383600261406b565b600c81106135c3576135c3614aae565b60200201528382600281106135da576135da614aae565b60200201515160016020020151836135f383600361406b565b600c811061360357613603614aae565b602002015283826002811061361a5761361a614aae565b60200201516020015160006002811061363557613635614aae565b60200201518361364683600461406b565b600c811061365657613656614aae565b602002015283826002811061366d5761366d614aae565b60200201516020015160016002811061368857613688614aae565b60200201518361369983600561406b565b600c81106136a9576136a9614aae565b602002015250806136b981614c6b565b9150506134ff565b506136ca613ffb565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b60606000806136fc846139ce565b61ffff166001600160401b0381111561371757613717614083565b6040519080825280601f01601f191660200182016040528015613741576020820181803683370190505b5090506000805b825182108015613759575061010081105b15612dff576001811b9350858416156137a0578060f81b83838151811061378257613782614aae565b60200101906001600160f81b031916908160001a9053508160010191505b6137a981614c6b565b9050613748565b6033546001600160a01b031633146124d15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161097f565b606554604080516001600160a01b03928316815291831660208301527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b600054610100900460ff166139255760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161097f565b61392e82613b78565b6139378161380a565b5050565b60008061394784613d46565b9050808360ff166001901b116139c55760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c756500606482015260840161097f565b90505b92915050565b6000805b82156139c8576139e3600184614b92565b90921691806139f181615121565b9150506139d2565b60408051808201909152600080825260208201526102008261ffff1610613a555760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b604482015260640161097f565b8161ffff1660011415613a695750816139c8565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610613ad257600161ffff871660ff83161c81161415613ab557613ab284846132e6565b93505b613abf83846132e6565b92506201fffe600192831b169101613a85565b509195945050505050565b60408051808201909152600080825260208201528151158015613b0257506020820151155b15613b20575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206151448339815191528460200151613b539190614ac4565b613b6b90600080516020615144833981519152614b92565b905292915050565b919050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208451613bda9190614ac4565b15613c615760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a40161097f565b8260205b85518111610de057613c78600285614ac4565b613c9957816000528086015160205260406000209150600284049350613cb2565b8086015160005281602052604060002091506002840493505b613cbd60208261406b565b9050613c65565b60008080600080516020615144833981519152600360008051602061514483398151915286600080516020615144833981519152888909090890506000613d3a827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615144833981519152613ed3565b91959194509092505050565b600061010082511115613dcf5760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161097f565b8151613ddd57506000919050565b60008083600081518110613df357613df3614aae565b0160200151600160f89190911c81901b92505b8451811015613eca57848181518110613e2157613e21614aae565b0160200151600160f89190911c1b9150828211613eb65760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161097f565b91811791613ec381614c6b565b9050613e06565b50909392505050565b600080613ede613ffb565b613ee6614019565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa925082801561329e575082613f705760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c757265000000000000604482015260640161097f565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613fca614037565b8152602001613fd7614037565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561407e5761407e614055565b500190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156140bb576140bb614083565b60405290565b60405161010081016001600160401b03811182821017156140bb576140bb614083565b604051601f8201601f191681016001600160401b038111828210171561410c5761410c614083565b604052919050565b60006001600160401b0383111561412d5761412d614083565b614140601f8401601f19166020016140e4565b905082815283838301111561415457600080fd5b828260208301376000602084830101529392505050565b600082601f83011261417c57600080fd5b61418b83833560208501614114565b9392505050565b6001600160a01b03811681146110f457600080fd5b600080600080600080600080610100898b0312156141c457600080fd5b88359750602089013596506040890135955060608901356001600160601b0319811681146141f157600080fd5b94506080890135935060a08901356001600160401b0381111561421357600080fd5b61421f8b828c0161416b565b93505060c0890135915060e089013561423781614192565b809150509295985092959890939650565b60006040828403121561425a57600080fd5b614262614099565b9050813581526020820135602082015292915050565b600082601f83011261428957600080fd5b614291614099565b8060408401858111156142a357600080fd5b845b818110156142bd5780358452602093840193016142a5565b509095945050505050565b6000608082840312156142da57600080fd5b6142e2614099565b90506142ee8383614278565b81526142fd8360408401614278565b602082015292915050565b600080600080610120858703121561431f57600080fd5b843593506143308660208701614248565b925061433f86606087016142c8565b915061434e8660e08701614248565b905092959194509250565b60006001600160401b0382111561437257614372614083565b5060051b60200190565b803563ffffffff81168114613b7357600080fd5b600082601f8301126143a157600080fd5b813560206143b66143b183614359565b6140e4565b82815260059290921b840181019181810190868411156143d557600080fd5b8286015b848110156143f7576143ea8161437c565b83529183019183016143d9565b509695505050505050565b600082601f83011261441357600080fd5b813560206144236143b183614359565b82815260069290921b8401810191818101908684111561444257600080fd5b8286015b848110156143f7576144588882614248565b835291830191604001614446565b600082601f83011261447757600080fd5b813560206144876143b183614359565b82815260059290921b840181019181810190868411156144a657600080fd5b8286015b848110156143f75780356001600160401b038111156144c95760008081fd5b6144d78986838b0101614390565b8452509183019183016144aa565b600061018082840312156144f857600080fd5b6145006140c1565b905081356001600160401b038082111561451957600080fd5b61452585838601614390565b8352602084013591508082111561453b57600080fd5b61454785838601614402565b6020840152604084013591508082111561456057600080fd5b61456c85838601614402565b604084015261457e85606086016142c8565b60608401526145908560e08601614248565b60808401526101208401359150808211156145aa57600080fd5b6145b685838601614390565b60a08401526101408401359150808211156145d057600080fd5b6145dc85838601614390565b60c08401526101608401359150808211156145f657600080fd5b5061460384828501614466565b60e08301525092915050565b6000806040838503121561462257600080fd5b8235915060208301356001600160401b0381111561463f57600080fd5b61464b858286016144e5565b9150509250929050565b60006020828403121561466757600080fd5b81356139c581614192565b6020808252825182820181905260009190848201906040850190845b818110156146b35783516001600160a01b03168352928401929184019160010161468e565b50909695505050505050565b80151581146110f457600080fd5b6000602082840312156146df57600080fd5b81356139c5816146bf565b600080604083850312156146fd57600080fd5b823561470881614192565b9150602083013561471881614192565b809150509250929050565b60008060006060848603121561473857600080fd5b833592506147486020850161437c565b915060408401356001600160401b0381111561476357600080fd5b61476f868287016144e5565b9150509250925092565b600081518084526020808501945080840160005b838110156147b25781516001600160601b03168752958201959082019060010161478d565b509495945050505050565b60408152600083516040808401526147d86080840182614779565b90506020850151603f198483030160608501526147f58282614779565b925050508260208301529392505050565b60008083601f84011261481857600080fd5b5081356001600160401b0381111561482f57600080fd5b60208301915083602082850101111561484757600080fd5b9250929050565b60008060006040848603121561486357600080fd5b8335925060208401356001600160401b0381111561488057600080fd5b61488c86828701614806565b9497909650939450505050565b6000806000604084860312156148ae57600080fd5b83356001600160401b038111156148c457600080fd5b6148d086828701614806565b909790965060209590950135949350505050565b600080604083850312156148f757600080fd5b823561490281614192565b915060208301356001600160401b038082111561491e57600080fd5b908401906060828703121561493257600080fd5b60405160608101818110838211171561494d5761494d614083565b60405282358281111561495f57600080fd5b61496b8882860161416b565b82525060208301356020820152604083013560408201528093505050509250929050565b6000602082840312156149a157600080fd5b81356001600160401b038111156149b757600080fd5b8201601f810184136149c857600080fd5b6149d784823560208401614114565b949350505050565b6000806000606084860312156149f457600080fd5b83359250602084013561474881614192565b600060208284031215614a1857600080fd5b5035919050565b60008060208385031215614a3257600080fd5b82356001600160401b0380821115614a4957600080fd5b818501915085601f830112614a5d57600080fd5b813581811115614a6c57600080fd5b8660208260051b8501011115614a8157600080fd5b60209290920196919550909350505050565b91825260601b6001600160601b031916602082015260340190565b634e487b7160e01b600052603260045260246000fd5b600082614ae157634e487b7160e01b600052601260045260246000fd5b500690565b60006001600160601b0380831681851681830481118215151615614b0c57614b0c614055565b02949350505050565b6000816000190483118215151615614b2f57614b2f614055565b500290565b602080825260409082018190527f5369676e61746f7269657320646f206e6f74206f776e206174206c6561737420908201527f7468726573686f6c642070657263656e74616765206f6620612071756f72756d606082015260800190565b600082821015614ba457614ba4614055565b500390565b6020808252603c908201527f4261746368657220686173206e6f742073756666696369656e742066756e647360408201527f20666f7220706179696e672074686973207472616e73616374696f6e00000000606082015260800190565b600060208284031215614c1857600080fd5b5051919050565b600060208284031215614c3157600080fd5b81516001600160c01b03811681146139c557600080fd5b600060208284031215614c5a57600080fd5b815160ff811681146139c557600080fd5b6000600019821415614c7f57614c7f614055565b5060010190565b6001600160601b03811681146110f457600080fd5b600060408284031215614cad57600080fd5b614cb5614099565b8251614cc081614192565b81526020830151614cd081614c86565b60208201529392505050565b600060208284031215614cee57600080fd5b81516139c581614192565b600060208284031215614d0b57600080fd5b815167ffffffffffffffff19811681146139c557600080fd5b600060208284031215614d3657600080fd5b81516139c581614c86565b60006001600160601b0383811690831681811015614d6157614d61614055565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015614da457815185529382019390820190600101614d88565b5092979650505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff84168152604060208201526000614dfa604083018486614db1565b95945050505050565b6001600160a01b038516815263ffffffff84166020820152606060408201819052600090614e349083018486614db1565b9695505050505050565b8183823760009101908152919050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015614eec57602081850181015186830182015201614ed0565b81811115614efe576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b0383168152604060208201526000825160606040840152614f3d60a0840182614ec6565b90506020840151606084015260408401516080840152809150509392505050565b60208152600061418b6020830184614ec6565b60008235609e19833603018112614f8757600080fd5b9190910192915050565b8035613b7381614192565b600060208284031215614fae57600080fd5b81516139c5816146bf565b8183526000602080850194508260005b858110156147b2578135614fdc81614192565b6001600160a01b0316875281830135614ff481614c86565b6001600160601b0316878401526040968701969190910190600101614fc9565b60208082528181018390526000906040808401600586901b8501820187855b8881101561511357878303603f190184528135368b9003609e1901811261505957600080fd5b8a0160a0813536839003601e1901811261507257600080fd5b820180356001600160401b0381111561508a57600080fd5b8060061b360384131561509c57600080fd5b8287526150ae838801828c8501614fb9565b925050506150bd888301614f91565b6001600160a01b031688860152818701358786015260606150df81840161437c565b63ffffffff169086015260806150f683820161437c565b63ffffffff16950194909452509285019290850190600101615033565b509098975050505050505050565b600061ffff8083168181141561513957615139614055565b600101939250505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47424c535369676e6174757265436865636b65722e636865636b5369676e617475a26469706673582212207c07849930c3fc43881ea132ac36e666158e05b68d72acd832cb538b6fe1a4cf64736f6c634300080c0033","sourceMap":"1015:10080:179:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10807:10;10790:28;;;;:16;:28;;;;;:41;;10822:9;;10790:28;:41;;10822:9;;10790:41;:::i;:::-;;;;-1:-1:-1;;10868:10:179;10880:28;;;;:16;:28;;;;;;;;;;10846:63;;425:25:185;;;10846:63:179;;398:18:185;10846:63:179;;;;;;;1015:10080;;;;;9482:1144;;;;;;;;;;-1:-1:-1;9482:1144:179;;;;;:::i;:::-;;:::i;:::-;;;3585:14:185;;3578:22;3560:41;;3548:2;3533:18;9482:1144:179;;;;;;;;14547:1081:114;;;;;;;;;;-1:-1:-1;14547:1081:114;;;;;:::i;:::-;;:::i;:::-;;;;5435:14:185;;5428:22;5410:41;;5494:14;;5487:22;5482:2;5467:18;;5460:50;5383:18;14547:1081:114;5248:268:185;3881:2862:179;;;;;;;;;;-1:-1:-1;3881:2862:179;;;;;:::i;:::-;;:::i;:::-;;7697:1470:120;;;;;;;;;;-1:-1:-1;7697:1470:120;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5599:135::-;;;;;;;;;;-1:-1:-1;5599:135:120;;;;;:::i;:::-;;:::i;2232:123:114:-;;;;;;;;;;-1:-1:-1;2232:123:114;;;;;:::i;:::-;;:::i;2394:187:179:-;;;;;;;;;;-1:-1:-1;2394:187:179;;;;;:::i;:::-;;:::i;4387:9678:114:-;;;;;;;;;;-1:-1:-1;4387:9678:114;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;2587:1220:179:-;;;;;;:::i;:::-;;:::i;1183:47:114:-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14663:32:185;;;14645:51;;14633:2;14618:18;1183:47:114;14474:228:185;1132:45:114;;;;;;;;;;;;;;;9235:111:120;;;;;;;;;;-1:-1:-1;9325:13:120;9235:111;;1069:57:114;;;;;;;;;;;;;;;10632:115:179;;;;;;;;;;-1:-1:-1;10632:115:179;;;;;:::i;:::-;-1:-1:-1;;;;;10715:25:179;10689:7;10715:25;;;:16;:25;;;;;;;10632:115;;;;425:25:185;;;413:2;398:18;10632:115:179;279:177:185;2071:101:42;;;;;;;;;;;;;:::i;1441:85::-;;;;;;;;;;-1:-1:-1;1513:6:42;;-1:-1:-1;;;;;1513:6:42;1441:85;;10922:171:179;;;;;;;;;;-1:-1:-1;10922:171:179;;;;;:::i;:::-;;:::i;4797:260:120:-;;;;;;;;;;-1:-1:-1;4797:260:120;;;;;:::i;:::-;;:::i;5262:158::-;;;;;;;;;;-1:-1:-1;5262:158:120;;;;;:::i;:::-;;:::i;2721:148::-;;;;;;;;;;-1:-1:-1;2721:148:120;;;;;:::i;:::-;;:::i;6749:2727:179:-;;;;;;;;;;-1:-1:-1;6749:2727:179;;;;;:::i;:::-;;:::i;309:50:180:-;;;;;;;;;;-1:-1:-1;309:50:180;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;309:50:180;;;;;;;;;;18428:10:185;18416:23;;;18398:42;;18483:14;;18476:22;18471:2;18456:18;;18449:50;18371:18;309:50:180;18232:273:185;1421:32:114;;;;;;;;;;-1:-1:-1;1421:32:114;;;;;;;;1236:46;;;;;;;;;;;;;;;6262:951:120;;;;;;;;;;;;;:::i;2321:198:42:-;;;;;;;;;;-1:-1:-1;2321:198:42;;;;;:::i;:::-;;:::i;1212:31:121:-;;;;;;;;;;-1:-1:-1;1212:31:121;;;;-1:-1:-1;;;;;1212:31:121;;;3631:872:120;;;;;;;;;;-1:-1:-1;3631:872:120;;;;;:::i;:::-;;:::i;9482:1144:179:-;9836:4;9852:27;9922:15;9939:13;9905:48;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;9905:48:179;;;;;;;;;9882:81;;9905:48;9882:81;;;;9978:33;;;;:12;:33;;;;;:50;9882:81;;-1:-1:-1;9978:50:179;;9974:98;;10056:5;10049:12;;;;;9974:98;10087:33;;;;:12;:33;;;;;:43;-1:-1:-1;;;10087:43:179;;;;10082:87;;10153:5;10146:12;;;;;10082:87;10199:163;;;;;;19914:19:185;;;19949:12;;;19942:28;;;19986:12;;;19979:28;;;-1:-1:-1;;;;;;20037:44:185;;20023:12;;;20016:66;10179:17:179;;20098:13:185;;10199:163:179;;;-1:-1:-1;;10199:163:179;;;;;;;;;10394:15;;10199:163;10394:15;;;10199:163;;-1:-1:-1;10439:180:179;10485:11;10514:19;10394:15;10579:26;10439:28;:180::i;:::-;10420:199;;;;;9482:1144;;;;;;;;;;;:::o;14547:1081:114:-;14745:22;14769;14878:13;2037:77:135;14980:7:114;15009:3;:5;;;15036:3;:5;;;15063;:7;;;15071:1;15063:10;;;;;;;:::i;:::-;;;;;15095:7;;15103:1;15095:10;;;;15127:5;:7;;;15135:1;15127:10;;;;;;;:::i;:::-;;;;;15159:5;:7;;;15167:1;15159:10;;;;;;;:::i;:::-;;;;;;;;;;15191:7;;15220;;;;14942:303;;;;;;;;;;;20607:19:185;;;20651:2;20642:12;;20635:28;;;;20688:2;20679:12;;20672:28;;;;20725:2;20716:12;;20709:28;;;;20762:3;20753:13;;20746:29;;;;20800:3;20791:13;;20784:29;20838:3;20829:13;;20822:29;20876:3;20867:13;;20860:29;20914:3;20905:13;;20898:29;20952:3;20943:13;;20254:708;14942:303:114;;;;;;;;;;;;;14915:344;;;;;;14894:375;;:394;;;;:::i;:::-;14878:410;-1:-1:-1;15371:250:114;15402:33;15413:21;:3;14878:410;15413:14;:21::i;:::-;15402:5;;:10;:33::i;:::-;15449:22;:20;:22::i;:::-;15485:67;15514:37;15545:5;15514:19;-1:-1:-1;;;;;;;;;;;;;;;;;2392:13:135;;;;;;;;2400:1;2392:13;;2403:1;2392:13;;;;;2313:99;15514:19:114;:30;;:37::i;:::-;15485:23;15500:7;15485:14;:23::i;:::-;:28;;:67::i;:::-;15566:5;1055:7;15371:17;:250::i;:::-;15330:291;;;;-1:-1:-1;14547:1081:114;-1:-1:-1;;;;;;14547:1081:114:o;3881:2862:179:-;4426:42;4393:22;4504:9;4771:29;;;;:12;:29;;;;;:46;4479:34;;-1:-1:-1;4771:46:179;;4750:118;;;;-1:-1:-1;;;4750:118:179;;21515:2:185;4750:118:179;;;21497:21:185;21554:2;21534:18;;;21527:30;-1:-1:-1;;;21573:18:185;;;21566:50;21633:18;;4750:118:179;;;;;;;;;4948:29;;;;:12;:29;;;;;:39;-1:-1:-1;;;4948:39:179;;;;:48;4927:118;;;;-1:-1:-1;;;4927:118:179;;21864:2:185;4927:118:179;;;21846:21:185;21903:2;21883:18;;;21876:30;-1:-1:-1;;;21922:18:185;;;21915:53;21985:18;;4927:118:179;21662:347:185;4927:118:179;-1:-1:-1;;;;;5077:32:179;;5112:1;5077:32;;;:16;:32;;;;;;5056:105;;;;-1:-1:-1;;;5056:105:179;;22216:2:185;5056:105:179;;;22198:21:185;22255:2;22235:18;;;22228:30;-1:-1:-1;;;22274:18:185;;;22267:52;22336:18;;5056:105:179;22014:346:185;5056:105:179;5172:29;;;;:12;:29;;;;;:46;;-1:-1:-1;;5172:46:179;;-1:-1:-1;;;5172:46:179;;;;:29;;5461:171;;5185:15;;5527:46;;5591:27;5461:15;:171::i;:::-;5353:279;;;;1293:2;5834:90;;:17;:37;;;5872:1;5834:40;;;;;;;;:::i;:::-;;;;;;;:90;;;;:::i;:::-;-1:-1:-1;;;;;5749:175:179;1230:3;5749:17;:38;;;5788:1;5749:41;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;5749:65:179;;;;;:::i;:::-;:175;;5728:286;;;;-1:-1:-1;;;5728:286:179;;;;;;;:::i;:::-;6030:46;;-1:-1:-1;;;;;14663:32:185;;14645:51;;6044:15:179;;6030:46;;14633:2:185;14618:18;6030:46:179;;;;;;;6224:20;6247:9;6224:32;-1:-1:-1;6369:14:179;6428:11;6387:29;6224:32;6387:14;:29;:::i;:::-;:37;;6419:5;6387:37;:::i;:::-;6386:53;;;;:::i;:::-;-1:-1:-1;;;;;6471:32:179;;;;;;:16;:32;;;;;;6369:70;;-1:-1:-1;6471:58:179;-1:-1:-1;6471:58:179;6450:165;;;;-1:-1:-1;;;6450:165:179;;;;;;;:::i;:::-;-1:-1:-1;;;;;6626:54:179;;;;;;:16;:54;;;;;:64;;6684:6;;6626:54;:64;;6684:6;;6626:64;:::i;:::-;;;;-1:-1:-1;;6700:36:179;;6708:10;;6700:36;;;;;6729:6;;6700:36;;;;6729:6;6708:10;6700:36;;;;;;;;;;;;;;;;;;;;;4089:2654;;;;;;3881:2862;;:::o;7697:1470:120:-;7854:44;;-1:-1:-1;;;7854:44:120;;-1:-1:-1;;;;;14663:32:185;;;7854:44:120;;;14645:51:185;7801:16:120;;7833:18;;7854:20;:34;;;;14618:18:185;;7854:44:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7933:55;;-1:-1:-1;;;7933:55:120;;;;;425:25:185;;;7833:65:120;;-1:-1:-1;7908:22:120;;-1:-1:-1;;;;;7933:20:120;:43;;;;398:18:185;;7933:55:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7908:80;-1:-1:-1;;;;;;8003:19:120;;;;:62;;;8026:20;-1:-1:-1;;;;;8026:32:120;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;8003:62;7999:116;;;8088:16;;;8102:1;8088:16;;;;;;;;;;;-1:-1:-1;8081:23:120;7697:1470;-1:-1:-1;;;;7697:1470:120:o;7999:116::-;8196:36;8235:46;8266:14;-1:-1:-1;;;;;8235:46:120;:30;:46::i;:::-;8196:85;-1:-1:-1;8291:21:120;;8322:173;8346:23;:30;8342:1;:34;8322:173;;;8414:14;-1:-1:-1;;;;;8414:35:120;;8456:23;8480:1;8456:26;;;;;;;;:::i;:::-;;;;;8414:70;;-1:-1:-1;;;;;;8414:70:120;;;;;;;8456:26;;;;;8414:70;;;24899:36:185;24872:18;;8414:70:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8397:87;;;;:::i;:::-;;-1:-1:-1;8378:3:120;;;;:::i;:::-;;;;8322:173;;;;8566:35;8618:13;-1:-1:-1;;;;;8604:28:120;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8604:28:120;;8566:66;;8642:13;8674:9;8669:457;8693:23;:30;8689:1;:34;8669:457;;;8744:12;8765:23;8789:1;8765:26;;;;;;;;:::i;:::-;;;;;8837:43;;-1:-1:-1;;;8837:43:120;;8765:26;;;;;8837:43;;;24899:36:185;;;8765:26:120;-1:-1:-1;;;;;;;;8837:14:120;:35;;;;24872:18:185;;8837:43:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8806:74;;8899:9;8894:222;8918:20;8914:1;:24;8894:222;;;9019:47;;-1:-1:-1;;;9019:47:120;;25475:4:185;25463:17;;9019:47:120;;;25445:36:185;25497:18;;;25490:34;;;9019:14:120;-1:-1:-1;;;;;9019:36:120;;;;25418:18:185;;9019:47:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;8963:18;8982:5;8963:25;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8963:113:120;;;:25;;;;;;;;;;;:113;9094:7;;;;:::i;:::-;;;;8940:3;;;;;:::i;:::-;;;;8894:222;;;;8730:396;;8725:3;;;;;:::i;:::-;;;;8669:457;;;-1:-1:-1;9142:18:120;;7697:1470;-1:-1:-1;;;;;;;7697:1470:120:o;5599:135::-;1334:13:42;:11;:13::i;:::-;5686:41:120::1;5707:19;5686:20;:41::i;:::-;5599:135:::0;:::o;2232:123:114:-;1537:19;-1:-1:-1;;;;;1537:25:114;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1523:41:114;:10;-1:-1:-1;;;;;1523:41:114;;1502:180;;;;-1:-1:-1;;;1502:180:114;;26633:2:185;1502:180:114;;;26615:21:185;26672:2;26652:18;;;26645:30;26711:34;26691:18;;;26684:62;26782:34;26762:18;;;26755:62;26854:30;26833:19;;;26826:59;26902:19;;1502:180:114;26431:496:185;1502:180:114;2317:31:::1;2342:5;2317:24;:31::i;2394:187:179:-:0;3111:19:46;3134:13;;;;;;3133:14;;3179:34;;;;-1:-1:-1;3197:12:46;;3212:1;3197:12;;;;:16;3179:34;3178:108;;;-1:-1:-1;3258:4:46;1476:19:50;:23;;;3219:66:46;;-1:-1:-1;3268:12:46;;;;;:17;3219:66;3157:201;;;;-1:-1:-1;;;3157:201:46;;27134:2:185;3157:201:46;;;27116:21:185;27173:2;27153:18;;;27146:30;27212:34;27192:18;;;27185:62;-1:-1:-1;;;27263:18:185;;;27256:44;27317:19;;3157:201:46;26932:410:185;3157:201:46;3368:12;:16;;-1:-1:-1;;3368:16:46;3383:1;3368:16;;;3394:65;;;;3428:13;:20;;-1:-1:-1;;3428:20:46;;;;;3394:65;2515:59:179::1;2541:13;2556:17;2515:25;:59::i;:::-;3483:14:46::0;3479:99;;;3529:5;3513:21;;-1:-1:-1;;3513:21:46;;;3553:14;;-1:-1:-1;24899:36:185;;3553:14:46;;24887:2:185;24872:18;3553:14:46;;;;;;;3479:99;3101:483;2394:187:179;;:::o;4387:9678:114:-;-1:-1:-1;;;;;;;;;;;;;;;;;4578:7:114;4651:6;:17;;;:24;4619:21;;;;;;;;;;;;;;;;;:28;:56;4618:142;;;;;4729:6;:23;;;:30;4697:21;;;;;;;;;;;;;;;;;:28;:62;4618:142;:227;;;;;4813:6;:24;;;:31;4781:21;;;;;;;;;;;;;;;;;:28;:63;4618:227;:316;;;;;4898:6;:28;;;:35;4866:21;;;;;;;;;;;;;;;;;:28;:67;4618:316;4597:428;;;;-1:-1:-1;;;4597:428:114;;27748:2:185;4597:428:114;;;27730:21:185;27787:2;27767:18;;;27760:30;-1:-1:-1;;;;;;;;;;;27806:18:185;;;27799:62;27897:34;27877:18;;;27870:62;-1:-1:-1;;;27948:19:185;;;27941:32;27990:19;;4597:428:114;27546:469:185;4597:428:114;5107:35;;:42;5057:23;;;;:30;:92;5036:207;;;;-1:-1:-1;;;5036:207:114;;28222:2:185;5036:207:114;;;28204:21:185;28261:2;28241:18;;;28234:30;;;-1:-1:-1;;;;;;;;;;;28280:18:185;;;28273:62;28371:34;28351:18;;;28344:62;-1:-1:-1;;;28422:19:185;;;28415:35;28467:19;;5036:207:114;28020:472:185;5036:207:114;5305:12;5275:43;;:20;:43;;;5254:150;;;;-1:-1:-1;;;5254:150:114;;28699:2:185;5254:150:114;;;28681:21:185;28738:2;28718:18;;;28711:30;-1:-1:-1;;;;;;;;;;;28757:18:185;;;28750:62;28848:30;28828:18;;;28821:58;28896:19;;5254:150:114;28497:424:185;5254:150:114;5921:19;;;;;;;;-1:-1:-1;5921:19:114;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;6277:21:114;;;;;;;;;;;;;;;;;;6264:42;;;;;;;;;;;5921:19;;6264:42;6277:21;6264:42;;;;5921:19;6264:42;;;;;-1:-1:-1;;6230:31:114;;;;:76;;;;6364:21;;;;;;;;;;;;-1:-1:-1;6364:21:114;;;;;6351:42;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6316:77:114;;-1:-1:-1;;;;;;;;;;;;;;;;;6499:6:114;:23;;;:30;-1:-1:-1;;;;;6472:67:114;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6472:67:114;-1:-1:-1;6445:94:114;;6589:23;;;;:30;-1:-1:-1;;;;;6575:45:114;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6575:45:114;;6549:10;:23;;:71;;;;6799:27;6829:141;6884:21;;;;;;;;;;;;;;;;;6923:19;-1:-1:-1;;;;;6923:31:114;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6829:37;:141::i;:::-;6799:171;;6990:9;6985:1728;7009:6;:23;;;:30;7005:1;:34;6985:1728;;;7301:82;:6;:44;;;7346:1;7301:47;;;;;;;;:::i;:::-;;;;;;;10534:9:135;;10473:16;10524:20;;;10580:4;10576:13;;;10570:20;10557:34;;;10629:4;10616:18;;;10404:246;7301:82:114;7272:10;:23;;;7296:1;7272:26;;;;;;;;:::i;:::-;;;;;;;;;;:111;7405:6;;7401:305;;7542:23;;;;7566:5;7570:1;7566;:5;:::i;:::-;7542:30;;;;;;;;:::i;:::-;;;;;;;7534:39;;7476:10;:23;;;7500:1;7476:26;;;;;;;;:::i;:::-;;;;;;;7468:35;;:105;7435:252;;;;;-1:-1:-1;;;7435:252:114;;29128:2:185;7435:252:114;;;29110:21:185;29147:18;;;29140:30;;;;-1:-1:-1;;;;;;;;;;;29186:18:185;;;29179:62;29277:34;29257:18;;;29250:62;29329:19;;7435:252:114;28926:428:185;7435:252:114;7846:19;-1:-1:-1;;;;;7846:76:114;;7961:10;:23;;;7985:1;7961:26;;;;;;;;:::i;:::-;;;;;;;8026:20;8079:6;:35;;;8115:1;8079:38;;;;;;;;:::i;:::-;;;;;;;7846:294;;;;;;;;;;;;;;;;29558:25:185;;;29602:10;29648:15;;;29643:2;29628:18;;29621:43;29700:15;29695:2;29680:18;;29673:43;29546:2;29531:18;;29359:363;7846:294:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7816:324:114;:10;:24;;;7841:1;7816:27;;;;;;;;:::i;:::-;;;;;;:324;;;;;8431:267;8461:219;8529:129;8613:19;8583:10;:24;;;8608:1;8583:27;;;;;;;;:::i;:::-;;;;;;;:49;8529:24;:129::i;:::-;8461:6;:23;;;8485:1;8461:26;;;;;;;;:::i;:::-;;;;;;;:42;;:219;;;;:::i;8431:267::-;8425:273;-1:-1:-1;7041:3:114;;;;:::i;:::-;;;;6985:1728;;;;6631:2092;8996:12;:3;:10;:12::i;:::-;9340:20;;8990:18;;-1:-1:-1;9340:20:114;;9311:26;9340:20;9406:97;;9502:1;9406:97;;;9446:10;-1:-1:-1;;;;;9446:35:114;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9374:129;;9523:9;9518:3499;9542:21;;;;;;;;;;;;;;;;;:28;9538:1;:32;9518:3499;;;9754:21;9750:486;;;10045:20;9832:233;;9993:21;9832:19;-1:-1:-1;;;;;9832:43:114;;9911:21;;;;;;;;;;;;;;;;;9933:1;9911:24;;;;;;;;:::i;:::-;;;;;9832:130;;-1:-1:-1;;;;;;9832:130:114;;;;;;;9911:24;;;;;9832:130;;;24899:36:185;24872:18;;9832:130:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:182;;;;:::i;:::-;:233;9799:418;;;;-1:-1:-1;;;9799:418:114;;29929:2:185;9799:418:114;;;29911:21:185;29968:3;29948:18;;;29941:31;-1:-1:-1;;;;;;;;;;;29988:18:185;;;29981:62;30079:34;30059:18;;;30052:62;30151:34;30130:19;;;30123:63;-1:-1:-1;;;30202:19:185;;;30195:37;30249:19;;9799:418:114;29727:547:185;9799:418:114;10504:14;-1:-1:-1;;;;;10504:46:114;;10601:21;;;;;;;;;;;;;;;;;10623:1;10601:24;;;;;;;;:::i;:::-;;;;;;;;;10595:31;;10669:20;10726:6;:23;;;10750:1;10726:26;;;;;;;;:::i;:::-;;;;;;;;;;;10504:275;;-1:-1:-1;;;;;;10504:275:114;;;;;;;30504:4:185;30492:17;;;10504:275:114;;;30474:36:185;10504:275:114;30575:15:185;;;30555:18;;;30548:43;30627:15;30607:18;;;30600:43;30447:18;;10504:275:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10433:346:114;;10441:34;:6;:17;;;10459:1;10441:20;;;;;;;;:::i;:34::-;-1:-1:-1;;10433:346:114;;10404:514;;;;-1:-1:-1;;;10404:514:114;;31155:2:185;10404:514:114;;;31137:21:185;31194:2;31174:18;;;31167:30;-1:-1:-1;;;;;;;;;;;31213:18:185;;;31206:62;31304:34;31284:18;;;31277:62;31376:34;31355:19;;;31348:63;-1:-1:-1;;;31427:19:185;;;31420:32;31469:19;;10404:514:114;30953:541:185;10404:514:114;10942:30;10951:6;:17;;;10969:1;10951:20;;;;;;;;:::i;:::-;;;;;;;10942:3;:8;;:30;;;;:::i;:::-;10936:36;;11126:13;-1:-1:-1;;;;;11126:70:114;;11243:21;;;;;;;;;;;;;;;;;11265:1;11243:24;;;;;;;;:::i;:::-;;;;;;;;;11237:31;;11307:20;11360:6;:24;;;11385:1;11360:27;;;;;;;;:::i;:::-;;;;;;;;;;;11126:284;;-1:-1:-1;;;;;;11126:284:114;;;;;;;30504:4:185;30492:17;;;11126:284:114;;;30474:36:185;11126:284:114;30575:15:185;;;30555:18;;;30548:43;30627:15;30607:18;;;30600:43;30447:18;;11126:284:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11089:11;:31;;;11121:1;11089:34;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11089:321:114;;;:34;;;;;;;;;;:321;11466:52;;;:55;;11519:1;;11466:55;;;;;;:::i;:::-;;;;;;;11428:11;:32;;;11461:1;11428:35;;;;;;;;:::i;:::-;;;;;;:93;-1:-1:-1;;;;;11428:93:114;;;-1:-1:-1;;;;;11428:93:114;;;;;11608:31;11891:9;11886:1117;11910:6;:23;;;:30;11906:1;:34;11886:1117;;;12107:161;12154:10;:24;;;12179:1;12154:27;;;;;;;;:::i;:::-;;;;;;;12217:21;;;;;;;;;;;;;;;;;12239:1;12217:24;;;;;;;;:::i;:::-;;;;;;;7387:13:136;;;7404:1;7386:19;;;7380:26;;7292:121;12107:161:114;12078:907;;;12356:13;-1:-1:-1;;;;;12356:72:114;;12483:21;;;;;;;;;;;;;;;;;12505:1;12483:24;;;;;;;;:::i;:::-;;;;;;;;;12477:31;;12555:20;12621:10;:23;;;12645:1;12621:26;;;;;;;;:::i;:::-;;;;;;;12688:6;:28;;;12717:1;12688:31;;;;;;;;:::i;:::-;;;;;;;12757:23;12688:126;;;;;;;;:::i;:::-;;;;;;;;;;;12356:489;;-1:-1:-1;;;;;;12356:489:114;;;;;;;32007:4:185;31995:17;;;12356:489:114;;;31977:36:185;12356:489:114;32078:15:185;;;32058:18;;;32051:43;32110:18;;;32103:34;;;;32173:15;32153:18;;;32146:43;31949:19;;12356:489:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12317:32;;:35;;12350:1;;12317:35;;;;;;:::i;:::-;;;;;;:528;;;;;;;:::i;:::-;-1:-1:-1;;;;;12317:528:114;;;-1:-1:-1;12911:25:114;;;;;12078:907;11942:3;;;;:::i;:::-;;;;11886:1117;;;;9577:3440;9572:3;;;;;:::i;:::-;;;;9518:3499;;;;9297:3730;;13104:22;13144:21;13182:170;13234:7;13263:3;13288:6;:12;;;13322:6;:12;;;13182:30;:170::i;:::-;13086:266;;;;13391:17;13366:143;;;;-1:-1:-1;;;13366:143:114;;32644:2:185;13366:143:114;;;32626:21:185;32683:2;32663:18;;;32656:30;-1:-1:-1;;;;;;;;;;;32702:18:185;;;32695:62;32793:34;32773:18;;;32766:62;-1:-1:-1;;;32844:19:185;;;32837:34;32888:19;;13366:143:114;32442:471:185;13366:143:114;13548:16;13523:132;;;;-1:-1:-1;;;13523:132:114;;33120:2:185;13523:132:114;;;33102:21:185;33159:2;33139:18;;;33132:30;-1:-1:-1;;;;;;;;;;;33178:18:185;;;33171:62;33269:27;33249:18;;;33242:55;33314:19;;13523:132:114;32918:421:185;13523:132:114;13036:630;;13740:27;13810:20;13832:10;:23;;;13793:63;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;13793:63:114;;;;;;13770:96;;13793:63;13770:96;;;;14025:11;;13770:96;;-1:-1:-1;4387:9678:114;;-1:-1:-1;;;;;;;4387:9678:114:o;2587:1220:179:-;2718:27;2788:15;2805:10;2771:45;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2771:45:179;;;;;;;;;2748:78;;2771:45;2748:78;;;;2858:33;;;;:12;:33;;;;;:50;2748:78;;-1:-1:-1;2858:50:179;;:55;2837:129;;;;-1:-1:-1;;;2837:129:179;;34195:2:185;2837:129:179;;;34177:21:185;34234:2;34214:18;;;34207:30;34273:29;34253:18;;;34246:57;34320:18;;2837:129:179;33993:351:185;2837:129:179;2981:9;:13;2977:213;;3027:10;3010:28;;;;:16;:28;;;;;:41;;3042:9;;3010:28;:41;;3042:9;;3010:41;:::i;:::-;;;;-1:-1:-1;;3109:10:179;3137:28;;;;:16;:28;;;;;;;;;;3070:109;;425:25:185;;;3070:109:179;;398:18:185;3070:109:179;;;;;;;2977:213;3225:10;3239:1;3208:28;;;:16;:28;;;;;;3200:69;;;;-1:-1:-1;;;3200:69:179;;34551:2:185;3200:69:179;;;34533:21:185;34590:2;34570:18;;;34563:30;34629:26;34609:18;;;34602:54;34673:18;;3200:69:179;34349:348:185;3200:69:179;-1:-1:-1;;;;;;;;;;;;;;;;3319:50:179;3356:12;3319:50;;;;;3418:33;;;:12;:33;;;;;;;:46;;;;;;;;-1:-1:-1;;;3418:46:179;-1:-1:-1;;3418:46:179;;;;;;;;;;;;;3537:111;;-1:-1:-1;;3559:15:179;;3537:111;;;;3622:16;;;;3537:111;:::i;:::-;;;;;;;;3687:15;3663:137;3716:10;3747:12;3774:16;;3663:137;;;;;;;;;:::i;:::-;;;;;;;;2708:1099;;2587:1220;;;:::o;2071:101:42:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;:::-;2071:101::o:0;10922:171:179:-;11033:4;11082;11066:11;;11056:22;;;;;;;:::i;:::-;;;;;;;;:30;11049:37;;10922:171;;;;;:::o;4797:260:120:-;1358:10;-1:-1:-1;;;;;1380:20:120;1358:43;;1337:172;;;;-1:-1:-1;;;1337:172:120;;;;;;;:::i;:::-;4986:64:::1;::::0;-1:-1:-1;;;4986:64:120;;-1:-1:-1;;;;;4986:13:120::1;:35;::::0;::::1;::::0;:64:::1;::::0;5022:8;;5032:17;;4986:64:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4797:260:::0;;:::o;5262:158::-;1358:10;-1:-1:-1;;;;;1380:20:120;1358:43;;1337:172;;;;-1:-1:-1;;;1337:172:120;;;;;;;:::i;:::-;5364:49:::1;::::0;-1:-1:-1;;;5364:49:120;;-1:-1:-1;;;;;14663:32:185;;;5364:49:120::1;::::0;::::1;14645:51:185::0;5364:13:120::1;:39;::::0;::::1;::::0;14618:18:185;;5364:49:120::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;5262:158:::0;:::o;2721:148::-;1334:13:42;:11;:13::i;:::-;2814:48:120::1;::::0;-1:-1:-1;;;2814:48:120;;-1:-1:-1;;;;;2814:13:120::1;:34;::::0;::::1;::::0;:48:::1;::::0;2849:12;;2814:48:::1;;;:::i;6749:2727:179:-:0;7027:22;7052:9;7027:34;;7072:27;7142:15;7159:13;7125:48;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;7125:48:179;;;;;;;;;7102:81;;7125:48;7102:81;;;;7441:33;;;;:12;:33;;;;;:50;7102:81;;-1:-1:-1;7441:50:179;;7420:122;;;;-1:-1:-1;;;7420:122:179;;21515:2:185;7420:122:179;;;21497:21:185;21554:2;21534:18;;;21527:30;-1:-1:-1;;;21573:18:185;;;21566:50;21633:18;;7420:122:179;21313:344:185;7420:122:179;7622:33;;;;:12;:33;;;;;:43;-1:-1:-1;;;7622:43:179;;;;:52;7601:122;;;;-1:-1:-1;;;7601:122:179;;21864:2:185;7601:122:179;;;21846:21:185;21903:2;21883:18;;;21876:30;-1:-1:-1;;;21922:18:185;;;21915:53;21985:18;;7601:122:179;21662:347:185;7601:122:179;-1:-1:-1;;;;;7742:31:179;;7776:1;7742:31;;;:16;:31;;;;;;7734:70;;;;-1:-1:-1;;;7734:70:179;;22216:2:185;7734:70:179;;;22198:21:185;22255:2;22235:18;;;22228:30;-1:-1:-1;;;22274:18:185;;;22267:52;22336:18;;7734:70:179;22014:346:185;7734:70:179;7815:33;;;;:12;:33;;;;;:50;;-1:-1:-1;;7815:50:179;;-1:-1:-1;;;7815:50:179;;;;:33;;8108:179;;7828:19;;8178:50;;8246:27;8108:15;:179::i;:::-;8000:287;;;;1293:2;8489:90;;:17;:37;;;8527:1;8489:40;;;;;;;;:::i;:::-;;;;;;;:90;;;;:::i;:::-;-1:-1:-1;;;;;8404:175:179;1230:3;8404:17;:38;;;8443:1;8404:41;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;8404:65:179;;;;;:::i;:::-;:175;;8383:286;;;;-1:-1:-1;;;8383:286:179;;;;;;;:::i;:::-;8685:45;;-1:-1:-1;;;;;14663:32:185;;14645:51;;8699:15:179;;8685:45;;14633:2:185;14618:18;8685:45:179;;;;;;;8878:20;8901:9;8878:32;-1:-1:-1;9024:14:179;9083:11;9042:29;8878:32;9042:14;:29;:::i;:::-;:37;;9074:5;9042:37;:::i;:::-;9041:53;;;;:::i;:::-;-1:-1:-1;;;;;9126:31:179;;;;;;:16;:31;;;;;;9024:70;;-1:-1:-1;9126:41:179;-1:-1:-1;9126:41:179;9105:148;;;;-1:-1:-1;;;9105:148:179;;;;;;;:::i;:::-;-1:-1:-1;;;;;9264:31:179;;;;;;:16;:31;;;;;:41;;9299:6;;9264:31;:41;;9299:6;;9264:41;:::i;:::-;;;;-1:-1:-1;;;;;;;9320:103:179;;9382:31;;;;:16;:31;;;;;;;;;;9320:103;;425:25:185;;;9320:103:179;;398:18:185;9320:103:179;;;;;;;9433:36;;9441:10;;9433:36;;;;;9462:6;;9433:36;;;;9462:6;9441:10;9433:36;;;;;;;;;;;;;;;;;;;;;7017:2459;;;;;;6749:2727;;;:::o;6262:951:120:-;6321:16;6349:19;6371:20;-1:-1:-1;;;;;6371:32:120;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6349:56;;;-1:-1:-1;6420:16:120;6416:70;;-1:-1:-1;;6459:16:120;;;6473:1;6459:16;;;;;;;;;6262:951::o;6416:70::-;6496:21;;6527:129;6551:11;6547:1;:15;6527:129;;;6600:45;;-1:-1:-1;;;6600:45:120;;24929:4:185;24917:17;;6600:45:120;;;24899:36:185;6600:14:120;-1:-1:-1;;;;;6600:35:120;;;;24872:18:185;;6600:45:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6583:62;;;;:::i;:::-;;-1:-1:-1;6564:3:120;;;;:::i;:::-;;;;6527:129;;;;6666:35;6718:13;-1:-1:-1;;;;;6704:28:120;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6704:28:120;;6666:66;;6742:13;6774:9;6769:403;6793:20;-1:-1:-1;;;;;6793:32:120;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6789:38;;:1;:38;6769:403;;;6879:45;;-1:-1:-1;;;6879:45:120;;24929:4:185;24917:17;;6879:45:120;;;24899:36:185;6848:28:120;;6879:14;-1:-1:-1;;;;;6879:35:120;;;;24872:18:185;;6879:45:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6848:76;;6943:9;6938:224;6962:20;6958:1;:24;6938:224;;;7063:49;;-1:-1:-1;;;7063:49:120;;25475:4:185;25463:17;;7063:49:120;;;25445:36:185;25497:18;;;25490:34;;;7063:14:120;-1:-1:-1;;;;;7063:36:120;;;;25418:18:185;;7063:49:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;;7007:18;7026:5;7007:25;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7007:115:120;;;:25;;;;;;;;;;;:115;7140:7;;;;:::i;:::-;;;;6984:3;;;;;:::i;:::-;;;;6938:224;;;;6834:338;6829:3;;;;;:::i;:::-;;;;6769:403;;;-1:-1:-1;7188:18:120;;6262:951;-1:-1:-1;;;;6262:951:120:o;2321:198:42:-;1334:13;:11;:13::i;:::-;-1:-1:-1;;;;;2409:22:42;::::1;2401:73;;;::::0;-1:-1:-1;;;2401:73:42;;38045:2:185;2401:73:42::1;::::0;::::1;38027:21:185::0;38084:2;38064:18;;;38057:30;38123:34;38103:18;;;38096:62;-1:-1:-1;;;38174:18:185;;;38167:36;38220:19;;2401:73:42::1;37843:402:185::0;2401:73:42::1;2484:28;2503:8;2484:18;:28::i;3631:872:120:-:0;1684:16;;-1:-1:-1;;;;;1684:16:120;1670:10;:30;1649:153;;;;-1:-1:-1;;;1649:153:120;;38452:2:185;1649:153:120;;;38434:21:185;38491:2;38471:18;;;38464:30;38530:34;38510:18;;;38503:62;38601:34;38581:18;;;38574:62;-1:-1:-1;;;38652:19:185;;;38645:43;38705:19;;1649:153:120;38250:480:185;1649:153:120;3815:9:::1;3810:610;3830:29:::0;;::::1;3810:610;;;4029:18;;4048:1;4029:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:27;::::0;;;;;::::1;;;:::i;:::-;-1:-1:-1::0;;;;;4029:40:120::1;;4070:10;4090:4;4097:18;;4116:1;4097:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:28;4029:97:::0;;-1:-1:-1;;;;;;4029:97:120::1;::::0;;;;;;-1:-1:-1;;;;;39748:15:185;;;4029:97:120::1;::::0;::::1;39730:34:185::0;39800:15;;;;39780:18;;;39773:43;4097:28:120::1;;39832:18:185::0;;;39825:34;39665:18;;4029:97:120::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4140:17;4176:18;;4195:1;4176:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:27;::::0;;;;;::::1;;;:::i;:::-;:82;::::0;-1:-1:-1;;;4176:82:120;;4222:4:::1;4176:82;::::0;::::1;40332:34:185::0;-1:-1:-1;;;;;4237:19:120::1;40402:15:185::0;;40382:18;;;40375:43;4176:37:120;;;::::1;::::0;::::1;::::0;40267:18:185;;4176:82:120::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4140:118;;4272:18;;4291:1;4272:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:27;::::0;;;;;::::1;;;:::i;:::-;-1:-1:-1::0;;;;;4272:35:120::1;;4333:19;4386:9;4355:18;;4374:1;4355:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:28;;;:40;;;;:::i;:::-;4272:137;::::0;-1:-1:-1;;;;;;4272:137:120::1;::::0;;;;;;-1:-1:-1;;;;;40621:32:185;;;4272:137:120::1;::::0;::::1;40603:51:185::0;40670:18;;;40663:34;40576:18;;4272:137:120::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3866:554;3861:3;;;;:::i;:::-;;;3810:610;;;-1:-1:-1::0;4430:66:120::1;::::0;-1:-1:-1;;;4430:66:120;;-1:-1:-1;;;;;4430:19:120::1;:46;::::0;::::1;::::0;:66:::1;::::0;4477:18;;;;4430:66:::1;;;:::i;1240:240:27:-:0;1395:4;1469;1418:47;1446:5;1453:4;1459:5;1418:27;:47::i;:::-;:55;;1240:240;-1:-1:-1;;;;;1240:240:27:o;7084:580:135:-;-1:-1:-1;;;;;;;;;;;;;;;;;7184:23:135;;:::i;:::-;7228:3;;7217:14;;:8;7252:3;;;;7241:8;;;:14;7265:8;;;;:12;;;-1:-1:-1;;7452:1:135;7446:4;7217:14;7436:1;7429:4;7422:5;7418:16;7407:53;7396:64;-1:-1:-1;7396:64:135;7557:48;;;;7530:75;;7557:48;7582:9;7530:75;;7632:7;7624:33;;;;-1:-1:-1;;;7624:33:135;;43857:2:185;7624:33:135;;;43839:21:185;43896:2;43876:18;;;43869:30;-1:-1:-1;;;43915:18:185;;;43908:43;43968:18;;7624:33:135;43655:337:185;7624:33:135;7174:490;;7084:580;;;;:::o;4823:615::-;-1:-1:-1;;;;;;;;;;;;;;;;;4926:23:135;;:::i;:::-;4970:4;;4959:15;;:8;4995:4;;;;4984:8;;;:15;5020:4;;5009:8;;;;:15;;;;5045:4;;;;5034:8;;;:15;-1:-1:-1;;5225:1:135;5219:4;4959:15;5209:1;5202:4;5195:5;5191:16;5180:53;5169:64;-1:-1:-1;5169:64:135;5330:48;;;;5303:75;5406:7;5398:33;;;;-1:-1:-1;;;5398:33:135;;44199:2:185;5398:33:135;;;44181:21:185;44238:2;44218:18;;;44211:30;-1:-1:-1;;;44257:18:185;;;44250:43;44310:18;;5398:33:135;43997:337:185;4070:128:135;4119:14;;:::i;:::-;-1:-1:-1;4152:39:135;;;;;;;;3635:77;4152:39;;;;;;3752:77;4152:39;;;;;;;;;;;;;;3869:77;4152:39;;3986:77;4152:39;;;;;;;;;;;;;;;4070:128::o;11044:451::-;-1:-1:-1;;;;;;;;;;;;;;;;;11123:12:135;;;11185:24;-1:-1:-1;;;;;;;;;;;11193:2:135;11185:24;:::i;:::-;11173:36;;11220:239;11259:13;11270:1;11259:10;:13::i;:::-;11247:25;;-1:-1:-1;11247:25:135;-1:-1:-1;;;;;;;;;;;;11336:1:135;11333;11326:24;11318:4;:32;11314:92;;;11378:13;;;;;;;;;;;;;;;;;;;;11044:451;-1:-1:-1;;;11044:451:135:o;11314:92::-;-1:-1:-1;;;;;;;;;;;11434:1:135;11431;11424:24;11420:28;;11220:239;;9189:1112;9397:31;;;;;;;;;;;;;;;;;;9438;;;;;;;;;;;;;;;;9375:4;;;;9397:31;9480:24;;:::i;:::-;9520:9;9515:302;9539:1;9535;:5;9515:302;;;9561:9;9573:5;:1;9577;9573:5;:::i;:::-;9561:17;;9607:2;9610:1;9607:5;;;;;;;:::i;:::-;;;;;:7;9592:5;9598;:1;9607:7;9598:5;:::i;:::-;9592:12;;;;;;;:::i;:::-;;;;:22;9643:2;9646:1;9643:5;;;;;;;:::i;:::-;;;;;:7;;;9628:5;9634:1;9638;9634:5;;;;:::i;:::-;9628:12;;;;;;;:::i;:::-;;;;:22;9679:2;9682:1;9679:5;;;;;;;:::i;:::-;;;;;:7;:10;9664:5;9670;:1;9674;9670:5;:::i;:::-;9664:12;;;;;;;:::i;:::-;;;;:25;9718:2;9721:1;9718:5;;;;;;;:::i;:::-;;;;;:7;9726:1;9718:10;;;;9703:5;9709;:1;9713;9709:5;:::i;:::-;9703:12;;;;;;;:::i;:::-;;;;:25;9757:2;9760:1;9757:5;;;;;;;:::i;:::-;;;;;:7;;;9765:1;9757:10;;;;;;;:::i;:::-;;;;;9742:5;9748;:1;9752;9748:5;:::i;:::-;9742:12;;;;;;;:::i;:::-;;;;:25;9796:2;9799:1;9796:5;;;;;;;:::i;:::-;;;;;:7;;;9804:1;9796:10;;;;;;;:::i;:::-;;;;;9781:5;9787;:1;9791;9787:5;:::i;:::-;9781:12;;;;;;;:::i;:::-;;;;:25;-1:-1:-1;9542:3:135;;;;:::i;:::-;;;;9515:302;;;;9827:21;;:::i;:::-;9858:12;10032:4;10027:3;10012:13;10005:5;10002:1;9990:10;9979:58;10282:6;;9968:69;;10282:11;;;;-1:-1:-1;10265:29:135;;-1:-1:-1;;;;;;;;;;9189:1112:135:o;5465:1257:136:-;5532:12;5650:15;5728:23;5764:20;5777:6;5764:12;:20::i;:::-;5754:31;;-1:-1:-1;;;;;5754:31:136;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5754:31:136;;5728:57;;5841:18;6093:9;6088:601;6122:10;:17;6109:10;:30;6108:45;;;;;6149:3;6145:1;:7;6108:45;6088:601;;;6252:1;:6;;;-1:-1:-1;6339:16:136;;;:21;6335:344;;6524:1;6511:16;;6486:10;6497;6486:22;;;;;;;;:::i;:::-;;;;:41;-1:-1:-1;;;;;6486:41:136;;;;;;;;;6650:12;;;;;6335:344;6155:3;;;:::i;:::-;;;6088:601;;1599:130:42;1513:6;;-1:-1:-1;;;;;1513:6:42;929:10:51;1662:23:42;1654:68;;;;-1:-1:-1;;;1654:68:42;;44541:2:185;1654:68:42;;;44523:21:185;;;44560:18;;;44553:30;44619:34;44599:18;;;44592:62;44671:18;;1654:68:42;44339:356:185;5740:200:120;5847:16;;5823:62;;;-1:-1:-1;;;;;5847:16:120;;;40332:34:185;;40402:15;;;40397:2;40382:18;;40375:43;5823:62:120;;40267:18:185;5823:62:120;;;;;;;5895:16;:38;;-1:-1:-1;;;;;;5895:38:120;-1:-1:-1;;;;;5895:38:120;;;;;;;;;;5740:200::o;15634:148:114:-;15699:20;:28;;-1:-1:-1;;15699:28:114;;;;;;;;;;15742:33;;3560:41:185;;;15742:33:114;;3548:2:185;3533:18;15742:33:114;;;;;;;15634:148;:::o;2311:238:120:-;4910:13:46;;;;;;;4902:69;;;;-1:-1:-1;;;4902:69:46;;44902:2:185;4902:69:46;;;44884:21:185;44941:2;44921:18;;;44914:30;44980:34;44960:18;;;44953:62;-1:-1:-1;;;45031:18:185;;;45024:41;45082:19;;4902:69:46;44700:407:185;4902:69:46;2461:32:120::1;2480:12;2461:18;:32::i;:::-;2503:39;2524:17;2503:20;:39::i;:::-;2311:238:::0;;:::o;3308:360:136:-;3419:7;3438:14;3455:44;3481:17;3455:25;:44::i;:::-;3438:61;;3541:6;3524:13;3519:18;;:1;:18;;3518:29;3510:127;;;;-1:-1:-1;;;3510:127:136;;45314:2:185;3510:127:136;;;45296:21:185;45353:2;45333:18;;;45326:30;45392:34;45372:18;;;45365:62;45463:33;45443:18;;;45436:61;45514:19;;3510:127:136;45112:427:185;3510:127:136;3655:6;-1:-1:-1;3308:360:136;;;;;:::o;6797:406::-;6853:6;;6897:209;6904:5;;6897:209;;6931:5;6935:1;6931;:5;:::i;:::-;6925:12;;;;7020:7;;;;:::i;:::-;;;;6897:209;;5698:1197:135;-1:-1:-1;;;;;;;;;;;;;;;;;5824:4:135;5820:1;:8;;;5812:37;;;;-1:-1:-1;;;5812:37:135;;45948:2:185;5812:37:135;;;45930:21:185;45987:2;45967:18;;;45960:30;-1:-1:-1;;;46006:18:185;;;45999:46;46062:18;;5812:37:135;45746:340:185;5812:37:135;5893:1;:6;;5898:1;5893:6;5890:44;;;-1:-1:-1;5922:1:135;5915:8;;5890:44;6016:19;;;;;;;;;5989:24;6016:19;;;;;;;;;6145:1;;6208;;6337:481;6348:1;6343:6;;:1;:6;;;6337:481;;6493:1;6483:6;;;;;;;6482:12;;:17;6478:84;;;6529:14;6534:3;6539;6529:4;:14::i;:::-;6523:20;;6478:84;6644:14;6649:3;6654;6644:4;:14::i;:::-;6638:20;-1:-1:-1;6765:7:135;6771:1;6765:7;;;;;6790:3;6337:481;;;-1:-1:-1;6885:3:135;;5698:1197;-1:-1:-1;;;;;5698:1197:135:o;4461:295::-;-1:-1:-1;;;;;;;;;;;;;;;;;4600:3:135;;:8;:20;;;;-1:-1:-1;4612:3:135;;;;:8;4600:20;4596:154;;;-1:-1:-1;;4643:13:135;;;;;;;;;-1:-1:-1;4643:13:135;;;;;;;;4461:295::o;4596:154::-;4694:45;;;;;;;;4702:1;:3;;;4694:45;;;;-1:-1:-1;;;;;;;;;;;4721:1:135;:3;;;:16;;;;:::i;:::-;4707:31;;-1:-1:-1;;;;;;;;;;;4707:31:135;:::i;:::-;4694:45;;4687:52;4461:295;-1:-1:-1;;4461:295:135:o;4596:154::-;4461:295;;;:::o;2673:187:42:-;2765:6;;;-1:-1:-1;;;;;2781:17:42;;;-1:-1:-1;;;;;;2781:17:42;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;1997:1172:27:-;2136:7;2191:2;2176:5;:12;:17;;;;:::i;:::-;:22;2155:144;;;;-1:-1:-1;;;2155:144:27;;46293:2:185;2155:144:27;;;46275:21:185;46332:2;46312:18;;;46305:30;46371:34;46351:18;;;46344:62;46442:34;46422:18;;;46415:62;-1:-1:-1;;;46493:19:185;;;46486:42;46545:19;;2155:144:27;46091:479:185;2155:144:27;2332:4;2363:2;2346:788;2372:5;:12;2367:1;:17;2346:788;;2413:9;2421:1;2413:5;:9;:::i;:::-;2409:715;;2572:12;2566:4;2559:26;2636:1;2629:5;2625:13;2619:20;2613:4;2606:34;2693:4;2687;2677:21;2661:37;;2739:1;2732:5;2728:13;2719:22;;2409:715;;;2940:1;2933:5;2929:13;2923:20;2917:4;2910:34;2978:12;2972:4;2965:26;3044:4;3038;3028:21;3012:37;;3090:1;3083:5;3079:13;3070:22;;2409:715;2386:7;2391:2;2386:7;;:::i;:::-;;;2346:788;;11616:433:135;11670:7;;;-1:-1:-1;;;;;;;;;;;11801:1:135;-1:-1:-1;;;;;;;;;;;11785:1:135;-1:-1:-1;;;;;;;;;;;11769:1:135;11766;11759:24;11752:47;11745:70;11730:85;;11912:9;11924:91;11931:4;11937:65;-1:-1:-1;;;;;;;;;;;11924:6:135;:91::i;:::-;12034:4;;11912:103;;-1:-1:-1;11616:433:135;;-1:-1:-1;;;11616:433:135:o;1188:1693:136:-;1278:7;571:3;1409:17;:24;:49;;1401:142;;;;-1:-1:-1;;;1401:142:136;;46777:2:185;1401:142:136;;;46759:21:185;46816:2;46796:18;;;46789:30;;;46855:34;46835:18;;;46828:62;46926:34;46906:18;;;46899:62;-1:-1:-1;;;46977:19:185;;;46970:35;47022:19;;1401:142:136;46575:472:185;1401:142:136;1619:24;;1615:77;;-1:-1:-1;1679:1:136;;1188:1693;-1:-1:-1;1188:1693:136:o;1615:77::-;1770:14;1873:15;2180:17;2198:1;2180:20;;;;;;;;:::i;:::-;;;;;2169:1;2180:20;;;;;2169:32;;;;-1:-1:-1;2284:568:136;2308:17;:24;2304:1;:28;2284:568;;;2480:17;2498:1;2480:20;;;;;;;;:::i;:::-;;;;;2469:1;2480:20;;;;;2469:32;;-1:-1:-1;2665:16:136;;;2657:100;;;;-1:-1:-1;;;2657:100:136;;47254:2:185;2657:100:136;;;47236:21:185;47293:2;47273:18;;;47266:30;47332:34;47312:18;;;47305:62;47403:34;47383:18;;;47376:62;-1:-1:-1;;;47454:19:185;;;47447:38;47502:19;;2657:100:136;47052:475:185;2657:100:136;2824:16;;;;2334:3;;;:::i;:::-;;;2284:568;;;-1:-1:-1;2868:6:136;;1188:1693;-1:-1:-1;;;1188:1693:136:o;12055:874:135:-;12146:14;12172:12;12194:24;;:::i;:::-;12228:20;;:::i;:::-;12269:4;12258:15;;;12341:8;;;:15;;;12425:8;;;:15;;;12509:8;;;:16;;;12535:8;;;:20;;;12565:8;;;:19;;;12673:6;12667:4;12258:15;12571:1;12650:4;12643:5;12639:16;12628:58;12617:69;-1:-1:-1;12617:69:135;12783:48;;;;12756:75;12858:7;12850:46;;;;-1:-1:-1;;;12850:46:135;;47734:2:185;12850:46:135;;;47716:21:185;47773:2;47753:18;;;47746:30;47812:28;47792:18;;;47785:56;47858:18;;12850:46:135;47532:350:185;12850:46:135;-1:-1:-1;12913:9:135;;;-1:-1:-1;;;;;12055:874:135:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:127:185:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:128;186:3;217:1;213:6;210:1;207:13;204:39;;;223:18;;:::i;:::-;-1:-1:-1;259:9:185;;146:128::o;461:127::-;522:10;517:3;513:20;510:1;503:31;553:4;550:1;543:15;577:4;574:1;567:15;593:257;665:4;659:11;;;697:17;;-1:-1:-1;;;;;729:34:185;;765:22;;;726:62;723:88;;;791:18;;:::i;:::-;827:4;820:24;593:257;:::o;1111:255::-;1183:2;1177:9;1225:6;1213:19;;-1:-1:-1;;;;;1247:34:185;;1283:22;;;1244:62;1241:88;;;1309:18;;:::i;1371:275::-;1442:2;1436:9;1507:2;1488:13;;-1:-1:-1;;1484:27:185;1472:40;;-1:-1:-1;;;;;1527:34:185;;1563:22;;;1524:62;1521:88;;;1589:18;;:::i;:::-;1625:2;1618:22;1371:275;;-1:-1:-1;1371:275:185:o;1651:406::-;1715:5;-1:-1:-1;;;;;1741:6:185;1738:30;1735:56;;;1771:18;;:::i;:::-;1809:57;1854:2;1833:15;;-1:-1:-1;;1829:29:185;1860:4;1825:40;1809:57;:::i;:::-;1800:66;;1889:6;1882:5;1875:21;1929:3;1920:6;1915:3;1911:16;1908:25;1905:45;;;1946:1;1943;1936:12;1905:45;1995:6;1990:3;1983:4;1976:5;1972:16;1959:43;2049:1;2042:4;2033:6;2026:5;2022:18;2018:29;2011:40;1651:406;;;;;:::o;2062:220::-;2104:5;2157:3;2150:4;2142:6;2138:17;2134:27;2124:55;;2175:1;2172;2165:12;2124:55;2197:79;2272:3;2263:6;2250:20;2243:4;2235:6;2231:17;2197:79;:::i;:::-;2188:88;2062:220;-1:-1:-1;;;2062:220:185:o;2287:131::-;-1:-1:-1;;;;;2362:31:185;;2352:42;;2342:70;;2408:1;2405;2398:12;2423:992;2554:6;2562;2570;2578;2586;2594;2602;2610;2663:3;2651:9;2642:7;2638:23;2634:33;2631:53;;;2680:1;2677;2670:12;2631:53;2703:23;;;-1:-1:-1;2773:2:185;2758:18;;2745:32;;-1:-1:-1;2824:2:185;2809:18;;2796:32;;-1:-1:-1;2878:2:185;2863:18;;2850:32;-1:-1:-1;;;;;;2911:43:185;;2901:54;;2891:82;;2969:1;2966;2959:12;2891:82;2992:5;-1:-1:-1;3044:3:185;3029:19;;3016:33;;-1:-1:-1;3100:3:185;3085:19;;3072:33;-1:-1:-1;;;;;3117:30:185;;3114:50;;;3160:1;3157;3150:12;3114:50;3183:49;3224:7;3215:6;3204:9;3200:22;3183:49;:::i;:::-;3173:59;;;3279:3;3268:9;3264:19;3251:33;3241:43;;3336:3;3325:9;3321:19;3308:33;3350;3375:7;3350:33;:::i;:::-;3402:7;3392:17;;;2423:992;;;;;;;;;;;:::o;3612:282::-;3666:5;3714:4;3702:9;3697:3;3693:19;3689:30;3686:50;;;3732:1;3729;3722:12;3686:50;3754:22;;:::i;:::-;3745:31;;3812:9;3799:23;3792:5;3785:38;3883:2;3872:9;3868:18;3855:32;3850:2;3843:5;3839:14;3832:56;3612:282;;;;:::o;3899:484::-;3949:5;4002:3;3995:4;3987:6;3983:17;3979:27;3969:55;;4020:1;4017;4010:12;3969:55;4044:22;;:::i;:::-;4088:3;4126:2;4118:6;4114:15;4152:3;4144:6;4141:15;4138:35;;;4169:1;4166;4159:12;4138:35;4193:6;4208:146;4224:6;4219:3;4216:15;4208:146;;;4292:17;;4280:30;;4339:4;4330:14;;;;4241;4208:146;;;-1:-1:-1;4372:5:185;;3899:484;-1:-1:-1;;;;;3899:484:185:o;4388:320::-;4442:5;4490:4;4478:9;4473:3;4469:19;4465:30;4462:50;;;4508:1;4505;4498:12;4462:50;4530:22;;:::i;:::-;4521:31;;4575:40;4611:3;4600:9;4575:40;:::i;:::-;4568:5;4561:55;4650:51;4697:3;4690:4;4679:9;4675:20;4650:51;:::i;:::-;4643:4;4636:5;4632:16;4625:77;4388:320;;;;:::o;4713:530::-;4877:6;4885;4893;4901;4954:3;4942:9;4933:7;4929:23;4925:33;4922:53;;;4971:1;4968;4961:12;4922:53;5007:9;4994:23;4984:33;;5036:54;5082:7;5077:2;5066:9;5062:18;5036:54;:::i;:::-;5026:64;;5109:54;5155:7;5150:2;5139:9;5135:18;5109:54;:::i;:::-;5099:64;;5182:55;5229:7;5223:3;5212:9;5208:19;5182:55;:::i;:::-;5172:65;;4713:530;;;;;;;:::o;5521:182::-;5580:4;-1:-1:-1;;;;;5605:6:185;5602:30;5599:56;;;5635:18;;:::i;:::-;-1:-1:-1;5680:1:185;5676:14;5692:4;5672:25;;5521:182::o;5708:163::-;5775:20;;5835:10;5824:22;;5814:33;;5804:61;;5861:1;5858;5851:12;5876:665;5929:5;5982:3;5975:4;5967:6;5963:17;5959:27;5949:55;;6000:1;5997;5990:12;5949:55;6036:6;6023:20;6062:4;6086:59;6102:42;6141:2;6102:42;:::i;:::-;6086:59;:::i;:::-;6179:15;;;6265:1;6261:10;;;;6249:23;;6245:32;;;6210:12;;;;6289:15;;;6286:35;;;6317:1;6314;6307:12;6286:35;6353:2;6345:6;6341:15;6365:147;6381:6;6376:3;6373:15;6365:147;;;6447:22;6465:3;6447:22;:::i;:::-;6435:35;;6490:12;;;;6398;;6365:147;;;-1:-1:-1;6530:5:185;5876:665;-1:-1:-1;;;;;;5876:665:185:o;6546:688::-;6607:5;6660:3;6653:4;6645:6;6641:17;6637:27;6627:55;;6678:1;6675;6668:12;6627:55;6714:6;6701:20;6740:4;6764:59;6780:42;6819:2;6780:42;:::i;6764:59::-;6857:15;;;6943:1;6939:10;;;;6927:23;;6923:32;;;6888:12;;;;6967:15;;;6964:35;;;6995:1;6992;6985:12;6964:35;7031:2;7023:6;7019:15;7043:162;7059:6;7054:3;7051:15;7043:162;;;7127:35;7158:3;7153;7127:35;:::i;:::-;7115:48;;7183:12;;;;7085:4;7076:14;7043:162;;7239:907;7302:5;7355:3;7348:4;7340:6;7336:17;7332:27;7322:55;;7373:1;7370;7363:12;7322:55;7409:6;7396:20;7435:4;7459:59;7475:42;7514:2;7475:42;:::i;7459:59::-;7552:15;;;7638:1;7634:10;;;;7622:23;;7618:32;;;7583:12;;;;7662:15;;;7659:35;;;7690:1;7687;7680:12;7659:35;7726:2;7718:6;7714:15;7738:379;7754:6;7749:3;7746:15;7738:379;;;7840:3;7827:17;-1:-1:-1;;;;;7863:11:185;7860:35;7857:125;;;7936:1;7965:2;7961;7954:14;7857:125;8007:67;8070:3;8065:2;8051:11;8043:6;8039:24;8035:33;8007:67;:::i;:::-;7995:80;;-1:-1:-1;8095:12:185;;;;7771;;7738:379;;8151:1566;8225:5;8273:6;8261:9;8256:3;8252:19;8248:32;8245:52;;;8293:1;8290;8283:12;8245:52;8315:22;;:::i;:::-;8306:31;;8373:9;8360:23;-1:-1:-1;;;;;8443:2:185;8435:6;8432:14;8429:34;;;8459:1;8456;8449:12;8429:34;8486:56;8538:3;8529:6;8518:9;8514:22;8486:56;:::i;:::-;8479:5;8472:71;8596:2;8585:9;8581:18;8568:32;8552:48;;8625:2;8615:8;8612:16;8609:36;;;8641:1;8638;8631:12;8609:36;8677:66;8739:3;8728:8;8717:9;8713:24;8677:66;:::i;:::-;8672:2;8665:5;8661:14;8654:90;8797:2;8786:9;8782:18;8769:32;8753:48;;8826:2;8816:8;8813:16;8810:36;;;8842:1;8839;8832:12;8810:36;8878:66;8940:3;8929:8;8918:9;8914:24;8878:66;:::i;:::-;8873:2;8866:5;8862:14;8855:90;8977:50;9023:3;9018:2;9007:9;9003:18;8977:50;:::i;:::-;8972:2;8965:5;8961:14;8954:74;9062:51;9109:3;9103;9092:9;9088:19;9062:51;:::i;:::-;9055:4;9048:5;9044:16;9037:77;9167:3;9156:9;9152:19;9139:33;9123:49;;9197:2;9187:8;9184:16;9181:36;;;9213:1;9210;9203:12;9181:36;9251:58;9305:3;9294:8;9283:9;9279:24;9251:58;:::i;:::-;9244:4;9237:5;9233:16;9226:84;9363:3;9352:9;9348:19;9335:33;9319:49;;9393:2;9383:8;9380:16;9377:36;;;9409:1;9406;9399:12;9377:36;9447:58;9501:3;9490:8;9479:9;9475:24;9447:58;:::i;:::-;9440:4;9433:5;9429:16;9422:84;9559:3;9548:9;9544:19;9531:33;9515:49;;9589:2;9579:8;9576:16;9573:36;;;9605:1;9602;9595:12;9573:36;;9642:68;9706:3;9695:8;9684:9;9680:24;9642:68;:::i;:::-;9636:3;9629:5;9625:15;9618:93;;8151:1566;;;;:::o;9722:454::-;9836:6;9844;9897:2;9885:9;9876:7;9872:23;9868:32;9865:52;;;9913:1;9910;9903:12;9865:52;9949:9;9936:23;9926:33;;10010:2;9999:9;9995:18;9982:32;-1:-1:-1;;;;;10029:6:185;10026:30;10023:50;;;10069:1;10066;10059:12;10023:50;10092:78;10162:7;10153:6;10142:9;10138:22;10092:78;:::i;:::-;10082:88;;;9722:454;;;;;:::o;10181:247::-;10240:6;10293:2;10281:9;10272:7;10268:23;10264:32;10261:52;;;10309:1;10306;10299:12;10261:52;10348:9;10335:23;10367:31;10392:5;10367:31;:::i;10433:658::-;10604:2;10656:21;;;10726:13;;10629:18;;;10748:22;;;10575:4;;10604:2;10827:15;;;;10801:2;10786:18;;;10575:4;10870:195;10884:6;10881:1;10878:13;10870:195;;;10949:13;;-1:-1:-1;;;;;10945:39:185;10933:52;;11040:15;;;;11005:12;;;;10981:1;10899:9;10870:195;;;-1:-1:-1;11082:3:185;;10433:658;-1:-1:-1;;;;;;10433:658:185:o;11096:118::-;11182:5;11175:13;11168:21;11161:5;11158:32;11148:60;;11204:1;11201;11194:12;11219:241;11275:6;11328:2;11316:9;11307:7;11303:23;11299:32;11296:52;;;11344:1;11341;11334:12;11296:52;11383:9;11370:23;11402:28;11424:5;11402:28;:::i;11465:388::-;11533:6;11541;11594:2;11582:9;11573:7;11569:23;11565:32;11562:52;;;11610:1;11607;11600:12;11562:52;11649:9;11636:23;11668:31;11693:5;11668:31;:::i;:::-;11718:5;-1:-1:-1;11775:2:185;11760:18;;11747:32;11788:33;11747:32;11788:33;:::i;:::-;11840:7;11830:17;;;11465:388;;;;;:::o;11858:526::-;11980:6;11988;11996;12049:2;12037:9;12028:7;12024:23;12020:32;12017:52;;;12065:1;12062;12055:12;12017:52;12101:9;12088:23;12078:33;;12130:37;12163:2;12152:9;12148:18;12130:37;:::i;:::-;12120:47;;12218:2;12207:9;12203:18;12190:32;-1:-1:-1;;;;;12237:6:185;12234:30;12231:50;;;12277:1;12274;12267:12;12231:50;12300:78;12370:7;12361:6;12350:9;12346:22;12300:78;:::i;:::-;12290:88;;;11858:526;;;;;:::o;12389:467::-;12441:3;12479:5;12473:12;12506:6;12501:3;12494:19;12532:4;12561:2;12556:3;12552:12;12545:19;;12598:2;12591:5;12587:14;12619:1;12629:202;12643:6;12640:1;12637:13;12629:202;;;12708:13;;-1:-1:-1;;;;;12704:46:185;12692:59;;12771:12;;;;12806:15;;;;12665:1;12658:9;12629:202;;;-1:-1:-1;12847:3:185;;12389:467;-1:-1:-1;;;;;12389:467:185:o;12861:645::-;13090:2;13079:9;13072:21;13053:4;13128:6;13122:13;13171:2;13166;13155:9;13151:18;13144:30;13197:62;13254:3;13243:9;13239:19;13225:12;13197:62;:::i;:::-;13183:76;;13308:4;13300:6;13296:17;13290:24;13382:2;13378:7;13366:9;13358:6;13354:22;13350:36;13345:2;13334:9;13330:18;13323:64;13404:51;13448:6;13432:14;13404:51;:::i;:::-;13396:59;;;;13493:6;13486:4;13475:9;13471:20;13464:36;12861:645;;;;;:::o;13511:348::-;13563:8;13573:6;13627:3;13620:4;13612:6;13608:17;13604:27;13594:55;;13645:1;13642;13635:12;13594:55;-1:-1:-1;13668:20:185;;-1:-1:-1;;;;;13700:30:185;;13697:50;;;13743:1;13740;13733:12;13697:50;13780:4;13772:6;13768:17;13756:29;;13832:3;13825:4;13816:6;13808;13804:19;13800:30;13797:39;13794:59;;;13849:1;13846;13839:12;13794:59;13511:348;;;;;:::o;13864:479::-;13944:6;13952;13960;14013:2;14001:9;13992:7;13988:23;13984:32;13981:52;;;14029:1;14026;14019:12;13981:52;14065:9;14052:23;14042:33;;14126:2;14115:9;14111:18;14098:32;-1:-1:-1;;;;;14145:6:185;14142:30;14139:50;;;14185:1;14182;14175:12;14139:50;14224:59;14275:7;14266:6;14255:9;14251:22;14224:59;:::i;:::-;13864:479;;14302:8;;-1:-1:-1;14198:85:185;;-1:-1:-1;;;;13864:479:185:o;15385:478::-;15464:6;15472;15480;15533:2;15521:9;15512:7;15508:23;15504:32;15501:52;;;15549:1;15546;15539:12;15501:52;15589:9;15576:23;-1:-1:-1;;;;;15614:6:185;15611:30;15608:50;;;15654:1;15651;15644:12;15608:50;15693:59;15744:7;15735:6;15724:9;15720:22;15693:59;:::i;:::-;15771:8;;15667:85;;-1:-1:-1;15853:2:185;15838:18;;;;15825:32;;15385:478;-1:-1:-1;;;;15385:478:185:o;15868:1026::-;15980:6;15988;16041:2;16029:9;16020:7;16016:23;16012:32;16009:52;;;16057:1;16054;16047:12;16009:52;16096:9;16083:23;16115:31;16140:5;16115:31;:::i;:::-;16165:5;-1:-1:-1;16221:2:185;16206:18;;16193:32;-1:-1:-1;;;;;16274:14:185;;;16271:34;;;16301:1;16298;16291:12;16271:34;16324:22;;;;16380:4;16362:16;;;16358:27;16355:47;;;16398:1;16395;16388:12;16355:47;16431:2;16425:9;16473:4;16465:6;16461:17;16528:6;16516:10;16513:22;16508:2;16496:10;16493:18;16490:46;16487:72;;;16539:18;;:::i;:::-;16575:2;16568:22;16615:16;;16643;;;16640:36;;;16672:1;16669;16662:12;16640:36;16700:44;16736:7;16725:8;16721:2;16717:17;16700:44;:::i;:::-;16692:6;16685:60;;16799:2;16795;16791:11;16778:25;16773:2;16765:6;16761:15;16754:50;16858:2;16854;16850:11;16837:25;16832:2;16824:6;16820:15;16813:50;16882:6;16872:16;;;;;15868:1026;;;;;:::o;16899:450::-;16968:6;17021:2;17009:9;17000:7;16996:23;16992:32;16989:52;;;17037:1;17034;17027:12;16989:52;17077:9;17064:23;-1:-1:-1;;;;;17102:6:185;17099:30;17096:50;;;17142:1;17139;17132:12;17096:50;17165:22;;17218:4;17210:13;;17206:27;-1:-1:-1;17196:55:185;;17247:1;17244;17237:12;17196:55;17270:73;17335:7;17330:2;17317:16;17312:2;17308;17304:11;17270:73;:::i;:::-;17260:83;16899:450;-1:-1:-1;;;;16899:450:185:o;17354:589::-;17477:6;17485;17493;17546:2;17534:9;17525:7;17521:23;17517:32;17514:52;;;17562:1;17559;17552:12;17514:52;17598:9;17585:23;17575:33;;17658:2;17647:9;17643:18;17630:32;17671:31;17696:5;17671:31;:::i;17948:180::-;18007:6;18060:2;18048:9;18039:7;18035:23;18031:32;18028:52;;;18076:1;18073;18066:12;18028:52;-1:-1:-1;18099:23:185;;17948:180;-1:-1:-1;17948:180:185:o;18745:652::-;18868:6;18876;18929:2;18917:9;18908:7;18904:23;18900:32;18897:52;;;18945:1;18942;18935:12;18897:52;18985:9;18972:23;-1:-1:-1;;;;;19055:2:185;19047:6;19044:14;19041:34;;;19071:1;19068;19061:12;19041:34;19109:6;19098:9;19094:22;19084:32;;19154:7;19147:4;19143:2;19139:13;19135:27;19125:55;;19176:1;19173;19166:12;19125:55;19216:2;19203:16;19242:2;19234:6;19231:14;19228:34;;;19258:1;19255;19248:12;19228:34;19311:7;19306:2;19296:6;19293:1;19289:14;19285:2;19281:23;19277:32;19274:45;19271:65;;;19332:1;19329;19322:12;19271:65;19363:2;19355:11;;;;;19385:6;;-1:-1:-1;18745:652:185;;-1:-1:-1;;;;18745:652:185:o;19402:294::-;19559:19;;;19616:2;19612:15;-1:-1:-1;;;;;;19608:53:185;19603:2;19594:12;;19587:75;19687:2;19678:12;;19402:294::o;20122:127::-;20183:10;20178:3;20174:20;20171:1;20164:31;20214:4;20211:1;20204:15;20238:4;20235:1;20228:15;21099:209;21131:1;21157;21147:132;;21201:10;21196:3;21192:20;21189:1;21182:31;21236:4;21233:1;21226:15;21264:4;21261:1;21254:15;21147:132;-1:-1:-1;21293:9:185;;21099:209::o;22365:278::-;22404:7;-1:-1:-1;;;;;22489:2:185;22486:1;22482:10;22519:2;22516:1;22512:10;22575:3;22571:2;22567:12;22562:3;22559:21;22552:3;22545:11;22538:19;22534:47;22531:73;;;22584:18;;:::i;:::-;22624:13;;22365:278;-1:-1:-1;;;;22365:278:185:o;22648:168::-;22688:7;22754:1;22750;22746:6;22742:14;22739:1;22736:21;22731:1;22724:9;22717:17;22713:45;22710:71;;;22761:18;;:::i;:::-;-1:-1:-1;22801:9:185;;22648:168::o;22821:428::-;23023:2;23005:21;;;23062:2;23042:18;;;23035:30;;;23101:34;23081:18;;;23074:62;23172:34;23167:2;23152:18;;23145:62;23239:3;23224:19;;22821:428::o;23254:125::-;23294:4;23322:1;23319;23316:8;23313:34;;;23327:18;;:::i;:::-;-1:-1:-1;23364:9:185;;23254:125::o;23384:424::-;23586:2;23568:21;;;23625:2;23605:18;;;23598:30;23664:34;23659:2;23644:18;;23637:62;23735:30;23730:2;23715:18;;23708:58;23798:3;23783:19;;23384:424::o;23813:184::-;23883:6;23936:2;23924:9;23915:7;23911:23;23907:32;23904:52;;;23952:1;23949;23942:12;23904:52;-1:-1:-1;23975:16:185;;23813:184;-1:-1:-1;23813:184:185:o;24184:290::-;24254:6;24307:2;24295:9;24286:7;24282:23;24278:32;24275:52;;;24323:1;24320;24313:12;24275:52;24349:16;;-1:-1:-1;;;;;24394:31:185;;24384:42;;24374:70;;24440:1;24437;24430:12;24479:273;24547:6;24600:2;24588:9;24579:7;24575:23;24571:32;24568:52;;;24616:1;24613;24606:12;24568:52;24648:9;24642:16;24698:4;24691:5;24687:16;24680:5;24677:27;24667:55;;24718:1;24715;24708:12;25135:135;25174:3;-1:-1:-1;;25195:17:185;;25192:43;;;25215:18;;:::i;:::-;-1:-1:-1;25262:1:185;25251:13;;25135:135::o;25535:137::-;-1:-1:-1;;;;;25613:5:185;25609:38;25602:5;25599:49;25589:77;;25662:1;25659;25652:12;25677:493;25780:6;25833:2;25821:9;25812:7;25808:23;25804:32;25801:52;;;25849:1;25846;25839:12;25801:52;25875:22;;:::i;:::-;25927:9;25921:16;25946:33;25971:7;25946:33;:::i;:::-;25988:22;;26055:2;26040:18;;26034:25;26068:32;26034:25;26068:32;:::i;:::-;26127:2;26116:14;;26109:31;26120:5;25677:493;-1:-1:-1;;;25677:493:185:o;26175:251::-;26245:6;26298:2;26286:9;26277:7;26273:23;26269:32;26266:52;;;26314:1;26311;26304:12;26266:52;26346:9;26340:16;26365:31;26390:5;26365:31;:::i;30654:294::-;30724:6;30777:2;30765:9;30756:7;30752:23;30748:32;30745:52;;;30793:1;30790;30783:12;30745:52;30819:16;;-1:-1:-1;;30864:35:185;;30854:46;;30844:74;;30914:1;30911;30904:12;31499:249;31568:6;31621:2;31609:9;31600:7;31596:23;31592:32;31589:52;;;31637:1;31634;31627:12;31589:52;31669:9;31663:16;31688:30;31712:5;31688:30;:::i;32200:237::-;32239:4;-1:-1:-1;;;;;32344:10:185;;;;32314;;32366:12;;;32363:38;;;32381:18;;:::i;:::-;32418:13;;32200:237;-1:-1:-1;;;32200:237:185:o;33344:644::-;33592:10;33587:3;33583:20;33574:6;33569:3;33565:16;33561:43;33556:3;33549:56;33531:3;33636:1;33631:3;33627:11;33667:6;33661:13;33716:4;33755:2;33747:6;33743:15;33776:1;33786:175;33800:6;33797:1;33794:13;33786:175;;;33863:13;;33849:28;;33899:14;;;;33936:15;;;;33822:1;33815:9;33786:175;;;-1:-1:-1;33977:5:185;;33344:644;-1:-1:-1;;;;;;;33344:644:185:o;34702:267::-;34791:6;34786:3;34779:19;34843:6;34836:5;34829:4;34824:3;34820:14;34807:43;-1:-1:-1;34895:1:185;34870:16;;;34888:4;34866:27;;;34859:38;;;;34951:2;34930:15;;;-1:-1:-1;;34926:29:185;34917:39;;;34913:50;;34702:267::o;34974:333::-;35171:10;35163:6;35159:23;35148:9;35141:42;35219:2;35214;35203:9;35199:18;35192:30;35122:4;35239:62;35297:2;35286:9;35282:18;35274:6;35266;35239:62;:::i;:::-;35231:70;34974:333;-1:-1:-1;;;;;34974:333:185:o;35312:430::-;-1:-1:-1;;;;;35525:32:185;;35507:51;;35606:10;35594:23;;35589:2;35574:18;;35567:51;35654:2;35649;35634:18;;35627:30;;;-1:-1:-1;;35674:62:185;;35717:18;;35709:6;35701;35674:62;:::i;:::-;35666:70;35312:430;-1:-1:-1;;;;;;35312:430:185:o;35747:271::-;35930:6;35922;35917:3;35904:33;35886:3;35956:16;;35981:13;;;35956:16;35747:271;-1:-1:-1;35747:271:185:o;36023:486::-;36225:2;36207:21;;;36264:2;36244:18;;;36237:30;36303:34;36298:2;36283:18;;36276:62;36374:34;36369:2;36354:18;;36347:62;-1:-1:-1;;;36440:3:185;36425:19;;36418:49;36499:3;36484:19;;36023:486::o;36514:471::-;36555:3;36593:5;36587:12;36620:6;36615:3;36608:19;36645:1;36655:162;36669:6;36666:1;36663:13;36655:162;;;36731:4;36787:13;;;36783:22;;36777:29;36759:11;;;36755:20;;36748:59;36684:12;36655:162;;;36835:6;36832:1;36829:13;36826:87;;;36901:1;36894:4;36885:6;36880:3;36876:16;36872:27;36865:38;36826:87;-1:-1:-1;36967:2:185;36946:15;-1:-1:-1;;36942:29:185;36933:39;;;;36974:4;36929:50;;36514:471;-1:-1:-1;;36514:471:185:o;36990:624::-;37264:1;37260;37255:3;37251:11;37247:19;37239:6;37235:32;37224:9;37217:51;37304:2;37299;37288:9;37284:18;37277:30;37198:4;37342:6;37336:13;37385:4;37380:2;37369:9;37365:18;37358:32;37413:51;37459:3;37448:9;37444:19;37430:12;37413:51;:::i;:::-;37399:65;;37520:2;37512:6;37508:15;37502:22;37495:4;37484:9;37480:20;37473:52;37580:2;37572:6;37568:15;37562:22;37556:3;37545:9;37541:19;37534:51;37602:6;37594:14;;;36990:624;;;;;:::o;37619:219::-;37768:2;37757:9;37750:21;37731:4;37788:44;37828:2;37817:9;37813:18;37805:6;37788:44;:::i;38735:335::-;38838:4;38896:11;38883:25;38990:3;38986:8;38975;38959:14;38955:29;38951:44;38931:18;38927:69;38917:97;;39010:1;39007;39000:12;38917:97;39031:33;;;;;38735:335;-1:-1:-1;;38735:335:185:o;39075:142::-;39151:20;;39180:31;39151:20;39180:31;:::i;39870:245::-;39937:6;39990:2;39978:9;39969:7;39965:23;39961:32;39958:52;;;40006:1;40003;39996:12;39958:52;40038:9;40032:16;40057:28;40079:5;40057:28;:::i;40708:756::-;40838:6;40833:3;40826:19;40808:3;40864:4;40893:2;40888:3;40884:12;40877:19;;40919:5;40942:1;40952:487;40966:6;40963:1;40960:13;40952:487;;;41043:6;41030:20;41063:33;41088:7;41063:33;:::i;:::-;-1:-1:-1;;;;;41121:33:185;41109:46;;41196:15;;;41183:29;41225:32;41183:29;41225:32;:::i;:::-;-1:-1:-1;;;;;41291:40:185;41277:12;;;41270:62;41355:4;41379:12;;;;41414:15;;;;;40988:1;40981:9;40952:487;;41469:2181;41722:2;41774:21;;;41747:18;;;41830:22;;;41693:4;;41871:2;41889:18;;;41953:1;41949:14;;;41934:30;;41930:39;;41992:6;41693:4;42026:1595;42040:6;42037:1;42034:13;42026:1595;;;42105:22;;;-1:-1:-1;;42101:36:185;42089:49;;42177:20;;42252:14;42248:27;;;-1:-1:-1;;42244:42:185;42220:67;;42210:95;;42301:1;42298;42291:12;42210:95;42331:31;;42385:4;42430:19;;42506:14;42502:26;;;-1:-1:-1;;42498:40:185;42472:67;;42462:95;;42553:1;42550;42543:12;42462:95;42585:32;;42644:21;;-1:-1:-1;;;;;42681:30:185;;42678:50;;;42724:1;42721;42714:12;42678:50;42782:6;42779:1;42775:14;42759;42755:35;42748:5;42744:47;42741:67;;;42804:1;42801;42794:12;42741:67;42836:2;42828:6;42821:18;42866:110;42972:2;42964:6;42960:15;42952:6;42947:2;42938:7;42934:16;42866:110;:::i;:::-;42852:124;;;;43009:42;43047:2;43040:5;43036:14;43009:42;:::i;:::-;-1:-1:-1;;;;;14431:31:185;43114:15;;;14419:44;43180:14;;;43167:28;43150:15;;;43143:53;43219:4;43258:33;43276:14;;;43258:33;:::i;:::-;18209:10;18198:22;43338:15;;;18186:35;43377:4;43416:33;43434:14;;;43416:33;:::i;:::-;18209:10;18198:22;43496:15;;18186:35;;;;-1:-1:-1;43599:12:185;;;;43564:15;;;;42062:1;42055:9;42026:1595;;;-1:-1:-1;43638:6:185;;41469:2181;-1:-1:-1;;;;;;;;41469:2181:185:o;45544:197::-;45582:3;45610:6;45651:2;45644:5;45640:14;45678:2;45669:7;45666:15;45663:41;;;45684:18;;:::i;:::-;45733:1;45720:15;;45544:197;-1:-1:-1;;;45544:197:185:o","linkReferences":{},"immutableReferences":{"21316":[{"start":1104,"length":32},{"start":4345,"length":32},{"start":5784,"length":32},{"start":6207,"length":32},{"start":6800,"length":32}],"21319":[{"start":1001,"length":32},{"start":7644,"length":32},{"start":8140,"length":32}],"21322":[{"start":925,"length":32},{"start":7151,"length":32}],"21325":[{"start":1552,"length":32},{"start":6620,"length":32}],"26155":[{"start":1050,"length":32},{"start":9559,"length":32},{"start":9771,"length":32},{"start":9898,"length":32}],"26158":[{"start":12376,"length":32},{"start":12564,"length":32},{"start":12800,"length":32}],"26161":[{"start":3125,"length":32},{"start":3268,"length":32},{"start":3396,"length":32},{"start":9475,"length":32},{"start":9679,"length":32},{"start":10822,"length":32},{"start":11238,"length":32}],"26164":[{"start":3598,"length":32},{"start":3945,"length":32},{"start":4096,"length":32},{"start":11016,"length":32},{"start":11403,"length":32},{"start":11562,"length":32}]}},"methodIdentifiers":{"avsDirectory()":"6b3aa72e","balanceOf(address)":"70a08231","batchesState(bytes32)":"b099627e","blsApkRegistry()":"5df45946","checkPublicInput(bytes,bytes32)":"95c6d604","checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":"4ae07c37","createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])":"fce36c7d","createNewTask(bytes32,string)":"5c008994","delegation()":"df5cf723","deregisterOperatorFromAVS(address)":"a364f4da","getOperatorRestakedStrategies(address)":"33cfb7b7","getRestakeableStrategies()":"e481af9d","initialize(address,address)":"485cc955","owner()":"8da5cb5b","registerOperatorToAVS(address,(bytes,bytes32,uint256))":"9926ee7d","registryCoordinator()":"6d14a987","renounceOwnership()":"715018a6","respondToTask(bytes32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":"2dd94eba","respondToTaskV2(bytes32,address,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":"ab21739a","rewardsInitiator()":"fc299dee","setRewardsInitiator(address)":"3bc28c8c","setStaleStakesForbidden(bool)":"416c7e5e","stakeRegistry()":"68304835","staleStakesForbidden()":"b98d0908","transferOwnership(address)":"f2fde38b","trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))":"171f1d5b","updateAVSMetadataURI(string)":"a98fb355","verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256,address)":"06045a91"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IAVSDirectory\",\"name\":\"__avsDirectory\",\"type\":\"address\"},{\"internalType\":\"contract IRewardsCoordinator\",\"name\":\"__rewardsCoordinator\",\"type\":\"address\"},{\"internalType\":\"contract IRegistryCoordinator\",\"name\":\"__registryCoordinator\",\"type\":\"address\"},{\"internalType\":\"contract IStakeRegistry\",\"name\":\"__stakeRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"BatchVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"batcher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"name\":\"BatcherBalanceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"taskCreatedBlock\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"batchDataPointer\",\"type\":\"string\"}],\"name\":\"NewBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"taskCreatedBlock\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"batchDataPointer\",\"type\":\"string\"}],\"name\":\"NewBatchV2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prevRewardsInitiator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRewardsInitiator\",\"type\":\"address\"}],\"name\":\"RewardsInitiatorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"StaleStakesForbiddenUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"avsDirectory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"batchesState\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"taskCreatedBlock\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"responded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blsApkRegistry\",\"outputs\":[{\"internalType\":\"contract IBLSApkRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"checkPublicInput\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"referenceBlockNumber\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint32[]\",\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"quorumApks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"},{\"internalType\":\"uint32[]\",\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[][]\",\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\"}],\"internalType\":\"struct IBLSSignatureChecker.NonSignerStakesAndSignature\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"checkSignatures\",\"outputs\":[{\"components\":[{\"internalType\":\"uint96[]\",\"name\":\"signedStakeForQuorum\",\"type\":\"uint96[]\"},{\"internalType\":\"uint96[]\",\"name\":\"totalStakeForQuorum\",\"type\":\"uint96[]\"}],\"internalType\":\"struct IBLSSignatureChecker.QuorumStakeTotals\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"contract IStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"multiplier\",\"type\":\"uint96\"}],\"internalType\":\"struct IRewardsCoordinator.StrategyAndMultiplier[]\",\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"startTimestamp\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"duration\",\"type\":\"uint32\"}],\"internalType\":\"struct IRewardsCoordinator.RewardsSubmission[]\",\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\"}],\"name\":\"createAVSRewardsSubmission\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"batchDataPointer\",\"type\":\"string\"}],\"name\":\"createNewTask\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegation\",\"outputs\":[{\"internalType\":\"contract IDelegationManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"deregisterOperatorFromAVS\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"getOperatorRestakedStrategies\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRestakeableStrategies\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rewardsInitiator\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureUtils.SignatureWithSaltAndExpiry\",\"name\":\"operatorSignature\",\"type\":\"tuple\"}],\"name\":\"registerOperatorToAVS\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registryCoordinator\",\"outputs\":[{\"internalType\":\"contract IRegistryCoordinator\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint32[]\",\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"quorumApks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"},{\"internalType\":\"uint32[]\",\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[][]\",\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\"}],\"internalType\":\"struct IBLSSignatureChecker.NonSignerStakesAndSignature\",\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\"}],\"name\":\"respondToTask\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32[]\",\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"quorumApks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"},{\"internalType\":\"uint32[]\",\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[][]\",\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\"}],\"internalType\":\"struct IBLSSignatureChecker.NonSignerStakesAndSignature\",\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\"}],\"name\":\"respondToTaskV2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardsInitiator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRewardsInitiator\",\"type\":\"address\"}],\"name\":\"setRewardsInitiator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"setStaleStakesForbidden\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeRegistry\",\"outputs\":[{\"internalType\":\"contract IStakeRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staleStakesForbidden\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"apk\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"}],\"name\":\"trySignatureAndApkVerification\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"pairingSuccessful\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"siganatureIsValid\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_metadataURI\",\"type\":\"string\"}],\"name\":\"updateAVSMetadataURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"proofCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubInputCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"provingSystemAuxDataCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes20\",\"name\":\"proofGeneratorAddr\",\"type\":\"bytes20\"},{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"merkleProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"verificationDataBatchIndex\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"verifyBatchInclusion\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))\":{\"details\":\"Before signature verification, the function verifies operator stake information. This includes ensuring that the provided `referenceBlockNumber` is correct, i.e., ensure that the stake returned from the specified block number is recent enough and that the stake is either the most recent update for the total stake (of the operator) or latest before the referenceBlockNumber.NOTE: Be careful to ensure `msgHash` is collision-resistant! This method does not hash `msgHash` in any way, so if an attacker is able to pass in an arbitrary value, they may be able to tamper with signature verification.\",\"params\":{\"msgHash\":\"is the hash being signed\",\"params\":\"is the struct containing information on nonsigners, stakes, quorum apks, and the aggregate signature\",\"referenceBlockNumber\":\"is the block number at which the stake information is being verified\"},\"returns\":{\"_0\":\"quorumStakeTotals is the struct containing the total and signed stake for each quorum\",\"_1\":\"signatoryRecordHash is the hash of the signatory record, which is used for fraud proofs\"}},\"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])\":{\"details\":\"Only callabe by the permissioned rewardsInitiator addressThe duration of the `rewardsSubmission` cannot exceed `MAX_REWARDS_DURATION`The tokens are sent to the `RewardsCoordinator` contractStrategies must be in ascending order of addresses to check for duplicatesThis function will revert if the `rewardsSubmission` is malformed, e.g. if the `strategies` and `weights` arrays are of non-equal lengths\",\"params\":{\"rewardsSubmissions\":\"The rewards submissions being created\"}},\"deregisterOperatorFromAVS(address)\":{\"params\":{\"operator\":\"The address of the operator to deregister.\"}},\"getOperatorRestakedStrategies(address)\":{\"details\":\"This function is intended to be called off-chainNo guarantee is made on whether the operator has shares for a strategy in a quorum or uniqueness of each element in the returned array. The off-chain service should do that validation separately\",\"params\":{\"operator\":\"The address of the operator to get restaked strategies for\"}},\"getRestakeableStrategies()\":{\"details\":\"This function is intended to be called off-chainNo guarantee is made on uniqueness of each element in the returned array. The off-chain service should do that validation separately\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"registerOperatorToAVS(address,(bytes,bytes32,uint256))\":{\"params\":{\"operator\":\"The address of the operator to register.\",\"operatorSignature\":\"The signature, salt, and expiry of the operator's signature.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setRewardsInitiator(address)\":{\"details\":\"only callable by the owner\",\"params\":{\"newRewardsInitiator\":\"The new rewards initiator address\"}},\"setStaleStakesForbidden(bool)\":{\"params\":{\"value\":\"to toggle staleStakesForbidden\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))\":{\"params\":{\"apk\":\"is the claimed G1 public key\",\"apkG2\":\"is provided G2 public key\",\"msgHash\":\"is the hash being signed\",\"sigma\":\"is the G1 point signature\"},\"returns\":{\"pairingSuccessful\":\"is true if the pairing precompile call was successful\",\"siganatureIsValid\":\"is true if the signature is valid\"}},\"updateAVSMetadataURI(string)\":{\"details\":\"only callable by the owner\",\"params\":{\"_metadataURI\":\"is the metadata URI for the AVS\"}}},\"title\":\"Primary entrypoint for procuring services from Aligned.\",\"version\":1},\"userdoc\":{\"events\":{\"StaleStakesForbiddenUpdate(bool)\":{\"notice\":\"Emitted when `staleStakesForbiddenUpdate` is set\"}},\"kind\":\"user\",\"methods\":{\"avsDirectory()\":{\"notice\":\"Returns the EigenLayer AVSDirectory contract.\"},\"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))\":{\"notice\":\"This function is called by disperser when it has aggregated all the signatures of the operators that are part of the quorum for a particular taskNumber and is asserting them into onchain. The function checks that the claim for aggregated signatures are valid. The thesis of this procedure entails: - getting the aggregated pubkey of all registered nodes at the time of pre-commit by the disperser (represented by apk in the parameters), - subtracting the pubkeys of all the signers not in the quorum (nonSignerPubkeys) and storing the output in apk to get aggregated pubkey of all operators that are part of quorum. - use this aggregated pubkey to verify the aggregated signature under BLS scheme.\"},\"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])\":{\"notice\":\"Creates a new rewards submission to the EigenLayer RewardsCoordinator contract, to be split amongst the set of stakers delegated to operators who are registered to this `avs`\"},\"deregisterOperatorFromAVS(address)\":{\"notice\":\"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator deregistration from the AVS\"},\"getOperatorRestakedStrategies(address)\":{\"notice\":\"Returns the list of strategies that the operator has potentially restaked on the AVS\"},\"getRestakeableStrategies()\":{\"notice\":\"Returns the list of strategies that the AVS supports for restaking\"},\"registerOperatorToAVS(address,(bytes,bytes32,uint256))\":{\"notice\":\"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator registration with the AVS\"},\"rewardsInitiator()\":{\"notice\":\"The address of the entity that can initiate rewards\"},\"setRewardsInitiator(address)\":{\"notice\":\"Sets the rewards initiator address\"},\"setStaleStakesForbidden(bool)\":{\"notice\":\"/** RegistryCoordinator owner can either enforce or not that operator stakes are staler than the delegation.minWithdrawalDelayBlocks() window.\"},\"staleStakesForbidden()\":{\"notice\":\"If true, check the staleness of the operator stakes and that its within the delegation withdrawalDelayBlocks window.\"},\"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))\":{\"notice\":\"trySignatureAndApkVerification verifies a BLS aggregate signature and the veracity of a calculated G1 Public key\"},\"updateAVSMetadataURI(string)\":{\"notice\":\"Updates the metadata URI for the AVS\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/core/AlignedLayerServiceManager.sol\":\"AlignedLayerServiceManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin-upgrades-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/\",\":@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/\",\":@openzeppelin-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/\",\":@openzeppelin/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/\",\":ds-test/=lib/eigenlayer-middleware/lib/ds-test/src/\",\":eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/\",\":eigenlayer-core-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/\",\":eigenlayer-core/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/\",\":eigenlayer-middleware/=lib/eigenlayer-middleware/src/\",\":eigenlayer-scripts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/script/\",\":erc4626-tests/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/\",\":openzeppelin-contracts-upgradeable/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/\",\":openzeppelin-contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/\",\":openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/contracts/\"]},\"sources\":{\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IAVSDirectory.sol\":{\"keccak256\":\"0x3f67ab9b510b02dc3c07014b49785f1e167401bdb39cc10f737bbf545632d938\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://48d1267e2df6c8ac9b8f419269ff3d23be9b62606ee6b6d2278c27ffebfd73aa\",\"dweb:/ipfs/QmaFyywKCm1eotKjF1evryW8BMQJzPDstZm1wMRW79phXG\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IBeaconChainOracle.sol\":{\"keccak256\":\"0x0fef07aa6179c77198f1514e12e628aa1c876e04f9c181ec853a322179e5be00\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://51438325876cc2d4c77f58488a7e27b488015d1b663c50be6a5cafbd73b9c983\",\"dweb:/ipfs/QmViCuGoYZzi6wtXA8PPKigqVv3KMuNxEVQ1Td9dGqjL18\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol\":{\"keccak256\":\"0xab76a9f4eff865cbb689f627cf98263488765519d7a4ec5ffbcb0ca4972842f9\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://ff57ce18e8350bf39f190645db0988bc0f1279f1872150a114a1b520c38a2914\",\"dweb:/ipfs/QmSsUXkNUqYuJgGRumHTSs9rAaboGjecotcM4xHrdBYWaZ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IETHPOSDeposit.sol\":{\"keccak256\":\"0x2e60e5f4b0da0a0a4e2a07c63141120998559970c21deac743ea0c64a60a880c\",\"license\":\"CC0-1.0\",\"urls\":[\"bzz-raw://e635c346bde5b7ade9bcf35bc733081520cb86015be4fbc6e761e6e9482c4c91\",\"dweb:/ipfs/QmRoeazEnbFn5SPSWAkoFK2gSN9DMp3hJAnrLWuL2sKutz\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPod.sol\":{\"keccak256\":\"0xb50c36ad96b6679bb80fd8331f949cbfbcba0f529026e1421a4d2bae64396eba\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://5719181d780120f1e688c0da276992a8caf185815917f453b3550537c31ed4cc\",\"dweb:/ipfs/QmYprRC5ZEXhz3zAUND5E8Xjn6s5TL8ZF8QbnndVq7aVPR\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol\":{\"keccak256\":\"0xd8a64dbed03d3a5cdbefe1af75968f2dde07f973749c2ef5197bf7187c3e448c\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://27ccc7c1fd9352e9f9b357c9063d255dc0ed9583f43db09f786ac7497d7846b8\",\"dweb:/ipfs/QmeJzuJkE9m2NUNwZSp4tGZEZmih1LeucePup8hzMVDRbG\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol\":{\"keccak256\":\"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324\",\"dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol\":{\"keccak256\":\"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d\",\"dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IRewardsCoordinator.sol\":{\"keccak256\":\"0xeab6f1140a90eb7f107d95bae1e8b2ecfbfe36282d62c9df69e6a564c2c59771\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://785cd2777cdcab3b827b5eef2a4dae02c56db07252fdcefd8dd1016be034dc71\",\"dweb:/ipfs/QmNyDFchTuMeiVoxNEfQw96JVq7DfkohGz1txKXe7HyNbq\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISignatureUtils.sol\":{\"keccak256\":\"0x5e52482a31d94401a8502f3014c4aada1142b4450fc0596dff8e1866a85fe092\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://17dc326c9361bc1453379f26545963557b2883b0c88bc07d4477e04dbcc0cc8c\",\"dweb:/ipfs/QmZXT7A816W5JH2ymirE2ETaJttqztFCsEL22AV8oEfCK9\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol\":{\"keccak256\":\"0x45dfaa2cfdde87f48a6ee38bb6fb739847aef7cf3f6137bdcd8c8a330559ec79\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://1b7f6bd75b42fcaa91ceb7140cb2c41926a1fe6ee2d3161e4fe6186b181ba232\",\"dweb:/ipfs/QmZjbdKiSs33C9i3GDc3sdD39Pz4YPkDoKftowoUF4kHmY\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol\":{\"keccak256\":\"0xc530c6a944b70051fd0dac0222de9a4b5baadeaf94ad194daac6ad8d2ace7420\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://3767df0364ce835b52e786d2851431eb9223fe4747602107505477e162231d73\",\"dweb:/ipfs/QmZkH5bKUygQrJomndNaQqkefVRW4rRefCa8HPJ5HMczxJ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategyManager.sol\":{\"keccak256\":\"0x68bf02a443fc8b2f612eba3d39bfefa5f61f78b549f111cdecec5f2c58236a52\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://76bc6875ce74128b861fdac5fd1c0c72f3cc9bacf67fa4a73721b95fb23959ef\",\"dweb:/ipfs/QmPix4WJmf9fXyMZxfgwXEHBcg7V4NAbRqs4HUf5YrSJcM\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/BeaconChainProofs.sol\":{\"keccak256\":\"0x70d89b05c1c5f47b74a07fbb5a2c05e606fed494e749ea98a9915b7be73df377\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://db1d3bfaee69aef53c8b12b492a17584e6d1ac94610cb8b38aad33e1cdd81af7\",\"dweb:/ipfs/QmfVsMTj1hcf9fMEm5RzvtcBN4dMcAKFBgUUDsNDr5XFpq\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Endian.sol\":{\"keccak256\":\"0xf3b72653ba2567a978d4612703fa5f71c5fcd015d8dac7818468f22772d90a9d\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://cee9d09370d968138d775c39525db4cd0768d60d17be7685519de12444e7dd2f\",\"dweb:/ipfs/QmUdGh8wpMei3edKiEWA6S96s9dRt4ekZKJ4nau356X8xQ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Merkle.sol\":{\"keccak256\":\"0x9095fc29b96d102b10c02d44b3a6fbfa25593ef6ae4a810363ab885b9e6b0f71\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0945132d482d56278edddb1d32209903c4d3839c87ba4317aadd97dc23610d0f\",\"dweb:/ipfs/QmVuM2aLRHxitx4rPx3GTYTBCVNcjYn6sHBRr1biUjLBP5\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/permissions/Pausable.sol\":{\"keccak256\":\"0xce8ee0ab28f2bce9e94aa19fffe55bebef080327632ac98ff3ab14994b369bc0\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://5c7e2be97a8840fa2a0434077a36136553a84efd9bff4b46712ce9fddb813a6a\",\"dweb:/ipfs/QmZKvgPxLAbGo1CqTA4AX6MCDPFLSSNt43ZKWRjvvzFp7S\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354\",\"dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"lib/eigenlayer-middleware/src/BLSSignatureChecker.sol\":{\"keccak256\":\"0x3a5c205c596d3d73c7afa63ffbbfac8204f6d6a26c151ef26b47278981c3c0fe\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://4beb88bf5b7c7e614f0d87b157d7a4b67afbf1cc93f3127622bd66f696799241\",\"dweb:/ipfs/QmWJKb6qsd69bWgpAHX6deCkJqmJdo9oBLQAXJk97gWEE2\"]},\"lib/eigenlayer-middleware/src/ServiceManagerBase.sol\":{\"keccak256\":\"0x7e32ef76daf32e5eb5a93cecf204223e64243f42afe70c7ca71ad3db3925b9c4\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://19c10aa22f2e86e27e946b65c434e541caa6af06fcdde46c3b5e9b42890bd221\",\"dweb:/ipfs/QmPb5qDRdbJTniKSqsbjVhbtwdb72G9hWPYcHtVvj1zBxg\"]},\"lib/eigenlayer-middleware/src/ServiceManagerBaseStorage.sol\":{\"keccak256\":\"0xa544114dbf6d973a815f997a2ac9237c531c40b08c91d3a65a23b152ed621e1e\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://4cf69f9be7d3f3c4184b61b267280a829040973633ea9d95e2ec0dbf70f40a2e\",\"dweb:/ipfs/QmT2HeCJWBLX2p4KAWnyU318MMx9USb2brqCKq1vn2pXpR\"]},\"lib/eigenlayer-middleware/src/interfaces/IBLSApkRegistry.sol\":{\"keccak256\":\"0xc07a5edfd95ab4f16f16a8dc8e76eadf4b0e90fe49db90540d01daaad86898c5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://52b53266450a53da641e82d8ae3be93c5e09f8342b4ea0cc96bb9038d8406354\",\"dweb:/ipfs/QmVuoiQyqPTLCGnyt8zDaxiyaj4ETdgTGKv4MDHWzqEDjp\"]},\"lib/eigenlayer-middleware/src/interfaces/IBLSSignatureChecker.sol\":{\"keccak256\":\"0xee5823a6674e553c71f5e127f08245827eb116d1ad418b5a7f2a9d6985fd95e0\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://94aa26debddca6c0784585340cf891de4c2d7edaa3e5ec7229af9730312a5a51\",\"dweb:/ipfs/QmWbHGbM7eVYTAmrCVaDU8b4YTm9VAN82XgLDR78uHC7vj\"]},\"lib/eigenlayer-middleware/src/interfaces/IIndexRegistry.sol\":{\"keccak256\":\"0x83b2d56aacf27e65c4959a832c5de573e013908c044f6e48ea8284ac5282ae2b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://877af382587e96bb39bcc6db8bb5e4b871db5025c52347d4bee9afeaa4a6cc8d\",\"dweb:/ipfs/QmdnhsQCChzq2o5NgbeT3JxSsEcMm1PC9QW6zenZNPjD9F\"]},\"lib/eigenlayer-middleware/src/interfaces/IRegistry.sol\":{\"keccak256\":\"0x51426a17fb7e54bd3720e2890104e97a8559a13ff248b3d6b840916751c143d3\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://01f91289e6100d528cb8b318cb14ff22a0bc52882c9d4db41585e030cc9ddc25\",\"dweb:/ipfs/Qmb22nqGrsrtNovHRwbMCvDHGENuxAgrWu3Db4p7Er2MHY\"]},\"lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol\":{\"keccak256\":\"0xdd8effb082c1d5957d5ff43d7c59497b32866a6d82bcc7d5efa49ea9bc9b3385\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://cb33a2a1446585b13b7a509e880c60d658d2d2522ec48a9f02e30d2cff54002d\",\"dweb:/ipfs/QmVNG8ZPZkXzNEadPdTj1uBYLiZdCnYfsE5iGU6nJcJXiD\"]},\"lib/eigenlayer-middleware/src/interfaces/IServiceManager.sol\":{\"keccak256\":\"0x7602cfb4397a114a0ed60e70e8e1d729fdcf406b585838181b3cb3ffa6ac9a9a\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b718fa016a13a2a5ce298bc5ea7495cc70cf9c358211c75595d5c9dde9a6cc0f\",\"dweb:/ipfs/QmQNrVmU7P7pRqGBJuTQDkjf3wMDY2kJm7zXdtQwsQTbzY\"]},\"lib/eigenlayer-middleware/src/interfaces/IServiceManagerUI.sol\":{\"keccak256\":\"0x365761699b4a5b7360ee6c75f12606eefc4b0394754c8b8e1e1eefec0cba7ffb\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://ac14ada180b66cbbc5f9de0d6b4bb87b5946d2a9569ae88f2f62aaca47e879a8\",\"dweb:/ipfs/QmcN9xKYF24naNWc6cYah9suz5gJSYE9nPj9eZFWnP35VX\"]},\"lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol\":{\"keccak256\":\"0x1b8b4d757c1b804bc4cf6fbbf8bf8f89ebdeb30a31014751fe7d01deb9d513d4\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://984bf2777b898ed187d28997f9783f5c293a1a1848e3e9aa470ce9183d454c97\",\"dweb:/ipfs/Qme3aTpBrkLu8wYHFMZbCfhXHoZ1M6SpXkeC237T9BuU5B\"]},\"lib/eigenlayer-middleware/src/libraries/BN254.sol\":{\"keccak256\":\"0xb428c8d0c3b325507a88a61a80115493eb88606ccc19ed64a31e11294ab853b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7b6fb935bfe0494e6ff970c8f30a86d5f4cf5c3e0967300c28cd383c043acae\",\"dweb:/ipfs/QmUHfFZaVjLPXhkBmcxrZhAHZaSFQDqXtrLGpjGBQBa5Ki\"]},\"lib/eigenlayer-middleware/src/libraries/BitmapUtils.sol\":{\"keccak256\":\"0x44315ac460be30a6b18fd4df4d1b8afb46653bf4dc06ca9f93c32353fd0605c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da14f2ead3a375b02afd09d4a02edddf7b63a88945746b96789b2473184fdb04\",\"dweb:/ipfs/QmRqcjxa2Vv2MrLdPeAwsktXdWTirapEDsRbJCyYRtKT6g\"]},\"src/core/AlignedLayerServiceManager.sol\":{\"keccak256\":\"0x5775b38c4b94937f3a2923ef3cec83d1548d987a947f2f2cd6e8fe962f0a26fc\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://e4a4f99b6ed1f2a8d734964ac6af7bdc3fef0bd97222705fbfcea6ec87753f52\",\"dweb:/ipfs/QmbXgF2RZeismGiXWJEvTwMEG1nUNyucnPcdJTEhnPgEeY\"]},\"src/core/AlignedLayerServiceManagerStorage.sol\":{\"keccak256\":\"0xabc512eb0a600c2e6465b0813cc2d1b26edd0225f03d9c1de2f6fe96db531817\",\"urls\":[\"bzz-raw://64c7675966d4d3503e011ed3184ffaebb85128b04e892f81cb47996788ca744d\",\"dweb:/ipfs/QmXqm57dvJCPUGgwMhf6k4sbPa3DUUTY3UVu2UCbHejY68\"]},\"src/core/IAlignedLayerServiceManager.sol\":{\"keccak256\":\"0x8d2bfeabfc2cde8b699778f7395c5efe44ded0bc57f0d0ea14cdc18a87d8433b\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://b2f47bfa5a21219889cde76d1bf30800c7765648ab68e1148c268b83362e040b\",\"dweb:/ipfs/QmWADSHQrj5qxMJ3kiksWDVe82w2WMPxgtLYxGnv8kGr9M\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.12+commit.f00d7308"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"contract IAVSDirectory","name":"__avsDirectory","type":"address"},{"internalType":"contract IRewardsCoordinator","name":"__rewardsCoordinator","type":"address"},{"internalType":"contract IRegistryCoordinator","name":"__registryCoordinator","type":"address"},{"internalType":"contract IStakeRegistry","name":"__stakeRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32","indexed":true},{"internalType":"address","name":"senderAddress","type":"address","indexed":false}],"type":"event","name":"BatchVerified","anonymous":false},{"inputs":[{"internalType":"address","name":"batcher","type":"address","indexed":true},{"internalType":"uint256","name":"newBalance","type":"uint256","indexed":false}],"type":"event","name":"BatcherBalanceUpdated","anonymous":false},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32","indexed":true},{"internalType":"uint32","name":"taskCreatedBlock","type":"uint32","indexed":false},{"internalType":"string","name":"batchDataPointer","type":"string","indexed":false}],"type":"event","name":"NewBatch","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32","indexed":true},{"internalType":"address","name":"senderAddress","type":"address","indexed":false},{"internalType":"uint32","name":"taskCreatedBlock","type":"uint32","indexed":false},{"internalType":"string","name":"batchDataPointer","type":"string","indexed":false}],"type":"event","name":"NewBatchV2","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"prevRewardsInitiator","type":"address","indexed":false},{"internalType":"address","name":"newRewardsInitiator","type":"address","indexed":false}],"type":"event","name":"RewardsInitiatorUpdated","anonymous":false},{"inputs":[{"internalType":"bool","name":"value","type":"bool","indexed":false}],"type":"event","name":"StaleStakesForbiddenUpdate","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"avsDirectory","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"batchesState","outputs":[{"internalType":"uint32","name":"taskCreatedBlock","type":"uint32"},{"internalType":"bool","name":"responded","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"blsApkRegistry","outputs":[{"internalType":"contract IBLSApkRegistry","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"publicInput","type":"bytes"},{"internalType":"bytes32","name":"hash","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"checkPublicInput","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"msgHash","type":"bytes32"},{"internalType":"uint32","name":"referenceBlockNumber","type":"uint32"},{"internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","name":"params","type":"tuple","components":[{"internalType":"uint32[]","name":"nonSignerQuorumBitmapIndices","type":"uint32[]"},{"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G1Point[]","name":"quorumApks","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint32[]","name":"quorumApkIndices","type":"uint32[]"},{"internalType":"uint32[]","name":"totalStakeIndices","type":"uint32[]"},{"internalType":"uint32[][]","name":"nonSignerStakeIndices","type":"uint32[][]"}]}],"stateMutability":"view","type":"function","name":"checkSignatures","outputs":[{"internalType":"struct IBLSSignatureChecker.QuorumStakeTotals","name":"","type":"tuple","components":[{"internalType":"uint96[]","name":"signedStakeForQuorum","type":"uint96[]"},{"internalType":"uint96[]","name":"totalStakeForQuorum","type":"uint96[]"}]},{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"struct IRewardsCoordinator.RewardsSubmission[]","name":"rewardsSubmissions","type":"tuple[]","components":[{"internalType":"struct IRewardsCoordinator.StrategyAndMultiplier[]","name":"strategiesAndMultipliers","type":"tuple[]","components":[{"internalType":"contract IStrategy","name":"strategy","type":"address"},{"internalType":"uint96","name":"multiplier","type":"uint96"}]},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint32","name":"startTimestamp","type":"uint32"},{"internalType":"uint32","name":"duration","type":"uint32"}]}],"stateMutability":"nonpayable","type":"function","name":"createAVSRewardsSubmission"},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"string","name":"batchDataPointer","type":"string"}],"stateMutability":"payable","type":"function","name":"createNewTask"},{"inputs":[],"stateMutability":"view","type":"function","name":"delegation","outputs":[{"internalType":"contract IDelegationManager","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"deregisterOperatorFromAVS"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function","name":"getOperatorRestakedStrategies","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getRestakeableStrategies","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"address","name":"_rewardsInitiator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"struct ISignatureUtils.SignatureWithSaltAndExpiry","name":"operatorSignature","type":"tuple","components":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"expiry","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"registerOperatorToAVS"},{"inputs":[],"stateMutability":"view","type":"function","name":"registryCoordinator","outputs":[{"internalType":"contract IRegistryCoordinator","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","name":"nonSignerStakesAndSignature","type":"tuple","components":[{"internalType":"uint32[]","name":"nonSignerQuorumBitmapIndices","type":"uint32[]"},{"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G1Point[]","name":"quorumApks","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint32[]","name":"quorumApkIndices","type":"uint32[]"},{"internalType":"uint32[]","name":"totalStakeIndices","type":"uint32[]"},{"internalType":"uint32[][]","name":"nonSignerStakeIndices","type":"uint32[][]"}]}],"stateMutability":"nonpayable","type":"function","name":"respondToTask"},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"address","name":"senderAddress","type":"address"},{"internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","name":"nonSignerStakesAndSignature","type":"tuple","components":[{"internalType":"uint32[]","name":"nonSignerQuorumBitmapIndices","type":"uint32[]"},{"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G1Point[]","name":"quorumApks","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint32[]","name":"quorumApkIndices","type":"uint32[]"},{"internalType":"uint32[]","name":"totalStakeIndices","type":"uint32[]"},{"internalType":"uint32[][]","name":"nonSignerStakeIndices","type":"uint32[][]"}]}],"stateMutability":"nonpayable","type":"function","name":"respondToTaskV2"},{"inputs":[],"stateMutability":"view","type":"function","name":"rewardsInitiator","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"newRewardsInitiator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setRewardsInitiator"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setStaleStakesForbidden"},{"inputs":[],"stateMutability":"view","type":"function","name":"stakeRegistry","outputs":[{"internalType":"contract IStakeRegistry","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"staleStakesForbidden","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"bytes32","name":"msgHash","type":"bytes32"},{"internalType":"struct BN254.G1Point","name":"apk","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]}],"stateMutability":"view","type":"function","name":"trySignatureAndApkVerification","outputs":[{"internalType":"bool","name":"pairingSuccessful","type":"bool"},{"internalType":"bool","name":"siganatureIsValid","type":"bool"}]},{"inputs":[{"internalType":"string","name":"_metadataURI","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"updateAVSMetadataURI"},{"inputs":[{"internalType":"bytes32","name":"proofCommitment","type":"bytes32"},{"internalType":"bytes32","name":"pubInputCommitment","type":"bytes32"},{"internalType":"bytes32","name":"provingSystemAuxDataCommitment","type":"bytes32"},{"internalType":"bytes20","name":"proofGeneratorAddr","type":"bytes20"},{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"bytes","name":"merkleProof","type":"bytes"},{"internalType":"uint256","name":"verificationDataBatchIndex","type":"uint256"},{"internalType":"address","name":"senderAddress","type":"address"}],"stateMutability":"view","type":"function","name":"verifyBatchInclusion","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":{"details":"Before signature verification, the function verifies operator stake information. This includes ensuring that the provided `referenceBlockNumber` is correct, i.e., ensure that the stake returned from the specified block number is recent enough and that the stake is either the most recent update for the total stake (of the operator) or latest before the referenceBlockNumber.NOTE: Be careful to ensure `msgHash` is collision-resistant! This method does not hash `msgHash` in any way, so if an attacker is able to pass in an arbitrary value, they may be able to tamper with signature verification.","params":{"msgHash":"is the hash being signed","params":"is the struct containing information on nonsigners, stakes, quorum apks, and the aggregate signature","referenceBlockNumber":"is the block number at which the stake information is being verified"},"returns":{"_0":"quorumStakeTotals is the struct containing the total and signed stake for each quorum","_1":"signatoryRecordHash is the hash of the signatory record, which is used for fraud proofs"}},"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])":{"details":"Only callabe by the permissioned rewardsInitiator addressThe duration of the `rewardsSubmission` cannot exceed `MAX_REWARDS_DURATION`The tokens are sent to the `RewardsCoordinator` contractStrategies must be in ascending order of addresses to check for duplicatesThis function will revert if the `rewardsSubmission` is malformed, e.g. if the `strategies` and `weights` arrays are of non-equal lengths","params":{"rewardsSubmissions":"The rewards submissions being created"}},"deregisterOperatorFromAVS(address)":{"params":{"operator":"The address of the operator to deregister."}},"getOperatorRestakedStrategies(address)":{"details":"This function is intended to be called off-chainNo guarantee is made on whether the operator has shares for a strategy in a quorum or uniqueness of each element in the returned array. The off-chain service should do that validation separately","params":{"operator":"The address of the operator to get restaked strategies for"}},"getRestakeableStrategies()":{"details":"This function is intended to be called off-chainNo guarantee is made on uniqueness of each element in the returned array. The off-chain service should do that validation separately"},"owner()":{"details":"Returns the address of the current owner."},"registerOperatorToAVS(address,(bytes,bytes32,uint256))":{"params":{"operator":"The address of the operator to register.","operatorSignature":"The signature, salt, and expiry of the operator's signature."}},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"setRewardsInitiator(address)":{"details":"only callable by the owner","params":{"newRewardsInitiator":"The new rewards initiator address"}},"setStaleStakesForbidden(bool)":{"params":{"value":"to toggle staleStakesForbidden"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))":{"params":{"apk":"is the claimed G1 public key","apkG2":"is provided G2 public key","msgHash":"is the hash being signed","sigma":"is the G1 point signature"},"returns":{"pairingSuccessful":"is true if the pairing precompile call was successful","siganatureIsValid":"is true if the signature is valid"}},"updateAVSMetadataURI(string)":{"details":"only callable by the owner","params":{"_metadataURI":"is the metadata URI for the AVS"}}},"version":1},"userdoc":{"kind":"user","methods":{"avsDirectory()":{"notice":"Returns the EigenLayer AVSDirectory contract."},"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":{"notice":"This function is called by disperser when it has aggregated all the signatures of the operators that are part of the quorum for a particular taskNumber and is asserting them into onchain. The function checks that the claim for aggregated signatures are valid. The thesis of this procedure entails: - getting the aggregated pubkey of all registered nodes at the time of pre-commit by the disperser (represented by apk in the parameters), - subtracting the pubkeys of all the signers not in the quorum (nonSignerPubkeys) and storing the output in apk to get aggregated pubkey of all operators that are part of quorum. - use this aggregated pubkey to verify the aggregated signature under BLS scheme."},"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])":{"notice":"Creates a new rewards submission to the EigenLayer RewardsCoordinator contract, to be split amongst the set of stakers delegated to operators who are registered to this `avs`"},"deregisterOperatorFromAVS(address)":{"notice":"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator deregistration from the AVS"},"getOperatorRestakedStrategies(address)":{"notice":"Returns the list of strategies that the operator has potentially restaked on the AVS"},"getRestakeableStrategies()":{"notice":"Returns the list of strategies that the AVS supports for restaking"},"registerOperatorToAVS(address,(bytes,bytes32,uint256))":{"notice":"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator registration with the AVS"},"rewardsInitiator()":{"notice":"The address of the entity that can initiate rewards"},"setRewardsInitiator(address)":{"notice":"Sets the rewards initiator address"},"setStaleStakesForbidden(bool)":{"notice":"/** RegistryCoordinator owner can either enforce or not that operator stakes are staler than the delegation.minWithdrawalDelayBlocks() window."},"staleStakesForbidden()":{"notice":"If true, check the staleness of the operator stakes and that its within the delegation withdrawalDelayBlocks window."},"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))":{"notice":"trySignatureAndApkVerification verifies a BLS aggregate signature and the veracity of a calculated G1 Public key"},"updateAVSMetadataURI(string)":{"notice":"Updates the metadata URI for the AVS"}},"version":1}},"settings":{"remappings":["@openzeppelin-upgrades-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/","@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/","@openzeppelin-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/","@openzeppelin/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/","ds-test/=lib/eigenlayer-middleware/lib/ds-test/src/","eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/","eigenlayer-core-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/","eigenlayer-core/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/","eigenlayer-middleware/=lib/eigenlayer-middleware/src/","eigenlayer-scripts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/script/","erc4626-tests/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/","openzeppelin-contracts-upgradeable/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/","openzeppelin-contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/","openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/core/AlignedLayerServiceManager.sol":"AlignedLayerServiceManager"},"evmVersion":"london","libraries":{}},"sources":{"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IAVSDirectory.sol":{"keccak256":"0x3f67ab9b510b02dc3c07014b49785f1e167401bdb39cc10f737bbf545632d938","urls":["bzz-raw://48d1267e2df6c8ac9b8f419269ff3d23be9b62606ee6b6d2278c27ffebfd73aa","dweb:/ipfs/QmaFyywKCm1eotKjF1evryW8BMQJzPDstZm1wMRW79phXG"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IBeaconChainOracle.sol":{"keccak256":"0x0fef07aa6179c77198f1514e12e628aa1c876e04f9c181ec853a322179e5be00","urls":["bzz-raw://51438325876cc2d4c77f58488a7e27b488015d1b663c50be6a5cafbd73b9c983","dweb:/ipfs/QmViCuGoYZzi6wtXA8PPKigqVv3KMuNxEVQ1Td9dGqjL18"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol":{"keccak256":"0xab76a9f4eff865cbb689f627cf98263488765519d7a4ec5ffbcb0ca4972842f9","urls":["bzz-raw://ff57ce18e8350bf39f190645db0988bc0f1279f1872150a114a1b520c38a2914","dweb:/ipfs/QmSsUXkNUqYuJgGRumHTSs9rAaboGjecotcM4xHrdBYWaZ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IETHPOSDeposit.sol":{"keccak256":"0x2e60e5f4b0da0a0a4e2a07c63141120998559970c21deac743ea0c64a60a880c","urls":["bzz-raw://e635c346bde5b7ade9bcf35bc733081520cb86015be4fbc6e761e6e9482c4c91","dweb:/ipfs/QmRoeazEnbFn5SPSWAkoFK2gSN9DMp3hJAnrLWuL2sKutz"],"license":"CC0-1.0"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPod.sol":{"keccak256":"0xb50c36ad96b6679bb80fd8331f949cbfbcba0f529026e1421a4d2bae64396eba","urls":["bzz-raw://5719181d780120f1e688c0da276992a8caf185815917f453b3550537c31ed4cc","dweb:/ipfs/QmYprRC5ZEXhz3zAUND5E8Xjn6s5TL8ZF8QbnndVq7aVPR"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol":{"keccak256":"0xd8a64dbed03d3a5cdbefe1af75968f2dde07f973749c2ef5197bf7187c3e448c","urls":["bzz-raw://27ccc7c1fd9352e9f9b357c9063d255dc0ed9583f43db09f786ac7497d7846b8","dweb:/ipfs/QmeJzuJkE9m2NUNwZSp4tGZEZmih1LeucePup8hzMVDRbG"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol":{"keccak256":"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f","urls":["bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324","dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol":{"keccak256":"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49","urls":["bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d","dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IRewardsCoordinator.sol":{"keccak256":"0xeab6f1140a90eb7f107d95bae1e8b2ecfbfe36282d62c9df69e6a564c2c59771","urls":["bzz-raw://785cd2777cdcab3b827b5eef2a4dae02c56db07252fdcefd8dd1016be034dc71","dweb:/ipfs/QmNyDFchTuMeiVoxNEfQw96JVq7DfkohGz1txKXe7HyNbq"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISignatureUtils.sol":{"keccak256":"0x5e52482a31d94401a8502f3014c4aada1142b4450fc0596dff8e1866a85fe092","urls":["bzz-raw://17dc326c9361bc1453379f26545963557b2883b0c88bc07d4477e04dbcc0cc8c","dweb:/ipfs/QmZXT7A816W5JH2ymirE2ETaJttqztFCsEL22AV8oEfCK9"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol":{"keccak256":"0x45dfaa2cfdde87f48a6ee38bb6fb739847aef7cf3f6137bdcd8c8a330559ec79","urls":["bzz-raw://1b7f6bd75b42fcaa91ceb7140cb2c41926a1fe6ee2d3161e4fe6186b181ba232","dweb:/ipfs/QmZjbdKiSs33C9i3GDc3sdD39Pz4YPkDoKftowoUF4kHmY"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol":{"keccak256":"0xc530c6a944b70051fd0dac0222de9a4b5baadeaf94ad194daac6ad8d2ace7420","urls":["bzz-raw://3767df0364ce835b52e786d2851431eb9223fe4747602107505477e162231d73","dweb:/ipfs/QmZkH5bKUygQrJomndNaQqkefVRW4rRefCa8HPJ5HMczxJ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategyManager.sol":{"keccak256":"0x68bf02a443fc8b2f612eba3d39bfefa5f61f78b549f111cdecec5f2c58236a52","urls":["bzz-raw://76bc6875ce74128b861fdac5fd1c0c72f3cc9bacf67fa4a73721b95fb23959ef","dweb:/ipfs/QmPix4WJmf9fXyMZxfgwXEHBcg7V4NAbRqs4HUf5YrSJcM"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/BeaconChainProofs.sol":{"keccak256":"0x70d89b05c1c5f47b74a07fbb5a2c05e606fed494e749ea98a9915b7be73df377","urls":["bzz-raw://db1d3bfaee69aef53c8b12b492a17584e6d1ac94610cb8b38aad33e1cdd81af7","dweb:/ipfs/QmfVsMTj1hcf9fMEm5RzvtcBN4dMcAKFBgUUDsNDr5XFpq"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Endian.sol":{"keccak256":"0xf3b72653ba2567a978d4612703fa5f71c5fcd015d8dac7818468f22772d90a9d","urls":["bzz-raw://cee9d09370d968138d775c39525db4cd0768d60d17be7685519de12444e7dd2f","dweb:/ipfs/QmUdGh8wpMei3edKiEWA6S96s9dRt4ekZKJ4nau356X8xQ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Merkle.sol":{"keccak256":"0x9095fc29b96d102b10c02d44b3a6fbfa25593ef6ae4a810363ab885b9e6b0f71","urls":["bzz-raw://0945132d482d56278edddb1d32209903c4d3839c87ba4317aadd97dc23610d0f","dweb:/ipfs/QmVuM2aLRHxitx4rPx3GTYTBCVNcjYn6sHBRr1biUjLBP5"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/permissions/Pausable.sol":{"keccak256":"0xce8ee0ab28f2bce9e94aa19fffe55bebef080327632ac98ff3ab14994b369bc0","urls":["bzz-raw://5c7e2be97a8840fa2a0434077a36136553a84efd9bff4b46712ce9fddb813a6a","dweb:/ipfs/QmZKvgPxLAbGo1CqTA4AX6MCDPFLSSNt43ZKWRjvvzFp7S"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888","urls":["bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a","dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e","urls":["bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497","dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol":{"keccak256":"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3","urls":["bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4","dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149","urls":["bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c","dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61","urls":["bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354","dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b","urls":["bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34","dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr"],"license":"MIT"},"lib/eigenlayer-middleware/src/BLSSignatureChecker.sol":{"keccak256":"0x3a5c205c596d3d73c7afa63ffbbfac8204f6d6a26c151ef26b47278981c3c0fe","urls":["bzz-raw://4beb88bf5b7c7e614f0d87b157d7a4b67afbf1cc93f3127622bd66f696799241","dweb:/ipfs/QmWJKb6qsd69bWgpAHX6deCkJqmJdo9oBLQAXJk97gWEE2"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/ServiceManagerBase.sol":{"keccak256":"0x7e32ef76daf32e5eb5a93cecf204223e64243f42afe70c7ca71ad3db3925b9c4","urls":["bzz-raw://19c10aa22f2e86e27e946b65c434e541caa6af06fcdde46c3b5e9b42890bd221","dweb:/ipfs/QmPb5qDRdbJTniKSqsbjVhbtwdb72G9hWPYcHtVvj1zBxg"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/ServiceManagerBaseStorage.sol":{"keccak256":"0xa544114dbf6d973a815f997a2ac9237c531c40b08c91d3a65a23b152ed621e1e","urls":["bzz-raw://4cf69f9be7d3f3c4184b61b267280a829040973633ea9d95e2ec0dbf70f40a2e","dweb:/ipfs/QmT2HeCJWBLX2p4KAWnyU318MMx9USb2brqCKq1vn2pXpR"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IBLSApkRegistry.sol":{"keccak256":"0xc07a5edfd95ab4f16f16a8dc8e76eadf4b0e90fe49db90540d01daaad86898c5","urls":["bzz-raw://52b53266450a53da641e82d8ae3be93c5e09f8342b4ea0cc96bb9038d8406354","dweb:/ipfs/QmVuoiQyqPTLCGnyt8zDaxiyaj4ETdgTGKv4MDHWzqEDjp"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IBLSSignatureChecker.sol":{"keccak256":"0xee5823a6674e553c71f5e127f08245827eb116d1ad418b5a7f2a9d6985fd95e0","urls":["bzz-raw://94aa26debddca6c0784585340cf891de4c2d7edaa3e5ec7229af9730312a5a51","dweb:/ipfs/QmWbHGbM7eVYTAmrCVaDU8b4YTm9VAN82XgLDR78uHC7vj"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IIndexRegistry.sol":{"keccak256":"0x83b2d56aacf27e65c4959a832c5de573e013908c044f6e48ea8284ac5282ae2b","urls":["bzz-raw://877af382587e96bb39bcc6db8bb5e4b871db5025c52347d4bee9afeaa4a6cc8d","dweb:/ipfs/QmdnhsQCChzq2o5NgbeT3JxSsEcMm1PC9QW6zenZNPjD9F"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IRegistry.sol":{"keccak256":"0x51426a17fb7e54bd3720e2890104e97a8559a13ff248b3d6b840916751c143d3","urls":["bzz-raw://01f91289e6100d528cb8b318cb14ff22a0bc52882c9d4db41585e030cc9ddc25","dweb:/ipfs/Qmb22nqGrsrtNovHRwbMCvDHGENuxAgrWu3Db4p7Er2MHY"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol":{"keccak256":"0xdd8effb082c1d5957d5ff43d7c59497b32866a6d82bcc7d5efa49ea9bc9b3385","urls":["bzz-raw://cb33a2a1446585b13b7a509e880c60d658d2d2522ec48a9f02e30d2cff54002d","dweb:/ipfs/QmVNG8ZPZkXzNEadPdTj1uBYLiZdCnYfsE5iGU6nJcJXiD"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IServiceManager.sol":{"keccak256":"0x7602cfb4397a114a0ed60e70e8e1d729fdcf406b585838181b3cb3ffa6ac9a9a","urls":["bzz-raw://b718fa016a13a2a5ce298bc5ea7495cc70cf9c358211c75595d5c9dde9a6cc0f","dweb:/ipfs/QmQNrVmU7P7pRqGBJuTQDkjf3wMDY2kJm7zXdtQwsQTbzY"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IServiceManagerUI.sol":{"keccak256":"0x365761699b4a5b7360ee6c75f12606eefc4b0394754c8b8e1e1eefec0cba7ffb","urls":["bzz-raw://ac14ada180b66cbbc5f9de0d6b4bb87b5946d2a9569ae88f2f62aaca47e879a8","dweb:/ipfs/QmcN9xKYF24naNWc6cYah9suz5gJSYE9nPj9eZFWnP35VX"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol":{"keccak256":"0x1b8b4d757c1b804bc4cf6fbbf8bf8f89ebdeb30a31014751fe7d01deb9d513d4","urls":["bzz-raw://984bf2777b898ed187d28997f9783f5c293a1a1848e3e9aa470ce9183d454c97","dweb:/ipfs/Qme3aTpBrkLu8wYHFMZbCfhXHoZ1M6SpXkeC237T9BuU5B"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/libraries/BN254.sol":{"keccak256":"0xb428c8d0c3b325507a88a61a80115493eb88606ccc19ed64a31e11294ab853b3","urls":["bzz-raw://d7b6fb935bfe0494e6ff970c8f30a86d5f4cf5c3e0967300c28cd383c043acae","dweb:/ipfs/QmUHfFZaVjLPXhkBmcxrZhAHZaSFQDqXtrLGpjGBQBa5Ki"],"license":"MIT"},"lib/eigenlayer-middleware/src/libraries/BitmapUtils.sol":{"keccak256":"0x44315ac460be30a6b18fd4df4d1b8afb46653bf4dc06ca9f93c32353fd0605c5","urls":["bzz-raw://da14f2ead3a375b02afd09d4a02edddf7b63a88945746b96789b2473184fdb04","dweb:/ipfs/QmRqcjxa2Vv2MrLdPeAwsktXdWTirapEDsRbJCyYRtKT6g"],"license":"MIT"},"src/core/AlignedLayerServiceManager.sol":{"keccak256":"0x5775b38c4b94937f3a2923ef3cec83d1548d987a947f2f2cd6e8fe962f0a26fc","urls":["bzz-raw://e4a4f99b6ed1f2a8d734964ac6af7bdc3fef0bd97222705fbfcea6ec87753f52","dweb:/ipfs/QmbXgF2RZeismGiXWJEvTwMEG1nUNyucnPcdJTEhnPgEeY"],"license":"UNLICENSED"},"src/core/AlignedLayerServiceManagerStorage.sol":{"keccak256":"0xabc512eb0a600c2e6465b0813cc2d1b26edd0225f03d9c1de2f6fe96db531817","urls":["bzz-raw://64c7675966d4d3503e011ed3184ffaebb85128b04e892f81cb47996788ca744d","dweb:/ipfs/QmXqm57dvJCPUGgwMhf6k4sbPa3DUUTY3UVu2UCbHejY68"],"license":null},"src/core/IAlignedLayerServiceManager.sol":{"keccak256":"0x8d2bfeabfc2cde8b699778f7395c5efe44ded0bc57f0d0ea14cdc18a87d8433b","urls":["bzz-raw://b2f47bfa5a21219889cde76d1bf30800c7765648ab68e1148c268b83362e040b","dweb:/ipfs/QmWADSHQrj5qxMJ3kiksWDVe82w2WMPxgtLYxGnv8kGr9M"],"license":"UNLICENSED"}},"version":1},"id":179} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"__avsDirectory","type":"address","internalType":"contract IAVSDirectory"},{"name":"__rewardsCoordinator","type":"address","internalType":"contract IRewardsCoordinator"},{"name":"__registryCoordinator","type":"address","internalType":"contract IRegistryCoordinator"},{"name":"__stakeRegistry","type":"address","internalType":"contract IStakeRegistry"}],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"alignedAggregator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"avsDirectory","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"batchersBalances","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"batchesState","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"taskCreatedBlock","type":"uint32","internalType":"uint32"},{"name":"responded","type":"bool","internalType":"bool"},{"name":"respondToTaskFeeLimit","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"blsApkRegistry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IBLSApkRegistry"}],"stateMutability":"view"},{"type":"function","name":"checkPublicInput","inputs":[{"name":"publicInput","type":"bytes","internalType":"bytes"},{"name":"hash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"checkSignatures","inputs":[{"name":"msgHash","type":"bytes32","internalType":"bytes32"},{"name":"referenceBlockNumber","type":"uint32","internalType":"uint32"},{"name":"params","type":"tuple","internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","components":[{"name":"nonSignerQuorumBitmapIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerPubkeys","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApks","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApkIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"totalStakeIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerStakeIndices","type":"uint32[][]","internalType":"uint32[][]"}]}],"outputs":[{"name":"","type":"tuple","internalType":"struct IBLSSignatureChecker.QuorumStakeTotals","components":[{"name":"signedStakeForQuorum","type":"uint96[]","internalType":"uint96[]"},{"name":"totalStakeForQuorum","type":"uint96[]","internalType":"uint96[]"}]},{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"createAVSRewardsSubmission","inputs":[{"name":"rewardsSubmissions","type":"tuple[]","internalType":"struct IRewardsCoordinator.RewardsSubmission[]","components":[{"name":"strategiesAndMultipliers","type":"tuple[]","internalType":"struct IRewardsCoordinator.StrategyAndMultiplier[]","components":[{"name":"strategy","type":"address","internalType":"contract IStrategy"},{"name":"multiplier","type":"uint96","internalType":"uint96"}]},{"name":"token","type":"address","internalType":"contract IERC20"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"startTimestamp","type":"uint32","internalType":"uint32"},{"name":"duration","type":"uint32","internalType":"uint32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"createNewTask","inputs":[{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"batchDataPointer","type":"string","internalType":"string"},{"name":"respondToTaskFeeLimit","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"delegation","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IDelegationManager"}],"stateMutability":"view"},{"type":"function","name":"depositToBatcher","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"deregisterOperatorFromAVS","inputs":[{"name":"operator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getOperatorRestakedStrategies","inputs":[{"name":"operator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getRestakeableStrategies","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_initialOwner","type":"address","internalType":"address"},{"name":"_rewardsInitiator","type":"address","internalType":"address"},{"name":"_alignedAggregator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initializeAggregator","inputs":[{"name":"_alignedAggregator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"registerOperatorToAVS","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"operatorSignature","type":"tuple","internalType":"struct ISignatureUtils.SignatureWithSaltAndExpiry","components":[{"name":"signature","type":"bytes","internalType":"bytes"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"expiry","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registryCoordinator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IRegistryCoordinator"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"respondToTaskV2","inputs":[{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"senderAddress","type":"address","internalType":"address"},{"name":"nonSignerStakesAndSignature","type":"tuple","internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","components":[{"name":"nonSignerQuorumBitmapIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerPubkeys","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApks","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApkIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"totalStakeIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerStakeIndices","type":"uint32[][]","internalType":"uint32[][]"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rewardsInitiator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"setAggregator","inputs":[{"name":"_alignedAggregator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setRewardsInitiator","inputs":[{"name":"newRewardsInitiator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setStaleStakesForbidden","inputs":[{"name":"value","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stakeRegistry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IStakeRegistry"}],"stateMutability":"view"},{"type":"function","name":"staleStakesForbidden","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"trySignatureAndApkVerification","inputs":[{"name":"msgHash","type":"bytes32","internalType":"bytes32"},{"name":"apk","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]}],"outputs":[{"name":"pairingSuccessful","type":"bool","internalType":"bool"},{"name":"siganatureIsValid","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"updateAVSMetadataURI","inputs":[{"name":"_metadataURI","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifyBatchInclusion","inputs":[{"name":"proofCommitment","type":"bytes32","internalType":"bytes32"},{"name":"pubInputCommitment","type":"bytes32","internalType":"bytes32"},{"name":"provingSystemAuxDataCommitment","type":"bytes32","internalType":"bytes32"},{"name":"proofGeneratorAddr","type":"bytes20","internalType":"bytes20"},{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"merkleProof","type":"bytes","internalType":"bytes"},{"name":"verificationDataBatchIndex","type":"uint256","internalType":"uint256"},{"name":"senderAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"verifyBatchInclusion","inputs":[{"name":"proofCommitment","type":"bytes32","internalType":"bytes32"},{"name":"pubInputCommitment","type":"bytes32","internalType":"bytes32"},{"name":"provingSystemAuxDataCommitment","type":"bytes32","internalType":"bytes32"},{"name":"proofGeneratorAddr","type":"bytes20","internalType":"bytes20"},{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"merkleProof","type":"bytes","internalType":"bytes"},{"name":"verificationDataBatchIndex","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"withdraw","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"BatchVerified","inputs":[{"name":"batchMerkleRoot","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"senderAddress","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"BatcherBalanceUpdated","inputs":[{"name":"batcher","type":"address","indexed":true,"internalType":"address"},{"name":"newBalance","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"NewBatchV2","inputs":[{"name":"batchMerkleRoot","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"senderAddress","type":"address","indexed":false,"internalType":"address"},{"name":"taskCreatedBlock","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"batchDataPointer","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"NewBatchV3","inputs":[{"name":"batchMerkleRoot","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"senderAddress","type":"address","indexed":false,"internalType":"address"},{"name":"taskCreatedBlock","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"batchDataPointer","type":"string","indexed":false,"internalType":"string"},{"name":"respondToTaskFeeLimit","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RewardsInitiatorUpdated","inputs":[{"name":"prevRewardsInitiator","type":"address","indexed":false,"internalType":"address"},{"name":"newRewardsInitiator","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"StaleStakesForbiddenUpdate","inputs":[{"name":"value","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"error","name":"BatchAlreadyResponded","inputs":[{"name":"batchIdentifierHash","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"BatchAlreadySubmitted","inputs":[{"name":"batchIdentifierHash","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"BatchDoesNotExist","inputs":[{"name":"batchIdentifierHash","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"ExceededMaxRespondFee","inputs":[{"name":"respondToTaskFeeLimit","type":"uint256","internalType":"uint256"},{"name":"txCost","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InsufficientFunds","inputs":[{"name":"batcher","type":"address","internalType":"address"},{"name":"required","type":"uint256","internalType":"uint256"},{"name":"available","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidDepositAmount","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidQuorumThreshold","inputs":[{"name":"signedStake","type":"uint256","internalType":"uint256"},{"name":"requiredStake","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"SenderIsNotAggregator","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"alignedAggregator","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x6101806040523480156200001257600080fd5b50604051620056ab380380620056ab8339810160408190526200003591620002e5565b6001600160a01b0380851660805280841660a05280831660c052811660e0528184848284620000636200020a565b50505050806001600160a01b0316610100816001600160a01b031681525050806001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e791906200034d565b6001600160a01b0316610120816001600160a01b031681525050806001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000140573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016691906200034d565b6001600160a01b0316610140816001600160a01b031681525050610120516001600160a01b031663df5cf7236040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e891906200034d565b6001600160a01b03166101605250620002006200020a565b5050505062000374565b600054610100900460ff1615620002775760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620002ca576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620002e257600080fd5b50565b60008060008060808587031215620002fc57600080fd5b84516200030981620002cc565b60208601519094506200031c81620002cc565b60408601519093506200032f81620002cc565b60608601519092506200034281620002cc565b939692955090935050565b6000602082840312156200036057600080fd5b81516200036d81620002cc565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051615229620004826000396000818161065401526117dd01526000818161039701526119f00152600081816103cb01528181611bdd0152611dcd0152600081816104320152818161100f015281816114a30152818161164a0152611891015260008181610d4401528181610e9501528181610f2c01528181612aae01528181612c270152612cc6015260008181610b6b01528181610bfa01528181610c7a0152818161216601528181612232015281816129e90152612b8201526000818161307d01528181613139015261321c0152600081816103fc015281816121ba0152818161228e015261230d01526152296000f3fe6080604052600436106101fd5760003560e01c806395c6d6041161010d578063d66eaabd116100a0578063f474b5201161006f578063f474b520146106ab578063f9120af6146106d8578063fa534dc0146106f8578063fc299dee14610718578063fce36c7d1461073857600080fd5b8063d66eaabd1461062f578063df5cf72314610642578063e481af9d14610676578063f2fde38b1461068b57600080fd5b8063ab21739a116100dc578063ab21739a1461056b578063b099627e1461058b578063b98d0908146105f5578063c0c53b8b1461060f57600080fd5b806395c6d604146104eb5780639926ee7d1461050b578063a364f4da1461052b578063a98fb3551461054b57600080fd5b80634ae07c37116101905780636d14a9871161015f5780636d14a9871461042057806370a0823114610454578063715018a614610498578063800fb61f146104ad5780638da5cb5b146104cd57600080fd5b80634ae07c37146103575780635df459461461038557806368304835146103b95780636b3aa72e146103ed57600080fd5b80633bc28c8c116101cc5780633bc28c8c146102cc578063416c7e5e146102ec5780634223d5511461030c5780634a5bf6321461031f57600080fd5b806306045a9114610213578063171f1d5b146102485780632e1a7d4d1461027f57806333cfb7b71461029f57600080fd5b3661020e5761020c3334610758565b005b600080fd5b34801561021f57600080fd5b5061023361022e366004614197565b6107ed565b60405190151581526020015b60405180910390f35b34801561025457600080fd5b506102686102633660046142e9565b6108e4565b60408051921515835290151560208301520161023f565b34801561028b57600080fd5b5061020c61029a36600461433a565b610a6e565b3480156102ab57600080fd5b506102bf6102ba366004614353565b610b46565b60405161023f9190614370565b3480156102d857600080fd5b5061020c6102e7366004614353565b610ff9565b3480156102f857600080fd5b5061020c6103073660046143cb565b61100d565b61020c61031a366004614353565b611144565b34801561032b57600080fd5b5060cb5461033f906001600160a01b031681565b6040516001600160a01b03909116815260200161023f565b34801561036357600080fd5b506103776103723660046146a6565b61114e565b60405161023f929190614741565b34801561039157600080fd5b5061033f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c557600080fd5b5061033f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f957600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061033f565b34801561042c57600080fd5b5061033f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561046057600080fd5b5061048a61046f366004614353565b6001600160a01b0316600090815260ca602052604090205490565b60405190815260200161023f565b3480156104a457600080fd5b5061020c612082565b3480156104b957600080fd5b5061020c6104c8366004614353565b612096565b3480156104d957600080fd5b506033546001600160a01b031661033f565b3480156104f757600080fd5b506102336105063660046147d2565b612136565b34801561051757600080fd5b5061020c61052636600461481d565b61215b565b34801561053757600080fd5b5061020c610546366004614353565b612227565b34801561055757600080fd5b5061020c6105663660046148c8565b6122ee565b34801561057757600080fd5b5061020c610586366004614918565b612342565b34801561059757600080fd5b506105d36105a636600461433a565b60c9602052600090815260409020805460019091015463ffffffff821691640100000000900460ff169083565b6040805163ffffffff909416845291151560208401529082015260600161023f565b34801561060157600080fd5b506097546102339060ff1681565b34801561061b57600080fd5b5061020c61062a36600461493f565b612701565b61020c61063d36600461498a565b6127eb565b34801561064e57600080fd5b5061033f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561068257600080fd5b506102bf6129e3565b34801561069757600080fd5b5061020c6106a6366004614353565b612d8f565b3480156106b757600080fd5b5061048a6106c6366004614353565b60ca6020526000908152604090205481565b3480156106e457600080fd5b5061020c6106f3366004614353565b612e05565b34801561070457600080fd5b506102336107133660046149dc565b612e2f565b34801561072457600080fd5b5060655461033f906001600160a01b031681565b34801561074457600080fd5b5061020c610753366004614a59565b612ea4565b8060000361078157604051632097692160e11b8152600481018290526024015b60405180910390fd5b6001600160a01b038216600090815260ca6020526040812080548392906107a9908490614ae3565b90915550506001600160a01b038216600081815260ca60209081526040918290205491519182526000805160206151b4833981519152910160405180910390a25050565b6000806001600160a01b038316610805575084610831565b8583604051602001610818929190614af6565b6040516020818303038152906040528051906020012090505b600081815260c9602052604081205463ffffffff1690036108565760009150506108d8565b600081815260c96020526040902054640100000000900460ff1661087e5760009150506108d8565b60408051602081018c90529081018a9052606081018990526001600160601b03198816608082015260009060940160408051601f19818403018152919052805160208201209091506108d287898389613253565b93505050505b98975050505050505050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018787600001518860200151886000015160006002811061092c5761092c614b11565b60200201518951600160200201518a6020015160006002811061095157610951614b11565b60200201518b6020015160016002811061096d5761096d614b11565b602090810291909101518c518d8301516040516109ca9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c6109ed9190614b27565b9050610a60610a066109ff888461326b565b86906132fc565b610a0e613391565b610a56610a4785610a41604080518082018252600080825260209182015281518083019092526001825260029082015290565b9061326b565b610a508c613451565b906132fc565b886201d4c06134e0565b909890975095505050505050565b33600090815260ca6020526040902054811115610abf5733600081815260ca602052604090819020549051632e2a182f60e11b81526004810192909252602482018390526044820152606401610778565b33600090815260ca602052604081208054839290610ade908490614b49565b909155505033600081815260ca60209081526040918290205491519182526000805160206151b4833981519152910160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015610b42573d6000803e3d6000fd5b5050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90602401602060405180830381865afa158015610bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd69190614b5c565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa158015610c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c659190614b75565b90506001600160c01b0381161580610cff57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfa9190614b9e565b60ff16155b15610d1f5760408051600080825260208201909252905b50949350505050565b6000610d33826001600160c01b03166136fa565b90506000805b8251811015610dff577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f5848381518110610d8357610d83614b11565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610deb9190614b5c565b610df59083614ae3565b9150600101610d39565b506000816001600160401b03811115610e1a57610e1a614073565b604051908082528060200260200182016040528015610e43578160200160208202803683370190505b5090506000805b8451811015610fec576000858281518110610e6757610e67614b11565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f009190614b5c565b905060005b81811015610fe1576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015610f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9e9190614bd6565b60000151868681518110610fb457610fb4614b11565b6001600160a01b039092166020928302919091019091015284610fd681614c17565b955050600101610f05565b505050600101610e4a565b5090979650505050505050565b6110016137bc565b61100a81613816565b50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561106b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108f9190614c30565b6001600160a01b0316336001600160a01b03161461113b5760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a401610778565b61100a8161387f565b61100a8134610758565b604080518082019091526060808252602082015260008260400151516040518060400160405280600181526020016000815250511480156111aa57508260a0015151604051806040016040528060018152602001600081525051145b80156111d157508260c0015151604051806040016040528060018152602001600081525051145b80156111f857508260e0015151604051806040016040528060018152602001600081525051145b6112625760405162461bcd60e51b815260206004820152604160248201526000805160206151d483398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a401610778565b825151602084015151146112da5760405162461bcd60e51b8152602060048201526044602482018190526000805160206151d4833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a401610778565b4363ffffffff168463ffffffff16106113495760405162461bcd60e51b815260206004820152603c60248201526000805160206151d483398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b000000006064820152608401610778565b60408051808201825260008082526020808301829052835180850185526060808252818301528451808601865260018082529083019390935284518381528086019095529293919082810190803683370190505060208281019190915260408051808201825260018082526000919093015280518281528082019091529081602001602082028036833701905050815260408051808201909152606080825260208201528560200151516001600160401b0381111561140a5761140a614073565b604051908082528060200260200182016040528015611433578160200160208202803683370190505b5081526020860151516001600160401b0381111561145357611453614073565b60405190808252806020026020018201604052801561147c578160200160208202803683370190505b508160200181905250600061152860405180604001604052806001815260200160008152507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115239190614b9e565b6138c6565b905060005b8760200151518110156117b9576115728860200151828151811061155357611553614b11565b6020026020010151805160009081526020918201519091526040902090565b8360200151828151811061158857611588614b11565b602090810291909101015280156116485760208301516115a9600183614b49565b815181106115b9576115b9614b11565b602002602001015160001c836020015182815181106115da576115da614b11565b602002602001015160001c11611648576040805162461bcd60e51b81526020600482015260248101919091526000805160206151d483398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f727465646064820152608401610778565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec63518460200151838151811061168d5761168d614b11565b60200260200101518b8b6000015185815181106116ac576116ac614b11565b60200260200101516040518463ffffffff1660e01b81526004016116e99392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015611706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172a9190614b75565b6001600160c01b03168360000151828151811061174957611749614b11565b6020026020010181815250506117af6109ff611783848660000151858151811061177557611775614b11565b602002602001015116613959565b8a60200151848151811061179957611799614b11565b602002602001015161398490919063ffffffff16565b945060010161152d565b50506117c483613a67565b60975490935060ff166000816117db57600061185d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d9190614b5c565b905060005b604051806040016040528060018152602001600081525051811015611f535782156119ee578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c42604051806040016040528060018152602001600081525085815181106118e6576118e6614b11565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa15801561192a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194e9190614b5c565b6119589190614ae3565b116119ee5760405162461bcd60e51b815260206004820152606660248201526000805160206151d483398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c401610778565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac60405180604001604052806001815260200160008152508381518110611a4557611a45614b11565b602001015160f81c60f81b60f81c8c8c60a001518581518110611a6a57611a6a614b11565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611ac6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aea9190614c4d565b6001600160401b031916611b0d8a60400151838151811061155357611553614b11565b67ffffffffffffffff191614611ba95760405162461bcd60e51b815260206004820152606160248201526000805160206151d483398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c401610778565b611bd989604001518281518110611bc257611bc2614b11565b6020026020010151876132fc90919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c5660405180604001604052806001815260200160008152508381518110611c3257611c32614b11565b602001015160f81c60f81b60f81c8c8c60c001518581518110611c5757611c57614b11565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611cb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd79190614c78565b85602001518281518110611ced57611ced614b11565b6001600160601b03909216602092830291909101820152850151805182908110611d1957611d19614b11565b602002602001015185600001518281518110611d3757611d37614b11565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015611f4957611dc686600001518281518110611d8157611d81614b11565b602002602001015160405180604001604052806001815260200160008152508581518110611db157611db1614b11565b016020015160f81c60ff161c60019081161490565b15611f41577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae60405180604001604052806001815260200160008152508581518110611e2257611e22614b11565b602001015160f81c60f81b60f81c8e89602001518581518110611e4757611e47614b11565b60200260200101518f60e001518881518110611e6557611e65614b11565b60200260200101518781518110611e7e57611e7e614b11565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa158015611ee2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f069190614c78565b8751805185908110611f1a57611f1a614b11565b60200260200101818151611f2e9190614c95565b6001600160601b03169052506001909101905b600101611d5b565b5050600101611862565b505050600080611f6d8a868a606001518b608001516108e4565b9150915081611fde5760405162461bcd60e51b815260206004820152604360248201526000805160206151d483398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a401610778565b8061203f5760405162461bcd60e51b815260206004820152603960248201526000805160206151d483398151915260448201527f7265733a207369676e617475726520697320696e76616c6964000000000000006064820152608401610778565b5050600087826020015160405160200161205a929190614cbc565b60408051808303601f1901815291905280516020909101209299929850919650505050505050565b61208a6137bc565b6120946000613b02565b565b600054600290610100900460ff161580156120b8575060005460ff8083169116105b6120d45760405162461bcd60e51b815260040161077890614d04565b6000805461ffff191660ff8316176101001790556120f182612e05565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6000818484604051612149929190614d52565b60405180910390201490509392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146121a35760405162461bcd60e51b815260040161077890614d62565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d906121f19085908590600401614e20565b600060405180830381600087803b15801561220b57600080fd5b505af115801561221f573d6000803e3d6000fd5b505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461226f5760405162461bcd60e51b815260040161077890614d62565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da906024015b600060405180830381600087803b1580156122d357600080fd5b505af11580156122e7573d6000803e3d6000fd5b5050505050565b6122f66137bc565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb355906122b9908490600401614e6b565b60cb546001600160a01b031633146123825760cb54604051632cbe419560e01b81523360048201526001600160a01b039091166024820152604401610778565b60005a90506000848460405160200161239c929190614af6565b60408051601f198184030181529181528151602092830120600081815260c990935290822080549193509163ffffffff90911690036123f1576040516311cb69a760e11b815260048101839052602401610778565b8054640100000000900460ff161561241f57604051634e78d7f960e11b815260048101839052602401610778565b805464ff00000000191664010000000017815560018101546001600160a01b038616600090815260ca602052604090205410156124a25760018101546001600160a01b038616600081815260ca602052604090819020549051632e2a182f60e11b8152600481019290925260248201929092526044810191909152606401610778565b80546000906124b990849063ffffffff168761114e565b509050604360ff1681602001516000815181106124d8576124d8614b11565b60200260200101516124ea9190614e7e565b6001600160601b03166064826000015160008151811061250c5761250c614b11565b60200260200101516001600160601b03166125279190614ea1565b10156125ba576064816000015160008151811061254657612546614b11565b60200260200101516001600160601b03166125619190614ea1565b604360ff16826020015160008151811061257d5761257d614b11565b602002602001015161258f9190614e7e565b60405163530f5c4560e11b815260048101929092526001600160601b03166024820152604401610778565b6040516001600160a01b038716815287907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260003a5a6126069087614b49565b6126139062011170614ae3565b61261d9190614ea1565b9050826001015481111561265457600183015460405163437e283f60e11b8152600481019190915260248101829052604401610778565b6001600160a01b038716600090815260ca60205260408120805483929061267c908490614b49565b90915550506001600160a01b038716600081815260ca60209081526040918290205491519182526000805160206151b4833981519152910160405180910390a260cb546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156126f6573d6000803e3d6000fd5b505050505050505050565b600054610100900460ff16158080156127215750600054600160ff909116105b8061273b5750303b15801561273b575060005460ff166001145b6127575760405162461bcd60e51b815260040161077890614d04565b6000805460ff19166001179055801561277a576000805461ff0019166101001790555b6127848484613b54565b60cb80546001600160a01b0319166001600160a01b03841617905580156127e5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60008433604051602001612800929190614af6565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff161561284f57604051630c40bc4360e21b815260048101829052602401610778565b34156128ac5733600090815260ca602052604081208054349290612874908490614ae3565b909155505033600081815260ca60209081526040918290205491519182526000805160206151b4833981519152910160405180910390a25b33600090815260ca60205260409020548211156128fd5733600081815260ca602052604090819020549051632e2a182f60e11b81526004810192909252602482018490526044820152606401610778565b604080516060810182526000602080830182815263ffffffff43818116865285870189815288865260c99094529386902085518154935115156401000000000264ffffffffff1990941692169190911791909117815590516001909101559151909187917f130d3e81af62e03ed6fff5e3bb343695ec513892cfad24d286486745dcc6143791612993913391908a908a90614ee1565b60405180910390a2857f8801fc966deb2c8f563a103c35c9e80740585c292cd97518587e6e7927e6af5533438888886040516129d3959493929190614f1c565b60405180910390a2505050505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a699190614b9e565b60ff16905080600003612a8a57505060408051600081526020810190915290565b6000805b82811015612b3557604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612afd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b219190614b5c565b612b2b9083614ae3565b9150600101612a8e565b506000816001600160401b03811115612b5057612b50614073565b604051908082528060200260200182016040528015612b79578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c029190614b9e565b60ff16811015612d8557604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612c76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9a9190614b5c565b905060005b81811015612d7b576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015612d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d389190614bd6565b60000151858581518110612d4e57612d4e614b11565b6001600160a01b039092166020928302919091019091015283612d7081614c17565b945050600101612c9f565b5050600101612b80565b5090949350505050565b612d976137bc565b6001600160a01b038116612dfc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610778565b61100a81613b02565b612e0d6137bc565b60cb80546001600160a01b0319166001600160a01b0392909216919091179055565b6040516306045a9160e01b815260009030906306045a9190612e63908b908b908b908b908b908b908b908b90600401614f5f565b602060405180830381865afa158015612e80573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d89190614fc1565b6065546001600160a01b03163314612f395760405162461bcd60e51b815260206004820152604c60248201527f536572766963654d616e61676572426173652e6f6e6c7952657761726473496e60448201527f69746961746f723a2063616c6c6572206973206e6f742074686520726577617260648201526b32399034b734ba34b0ba37b960a11b608482015260a401610778565b60005b8181101561320457828282818110612f5657612f56614b11565b9050602002810190612f689190614fde565b612f79906040810190602001614353565b6001600160a01b03166323b872dd3330868686818110612f9b57612f9b614b11565b9050602002810190612fad9190614fde565b604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152013560448201526064016020604051808303816000875af1158015613004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130289190614fc1565b50600083838381811061303d5761303d614b11565b905060200281019061304f9190614fde565b613060906040810190602001614353565b604051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa1580156130ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f29190614b5c565b905083838381811061310657613106614b11565b90506020028101906131189190614fde565b613129906040810190602001614353565b6001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000008387878781811061316b5761316b614b11565b905060200281019061317d9190614fde565b6040013561318b9190614ae3565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156131d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fa9190614fc1565b5050600101612f3c565b5060405163fce36c7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fce36c7d906121f19085908590600401615064565b600083613261868585613bd1565b1495945050505050565b6040805180820190915260008082526020820152613287613f81565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa905080806132b657fe5b50806132f45760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610778565b505092915050565b6040805180820190915260008082526020820152613318613f9f565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808061335357fe5b50806132f45760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610778565b613399613fbd565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201909152600080825260208201526000808061348160008051602061519483398151915286614b27565b90505b61348d81613cce565b909350915060008051602061519483398151915282830983036134c6576040805180820190915290815260208101919091529392505050565b600080516020615194833981519152600182089050613484565b604080518082018252868152602080820186905282518084019093528683528201849052600091829190613512613fe2565b60005b60028110156136cd57600061352b826006614ea1565b905084826002811061353f5761353f614b11565b60200201515183613551836000614ae3565b600c811061356157613561614b11565b602002015284826002811061357857613578614b11565b6020020151602001518382600161358f9190614ae3565b600c811061359f5761359f614b11565b60200201528382600281106135b6576135b6614b11565b60200201515151836135c9836002614ae3565b600c81106135d9576135d9614b11565b60200201528382600281106135f0576135f0614b11565b6020020151516001602002015183613609836003614ae3565b600c811061361957613619614b11565b602002015283826002811061363057613630614b11565b60200201516020015160006002811061364b5761364b614b11565b60200201518361365c836004614ae3565b600c811061366c5761366c614b11565b602002015283826002811061368357613683614b11565b60200201516020015160016002811061369e5761369e614b11565b6020020151836136af836005614ae3565b600c81106136bf576136bf614b11565b602002015250600101613515565b506136d6614001565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606060008061370884613959565b61ffff166001600160401b0381111561372357613723614073565b6040519080825280601f01601f19166020018201604052801561374d576020820181803683370190505b5090506000805b825182108015613765575061010081105b15612d85576001811b9350858416156137ac578060f81b83838151811061378e5761378e614b11565b60200101906001600160f81b031916908160001a9053508160010191505b6137b581614c17565b9050613754565b6033546001600160a01b031633146120945760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610778565b606554604080516001600160a01b03928316815291831660208301527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b6000806138d284613d50565b9050808360ff166001901b116139505760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610778565b90505b92915050565b6000805b82156139535761396e600184614b49565b909216918061397c81615172565b91505061395d565b60408051808201909152600080825260208201526102008261ffff16106139e05760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b6044820152606401610778565b8161ffff166001036139f3575081613953565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610613a5c57600161ffff871660ff83161c81169003613a3f57613a3c84846132fc565b93505b613a4983846132fc565b92506201fffe600192831b169101613a0f565b509195945050505050565b60408051808201909152600080825260208201528151158015613a8c57506020820151155b15613aaa575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206151948339815191528460200151613add9190614b27565b613af590600080516020615194833981519152614b49565b905292915050565b919050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613bbf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610778565b613bc882613b02565b610b4281613816565b600060208451613be19190614b27565b15613c685760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a401610778565b8260205b85518111610d1657613c7f600285614b27565b600003613ca357816000528086015160205260406000209150600284049350613cbc565b8086015160005281602052604060002091506002840493505b613cc7602082614ae3565b9050613c6c565b60008080600080516020615194833981519152600360008051602061519483398151915286600080516020615194833981519152888909090890506000613d44827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615194833981519152613ed8565b91959194509092505050565b600061010082511115613dd95760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610778565b8151600003613dea57506000919050565b60008083600081518110613e0057613e00614b11565b0160200151600160f89190911c81901b92505b8451811015613ecf57848181518110613e2e57613e2e614b11565b0160200151600160f89190911c1b9150828211613ec35760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610778565b91811791600101613e13565b50909392505050565b600080613ee3614001565b613eeb61401f565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280613f2857fe5b5082613f765760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610778565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613fd061403d565b8152602001613fdd61403d565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356001600160601b031981168114613afd57600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156140ab576140ab614073565b60405290565b60405161010081016001600160401b03811182821017156140ab576140ab614073565b604051601f8201601f191681016001600160401b03811182821017156140fc576140fc614073565b604052919050565b60006001600160401b0383111561411d5761411d614073565b614130601f8401601f19166020016140d4565b905082815283838301111561414457600080fd5b828260208301376000602084830101529392505050565b600082601f83011261416c57600080fd5b61417b83833560208501614104565b9392505050565b6001600160a01b038116811461100a57600080fd5b600080600080600080600080610100898b0312156141b457600080fd5b8835975060208901359650604089013595506141d260608a0161405b565b94506080890135935060a08901356001600160401b038111156141f457600080fd5b6142008b828c0161415b565b93505060c0890135915060e089013561421881614182565b809150509295985092959890939650565b60006040828403121561423b57600080fd5b614243614089565b9050813581526020820135602082015292915050565b600082601f83011261426a57600080fd5b614272614089565b80604084018581111561428457600080fd5b845b8181101561429e578035845260209384019301614286565b509095945050505050565b6000608082840312156142bb57600080fd5b6142c3614089565b90506142cf8383614259565b81526142de8360408401614259565b602082015292915050565b600080600080610120858703121561430057600080fd5b843593506143118660208701614229565b925061432086606087016142a9565b915061432f8660e08701614229565b905092959194509250565b60006020828403121561434c57600080fd5b5035919050565b60006020828403121561436557600080fd5b813561395081614182565b6020808252825182820181905260009190848201906040850190845b818110156143b15783516001600160a01b03168352928401929184019160010161438c565b50909695505050505050565b801515811461100a57600080fd5b6000602082840312156143dd57600080fd5b8135613950816143bd565b803563ffffffff81168114613afd57600080fd5b60006001600160401b0382111561441557614415614073565b5060051b60200190565b600082601f83011261443057600080fd5b81356020614445614440836143fc565b6140d4565b8083825260208201915060208460051b87010193508684111561446757600080fd5b602086015b8481101561448a5761447d816143e8565b835291830191830161446c565b509695505050505050565b600082601f8301126144a657600080fd5b813560206144b6614440836143fc565b8083825260208201915060208460061b8701019350868411156144d857600080fd5b602086015b8481101561448a576144ef8882614229565b8352918301916040016144dd565b600082601f83011261450e57600080fd5b8135602061451e614440836143fc565b82815260059290921b8401810191818101908684111561453d57600080fd5b8286015b8481101561448a5780356001600160401b038111156145605760008081fd5b61456e8986838b010161441f565b845250918301918301614541565b6000610180828403121561458f57600080fd5b6145976140b1565b905081356001600160401b03808211156145b057600080fd5b6145bc8583860161441f565b835260208401359150808211156145d257600080fd5b6145de85838601614495565b602084015260408401359150808211156145f757600080fd5b61460385838601614495565b604084015261461585606086016142a9565b60608401526146278560e08601614229565b608084015261012084013591508082111561464157600080fd5b61464d8583860161441f565b60a084015261014084013591508082111561466757600080fd5b6146738583860161441f565b60c084015261016084013591508082111561468d57600080fd5b5061469a848285016144fd565b60e08301525092915050565b6000806000606084860312156146bb57600080fd5b833592506146cb602085016143e8565b915060408401356001600160401b038111156146e657600080fd5b6146f28682870161457c565b9150509250925092565b60008151808452602080850194506020840160005b838110156147365781516001600160601b031687529582019590820190600101614711565b509495945050505050565b604081526000835160408084015261475c60808401826146fc565b90506020850151603f1984830301606085015261477982826146fc565b925050508260208301529392505050565b60008083601f84011261479c57600080fd5b5081356001600160401b038111156147b357600080fd5b6020830191508360208285010111156147cb57600080fd5b9250929050565b6000806000604084860312156147e757600080fd5b83356001600160401b038111156147fd57600080fd5b6148098682870161478a565b909790965060209590950135949350505050565b6000806040838503121561483057600080fd5b823561483b81614182565b915060208301356001600160401b038082111561485757600080fd5b908401906060828703121561486b57600080fd5b60405160608101818110838211171561488657614886614073565b60405282358281111561489857600080fd5b6148a48882860161415b565b82525060208301356020820152604083013560408201528093505050509250929050565b6000602082840312156148da57600080fd5b81356001600160401b038111156148f057600080fd5b8201601f8101841361490157600080fd5b61491084823560208401614104565b949350505050565b60008060006060848603121561492d57600080fd5b8335925060208401356146cb81614182565b60008060006060848603121561495457600080fd5b833561495f81614182565b9250602084013561496f81614182565b9150604084013561497f81614182565b809150509250925092565b600080600080606085870312156149a057600080fd5b8435935060208501356001600160401b038111156149bd57600080fd5b6149c98782880161478a565b9598909750949560400135949350505050565b600080600080600080600060e0888a0312156149f757600080fd5b873596506020880135955060408801359450614a156060890161405b565b93506080880135925060a08801356001600160401b03811115614a3757600080fd5b614a438a828b0161415b565b92505060c0880135905092959891949750929550565b60008060208385031215614a6c57600080fd5b82356001600160401b0380821115614a8357600080fd5b818501915085601f830112614a9757600080fd5b813581811115614aa657600080fd5b8660208260051b8501011115614abb57600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561395357613953614acd565b91825260601b6001600160601b031916602082015260340190565b634e487b7160e01b600052603260045260246000fd5b600082614b4457634e487b7160e01b600052601260045260246000fd5b500690565b8181038181111561395357613953614acd565b600060208284031215614b6e57600080fd5b5051919050565b600060208284031215614b8757600080fd5b81516001600160c01b038116811461395057600080fd5b600060208284031215614bb057600080fd5b815160ff8116811461395057600080fd5b6001600160601b038116811461100a57600080fd5b600060408284031215614be857600080fd5b614bf0614089565b8251614bfb81614182565b81526020830151614c0b81614bc1565b60208201529392505050565b600060018201614c2957614c29614acd565b5060010190565b600060208284031215614c4257600080fd5b815161395081614182565b600060208284031215614c5f57600080fd5b815167ffffffffffffffff198116811461395057600080fd5b600060208284031215614c8a57600080fd5b815161395081614bc1565b6001600160601b03828116828216039080821115614cb557614cb5614acd565b5092915050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015614cf757815185529382019390820190600101614cdb565b5092979650505050505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b8183823760009101908152919050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015614e0057602081850181015186830182015201614de4565b506000602082860101526020601f19601f83011685010191505092915050565b60018060a01b0383168152604060208201526000825160606040840152614e4a60a0840182614dda565b90506020840151606084015260408401516080840152809150509392505050565b60208152600061417b6020830184614dda565b6001600160601b038181168382160280821691908281146132f4576132f4614acd565b808202811582820484141761395357613953614acd565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038516815263ffffffff84166020820152606060408201819052600090614f129083018486614eb8565b9695505050505050565b6001600160a01b038616815263ffffffff85166020820152608060408201819052600090614f4d9083018587614eb8565b90508260608301529695505050505050565b60006101008a83528960208401528860408401526001600160601b0319881660608401528660808401528060a0840152614f9b81840187614dda565b60c084019590955250506001600160a01b039190911660e0909101529695505050505050565b600060208284031215614fd357600080fd5b8151613950816143bd565b60008235609e19833603018112614ff457600080fd5b9190910192915050565b8035613afd81614182565b8183526000602080850194508260005b8581101561473657813561502c81614182565b6001600160a01b031687528183013561504481614bc1565b6001600160601b0316878401526040968701969190910190600101615019565b60208082528181018390526000906040808401600586901b8501820187855b8881101561516457878303603f190184528135368b9003609e190181126150a957600080fd5b8a0160a0813536839003601e190181126150c257600080fd5b820188810190356001600160401b038111156150dd57600080fd5b8060061b36038213156150ef57600080fd5b8287526150ff8388018284615009565b9250505061510e888301614ffe565b6001600160a01b031688860152818701358786015260606151308184016143e8565b63ffffffff169086015260806151478382016143e8565b63ffffffff16950194909452509285019290850190600101615083565b509098975050505050505050565b600061ffff80831681810361518957615189614acd565b600101939250505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0424c535369676e6174757265436865636b65722e636865636b5369676e617475a26469706673582212207bebe605db37bc08c9e9e45bfd6ec5d1c229f929c7f0eec3285c426ff557481a64736f6c63430008180033","sourceMap":"847:9633:116:-:0;;;1134:455;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1590:30:74;;;;;1630:42;;;;;1682:44;;;;;1736:32;;;;1360:21:116;1423:14;1451:20;1360:21;1520:15;2276:22:73::1;:20;:22::i;:::-;1894:411:::0;;;;1793:20:67;-1:-1:-1;;;;;1771:42:67;;;-1:-1:-1;;;;;1771:42:67;;;;;1839:20;-1:-1:-1;;;;;1839:34:67;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1823:52:67;;;-1:-1:-1;;;;;1823:52:67;;;;;1902:20;-1:-1:-1;;;;;1902:35:67;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1885:54:67;;;-1:-1:-1;;;;;1885:54:67;;;;;1962:13;;-1:-1:-1;;;;;1962:24:67;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1949:39:67;;;-1:-1:-1;1560:22:116::2;:20;:22::i;:::-;1134:455:::0;;;;847:9633;;5388:279:40;5456:13;;;;;;;5455:14;5447:66;;;;-1:-1:-1;;;5447:66:40;;2079:2:119;5447:66:40;;;2061:21:119;2118:2;2098:18;;;2091:30;2157:34;2137:18;;;2130:62;-1:-1:-1;;;2208:18:119;;;2201:37;2255:19;;5447:66:40;;;;;;;;5527:12;;5542:15;5527:12;;;:30;5523:138;;;5573:12;:30;;-1:-1:-1;;5573:30:40;5588:15;5573:30;;;;;;5622:28;;2427:36:119;;;5622:28:40;;2415:2:119;2400:18;5622:28:40;;;;;;;5523:138;5388:279::o;14:146:119:-;-1:-1:-1;;;;;104:31:119;;94:42;;84:70;;150:1;147;140:12;84:70;14:146;:::o;165:818::-;366:6;374;382;390;443:3;431:9;422:7;418:23;414:33;411:53;;;460:1;457;450:12;411:53;492:9;486:16;511:46;551:5;511:46;:::i;:::-;626:2;611:18;;605:25;576:5;;-1:-1:-1;639:48:119;605:25;639:48;:::i;:::-;758:2;743:18;;737:25;706:7;;-1:-1:-1;771:48:119;737:25;771:48;:::i;:::-;890:2;875:18;;869:25;838:7;;-1:-1:-1;903:48:119;869:25;903:48;:::i;:::-;165:818;;;;-1:-1:-1;165:818:119;;-1:-1:-1;;165:818:119:o;988:290::-;1082:6;1135:2;1123:9;1114:7;1110:23;1106:32;1103:52;;;1151:1;1148;1141:12;1103:52;1183:9;1177:16;1202:46;1242:5;1202:46;:::i;:::-;1267:5;988:290;-1:-1:-1;;;988:290:119:o;2285:184::-;847:9633:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101fd5760003560e01c806395c6d6041161010d578063d66eaabd116100a0578063f474b5201161006f578063f474b520146106ab578063f9120af6146106d8578063fa534dc0146106f8578063fc299dee14610718578063fce36c7d1461073857600080fd5b8063d66eaabd1461062f578063df5cf72314610642578063e481af9d14610676578063f2fde38b1461068b57600080fd5b8063ab21739a116100dc578063ab21739a1461056b578063b099627e1461058b578063b98d0908146105f5578063c0c53b8b1461060f57600080fd5b806395c6d604146104eb5780639926ee7d1461050b578063a364f4da1461052b578063a98fb3551461054b57600080fd5b80634ae07c37116101905780636d14a9871161015f5780636d14a9871461042057806370a0823114610454578063715018a614610498578063800fb61f146104ad5780638da5cb5b146104cd57600080fd5b80634ae07c37146103575780635df459461461038557806368304835146103b95780636b3aa72e146103ed57600080fd5b80633bc28c8c116101cc5780633bc28c8c146102cc578063416c7e5e146102ec5780634223d5511461030c5780634a5bf6321461031f57600080fd5b806306045a9114610213578063171f1d5b146102485780632e1a7d4d1461027f57806333cfb7b71461029f57600080fd5b3661020e5761020c3334610758565b005b600080fd5b34801561021f57600080fd5b5061023361022e366004614197565b6107ed565b60405190151581526020015b60405180910390f35b34801561025457600080fd5b506102686102633660046142e9565b6108e4565b60408051921515835290151560208301520161023f565b34801561028b57600080fd5b5061020c61029a36600461433a565b610a6e565b3480156102ab57600080fd5b506102bf6102ba366004614353565b610b46565b60405161023f9190614370565b3480156102d857600080fd5b5061020c6102e7366004614353565b610ff9565b3480156102f857600080fd5b5061020c6103073660046143cb565b61100d565b61020c61031a366004614353565b611144565b34801561032b57600080fd5b5060cb5461033f906001600160a01b031681565b6040516001600160a01b03909116815260200161023f565b34801561036357600080fd5b506103776103723660046146a6565b61114e565b60405161023f929190614741565b34801561039157600080fd5b5061033f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c557600080fd5b5061033f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f957600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061033f565b34801561042c57600080fd5b5061033f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561046057600080fd5b5061048a61046f366004614353565b6001600160a01b0316600090815260ca602052604090205490565b60405190815260200161023f565b3480156104a457600080fd5b5061020c612082565b3480156104b957600080fd5b5061020c6104c8366004614353565b612096565b3480156104d957600080fd5b506033546001600160a01b031661033f565b3480156104f757600080fd5b506102336105063660046147d2565b612136565b34801561051757600080fd5b5061020c61052636600461481d565b61215b565b34801561053757600080fd5b5061020c610546366004614353565b612227565b34801561055757600080fd5b5061020c6105663660046148c8565b6122ee565b34801561057757600080fd5b5061020c610586366004614918565b612342565b34801561059757600080fd5b506105d36105a636600461433a565b60c9602052600090815260409020805460019091015463ffffffff821691640100000000900460ff169083565b6040805163ffffffff909416845291151560208401529082015260600161023f565b34801561060157600080fd5b506097546102339060ff1681565b34801561061b57600080fd5b5061020c61062a36600461493f565b612701565b61020c61063d36600461498a565b6127eb565b34801561064e57600080fd5b5061033f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561068257600080fd5b506102bf6129e3565b34801561069757600080fd5b5061020c6106a6366004614353565b612d8f565b3480156106b757600080fd5b5061048a6106c6366004614353565b60ca6020526000908152604090205481565b3480156106e457600080fd5b5061020c6106f3366004614353565b612e05565b34801561070457600080fd5b506102336107133660046149dc565b612e2f565b34801561072457600080fd5b5060655461033f906001600160a01b031681565b34801561074457600080fd5b5061020c610753366004614a59565b612ea4565b8060000361078157604051632097692160e11b8152600481018290526024015b60405180910390fd5b6001600160a01b038216600090815260ca6020526040812080548392906107a9908490614ae3565b90915550506001600160a01b038216600081815260ca60209081526040918290205491519182526000805160206151b4833981519152910160405180910390a25050565b6000806001600160a01b038316610805575084610831565b8583604051602001610818929190614af6565b6040516020818303038152906040528051906020012090505b600081815260c9602052604081205463ffffffff1690036108565760009150506108d8565b600081815260c96020526040902054640100000000900460ff1661087e5760009150506108d8565b60408051602081018c90529081018a9052606081018990526001600160601b03198816608082015260009060940160408051601f19818403018152919052805160208201209091506108d287898389613253565b93505050505b98975050505050505050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018787600001518860200151886000015160006002811061092c5761092c614b11565b60200201518951600160200201518a6020015160006002811061095157610951614b11565b60200201518b6020015160016002811061096d5761096d614b11565b602090810291909101518c518d8301516040516109ca9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c6109ed9190614b27565b9050610a60610a066109ff888461326b565b86906132fc565b610a0e613391565b610a56610a4785610a41604080518082018252600080825260209182015281518083019092526001825260029082015290565b9061326b565b610a508c613451565b906132fc565b886201d4c06134e0565b909890975095505050505050565b33600090815260ca6020526040902054811115610abf5733600081815260ca602052604090819020549051632e2a182f60e11b81526004810192909252602482018390526044820152606401610778565b33600090815260ca602052604081208054839290610ade908490614b49565b909155505033600081815260ca60209081526040918290205491519182526000805160206151b4833981519152910160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015610b42573d6000803e3d6000fd5b5050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90602401602060405180830381865afa158015610bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd69190614b5c565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa158015610c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c659190614b75565b90506001600160c01b0381161580610cff57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfa9190614b9e565b60ff16155b15610d1f5760408051600080825260208201909252905b50949350505050565b6000610d33826001600160c01b03166136fa565b90506000805b8251811015610dff577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f5848381518110610d8357610d83614b11565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610deb9190614b5c565b610df59083614ae3565b9150600101610d39565b506000816001600160401b03811115610e1a57610e1a614073565b604051908082528060200260200182016040528015610e43578160200160208202803683370190505b5090506000805b8451811015610fec576000858281518110610e6757610e67614b11565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f009190614b5c565b905060005b81811015610fe1576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015610f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9e9190614bd6565b60000151868681518110610fb457610fb4614b11565b6001600160a01b039092166020928302919091019091015284610fd681614c17565b955050600101610f05565b505050600101610e4a565b5090979650505050505050565b6110016137bc565b61100a81613816565b50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561106b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108f9190614c30565b6001600160a01b0316336001600160a01b03161461113b5760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a401610778565b61100a8161387f565b61100a8134610758565b604080518082019091526060808252602082015260008260400151516040518060400160405280600181526020016000815250511480156111aa57508260a0015151604051806040016040528060018152602001600081525051145b80156111d157508260c0015151604051806040016040528060018152602001600081525051145b80156111f857508260e0015151604051806040016040528060018152602001600081525051145b6112625760405162461bcd60e51b815260206004820152604160248201526000805160206151d483398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a401610778565b825151602084015151146112da5760405162461bcd60e51b8152602060048201526044602482018190526000805160206151d4833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a401610778565b4363ffffffff168463ffffffff16106113495760405162461bcd60e51b815260206004820152603c60248201526000805160206151d483398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b000000006064820152608401610778565b60408051808201825260008082526020808301829052835180850185526060808252818301528451808601865260018082529083019390935284518381528086019095529293919082810190803683370190505060208281019190915260408051808201825260018082526000919093015280518281528082019091529081602001602082028036833701905050815260408051808201909152606080825260208201528560200151516001600160401b0381111561140a5761140a614073565b604051908082528060200260200182016040528015611433578160200160208202803683370190505b5081526020860151516001600160401b0381111561145357611453614073565b60405190808252806020026020018201604052801561147c578160200160208202803683370190505b508160200181905250600061152860405180604001604052806001815260200160008152507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115239190614b9e565b6138c6565b905060005b8760200151518110156117b9576115728860200151828151811061155357611553614b11565b6020026020010151805160009081526020918201519091526040902090565b8360200151828151811061158857611588614b11565b602090810291909101015280156116485760208301516115a9600183614b49565b815181106115b9576115b9614b11565b602002602001015160001c836020015182815181106115da576115da614b11565b602002602001015160001c11611648576040805162461bcd60e51b81526020600482015260248101919091526000805160206151d483398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f727465646064820152608401610778565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec63518460200151838151811061168d5761168d614b11565b60200260200101518b8b6000015185815181106116ac576116ac614b11565b60200260200101516040518463ffffffff1660e01b81526004016116e99392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015611706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172a9190614b75565b6001600160c01b03168360000151828151811061174957611749614b11565b6020026020010181815250506117af6109ff611783848660000151858151811061177557611775614b11565b602002602001015116613959565b8a60200151848151811061179957611799614b11565b602002602001015161398490919063ffffffff16565b945060010161152d565b50506117c483613a67565b60975490935060ff166000816117db57600061185d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d9190614b5c565b905060005b604051806040016040528060018152602001600081525051811015611f535782156119ee578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c42604051806040016040528060018152602001600081525085815181106118e6576118e6614b11565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa15801561192a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194e9190614b5c565b6119589190614ae3565b116119ee5760405162461bcd60e51b815260206004820152606660248201526000805160206151d483398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c401610778565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac60405180604001604052806001815260200160008152508381518110611a4557611a45614b11565b602001015160f81c60f81b60f81c8c8c60a001518581518110611a6a57611a6a614b11565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611ac6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aea9190614c4d565b6001600160401b031916611b0d8a60400151838151811061155357611553614b11565b67ffffffffffffffff191614611ba95760405162461bcd60e51b815260206004820152606160248201526000805160206151d483398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c401610778565b611bd989604001518281518110611bc257611bc2614b11565b6020026020010151876132fc90919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c5660405180604001604052806001815260200160008152508381518110611c3257611c32614b11565b602001015160f81c60f81b60f81c8c8c60c001518581518110611c5757611c57614b11565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611cb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd79190614c78565b85602001518281518110611ced57611ced614b11565b6001600160601b03909216602092830291909101820152850151805182908110611d1957611d19614b11565b602002602001015185600001518281518110611d3757611d37614b11565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015611f4957611dc686600001518281518110611d8157611d81614b11565b602002602001015160405180604001604052806001815260200160008152508581518110611db157611db1614b11565b016020015160f81c60ff161c60019081161490565b15611f41577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae60405180604001604052806001815260200160008152508581518110611e2257611e22614b11565b602001015160f81c60f81b60f81c8e89602001518581518110611e4757611e47614b11565b60200260200101518f60e001518881518110611e6557611e65614b11565b60200260200101518781518110611e7e57611e7e614b11565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa158015611ee2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f069190614c78565b8751805185908110611f1a57611f1a614b11565b60200260200101818151611f2e9190614c95565b6001600160601b03169052506001909101905b600101611d5b565b5050600101611862565b505050600080611f6d8a868a606001518b608001516108e4565b9150915081611fde5760405162461bcd60e51b815260206004820152604360248201526000805160206151d483398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a401610778565b8061203f5760405162461bcd60e51b815260206004820152603960248201526000805160206151d483398151915260448201527f7265733a207369676e617475726520697320696e76616c6964000000000000006064820152608401610778565b5050600087826020015160405160200161205a929190614cbc565b60408051808303601f1901815291905280516020909101209299929850919650505050505050565b61208a6137bc565b6120946000613b02565b565b600054600290610100900460ff161580156120b8575060005460ff8083169116105b6120d45760405162461bcd60e51b815260040161077890614d04565b6000805461ffff191660ff8316176101001790556120f182612e05565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6000818484604051612149929190614d52565b60405180910390201490509392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146121a35760405162461bcd60e51b815260040161077890614d62565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d906121f19085908590600401614e20565b600060405180830381600087803b15801561220b57600080fd5b505af115801561221f573d6000803e3d6000fd5b505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461226f5760405162461bcd60e51b815260040161077890614d62565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da906024015b600060405180830381600087803b1580156122d357600080fd5b505af11580156122e7573d6000803e3d6000fd5b5050505050565b6122f66137bc565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb355906122b9908490600401614e6b565b60cb546001600160a01b031633146123825760cb54604051632cbe419560e01b81523360048201526001600160a01b039091166024820152604401610778565b60005a90506000848460405160200161239c929190614af6565b60408051601f198184030181529181528151602092830120600081815260c990935290822080549193509163ffffffff90911690036123f1576040516311cb69a760e11b815260048101839052602401610778565b8054640100000000900460ff161561241f57604051634e78d7f960e11b815260048101839052602401610778565b805464ff00000000191664010000000017815560018101546001600160a01b038616600090815260ca602052604090205410156124a25760018101546001600160a01b038616600081815260ca602052604090819020549051632e2a182f60e11b8152600481019290925260248201929092526044810191909152606401610778565b80546000906124b990849063ffffffff168761114e565b509050604360ff1681602001516000815181106124d8576124d8614b11565b60200260200101516124ea9190614e7e565b6001600160601b03166064826000015160008151811061250c5761250c614b11565b60200260200101516001600160601b03166125279190614ea1565b10156125ba576064816000015160008151811061254657612546614b11565b60200260200101516001600160601b03166125619190614ea1565b604360ff16826020015160008151811061257d5761257d614b11565b602002602001015161258f9190614e7e565b60405163530f5c4560e11b815260048101929092526001600160601b03166024820152604401610778565b6040516001600160a01b038716815287907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260003a5a6126069087614b49565b6126139062011170614ae3565b61261d9190614ea1565b9050826001015481111561265457600183015460405163437e283f60e11b8152600481019190915260248101829052604401610778565b6001600160a01b038716600090815260ca60205260408120805483929061267c908490614b49565b90915550506001600160a01b038716600081815260ca60209081526040918290205491519182526000805160206151b4833981519152910160405180910390a260cb546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156126f6573d6000803e3d6000fd5b505050505050505050565b600054610100900460ff16158080156127215750600054600160ff909116105b8061273b5750303b15801561273b575060005460ff166001145b6127575760405162461bcd60e51b815260040161077890614d04565b6000805460ff19166001179055801561277a576000805461ff0019166101001790555b6127848484613b54565b60cb80546001600160a01b0319166001600160a01b03841617905580156127e5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60008433604051602001612800929190614af6565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff161561284f57604051630c40bc4360e21b815260048101829052602401610778565b34156128ac5733600090815260ca602052604081208054349290612874908490614ae3565b909155505033600081815260ca60209081526040918290205491519182526000805160206151b4833981519152910160405180910390a25b33600090815260ca60205260409020548211156128fd5733600081815260ca602052604090819020549051632e2a182f60e11b81526004810192909252602482018490526044820152606401610778565b604080516060810182526000602080830182815263ffffffff43818116865285870189815288865260c99094529386902085518154935115156401000000000264ffffffffff1990941692169190911791909117815590516001909101559151909187917f130d3e81af62e03ed6fff5e3bb343695ec513892cfad24d286486745dcc6143791612993913391908a908a90614ee1565b60405180910390a2857f8801fc966deb2c8f563a103c35c9e80740585c292cd97518587e6e7927e6af5533438888886040516129d3959493929190614f1c565b60405180910390a2505050505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a699190614b9e565b60ff16905080600003612a8a57505060408051600081526020810190915290565b6000805b82811015612b3557604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612afd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b219190614b5c565b612b2b9083614ae3565b9150600101612a8e565b506000816001600160401b03811115612b5057612b50614073565b604051908082528060200260200182016040528015612b79578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c029190614b9e565b60ff16811015612d8557604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612c76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9a9190614b5c565b905060005b81811015612d7b576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015612d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d389190614bd6565b60000151858581518110612d4e57612d4e614b11565b6001600160a01b039092166020928302919091019091015283612d7081614c17565b945050600101612c9f565b5050600101612b80565b5090949350505050565b612d976137bc565b6001600160a01b038116612dfc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610778565b61100a81613b02565b612e0d6137bc565b60cb80546001600160a01b0319166001600160a01b0392909216919091179055565b6040516306045a9160e01b815260009030906306045a9190612e63908b908b908b908b908b908b908b908b90600401614f5f565b602060405180830381865afa158015612e80573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d89190614fc1565b6065546001600160a01b03163314612f395760405162461bcd60e51b815260206004820152604c60248201527f536572766963654d616e61676572426173652e6f6e6c7952657761726473496e60448201527f69746961746f723a2063616c6c6572206973206e6f742074686520726577617260648201526b32399034b734ba34b0ba37b960a11b608482015260a401610778565b60005b8181101561320457828282818110612f5657612f56614b11565b9050602002810190612f689190614fde565b612f79906040810190602001614353565b6001600160a01b03166323b872dd3330868686818110612f9b57612f9b614b11565b9050602002810190612fad9190614fde565b604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152013560448201526064016020604051808303816000875af1158015613004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130289190614fc1565b50600083838381811061303d5761303d614b11565b905060200281019061304f9190614fde565b613060906040810190602001614353565b604051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa1580156130ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f29190614b5c565b905083838381811061310657613106614b11565b90506020028101906131189190614fde565b613129906040810190602001614353565b6001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000008387878781811061316b5761316b614b11565b905060200281019061317d9190614fde565b6040013561318b9190614ae3565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156131d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fa9190614fc1565b5050600101612f3c565b5060405163fce36c7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fce36c7d906121f19085908590600401615064565b600083613261868585613bd1565b1495945050505050565b6040805180820190915260008082526020820152613287613f81565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa905080806132b657fe5b50806132f45760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610778565b505092915050565b6040805180820190915260008082526020820152613318613f9f565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808061335357fe5b50806132f45760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610778565b613399613fbd565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201909152600080825260208201526000808061348160008051602061519483398151915286614b27565b90505b61348d81613cce565b909350915060008051602061519483398151915282830983036134c6576040805180820190915290815260208101919091529392505050565b600080516020615194833981519152600182089050613484565b604080518082018252868152602080820186905282518084019093528683528201849052600091829190613512613fe2565b60005b60028110156136cd57600061352b826006614ea1565b905084826002811061353f5761353f614b11565b60200201515183613551836000614ae3565b600c811061356157613561614b11565b602002015284826002811061357857613578614b11565b6020020151602001518382600161358f9190614ae3565b600c811061359f5761359f614b11565b60200201528382600281106135b6576135b6614b11565b60200201515151836135c9836002614ae3565b600c81106135d9576135d9614b11565b60200201528382600281106135f0576135f0614b11565b6020020151516001602002015183613609836003614ae3565b600c811061361957613619614b11565b602002015283826002811061363057613630614b11565b60200201516020015160006002811061364b5761364b614b11565b60200201518361365c836004614ae3565b600c811061366c5761366c614b11565b602002015283826002811061368357613683614b11565b60200201516020015160016002811061369e5761369e614b11565b6020020151836136af836005614ae3565b600c81106136bf576136bf614b11565b602002015250600101613515565b506136d6614001565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606060008061370884613959565b61ffff166001600160401b0381111561372357613723614073565b6040519080825280601f01601f19166020018201604052801561374d576020820181803683370190505b5090506000805b825182108015613765575061010081105b15612d85576001811b9350858416156137ac578060f81b83838151811061378e5761378e614b11565b60200101906001600160f81b031916908160001a9053508160010191505b6137b581614c17565b9050613754565b6033546001600160a01b031633146120945760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610778565b606554604080516001600160a01b03928316815291831660208301527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b6000806138d284613d50565b9050808360ff166001901b116139505760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610778565b90505b92915050565b6000805b82156139535761396e600184614b49565b909216918061397c81615172565b91505061395d565b60408051808201909152600080825260208201526102008261ffff16106139e05760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b6044820152606401610778565b8161ffff166001036139f3575081613953565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610613a5c57600161ffff871660ff83161c81169003613a3f57613a3c84846132fc565b93505b613a4983846132fc565b92506201fffe600192831b169101613a0f565b509195945050505050565b60408051808201909152600080825260208201528151158015613a8c57506020820151155b15613aaa575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206151948339815191528460200151613add9190614b27565b613af590600080516020615194833981519152614b49565b905292915050565b919050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613bbf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610778565b613bc882613b02565b610b4281613816565b600060208451613be19190614b27565b15613c685760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a401610778565b8260205b85518111610d1657613c7f600285614b27565b600003613ca357816000528086015160205260406000209150600284049350613cbc565b8086015160005281602052604060002091506002840493505b613cc7602082614ae3565b9050613c6c565b60008080600080516020615194833981519152600360008051602061519483398151915286600080516020615194833981519152888909090890506000613d44827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615194833981519152613ed8565b91959194509092505050565b600061010082511115613dd95760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610778565b8151600003613dea57506000919050565b60008083600081518110613e0057613e00614b11565b0160200151600160f89190911c81901b92505b8451811015613ecf57848181518110613e2e57613e2e614b11565b0160200151600160f89190911c1b9150828211613ec35760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610778565b91811791600101613e13565b50909392505050565b600080613ee3614001565b613eeb61401f565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280613f2857fe5b5082613f765760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610778565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613fd061403d565b8152602001613fdd61403d565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356001600160601b031981168114613afd57600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156140ab576140ab614073565b60405290565b60405161010081016001600160401b03811182821017156140ab576140ab614073565b604051601f8201601f191681016001600160401b03811182821017156140fc576140fc614073565b604052919050565b60006001600160401b0383111561411d5761411d614073565b614130601f8401601f19166020016140d4565b905082815283838301111561414457600080fd5b828260208301376000602084830101529392505050565b600082601f83011261416c57600080fd5b61417b83833560208501614104565b9392505050565b6001600160a01b038116811461100a57600080fd5b600080600080600080600080610100898b0312156141b457600080fd5b8835975060208901359650604089013595506141d260608a0161405b565b94506080890135935060a08901356001600160401b038111156141f457600080fd5b6142008b828c0161415b565b93505060c0890135915060e089013561421881614182565b809150509295985092959890939650565b60006040828403121561423b57600080fd5b614243614089565b9050813581526020820135602082015292915050565b600082601f83011261426a57600080fd5b614272614089565b80604084018581111561428457600080fd5b845b8181101561429e578035845260209384019301614286565b509095945050505050565b6000608082840312156142bb57600080fd5b6142c3614089565b90506142cf8383614259565b81526142de8360408401614259565b602082015292915050565b600080600080610120858703121561430057600080fd5b843593506143118660208701614229565b925061432086606087016142a9565b915061432f8660e08701614229565b905092959194509250565b60006020828403121561434c57600080fd5b5035919050565b60006020828403121561436557600080fd5b813561395081614182565b6020808252825182820181905260009190848201906040850190845b818110156143b15783516001600160a01b03168352928401929184019160010161438c565b50909695505050505050565b801515811461100a57600080fd5b6000602082840312156143dd57600080fd5b8135613950816143bd565b803563ffffffff81168114613afd57600080fd5b60006001600160401b0382111561441557614415614073565b5060051b60200190565b600082601f83011261443057600080fd5b81356020614445614440836143fc565b6140d4565b8083825260208201915060208460051b87010193508684111561446757600080fd5b602086015b8481101561448a5761447d816143e8565b835291830191830161446c565b509695505050505050565b600082601f8301126144a657600080fd5b813560206144b6614440836143fc565b8083825260208201915060208460061b8701019350868411156144d857600080fd5b602086015b8481101561448a576144ef8882614229565b8352918301916040016144dd565b600082601f83011261450e57600080fd5b8135602061451e614440836143fc565b82815260059290921b8401810191818101908684111561453d57600080fd5b8286015b8481101561448a5780356001600160401b038111156145605760008081fd5b61456e8986838b010161441f565b845250918301918301614541565b6000610180828403121561458f57600080fd5b6145976140b1565b905081356001600160401b03808211156145b057600080fd5b6145bc8583860161441f565b835260208401359150808211156145d257600080fd5b6145de85838601614495565b602084015260408401359150808211156145f757600080fd5b61460385838601614495565b604084015261461585606086016142a9565b60608401526146278560e08601614229565b608084015261012084013591508082111561464157600080fd5b61464d8583860161441f565b60a084015261014084013591508082111561466757600080fd5b6146738583860161441f565b60c084015261016084013591508082111561468d57600080fd5b5061469a848285016144fd565b60e08301525092915050565b6000806000606084860312156146bb57600080fd5b833592506146cb602085016143e8565b915060408401356001600160401b038111156146e657600080fd5b6146f28682870161457c565b9150509250925092565b60008151808452602080850194506020840160005b838110156147365781516001600160601b031687529582019590820190600101614711565b509495945050505050565b604081526000835160408084015261475c60808401826146fc565b90506020850151603f1984830301606085015261477982826146fc565b925050508260208301529392505050565b60008083601f84011261479c57600080fd5b5081356001600160401b038111156147b357600080fd5b6020830191508360208285010111156147cb57600080fd5b9250929050565b6000806000604084860312156147e757600080fd5b83356001600160401b038111156147fd57600080fd5b6148098682870161478a565b909790965060209590950135949350505050565b6000806040838503121561483057600080fd5b823561483b81614182565b915060208301356001600160401b038082111561485757600080fd5b908401906060828703121561486b57600080fd5b60405160608101818110838211171561488657614886614073565b60405282358281111561489857600080fd5b6148a48882860161415b565b82525060208301356020820152604083013560408201528093505050509250929050565b6000602082840312156148da57600080fd5b81356001600160401b038111156148f057600080fd5b8201601f8101841361490157600080fd5b61491084823560208401614104565b949350505050565b60008060006060848603121561492d57600080fd5b8335925060208401356146cb81614182565b60008060006060848603121561495457600080fd5b833561495f81614182565b9250602084013561496f81614182565b9150604084013561497f81614182565b809150509250925092565b600080600080606085870312156149a057600080fd5b8435935060208501356001600160401b038111156149bd57600080fd5b6149c98782880161478a565b9598909750949560400135949350505050565b600080600080600080600060e0888a0312156149f757600080fd5b873596506020880135955060408801359450614a156060890161405b565b93506080880135925060a08801356001600160401b03811115614a3757600080fd5b614a438a828b0161415b565b92505060c0880135905092959891949750929550565b60008060208385031215614a6c57600080fd5b82356001600160401b0380821115614a8357600080fd5b818501915085601f830112614a9757600080fd5b813581811115614aa657600080fd5b8660208260051b8501011115614abb57600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561395357613953614acd565b91825260601b6001600160601b031916602082015260340190565b634e487b7160e01b600052603260045260246000fd5b600082614b4457634e487b7160e01b600052601260045260246000fd5b500690565b8181038181111561395357613953614acd565b600060208284031215614b6e57600080fd5b5051919050565b600060208284031215614b8757600080fd5b81516001600160c01b038116811461395057600080fd5b600060208284031215614bb057600080fd5b815160ff8116811461395057600080fd5b6001600160601b038116811461100a57600080fd5b600060408284031215614be857600080fd5b614bf0614089565b8251614bfb81614182565b81526020830151614c0b81614bc1565b60208201529392505050565b600060018201614c2957614c29614acd565b5060010190565b600060208284031215614c4257600080fd5b815161395081614182565b600060208284031215614c5f57600080fd5b815167ffffffffffffffff198116811461395057600080fd5b600060208284031215614c8a57600080fd5b815161395081614bc1565b6001600160601b03828116828216039080821115614cb557614cb5614acd565b5092915050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015614cf757815185529382019390820190600101614cdb565b5092979650505050505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b8183823760009101908152919050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015614e0057602081850181015186830182015201614de4565b506000602082860101526020601f19601f83011685010191505092915050565b60018060a01b0383168152604060208201526000825160606040840152614e4a60a0840182614dda565b90506020840151606084015260408401516080840152809150509392505050565b60208152600061417b6020830184614dda565b6001600160601b038181168382160280821691908281146132f4576132f4614acd565b808202811582820484141761395357613953614acd565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038516815263ffffffff84166020820152606060408201819052600090614f129083018486614eb8565b9695505050505050565b6001600160a01b038616815263ffffffff85166020820152608060408201819052600090614f4d9083018587614eb8565b90508260608301529695505050505050565b60006101008a83528960208401528860408401526001600160601b0319881660608401528660808401528060a0840152614f9b81840187614dda565b60c084019590955250506001600160a01b039190911660e0909101529695505050505050565b600060208284031215614fd357600080fd5b8151613950816143bd565b60008235609e19833603018112614ff457600080fd5b9190910192915050565b8035613afd81614182565b8183526000602080850194508260005b8581101561473657813561502c81614182565b6001600160a01b031687528183013561504481614bc1565b6001600160601b0316878401526040968701969190910190600101615019565b60208082528181018390526000906040808401600586901b8501820187855b8881101561516457878303603f190184528135368b9003609e190181126150a957600080fd5b8a0160a0813536839003601e190181126150c257600080fd5b820188810190356001600160401b038111156150dd57600080fd5b8060061b36038213156150ef57600080fd5b8287526150ff8388018284615009565b9250505061510e888301614ffe565b6001600160a01b031688860152818701358786015260606151308184016143e8565b63ffffffff169086015260806151478382016143e8565b63ffffffff16950194909452509285019290850190600101615083565b509098975050505050505050565b600061ffff80831681810361518957615189614acd565b600101939250505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0424c535369676e6174757265436865636b65722e636865636b5369676e617475a26469706673582212207bebe605db37bc08c9e9e45bfd6ec5d1c229f929c7f0eec3285c426ff557481a64736f6c63430008180033","sourceMap":"847:9633:116:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10074:40;10092:10;10104:9;10074:17;:40::i;:::-;847:9633;;;;;6944:1282;;;;;;;;;;-1:-1:-1;6944:1282:116;;;;;:::i;:::-;;:::i;:::-;;;2954:14:119;;2947:22;2929:41;;2917:2;2902:18;6944:1282:116;;;;;;;;14547:1081:67;;;;;;;;;;-1:-1:-1;14547:1081:67;;;;;:::i;:::-;;:::i;:::-;;;;4804:14:119;;4797:22;4779:41;;4863:14;;4856:22;4851:2;4836:18;;4829:50;4752:18;14547:1081:67;4617:268:119;9068:437:116;;;;;;;;;;-1:-1:-1;9068:437:116;;;;;:::i;:::-;;:::i;7697:1470:73:-;;;;;;;;;;-1:-1:-1;7697:1470:73;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5599:135::-;;;;;;;;;;-1:-1:-1;5599:135:73;;;;;:::i;:::-;;:::i;2232:123:67:-;;;;;;;;;;-1:-1:-1;2232:123:67;;;;;:::i;:::-;;:::i;9632:114:116:-;;;;;;:::i;:::-;;:::i;481:32:117:-;;;;;;;;;;-1:-1:-1;481:32:117;;;;-1:-1:-1;;;;;481:32:117;;;;;;-1:-1:-1;;;;;6523:32:119;;;6505:51;;6493:2;6478:18;481:32:117;6359:203:119;4387:9678:67;;;;;;;;;;-1:-1:-1;4387:9678:67;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;1183:47::-;;;;;;;;;;;;;;;1132:45;;;;;;;;;;;;;;;9235:111:73;;;;;;;;;;-1:-1:-1;9325:13:73;9235:111;;1069:57:67;;;;;;;;;;;;;;;9511:115:116;;;;;;;;;;-1:-1:-1;9511:115:116;;;;;:::i;:::-;-1:-1:-1;;;;;9594:25:116;9568:7;9594:25;;;:16;:25;;;;;;;9511:115;;;;13412:25:119;;;13400:2;13385:18;9511:115:116;13266:177:119;2071:101:39;;;;;;;;;;;;;:::i;2218:146:116:-;;;;;;;;;;-1:-1:-1;2218:146:116;;;;;:::i;:::-;;:::i;1441:85:39:-;;;;;;;;;;-1:-1:-1;1513:6:39;;-1:-1:-1;;;;;1513:6:39;1441:85;;10127:171:116;;;;;;;;;;-1:-1:-1;10127:171:116;;;;;:::i;:::-;;:::i;4797:260:73:-;;;;;;;;;;-1:-1:-1;4797:260:73;;;;;:::i;:::-;;:::i;5262:158::-;;;;;;;;;;-1:-1:-1;5262:158:73;;;;;:::i;:::-;;:::i;2721:148::-;;;;;;;;;;-1:-1:-1;2721:148:73;;;;;:::i;:::-;;:::i;3954:2984:116:-;;;;;;;;;;-1:-1:-1;3954:2984:116;;;;;:::i;:::-;;:::i;284:50:117:-;;;;;;;;;;-1:-1:-1;284:50:117;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16870:10:119;16858:23;;;16840:42;;16925:14;;16918:22;16913:2;16898:18;;16891:50;16957:18;;;16950:34;16828:2;16813:18;284:50:117;16646:344:119;1421:32:67;;;;;;;;;;-1:-1:-1;1421:32:67;;;;;;;;1691:338:116;;;;;;;;;;-1:-1:-1;1691:338:116;;;;;:::i;:::-;;:::i;2370:1578::-;;;;;;:::i;:::-;;:::i;1236:46:67:-;;;;;;;;;;;;;;;6262:951:73;;;;;;;;;;;;;:::i;2321:198:39:-;;;;;;;;;;-1:-1:-1;2321:198:39;;;;;:::i;:::-;;:::i;423:51:117:-;;;;;;;;;;-1:-1:-1;423:51:117;;;;;:::i;:::-;;;;;;;;;;;;;;8939:123:116;;;;;;;;;;-1:-1:-1;8939:123:116;;;;;:::i;:::-;;:::i;8290:643::-;;;;;;;;;;-1:-1:-1;8290:643:116;;;;;:::i;:::-;;:::i;1212:31:74:-;;;;;;;;;;-1:-1:-1;1212:31:74;;;;-1:-1:-1;;;;;1212:31:74;;;3631:872:73;;;;;;;;;;-1:-1:-1;3631:872:73;;;;;:::i;:::-;;:::i;9752:279:116:-;9835:6;9845:1;9835:11;9831:77;;9869:28;;-1:-1:-1;;;9869:28:116;;;;;13412:25:119;;;13385:18;;9869:28:116;;;;;;;;9831:77;-1:-1:-1;;;;;9917:25:116;;;;;;:16;:25;;;;;:35;;9946:6;;9917:25;:35;;9946:6;;9917:35;:::i;:::-;;;;-1:-1:-1;;;;;;;9967:57:116;;9998:25;;;;:16;:25;;;;;;;;;;9967:57;;13412:25:119;;;-1:-1:-1;;;;;;;;;;;9967:57:116;13385:18:119;9967:57:116;;;;;;;9752:279;;:::o;6944:1282::-;7298:4;;-1:-1:-1;;;;;7351:27:116;;7347:229;;-1:-1:-1;7412:15:116;7347:229;;;7520:15;7537:13;7503:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7476:89;;;;;;7458:107;;7347:229;7590:29;;;;:12;:29;;;;;:46;;;:51;;7586:94;;7664:5;7657:12;;;;;7586:94;7695:29;;;;:12;:29;;;;;:39;;;;;;7690:83;;7757:5;7750:12;;;;;7690:83;7803:163;;;;;;20489:19:119;;;20524:12;;;20517:28;;;20561:12;;;20554:28;;;-1:-1:-1;;;;;;20612:44:119;;20598:12;;;20591:66;7783:17:116;;20673:13:119;;7803:163:116;;;-1:-1:-1;;7803:163:116;;;;;;;;;7998:15;;7803:163;7998:15;;;7803:163;;-1:-1:-1;8043:176:116;8089:11;8118:15;7998;8179:26;8043:28;:176::i;:::-;8024:195;;;;;6944:1282;;;;;;;;;;;:::o;14547:1081:67:-;14745:22;14769;14878:13;2037:77:88;14980:7:67;15009:3;:5;;;15036:3;:5;;;15063;:7;;;15071:1;15063:10;;;;;;;:::i;:::-;;;;;15095:7;;15103:1;15095:10;;;;15127:5;:7;;;15135:1;15127:10;;;;;;;:::i;:::-;;;;;15159:5;:7;;;15167:1;15159:10;;;;;;;:::i;:::-;;;;;;;;;;15191:7;;15220;;;;14942:303;;;;;;;;;;;21182:19:119;;;21226:2;21217:12;;21210:28;;;;21263:2;21254:12;;21247:28;;;;21300:2;21291:12;;21284:28;;;;21337:3;21328:13;;21321:29;;;;21375:3;21366:13;;21359:29;21413:3;21404:13;;21397:29;21451:3;21442:13;;21435:29;21489:3;21480:13;;21473:29;21527:3;21518:13;;20829:708;14942:303:67;;;;;;;;;;;;;14915:344;;;;;;14894:375;;:394;;;;:::i;:::-;14878:410;-1:-1:-1;15371:250:67;15402:33;15413:21;:3;14878:410;15413:14;:21::i;:::-;15402:5;;:10;:33::i;:::-;15449:22;:20;:22::i;:::-;15485:67;15514:37;15545:5;15514:19;-1:-1:-1;;;;;;;;;;;;;;;;;2392:13:88;;;;;;;;2400:1;2392:13;;2403:1;2392:13;;;;;2313:99;15514:19:67;:30;;:37::i;:::-;15485:23;15500:7;15485:14;:23::i;:::-;:28;;:67::i;:::-;15566:5;1055:7;15371:17;:250::i;:::-;15330:291;;;;-1:-1:-1;14547:1081:67;-1:-1:-1;;;;;;14547:1081:67:o;9068:437:116:-;9142:10;9125:28;;;;:16;:28;;;;;;:37;-1:-1:-1;9121:204:116;;;9220:10;9272:28;;;;:16;:28;;;;;;;;9185:129;;-1:-1:-1;;;9185:129:116;;;;;22090:51:119;;;;22157:18;;;22150:34;;;22200:18;;;22193:34;22063:18;;9185:129:116;21888:345:119;9121:204:116;9352:10;9335:28;;;;:16;:28;;;;;:38;;9367:6;;9335:28;:38;;9367:6;;9335:38;:::i;:::-;;;;-1:-1:-1;;9410:10:116;9422:28;;;;:16;:28;;;;;;;;;;9388:63;;13412:25:119;;;-1:-1:-1;;;;;;;;;;;9388:63:116;13385:18:119;9388:63:116;;;;;;;9462:36;;9470:10;;9462:36;;;;;9491:6;;9462:36;;;;9491:6;9470:10;9462:36;;;;;;;;;;;;;;;;;;;;;9068:437;:::o;7697:1470:73:-;7854:44;;-1:-1:-1;;;7854:44:73;;-1:-1:-1;;;;;6523:32:119;;;7854:44:73;;;6505:51:119;7801:16:73;;7833:18;;7854:20;:34;;;;6478:18:119;;7854:44:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7933:55;;-1:-1:-1;;;7933:55:73;;;;;13412:25:119;;;7833:65:73;;-1:-1:-1;7908:22:73;;-1:-1:-1;;;;;7933:20:73;:43;;;;13385:18:119;;7933:55:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7908:80;-1:-1:-1;;;;;;8003:19:73;;;;:62;;;8026:20;-1:-1:-1;;;;;8026:32:73;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;8003:62;7999:116;;;8088:16;;;8102:1;8088:16;;;;;;;;;;;-1:-1:-1;8081:23:73;7697:1470;-1:-1:-1;;;;7697:1470:73:o;7999:116::-;8196:36;8235:46;8266:14;-1:-1:-1;;;;;8235:46:73;:30;:46::i;:::-;8196:85;-1:-1:-1;8291:21:73;;8322:173;8346:23;:30;8342:1;:34;8322:173;;;8414:14;-1:-1:-1;;;;;8414:35:73;;8456:23;8480:1;8456:26;;;;;;;;:::i;:::-;;;;;8414:70;;-1:-1:-1;;;;;;8414:70:73;;;;;;;8456:26;;;;;8414:70;;;23457:36:119;23430:18;;8414:70:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8397:87;;;;:::i;:::-;;-1:-1:-1;8378:3:73;;8322:173;;;;8566:35;8618:13;-1:-1:-1;;;;;8604:28:73;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8604:28:73;;8566:66;;8642:13;8674:9;8669:457;8693:23;:30;8689:1;:34;8669:457;;;8744:12;8765:23;8789:1;8765:26;;;;;;;;:::i;:::-;;;;;8837:43;;-1:-1:-1;;;8837:43:73;;8765:26;;;;;8837:43;;;23457:36:119;;;8765:26:73;-1:-1:-1;;;;;;;;8837:14:73;:35;;;;23430:18:119;;8837:43:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8806:74;;8899:9;8894:222;8918:20;8914:1;:24;8894:222;;;9019:47;;-1:-1:-1;;;9019:47:73;;23893:4:119;23881:17;;9019:47:73;;;23863:36:119;23915:18;;;23908:34;;;9019:14:73;-1:-1:-1;;;;;9019:36:73;;;;23836:18:119;;9019:47:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;8963:18;8982:5;8963:25;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8963:113:73;;;:25;;;;;;;;;;;:113;9094:7;;;;:::i;:::-;;-1:-1:-1;;8940:3:73;;8894:222;;;-1:-1:-1;;;8725:3:73;;8669:457;;;-1:-1:-1;9142:18:73;;7697:1470;-1:-1:-1;;;;;;;7697:1470:73:o;5599:135::-;1334:13:39;:11;:13::i;:::-;5686:41:73::1;5707:19;5686:20;:41::i;:::-;5599:135:::0;:::o;2232:123:67:-;1537:19;-1:-1:-1;;;;;1537:25:67;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1523:41:67;:10;-1:-1:-1;;;;;1523:41:67;;1502:180;;;;-1:-1:-1;;;1502:180:67;;25191:2:119;1502:180:67;;;25173:21:119;25230:2;25210:18;;;25203:30;25269:34;25249:18;;;25242:62;25340:34;25320:18;;;25313:62;25412:30;25391:19;;;25384:59;25460:19;;1502:180:67;24989:496:119;1502:180:67;2317:31:::1;2342:5;2317:24;:31::i;9632:114:116:-:0;9702:37;9720:7;9729:9;9702:17;:37::i;4387:9678:67:-;-1:-1:-1;;;;;;;;;;;;;;;;;4578:7:67;4651:6;:17;;;:24;4619:21;;;;;;;;;;;;;;;;;:28;:56;4618:142;;;;;4729:6;:23;;;:30;4697:21;;;;;;;;;;;;;;;;;:28;:62;4618:142;:227;;;;;4813:6;:24;;;:31;4781:21;;;;;;;;;;;;;;;;;:28;:63;4618:227;:316;;;;;4898:6;:28;;;:35;4866:21;;;;;;;;;;;;;;;;;:28;:67;4618:316;4597:428;;;;-1:-1:-1;;;4597:428:67;;25692:2:119;4597:428:67;;;25674:21:119;25731:2;25711:18;;;25704:30;-1:-1:-1;;;;;;;;;;;25750:18:119;;;25743:62;25841:34;25821:18;;;25814:62;-1:-1:-1;;;25892:19:119;;;25885:32;25934:19;;4597:428:67;25490:469:119;4597:428:67;5107:35;;:42;5057:23;;;;:30;:92;5036:207;;;;-1:-1:-1;;;5036:207:67;;26166:2:119;5036:207:67;;;26148:21:119;26205:2;26185:18;;;26178:30;;;-1:-1:-1;;;;;;;;;;;26224:18:119;;;26217:62;26315:34;26295:18;;;26288:62;-1:-1:-1;;;26366:19:119;;;26359:35;26411:19;;5036:207:67;25964:472:119;5036:207:67;5305:12;5275:43;;:20;:43;;;5254:150;;;;-1:-1:-1;;;5254:150:67;;26643:2:119;5254:150:67;;;26625:21:119;26682:2;26662:18;;;26655:30;-1:-1:-1;;;;;;;;;;;26701:18:119;;;26694:62;26792:30;26772:18;;;26765:58;26840:19;;5254:150:67;26441:424:119;5254:150:67;5921:19;;;;;;;;-1:-1:-1;5921:19:67;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;6277:21:67;;;;;;;;;;;;;;;;;;6264:42;;;;;;;;;;;5921:19;;6264:42;6277:21;6264:42;;;;5921:19;6264:42;;;;;-1:-1:-1;;6230:31:67;;;;:76;;;;6364:21;;;;;;;;;;;;-1:-1:-1;6364:21:67;;;;;6351:42;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6316:77:67;;-1:-1:-1;;;;;;;;;;;;;;;;;6499:6:67;:23;;;:30;-1:-1:-1;;;;;6472:67:67;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6472:67:67;-1:-1:-1;6445:94:67;;6589:23;;;;:30;-1:-1:-1;;;;;6575:45:67;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6575:45:67;;6549:10;:23;;:71;;;;6799:27;6829:141;6884:21;;;;;;;;;;;;;;;;;6923:19;-1:-1:-1;;;;;6923:31:67;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6829:37;:141::i;:::-;6799:171;;6990:9;6985:1728;7009:6;:23;;;:30;7005:1;:34;6985:1728;;;7301:82;:6;:44;;;7346:1;7301:47;;;;;;;;:::i;:::-;;;;;;;10534:9:88;;10473:16;10524:20;;;10580:4;10576:13;;;10570:20;10557:34;;;10629:4;10616:18;;;10404:246;7301:82:67;7272:10;:23;;;7296:1;7272:26;;;;;;;;:::i;:::-;;;;;;;;;;:111;7405:6;;7401:305;;7542:23;;;;7566:5;7570:1;7566;:5;:::i;:::-;7542:30;;;;;;;;:::i;:::-;;;;;;;7534:39;;7476:10;:23;;;7500:1;7476:26;;;;;;;;:::i;:::-;;;;;;;7468:35;;:105;7435:252;;;;;-1:-1:-1;;;7435:252:67;;27072:2:119;7435:252:67;;;27054:21:119;27091:18;;;27084:30;;;;-1:-1:-1;;;;;;;;;;;27130:18:119;;;27123:62;27221:34;27201:18;;;27194:62;27273:19;;7435:252:67;26870:428:119;7435:252:67;7846:19;-1:-1:-1;;;;;7846:76:67;;7961:10;:23;;;7985:1;7961:26;;;;;;;;:::i;:::-;;;;;;;8026:20;8079:6;:35;;;8115:1;8079:38;;;;;;;;:::i;:::-;;;;;;;7846:294;;;;;;;;;;;;;;;;27502:25:119;;;27546:10;27592:15;;;27587:2;27572:18;;27565:43;27644:15;27639:2;27624:18;;27617:43;27490:2;27475:18;;27303:363;7846:294:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7816:324:67;:10;:24;;;7841:1;7816:27;;;;;;;;:::i;:::-;;;;;;:324;;;;;8431:267;8461:219;8529:129;8613:19;8583:10;:24;;;8608:1;8583:27;;;;;;;;:::i;:::-;;;;;;;:49;8529:24;:129::i;:::-;8461:6;:23;;;8485:1;8461:26;;;;;;;;:::i;:::-;;;;;;;:42;;:219;;;;:::i;8431:267::-;8425:273;-1:-1:-1;7041:3:67;;6985:1728;;;;6631:2092;8996:12;:3;:10;:12::i;:::-;9340:20;;8990:18;;-1:-1:-1;9340:20:67;;9311:26;9340:20;9406:97;;9502:1;9406:97;;;9446:10;-1:-1:-1;;;;;9446:35:67;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9374:129;;9523:9;9518:3499;9542:21;;;;;;;;;;;;;;;;;:28;9538:1;:32;9518:3499;;;9754:21;9750:486;;;10045:20;9832:233;;9993:21;9832:19;-1:-1:-1;;;;;9832:43:67;;9911:21;;;;;;;;;;;;;;;;;9933:1;9911:24;;;;;;;;:::i;:::-;;;;;9832:130;;-1:-1:-1;;;;;;9832:130:67;;;;;;;9911:24;;;;;9832:130;;;23457:36:119;23430:18;;9832:130:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:182;;;;:::i;:::-;:233;9799:418;;;;-1:-1:-1;;;9799:418:67;;27873:2:119;9799:418:67;;;27855:21:119;27912:3;27892:18;;;27885:31;-1:-1:-1;;;;;;;;;;;27932:18:119;;;27925:62;28023:34;28003:18;;;27996:62;28095:34;28074:19;;;28067:63;-1:-1:-1;;;28146:19:119;;;28139:37;28193:19;;9799:418:67;27671:547:119;9799:418:67;10504:14;-1:-1:-1;;;;;10504:46:67;;10601:21;;;;;;;;;;;;;;;;;10623:1;10601:24;;;;;;;;:::i;:::-;;;;;;;;;10595:31;;10669:20;10726:6;:23;;;10750:1;10726:26;;;;;;;;:::i;:::-;;;;;;;;;;;10504:275;;-1:-1:-1;;;;;;10504:275:67;;;;;;;28448:4:119;28436:17;;;10504:275:67;;;28418:36:119;10504:275:67;28519:15:119;;;28499:18;;;28492:43;28571:15;28551:18;;;28544:43;28391:18;;10504:275:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10433:346:67;;10441:34;:6;:17;;;10459:1;10441:20;;;;;;;;:::i;:34::-;-1:-1:-1;;10433:346:67;;10404:514;;;;-1:-1:-1;;;10404:514:67;;29099:2:119;10404:514:67;;;29081:21:119;29138:2;29118:18;;;29111:30;-1:-1:-1;;;;;;;;;;;29157:18:119;;;29150:62;29248:34;29228:18;;;29221:62;29320:34;29299:19;;;29292:63;-1:-1:-1;;;29371:19:119;;;29364:32;29413:19;;10404:514:67;28897:541:119;10404:514:67;10942:30;10951:6;:17;;;10969:1;10951:20;;;;;;;;:::i;:::-;;;;;;;10942:3;:8;;:30;;;;:::i;:::-;10936:36;;11126:13;-1:-1:-1;;;;;11126:70:67;;11243:21;;;;;;;;;;;;;;;;;11265:1;11243:24;;;;;;;;:::i;:::-;;;;;;;;;11237:31;;11307:20;11360:6;:24;;;11385:1;11360:27;;;;;;;;:::i;:::-;;;;;;;;;;;11126:284;;-1:-1:-1;;;;;;11126:284:67;;;;;;;28448:4:119;28436:17;;;11126:284:67;;;28418:36:119;11126:284:67;28519:15:119;;;28499:18;;;28492:43;28571:15;28551:18;;;28544:43;28391:18;;11126:284:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11089:11;:31;;;11121:1;11089:34;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11089:321:67;;;:34;;;;;;;;;;:321;11466:52;;;:55;;11519:1;;11466:55;;;;;;:::i;:::-;;;;;;;11428:11;:32;;;11461:1;11428:35;;;;;;;;:::i;:::-;;;;;;:93;-1:-1:-1;;;;;11428:93:67;;;-1:-1:-1;;;;;11428:93:67;;;;;11608:31;11891:9;11886:1117;11910:6;:23;;;:30;11906:1;:34;11886:1117;;;12107:161;12154:10;:24;;;12179:1;12154:27;;;;;;;;:::i;:::-;;;;;;;12217:21;;;;;;;;;;;;;;;;;12239:1;12217:24;;;;;;;;:::i;:::-;;;;;;;7387:13:89;;;7404:1;7386:19;;;7380:26;;7292:121;12107:161:67;12078:907;;;12356:13;-1:-1:-1;;;;;12356:72:67;;12483:21;;;;;;;;;;;;;;;;;12505:1;12483:24;;;;;;;;:::i;:::-;;;;;;;;;12477:31;;12555:20;12621:10;:23;;;12645:1;12621:26;;;;;;;;:::i;:::-;;;;;;;12688:6;:28;;;12717:1;12688:31;;;;;;;;:::i;:::-;;;;;;;12757:23;12688:126;;;;;;;;:::i;:::-;;;;;;;;;;;12356:489;;-1:-1:-1;;;;;;12356:489:67;;;;;;;29951:4:119;29939:17;;;12356:489:67;;;29921:36:119;12356:489:67;30022:15:119;;;30002:18;;;29995:43;30054:18;;;30047:34;;;;30117:15;30097:18;;;30090:43;29893:19;;12356:489:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12317:32;;:35;;12350:1;;12317:35;;;;;;:::i;:::-;;;;;;:528;;;;;;;:::i;:::-;-1:-1:-1;;;;;12317:528:67;;;-1:-1:-1;12911:25:67;;;;;12078:907;11942:3;;11886:1117;;;-1:-1:-1;;9572:3:67;;9518:3499;;;;9297:3730;;13104:22;13144:21;13182:170;13234:7;13263:3;13288:6;:12;;;13322:6;:12;;;13182:30;:170::i;:::-;13086:266;;;;13391:17;13366:143;;;;-1:-1:-1;;;13366:143:67;;30542:2:119;13366:143:67;;;30524:21:119;30581:2;30561:18;;;30554:30;-1:-1:-1;;;;;;;;;;;30600:18:119;;;30593:62;30691:34;30671:18;;;30664:62;-1:-1:-1;;;30742:19:119;;;30735:34;30786:19;;13366:143:67;30340:471:119;13366:143:67;13548:16;13523:132;;;;-1:-1:-1;;;13523:132:67;;31018:2:119;13523:132:67;;;31000:21:119;31057:2;31037:18;;;31030:30;-1:-1:-1;;;;;;;;;;;31076:18:119;;;31069:62;31167:27;31147:18;;;31140:55;31212:19;;13523:132:67;30816:421:119;13523:132:67;13036:630;;13740:27;13810:20;13832:10;:23;;;13793:63;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;13793:63:67;;;;;;13770:96;;13793:63;13770:96;;;;14025:11;;13770:96;;-1:-1:-1;4387:9678:67;;-1:-1:-1;;;;;;;4387:9678:67:o;2071:101:39:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;:::-;2071:101::o:0;2218:146:116:-;4418:13:40;;2311:1:116;;4418:13:40;;;;;4417:14;:40;;;;-1:-1:-1;4435:12:40;;:22;;;;:12;;:22;4417:40;4409:99;;;;-1:-1:-1;;;4409:99:40;;;;;;;:::i;:::-;4518:12;:22;;-1:-1:-1;;4550:20:40;4518:22;;;4550:20;4518:22;4550:20;;;2324:33:116::1;2338:18:::0;2324:13:::1;:33::i;:::-;4607:5:40::0;4591:21;;-1:-1:-1;;4591:21:40;;;4627:20;;23487:4:119;23475:17;;23457:36;;4627:20:40;;23445:2:119;23430:18;4627:20:40;;;;;;;2218:146:116;;:::o;10127:171::-;10238:4;10287;10271:11;;10261:22;;;;;;;:::i;:::-;;;;;;;;:30;10254:37;;10127:171;;;;;:::o;4797:260:73:-;1358:10;-1:-1:-1;;;;;1380:20:73;1358:43;;1337:172;;;;-1:-1:-1;;;1337:172:73;;;;;;;:::i;:::-;4986:64:::1;::::0;-1:-1:-1;;;4986:64:73;;-1:-1:-1;;;;;4986:13:73::1;:35;::::0;::::1;::::0;:64:::1;::::0;5022:8;;5032:17;;4986:64:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4797:260:::0;;:::o;5262:158::-;1358:10;-1:-1:-1;;;;;1380:20:73;1358:43;;1337:172;;;;-1:-1:-1;;;1337:172:73;;;;;;;:::i;:::-;5364:49:::1;::::0;-1:-1:-1;;;5364:49:73;;-1:-1:-1;;;;;6523:32:119;;;5364:49:73::1;::::0;::::1;6505:51:119::0;5364:13:73::1;:39;::::0;::::1;::::0;6478:18:119;;5364:49:73::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;5262:158:::0;:::o;2721:148::-;1334:13:39;:11;:13::i;:::-;2814:48:73::1;::::0;-1:-1:-1;;;2814:48:73;;-1:-1:-1;;;;;2814:13:73::1;:34;::::0;::::1;::::0;:48:::1;::::0;2849:12;;2814:48:::1;;;:::i;3954:2984:116:-:0;10358:17;;-1:-1:-1;;;;;10358:17:116;10344:10;:31;10340:121;;10432:17;;10398:52;;-1:-1:-1;;;10398:52:116;;10420:10;10398:52;;;34567:34:119;-1:-1:-1;;;;;10432:17:116;;;34617:18:119;;;34610:43;34502:18;;10398:52:116;34355:304:119;10340:121:116;4247:22:::1;4272:9;4247:34;;4292:27;4362:15;4379:13;4345:48;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;4345:48:116;;::::1;::::0;;;;;;4322:81;;4345:48:::1;4322:81:::0;;::::1;::::0;4414:31:::1;4448:33:::0;;;:12:::1;:33:::0;;;;;;4653:29;;4322:81;;-1:-1:-1;4448:33:116;4653:29:::1;::::0;;::::1;:34:::0;;4649:110:::1;;4710:38;::::0;-1:-1:-1;;;4710:38:116;;::::1;::::0;::::1;13412:25:119::0;;;13385:18;;4710:38:116::1;13266:177:119::0;4649:110:116::1;4821:22:::0;;;;::::1;;;4817:102;;;4866:42;::::0;-1:-1:-1;;;4866:42:116;;::::1;::::0;::::1;13412:25:119::0;;;13385:18;;4866:42:116::1;13266:177:119::0;4817:102:116::1;4928:29:::0;;-1:-1:-1;;4928:29:116::1;::::0;::::1;::::0;;4953:4:::1;5071:34:::0;::::1;::::0;-1:-1:-1;;;;;5037:31:116;::::1;4928:22;5037:31:::0;;;:16:::1;:31;::::0;;;;;:68:::1;5033:269;;;5194:34;::::0;::::1;::::0;-1:-1:-1;;;;;5246:31:116;::::1;;::::0;;;:16:::1;:31;::::0;;;;;;;5128:163;;-1:-1:-1;;;5128:163:116;;::::1;::::0;::::1;22090:51:119::0;;;;22157:18;;;22150:34;;;;22200:18;;;22193:34;;;;22063:18;;5128:163:116::1;21888:345:119::0;5033:269:116::1;5548:29:::0;;5438:42:::1;::::0;5486:142:::1;::::0;5515:19;;5548:29:::1;;5591:27:::0;5486:15:::1;:142::i;:::-;5437:191;;;1125:2;5821:86;;:17;:37;;;5859:1;5821:40;;;;;;;;:::i;:::-;;;;;;;:86;;;;:::i;:::-;-1:-1:-1::0;;;;;5741:166:116::1;1062:3;5741:17;:38;;;5780:1;5741:41;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;5741:65:116::1;;;;;:::i;:::-;:166;5724:473;;;1062:3;5979:17;:38;;;6018:1;5979:41;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;5979:85:116::1;;;;;:::i;:::-;1125:2;6082:90;;:17;:37;;;6120:1;6082:40;;;;;;;;:::i;:::-;;;;;;;:90;;;;:::i;:::-;5939:247;::::0;-1:-1:-1;;;5939:247:116;;::::1;::::0;::::1;35280:25:119::0;;;;-1:-1:-1;;;;;35341:39:119;35321:18;;;35314:67;35253:18;;5939:247:116::1;35107:280:119::0;5724:473:116::1;6212:45;::::0;-1:-1:-1;;;;;6523:32:119;;6505:51;;6226:15:116;;6212:45:::1;::::0;6493:2:119;6478:18;6212:45:116::1;;;;;;;6371:14;6428:11;6406:9;6389:26;::::0;:14;:26:::1;:::i;:::-;:35;::::0;6418:6:::1;6389:35;:::i;:::-;6388:51;;;;:::i;:::-;6371:68;;6463:12;:34;;;6454:6;:43;6450:192;;;6559:34;::::0;::::1;::::0;6520:111:::1;::::0;-1:-1:-1;;;6520:111:116;;::::1;::::0;::::1;35566:25:119::0;;;;35607:18;;;35600:34;;;35539:18;;6520:111:116::1;35392:248:119::0;6450:192:116::1;-1:-1:-1::0;;;;;6710:31:116;::::1;;::::0;;;:16:::1;:31;::::0;;;;:41;;6745:6;;6710:31;:41:::1;::::0;6745:6;;6710:41:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;6766:103:116;::::1;6828:31;::::0;;;:16:::1;:31;::::0;;;;;;;;;6766:103;;13412:25:119;;;-1:-1:-1;;;;;;;;;;;6766:103:116;13385:18:119;6766:103:116::1;;;;;;;6896:17;::::0;6888:43:::1;::::0;-1:-1:-1;;;;;6896:17:116;;::::1;::::0;6888:43;::::1;;;::::0;6924:6;;6896:17:::1;6888:43:::0;6896:17;6888:43;6924:6;6896:17;6888:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;4237:2701;;;;;3954:2984:::0;;;:::o;1691:338::-;3111:19:40;3134:13;;;;;;3133:14;;3179:34;;;;-1:-1:-1;3197:12:40;;3212:1;3197:12;;;;:16;3179:34;3178:108;;;-1:-1:-1;3258:4:40;1476:19:42;:23;;;3219:66:40;;-1:-1:-1;3268:12:40;;;;;:17;3219:66;3157:201;;;;-1:-1:-1;;;3157:201:40;;;;;;;:::i;:::-;3368:12;:16;;-1:-1:-1;;3368:16:40;3383:1;3368:16;;;3394:65;;;;3428:13;:20;;-1:-1:-1;;3428:20:40;;;;;3394:65;1848:59:116::1;1874:13;1889:17;1848:25;:59::i;:::-;1917:17;:38:::0;;-1:-1:-1;;;;;;1917:38:116::1;-1:-1:-1::0;;;;;1917:38:116;::::1;;::::0;;3479:99:40;;;;3529:5;3513:21;;-1:-1:-1;;3513:21:40;;;3553:14;;-1:-1:-1;23457:36:119;;3553:14:40;;23445:2:119;23430:18;3553:14:40;;;;;;;3479:99;3101:483;1691:338:116;;;:::o;2370:1578::-;2540:23;2606:15;2623:10;2589:45;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2589:45:116;;;;;;;;;2566:78;;2589:45;2566:78;;;;2659:29;;;;:12;:29;;;;;:46;2566:78;;-1:-1:-1;2659:46:116;;:51;2655:127;;2733:38;;-1:-1:-1;;;2733:38:116;;;;;13412:25:119;;;13385:18;;2733:38:116;13266:177:119;2655:127:116;2796:9;:13;2792:213;;2842:10;2825:28;;;;:16;:28;;;;;:41;;2857:9;;2825:28;:41;;2857:9;;2825:41;:::i;:::-;;;;-1:-1:-1;;2924:10:116;2952:28;;;;:16;:28;;;;;;;;;;2885:109;;13412:25:119;;;-1:-1:-1;;;;;;;;;;;2885:109:116;13385:18:119;2885:109:116;;;;;;;2792:213;3036:10;3019:28;;;;:16;:28;;;;;;:52;-1:-1:-1;3015:234:116;;;3129:10;3196:28;;;;:16;:28;;;;;;;;3094:144;;-1:-1:-1;;;3094:144:116;;;;;22090:51:119;;;;22157:18;;;22150:34;;;22200:18;;;22193:34;22063:18;;3094:144:116;21888:345:119;3015:234:116;-1:-1:-1;;;;;;;;;;;;;;;;3298:50:116;3335:12;3298:50;;;;;-1:-1:-1;;;3396:56:116;;;3463:29;;;:12;:29;;;;;;;:42;;;;;;;;;;-1:-1:-1;;3463:42:116;;;;;;;;;;;;;;;;;-1:-1:-1;3463:42:116;;;;3567:137;;-1:-1:-1;;3591:15:116;;3567:137;;;;3620:10;;3335:12;3678:16;;;;3567:137;:::i;:::-;;;;;;;;3793:15;3769:172;3822:10;3853:12;3880:16;;3910:21;3769:172;;;;;;;;;;:::i;:::-;;;;;;;;2530:1418;;2370:1578;;;;:::o;6262:951:73:-;6321:16;6349:19;6371:20;-1:-1:-1;;;;;6371:32:73;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6349:56;;;;6420:11;6435:1;6420:16;6416:70;;-1:-1:-1;;6459:16:73;;;6473:1;6459:16;;;;;;;;;6262:951::o;6416:70::-;6496:21;;6527:129;6551:11;6547:1;:15;6527:129;;;6600:45;;-1:-1:-1;;;6600:45:73;;23487:4:119;23475:17;;6600:45:73;;;23457:36:119;6600:14:73;-1:-1:-1;;;;;6600:35:73;;;;23430:18:119;;6600:45:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6583:62;;;;:::i;:::-;;-1:-1:-1;6564:3:73;;6527:129;;;;6666:35;6718:13;-1:-1:-1;;;;;6704:28:73;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6704:28:73;;6666:66;;6742:13;6774:9;6769:403;6793:20;-1:-1:-1;;;;;6793:32:73;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6789:38;;:1;:38;6769:403;;;6879:45;;-1:-1:-1;;;6879:45:73;;23487:4:119;23475:17;;6879:45:73;;;23457:36:119;6848:28:73;;6879:14;-1:-1:-1;;;;;6879:35:73;;;;23430:18:119;;6879:45:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6848:76;;6943:9;6938:224;6962:20;6958:1;:24;6938:224;;;7063:49;;-1:-1:-1;;;7063:49:73;;23893:4:119;23881:17;;7063:49:73;;;23863:36:119;23915:18;;;23908:34;;;7063:14:73;-1:-1:-1;;;;;7063:36:73;;;;23836:18:119;;7063:49:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;;7007:18;7026:5;7007:25;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7007:115:73;;;:25;;;;;;;;;;;:115;7140:7;;;;:::i;:::-;;-1:-1:-1;;6984:3:73;;6938:224;;;-1:-1:-1;;6829:3:73;;6769:403;;;-1:-1:-1;7188:18:73;;6262:951;-1:-1:-1;;;;6262:951:73:o;2321:198:39:-;1334:13;:11;:13::i;:::-;-1:-1:-1;;;;;2409:22:39;::::1;2401:73;;;::::0;-1:-1:-1;;;2401:73:39;;37261:2:119;2401:73:39::1;::::0;::::1;37243:21:119::0;37300:2;37280:18;;;37273:30;37339:34;37319:18;;;37312:62;-1:-1:-1;;;37390:18:119;;;37383:36;37436:19;;2401:73:39::1;37059:402:119::0;2401:73:39::1;2484:28;2503:8;2484:18;:28::i;8939:123:116:-:0;1334:13:39;:11;:13::i;:::-;9017:17:116::1;:38:::0;;-1:-1:-1;;;;;;9017:38:116::1;-1:-1:-1::0;;;;;9017:38:116;;;::::1;::::0;;;::::1;::::0;;8939:123::o;8290:643::-;8636:290;;-1:-1:-1;;;8636:290:116;;8613:4;;8636;;:25;;:290;;8675:15;;8704:18;;8736:30;;8780:18;;8812:15;;8841:11;;8866:26;;8613:4;;8636:290;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3631:872:73:-;1684:16;;-1:-1:-1;;;;;1684:16:73;1670:10;:30;1649:153;;;;-1:-1:-1;;;1649:153:73;;38727:2:119;1649:153:73;;;38709:21:119;38766:2;38746:18;;;38739:30;38805:34;38785:18;;;38778:62;38876:34;38856:18;;;38849:62;-1:-1:-1;;;38927:19:119;;;38920:43;38980:19;;1649:153:73;38525:480:119;1649:153:73;3815:9:::1;3810:610;3830:29:::0;;::::1;3810:610;;;4029:18;;4048:1;4029:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:27;::::0;;;;;::::1;;;:::i;:::-;-1:-1:-1::0;;;;;4029:40:73::1;;4070:10;4090:4;4097:18;;4116:1;4097:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:28;4029:97:::0;;-1:-1:-1;;;;;;4029:97:73::1;::::0;;;;;;-1:-1:-1;;;;;40023:15:119;;;4029:97:73::1;::::0;::::1;40005:34:119::0;40075:15;;;;40055:18;;;40048:43;4097:28:73::1;;40107:18:119::0;;;40100:34;39940:18;;4029:97:73::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4140:17;4176:18;;4195:1;4176:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:27;::::0;;;;;::::1;;;:::i;:::-;:82;::::0;-1:-1:-1;;;4176:82:73;;4222:4:::1;4176:82;::::0;::::1;34567:34:119::0;-1:-1:-1;;;;;4237:19:73::1;34637:15:119::0;;34617:18;;;34610:43;4176:37:73;;;::::1;::::0;::::1;::::0;34502:18:119;;4176:82:73::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4140:118;;4272:18;;4291:1;4272:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:27;::::0;;;;;::::1;;;:::i;:::-;-1:-1:-1::0;;;;;4272:35:73::1;;4333:19;4386:9;4355:18;;4374:1;4355:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:28;;;:40;;;;:::i;:::-;4272:137;::::0;-1:-1:-1;;;;;;4272:137:73::1;::::0;;;;;;-1:-1:-1;;;;;40337:32:119;;;4272:137:73::1;::::0;::::1;40319:51:119::0;40386:18;;;40379:34;40292:18;;4272:137:73::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;3861:3:73::1;;3810:610;;;-1:-1:-1::0;4430:66:73::1;::::0;-1:-1:-1;;;4430:66:73;;-1:-1:-1;;;;;4430:19:73::1;:46;::::0;::::1;::::0;:66:::1;::::0;4477:18;;;;4430:66:::1;;;:::i;1240:240:27:-:0;1395:4;1469;1418:47;1446:5;1453:4;1459:5;1418:27;:47::i;:::-;:55;;1240:240;-1:-1:-1;;;;;1240:240:27:o;7084:580:88:-;-1:-1:-1;;;;;;;;;;;;;;;;;7184:23:88;;:::i;:::-;7228:3;;7217:14;;:8;7252:3;;;;7241:8;;;:14;7265:8;;;;:12;;;-1:-1:-1;;7452:1:88;7446:4;7217:14;7436:1;7429:4;7422:5;7418:16;7407:53;7396:64;-1:-1:-1;7396:64:88;;7530:75;7557:48;7582:9;7530:75;;7632:7;7624:33;;;;-1:-1:-1;;;7624:33:88;;43612:2:119;7624:33:88;;;43594:21:119;43651:2;43631:18;;;43624:30;-1:-1:-1;;;43670:18:119;;;43663:43;43723:18;;7624:33:88;43410:337:119;7624:33:88;7174:490;;7084:580;;;;:::o;4823:615::-;-1:-1:-1;;;;;;;;;;;;;;;;;4926:23:88;;:::i;:::-;4970:4;;4959:15;;:8;4995:4;;;;4984:8;;;:15;5020:4;;5009:8;;;;:15;;;;5045:4;;;;5034:8;;;:15;-1:-1:-1;;5225:1:88;5219:4;4959:15;5209:1;5202:4;5195:5;5191:16;5180:53;5169:64;-1:-1:-1;5169:64:88;;5303:75;5330:48;5355:9;5303:75;;5406:7;5398:33;;;;-1:-1:-1;;;5398:33:88;;43954:2:119;5398:33:88;;;43936:21:119;43993:2;43973:18;;;43966:30;-1:-1:-1;;;44012:18:119;;;44005:43;44065:18;;5398:33:88;43752:337:119;4070:128:88;4119:14;;:::i;:::-;-1:-1:-1;4152:39:88;;;;;;;;3635:77;4152:39;;;;;;3752:77;4152:39;;;;;;;;;;;;;;3869:77;4152:39;;3986:77;4152:39;;;;;;;;;;;;;;;4070:128::o;11044:451::-;-1:-1:-1;;;;;;;;;;;;;;;;;11123:12:88;;;11185:24;-1:-1:-1;;;;;;;;;;;11193:2:88;11185:24;:::i;:::-;11173:36;;11220:239;11259:13;11270:1;11259:10;:13::i;:::-;11247:25;;-1:-1:-1;11247:25:88;-1:-1:-1;;;;;;;;;;;;11336:1:88;11333;11326:24;11318:4;:32;11314:92;;11378:13;;;;;;;;;;;;;;;;;;;;11044:451;-1:-1:-1;;;11044:451:88:o;11314:92::-;-1:-1:-1;;;;;;;;;;;11434:1:88;11431;11424:24;11420:28;;11220:239;;9189:1112;9397:31;;;;;;;;;;;;;;;;;;9438;;;;;;;;;;;;;;;;9375:4;;;;9397:31;9480:24;;:::i;:::-;9520:9;9515:302;9539:1;9535;:5;9515:302;;;9561:9;9573:5;:1;9577;9573:5;:::i;:::-;9561:17;;9607:2;9610:1;9607:5;;;;;;;:::i;:::-;;;;;:7;9592:5;9598;:1;9607:7;9598:5;:::i;:::-;9592:12;;;;;;;:::i;:::-;;;;:22;9643:2;9646:1;9643:5;;;;;;;:::i;:::-;;;;;:7;;;9628:5;9634:1;9638;9634:5;;;;:::i;:::-;9628:12;;;;;;;:::i;:::-;;;;:22;9679:2;9682:1;9679:5;;;;;;;:::i;:::-;;;;;:7;:10;9664:5;9670;:1;9674;9670:5;:::i;:::-;9664:12;;;;;;;:::i;:::-;;;;:25;9718:2;9721:1;9718:5;;;;;;;:::i;:::-;;;;;:7;9726:1;9718:10;;;;9703:5;9709;:1;9713;9709:5;:::i;:::-;9703:12;;;;;;;:::i;:::-;;;;:25;9757:2;9760:1;9757:5;;;;;;;:::i;:::-;;;;;:7;;;9765:1;9757:10;;;;;;;:::i;:::-;;;;;9742:5;9748;:1;9752;9748:5;:::i;:::-;9742:12;;;;;;;:::i;:::-;;;;:25;9796:2;9799:1;9796:5;;;;;;;:::i;:::-;;;;;:7;;;9804:1;9796:10;;;;;;;:::i;:::-;;;;;9781:5;9787;:1;9791;9787:5;:::i;:::-;9781:12;;;;;;;:::i;:::-;;;;:25;-1:-1:-1;9542:3:88;;9515:302;;;;9827:21;;:::i;:::-;9858:12;10032:4;10027:3;10012:13;10005:5;10002:1;9990:10;9979:58;10282:6;;9968:69;;10282:11;;;;-1:-1:-1;10265:29:88;;-1:-1:-1;;;;;;;;;;9189:1112:88:o;5465:1257:89:-;5532:12;5650:15;5728:23;5764:20;5777:6;5764:12;:20::i;:::-;5754:31;;-1:-1:-1;;;;;5754:31:89;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5754:31:89;;5728:57;;5841:18;6093:9;6088:601;6122:10;:17;6109:10;:30;6108:45;;;;;6149:3;6145:1;:7;6108:45;6088:601;;;6252:1;:6;;;-1:-1:-1;6339:16:89;;;:21;6335:344;;6524:1;6511:16;;6486:10;6497;6486:22;;;;;;;;:::i;:::-;;;;:41;-1:-1:-1;;;;;6486:41:89;;;;;;;;;6650:12;;;;;6335:344;6155:3;;;:::i;:::-;;;6088:601;;1599:130:39;1513:6;;-1:-1:-1;;;;;1513:6:39;929:10:43;1662:23:39;1654:68;;;;-1:-1:-1;;;1654:68:39;;44296:2:119;1654:68:39;;;44278:21:119;;;44315:18;;;44308:30;44374:34;44354:18;;;44347:62;44426:18;;1654:68:39;44094:356:119;5740:200:73;5847:16;;5823:62;;;-1:-1:-1;;;;;5847:16:73;;;34567:34:119;;34637:15;;;34632:2;34617:18;;34610:43;5823:62:73;;34502:18:119;5823:62:73;;;;;;;5895:16;:38;;-1:-1:-1;;;;;;5895:38:73;-1:-1:-1;;;;;5895:38:73;;;;;;;;;;5740:200::o;15634:148:67:-;15699:20;:28;;-1:-1:-1;;15699:28:67;;;;;;;;;;15742:33;;2929:41:119;;;15742:33:67;;2917:2:119;2902:18;15742:33:67;;;;;;;15634:148;:::o;3308:360:89:-;3419:7;3438:14;3455:44;3481:17;3455:25;:44::i;:::-;3438:61;;3541:6;3524:13;3519:18;;:1;:18;;3518:29;3510:127;;;;-1:-1:-1;;;3510:127:89;;44657:2:119;3510:127:89;;;44639:21:119;44696:2;44676:18;;;44669:30;44735:34;44715:18;;;44708:62;44806:33;44786:18;;;44779:61;44857:19;;3510:127:89;44455:427:119;3510:127:89;3655:6;-1:-1:-1;3308:360:89;;;;;:::o;6797:406::-;6853:6;;6897:209;6904:5;;6897:209;;6931:5;6935:1;6931;:5;:::i;:::-;6925:12;;;;7020:7;;;;:::i;:::-;;;;6897:209;;5698:1197:88;-1:-1:-1;;;;;;;;;;;;;;;;;5824:4:88;5820:1;:8;;;5812:37;;;;-1:-1:-1;;;5812:37:88;;45291:2:119;5812:37:88;;;45273:21:119;45330:2;45310:18;;;45303:30;-1:-1:-1;;;45349:18:119;;;45342:46;45405:18;;5812:37:88;45089:340:119;5812:37:88;5893:1;:6;;5898:1;5893:6;5890:44;;-1:-1:-1;5922:1:88;5915:8;;5890:44;6016:19;;;;;;;;;5989:24;6016:19;;;;;;;;;6145:1;;6208;;6337:481;6348:1;6343:6;;:1;:6;;;6337:481;;6493:1;6483:6;;;;;;;6482:12;;:17;;6478:84;;6529:14;6534:3;6539;6529:4;:14::i;:::-;6523:20;;6478:84;6644:14;6649:3;6654;6644:4;:14::i;:::-;6638:20;-1:-1:-1;6765:7:88;6771:1;6765:7;;;;;6790:3;6337:481;;;-1:-1:-1;6885:3:88;;5698:1197;-1:-1:-1;;;;;5698:1197:88:o;4461:295::-;-1:-1:-1;;;;;;;;;;;;;;;;;4600:3:88;;:8;:20;;;;-1:-1:-1;4612:3:88;;;;:8;4600:20;4596:154;;;-1:-1:-1;;4643:13:88;;;;;;;;;-1:-1:-1;4643:13:88;;;;;;;;4461:295::o;4596:154::-;4694:45;;;;;;;;4702:1;:3;;;4694:45;;;;-1:-1:-1;;;;;;;;;;;4721:1:88;:3;;;:16;;;;:::i;:::-;4707:31;;-1:-1:-1;;;;;;;;;;;4707:31:88;:::i;:::-;4694:45;;4687:52;4461:295;-1:-1:-1;;4461:295:88:o;4596:154::-;4461:295;;;:::o;2673:187:39:-;2765:6;;;-1:-1:-1;;;;;2781:17:39;;;-1:-1:-1;;;;;;2781:17:39;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;2311:238:73:-;4910:13:40;;;;;;;4902:69;;;;-1:-1:-1;;;4902:69:40;;45636:2:119;4902:69:40;;;45618:21:119;45675:2;45655:18;;;45648:30;45714:34;45694:18;;;45687:62;-1:-1:-1;;;45765:18:119;;;45758:41;45816:19;;4902:69:40;45434:407:119;4902:69:40;2461:32:73::1;2480:12;2461:18;:32::i;:::-;2503:39;2524:17;2503:20;:39::i;1997:1172:27:-:0;2136:7;2191:2;2176:5;:12;:17;;;;:::i;:::-;:22;2155:144;;;;-1:-1:-1;;;2155:144:27;;46048:2:119;2155:144:27;;;46030:21:119;46087:2;46067:18;;;46060:30;46126:34;46106:18;;;46099:62;46197:34;46177:18;;;46170:62;-1:-1:-1;;;46248:19:119;;;46241:42;46300:19;;2155:144:27;45846:479:119;2155:144:27;2332:4;2363:2;2346:788;2372:5;:12;2367:1;:17;2346:788;;2413:9;2421:1;2413:5;:9;:::i;:::-;2426:1;2413:14;2409:715;;2572:12;2566:4;2559:26;2636:1;2629:5;2625:13;2619:20;2613:4;2606:34;2693:4;2687;2677:21;2661:37;;2739:1;2732:5;2728:13;2719:22;;2409:715;;;2940:1;2933:5;2929:13;2923:20;2917:4;2910:34;2978:12;2972:4;2965:26;3044:4;3038;3028:21;3012:37;;3090:1;3083:5;3079:13;3070:22;;2409:715;2386:7;2391:2;2386:7;;:::i;:::-;;;2346:788;;11616:433:88;11670:7;;;-1:-1:-1;;;;;;;;;;;11801:1:88;-1:-1:-1;;;;;;;;;;;11785:1:88;-1:-1:-1;;;;;;;;;;;11769:1:88;11766;11759:24;11752:47;11745:70;11730:85;;11912:9;11924:91;11931:4;11937:65;-1:-1:-1;;;;;;;;;;;11924:6:88;:91::i;:::-;12034:4;;11912:103;;-1:-1:-1;11616:433:88;;-1:-1:-1;;;11616:433:88:o;1188:1693:89:-;1278:7;571:3;1409:17;:24;:49;;1401:142;;;;-1:-1:-1;;;1401:142:89;;46532:2:119;1401:142:89;;;46514:21:119;46571:2;46551:18;;;46544:30;;;46610:34;46590:18;;;46583:62;46681:34;46661:18;;;46654:62;-1:-1:-1;;;46732:19:119;;;46725:35;46777:19;;1401:142:89;46330:472:119;1401:142:89;1619:17;:24;1647:1;1619:29;1615:77;;-1:-1:-1;1679:1:89;;1188:1693;-1:-1:-1;1188:1693:89:o;1615:77::-;1770:14;1873:15;2180:17;2198:1;2180:20;;;;;;;;:::i;:::-;;;;;2169:1;2180:20;;;;;2169:32;;;;-1:-1:-1;2284:568:89;2308:17;:24;2304:1;:28;2284:568;;;2480:17;2498:1;2480:20;;;;;;;;:::i;:::-;;;;;2469:1;2480:20;;;;;2469:32;;-1:-1:-1;2665:16:89;;;2657:100;;;;-1:-1:-1;;;2657:100:89;;47009:2:119;2657:100:89;;;46991:21:119;47048:2;47028:18;;;47021:30;47087:34;47067:18;;;47060:62;47158:34;47138:18;;;47131:62;-1:-1:-1;;;47209:19:119;;;47202:38;47257:19;;2657:100:89;46807:475:119;2657:100:89;2824:16;;;;2334:3;;2284:568;;;-1:-1:-1;2868:6:89;;1188:1693;-1:-1:-1;;;1188:1693:89:o;12055:874:88:-;12146:14;12172:12;12194:24;;:::i;:::-;12228:20;;:::i;:::-;12269:4;12258:15;;;12341:8;;;:15;;;12425:8;;;:15;;;12509:8;;;:16;;;12535:8;;;:20;;;12565:8;;;:19;;;12673:6;12667:4;12258:15;12571:1;12650:4;12643:5;12639:16;12628:58;12617:69;-1:-1:-1;12617:69:88;;12756:75;12783:48;12808:9;12756:75;;12858:7;12850:46;;;;-1:-1:-1;;;12850:46:88;;47489:2:119;12850:46:88;;;47471:21:119;47528:2;47508:18;;;47501:30;47567:28;47547:18;;;47540:56;47613:18;;12850:46:88;47287:350:119;12850:46:88;-1:-1:-1;12913:9:88;;;-1:-1:-1;;;;;12055:874:88:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:185:119:-;82:20;;-1:-1:-1;;;;;;131:43:119;;121:54;;111:82;;189:1;186;179:12;204:127;265:10;260:3;256:20;253:1;246:31;296:4;293:1;286:15;320:4;317:1;310:15;336:257;408:4;402:11;;;440:17;;-1:-1:-1;;;;;472:34:119;;508:22;;;469:62;466:88;;;534:18;;:::i;:::-;570:4;563:24;336:257;:::o;598:255::-;670:2;664:9;712:6;700:19;;-1:-1:-1;;;;;734:34:119;;770:22;;;731:62;728:88;;;796:18;;:::i;858:275::-;929:2;923:9;994:2;975:13;;-1:-1:-1;;971:27:119;959:40;;-1:-1:-1;;;;;1014:34:119;;1050:22;;;1011:62;1008:88;;;1076:18;;:::i;:::-;1112:2;1105:22;858:275;;-1:-1:-1;858:275:119:o;1138:406::-;1202:5;-1:-1:-1;;;;;1228:6:119;1225:30;1222:56;;;1258:18;;:::i;:::-;1296:57;1341:2;1320:15;;-1:-1:-1;;1316:29:119;1347:4;1312:40;1296:57;:::i;:::-;1287:66;;1376:6;1369:5;1362:21;1416:3;1407:6;1402:3;1398:16;1395:25;1392:45;;;1433:1;1430;1423:12;1392:45;1482:6;1477:3;1470:4;1463:5;1459:16;1446:43;1536:1;1529:4;1520:6;1513:5;1509:18;1505:29;1498:40;1138:406;;;;;:::o;1549:220::-;1591:5;1644:3;1637:4;1629:6;1625:17;1621:27;1611:55;;1662:1;1659;1652:12;1611:55;1684:79;1759:3;1750:6;1737:20;1730:4;1722:6;1718:17;1684:79;:::i;:::-;1675:88;1549:220;-1:-1:-1;;;1549:220:119:o;1774:131::-;-1:-1:-1;;;;;1849:31:119;;1839:42;;1829:70;;1895:1;1892;1885:12;1910:874;2041:6;2049;2057;2065;2073;2081;2089;2097;2150:3;2138:9;2129:7;2125:23;2121:33;2118:53;;;2167:1;2164;2157:12;2118:53;2203:9;2190:23;2180:33;;2260:2;2249:9;2245:18;2232:32;2222:42;;2311:2;2300:9;2296:18;2283:32;2273:42;;2334:38;2368:2;2357:9;2353:18;2334:38;:::i;:::-;2324:48;;2419:3;2408:9;2404:19;2391:33;2381:43;;2475:3;2464:9;2460:19;2447:33;-1:-1:-1;;;;;2495:6:119;2492:30;2489:50;;;2535:1;2532;2525:12;2489:50;2558:49;2599:7;2590:6;2579:9;2575:22;2558:49;:::i;:::-;2548:59;;;2654:3;2643:9;2639:19;2626:33;2616:43;;2709:3;2698:9;2694:19;2681:33;2723:31;2748:5;2723:31;:::i;:::-;2773:5;2763:15;;;1910:874;;;;;;;;;;;:::o;2981:282::-;3035:5;3083:4;3071:9;3066:3;3062:19;3058:30;3055:50;;;3101:1;3098;3091:12;3055:50;3123:22;;:::i;:::-;3114:31;;3181:9;3168:23;3161:5;3154:38;3252:2;3241:9;3237:18;3224:32;3219:2;3212:5;3208:14;3201:56;2981:282;;;;:::o;3268:484::-;3318:5;3371:3;3364:4;3356:6;3352:17;3348:27;3338:55;;3389:1;3386;3379:12;3338:55;3413:22;;:::i;:::-;3457:3;3495:2;3487:6;3483:15;3521:3;3513:6;3510:15;3507:35;;;3538:1;3535;3528:12;3507:35;3562:6;3577:146;3593:6;3588:3;3585:15;3577:146;;;3661:17;;3649:30;;3708:4;3699:14;;;;3610;3577:146;;;-1:-1:-1;3741:5:119;;3268:484;-1:-1:-1;;;;;3268:484:119:o;3757:320::-;3811:5;3859:4;3847:9;3842:3;3838:19;3834:30;3831:50;;;3877:1;3874;3867:12;3831:50;3899:22;;:::i;:::-;3890:31;;3944:40;3980:3;3969:9;3944:40;:::i;:::-;3937:5;3930:55;4019:51;4066:3;4059:4;4048:9;4044:20;4019:51;:::i;:::-;4012:4;4005:5;4001:16;3994:77;3757:320;;;;:::o;4082:530::-;4246:6;4254;4262;4270;4323:3;4311:9;4302:7;4298:23;4294:33;4291:53;;;4340:1;4337;4330:12;4291:53;4376:9;4363:23;4353:33;;4405:54;4451:7;4446:2;4435:9;4431:18;4405:54;:::i;:::-;4395:64;;4478:54;4524:7;4519:2;4508:9;4504:18;4478:54;:::i;:::-;4468:64;;4551:55;4598:7;4592:3;4581:9;4577:19;4551:55;:::i;:::-;4541:65;;4082:530;;;;;;;:::o;4890:180::-;4949:6;5002:2;4990:9;4981:7;4977:23;4973:32;4970:52;;;5018:1;5015;5008:12;4970:52;-1:-1:-1;5041:23:119;;4890:180;-1:-1:-1;4890:180:119:o;5075:247::-;5134:6;5187:2;5175:9;5166:7;5162:23;5158:32;5155:52;;;5203:1;5200;5193:12;5155:52;5242:9;5229:23;5261:31;5286:5;5261:31;:::i;5327:658::-;5498:2;5550:21;;;5620:13;;5523:18;;;5642:22;;;5469:4;;5498:2;5721:15;;;;5695:2;5680:18;;;5469:4;5764:195;5778:6;5775:1;5772:13;5764:195;;;5843:13;;-1:-1:-1;;;;;5839:39:119;5827:52;;5934:15;;;;5899:12;;;;5875:1;5793:9;5764:195;;;-1:-1:-1;5976:3:119;;5327:658;-1:-1:-1;;;;;;5327:658:119:o;5990:118::-;6076:5;6069:13;6062:21;6055:5;6052:32;6042:60;;6098:1;6095;6088:12;6113:241;6169:6;6222:2;6210:9;6201:7;6197:23;6193:32;6190:52;;;6238:1;6235;6228:12;6190:52;6277:9;6264:23;6296:28;6318:5;6296:28;:::i;6567:163::-;6634:20;;6694:10;6683:22;;6673:33;;6663:61;;6720:1;6717;6710:12;6735:182;6794:4;-1:-1:-1;;;;;6819:6:119;6816:30;6813:56;;;6849:18;;:::i;:::-;-1:-1:-1;6894:1:119;6890:14;6906:4;6886:25;;6735:182::o;6922:671::-;6975:5;7028:3;7021:4;7013:6;7009:17;7005:27;6995:55;;7046:1;7043;7036:12;6995:55;7082:6;7069:20;7108:4;7132:59;7148:42;7187:2;7148:42;:::i;:::-;7132:59;:::i;:::-;7213:3;7237:2;7232:3;7225:15;7265:4;7260:3;7256:14;7249:21;;7322:4;7316:2;7313:1;7309:10;7301:6;7297:23;7293:34;7279:48;;7350:3;7342:6;7339:15;7336:35;;;7367:1;7364;7357:12;7336:35;7403:4;7395:6;7391:17;7417:147;7433:6;7428:3;7425:15;7417:147;;;7499:22;7517:3;7499:22;:::i;:::-;7487:35;;7542:12;;;;7450;;7417:147;;;-1:-1:-1;7582:5:119;6922:671;-1:-1:-1;;;;;;6922:671:119:o;7598:694::-;7659:5;7712:3;7705:4;7697:6;7693:17;7689:27;7679:55;;7730:1;7727;7720:12;7679:55;7766:6;7753:20;7792:4;7816:59;7832:42;7871:2;7832:42;:::i;7816:59::-;7897:3;7921:2;7916:3;7909:15;7949:4;7944:3;7940:14;7933:21;;8006:4;8000:2;7997:1;7993:10;7985:6;7981:23;7977:34;7963:48;;8034:3;8026:6;8023:15;8020:35;;;8051:1;8048;8041:12;8020:35;8087:4;8079:6;8075:17;8101:162;8117:6;8112:3;8109:15;8101:162;;;8185:35;8216:3;8211;8185:35;:::i;:::-;8173:48;;8241:12;;;;8143:4;8134:14;8101:162;;8297:907;8360:5;8413:3;8406:4;8398:6;8394:17;8390:27;8380:55;;8431:1;8428;8421:12;8380:55;8467:6;8454:20;8493:4;8517:59;8533:42;8572:2;8533:42;:::i;8517:59::-;8610:15;;;8696:1;8692:10;;;;8680:23;;8676:32;;;8641:12;;;;8720:15;;;8717:35;;;8748:1;8745;8738:12;8717:35;8784:2;8776:6;8772:15;8796:379;8812:6;8807:3;8804:15;8796:379;;;8898:3;8885:17;-1:-1:-1;;;;;8921:11:119;8918:35;8915:125;;;8994:1;9023:2;9019;9012:14;8915:125;9065:67;9128:3;9123:2;9109:11;9101:6;9097:24;9093:33;9065:67;:::i;:::-;9053:80;;-1:-1:-1;9153:12:119;;;;8829;;8796:379;;9209:1566;9283:5;9331:6;9319:9;9314:3;9310:19;9306:32;9303:52;;;9351:1;9348;9341:12;9303:52;9373:22;;:::i;:::-;9364:31;;9431:9;9418:23;-1:-1:-1;;;;;9501:2:119;9493:6;9490:14;9487:34;;;9517:1;9514;9507:12;9487:34;9544:56;9596:3;9587:6;9576:9;9572:22;9544:56;:::i;:::-;9537:5;9530:71;9654:2;9643:9;9639:18;9626:32;9610:48;;9683:2;9673:8;9670:16;9667:36;;;9699:1;9696;9689:12;9667:36;9735:66;9797:3;9786:8;9775:9;9771:24;9735:66;:::i;:::-;9730:2;9723:5;9719:14;9712:90;9855:2;9844:9;9840:18;9827:32;9811:48;;9884:2;9874:8;9871:16;9868:36;;;9900:1;9897;9890:12;9868:36;9936:66;9998:3;9987:8;9976:9;9972:24;9936:66;:::i;:::-;9931:2;9924:5;9920:14;9913:90;10035:50;10081:3;10076:2;10065:9;10061:18;10035:50;:::i;:::-;10030:2;10023:5;10019:14;10012:74;10120:51;10167:3;10161;10150:9;10146:19;10120:51;:::i;:::-;10113:4;10106:5;10102:16;10095:77;10225:3;10214:9;10210:19;10197:33;10181:49;;10255:2;10245:8;10242:16;10239:36;;;10271:1;10268;10261:12;10239:36;10309:58;10363:3;10352:8;10341:9;10337:24;10309:58;:::i;:::-;10302:4;10295:5;10291:16;10284:84;10421:3;10410:9;10406:19;10393:33;10377:49;;10451:2;10441:8;10438:16;10435:36;;;10467:1;10464;10457:12;10435:36;10505:58;10559:3;10548:8;10537:9;10533:24;10505:58;:::i;:::-;10498:4;10491:5;10487:16;10480:84;10617:3;10606:9;10602:19;10589:33;10573:49;;10647:2;10637:8;10634:16;10631:36;;;10663:1;10660;10653:12;10631:36;;10700:68;10764:3;10753:8;10742:9;10738:24;10700:68;:::i;:::-;10694:3;10687:5;10683:15;10676:93;;9209:1566;;;;:::o;10780:526::-;10902:6;10910;10918;10971:2;10959:9;10950:7;10946:23;10942:32;10939:52;;;10987:1;10984;10977:12;10939:52;11023:9;11010:23;11000:33;;11052:37;11085:2;11074:9;11070:18;11052:37;:::i;:::-;11042:47;;11140:2;11129:9;11125:18;11112:32;-1:-1:-1;;;;;11159:6:119;11156:30;11153:50;;;11199:1;11196;11189:12;11153:50;11222:78;11292:7;11283:6;11272:9;11268:22;11222:78;:::i;:::-;11212:88;;;10780:526;;;;;:::o;11311:471::-;11363:3;11401:5;11395:12;11428:6;11423:3;11416:19;11454:4;11483;11478:3;11474:14;11467:21;;11522:4;11515:5;11511:16;11545:1;11555:202;11569:6;11566:1;11563:13;11555:202;;;11634:13;;-1:-1:-1;;;;;11630:46:119;11618:59;;11697:12;;;;11732:15;;;;11591:1;11584:9;11555:202;;;-1:-1:-1;11773:3:119;;11311:471;-1:-1:-1;;;;;11311:471:119:o;11787:645::-;12016:2;12005:9;11998:21;11979:4;12054:6;12048:13;12097:2;12092;12081:9;12077:18;12070:30;12123:62;12180:3;12169:9;12165:19;12151:12;12123:62;:::i;:::-;12109:76;;12234:4;12226:6;12222:17;12216:24;12308:2;12304:7;12292:9;12284:6;12280:22;12276:36;12271:2;12260:9;12256:18;12249:64;12330:51;12374:6;12358:14;12330:51;:::i;:::-;12322:59;;;;12419:6;12412:4;12401:9;12397:20;12390:36;11787:645;;;;;:::o;13448:347::-;13499:8;13509:6;13563:3;13556:4;13548:6;13544:17;13540:27;13530:55;;13581:1;13578;13571:12;13530:55;-1:-1:-1;13604:20:119;;-1:-1:-1;;;;;13636:30:119;;13633:50;;;13679:1;13676;13669:12;13633:50;13716:4;13708:6;13704:17;13692:29;;13768:3;13761:4;13752:6;13744;13740:19;13736:30;13733:39;13730:59;;;13785:1;13782;13775:12;13730:59;13448:347;;;;;:::o;13800:477::-;13879:6;13887;13895;13948:2;13936:9;13927:7;13923:23;13919:32;13916:52;;;13964:1;13961;13954:12;13916:52;14004:9;13991:23;-1:-1:-1;;;;;14029:6:119;14026:30;14023:50;;;14069:1;14066;14059:12;14023:50;14108:58;14158:7;14149:6;14138:9;14134:22;14108:58;:::i;:::-;14185:8;;14082:84;;-1:-1:-1;14267:2:119;14252:18;;;;14239:32;;13800:477;-1:-1:-1;;;;13800:477:119:o;14282:1026::-;14394:6;14402;14455:2;14443:9;14434:7;14430:23;14426:32;14423:52;;;14471:1;14468;14461:12;14423:52;14510:9;14497:23;14529:31;14554:5;14529:31;:::i;:::-;14579:5;-1:-1:-1;14635:2:119;14620:18;;14607:32;-1:-1:-1;;;;;14688:14:119;;;14685:34;;;14715:1;14712;14705:12;14685:34;14738:22;;;;14794:4;14776:16;;;14772:27;14769:47;;;14812:1;14809;14802:12;14769:47;14845:2;14839:9;14887:4;14879:6;14875:17;14942:6;14930:10;14927:22;14922:2;14910:10;14907:18;14904:46;14901:72;;;14953:18;;:::i;:::-;14989:2;14982:22;15029:16;;15057;;;15054:36;;;15086:1;15083;15076:12;15054:36;15114:44;15150:7;15139:8;15135:2;15131:17;15114:44;:::i;:::-;15106:6;15099:60;;15213:2;15209;15205:11;15192:25;15187:2;15179:6;15175:15;15168:50;15272:2;15268;15264:11;15251:25;15246:2;15238:6;15234:15;15227:50;15296:6;15286:16;;;;;14282:1026;;;;;:::o;15313:450::-;15382:6;15435:2;15423:9;15414:7;15410:23;15406:32;15403:52;;;15451:1;15448;15441:12;15403:52;15491:9;15478:23;-1:-1:-1;;;;;15516:6:119;15513:30;15510:50;;;15556:1;15553;15546:12;15510:50;15579:22;;15632:4;15624:13;;15620:27;-1:-1:-1;15610:55:119;;15661:1;15658;15651:12;15610:55;15684:73;15749:7;15744:2;15731:16;15726:2;15722;15718:11;15684:73;:::i;:::-;15674:83;15313:450;-1:-1:-1;;;;15313:450:119:o;15768:589::-;15891:6;15899;15907;15960:2;15948:9;15939:7;15935:23;15931:32;15928:52;;;15976:1;15973;15966:12;15928:52;16012:9;15999:23;15989:33;;16072:2;16061:9;16057:18;16044:32;16085:31;16110:5;16085:31;:::i;16995:529::-;17072:6;17080;17088;17141:2;17129:9;17120:7;17116:23;17112:32;17109:52;;;17157:1;17154;17147:12;17109:52;17196:9;17183:23;17215:31;17240:5;17215:31;:::i;:::-;17265:5;-1:-1:-1;17322:2:119;17307:18;;17294:32;17335:33;17294:32;17335:33;:::i;:::-;17387:7;-1:-1:-1;17446:2:119;17431:18;;17418:32;17459:33;17418:32;17459:33;:::i;:::-;17511:7;17501:17;;;16995:529;;;;;:::o;17529:546::-;17618:6;17626;17634;17642;17695:2;17683:9;17674:7;17670:23;17666:32;17663:52;;;17711:1;17708;17701:12;17663:52;17747:9;17734:23;17724:33;;17808:2;17797:9;17793:18;17780:32;-1:-1:-1;;;;;17827:6:119;17824:30;17821:50;;;17867:1;17864;17857:12;17821:50;17906:58;17956:7;17947:6;17936:9;17932:22;17906:58;:::i;:::-;17529:546;;17983:8;;-1:-1:-1;17880:84:119;;18065:2;18050:18;18037:32;;17529:546;-1:-1:-1;;;;17529:546:119:o;18315:738::-;18437:6;18445;18453;18461;18469;18477;18485;18538:3;18526:9;18517:7;18513:23;18509:33;18506:53;;;18555:1;18552;18545:12;18506:53;18591:9;18578:23;18568:33;;18648:2;18637:9;18633:18;18620:32;18610:42;;18699:2;18688:9;18684:18;18671:32;18661:42;;18722:38;18756:2;18745:9;18741:18;18722:38;:::i;:::-;18712:48;;18807:3;18796:9;18792:19;18779:33;18769:43;;18863:3;18852:9;18848:19;18835:33;-1:-1:-1;;;;;18883:6:119;18880:30;18877:50;;;18923:1;18920;18913:12;18877:50;18946:49;18987:7;18978:6;18967:9;18963:22;18946:49;:::i;:::-;18936:59;;;19042:3;19031:9;19027:19;19014:33;19004:43;;18315:738;;;;;;;;;;:::o;19058:652::-;19181:6;19189;19242:2;19230:9;19221:7;19217:23;19213:32;19210:52;;;19258:1;19255;19248:12;19210:52;19298:9;19285:23;-1:-1:-1;;;;;19368:2:119;19360:6;19357:14;19354:34;;;19384:1;19381;19374:12;19354:34;19422:6;19411:9;19407:22;19397:32;;19467:7;19460:4;19456:2;19452:13;19448:27;19438:55;;19489:1;19486;19479:12;19438:55;19529:2;19516:16;19555:2;19547:6;19544:14;19541:34;;;19571:1;19568;19561:12;19541:34;19624:7;19619:2;19609:6;19606:1;19602:14;19598:2;19594:23;19590:32;19587:45;19584:65;;;19645:1;19642;19635:12;19584:65;19676:2;19668:11;;;;;19698:6;;-1:-1:-1;19058:652:119;;-1:-1:-1;;;;19058:652:119:o;19715:127::-;19776:10;19771:3;19767:20;19764:1;19757:31;19807:4;19804:1;19797:15;19831:4;19828:1;19821:15;19847:125;19912:9;;;19933:10;;;19930:36;;;19946:18;;:::i;19977:294::-;20134:19;;;20191:2;20187:15;-1:-1:-1;;;;;;20183:53:119;20178:2;20169:12;;20162:75;20262:2;20253:12;;19977:294::o;20697:127::-;20758:10;20753:3;20749:20;20746:1;20739:31;20789:4;20786:1;20779:15;20813:4;20810:1;20803:15;21674:209;21706:1;21732;21722:132;;21776:10;21771:3;21767:20;21764:1;21757:31;21811:4;21808:1;21801:15;21839:4;21836:1;21829:15;21722:132;-1:-1:-1;21868:9:119;;21674:209::o;22238:128::-;22305:9;;;22326:11;;;22323:37;;;22340:18;;:::i;22371:184::-;22441:6;22494:2;22482:9;22473:7;22469:23;22465:32;22462:52;;;22510:1;22507;22500:12;22462:52;-1:-1:-1;22533:16:119;;22371:184;-1:-1:-1;22371:184:119:o;22742:290::-;22812:6;22865:2;22853:9;22844:7;22840:23;22836:32;22833:52;;;22881:1;22878;22871:12;22833:52;22907:16;;-1:-1:-1;;;;;22952:31:119;;22942:42;;22932:70;;22998:1;22995;22988:12;23037:273;23105:6;23158:2;23146:9;23137:7;23133:23;23129:32;23126:52;;;23174:1;23171;23164:12;23126:52;23206:9;23200:16;23256:4;23249:5;23245:16;23238:5;23235:27;23225:55;;23276:1;23273;23266:12;23953:137;-1:-1:-1;;;;;24031:5:119;24027:38;24020:5;24017:49;24007:77;;24080:1;24077;24070:12;24095:493;24198:6;24251:2;24239:9;24230:7;24226:23;24222:32;24219:52;;;24267:1;24264;24257:12;24219:52;24293:22;;:::i;:::-;24345:9;24339:16;24364:33;24389:7;24364:33;:::i;:::-;24406:22;;24473:2;24458:18;;24452:25;24486:32;24452:25;24486:32;:::i;:::-;24545:2;24534:14;;24527:31;24538:5;24095:493;-1:-1:-1;;;24095:493:119:o;24593:135::-;24632:3;24653:17;;;24650:43;;24673:18;;:::i;:::-;-1:-1:-1;24720:1:119;24709:13;;24593:135::o;24733:251::-;24803:6;24856:2;24844:9;24835:7;24831:23;24827:32;24824:52;;;24872:1;24869;24862:12;24824:52;24904:9;24898:16;24923:31;24948:5;24923:31;:::i;28598:294::-;28668:6;28721:2;28709:9;28700:7;28696:23;28692:32;28689:52;;;28737:1;28734;28727:12;28689:52;28763:16;;-1:-1:-1;;28808:35:119;;28798:46;;28788:74;;28858:1;28855;28848:12;29443:249;29512:6;29565:2;29553:9;29544:7;29540:23;29536:32;29533:52;;;29581:1;29578;29571:12;29533:52;29613:9;29607:16;29632:30;29656:5;29632:30;:::i;30144:191::-;-1:-1:-1;;;;;30271:10:119;;;30259;;;30255:27;;30294:12;;;30291:38;;;30309:18;;:::i;:::-;30291:38;30144:191;;;;:::o;31242:646::-;31490:10;31485:3;31481:20;31472:6;31467:3;31463:16;31459:43;31454:3;31447:56;31429:3;31534:1;31529:3;31525:11;31565:6;31559:13;31614:4;31653;31645:6;31641:17;31676:1;31686:175;31700:6;31697:1;31694:13;31686:175;;;31763:13;;31749:28;;31799:14;;;;31836:15;;;;31722:1;31715:9;31686:175;;;-1:-1:-1;31877:5:119;;31242:646;-1:-1:-1;;;;;;;31242:646:119:o;31893:410::-;32095:2;32077:21;;;32134:2;32114:18;;;32107:30;32173:34;32168:2;32153:18;;32146:62;-1:-1:-1;;;32239:2:119;32224:18;;32217:44;32293:3;32278:19;;31893:410::o;32308:271::-;32491:6;32483;32478:3;32465:33;32447:3;32517:16;;32542:13;;;32517:16;32308:271;-1:-1:-1;32308:271:119:o;32584:486::-;32786:2;32768:21;;;32825:2;32805:18;;;32798:30;32864:34;32859:2;32844:18;;32837:62;32935:34;32930:2;32915:18;;32908:62;-1:-1:-1;;;33001:3:119;32986:19;;32979:49;33060:3;33045:19;;32584:486::o;33075:422::-;33116:3;33154:5;33148:12;33181:6;33176:3;33169:19;33206:1;33216:162;33230:6;33227:1;33224:13;33216:162;;;33292:4;33348:13;;;33344:22;;33338:29;33320:11;;;33316:20;;33309:59;33245:12;33216:162;;;33220:3;33423:1;33416:4;33407:6;33402:3;33398:16;33394:27;33387:38;33486:4;33479:2;33475:7;33470:2;33462:6;33458:15;33454:29;33449:3;33445:39;33441:50;33434:57;;;33075:422;;;;:::o;33502:624::-;33776:1;33772;33767:3;33763:11;33759:19;33751:6;33747:32;33736:9;33729:51;33816:2;33811;33800:9;33796:18;33789:30;33710:4;33854:6;33848:13;33897:4;33892:2;33881:9;33877:18;33870:32;33925:51;33971:3;33960:9;33956:19;33942:12;33925:51;:::i;:::-;33911:65;;34032:2;34024:6;34020:15;34014:22;34007:4;33996:9;33992:20;33985:52;34092:2;34084:6;34080:15;34074:22;34068:3;34057:9;34053:19;34046:51;34114:6;34106:14;;;33502:624;;;;;:::o;34131:219::-;34280:2;34269:9;34262:21;34243:4;34300:44;34340:2;34329:9;34325:18;34317:6;34300:44;:::i;34664:265::-;-1:-1:-1;;;;;34793:10:119;;;34805;;;34789:27;34836:20;;;;34735:26;34875:24;;;34865:58;;34903:18;;:::i;34934:168::-;35007:9;;;35038;;35055:15;;;35049:22;;35035:37;35025:71;;35076:18;;:::i;35844:267::-;35933:6;35928:3;35921:19;35985:6;35978:5;35971:4;35966:3;35962:14;35949:43;-1:-1:-1;36037:1:119;36012:16;;;36030:4;36008:27;;;36001:38;;;;36093:2;36072:15;;;-1:-1:-1;;36068:29:119;36059:39;;;36055:50;;35844:267::o;36116:430::-;-1:-1:-1;;;;;36329:32:119;;36311:51;;36410:10;36398:23;;36393:2;36378:18;;36371:51;36458:2;36453;36438:18;;36431:30;;;-1:-1:-1;;36478:62:119;;36521:18;;36513:6;36505;36478:62;:::i;:::-;36470:70;36116:430;-1:-1:-1;;;;;;36116:430:119:o;36551:503::-;-1:-1:-1;;;;;36792:32:119;;36774:51;;36873:10;36861:23;;36856:2;36841:18;;36834:51;36921:3;36916:2;36901:18;;36894:31;;;-1:-1:-1;;36942:63:119;;36985:19;;36977:6;36969;36942:63;:::i;:::-;36934:71;;37041:6;37036:2;37025:9;37021:18;37014:34;36551:503;;;;;;;;:::o;37466:804::-;37772:4;37801:3;37831:6;37820:9;37813:25;37874:6;37869:2;37858:9;37854:18;37847:34;37917:6;37912:2;37901:9;37897:18;37890:34;-1:-1:-1;;;;;37972:31:119;37964:6;37960:44;37955:2;37944:9;37940:18;37933:72;38042:6;38036:3;38025:9;38021:19;38014:35;38086:2;38080:3;38069:9;38065:19;38058:31;38106:44;38146:2;38135:9;38131:18;38123:6;38106:44;:::i;:::-;38181:3;38166:19;;38159:35;;;;-1:-1:-1;;;;;;;38231:32:119;;;;38225:3;38210:19;;;38203:61;38098:52;37466:804;-1:-1:-1;;;;;;37466:804:119:o;38275:245::-;38342:6;38395:2;38383:9;38374:7;38370:23;38366:32;38363:52;;;38411:1;38408;38401:12;38363:52;38443:9;38437:16;38462:28;38484:5;38462:28;:::i;39010:335::-;39113:4;39171:11;39158:25;39265:3;39261:8;39250;39234:14;39230:29;39226:44;39206:18;39202:69;39192:97;;39285:1;39282;39275:12;39192:97;39306:33;;;;;39010:335;-1:-1:-1;;39010:335:119:o;39350:142::-;39426:20;;39455:31;39426:20;39455:31;:::i;40424:758::-;40554:6;40549:3;40542:19;40524:3;40580:4;40609;40604:3;40600:14;40593:21;;40637:5;40660:1;40670:487;40684:6;40681:1;40678:13;40670:487;;;40761:6;40748:20;40781:33;40806:7;40781:33;:::i;:::-;-1:-1:-1;;;;;40839:33:119;40827:46;;40914:15;;;40901:29;40943:32;40901:29;40943:32;:::i;:::-;-1:-1:-1;;;;;41009:40:119;40995:12;;;40988:62;41073:4;41097:12;;;;41132:15;;;;;40706:1;40699:9;40670:487;;41187:2218;41440:2;41492:21;;;41465:18;;;41548:22;;;41411:4;;41589:2;41607:18;;;41671:1;41667:14;;;41652:30;;41648:39;;41710:6;41411:4;41744:1632;41758:6;41755:1;41752:13;41744:1632;;;41823:22;;;-1:-1:-1;;41819:36:119;41807:49;;41895:20;;41970:14;41966:27;;;-1:-1:-1;;41962:42:119;41938:67;;41928:95;;42019:1;42016;42009:12;41928:95;42049:31;;42103:4;42148:19;;42224:14;42220:26;;;-1:-1:-1;;42216:40:119;42190:67;;42180:95;;42271:1;42268;42261:12;42180:95;42303:32;;42411:16;;;;42362:21;-1:-1:-1;;;;;42443:30:119;;42440:50;;;42486:1;42483;42476:12;42440:50;42546:6;42543:1;42539:14;42523;42519:35;42510:7;42506:49;42503:69;;;42568:1;42565;42558:12;42503:69;42600:2;42592:6;42585:18;42630:101;42727:2;42719:6;42715:15;42707:6;42698:7;42630:101;:::i;:::-;42616:115;;;;42764:42;42802:2;42795:5;42791:14;42764:42;:::i;:::-;-1:-1:-1;;;;;12520:31:119;42869:15;;;12508:44;42935:14;;;42922:28;42905:15;;;42898:53;42974:4;43013:33;43031:14;;;43013:33;:::i;:::-;16623:10;16612:22;43093:15;;;16600:35;43132:4;43171:33;43189:14;;;43171:33;:::i;:::-;16623:10;16612:22;43251:15;;16600:35;;;;-1:-1:-1;43354:12:119;;;;43319:15;;;;41780:1;41773:9;41744:1632;;;-1:-1:-1;43393:6:119;;41187:2218;-1:-1:-1;;;;;;;;41187:2218:119:o;44887:197::-;44925:3;44953:6;44994:2;44987:5;44983:14;45021:2;45012:7;45009:15;45006:41;;45027:18;;:::i;:::-;45076:1;45063:15;;44887:197;-1:-1:-1;;;44887:197:119:o","linkReferences":{},"immutableReferences":{"18523":[{"start":1074,"length":32},{"start":4111,"length":32},{"start":5283,"length":32},{"start":5706,"length":32},{"start":6289,"length":32}],"18526":[{"start":971,"length":32},{"start":7133,"length":32},{"start":7629,"length":32}],"18529":[{"start":919,"length":32},{"start":6640,"length":32}],"18532":[{"start":1620,"length":32},{"start":6109,"length":32}],"23362":[{"start":1020,"length":32},{"start":8634,"length":32},{"start":8846,"length":32},{"start":8973,"length":32}],"23365":[{"start":12413,"length":32},{"start":12601,"length":32},{"start":12828,"length":32}],"23368":[{"start":2923,"length":32},{"start":3066,"length":32},{"start":3194,"length":32},{"start":8550,"length":32},{"start":8754,"length":32},{"start":10729,"length":32},{"start":11138,"length":32}],"23371":[{"start":3396,"length":32},{"start":3733,"length":32},{"start":3884,"length":32},{"start":10926,"length":32},{"start":11303,"length":32},{"start":11462,"length":32}]}},"methodIdentifiers":{"alignedAggregator()":"4a5bf632","avsDirectory()":"6b3aa72e","balanceOf(address)":"70a08231","batchersBalances(address)":"f474b520","batchesState(bytes32)":"b099627e","blsApkRegistry()":"5df45946","checkPublicInput(bytes,bytes32)":"95c6d604","checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":"4ae07c37","createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])":"fce36c7d","createNewTask(bytes32,string,uint256)":"d66eaabd","delegation()":"df5cf723","depositToBatcher(address)":"4223d551","deregisterOperatorFromAVS(address)":"a364f4da","getOperatorRestakedStrategies(address)":"33cfb7b7","getRestakeableStrategies()":"e481af9d","initialize(address,address,address)":"c0c53b8b","initializeAggregator(address)":"800fb61f","owner()":"8da5cb5b","registerOperatorToAVS(address,(bytes,bytes32,uint256))":"9926ee7d","registryCoordinator()":"6d14a987","renounceOwnership()":"715018a6","respondToTaskV2(bytes32,address,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":"ab21739a","rewardsInitiator()":"fc299dee","setAggregator(address)":"f9120af6","setRewardsInitiator(address)":"3bc28c8c","setStaleStakesForbidden(bool)":"416c7e5e","stakeRegistry()":"68304835","staleStakesForbidden()":"b98d0908","transferOwnership(address)":"f2fde38b","trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))":"171f1d5b","updateAVSMetadataURI(string)":"a98fb355","verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256)":"fa534dc0","verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256,address)":"06045a91","withdraw(uint256)":"2e1a7d4d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IAVSDirectory\",\"name\":\"__avsDirectory\",\"type\":\"address\"},{\"internalType\":\"contract IRewardsCoordinator\",\"name\":\"__rewardsCoordinator\",\"type\":\"address\"},{\"internalType\":\"contract IRegistryCoordinator\",\"name\":\"__registryCoordinator\",\"type\":\"address\"},{\"internalType\":\"contract IStakeRegistry\",\"name\":\"__stakeRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchIdentifierHash\",\"type\":\"bytes32\"}],\"name\":\"BatchAlreadyResponded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchIdentifierHash\",\"type\":\"bytes32\"}],\"name\":\"BatchAlreadySubmitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchIdentifierHash\",\"type\":\"bytes32\"}],\"name\":\"BatchDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"respondToTaskFeeLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"txCost\",\"type\":\"uint256\"}],\"name\":\"ExceededMaxRespondFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"batcher\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"required\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"InsufficientFunds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"InvalidDepositAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"signedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"}],\"name\":\"InvalidQuorumThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alignedAggregator\",\"type\":\"address\"}],\"name\":\"SenderIsNotAggregator\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"BatchVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"batcher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"name\":\"BatcherBalanceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"taskCreatedBlock\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"batchDataPointer\",\"type\":\"string\"}],\"name\":\"NewBatchV2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"taskCreatedBlock\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"batchDataPointer\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"respondToTaskFeeLimit\",\"type\":\"uint256\"}],\"name\":\"NewBatchV3\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prevRewardsInitiator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRewardsInitiator\",\"type\":\"address\"}],\"name\":\"RewardsInitiatorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"StaleStakesForbiddenUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"alignedAggregator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"avsDirectory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"batchersBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"batchesState\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"taskCreatedBlock\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"responded\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"respondToTaskFeeLimit\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blsApkRegistry\",\"outputs\":[{\"internalType\":\"contract IBLSApkRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"checkPublicInput\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"referenceBlockNumber\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint32[]\",\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"quorumApks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"},{\"internalType\":\"uint32[]\",\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[][]\",\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\"}],\"internalType\":\"struct IBLSSignatureChecker.NonSignerStakesAndSignature\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"checkSignatures\",\"outputs\":[{\"components\":[{\"internalType\":\"uint96[]\",\"name\":\"signedStakeForQuorum\",\"type\":\"uint96[]\"},{\"internalType\":\"uint96[]\",\"name\":\"totalStakeForQuorum\",\"type\":\"uint96[]\"}],\"internalType\":\"struct IBLSSignatureChecker.QuorumStakeTotals\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"contract IStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"multiplier\",\"type\":\"uint96\"}],\"internalType\":\"struct IRewardsCoordinator.StrategyAndMultiplier[]\",\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"startTimestamp\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"duration\",\"type\":\"uint32\"}],\"internalType\":\"struct IRewardsCoordinator.RewardsSubmission[]\",\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\"}],\"name\":\"createAVSRewardsSubmission\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"batchDataPointer\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"respondToTaskFeeLimit\",\"type\":\"uint256\"}],\"name\":\"createNewTask\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegation\",\"outputs\":[{\"internalType\":\"contract IDelegationManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"depositToBatcher\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"deregisterOperatorFromAVS\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"getOperatorRestakedStrategies\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRestakeableStrategies\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rewardsInitiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_alignedAggregator\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_alignedAggregator\",\"type\":\"address\"}],\"name\":\"initializeAggregator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureUtils.SignatureWithSaltAndExpiry\",\"name\":\"operatorSignature\",\"type\":\"tuple\"}],\"name\":\"registerOperatorToAVS\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registryCoordinator\",\"outputs\":[{\"internalType\":\"contract IRegistryCoordinator\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32[]\",\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"quorumApks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"},{\"internalType\":\"uint32[]\",\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[][]\",\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\"}],\"internalType\":\"struct IBLSSignatureChecker.NonSignerStakesAndSignature\",\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\"}],\"name\":\"respondToTaskV2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardsInitiator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_alignedAggregator\",\"type\":\"address\"}],\"name\":\"setAggregator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRewardsInitiator\",\"type\":\"address\"}],\"name\":\"setRewardsInitiator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"setStaleStakesForbidden\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeRegistry\",\"outputs\":[{\"internalType\":\"contract IStakeRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staleStakesForbidden\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"apk\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"}],\"name\":\"trySignatureAndApkVerification\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"pairingSuccessful\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"siganatureIsValid\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_metadataURI\",\"type\":\"string\"}],\"name\":\"updateAVSMetadataURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"proofCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubInputCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"provingSystemAuxDataCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes20\",\"name\":\"proofGeneratorAddr\",\"type\":\"bytes20\"},{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"merkleProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"verificationDataBatchIndex\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"verifyBatchInclusion\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"proofCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubInputCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"provingSystemAuxDataCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes20\",\"name\":\"proofGeneratorAddr\",\"type\":\"bytes20\"},{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"merkleProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"verificationDataBatchIndex\",\"type\":\"uint256\"}],\"name\":\"verifyBatchInclusion\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"events\":{\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))\":{\"details\":\"Before signature verification, the function verifies operator stake information. This includes ensuring that the provided `referenceBlockNumber` is correct, i.e., ensure that the stake returned from the specified block number is recent enough and that the stake is either the most recent update for the total stake (of the operator) or latest before the referenceBlockNumber.NOTE: Be careful to ensure `msgHash` is collision-resistant! This method does not hash `msgHash` in any way, so if an attacker is able to pass in an arbitrary value, they may be able to tamper with signature verification.\",\"params\":{\"msgHash\":\"is the hash being signed\",\"params\":\"is the struct containing information on nonsigners, stakes, quorum apks, and the aggregate signature\",\"referenceBlockNumber\":\"is the block number at which the stake information is being verified\"},\"returns\":{\"_0\":\"quorumStakeTotals is the struct containing the total and signed stake for each quorum\",\"_1\":\"signatoryRecordHash is the hash of the signatory record, which is used for fraud proofs\"}},\"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])\":{\"details\":\"Only callabe by the permissioned rewardsInitiator addressThe duration of the `rewardsSubmission` cannot exceed `MAX_REWARDS_DURATION`The tokens are sent to the `RewardsCoordinator` contractStrategies must be in ascending order of addresses to check for duplicatesThis function will revert if the `rewardsSubmission` is malformed, e.g. if the `strategies` and `weights` arrays are of non-equal lengths\",\"params\":{\"rewardsSubmissions\":\"The rewards submissions being created\"}},\"deregisterOperatorFromAVS(address)\":{\"params\":{\"operator\":\"The address of the operator to deregister.\"}},\"getOperatorRestakedStrategies(address)\":{\"details\":\"This function is intended to be called off-chainNo guarantee is made on whether the operator has shares for a strategy in a quorum or uniqueness of each element in the returned array. The off-chain service should do that validation separately\",\"params\":{\"operator\":\"The address of the operator to get restaked strategies for\"}},\"getRestakeableStrategies()\":{\"details\":\"This function is intended to be called off-chainNo guarantee is made on uniqueness of each element in the returned array. The off-chain service should do that validation separately\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"registerOperatorToAVS(address,(bytes,bytes32,uint256))\":{\"params\":{\"operator\":\"The address of the operator to register.\",\"operatorSignature\":\"The signature, salt, and expiry of the operator's signature.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setRewardsInitiator(address)\":{\"details\":\"only callable by the owner\",\"params\":{\"newRewardsInitiator\":\"The new rewards initiator address\"}},\"setStaleStakesForbidden(bool)\":{\"params\":{\"value\":\"to toggle staleStakesForbidden\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))\":{\"params\":{\"apk\":\"is the claimed G1 public key\",\"apkG2\":\"is provided G2 public key\",\"msgHash\":\"is the hash being signed\",\"sigma\":\"is the G1 point signature\"},\"returns\":{\"pairingSuccessful\":\"is true if the pairing precompile call was successful\",\"siganatureIsValid\":\"is true if the signature is valid\"}},\"updateAVSMetadataURI(string)\":{\"details\":\"only callable by the owner\",\"params\":{\"_metadataURI\":\"is the metadata URI for the AVS\"}}},\"title\":\"Primary entrypoint for procuring services from Aligned.\",\"version\":1},\"userdoc\":{\"events\":{\"StaleStakesForbiddenUpdate(bool)\":{\"notice\":\"Emitted when `staleStakesForbiddenUpdate` is set\"}},\"kind\":\"user\",\"methods\":{\"avsDirectory()\":{\"notice\":\"Returns the EigenLayer AVSDirectory contract.\"},\"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))\":{\"notice\":\"This function is called by disperser when it has aggregated all the signatures of the operators that are part of the quorum for a particular taskNumber and is asserting them into onchain. The function checks that the claim for aggregated signatures are valid. The thesis of this procedure entails: - getting the aggregated pubkey of all registered nodes at the time of pre-commit by the disperser (represented by apk in the parameters), - subtracting the pubkeys of all the signers not in the quorum (nonSignerPubkeys) and storing the output in apk to get aggregated pubkey of all operators that are part of quorum. - use this aggregated pubkey to verify the aggregated signature under BLS scheme.\"},\"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])\":{\"notice\":\"Creates a new rewards submission to the EigenLayer RewardsCoordinator contract, to be split amongst the set of stakers delegated to operators who are registered to this `avs`\"},\"deregisterOperatorFromAVS(address)\":{\"notice\":\"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator deregistration from the AVS\"},\"getOperatorRestakedStrategies(address)\":{\"notice\":\"Returns the list of strategies that the operator has potentially restaked on the AVS\"},\"getRestakeableStrategies()\":{\"notice\":\"Returns the list of strategies that the AVS supports for restaking\"},\"registerOperatorToAVS(address,(bytes,bytes32,uint256))\":{\"notice\":\"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator registration with the AVS\"},\"rewardsInitiator()\":{\"notice\":\"The address of the entity that can initiate rewards\"},\"setRewardsInitiator(address)\":{\"notice\":\"Sets the rewards initiator address\"},\"setStaleStakesForbidden(bool)\":{\"notice\":\"/** RegistryCoordinator owner can either enforce or not that operator stakes are staler than the delegation.minWithdrawalDelayBlocks() window.\"},\"staleStakesForbidden()\":{\"notice\":\"If true, check the staleness of the operator stakes and that its within the delegation withdrawalDelayBlocks window.\"},\"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))\":{\"notice\":\"trySignatureAndApkVerification verifies a BLS aggregate signature and the veracity of a calculated G1 Public key\"},\"updateAVSMetadataURI(string)\":{\"notice\":\"Updates the metadata URI for the AVS\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/core/AlignedLayerServiceManager.sol\":\"AlignedLayerServiceManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin-upgrades-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/\",\":@openzeppelin-upgrades/contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/eigenlayer-middleware/lib/ds-test/src/\",\":eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/\",\":eigenlayer-core-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/\",\":eigenlayer-core/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/\",\":eigenlayer-middleware/=lib/eigenlayer-middleware/src/\",\":eigenlayer-scripts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/script/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/contracts/\"]},\"sources\":{\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IAVSDirectory.sol\":{\"keccak256\":\"0x3f67ab9b510b02dc3c07014b49785f1e167401bdb39cc10f737bbf545632d938\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://48d1267e2df6c8ac9b8f419269ff3d23be9b62606ee6b6d2278c27ffebfd73aa\",\"dweb:/ipfs/QmaFyywKCm1eotKjF1evryW8BMQJzPDstZm1wMRW79phXG\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IBeaconChainOracle.sol\":{\"keccak256\":\"0x0fef07aa6179c77198f1514e12e628aa1c876e04f9c181ec853a322179e5be00\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://51438325876cc2d4c77f58488a7e27b488015d1b663c50be6a5cafbd73b9c983\",\"dweb:/ipfs/QmViCuGoYZzi6wtXA8PPKigqVv3KMuNxEVQ1Td9dGqjL18\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol\":{\"keccak256\":\"0xab76a9f4eff865cbb689f627cf98263488765519d7a4ec5ffbcb0ca4972842f9\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://ff57ce18e8350bf39f190645db0988bc0f1279f1872150a114a1b520c38a2914\",\"dweb:/ipfs/QmSsUXkNUqYuJgGRumHTSs9rAaboGjecotcM4xHrdBYWaZ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IETHPOSDeposit.sol\":{\"keccak256\":\"0x2e60e5f4b0da0a0a4e2a07c63141120998559970c21deac743ea0c64a60a880c\",\"license\":\"CC0-1.0\",\"urls\":[\"bzz-raw://e635c346bde5b7ade9bcf35bc733081520cb86015be4fbc6e761e6e9482c4c91\",\"dweb:/ipfs/QmRoeazEnbFn5SPSWAkoFK2gSN9DMp3hJAnrLWuL2sKutz\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPod.sol\":{\"keccak256\":\"0xb50c36ad96b6679bb80fd8331f949cbfbcba0f529026e1421a4d2bae64396eba\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://5719181d780120f1e688c0da276992a8caf185815917f453b3550537c31ed4cc\",\"dweb:/ipfs/QmYprRC5ZEXhz3zAUND5E8Xjn6s5TL8ZF8QbnndVq7aVPR\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol\":{\"keccak256\":\"0xd8a64dbed03d3a5cdbefe1af75968f2dde07f973749c2ef5197bf7187c3e448c\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://27ccc7c1fd9352e9f9b357c9063d255dc0ed9583f43db09f786ac7497d7846b8\",\"dweb:/ipfs/QmeJzuJkE9m2NUNwZSp4tGZEZmih1LeucePup8hzMVDRbG\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol\":{\"keccak256\":\"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324\",\"dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol\":{\"keccak256\":\"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d\",\"dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IRewardsCoordinator.sol\":{\"keccak256\":\"0xeab6f1140a90eb7f107d95bae1e8b2ecfbfe36282d62c9df69e6a564c2c59771\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://785cd2777cdcab3b827b5eef2a4dae02c56db07252fdcefd8dd1016be034dc71\",\"dweb:/ipfs/QmNyDFchTuMeiVoxNEfQw96JVq7DfkohGz1txKXe7HyNbq\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISignatureUtils.sol\":{\"keccak256\":\"0x5e52482a31d94401a8502f3014c4aada1142b4450fc0596dff8e1866a85fe092\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://17dc326c9361bc1453379f26545963557b2883b0c88bc07d4477e04dbcc0cc8c\",\"dweb:/ipfs/QmZXT7A816W5JH2ymirE2ETaJttqztFCsEL22AV8oEfCK9\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol\":{\"keccak256\":\"0x45dfaa2cfdde87f48a6ee38bb6fb739847aef7cf3f6137bdcd8c8a330559ec79\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://1b7f6bd75b42fcaa91ceb7140cb2c41926a1fe6ee2d3161e4fe6186b181ba232\",\"dweb:/ipfs/QmZjbdKiSs33C9i3GDc3sdD39Pz4YPkDoKftowoUF4kHmY\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol\":{\"keccak256\":\"0xc530c6a944b70051fd0dac0222de9a4b5baadeaf94ad194daac6ad8d2ace7420\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://3767df0364ce835b52e786d2851431eb9223fe4747602107505477e162231d73\",\"dweb:/ipfs/QmZkH5bKUygQrJomndNaQqkefVRW4rRefCa8HPJ5HMczxJ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategyManager.sol\":{\"keccak256\":\"0x68bf02a443fc8b2f612eba3d39bfefa5f61f78b549f111cdecec5f2c58236a52\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://76bc6875ce74128b861fdac5fd1c0c72f3cc9bacf67fa4a73721b95fb23959ef\",\"dweb:/ipfs/QmPix4WJmf9fXyMZxfgwXEHBcg7V4NAbRqs4HUf5YrSJcM\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/BeaconChainProofs.sol\":{\"keccak256\":\"0x70d89b05c1c5f47b74a07fbb5a2c05e606fed494e749ea98a9915b7be73df377\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://db1d3bfaee69aef53c8b12b492a17584e6d1ac94610cb8b38aad33e1cdd81af7\",\"dweb:/ipfs/QmfVsMTj1hcf9fMEm5RzvtcBN4dMcAKFBgUUDsNDr5XFpq\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Endian.sol\":{\"keccak256\":\"0xf3b72653ba2567a978d4612703fa5f71c5fcd015d8dac7818468f22772d90a9d\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://cee9d09370d968138d775c39525db4cd0768d60d17be7685519de12444e7dd2f\",\"dweb:/ipfs/QmUdGh8wpMei3edKiEWA6S96s9dRt4ekZKJ4nau356X8xQ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Merkle.sol\":{\"keccak256\":\"0x9095fc29b96d102b10c02d44b3a6fbfa25593ef6ae4a810363ab885b9e6b0f71\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0945132d482d56278edddb1d32209903c4d3839c87ba4317aadd97dc23610d0f\",\"dweb:/ipfs/QmVuM2aLRHxitx4rPx3GTYTBCVNcjYn6sHBRr1biUjLBP5\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354\",\"dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"lib/eigenlayer-middleware/src/BLSSignatureChecker.sol\":{\"keccak256\":\"0x3a5c205c596d3d73c7afa63ffbbfac8204f6d6a26c151ef26b47278981c3c0fe\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://4beb88bf5b7c7e614f0d87b157d7a4b67afbf1cc93f3127622bd66f696799241\",\"dweb:/ipfs/QmWJKb6qsd69bWgpAHX6deCkJqmJdo9oBLQAXJk97gWEE2\"]},\"lib/eigenlayer-middleware/src/ServiceManagerBase.sol\":{\"keccak256\":\"0x7e32ef76daf32e5eb5a93cecf204223e64243f42afe70c7ca71ad3db3925b9c4\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://19c10aa22f2e86e27e946b65c434e541caa6af06fcdde46c3b5e9b42890bd221\",\"dweb:/ipfs/QmPb5qDRdbJTniKSqsbjVhbtwdb72G9hWPYcHtVvj1zBxg\"]},\"lib/eigenlayer-middleware/src/ServiceManagerBaseStorage.sol\":{\"keccak256\":\"0xa544114dbf6d973a815f997a2ac9237c531c40b08c91d3a65a23b152ed621e1e\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://4cf69f9be7d3f3c4184b61b267280a829040973633ea9d95e2ec0dbf70f40a2e\",\"dweb:/ipfs/QmT2HeCJWBLX2p4KAWnyU318MMx9USb2brqCKq1vn2pXpR\"]},\"lib/eigenlayer-middleware/src/interfaces/IBLSApkRegistry.sol\":{\"keccak256\":\"0xc07a5edfd95ab4f16f16a8dc8e76eadf4b0e90fe49db90540d01daaad86898c5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://52b53266450a53da641e82d8ae3be93c5e09f8342b4ea0cc96bb9038d8406354\",\"dweb:/ipfs/QmVuoiQyqPTLCGnyt8zDaxiyaj4ETdgTGKv4MDHWzqEDjp\"]},\"lib/eigenlayer-middleware/src/interfaces/IBLSSignatureChecker.sol\":{\"keccak256\":\"0xee5823a6674e553c71f5e127f08245827eb116d1ad418b5a7f2a9d6985fd95e0\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://94aa26debddca6c0784585340cf891de4c2d7edaa3e5ec7229af9730312a5a51\",\"dweb:/ipfs/QmWbHGbM7eVYTAmrCVaDU8b4YTm9VAN82XgLDR78uHC7vj\"]},\"lib/eigenlayer-middleware/src/interfaces/IIndexRegistry.sol\":{\"keccak256\":\"0x83b2d56aacf27e65c4959a832c5de573e013908c044f6e48ea8284ac5282ae2b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://877af382587e96bb39bcc6db8bb5e4b871db5025c52347d4bee9afeaa4a6cc8d\",\"dweb:/ipfs/QmdnhsQCChzq2o5NgbeT3JxSsEcMm1PC9QW6zenZNPjD9F\"]},\"lib/eigenlayer-middleware/src/interfaces/IRegistry.sol\":{\"keccak256\":\"0x51426a17fb7e54bd3720e2890104e97a8559a13ff248b3d6b840916751c143d3\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://01f91289e6100d528cb8b318cb14ff22a0bc52882c9d4db41585e030cc9ddc25\",\"dweb:/ipfs/Qmb22nqGrsrtNovHRwbMCvDHGENuxAgrWu3Db4p7Er2MHY\"]},\"lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol\":{\"keccak256\":\"0xdd8effb082c1d5957d5ff43d7c59497b32866a6d82bcc7d5efa49ea9bc9b3385\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://cb33a2a1446585b13b7a509e880c60d658d2d2522ec48a9f02e30d2cff54002d\",\"dweb:/ipfs/QmVNG8ZPZkXzNEadPdTj1uBYLiZdCnYfsE5iGU6nJcJXiD\"]},\"lib/eigenlayer-middleware/src/interfaces/IServiceManager.sol\":{\"keccak256\":\"0x7602cfb4397a114a0ed60e70e8e1d729fdcf406b585838181b3cb3ffa6ac9a9a\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b718fa016a13a2a5ce298bc5ea7495cc70cf9c358211c75595d5c9dde9a6cc0f\",\"dweb:/ipfs/QmQNrVmU7P7pRqGBJuTQDkjf3wMDY2kJm7zXdtQwsQTbzY\"]},\"lib/eigenlayer-middleware/src/interfaces/IServiceManagerUI.sol\":{\"keccak256\":\"0x365761699b4a5b7360ee6c75f12606eefc4b0394754c8b8e1e1eefec0cba7ffb\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://ac14ada180b66cbbc5f9de0d6b4bb87b5946d2a9569ae88f2f62aaca47e879a8\",\"dweb:/ipfs/QmcN9xKYF24naNWc6cYah9suz5gJSYE9nPj9eZFWnP35VX\"]},\"lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol\":{\"keccak256\":\"0x1b8b4d757c1b804bc4cf6fbbf8bf8f89ebdeb30a31014751fe7d01deb9d513d4\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://984bf2777b898ed187d28997f9783f5c293a1a1848e3e9aa470ce9183d454c97\",\"dweb:/ipfs/Qme3aTpBrkLu8wYHFMZbCfhXHoZ1M6SpXkeC237T9BuU5B\"]},\"lib/eigenlayer-middleware/src/libraries/BN254.sol\":{\"keccak256\":\"0xb428c8d0c3b325507a88a61a80115493eb88606ccc19ed64a31e11294ab853b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7b6fb935bfe0494e6ff970c8f30a86d5f4cf5c3e0967300c28cd383c043acae\",\"dweb:/ipfs/QmUHfFZaVjLPXhkBmcxrZhAHZaSFQDqXtrLGpjGBQBa5Ki\"]},\"lib/eigenlayer-middleware/src/libraries/BitmapUtils.sol\":{\"keccak256\":\"0x44315ac460be30a6b18fd4df4d1b8afb46653bf4dc06ca9f93c32353fd0605c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da14f2ead3a375b02afd09d4a02edddf7b63a88945746b96789b2473184fdb04\",\"dweb:/ipfs/QmRqcjxa2Vv2MrLdPeAwsktXdWTirapEDsRbJCyYRtKT6g\"]},\"src/core/AlignedLayerServiceManager.sol\":{\"keccak256\":\"0x071db0b2db58624e5887a1ed0bdbd19e79688a379e7b57415f122a11f27962f1\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://23c2c56caa54d6a078df443b96cc0a0336b5e258cd08f9ad951cb2bc95e92eed\",\"dweb:/ipfs/QmUvimvUF4akJy13wfpbzJox8bJShWaF9D7qRM8597HLSw\"]},\"src/core/AlignedLayerServiceManagerStorage.sol\":{\"keccak256\":\"0xcc7cdd02eb9044bc3ee898c154c81a34c4b2efade8a8748106b183ea5c68bbe7\",\"urls\":[\"bzz-raw://47a40b8a9bab3e815b7eea4e45d9fb81046813a94f0bdd1d3ba4dbc6d9b5fde0\",\"dweb:/ipfs/QmPdrATs8bFAgGr4dJGsvDTU3oGBG2J2QoYuQy434xNTN3\"]},\"src/core/IAlignedLayerServiceManager.sol\":{\"keccak256\":\"0xc3f83afcd17a5f5b953906e406e24a09bf58a17c0c7b4cd47bed95322084f473\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6ad3316af22ab60033d7236585512d82acfb604ec7efda34330634791998ab8d\",\"dweb:/ipfs/QmU5BApqXk5STG6LgGccU6Fbd1Tg7WD6AnY79ZiJRM3LvQ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"contract IAVSDirectory","name":"__avsDirectory","type":"address"},{"internalType":"contract IRewardsCoordinator","name":"__rewardsCoordinator","type":"address"},{"internalType":"contract IRegistryCoordinator","name":"__registryCoordinator","type":"address"},{"internalType":"contract IStakeRegistry","name":"__stakeRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"bytes32","name":"batchIdentifierHash","type":"bytes32"}],"type":"error","name":"BatchAlreadyResponded"},{"inputs":[{"internalType":"bytes32","name":"batchIdentifierHash","type":"bytes32"}],"type":"error","name":"BatchAlreadySubmitted"},{"inputs":[{"internalType":"bytes32","name":"batchIdentifierHash","type":"bytes32"}],"type":"error","name":"BatchDoesNotExist"},{"inputs":[{"internalType":"uint256","name":"respondToTaskFeeLimit","type":"uint256"},{"internalType":"uint256","name":"txCost","type":"uint256"}],"type":"error","name":"ExceededMaxRespondFee"},{"inputs":[{"internalType":"address","name":"batcher","type":"address"},{"internalType":"uint256","name":"required","type":"uint256"},{"internalType":"uint256","name":"available","type":"uint256"}],"type":"error","name":"InsufficientFunds"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"type":"error","name":"InvalidDepositAmount"},{"inputs":[{"internalType":"uint256","name":"signedStake","type":"uint256"},{"internalType":"uint256","name":"requiredStake","type":"uint256"}],"type":"error","name":"InvalidQuorumThreshold"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"alignedAggregator","type":"address"}],"type":"error","name":"SenderIsNotAggregator"},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32","indexed":true},{"internalType":"address","name":"senderAddress","type":"address","indexed":false}],"type":"event","name":"BatchVerified","anonymous":false},{"inputs":[{"internalType":"address","name":"batcher","type":"address","indexed":true},{"internalType":"uint256","name":"newBalance","type":"uint256","indexed":false}],"type":"event","name":"BatcherBalanceUpdated","anonymous":false},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32","indexed":true},{"internalType":"address","name":"senderAddress","type":"address","indexed":false},{"internalType":"uint32","name":"taskCreatedBlock","type":"uint32","indexed":false},{"internalType":"string","name":"batchDataPointer","type":"string","indexed":false}],"type":"event","name":"NewBatchV2","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32","indexed":true},{"internalType":"address","name":"senderAddress","type":"address","indexed":false},{"internalType":"uint32","name":"taskCreatedBlock","type":"uint32","indexed":false},{"internalType":"string","name":"batchDataPointer","type":"string","indexed":false},{"internalType":"uint256","name":"respondToTaskFeeLimit","type":"uint256","indexed":false}],"type":"event","name":"NewBatchV3","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"prevRewardsInitiator","type":"address","indexed":false},{"internalType":"address","name":"newRewardsInitiator","type":"address","indexed":false}],"type":"event","name":"RewardsInitiatorUpdated","anonymous":false},{"inputs":[{"internalType":"bool","name":"value","type":"bool","indexed":false}],"type":"event","name":"StaleStakesForbiddenUpdate","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"alignedAggregator","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"avsDirectory","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"batchersBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"batchesState","outputs":[{"internalType":"uint32","name":"taskCreatedBlock","type":"uint32"},{"internalType":"bool","name":"responded","type":"bool"},{"internalType":"uint256","name":"respondToTaskFeeLimit","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"blsApkRegistry","outputs":[{"internalType":"contract IBLSApkRegistry","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"publicInput","type":"bytes"},{"internalType":"bytes32","name":"hash","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"checkPublicInput","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"msgHash","type":"bytes32"},{"internalType":"uint32","name":"referenceBlockNumber","type":"uint32"},{"internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","name":"params","type":"tuple","components":[{"internalType":"uint32[]","name":"nonSignerQuorumBitmapIndices","type":"uint32[]"},{"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G1Point[]","name":"quorumApks","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint32[]","name":"quorumApkIndices","type":"uint32[]"},{"internalType":"uint32[]","name":"totalStakeIndices","type":"uint32[]"},{"internalType":"uint32[][]","name":"nonSignerStakeIndices","type":"uint32[][]"}]}],"stateMutability":"view","type":"function","name":"checkSignatures","outputs":[{"internalType":"struct IBLSSignatureChecker.QuorumStakeTotals","name":"","type":"tuple","components":[{"internalType":"uint96[]","name":"signedStakeForQuorum","type":"uint96[]"},{"internalType":"uint96[]","name":"totalStakeForQuorum","type":"uint96[]"}]},{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"struct IRewardsCoordinator.RewardsSubmission[]","name":"rewardsSubmissions","type":"tuple[]","components":[{"internalType":"struct IRewardsCoordinator.StrategyAndMultiplier[]","name":"strategiesAndMultipliers","type":"tuple[]","components":[{"internalType":"contract IStrategy","name":"strategy","type":"address"},{"internalType":"uint96","name":"multiplier","type":"uint96"}]},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint32","name":"startTimestamp","type":"uint32"},{"internalType":"uint32","name":"duration","type":"uint32"}]}],"stateMutability":"nonpayable","type":"function","name":"createAVSRewardsSubmission"},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"string","name":"batchDataPointer","type":"string"},{"internalType":"uint256","name":"respondToTaskFeeLimit","type":"uint256"}],"stateMutability":"payable","type":"function","name":"createNewTask"},{"inputs":[],"stateMutability":"view","type":"function","name":"delegation","outputs":[{"internalType":"contract IDelegationManager","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"payable","type":"function","name":"depositToBatcher"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"deregisterOperatorFromAVS"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function","name":"getOperatorRestakedStrategies","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getRestakeableStrategies","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"address","name":"_rewardsInitiator","type":"address"},{"internalType":"address","name":"_alignedAggregator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"_alignedAggregator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initializeAggregator"},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"struct ISignatureUtils.SignatureWithSaltAndExpiry","name":"operatorSignature","type":"tuple","components":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"expiry","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"registerOperatorToAVS"},{"inputs":[],"stateMutability":"view","type":"function","name":"registryCoordinator","outputs":[{"internalType":"contract IRegistryCoordinator","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"address","name":"senderAddress","type":"address"},{"internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","name":"nonSignerStakesAndSignature","type":"tuple","components":[{"internalType":"uint32[]","name":"nonSignerQuorumBitmapIndices","type":"uint32[]"},{"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G1Point[]","name":"quorumApks","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint32[]","name":"quorumApkIndices","type":"uint32[]"},{"internalType":"uint32[]","name":"totalStakeIndices","type":"uint32[]"},{"internalType":"uint32[][]","name":"nonSignerStakeIndices","type":"uint32[][]"}]}],"stateMutability":"nonpayable","type":"function","name":"respondToTaskV2"},{"inputs":[],"stateMutability":"view","type":"function","name":"rewardsInitiator","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_alignedAggregator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setAggregator"},{"inputs":[{"internalType":"address","name":"newRewardsInitiator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setRewardsInitiator"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setStaleStakesForbidden"},{"inputs":[],"stateMutability":"view","type":"function","name":"stakeRegistry","outputs":[{"internalType":"contract IStakeRegistry","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"staleStakesForbidden","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"bytes32","name":"msgHash","type":"bytes32"},{"internalType":"struct BN254.G1Point","name":"apk","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]}],"stateMutability":"view","type":"function","name":"trySignatureAndApkVerification","outputs":[{"internalType":"bool","name":"pairingSuccessful","type":"bool"},{"internalType":"bool","name":"siganatureIsValid","type":"bool"}]},{"inputs":[{"internalType":"string","name":"_metadataURI","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"updateAVSMetadataURI"},{"inputs":[{"internalType":"bytes32","name":"proofCommitment","type":"bytes32"},{"internalType":"bytes32","name":"pubInputCommitment","type":"bytes32"},{"internalType":"bytes32","name":"provingSystemAuxDataCommitment","type":"bytes32"},{"internalType":"bytes20","name":"proofGeneratorAddr","type":"bytes20"},{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"bytes","name":"merkleProof","type":"bytes"},{"internalType":"uint256","name":"verificationDataBatchIndex","type":"uint256"},{"internalType":"address","name":"senderAddress","type":"address"}],"stateMutability":"view","type":"function","name":"verifyBatchInclusion","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"proofCommitment","type":"bytes32"},{"internalType":"bytes32","name":"pubInputCommitment","type":"bytes32"},{"internalType":"bytes32","name":"provingSystemAuxDataCommitment","type":"bytes32"},{"internalType":"bytes20","name":"proofGeneratorAddr","type":"bytes20"},{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"bytes","name":"merkleProof","type":"bytes"},{"internalType":"uint256","name":"verificationDataBatchIndex","type":"uint256"}],"stateMutability":"view","type":"function","name":"verifyBatchInclusion","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"withdraw"},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":{"details":"Before signature verification, the function verifies operator stake information. This includes ensuring that the provided `referenceBlockNumber` is correct, i.e., ensure that the stake returned from the specified block number is recent enough and that the stake is either the most recent update for the total stake (of the operator) or latest before the referenceBlockNumber.NOTE: Be careful to ensure `msgHash` is collision-resistant! This method does not hash `msgHash` in any way, so if an attacker is able to pass in an arbitrary value, they may be able to tamper with signature verification.","params":{"msgHash":"is the hash being signed","params":"is the struct containing information on nonsigners, stakes, quorum apks, and the aggregate signature","referenceBlockNumber":"is the block number at which the stake information is being verified"},"returns":{"_0":"quorumStakeTotals is the struct containing the total and signed stake for each quorum","_1":"signatoryRecordHash is the hash of the signatory record, which is used for fraud proofs"}},"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])":{"details":"Only callabe by the permissioned rewardsInitiator addressThe duration of the `rewardsSubmission` cannot exceed `MAX_REWARDS_DURATION`The tokens are sent to the `RewardsCoordinator` contractStrategies must be in ascending order of addresses to check for duplicatesThis function will revert if the `rewardsSubmission` is malformed, e.g. if the `strategies` and `weights` arrays are of non-equal lengths","params":{"rewardsSubmissions":"The rewards submissions being created"}},"deregisterOperatorFromAVS(address)":{"params":{"operator":"The address of the operator to deregister."}},"getOperatorRestakedStrategies(address)":{"details":"This function is intended to be called off-chainNo guarantee is made on whether the operator has shares for a strategy in a quorum or uniqueness of each element in the returned array. The off-chain service should do that validation separately","params":{"operator":"The address of the operator to get restaked strategies for"}},"getRestakeableStrategies()":{"details":"This function is intended to be called off-chainNo guarantee is made on uniqueness of each element in the returned array. The off-chain service should do that validation separately"},"owner()":{"details":"Returns the address of the current owner."},"registerOperatorToAVS(address,(bytes,bytes32,uint256))":{"params":{"operator":"The address of the operator to register.","operatorSignature":"The signature, salt, and expiry of the operator's signature."}},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"setRewardsInitiator(address)":{"details":"only callable by the owner","params":{"newRewardsInitiator":"The new rewards initiator address"}},"setStaleStakesForbidden(bool)":{"params":{"value":"to toggle staleStakesForbidden"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))":{"params":{"apk":"is the claimed G1 public key","apkG2":"is provided G2 public key","msgHash":"is the hash being signed","sigma":"is the G1 point signature"},"returns":{"pairingSuccessful":"is true if the pairing precompile call was successful","siganatureIsValid":"is true if the signature is valid"}},"updateAVSMetadataURI(string)":{"details":"only callable by the owner","params":{"_metadataURI":"is the metadata URI for the AVS"}}},"version":1},"userdoc":{"kind":"user","methods":{"avsDirectory()":{"notice":"Returns the EigenLayer AVSDirectory contract."},"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":{"notice":"This function is called by disperser when it has aggregated all the signatures of the operators that are part of the quorum for a particular taskNumber and is asserting them into onchain. The function checks that the claim for aggregated signatures are valid. The thesis of this procedure entails: - getting the aggregated pubkey of all registered nodes at the time of pre-commit by the disperser (represented by apk in the parameters), - subtracting the pubkeys of all the signers not in the quorum (nonSignerPubkeys) and storing the output in apk to get aggregated pubkey of all operators that are part of quorum. - use this aggregated pubkey to verify the aggregated signature under BLS scheme."},"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])":{"notice":"Creates a new rewards submission to the EigenLayer RewardsCoordinator contract, to be split amongst the set of stakers delegated to operators who are registered to this `avs`"},"deregisterOperatorFromAVS(address)":{"notice":"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator deregistration from the AVS"},"getOperatorRestakedStrategies(address)":{"notice":"Returns the list of strategies that the operator has potentially restaked on the AVS"},"getRestakeableStrategies()":{"notice":"Returns the list of strategies that the AVS supports for restaking"},"registerOperatorToAVS(address,(bytes,bytes32,uint256))":{"notice":"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator registration with the AVS"},"rewardsInitiator()":{"notice":"The address of the entity that can initiate rewards"},"setRewardsInitiator(address)":{"notice":"Sets the rewards initiator address"},"setStaleStakesForbidden(bool)":{"notice":"/** RegistryCoordinator owner can either enforce or not that operator stakes are staler than the delegation.minWithdrawalDelayBlocks() window."},"staleStakesForbidden()":{"notice":"If true, check the staleness of the operator stakes and that its within the delegation withdrawalDelayBlocks window."},"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))":{"notice":"trySignatureAndApkVerification verifies a BLS aggregate signature and the veracity of a calculated G1 Public key"},"updateAVSMetadataURI(string)":{"notice":"Updates the metadata URI for the AVS"}},"version":1}},"settings":{"remappings":["@openzeppelin-upgrades-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/","@openzeppelin-upgrades/contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/","ds-test/=lib/eigenlayer-middleware/lib/ds-test/src/","eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/","eigenlayer-core-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/","eigenlayer-core/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/","eigenlayer-middleware/=lib/eigenlayer-middleware/src/","eigenlayer-scripts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/script/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/core/AlignedLayerServiceManager.sol":"AlignedLayerServiceManager"},"evmVersion":"paris","libraries":{}},"sources":{"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IAVSDirectory.sol":{"keccak256":"0x3f67ab9b510b02dc3c07014b49785f1e167401bdb39cc10f737bbf545632d938","urls":["bzz-raw://48d1267e2df6c8ac9b8f419269ff3d23be9b62606ee6b6d2278c27ffebfd73aa","dweb:/ipfs/QmaFyywKCm1eotKjF1evryW8BMQJzPDstZm1wMRW79phXG"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IBeaconChainOracle.sol":{"keccak256":"0x0fef07aa6179c77198f1514e12e628aa1c876e04f9c181ec853a322179e5be00","urls":["bzz-raw://51438325876cc2d4c77f58488a7e27b488015d1b663c50be6a5cafbd73b9c983","dweb:/ipfs/QmViCuGoYZzi6wtXA8PPKigqVv3KMuNxEVQ1Td9dGqjL18"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol":{"keccak256":"0xab76a9f4eff865cbb689f627cf98263488765519d7a4ec5ffbcb0ca4972842f9","urls":["bzz-raw://ff57ce18e8350bf39f190645db0988bc0f1279f1872150a114a1b520c38a2914","dweb:/ipfs/QmSsUXkNUqYuJgGRumHTSs9rAaboGjecotcM4xHrdBYWaZ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IETHPOSDeposit.sol":{"keccak256":"0x2e60e5f4b0da0a0a4e2a07c63141120998559970c21deac743ea0c64a60a880c","urls":["bzz-raw://e635c346bde5b7ade9bcf35bc733081520cb86015be4fbc6e761e6e9482c4c91","dweb:/ipfs/QmRoeazEnbFn5SPSWAkoFK2gSN9DMp3hJAnrLWuL2sKutz"],"license":"CC0-1.0"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPod.sol":{"keccak256":"0xb50c36ad96b6679bb80fd8331f949cbfbcba0f529026e1421a4d2bae64396eba","urls":["bzz-raw://5719181d780120f1e688c0da276992a8caf185815917f453b3550537c31ed4cc","dweb:/ipfs/QmYprRC5ZEXhz3zAUND5E8Xjn6s5TL8ZF8QbnndVq7aVPR"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol":{"keccak256":"0xd8a64dbed03d3a5cdbefe1af75968f2dde07f973749c2ef5197bf7187c3e448c","urls":["bzz-raw://27ccc7c1fd9352e9f9b357c9063d255dc0ed9583f43db09f786ac7497d7846b8","dweb:/ipfs/QmeJzuJkE9m2NUNwZSp4tGZEZmih1LeucePup8hzMVDRbG"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol":{"keccak256":"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f","urls":["bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324","dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol":{"keccak256":"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49","urls":["bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d","dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IRewardsCoordinator.sol":{"keccak256":"0xeab6f1140a90eb7f107d95bae1e8b2ecfbfe36282d62c9df69e6a564c2c59771","urls":["bzz-raw://785cd2777cdcab3b827b5eef2a4dae02c56db07252fdcefd8dd1016be034dc71","dweb:/ipfs/QmNyDFchTuMeiVoxNEfQw96JVq7DfkohGz1txKXe7HyNbq"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISignatureUtils.sol":{"keccak256":"0x5e52482a31d94401a8502f3014c4aada1142b4450fc0596dff8e1866a85fe092","urls":["bzz-raw://17dc326c9361bc1453379f26545963557b2883b0c88bc07d4477e04dbcc0cc8c","dweb:/ipfs/QmZXT7A816W5JH2ymirE2ETaJttqztFCsEL22AV8oEfCK9"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol":{"keccak256":"0x45dfaa2cfdde87f48a6ee38bb6fb739847aef7cf3f6137bdcd8c8a330559ec79","urls":["bzz-raw://1b7f6bd75b42fcaa91ceb7140cb2c41926a1fe6ee2d3161e4fe6186b181ba232","dweb:/ipfs/QmZjbdKiSs33C9i3GDc3sdD39Pz4YPkDoKftowoUF4kHmY"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol":{"keccak256":"0xc530c6a944b70051fd0dac0222de9a4b5baadeaf94ad194daac6ad8d2ace7420","urls":["bzz-raw://3767df0364ce835b52e786d2851431eb9223fe4747602107505477e162231d73","dweb:/ipfs/QmZkH5bKUygQrJomndNaQqkefVRW4rRefCa8HPJ5HMczxJ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategyManager.sol":{"keccak256":"0x68bf02a443fc8b2f612eba3d39bfefa5f61f78b549f111cdecec5f2c58236a52","urls":["bzz-raw://76bc6875ce74128b861fdac5fd1c0c72f3cc9bacf67fa4a73721b95fb23959ef","dweb:/ipfs/QmPix4WJmf9fXyMZxfgwXEHBcg7V4NAbRqs4HUf5YrSJcM"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/BeaconChainProofs.sol":{"keccak256":"0x70d89b05c1c5f47b74a07fbb5a2c05e606fed494e749ea98a9915b7be73df377","urls":["bzz-raw://db1d3bfaee69aef53c8b12b492a17584e6d1ac94610cb8b38aad33e1cdd81af7","dweb:/ipfs/QmfVsMTj1hcf9fMEm5RzvtcBN4dMcAKFBgUUDsNDr5XFpq"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Endian.sol":{"keccak256":"0xf3b72653ba2567a978d4612703fa5f71c5fcd015d8dac7818468f22772d90a9d","urls":["bzz-raw://cee9d09370d968138d775c39525db4cd0768d60d17be7685519de12444e7dd2f","dweb:/ipfs/QmUdGh8wpMei3edKiEWA6S96s9dRt4ekZKJ4nau356X8xQ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Merkle.sol":{"keccak256":"0x9095fc29b96d102b10c02d44b3a6fbfa25593ef6ae4a810363ab885b9e6b0f71","urls":["bzz-raw://0945132d482d56278edddb1d32209903c4d3839c87ba4317aadd97dc23610d0f","dweb:/ipfs/QmVuM2aLRHxitx4rPx3GTYTBCVNcjYn6sHBRr1biUjLBP5"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888","urls":["bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a","dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e","urls":["bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497","dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol":{"keccak256":"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3","urls":["bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4","dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149","urls":["bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c","dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61","urls":["bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354","dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b","urls":["bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34","dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr"],"license":"MIT"},"lib/eigenlayer-middleware/src/BLSSignatureChecker.sol":{"keccak256":"0x3a5c205c596d3d73c7afa63ffbbfac8204f6d6a26c151ef26b47278981c3c0fe","urls":["bzz-raw://4beb88bf5b7c7e614f0d87b157d7a4b67afbf1cc93f3127622bd66f696799241","dweb:/ipfs/QmWJKb6qsd69bWgpAHX6deCkJqmJdo9oBLQAXJk97gWEE2"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/ServiceManagerBase.sol":{"keccak256":"0x7e32ef76daf32e5eb5a93cecf204223e64243f42afe70c7ca71ad3db3925b9c4","urls":["bzz-raw://19c10aa22f2e86e27e946b65c434e541caa6af06fcdde46c3b5e9b42890bd221","dweb:/ipfs/QmPb5qDRdbJTniKSqsbjVhbtwdb72G9hWPYcHtVvj1zBxg"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/ServiceManagerBaseStorage.sol":{"keccak256":"0xa544114dbf6d973a815f997a2ac9237c531c40b08c91d3a65a23b152ed621e1e","urls":["bzz-raw://4cf69f9be7d3f3c4184b61b267280a829040973633ea9d95e2ec0dbf70f40a2e","dweb:/ipfs/QmT2HeCJWBLX2p4KAWnyU318MMx9USb2brqCKq1vn2pXpR"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IBLSApkRegistry.sol":{"keccak256":"0xc07a5edfd95ab4f16f16a8dc8e76eadf4b0e90fe49db90540d01daaad86898c5","urls":["bzz-raw://52b53266450a53da641e82d8ae3be93c5e09f8342b4ea0cc96bb9038d8406354","dweb:/ipfs/QmVuoiQyqPTLCGnyt8zDaxiyaj4ETdgTGKv4MDHWzqEDjp"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IBLSSignatureChecker.sol":{"keccak256":"0xee5823a6674e553c71f5e127f08245827eb116d1ad418b5a7f2a9d6985fd95e0","urls":["bzz-raw://94aa26debddca6c0784585340cf891de4c2d7edaa3e5ec7229af9730312a5a51","dweb:/ipfs/QmWbHGbM7eVYTAmrCVaDU8b4YTm9VAN82XgLDR78uHC7vj"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IIndexRegistry.sol":{"keccak256":"0x83b2d56aacf27e65c4959a832c5de573e013908c044f6e48ea8284ac5282ae2b","urls":["bzz-raw://877af382587e96bb39bcc6db8bb5e4b871db5025c52347d4bee9afeaa4a6cc8d","dweb:/ipfs/QmdnhsQCChzq2o5NgbeT3JxSsEcMm1PC9QW6zenZNPjD9F"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IRegistry.sol":{"keccak256":"0x51426a17fb7e54bd3720e2890104e97a8559a13ff248b3d6b840916751c143d3","urls":["bzz-raw://01f91289e6100d528cb8b318cb14ff22a0bc52882c9d4db41585e030cc9ddc25","dweb:/ipfs/Qmb22nqGrsrtNovHRwbMCvDHGENuxAgrWu3Db4p7Er2MHY"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol":{"keccak256":"0xdd8effb082c1d5957d5ff43d7c59497b32866a6d82bcc7d5efa49ea9bc9b3385","urls":["bzz-raw://cb33a2a1446585b13b7a509e880c60d658d2d2522ec48a9f02e30d2cff54002d","dweb:/ipfs/QmVNG8ZPZkXzNEadPdTj1uBYLiZdCnYfsE5iGU6nJcJXiD"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IServiceManager.sol":{"keccak256":"0x7602cfb4397a114a0ed60e70e8e1d729fdcf406b585838181b3cb3ffa6ac9a9a","urls":["bzz-raw://b718fa016a13a2a5ce298bc5ea7495cc70cf9c358211c75595d5c9dde9a6cc0f","dweb:/ipfs/QmQNrVmU7P7pRqGBJuTQDkjf3wMDY2kJm7zXdtQwsQTbzY"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IServiceManagerUI.sol":{"keccak256":"0x365761699b4a5b7360ee6c75f12606eefc4b0394754c8b8e1e1eefec0cba7ffb","urls":["bzz-raw://ac14ada180b66cbbc5f9de0d6b4bb87b5946d2a9569ae88f2f62aaca47e879a8","dweb:/ipfs/QmcN9xKYF24naNWc6cYah9suz5gJSYE9nPj9eZFWnP35VX"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol":{"keccak256":"0x1b8b4d757c1b804bc4cf6fbbf8bf8f89ebdeb30a31014751fe7d01deb9d513d4","urls":["bzz-raw://984bf2777b898ed187d28997f9783f5c293a1a1848e3e9aa470ce9183d454c97","dweb:/ipfs/Qme3aTpBrkLu8wYHFMZbCfhXHoZ1M6SpXkeC237T9BuU5B"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/libraries/BN254.sol":{"keccak256":"0xb428c8d0c3b325507a88a61a80115493eb88606ccc19ed64a31e11294ab853b3","urls":["bzz-raw://d7b6fb935bfe0494e6ff970c8f30a86d5f4cf5c3e0967300c28cd383c043acae","dweb:/ipfs/QmUHfFZaVjLPXhkBmcxrZhAHZaSFQDqXtrLGpjGBQBa5Ki"],"license":"MIT"},"lib/eigenlayer-middleware/src/libraries/BitmapUtils.sol":{"keccak256":"0x44315ac460be30a6b18fd4df4d1b8afb46653bf4dc06ca9f93c32353fd0605c5","urls":["bzz-raw://da14f2ead3a375b02afd09d4a02edddf7b63a88945746b96789b2473184fdb04","dweb:/ipfs/QmRqcjxa2Vv2MrLdPeAwsktXdWTirapEDsRbJCyYRtKT6g"],"license":"MIT"},"src/core/AlignedLayerServiceManager.sol":{"keccak256":"0x071db0b2db58624e5887a1ed0bdbd19e79688a379e7b57415f122a11f27962f1","urls":["bzz-raw://23c2c56caa54d6a078df443b96cc0a0336b5e258cd08f9ad951cb2bc95e92eed","dweb:/ipfs/QmUvimvUF4akJy13wfpbzJox8bJShWaF9D7qRM8597HLSw"],"license":"UNLICENSED"},"src/core/AlignedLayerServiceManagerStorage.sol":{"keccak256":"0xcc7cdd02eb9044bc3ee898c154c81a34c4b2efade8a8748106b183ea5c68bbe7","urls":["bzz-raw://47a40b8a9bab3e815b7eea4e45d9fb81046813a94f0bdd1d3ba4dbc6d9b5fde0","dweb:/ipfs/QmPdrATs8bFAgGr4dJGsvDTU3oGBG2J2QoYuQy434xNTN3"],"license":null},"src/core/IAlignedLayerServiceManager.sol":{"keccak256":"0xc3f83afcd17a5f5b953906e406e24a09bf58a17c0c7b4cd47bed95322084f473","urls":["bzz-raw://6ad3316af22ab60033d7236585512d82acfb604ec7efda34330634791998ab8d","dweb:/ipfs/QmU5BApqXk5STG6LgGccU6Fbd1Tg7WD6AnY79ZiJRM3LvQ"],"license":"UNLICENSED"}},"version":1},"id":116} \ No newline at end of file diff --git a/explorer/lib/abi/BatcherPaymentService.json b/explorer/lib/abi/BatcherPaymentService.json new file mode 100644 index 000000000..14b9d1ec3 --- /dev/null +++ b/explorer/lib/abi/BatcherPaymentService.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"UNLOCK_BLOCK_COUNT","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"alignedLayerServiceManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IAlignedLayerServiceManager"}],"stateMutability":"view"},{"type":"function","name":"batcherWallet","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"createNewTask","inputs":[{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"batchDataPointer","type":"string","internalType":"string"},{"name":"leaves","type":"bytes32[]","internalType":"bytes32[]"},{"name":"signatures","type":"tuple[]","internalType":"struct BatcherPaymentService.SignatureData[]","components":[{"name":"signature","type":"bytes","internalType":"bytes"},{"name":"nonce","type":"uint256","internalType":"uint256"}]},{"name":"gasForAggregator","type":"uint256","internalType":"uint256"},{"name":"gasPerProof","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[{"name":"_alignedLayerServiceManager","type":"address","internalType":"contract IAlignedLayerServiceManager"},{"name":"_batcherPaymentServiceOwner","type":"address","internalType":"address"},{"name":"_batcherWallet","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"lock","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"pause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unlock","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unpause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeTo","inputs":[{"name":"newImplementation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"userData","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"unlockBlock","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"user_balances","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"user_nonces","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"user_unlock_block","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"withdraw","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"AdminChanged","inputs":[{"name":"previousAdmin","type":"address","indexed":false,"internalType":"address"},{"name":"newAdmin","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"BalanceLocked","inputs":[{"name":"user","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"BalanceUnlocked","inputs":[{"name":"user","type":"address","indexed":true,"internalType":"address"},{"name":"unlockBlock","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"BeaconUpgraded","inputs":[{"name":"beacon","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"FundsWithdrawn","inputs":[{"name":"recipient","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"PaymentReceived","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TaskCreated","inputs":[{"name":"batchMerkleRoot","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"feePerProof","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"FundsLocked","inputs":[{"name":"unlockBlock","type":"uint256","internalType":"uint256"},{"name":"currentBlock","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InsufficientGasForAggregator","inputs":[{"name":"required","type":"uint256","internalType":"uint256"},{"name":"available","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidMerkleRoot","inputs":[{"name":"expected","type":"bytes32","internalType":"bytes32"},{"name":"actual","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"InvalidNonce","inputs":[{"name":"expected","type":"uint256","internalType":"uint256"},{"name":"actual","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidSignature","inputs":[]},{"type":"error","name":"LeavesNotPowerOfTwo","inputs":[{"name":"leavesQty","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"NoGasForAggregator","inputs":[]},{"type":"error","name":"NoGasPerProof","inputs":[]},{"type":"error","name":"NoLeavesSubmitted","inputs":[]},{"type":"error","name":"NoProofSubmitterSignatures","inputs":[]},{"type":"error","name":"NotEnoughLeaves","inputs":[{"name":"leavesQty","type":"uint256","internalType":"uint256"},{"name":"signaturesQty","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"OnlyBatcherAllowed","inputs":[{"name":"caller","type":"address","internalType":"address"}]},{"type":"error","name":"PayerInsufficientBalance","inputs":[{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"SignerInsufficientBalance","inputs":[{"name":"signer","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"required","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"UserHasNoFundsToLock","inputs":[{"name":"user","type":"address","internalType":"address"}]},{"type":"error","name":"UserHasNoFundsToUnlock","inputs":[{"name":"user","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100e2565b600054610100900460ff161561008e5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100e0576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6080516122a06200011a600039600081816105ce0152818161060e015281816106c001528181610700015261079301526122a06000f3fe60806040526004361061012e5760003560e01c80635c975abb116100ab578063a69df4b51161006f578063a69df4b5146103a5578063bf322658146103ba578063c0c53b8b146103da578063c8910913146103fa578063f2fde38b14610451578063f83d08ba1461047157600080fd5b80635c975abb1461031a578063715018a61461033d5780638456cb59146103525780638da5cb5b14610367578063953ef8071461038557600080fd5b80634d5431ea116100f25780634d5431ea1461026c5780634f1ef286146102a557806352d1902d146102b857806358b96e27146102cd5780635a3f631a1461030557600080fd5b806317d89c4e146101935780632df4e21e146101df5780632e1a7d4d146102155780633659cfe6146102375780633f4ba83a1461025757600080fd5b3661018e5733600090815260fd602052604081208054349290610152908490611c47565b909155505060405134815233907f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be7709060200160405180910390a2005b600080fd5b34801561019f57600080fd5b506101cc6101ae366004611c74565b6001600160a01b0316600090815260fd602052604090206002015490565b6040519081526020015b60405180910390f35b3480156101eb57600080fd5b506101cc6101fa366004611c74565b6001600160a01b0316600090815260fd602052604090205490565b34801561022157600080fd5b50610235610230366004611c91565b610486565b005b34801561024357600080fd5b50610235610252366004611c74565b6105c3565b34801561026357600080fd5b506102356106a3565b34801561027857600080fd5b506101cc610287366004611c74565b6001600160a01b0316600090815260fd602052604090206001015490565b6102356102b3366004611cc0565b6106b5565b3480156102c457600080fd5b506101cc610786565b3480156102d957600080fd5b5060fb546102ed906001600160a01b031681565b6040516001600160a01b0390911681526020016101d6565b34801561031157600080fd5b506101cc606481565b34801561032657600080fd5b5060655460ff1660405190151581526020016101d6565b34801561034957600080fd5b50610235610839565b34801561035e57600080fd5b5061023561084b565b34801561037357600080fd5b506033546001600160a01b03166102ed565b34801561039157600080fd5b5060fc546102ed906001600160a01b031681565b3480156103b157600080fd5b5061023561085b565b3480156103c657600080fd5b506102356103d5366004611dc9565b6108ef565b3480156103e657600080fd5b506102356103f5366004611ead565b610b7a565b34801561040657600080fd5b50610436610415366004611c74565b60fd6020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016101d6565b34801561045d57600080fd5b5061023561046c366004611c74565b610ccf565b34801561047d57600080fd5b50610235610d45565b61048e610db9565b33600090815260fd6020526040902080548211156104d15780546040516321c3d50f60e01b81526004810191909152602481018390526044015b60405180910390fd5b600181015415806104e55750438160010154115b15610512576001810154604051635f6e272d60e11b815260048101919091524360248201526044016104c8565b818160000160008282546105269190611ef8565b909155505060006001820181905560405133917fc5f84593e7086c66a205abab7ee44e1a8e6db58e50bf18ca46cb8239118b5ecd91a2604051339083156108fc029084906000818181858888f19350505050158015610589573d6000803e3d6000fd5b5060405182815233907feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d9060200160405180910390a25050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561060c5760405162461bcd60e51b81526004016104c890611f0f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610655600080516020612224833981519152546001600160a01b031690565b6001600160a01b03161461067b5760405162461bcd60e51b81526004016104c890611f5b565b61068481610dff565b604080516000808252602082019092526106a091839190610e07565b50565b6106ab610f77565b6106b3610fd1565b565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156106fe5760405162461bcd60e51b81526004016104c890611f0f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610747600080516020612224833981519152546001600160a01b031690565b6001600160a01b03161461076d5760405162461bcd60e51b81526004016104c890611f5b565b61077682610dff565b61078282826001610e07565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108265760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016104c8565b5060008051602061222483398151915290565b610841610f77565b6106b36000611023565b610853610f77565b6106b3611075565b610863610db9565b33600090815260fd60205260409020546108925760405163b38340cf60e01b81523360048201526024016104c8565b61089d606443611c47565b33600081815260fd6020526040908190206001018390555190917f43e8fb9d4f009c90c55a3fa108b177b794704d61af7af6f6512db7883f8ed843916108e591815260200190565b60405180910390a2565b60fb546001600160a01b0316331461091c576040516302a5785160e31b81523360048201526024016104c8565b610924610db9565b848360006109323a86611fa7565b905060006109403a86611fa7565b9050600084116109635760405163e5180e0360e01b815260040160405180910390fd5b6000831161098457604051630c9d0b0160e21b815260040160405180910390fd5b828410156109af5760405163320f0a1b60e01b815260048101859052602481018490526044016104c8565b6109ba600185611ef8565b8416156109dd57604051636b1651e160e01b8152600481018590526024016104c8565b600082116109fe57604051633a91b5a960e21b815260040160405180910390fd5b60008111610a1f5760405163459e386d60e01b815260040160405180910390fd5b81610a2a8483611fa7565b11610a5c5781610a3a8483611fa7565b60405163ca3b0e0f60e01b8152600481019290925260248201526044016104c8565b610a6a8a8a8f8b8b866110b2565b60fc60009054906101000a90046001600160a01b03166001600160a01b031663d66eaabd838f8f8f876040518663ffffffff1660e01b8152600401610ab29493929190611fc6565b6000604051808303818588803b158015610acb57600080fd5b505af1158015610adf573d6000803e3d6000fd5b50505050508c7f4f9439a5aed9cb470d2e0756e7d293accfe5223e719a9a1a256646378ec4375882604051610b1691815260200190565b60405180910390a260fb546001600160a01b03166108fc83610b388685611fa7565b610b429190611ef8565b6040518115909202916000818181858888f19350505050158015610b6a573d6000803e3d6000fd5b5050505050505050505050505050565b600054610100900460ff1615808015610b9a5750600054600160ff909116105b80610bb45750303b158015610bb4575060005460ff166001145b610c175760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104c8565b6000805460ff191660011790558015610c3a576000805461ff0019166101001790555b610c42611442565b610c4a611471565b610c5383611023565b60fc80546001600160a01b038087166001600160a01b03199283161790925560fb8054928516929091169190911790558015610cc9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610cd7610f77565b6001600160a01b038116610d3c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104c8565b6106a081611023565b610d4d610db9565b33600090815260fd6020526040902054610d7c5760405163366095e160e11b81523360048201526024016104c8565b33600081815260fd6020526040808220600101829055517fc5f84593e7086c66a205abab7ee44e1a8e6db58e50bf18ca46cb8239118b5ecd9190a2565b60655460ff16156106b35760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104c8565b6106a0610f77565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610e3f57610e3a83611498565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610e99575060408051601f3d908101601f19168201909252610e9691810190612006565b60015b610efc5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016104c8565b6000805160206122248339815191528114610f6b5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016104c8565b50610e3a838383611534565b6033546001600160a01b031633146106b35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104c8565b610fd9611559565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61107d610db9565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110063390565b60006110bf60028761201f565b905060008167ffffffffffffffff8111156110dc576110dc611caa565b604051908082528060200260200182016040528015611105578160200160208202803683370190505b50905060005b828163ffffffff161015611230578888611126836002612041565b63ffffffff1681811061113b5761113b61206d565b9050602002013589898360026111519190612041565b61115c906001612083565b63ffffffff168181106111715761117161206d565b90506020020135604051602001611192929190918252602082015260400190565b60405160208183030381529060405280519060200120828263ffffffff16815181106111c0576111c061206d565b60200260200101818152505061121e89898363ffffffff168181106111e7576111e761206d565b9050602002013587878463ffffffff168181106112065761120661206d565b905060200281019061121891906120ab565b866115a2565b80611228816120cb565b91505061110b565b63ffffffff811685111561126b5761125989898363ffffffff168181106111e7576111e761206d565b80611263816120cb565b915050611230565b61127660028461201f565b92505b8215611369575060005b828163ffffffff161015611357578161129d826002612041565b63ffffffff16815181106112b3576112b361206d565b6020026020010151828260026112c99190612041565b6112d4906001612083565b63ffffffff16815181106112ea576112ea61206d565b602002602001015160405160200161130c929190918252602082015260400190565b60405160208183030381529060405280519060200120828263ffffffff168151811061133a5761133a61206d565b60209081029190910101528061134f816120cb565b915050611283565b61136260028461201f565b9250611279565b60018814156113d65786898960008181106113865761138661206d565b90506020020135146113d15786898960008181106113a6576113a661206d565b905060200201356040516327c4ed9760e21b81526004016104c8929190918252602082015260400190565b611437565b86826000815181106113ea576113ea61206d565b60200260200101511461143757868260008151811061140b5761140b61206d565b60200260200101516040516327c4ed9760e21b81526004016104c8929190918252602082015260400190565b505050505050505050565b600054610100900460ff166114695760405162461bcd60e51b81526004016104c8906120ef565b6106b3611718565b600054610100900460ff166106b35760405162461bcd60e51b81526004016104c8906120ef565b6001600160a01b0381163b6115055760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016104c8565b60008051602061222483398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61153d83611748565b60008251118061154a5750805b15610e3a57610cc98383611788565b60655460ff166106b35760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104c8565b604080516020808201869052848101358284015246606080840191909152835180840390910181526080909201909252805191012060006116236115e6858061213a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869392505061187c9050565b90506001600160a01b03811661164c57604051638baa579f60e01b815260040160405180910390fd5b6001600160a01b038116600090815260fd6020908152604090912060028101549091860135146116a25760028101546040516306427aeb60e01b81526004810191909152602086013560248201526044016104c8565b6002810180549060006116b483612181565b909155505080548411156116f7578054604051632557019960e21b81526001600160a01b03841660048201526024810191909152604481018590526064016104c8565b8381600001600082825461170b9190611ef8565b9091555050505050505050565b600054610100900460ff1661173f5760405162461bcd60e51b81526004016104c8906120ef565b6106b333611023565b61175181611498565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6117f05760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016104c8565b600080846001600160a01b03168460405161180b91906121c8565b600060405180830381855af49150503d8060008114611846576040519150601f19603f3d011682016040523d82523d6000602084013e61184b565b606091505b50915091506118738282604051806060016040528060278152602001612244602791396118a0565b95945050505050565b600080600061188b85856118e0565b9150915061189881611950565b509392505050565b606083156118af5750816118d9565b8251156118bf5782518084602001fd5b8160405162461bcd60e51b81526004016104c891906121da565b9392505050565b6000808251604114156119175760208301516040840151606085015160001a61190b87828585611b0b565b94509450505050611949565b8251604014156119415760208301516040840151611936868383611bf8565b935093505050611949565b506000905060025b9250929050565b60008160048111156119645761196461220d565b141561196d5750565b60018160048111156119815761198161220d565b14156119cf5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104c8565b60028160048111156119e3576119e361220d565b1415611a315760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104c8565b6003816004811115611a4557611a4561220d565b1415611a9e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104c8565b6004816004811115611ab257611ab261220d565b14156106a05760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016104c8565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611b425750600090506003611bef565b8460ff16601b14158015611b5a57508460ff16601c14155b15611b6b5750600090506004611bef565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611bbf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611be857600060019250925050611bef565b9150600090505b94509492505050565b6000806001600160ff1b03831681611c1560ff86901c601b611c47565b9050611c2387828885611b0b565b935093505050935093915050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611c5a57611c5a611c31565b500190565b6001600160a01b03811681146106a057600080fd5b600060208284031215611c8657600080fd5b81356118d981611c5f565b600060208284031215611ca357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215611cd357600080fd5b8235611cde81611c5f565b9150602083013567ffffffffffffffff80821115611cfb57600080fd5b818501915085601f830112611d0f57600080fd5b813581811115611d2157611d21611caa565b604051601f8201601f19908116603f01168101908382118183101715611d4957611d49611caa565b81604052828152886020848701011115611d6257600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60008083601f840112611d9657600080fd5b50813567ffffffffffffffff811115611dae57600080fd5b6020830191508360208260051b850101111561194957600080fd5b600080600080600080600080600060c08a8c031215611de757600080fd5b8935985060208a013567ffffffffffffffff80821115611e0657600080fd5b818c0191508c601f830112611e1a57600080fd5b813581811115611e2957600080fd5b8d6020828501011115611e3b57600080fd5b602083019a508099505060408c0135915080821115611e5957600080fd5b611e658d838e01611d84565b909850965060608c0135915080821115611e7e57600080fd5b50611e8b8c828d01611d84565b9a9d999c50979a96999598959660808101359660a09091013595509350505050565b600080600060608486031215611ec257600080fd5b8335611ecd81611c5f565b92506020840135611edd81611c5f565b91506040840135611eed81611c5f565b809150509250925092565b600082821015611f0a57611f0a611c31565b500390565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6000816000190483118215151615611fc157611fc1611c31565b500290565b848152606060208201528260608201528284608083013760006080848301015260006080601f19601f860116830101905082604083015295945050505050565b60006020828403121561201857600080fd5b5051919050565b60008261203c57634e487b7160e01b600052601260045260246000fd5b500490565b600063ffffffff8083168185168183048111821515161561206457612064611c31565b02949350505050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff8083168185168083038211156120a2576120a2611c31565b01949350505050565b60008235603e198336030181126120c157600080fd5b9190910192915050565b600063ffffffff808316818114156120e5576120e5611c31565b6001019392505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000808335601e1984360301811261215157600080fd5b83018035915067ffffffffffffffff82111561216c57600080fd5b60200191503681900382131561194957600080fd5b600060001982141561219557612195611c31565b5060010190565b60005b838110156121b757818101518382015260200161219f565b83811115610cc95750506000910152565b600082516120c181846020870161219c565b60208152600082518060208401526121f981604085016020870161219c565b601f01601f19169190910160400192915050565b634e487b7160e01b600052602160045260246000fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122045edaae260f3bc7de979fb17fe92438b3edff530545fa931295c692bcd17261a64736f6c634300080c0033","sourceMap":"576:9816:61:-:0;;;1332:4:19;1289:48;;2764:53:61;;;;;;;;;-1:-1:-1;2788:22:61;:20;:22::i;:::-;576:9816;;5388:279:18;5456:13;;;;;;;5455:14;5447:66;;;;-1:-1:-1;;;5447:66:18;;216:2:63;5447:66:18;;;198:21:63;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:63;;;338:37;392:19;;5447:66:18;;;;;;;;5527:12;;5542:15;5527:12;;;:30;5523:138;;;5573:12;:30;;-1:-1:-1;;5573:30:18;5588:15;5573:30;;;;;;5622:28;;564:36:63;;;5622:28:18;;552:2:63;537:18;5622:28:18;;;;;;;5523:138;5388:279::o;422:184:63:-;576:9816:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361061012e5760003560e01c80635c975abb116100ab578063a69df4b51161006f578063a69df4b5146103a5578063bf322658146103ba578063c0c53b8b146103da578063c8910913146103fa578063f2fde38b14610451578063f83d08ba1461047157600080fd5b80635c975abb1461031a578063715018a61461033d5780638456cb59146103525780638da5cb5b14610367578063953ef8071461038557600080fd5b80634d5431ea116100f25780634d5431ea1461026c5780634f1ef286146102a557806352d1902d146102b857806358b96e27146102cd5780635a3f631a1461030557600080fd5b806317d89c4e146101935780632df4e21e146101df5780632e1a7d4d146102155780633659cfe6146102375780633f4ba83a1461025757600080fd5b3661018e5733600090815260fd602052604081208054349290610152908490611c47565b909155505060405134815233907f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be7709060200160405180910390a2005b600080fd5b34801561019f57600080fd5b506101cc6101ae366004611c74565b6001600160a01b0316600090815260fd602052604090206002015490565b6040519081526020015b60405180910390f35b3480156101eb57600080fd5b506101cc6101fa366004611c74565b6001600160a01b0316600090815260fd602052604090205490565b34801561022157600080fd5b50610235610230366004611c91565b610486565b005b34801561024357600080fd5b50610235610252366004611c74565b6105c3565b34801561026357600080fd5b506102356106a3565b34801561027857600080fd5b506101cc610287366004611c74565b6001600160a01b0316600090815260fd602052604090206001015490565b6102356102b3366004611cc0565b6106b5565b3480156102c457600080fd5b506101cc610786565b3480156102d957600080fd5b5060fb546102ed906001600160a01b031681565b6040516001600160a01b0390911681526020016101d6565b34801561031157600080fd5b506101cc606481565b34801561032657600080fd5b5060655460ff1660405190151581526020016101d6565b34801561034957600080fd5b50610235610839565b34801561035e57600080fd5b5061023561084b565b34801561037357600080fd5b506033546001600160a01b03166102ed565b34801561039157600080fd5b5060fc546102ed906001600160a01b031681565b3480156103b157600080fd5b5061023561085b565b3480156103c657600080fd5b506102356103d5366004611dc9565b6108ef565b3480156103e657600080fd5b506102356103f5366004611ead565b610b7a565b34801561040657600080fd5b50610436610415366004611c74565b60fd6020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016101d6565b34801561045d57600080fd5b5061023561046c366004611c74565b610ccf565b34801561047d57600080fd5b50610235610d45565b61048e610db9565b33600090815260fd6020526040902080548211156104d15780546040516321c3d50f60e01b81526004810191909152602481018390526044015b60405180910390fd5b600181015415806104e55750438160010154115b15610512576001810154604051635f6e272d60e11b815260048101919091524360248201526044016104c8565b818160000160008282546105269190611ef8565b909155505060006001820181905560405133917fc5f84593e7086c66a205abab7ee44e1a8e6db58e50bf18ca46cb8239118b5ecd91a2604051339083156108fc029084906000818181858888f19350505050158015610589573d6000803e3d6000fd5b5060405182815233907feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d9060200160405180910390a25050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561060c5760405162461bcd60e51b81526004016104c890611f0f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610655600080516020612224833981519152546001600160a01b031690565b6001600160a01b03161461067b5760405162461bcd60e51b81526004016104c890611f5b565b61068481610dff565b604080516000808252602082019092526106a091839190610e07565b50565b6106ab610f77565b6106b3610fd1565b565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156106fe5760405162461bcd60e51b81526004016104c890611f0f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610747600080516020612224833981519152546001600160a01b031690565b6001600160a01b03161461076d5760405162461bcd60e51b81526004016104c890611f5b565b61077682610dff565b61078282826001610e07565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108265760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016104c8565b5060008051602061222483398151915290565b610841610f77565b6106b36000611023565b610853610f77565b6106b3611075565b610863610db9565b33600090815260fd60205260409020546108925760405163b38340cf60e01b81523360048201526024016104c8565b61089d606443611c47565b33600081815260fd6020526040908190206001018390555190917f43e8fb9d4f009c90c55a3fa108b177b794704d61af7af6f6512db7883f8ed843916108e591815260200190565b60405180910390a2565b60fb546001600160a01b0316331461091c576040516302a5785160e31b81523360048201526024016104c8565b610924610db9565b848360006109323a86611fa7565b905060006109403a86611fa7565b9050600084116109635760405163e5180e0360e01b815260040160405180910390fd5b6000831161098457604051630c9d0b0160e21b815260040160405180910390fd5b828410156109af5760405163320f0a1b60e01b815260048101859052602481018490526044016104c8565b6109ba600185611ef8565b8416156109dd57604051636b1651e160e01b8152600481018590526024016104c8565b600082116109fe57604051633a91b5a960e21b815260040160405180910390fd5b60008111610a1f5760405163459e386d60e01b815260040160405180910390fd5b81610a2a8483611fa7565b11610a5c5781610a3a8483611fa7565b60405163ca3b0e0f60e01b8152600481019290925260248201526044016104c8565b610a6a8a8a8f8b8b866110b2565b60fc60009054906101000a90046001600160a01b03166001600160a01b031663d66eaabd838f8f8f876040518663ffffffff1660e01b8152600401610ab29493929190611fc6565b6000604051808303818588803b158015610acb57600080fd5b505af1158015610adf573d6000803e3d6000fd5b50505050508c7f4f9439a5aed9cb470d2e0756e7d293accfe5223e719a9a1a256646378ec4375882604051610b1691815260200190565b60405180910390a260fb546001600160a01b03166108fc83610b388685611fa7565b610b429190611ef8565b6040518115909202916000818181858888f19350505050158015610b6a573d6000803e3d6000fd5b5050505050505050505050505050565b600054610100900460ff1615808015610b9a5750600054600160ff909116105b80610bb45750303b158015610bb4575060005460ff166001145b610c175760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104c8565b6000805460ff191660011790558015610c3a576000805461ff0019166101001790555b610c42611442565b610c4a611471565b610c5383611023565b60fc80546001600160a01b038087166001600160a01b03199283161790925560fb8054928516929091169190911790558015610cc9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610cd7610f77565b6001600160a01b038116610d3c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104c8565b6106a081611023565b610d4d610db9565b33600090815260fd6020526040902054610d7c5760405163366095e160e11b81523360048201526024016104c8565b33600081815260fd6020526040808220600101829055517fc5f84593e7086c66a205abab7ee44e1a8e6db58e50bf18ca46cb8239118b5ecd9190a2565b60655460ff16156106b35760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104c8565b6106a0610f77565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610e3f57610e3a83611498565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610e99575060408051601f3d908101601f19168201909252610e9691810190612006565b60015b610efc5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016104c8565b6000805160206122248339815191528114610f6b5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016104c8565b50610e3a838383611534565b6033546001600160a01b031633146106b35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104c8565b610fd9611559565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61107d610db9565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110063390565b60006110bf60028761201f565b905060008167ffffffffffffffff8111156110dc576110dc611caa565b604051908082528060200260200182016040528015611105578160200160208202803683370190505b50905060005b828163ffffffff161015611230578888611126836002612041565b63ffffffff1681811061113b5761113b61206d565b9050602002013589898360026111519190612041565b61115c906001612083565b63ffffffff168181106111715761117161206d565b90506020020135604051602001611192929190918252602082015260400190565b60405160208183030381529060405280519060200120828263ffffffff16815181106111c0576111c061206d565b60200260200101818152505061121e89898363ffffffff168181106111e7576111e761206d565b9050602002013587878463ffffffff168181106112065761120661206d565b905060200281019061121891906120ab565b866115a2565b80611228816120cb565b91505061110b565b63ffffffff811685111561126b5761125989898363ffffffff168181106111e7576111e761206d565b80611263816120cb565b915050611230565b61127660028461201f565b92505b8215611369575060005b828163ffffffff161015611357578161129d826002612041565b63ffffffff16815181106112b3576112b361206d565b6020026020010151828260026112c99190612041565b6112d4906001612083565b63ffffffff16815181106112ea576112ea61206d565b602002602001015160405160200161130c929190918252602082015260400190565b60405160208183030381529060405280519060200120828263ffffffff168151811061133a5761133a61206d565b60209081029190910101528061134f816120cb565b915050611283565b61136260028461201f565b9250611279565b60018814156113d65786898960008181106113865761138661206d565b90506020020135146113d15786898960008181106113a6576113a661206d565b905060200201356040516327c4ed9760e21b81526004016104c8929190918252602082015260400190565b611437565b86826000815181106113ea576113ea61206d565b60200260200101511461143757868260008151811061140b5761140b61206d565b60200260200101516040516327c4ed9760e21b81526004016104c8929190918252602082015260400190565b505050505050505050565b600054610100900460ff166114695760405162461bcd60e51b81526004016104c8906120ef565b6106b3611718565b600054610100900460ff166106b35760405162461bcd60e51b81526004016104c8906120ef565b6001600160a01b0381163b6115055760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016104c8565b60008051602061222483398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61153d83611748565b60008251118061154a5750805b15610e3a57610cc98383611788565b60655460ff166106b35760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104c8565b604080516020808201869052848101358284015246606080840191909152835180840390910181526080909201909252805191012060006116236115e6858061213a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869392505061187c9050565b90506001600160a01b03811661164c57604051638baa579f60e01b815260040160405180910390fd5b6001600160a01b038116600090815260fd6020908152604090912060028101549091860135146116a25760028101546040516306427aeb60e01b81526004810191909152602086013560248201526044016104c8565b6002810180549060006116b483612181565b909155505080548411156116f7578054604051632557019960e21b81526001600160a01b03841660048201526024810191909152604481018590526064016104c8565b8381600001600082825461170b9190611ef8565b9091555050505050505050565b600054610100900460ff1661173f5760405162461bcd60e51b81526004016104c8906120ef565b6106b333611023565b61175181611498565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6117f05760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016104c8565b600080846001600160a01b03168460405161180b91906121c8565b600060405180830381855af49150503d8060008114611846576040519150601f19603f3d011682016040523d82523d6000602084013e61184b565b606091505b50915091506118738282604051806060016040528060278152602001612244602791396118a0565b95945050505050565b600080600061188b85856118e0565b9150915061189881611950565b509392505050565b606083156118af5750816118d9565b8251156118bf5782518084602001fd5b8160405162461bcd60e51b81526004016104c891906121da565b9392505050565b6000808251604114156119175760208301516040840151606085015160001a61190b87828585611b0b565b94509450505050611949565b8251604014156119415760208301516040840151611936868383611bf8565b935093505050611949565b506000905060025b9250929050565b60008160048111156119645761196461220d565b141561196d5750565b60018160048111156119815761198161220d565b14156119cf5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104c8565b60028160048111156119e3576119e361220d565b1415611a315760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104c8565b6003816004811115611a4557611a4561220d565b1415611a9e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104c8565b6004816004811115611ab257611ab261220d565b14156106a05760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016104c8565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611b425750600090506003611bef565b8460ff16601b14158015611b5a57508460ff16601c14155b15611b6b5750600090506004611bef565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611bbf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611be857600060019250925050611bef565b9150600090505b94509492505050565b6000806001600160ff1b03831681611c1560ff86901c601b611c47565b9050611c2387828885611b0b565b935093505050935093915050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611c5a57611c5a611c31565b500190565b6001600160a01b03811681146106a057600080fd5b600060208284031215611c8657600080fd5b81356118d981611c5f565b600060208284031215611ca357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215611cd357600080fd5b8235611cde81611c5f565b9150602083013567ffffffffffffffff80821115611cfb57600080fd5b818501915085601f830112611d0f57600080fd5b813581811115611d2157611d21611caa565b604051601f8201601f19908116603f01168101908382118183101715611d4957611d49611caa565b81604052828152886020848701011115611d6257600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60008083601f840112611d9657600080fd5b50813567ffffffffffffffff811115611dae57600080fd5b6020830191508360208260051b850101111561194957600080fd5b600080600080600080600080600060c08a8c031215611de757600080fd5b8935985060208a013567ffffffffffffffff80821115611e0657600080fd5b818c0191508c601f830112611e1a57600080fd5b813581811115611e2957600080fd5b8d6020828501011115611e3b57600080fd5b602083019a508099505060408c0135915080821115611e5957600080fd5b611e658d838e01611d84565b909850965060608c0135915080821115611e7e57600080fd5b50611e8b8c828d01611d84565b9a9d999c50979a96999598959660808101359660a09091013595509350505050565b600080600060608486031215611ec257600080fd5b8335611ecd81611c5f565b92506020840135611edd81611c5f565b91506040840135611eed81611c5f565b809150509250925092565b600082821015611f0a57611f0a611c31565b500390565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6000816000190483118215151615611fc157611fc1611c31565b500290565b848152606060208201528260608201528284608083013760006080848301015260006080601f19601f860116830101905082604083015295945050505050565b60006020828403121561201857600080fd5b5051919050565b60008261203c57634e487b7160e01b600052601260045260246000fd5b500490565b600063ffffffff8083168185168183048111821515161561206457612064611c31565b02949350505050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff8083168185168083038211156120a2576120a2611c31565b01949350505050565b60008235603e198336030181126120c157600080fd5b9190910192915050565b600063ffffffff808316818114156120e5576120e5611c31565b6001019392505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000808335601e1984360301811261215157600080fd5b83018035915067ffffffffffffffff82111561216c57600080fd5b60200191503681900382131561194957600080fd5b600060001982141561219557612195611c31565b5060010190565b60005b838110156121b757818101518382015260200161219f565b83811115610cc95750506000910152565b600082516120c181846020870161219c565b60208152600082518060208401526121f981604085016020870161219c565b601f01601f19169190910160400192915050565b634e487b7160e01b600052602160045260246000fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122045edaae260f3bc7de979fb17fe92438b3edff530545fa931295c692bcd17261a64736f6c634300080c0033","sourceMap":"576:9816:61:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3511:10;3502:20;;;;:8;:20;;;;;:41;;3534:9;;3502:20;:41;;3534:9;;3502:41;:::i;:::-;;;;-1:-1:-1;;3558:38:61;;3586:9;425:25:63;;3574:10:61;;3558:38;;413:2:63;398:18;3558:38:61;;;;;;;576:9816;;;;;10142:115;;;;;;;;;;-1:-1:-1;10142:115:61;;;;;:::i;:::-;-1:-1:-1;;;;;10227:17:61;10201:7;10227:17;;;:8;:17;;;;;:23;;;;10142:115;;;;425:25:63;;;413:2;398:18;10142:115:61;;;;;;;;10017:119;;;;;;;;;;-1:-1:-1;10017:119:61;;;;;:::i;:::-;-1:-1:-1;;;;;10104:17:61;10078:7;10104:17;;;:8;:17;;;;;:25;;10017:119;6187:647;;;;;;;;;;-1:-1:-1;6187:647:61;;;;;:::i;:::-;;:::i;:::-;;3315:197:19;;;;;;;;;;-1:-1:-1;3315:197:19;;;;;:::i;:::-;;:::i;6905:63:61:-;;;;;;;;;;;;;:::i;10263:127::-;;;;;;;;;;-1:-1:-1;10263:127:61;;;;;:::i;:::-;-1:-1:-1;;;;;10354:17:61;10328:7;10354:17;;;:8;:17;;;;;:29;;;;10263:127;3761:222:19;;;;;;:::i;:::-;;:::i;3004:131::-;;;;;;;;;;;;;:::i;2431:28:61:-;;;;;;;;;;-1:-1:-1;2431:28:61;;;;-1:-1:-1;;;;;2431:28:61;;;;;;-1:-1:-1;;;;;2573:32:63;;;2555:51;;2543:2;2528:18;2431:28:61;2409:203:63;751:48:61;;;;;;;;;;;;796:3;751:48;;1858:84:20;;;;;;;;;;-1:-1:-1;1928:7:20;;;;1858:84;;2782:14:63;;2775:22;2757:41;;2745:2;2730:18;1858:84:20;2617:187:63;2071:101:14;;;;;;;;;;;;;:::i;6840:59:61:-;;;;;;;;;;;;;:::i;1441:85:14:-;;;;;;;;;;-1:-1:-1;1513:6:14;;-1:-1:-1;;;;;1513:6:14;1441:85;;2466:61:61;;;;;;;;;;-1:-1:-1;2466:61:61;;;;-1:-1:-1;;;;;2466:61:61;;;5614:317;;;;;;;;;;;;;:::i;3633:1975::-;;;;;;;;;;-1:-1:-1;3633:1975:61;;;;;:::i;:::-;;:::i;2991:443::-;;;;;;;;;;-1:-1:-1;2991:443:61;;;;;:::i;:::-;;:::i;2558:44::-;;;;;;;;;;-1:-1:-1;2558:44:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5667:25:63;;;5723:2;5708:18;;5701:34;;;;5751:18;;;5744:34;5655:2;5640:18;2558:44:61;5465:319:63;2321:198:14;;;;;;;;;;-1:-1:-1;2321:198:14;;;;;:::i;:::-;;:::i;5937:244:61:-;;;;;;;;;;;;;:::i;6187:647::-;1482:19:20;:17;:19::i;:::-;6293:10:61::1;6254:27;6284:20:::0;;;:8:::1;:20;::::0;;;;6318:18;;:27;-1:-1:-1;6314:117:61::1;;;6393:18:::0;;6368:52:::1;::::0;-1:-1:-1;;;6368:52:61;;::::1;::::0;::::1;5963:25:63::0;;;;6004:18;;;5997:34;;;5936:18;;6368:52:61::1;;;;;;;;6314:117;6458:22;::::0;::::1;::::0;:27;;:68:::1;;;6514:12;6489:10;:22;;;:37;6458:68;6441:177;;;6570:22;::::0;::::1;::::0;6558:49:::1;::::0;-1:-1:-1;;;6558:49:61;;::::1;::::0;::::1;5963:25:63::0;;;;6594:12:61::1;6004:18:63::0;;;5997:34;5936:18;;6558:49:61::1;5789:248:63::0;6441:177:61::1;6650:6;6628:10;:18;;;:28;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;6691:1:61::1;6666:22;::::0;::::1;:26:::0;;;6707:25:::1;::::0;6721:10:::1;::::0;6707:25:::1;::::0;::::1;6742:36;::::0;6750:10:::1;::::0;6742:36;::::1;;;::::0;6771:6;;6742:36:::1;::::0;;;6771:6;6750:10;6742:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;6793:34:61::1;::::0;425:25:63;;;6808:10:61::1;::::0;6793:34:::1;::::0;413:2:63;398:18;6793:34:61::1;;;;;;;6244:590;6187:647:::0;:::o;3315:197:19:-;1889:4;-1:-1:-1;;;;;1898:6:19;1881:23;;;1873:80;;;;-1:-1:-1;;;1873:80:19;;;;;;;:::i;:::-;1995:6;-1:-1:-1;;;;;1971:30:19;:20;-1:-1:-1;;;;;;;;;;;1642:65:16;-1:-1:-1;;;;;1642:65:16;;1563:151;1971:20:19;-1:-1:-1;;;;;1971:30:19;;1963:87;;;;-1:-1:-1;;;1963:87:19;;;;;;;:::i;:::-;3398:36:::1;3416:17;3398;:36::i;:::-;3485:12;::::0;;3495:1:::1;3485:12:::0;;;::::1;::::0;::::1;::::0;;;3444:61:::1;::::0;3466:17;;3485:12;3444:21:::1;:61::i;:::-;3315:197:::0;:::o;6905:63:61:-;1334:13:14;:11;:13::i;:::-;6951:10:61::1;:8;:10::i;:::-;6905:63::o:0;3761:222:19:-;1889:4;-1:-1:-1;;;;;1898:6:19;1881:23;;;1873:80;;;;-1:-1:-1;;;1873:80:19;;;;;;;:::i;:::-;1995:6;-1:-1:-1;;;;;1971:30:19;:20;-1:-1:-1;;;;;;;;;;;1642:65:16;-1:-1:-1;;;;;1642:65:16;;1563:151;1971:20:19;-1:-1:-1;;;;;1971:30:19;;1963:87;;;;-1:-1:-1;;;1963:87:19;;;;;;;:::i;:::-;3878:36:::1;3896:17;3878;:36::i;:::-;3924:52;3946:17;3965:4;3971;3924:21;:52::i;:::-;3761:222:::0;;:::o;3004:131::-;3082:7;2324:4;-1:-1:-1;;;;;2333:6:19;2316:23;;2308:92;;;;-1:-1:-1;;;2308:92:19;;7200:2:63;2308:92:19;;;7182:21:63;7239:2;7219:18;;;7212:30;7278:34;7258:18;;;7251:62;7349:26;7329:18;;;7322:54;7393:19;;2308:92:19;6998:420:63;2308:92:19;-1:-1:-1;;;;;;;;;;;;3004:131:19;:::o;2071:101:14:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;6840:59:61:-:0;1334:13:14;:11;:13::i;:::-;6884:8:61::1;:6;:8::i;5614:317::-:0;1482:19:20;:17;:19::i;:::-;5678:10:61::1;5701:1;5669:20:::0;;;:8:::1;:20;::::0;;;;:28;5665:105:::1;;5725:34;::::0;-1:-1:-1;;;5725:34:61;;5748:10:::1;5725:34;::::0;::::1;2555:51:63::0;2528:18;;5725:34:61::1;2409:203:63::0;5665:105:61::1;5815:33;796:3;5815:12;:33;:::i;:::-;5789:10;5780:20;::::0;;;:8:::1;:20;::::0;;;;;;:32:::1;;:68:::0;;;5863:61;5789:10;;5863:61:::1;::::0;::::1;::::0;425:25:63;;413:2;398:18;;279:177;5863:61:61::1;;;;;;;;5614:317::o:0;3633:1975::-;2891:13;;-1:-1:-1;;;;;2891:13:61;2877:10;:27;2873:95;;2927:30;;-1:-1:-1;;;2927:30:61;;2946:10;2927:30;;;2555:51:63;2528:18;;2927:30:61;2409:203:63;2873:95:61;1482:19:20::1;:17;:19::i;:::-;4034:6:61::0;4081:10;4014:17:::2;4136:30;4155:11;4136:16:::0;:30:::2;:::i;:::-;4109:57:::0;-1:-1:-1;4176:19:61::2;4198:25;4212:11;4198::::0;:25:::2;:::i;:::-;4176:47;;4251:1;4238:9;:14;4234:71;;4275:19;;-1:-1:-1::0;;;4275:19:61::2;;;;;;;;;;;4234:71;4336:1;4319:13;:18;4315:84;;4360:28;;-1:-1:-1::0;;;4360:28:61::2;;;;;;;;;;;4315:84;4425:13;4413:9;:25;4409:104;;;4461:41;::::0;-1:-1:-1;;;4461:41:61;;::::2;::::0;::::2;5963:25:63::0;;;6004:18;;;5997:34;;;5936:18;;4461:41:61::2;5789:248:63::0;4409:104:61::2;4541:13;4553:1;4541:9:::0;:13:::2;:::i;:::-;4528:27:::0;::::2;4527:34:::0;4523:102:::2;;4584:30;::::0;-1:-1:-1;;;4584:30:61;;::::2;::::0;::::2;425:25:63::0;;;398:18;;4584:30:61::2;279:177:63::0;4523:102:61::2;4659:1;4639:16;:21;4635:79;;4683:20;;-1:-1:-1::0;;;4683:20:61::2;;;;;;;;;;;4635:79;4743:1;4728:11;:16;4724:69;;4767:15;;-1:-1:-1::0;;;4767:15:61::2;;;;;;;;;;;4724:69;4838:16:::0;4807:27:::2;4821:13:::0;4807:11;:27:::2;:::i;:::-;:47;4803:206;;4923:16:::0;4957:27:::2;4971:13:::0;4957:11;:27:::2;:::i;:::-;4877:121;::::0;-1:-1:-1;;;4877:121:61;;::::2;::::0;::::2;5963:25:63::0;;;;6004:18;;;5997:34;5936:18;;4877:121:61::2;5789:248:63::0;4803:206:61::2;5019:143;5068:6;;5088:15;5117:10;;5141:11;5019:35;:143::i;:::-;5266:26;;;;;;;;;-1:-1:-1::0;;;;;5266:26:61::2;-1:-1:-1::0;;;;;5266:40:61::2;;5314:16;5345:15;5374:16;;5404;5266:164;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;5458:15;5446:41;5475:11;5446:41;;;;425:25:63::0;;413:2;398:18;;279:177;5446:41:61::2;;;;;;;;5506:13;::::0;-1:-1:-1;;;;;5506:13:61::2;5498:103;5575:16:::0;5544:27:::2;5558:13:::0;5544:11;:27:::2;:::i;:::-;5543:48;;;;:::i;:::-;5498:103;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;;;;;;::::2;;;;;;;;;;;;;::::0;::::2;;;;;;4004:1604;;;;3633:1975:::0;;;;;;;;;:::o;2991:443::-;3111:19:18;3134:13;;;;;;3133:14;;3179:34;;;;-1:-1:-1;3197:12:18;;3212:1;3197:12;;;;:16;3179:34;3178:108;;;-1:-1:-1;3258:4:18;1476:19:21;:23;;;3219:66:18;;-1:-1:-1;3268:12:18;;;;;:17;3219:66;3157:201;;;;-1:-1:-1;;;3157:201:18;;8338:2:63;3157:201:18;;;8320:21:63;8377:2;8357:18;;;8350:30;8416:34;8396:18;;;8389:62;-1:-1:-1;;;8467:18:63;;;8460:44;8521:19;;3157:201:18;8136:410:63;3157:201:18;3368:12;:16;;-1:-1:-1;;3368:16:18;3383:1;3368:16;;;3394:65;;;;3428:13;:20;;-1:-1:-1;;3428:20:18;;;;;3394:65;3188:16:61::1;:14;:16::i;:::-;3239:24;:22;:24::i;:::-;3273:47;3292:27;3273:18;:47::i;:::-;3331:26;:56:::0;;-1:-1:-1;;;;;3331:56:61;;::::1;-1:-1:-1::0;;;;;;3331:56:61;;::::1;;::::0;;;3397:13:::1;:30:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;3479:99:18;;;;3529:5;3513:21;;-1:-1:-1;;3513:21:18;;;3553:14;;-1:-1:-1;8703:36:63;;3553:14:18;;8691:2:63;8676:18;3553:14:18;;;;;;;3479:99;3101:483;2991:443:61;;;:::o;2321:198:14:-;1334:13;:11;:13::i;:::-;-1:-1:-1;;;;;2409:22:14;::::1;2401:73;;;::::0;-1:-1:-1;;;2401:73:14;;8952:2:63;2401:73:14::1;::::0;::::1;8934:21:63::0;8991:2;8971:18;;;8964:30;9030:34;9010:18;;;9003:62;-1:-1:-1;;;9081:18:63;;;9074:36;9127:19;;2401:73:14::1;8750:402:63::0;2401:73:14::1;2484:28;2503:8;2484:18;:28::i;5937:244:61:-:0;1482:19:20;:17;:19::i;:::-;5999:10:61::1;6022:1;5990:20:::0;;;:8:::1;:20;::::0;;;;:28;5986:103:::1;;6046:32;::::0;-1:-1:-1;;;6046:32:61;;6067:10:::1;6046:32;::::0;::::1;2555:51:63::0;2528:18;;6046:32:61::1;2409:203:63::0;5986:103:61::1;6107:10;6133:1;6098:20:::0;;;:8:::1;:20;::::0;;;;;:32:::1;;:36:::0;;;6149:25;::::1;::::0;6133:1;6149:25:::1;5937:244::o:0;2010:106:20:-;1928:7;;;;2079:9;2071:38;;;;-1:-1:-1;;;2071:38:20;;9359:2:63;2071:38:20;;;9341:21:63;9398:2;9378:18;;;9371:30;-1:-1:-1;;;9417:18:63;;;9410:46;9473:18;;2071:38:20;9157:340:63;6974:171:61;1334:13:14;:11;:13::i;2938:974:16:-;951:66;3384:59;;;3380:526;;;3459:37;3478:17;3459:18;:37::i;:::-;2938:974;;;:::o;3380:526::-;3560:17;-1:-1:-1;;;;;3531:61:16;;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3531:63:16;;;;;;;;-1:-1:-1;;3531:63:16;;;;;;;;;;;;:::i;:::-;;;3527:302;;3758:56;;-1:-1:-1;;;3758:56:16;;9893:2:63;3758:56:16;;;9875:21:63;9932:2;9912:18;;;9905:30;9971:34;9951:18;;;9944:62;-1:-1:-1;;;10022:18:63;;;10015:44;10076:19;;3758:56:16;9691:410:63;3527:302:16;-1:-1:-1;;;;;;;;;;;3644:28:16;;3636:82;;;;-1:-1:-1;;;3636:82:16;;10308:2:63;3636:82:16;;;10290:21:63;10347:2;10327:18;;;10320:30;10386:34;10366:18;;;10359:62;-1:-1:-1;;;10437:18:63;;;10430:39;10486:19;;3636:82:16;10106:405:63;3636:82:16;3595:138;3842:53;3860:17;3879:4;3885:9;3842:17;:53::i;1599:130:14:-;1513:6;;-1:-1:-1;;;;;1513:6:14;929:10:22;1662:23:14;1654:68;;;;-1:-1:-1;;;1654:68:14;;10718:2:63;1654:68:14;;;10700:21:63;;;10737:18;;;10730:30;10796:34;10776:18;;;10769:62;10848:18;;1654:68:14;10516:356:63;2676:117:20;1729:16;:14;:16::i;:::-;2734:7:::1;:15:::0;;-1:-1:-1;;2734:15:20::1;::::0;;2764:22:::1;929:10:22::0;2773:12:20::1;2764:22;::::0;-1:-1:-1;;;;;2573:32:63;;;2555:51;;2543:2;2528:18;2764:22:20::1;;;;;;;2676:117::o:0;2673:187:14:-;2765:6;;;-1:-1:-1;;;;;2781:17:14;;;-1:-1:-1;;;;;;2781:17:14;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;2429:115:20:-;1482:19;:17;:19::i;:::-;2488:7:::1;:14:::0;;-1:-1:-1;;2488:14:20::1;2498:4;2488:14;::::0;;2517:20:::1;2524:12;929:10:22::0;;850:96;7151:1938:61;7362:23;7388:17;7404:1;7388:6;:17;:::i;:::-;7362:43;;7415:22;7454:15;7440:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7440:30:61;;7415:55;;7481:8;7630:315;7646:15;7642:1;:19;;;7630:315;;;7737:6;;7744:5;7748:1;7744;:5;:::i;:::-;7737:13;;;;;;;;;:::i;:::-;;;;;;;7752:6;;7763:1;7759;:5;;;;:::i;:::-;:9;;7767:1;7759:9;:::i;:::-;7752:17;;;;;;;;;:::i;:::-;;;;;;;7720:50;;;;;;;;11888:19:63;;;11932:2;11923:12;;11916:28;11969:2;11960:12;;11731:247;7720:50:61;;;;;;;;;;;;;7693:91;;;;;;7682:5;7688:1;7682:8;;;;;;;;;;:::i;:::-;;;;;;:102;;;;;7799:135;7851:6;;7858:1;7851:9;;;;;;;;;:::i;:::-;;;;;;;7878:10;;7889:1;7878:13;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;7909:11;7799:34;:135::i;:::-;7663:3;;;;:::i;:::-;;;;7630:315;;;8007:21;;;;-1:-1:-1;8000:195:61;;;8049:135;8101:6;;8108:1;8101:9;;;;;;;;;:::i;8049:135::-;8030:3;;;;:::i;:::-;;;;8000:195;;;8260:20;8279:1;8260:20;;:::i;:::-;;;8356:435;8363:20;;8356:435;;-1:-1:-1;8517:1:61;8508:179;8524:15;8520:1;:19;;;8508:179;;;8623:5;8629;8633:1;8629;:5;:::i;:::-;8623:12;;;;;;;;;;:::i;:::-;;;;;;;8637:5;8647:1;8643;:5;;;;:::i;:::-;:9;;8651:1;8643:9;:::i;:::-;8637:16;;;;;;;;;;:::i;:::-;;;;;;;8606:48;;;;;;;;11888:19:63;;;11932:2;11923:12;;11916:28;11969:2;11960:12;;11731:247;8606:48:61;;;;;;;;;;;;;8575:97;;;;;;8564:5;8570:1;8564:8;;;;;;;;;;:::i;:::-;;;;;;;;;;:108;8541:3;;;;:::i;:::-;;;;8508:179;;;8760:20;8779:1;8760:20;;:::i;:::-;;;8356:435;;;8822:1;8805:18;;8801:282;;;8856:15;8843:6;;8850:1;8843:9;;;;;;;:::i;:::-;;;;;;;:28;8839:119;;8916:15;8933:6;;8940:1;8933:9;;;;;;;:::i;:::-;;;;;;;8898:45;;-1:-1:-1;;;8898:45:61;;;;;;;;5963:25:63;;;6019:2;6004:18;;5997:34;5951:2;5936:18;;5789:248;8839:119:61;8801:282;;;8990:15;8978:5;8984:1;8978:8;;;;;;;;:::i;:::-;;;;;;;:27;8974:109;;9046:15;9063:5;9069:1;9063:8;;;;;;;;:::i;:::-;;;;;;;9028:44;;-1:-1:-1;;;9028:44:61;;;;;;;;5963:25:63;;;6019:2;6004:18;;5997:34;5951:2;5936:18;;5789:248;8974:109:61;7352:1737;;;7151:1938;;;;;;:::o;1003:95:14:-;4910:13:18;;;;;;;4902:69;;;;-1:-1:-1;;;4902:69:18;;;;;;;:::i;:::-;1065:26:14::1;:24;:26::i;1042:67:19:-:0;4910:13:18;;;;;;;4902:69;;;;-1:-1:-1;;;4902:69:18;;;;;;;:::i;1805:281:16:-;-1:-1:-1;;;;;1476:19:21;;;1878:106:16;;;;-1:-1:-1;;;1878:106:16;;13392:2:63;1878:106:16;;;13374:21:63;13431:2;13411:18;;;13404:30;13470:34;13450:18;;;13443:62;-1:-1:-1;;;13521:18:63;;;13514:43;13574:19;;1878:106:16;13190:409:63;1878:106:16;-1:-1:-1;;;;;;;;;;;1994:85:16;;-1:-1:-1;;;;;;1994:85:16;-1:-1:-1;;;;;1994:85:16;;;;;;;;;;1805:281::o;2478:288::-;2616:29;2627:17;2616:10;:29::i;:::-;2673:1;2659:4;:11;:15;:28;;;;2678:9;2659:28;2655:105;;;2703:46;2725:17;2744:4;2703:21;:46::i;2188:106:20:-;1928:7;;;;2246:41;;;;-1:-1:-1;;;2246:41:20;;13806:2:63;2246:41:20;;;13788:21:63;13845:2;13825:18;;;13818:30;-1:-1:-1;;;13864:18:63;;;13857:50;13924:18;;2246:41:20;13604:344:63;9095:916:61;9304:58;;;9327:19;9304:58;;;14138:19:63;;;9327::61;;;;14173:12:63;;;14166:28;9348:13:61;14210:12:63;;;;14203:28;;;;9304:58:61;;;;;;;;;;14247:12:63;;;;9304:58:61;;;9281:91;;;;;-1:-1:-1;9400:43:61;9419:23;9327:19;;9419:23;:::i;:::-;9400:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9400:10:61;;:43;-1:-1:-1;;9400:18:61;:43;-1:-1:-1;9400:43:61:i;:::-;9383:60;-1:-1:-1;;;;;;9458:20:61;;9454:76;;9501:18;;-1:-1:-1;;;9501:18:61;;;;;;;;;;;9454:76;-1:-1:-1;;;;;9570:16:61;;9540:27;9570:16;;;:8;:16;;;;;;;;9601;;;;9570;;9621:19;;;9601:39;9597:128;;9676:16;;;;9663:51;;-1:-1:-1;;;9663:51:61;;;;;5963:25:63;;;;9694:19:61;;;;6004:18:63;;;5997:34;5936:18;;9663:51:61;5789:248:63;9597:128:61;9734:16;;;:18;;;:16;:18;;;:::i;:::-;;;;-1:-1:-1;;9767:18:61;;:32;-1:-1:-1;9763:198:61;;;9889:18;;9822:128;;-1:-1:-1;;;9822:128:61;;-1:-1:-1;;;;;15156:32:63;;9822:128:61;;;15138:51:63;15205:18;;;15198:34;;;;15248:18;;;15241:34;;;15111:18;;9822:128:61;14936:345:63;9763:198:61;9993:11;9971:10;:18;;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;;9095:916:61:o;1104:111:14:-;4910:13:18;;;;;;;4902:69;;;;-1:-1:-1;;;4902:69:18;;;;;;;:::i;:::-;1176:32:14::1;929:10:22::0;1176:18:14::1;:32::i;2192:152:16:-:0;2258:37;2277:17;2258:18;:37::i;:::-;2310:27;;-1:-1:-1;;;;;2310:27:16;;;;;;;;2192:152;:::o;7088:455::-;7171:12;-1:-1:-1;;;;;1476:19:21;;;7195:88:16;;;;-1:-1:-1;;;7195:88:16;;15488:2:63;7195:88:16;;;15470:21:63;15527:2;15507:18;;;15500:30;15566:34;15546:18;;;15539:62;-1:-1:-1;;;15617:18:63;;;15610:36;15663:19;;7195:88:16;15286:402:63;7195:88:16;7354:12;7368:23;7395:6;-1:-1:-1;;;;;7395:19:16;7415:4;7395:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7353:67;;;;7437:99;7473:7;7482:10;7437:99;;;;;;;;;;;;;;;;;:35;:99::i;:::-;7430:106;7088:455;-1:-1:-1;;;;;7088:455:16:o;4402:227:33:-;4480:7;4500:17;4519:18;4541:27;4552:4;4558:9;4541:10;:27::i;:::-;4499:69;;;;4578:18;4590:5;4578:11;:18::i;:::-;-1:-1:-1;4613:9:33;4402:227;-1:-1:-1;;;4402:227:33:o;6622:742:21:-;6768:12;6796:7;6792:566;;;-1:-1:-1;6826:10:21;6819:17;;6792:566;6937:17;;:21;6933:415;;7181:10;7175:17;7241:15;7228:10;7224:2;7220:19;7213:44;6933:415;7320:12;7313:20;;-1:-1:-1;;;7313:20:21;;;;;;;;:::i;6933:415::-;6622:742;;;;;:::o;2243:1373:33:-;2324:7;2333:12;2554:9;:16;2574:2;2554:22;2550:1060;;;2890:4;2875:20;;2869:27;2939:4;2924:20;;2918:27;2996:4;2981:20;;2975:27;2592:9;2967:36;3037:25;3048:4;2967:36;2869:27;2918;3037:10;:25::i;:::-;3030:32;;;;;;;;;2550:1060;3083:9;:16;3103:2;3083:22;3079:531;;;3399:4;3384:20;;3378:27;3449:4;3434:20;;3428:27;3489:23;3500:4;3378:27;3428;3489:10;:23::i;:::-;3482:30;;;;;;;;3079:531;-1:-1:-1;3559:1:33;;-1:-1:-1;3563:35:33;3079:531;2243:1373;;;;;:::o;548:631::-;625:20;616:5;:29;;;;;;;;:::i;:::-;;612:561;;;548:631;:::o;612:561::-;721:29;712:5;:38;;;;;;;;:::i;:::-;;708:465;;;766:34;;-1:-1:-1;;;766:34:33;;16957:2:63;766:34:33;;;16939:21:63;16996:2;16976:18;;;16969:30;17035:26;17015:18;;;17008:54;17079:18;;766:34:33;16755:348:63;708:465:33;830:35;821:5;:44;;;;;;;;:::i;:::-;;817:356;;;881:41;;-1:-1:-1;;;881:41:33;;17310:2:63;881:41:33;;;17292:21:63;17349:2;17329:18;;;17322:30;17388:33;17368:18;;;17361:61;17439:18;;881:41:33;17108:355:63;817:356:33;952:30;943:5;:39;;;;;;;;:::i;:::-;;939:234;;;998:44;;-1:-1:-1;;;998:44:33;;17670:2:63;998:44:33;;;17652:21:63;17709:2;17689:18;;;17682:30;17748:34;17728:18;;;17721:62;-1:-1:-1;;;17799:18:63;;;17792:32;17841:19;;998:44:33;17468:398:63;939:234:33;1072:30;1063:5;:39;;;;;;;;:::i;:::-;;1059:114;;;1118:44;;-1:-1:-1;;;1118:44:33;;18073:2:63;1118:44:33;;;18055:21:63;18112:2;18092:18;;;18085:30;18151:34;18131:18;;;18124:62;-1:-1:-1;;;18202:18:63;;;18195:32;18244:19;;1118:44:33;17871:398:63;5810:1603:33;5936:7;;6860:66;6847:79;;6843:161;;;-1:-1:-1;6958:1:33;;-1:-1:-1;6962:30:33;6942:51;;6843:161;7017:1;:7;;7022:2;7017:7;;:18;;;;;7028:1;:7;;7033:2;7028:7;;7017:18;7013:100;;;-1:-1:-1;7067:1:33;;-1:-1:-1;7071:30:33;7051:51;;7013:100;7224:24;;;7207:14;7224:24;;;;;;;;;18501:25:63;;;18574:4;18562:17;;18542:18;;;18535:45;;;;18596:18;;;18589:34;;;18639:18;;;18632:34;;;7224:24:33;;18473:19:63;;7224:24:33;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7224:24:33;;-1:-1:-1;;7224:24:33;;;-1:-1:-1;;;;;;;7262:20:33;;7258:101;;7314:1;7318:29;7298:50;;;;;;;7258:101;7377:6;-1:-1:-1;7385:20:33;;-1:-1:-1;5810:1603:33;;;;;;;;:::o;4883:336::-;4993:7;;-1:-1:-1;;;;;5038:80:33;;4993:7;5144:25;5160:3;5145:18;;;5167:2;5144:25;:::i;:::-;5128:42;;5187:25;5198:4;5204:1;5207;5210;5187:10;:25::i;:::-;5180:32;;;;;;4883:336;;;;;;:::o;14:127:63:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:128;186:3;217:1;213:6;210:1;207:13;204:39;;;223:18;;:::i;:::-;-1:-1:-1;259:9:63;;146:128::o;461:131::-;-1:-1:-1;;;;;536:31:63;;526:42;;516:70;;582:1;579;572:12;597:247;656:6;709:2;697:9;688:7;684:23;680:32;677:52;;;725:1;722;715:12;677:52;764:9;751:23;783:31;808:5;783:31;:::i;849:180::-;908:6;961:2;949:9;940:7;936:23;932:32;929:52;;;977:1;974;967:12;929:52;-1:-1:-1;1000:23:63;;849:180;-1:-1:-1;849:180:63:o;1034:127::-;1095:10;1090:3;1086:20;1083:1;1076:31;1126:4;1123:1;1116:15;1150:4;1147:1;1140:15;1166:1056;1243:6;1251;1304:2;1292:9;1283:7;1279:23;1275:32;1272:52;;;1320:1;1317;1310:12;1272:52;1359:9;1346:23;1378:31;1403:5;1378:31;:::i;:::-;1428:5;-1:-1:-1;1484:2:63;1469:18;;1456:32;1507:18;1537:14;;;1534:34;;;1564:1;1561;1554:12;1534:34;1602:6;1591:9;1587:22;1577:32;;1647:7;1640:4;1636:2;1632:13;1628:27;1618:55;;1669:1;1666;1659:12;1618:55;1705:2;1692:16;1727:2;1723;1720:10;1717:36;;;1733:18;;:::i;:::-;1808:2;1802:9;1776:2;1862:13;;-1:-1:-1;;1858:22:63;;;1882:2;1854:31;1850:40;1838:53;;;1906:18;;;1926:22;;;1903:46;1900:72;;;1952:18;;:::i;:::-;1992:10;1988:2;1981:22;2027:2;2019:6;2012:18;2067:7;2062:2;2057;2053;2049:11;2045:20;2042:33;2039:53;;;2088:1;2085;2078:12;2039:53;2144:2;2139;2135;2131:11;2126:2;2118:6;2114:15;2101:46;2189:1;2184:2;2179;2171:6;2167:15;2163:24;2156:35;2210:6;2200:16;;;;;;;1166:1056;;;;;:::o;3054:367::-;3117:8;3127:6;3181:3;3174:4;3166:6;3162:17;3158:27;3148:55;;3199:1;3196;3189:12;3148:55;-1:-1:-1;3222:20:63;;3265:18;3254:30;;3251:50;;;3297:1;3294;3287:12;3251:50;3334:4;3326:6;3322:17;3310:29;;3394:3;3387:4;3377:6;3374:1;3370:14;3362:6;3358:27;3354:38;3351:47;3348:67;;;3411:1;3408;3401:12;3426:1463;3630:6;3638;3646;3654;3662;3670;3678;3686;3694;3747:3;3735:9;3726:7;3722:23;3718:33;3715:53;;;3764:1;3761;3754:12;3715:53;3800:9;3787:23;3777:33;;3861:2;3850:9;3846:18;3833:32;3884:18;3925:2;3917:6;3914:14;3911:34;;;3941:1;3938;3931:12;3911:34;3979:6;3968:9;3964:22;3954:32;;4024:7;4017:4;4013:2;4009:13;4005:27;3995:55;;4046:1;4043;4036:12;3995:55;4086:2;4073:16;4112:2;4104:6;4101:14;4098:34;;;4128:1;4125;4118:12;4098:34;4173:7;4168:2;4159:6;4155:2;4151:15;4147:24;4144:37;4141:57;;;4194:1;4191;4184:12;4141:57;4225:2;4221;4217:11;4207:21;;4247:6;4237:16;;;4306:2;4295:9;4291:18;4278:32;4262:48;;4335:2;4325:8;4322:16;4319:36;;;4351:1;4348;4341:12;4319:36;4390:72;4454:7;4443:8;4432:9;4428:24;4390:72;:::i;:::-;4481:8;;-1:-1:-1;4364:98:63;-1:-1:-1;4569:2:63;4554:18;;4541:32;;-1:-1:-1;4585:16:63;;;4582:36;;;4614:1;4611;4604:12;4582:36;;4653:72;4717:7;4706:8;4695:9;4691:24;4653:72;:::i;:::-;3426:1463;;;;-1:-1:-1;3426:1463:63;;;;;;4627:98;;4826:3;4811:19;;4798:33;;4878:3;4863:19;;;4850:33;;-1:-1:-1;3426:1463:63;-1:-1:-1;;;;3426:1463:63:o;4894:566::-;5008:6;5016;5024;5077:2;5065:9;5056:7;5052:23;5048:32;5045:52;;;5093:1;5090;5083:12;5045:52;5132:9;5119:23;5151:31;5176:5;5151:31;:::i;:::-;5201:5;-1:-1:-1;5258:2:63;5243:18;;5230:32;5271:33;5230:32;5271:33;:::i;:::-;5323:7;-1:-1:-1;5382:2:63;5367:18;;5354:32;5395:33;5354:32;5395:33;:::i;:::-;5447:7;5437:17;;;4894:566;;;;;:::o;6042:125::-;6082:4;6110:1;6107;6104:8;6101:34;;;6115:18;;:::i;:::-;-1:-1:-1;6152:9:63;;6042:125::o;6172:408::-;6374:2;6356:21;;;6413:2;6393:18;;;6386:30;6452:34;6447:2;6432:18;;6425:62;-1:-1:-1;;;6518:2:63;6503:18;;6496:42;6570:3;6555:19;;6172:408::o;6585:::-;6787:2;6769:21;;;6826:2;6806:18;;;6799:30;6865:34;6860:2;6845:18;;6838:62;-1:-1:-1;;;6931:2:63;6916:18;;6909:42;6983:3;6968:19;;6585:408::o;7423:168::-;7463:7;7529:1;7525;7521:6;7517:14;7514:1;7511:21;7506:1;7499:9;7492:17;7488:45;7485:71;;;7536:18;;:::i;:::-;-1:-1:-1;7576:9:63;;7423:168::o;7596:535::-;7811:6;7800:9;7793:25;7854:2;7849;7838:9;7834:18;7827:30;7893:6;7888:2;7877:9;7873:18;7866:34;7951:6;7943;7937:3;7926:9;7922:19;7909:49;8008:1;8002:3;7993:6;7982:9;7978:22;7974:32;7967:43;7774:4;8078:3;8071:2;8067:7;8062:2;8054:6;8050:15;8046:29;8035:9;8031:45;8027:55;8019:63;;8118:6;8113:2;8102:9;8098:18;8091:34;7596:535;;;;;;;:::o;9502:184::-;9572:6;9625:2;9613:9;9604:7;9600:23;9596:32;9593:52;;;9641:1;9638;9631:12;9593:52;-1:-1:-1;9664:16:63;;9502:184;-1:-1:-1;9502:184:63:o;10877:217::-;10917:1;10943;10933:132;;10987:10;10982:3;10978:20;10975:1;10968:31;11022:4;11019:1;11012:15;11050:4;11047:1;11040:15;10933:132;-1:-1:-1;11079:9:63;;10877:217::o;11099:262::-;11138:7;11170:10;11207:2;11204:1;11200:10;11237:2;11234:1;11230:10;11293:3;11289:2;11285:12;11280:3;11277:21;11270:3;11263:11;11256:19;11252:47;11249:73;;;11302:18;;:::i;:::-;11342:13;;11099:262;-1:-1:-1;;;;11099:262:63:o;11366:127::-;11427:10;11422:3;11418:20;11415:1;11408:31;11458:4;11455:1;11448:15;11482:4;11479:1;11472:15;11498:228;11537:3;11565:10;11602:2;11599:1;11595:10;11632:2;11629:1;11625:10;11663:3;11659:2;11655:12;11650:3;11647:21;11644:47;;;11671:18;;:::i;:::-;11707:13;;11498:228;-1:-1:-1;;;;11498:228:63:o;11983:331::-;12083:4;12141:11;12128:25;12235:2;12231:7;12220:8;12204:14;12200:29;12196:43;12176:18;12172:68;12162:96;;12254:1;12251;12244:12;12162:96;12275:33;;;;;11983:331;-1:-1:-1;;11983:331:63:o;12319:201::-;12357:3;12385:10;12430:2;12423:5;12419:14;12457:2;12448:7;12445:15;12442:41;;;12463:18;;:::i;:::-;12512:1;12499:15;;12319:201;-1:-1:-1;;;12319:201:63:o;12778:407::-;12980:2;12962:21;;;13019:2;12999:18;;;12992:30;13058:34;13053:2;13038:18;;13031:62;-1:-1:-1;;;13124:2:63;13109:18;;13102:41;13175:3;13160:19;;12778:407::o;14270:521::-;14347:4;14353:6;14413:11;14400:25;14507:2;14503:7;14492:8;14476:14;14472:29;14468:43;14448:18;14444:68;14434:96;;14526:1;14523;14516:12;14434:96;14553:33;;14605:20;;;-1:-1:-1;14648:18:63;14637:30;;14634:50;;;14680:1;14677;14670:12;14634:50;14713:4;14701:17;;-1:-1:-1;14744:14:63;14740:27;;;14730:38;;14727:58;;;14781:1;14778;14771:12;14796:135;14835:3;-1:-1:-1;;14856:17:63;;14853:43;;;14876:18;;:::i;:::-;-1:-1:-1;14923:1:63;14912:13;;14796:135::o;15693:258::-;15765:1;15775:113;15789:6;15786:1;15783:13;15775:113;;;15865:11;;;15859:18;15846:11;;;15839:39;15811:2;15804:10;15775:113;;;15906:6;15903:1;15900:13;15897:48;;;-1:-1:-1;;15941:1:63;15923:16;;15916:27;15693:258::o;15956:274::-;16085:3;16123:6;16117:13;16139:53;16185:6;16180:3;16173:4;16165:6;16161:17;16139:53;:::i;16235:383::-;16384:2;16373:9;16366:21;16347:4;16416:6;16410:13;16459:6;16454:2;16443:9;16439:18;16432:34;16475:66;16534:6;16529:2;16518:9;16514:18;16509:2;16501:6;16497:15;16475:66;:::i;:::-;16602:2;16581:15;-1:-1:-1;;16577:29:63;16562:45;;;;16609:2;16558:54;;16235:383;-1:-1:-1;;16235:383:63:o;16623:127::-;16684:10;16679:3;16675:20;16672:1;16665:31;16715:4;16712:1;16705:15;16739:4;16736:1;16729:15","linkReferences":{},"immutableReferences":{"3495":[{"start":1486,"length":32},{"start":1550,"length":32},{"start":1728,"length":32},{"start":1792,"length":32},{"start":1939,"length":32}]}},"methodIdentifiers":{"UNLOCK_BLOCK_COUNT()":"5a3f631a","alignedLayerServiceManager()":"953ef807","batcherWallet()":"58b96e27","createNewTask(bytes32,string,bytes32[],(bytes,uint256)[],uint256,uint256)":"bf322658","initialize(address,address,address)":"c0c53b8b","lock()":"f83d08ba","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","proxiableUUID()":"52d1902d","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","unlock()":"a69df4b5","unpause()":"3f4ba83a","upgradeTo(address)":"3659cfe6","upgradeToAndCall(address,bytes)":"4f1ef286","userData(address)":"c8910913","user_balances(address)":"2df4e21e","user_nonces(address)":"17d89c4e","user_unlock_block(address)":"4d5431ea","withdraw(uint256)":"2e1a7d4d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"unlockBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentBlock\",\"type\":\"uint256\"}],\"name\":\"FundsLocked\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"required\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"InsufficientGasForAggregator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"InvalidMerkleRoot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"leavesQty\",\"type\":\"uint256\"}],\"name\":\"LeavesNotPowerOfTwo\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGasForAggregator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGasPerProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoLeavesSubmitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoProofSubmitterSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"leavesQty\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signaturesQty\",\"type\":\"uint256\"}],\"name\":\"NotEnoughLeaves\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"OnlyBatcherAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PayerInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"required\",\"type\":\"uint256\"}],\"name\":\"SignerInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"UserHasNoFundsToLock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"UserHasNoFundsToUnlock\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"BalanceLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unlockBlock\",\"type\":\"uint256\"}],\"name\":\"BalanceUnlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PaymentReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feePerProof\",\"type\":\"uint256\"}],\"name\":\"TaskCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UNLOCK_BLOCK_COUNT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"alignedLayerServiceManager\",\"outputs\":[{\"internalType\":\"contract IAlignedLayerServiceManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batcherWallet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"batchDataPointer\",\"type\":\"string\"},{\"internalType\":\"bytes32[]\",\"name\":\"leaves\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"internalType\":\"struct BatcherPaymentService.SignatureData[]\",\"name\":\"signatures\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"gasForAggregator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPerProof\",\"type\":\"uint256\"}],\"name\":\"createNewTask\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAlignedLayerServiceManager\",\"name\":\"_alignedLayerServiceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_batcherPaymentServiceOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_batcherWallet\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"userData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unlockBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"user_balances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"user_nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"user_unlock_block\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate that the this implementation remains valid after an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy to `newImplementation`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/core/BatcherPaymentService.sol\":\"BatcherPaymentService\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin-upgrades-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/\",\":@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/\",\":@openzeppelin-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/\",\":@openzeppelin/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/\",\":ds-test/=lib/eigenlayer-middleware/lib/ds-test/src/\",\":eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/\",\":eigenlayer-core-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/\",\":eigenlayer-core/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/\",\":eigenlayer-middleware/=lib/eigenlayer-middleware/src/\",\":eigenlayer-scripts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/script/\",\":erc4626-tests/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/\",\":openzeppelin-contracts-upgradeable/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/\",\":openzeppelin-contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/\",\":openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/contracts/\"]},\"sources\":{\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IBeaconChainOracle.sol\":{\"keccak256\":\"0x0fef07aa6179c77198f1514e12e628aa1c876e04f9c181ec853a322179e5be00\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://51438325876cc2d4c77f58488a7e27b488015d1b663c50be6a5cafbd73b9c983\",\"dweb:/ipfs/QmViCuGoYZzi6wtXA8PPKigqVv3KMuNxEVQ1Td9dGqjL18\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol\":{\"keccak256\":\"0xab76a9f4eff865cbb689f627cf98263488765519d7a4ec5ffbcb0ca4972842f9\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://ff57ce18e8350bf39f190645db0988bc0f1279f1872150a114a1b520c38a2914\",\"dweb:/ipfs/QmSsUXkNUqYuJgGRumHTSs9rAaboGjecotcM4xHrdBYWaZ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IETHPOSDeposit.sol\":{\"keccak256\":\"0x2e60e5f4b0da0a0a4e2a07c63141120998559970c21deac743ea0c64a60a880c\",\"license\":\"CC0-1.0\",\"urls\":[\"bzz-raw://e635c346bde5b7ade9bcf35bc733081520cb86015be4fbc6e761e6e9482c4c91\",\"dweb:/ipfs/QmRoeazEnbFn5SPSWAkoFK2gSN9DMp3hJAnrLWuL2sKutz\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPod.sol\":{\"keccak256\":\"0xb50c36ad96b6679bb80fd8331f949cbfbcba0f529026e1421a4d2bae64396eba\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://5719181d780120f1e688c0da276992a8caf185815917f453b3550537c31ed4cc\",\"dweb:/ipfs/QmYprRC5ZEXhz3zAUND5E8Xjn6s5TL8ZF8QbnndVq7aVPR\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol\":{\"keccak256\":\"0xd8a64dbed03d3a5cdbefe1af75968f2dde07f973749c2ef5197bf7187c3e448c\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://27ccc7c1fd9352e9f9b357c9063d255dc0ed9583f43db09f786ac7497d7846b8\",\"dweb:/ipfs/QmeJzuJkE9m2NUNwZSp4tGZEZmih1LeucePup8hzMVDRbG\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol\":{\"keccak256\":\"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324\",\"dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol\":{\"keccak256\":\"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d\",\"dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISignatureUtils.sol\":{\"keccak256\":\"0x5e52482a31d94401a8502f3014c4aada1142b4450fc0596dff8e1866a85fe092\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://17dc326c9361bc1453379f26545963557b2883b0c88bc07d4477e04dbcc0cc8c\",\"dweb:/ipfs/QmZXT7A816W5JH2ymirE2ETaJttqztFCsEL22AV8oEfCK9\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol\":{\"keccak256\":\"0x45dfaa2cfdde87f48a6ee38bb6fb739847aef7cf3f6137bdcd8c8a330559ec79\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://1b7f6bd75b42fcaa91ceb7140cb2c41926a1fe6ee2d3161e4fe6186b181ba232\",\"dweb:/ipfs/QmZjbdKiSs33C9i3GDc3sdD39Pz4YPkDoKftowoUF4kHmY\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol\":{\"keccak256\":\"0xc530c6a944b70051fd0dac0222de9a4b5baadeaf94ad194daac6ad8d2ace7420\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://3767df0364ce835b52e786d2851431eb9223fe4747602107505477e162231d73\",\"dweb:/ipfs/QmZkH5bKUygQrJomndNaQqkefVRW4rRefCa8HPJ5HMczxJ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategyManager.sol\":{\"keccak256\":\"0x68bf02a443fc8b2f612eba3d39bfefa5f61f78b549f111cdecec5f2c58236a52\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://76bc6875ce74128b861fdac5fd1c0c72f3cc9bacf67fa4a73721b95fb23959ef\",\"dweb:/ipfs/QmPix4WJmf9fXyMZxfgwXEHBcg7V4NAbRqs4HUf5YrSJcM\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/BeaconChainProofs.sol\":{\"keccak256\":\"0x70d89b05c1c5f47b74a07fbb5a2c05e606fed494e749ea98a9915b7be73df377\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://db1d3bfaee69aef53c8b12b492a17584e6d1ac94610cb8b38aad33e1cdd81af7\",\"dweb:/ipfs/QmfVsMTj1hcf9fMEm5RzvtcBN4dMcAKFBgUUDsNDr5XFpq\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Endian.sol\":{\"keccak256\":\"0xf3b72653ba2567a978d4612703fa5f71c5fcd015d8dac7818468f22772d90a9d\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://cee9d09370d968138d775c39525db4cd0768d60d17be7685519de12444e7dd2f\",\"dweb:/ipfs/QmUdGh8wpMei3edKiEWA6S96s9dRt4ekZKJ4nau356X8xQ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Merkle.sol\":{\"keccak256\":\"0x9095fc29b96d102b10c02d44b3a6fbfa25593ef6ae4a810363ab885b9e6b0f71\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0945132d482d56278edddb1d32209903c4d3839c87ba4317aadd97dc23610d0f\",\"dweb:/ipfs/QmVuM2aLRHxitx4rPx3GTYTBCVNcjYn6sHBRr1biUjLBP5\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/interfaces/draft-IERC1822Upgradeable.sol\":{\"keccak256\":\"0x77c89f893e403efc6929ba842b7ccf6534d4ffe03afe31670b4a528c0ad78c0f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://496bd9b3df2455d571018c09f0c6badd29713fdeb907c6aa09d8d28cb603f053\",\"dweb:/ipfs/QmXdJDyYs6WMwMh21dez2BYPxhSUaUYFMDtVNcn2cgFR79\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol\":{\"keccak256\":\"0x315887e846f1e5f8d8fa535a229d318bb9290aaa69485117f1ee8a9a6b3be823\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29dda00da6d269685b555e710e4abf1c3eb6d00c15b888a7880a2f8dd3c4fdc2\",\"dweb:/ipfs/QmSqcjtdECygtT1Gy7uEo42x8542srpgGEeKKHfcnQqXgn\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/beacon/IBeaconUpgradeable.sol\":{\"keccak256\":\"0x24b86ac8c005b8c654fbf6ac34a5a4f61580d7273541e83e013e89d66fbf0908\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dbfe1a3b3b3fb64294ce41fd2ad362e7b7012208117864f42c1a67620a6d5c1\",\"dweb:/ipfs/QmVMU5tWt7zBQMmf5cpMX8UMHV86T3kFeTxBTBjFqVWfoJ\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x6e36e9b4b71de699c2f3f0d4e4d1aa0b35da99a26e8d5b91ef09ba234b4ef270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://abfa467c53a0d60b4d09bf04aa952b1d1d44e5766fcc053aace078d7859b8419\",\"dweb:/ipfs/QmebVTZpyNxYfKYTuLMywzEJTdc1Ca8ME4xm3kR9gQgToG\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/security/PausableUpgradeable.sol\":{\"keccak256\":\"0x40c636b4572ff5f1dc50cf22097e93c0723ee14eff87e99ac2b02636eeca1250\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9c7d1f5e15633ab912b74c2f57e24559e66b03232300d4b27ff0f25bc452ecad\",\"dweb:/ipfs/QmYTJkc1cntYkKQ1Tu11nBcJLakiy93Tjytc4XHELo4GmR\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/StorageSlotUpgradeable.sol\":{\"keccak256\":\"0x09864aea84f01e39313375b5610c73a3c1c68abbdc51e5ccdd25ff977fdadf9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aedb48081190fa828d243529ce25c708202c7d4ccfe99f0e4ecd6bc0cfcd03f3\",\"dweb:/ipfs/QmWyiDQHPZA56iqsAwTmiJoxvNeRQLUVr4gTfzpdpXivpo\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354\",\"dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638\",\"dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x84ac2d2f343df1e683da7a12bbcf70db542a7a7a0cea90a5d70fcb5e5d035481\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://73ae8e0c6f975052973265113d762629002ce33987b1933c2a378667e2816f2f\",\"dweb:/ipfs/QmQAootkVfoe4PLaYbT4Xob2dJRm3bZfbCffEHRbCYXNPF\"]},\"lib/eigenlayer-middleware/src/interfaces/IBLSApkRegistry.sol\":{\"keccak256\":\"0xc07a5edfd95ab4f16f16a8dc8e76eadf4b0e90fe49db90540d01daaad86898c5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://52b53266450a53da641e82d8ae3be93c5e09f8342b4ea0cc96bb9038d8406354\",\"dweb:/ipfs/QmVuoiQyqPTLCGnyt8zDaxiyaj4ETdgTGKv4MDHWzqEDjp\"]},\"lib/eigenlayer-middleware/src/interfaces/IBLSSignatureChecker.sol\":{\"keccak256\":\"0xee5823a6674e553c71f5e127f08245827eb116d1ad418b5a7f2a9d6985fd95e0\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://94aa26debddca6c0784585340cf891de4c2d7edaa3e5ec7229af9730312a5a51\",\"dweb:/ipfs/QmWbHGbM7eVYTAmrCVaDU8b4YTm9VAN82XgLDR78uHC7vj\"]},\"lib/eigenlayer-middleware/src/interfaces/IIndexRegistry.sol\":{\"keccak256\":\"0x83b2d56aacf27e65c4959a832c5de573e013908c044f6e48ea8284ac5282ae2b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://877af382587e96bb39bcc6db8bb5e4b871db5025c52347d4bee9afeaa4a6cc8d\",\"dweb:/ipfs/QmdnhsQCChzq2o5NgbeT3JxSsEcMm1PC9QW6zenZNPjD9F\"]},\"lib/eigenlayer-middleware/src/interfaces/IRegistry.sol\":{\"keccak256\":\"0x51426a17fb7e54bd3720e2890104e97a8559a13ff248b3d6b840916751c143d3\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://01f91289e6100d528cb8b318cb14ff22a0bc52882c9d4db41585e030cc9ddc25\",\"dweb:/ipfs/Qmb22nqGrsrtNovHRwbMCvDHGENuxAgrWu3Db4p7Er2MHY\"]},\"lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol\":{\"keccak256\":\"0xdd8effb082c1d5957d5ff43d7c59497b32866a6d82bcc7d5efa49ea9bc9b3385\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://cb33a2a1446585b13b7a509e880c60d658d2d2522ec48a9f02e30d2cff54002d\",\"dweb:/ipfs/QmVNG8ZPZkXzNEadPdTj1uBYLiZdCnYfsE5iGU6nJcJXiD\"]},\"lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol\":{\"keccak256\":\"0x1b8b4d757c1b804bc4cf6fbbf8bf8f89ebdeb30a31014751fe7d01deb9d513d4\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://984bf2777b898ed187d28997f9783f5c293a1a1848e3e9aa470ce9183d454c97\",\"dweb:/ipfs/Qme3aTpBrkLu8wYHFMZbCfhXHoZ1M6SpXkeC237T9BuU5B\"]},\"lib/eigenlayer-middleware/src/libraries/BN254.sol\":{\"keccak256\":\"0xb428c8d0c3b325507a88a61a80115493eb88606ccc19ed64a31e11294ab853b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7b6fb935bfe0494e6ff970c8f30a86d5f4cf5c3e0967300c28cd383c043acae\",\"dweb:/ipfs/QmUHfFZaVjLPXhkBmcxrZhAHZaSFQDqXtrLGpjGBQBa5Ki\"]},\"src/core/BatcherPaymentService.sol\":{\"keccak256\":\"0xbdbb1859b25550e3cadcfcdef8d1466ab09f78d92d66ca6a640a3c3920c7f316\",\"urls\":[\"bzz-raw://1fa2c5e1f60695d07001b4a427ca13c5abbbc5adb5226feb3fcb6abce90a27f8\",\"dweb:/ipfs/QmfNqUDpFCLibJcMpiNJEZNE3Lk2jFqmg4SxmwGikRX2ho\"]},\"src/core/IAlignedLayerServiceManager.sol\":{\"keccak256\":\"0x1577bcd1d8249a506b60be9519755a0e912f2f2f11f05078efddb69378b67acd\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://83f272a0ef045e22f11939787544057abb2df643b82177077c34adbb92feb367\",\"dweb:/ipfs/Qmd6JhkCY91a29aKPh6rABVgMLyJY1R8NyzX6mkXTb66Uo\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.12+commit.f00d7308"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"unlockBlock","type":"uint256"},{"internalType":"uint256","name":"currentBlock","type":"uint256"}],"type":"error","name":"FundsLocked"},{"inputs":[{"internalType":"uint256","name":"required","type":"uint256"},{"internalType":"uint256","name":"available","type":"uint256"}],"type":"error","name":"InsufficientGasForAggregator"},{"inputs":[{"internalType":"bytes32","name":"expected","type":"bytes32"},{"internalType":"bytes32","name":"actual","type":"bytes32"}],"type":"error","name":"InvalidMerkleRoot"},{"inputs":[{"internalType":"uint256","name":"expected","type":"uint256"},{"internalType":"uint256","name":"actual","type":"uint256"}],"type":"error","name":"InvalidNonce"},{"inputs":[],"type":"error","name":"InvalidSignature"},{"inputs":[{"internalType":"uint256","name":"leavesQty","type":"uint256"}],"type":"error","name":"LeavesNotPowerOfTwo"},{"inputs":[],"type":"error","name":"NoGasForAggregator"},{"inputs":[],"type":"error","name":"NoGasPerProof"},{"inputs":[],"type":"error","name":"NoLeavesSubmitted"},{"inputs":[],"type":"error","name":"NoProofSubmitterSignatures"},{"inputs":[{"internalType":"uint256","name":"leavesQty","type":"uint256"},{"internalType":"uint256","name":"signaturesQty","type":"uint256"}],"type":"error","name":"NotEnoughLeaves"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"type":"error","name":"OnlyBatcherAllowed"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"type":"error","name":"PayerInsufficientBalance"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"required","type":"uint256"}],"type":"error","name":"SignerInsufficientBalance"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"type":"error","name":"UserHasNoFundsToLock"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"type":"error","name":"UserHasNoFundsToUnlock"},{"inputs":[{"internalType":"address","name":"previousAdmin","type":"address","indexed":false},{"internalType":"address","name":"newAdmin","type":"address","indexed":false}],"type":"event","name":"AdminChanged","anonymous":false},{"inputs":[{"internalType":"address","name":"user","type":"address","indexed":true}],"type":"event","name":"BalanceLocked","anonymous":false},{"inputs":[{"internalType":"address","name":"user","type":"address","indexed":true},{"internalType":"uint256","name":"unlockBlock","type":"uint256","indexed":false}],"type":"event","name":"BalanceUnlocked","anonymous":false},{"inputs":[{"internalType":"address","name":"beacon","type":"address","indexed":true}],"type":"event","name":"BeaconUpgraded","anonymous":false},{"inputs":[{"internalType":"address","name":"recipient","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"FundsWithdrawn","anonymous":false},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Paused","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"PaymentReceived","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32","indexed":true},{"internalType":"uint256","name":"feePerProof","type":"uint256","indexed":false}],"type":"event","name":"TaskCreated","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Unpaused","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"UNLOCK_BLOCK_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"alignedLayerServiceManager","outputs":[{"internalType":"contract IAlignedLayerServiceManager","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"batcherWallet","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"string","name":"batchDataPointer","type":"string"},{"internalType":"bytes32[]","name":"leaves","type":"bytes32[]"},{"internalType":"struct BatcherPaymentService.SignatureData[]","name":"signatures","type":"tuple[]","components":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"nonce","type":"uint256"}]},{"internalType":"uint256","name":"gasForAggregator","type":"uint256"},{"internalType":"uint256","name":"gasPerProof","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"createNewTask"},{"inputs":[{"internalType":"contract IAlignedLayerServiceManager","name":"_alignedLayerServiceManager","type":"address"},{"internalType":"address","name":"_batcherPaymentServiceOwner","type":"address"},{"internalType":"address","name":"_batcherWallet","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"lock"},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"pause"},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"unlock"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"unpause"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"upgradeTo"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"userData","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"unlockBlock","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"user_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"user_nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"user_unlock_block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"withdraw"},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"owner()":{"details":"Returns the address of the current owner."},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"proxiableUUID()":{"details":"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate that the this implementation remains valid after an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"upgradeTo(address)":{"details":"Upgrade the implementation of the proxy to `newImplementation`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."},"upgradeToAndCall(address,bytes)":{"details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin-upgrades-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/","@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/","@openzeppelin-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/","@openzeppelin/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/","ds-test/=lib/eigenlayer-middleware/lib/ds-test/src/","eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/","eigenlayer-core-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/","eigenlayer-core/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/","eigenlayer-middleware/=lib/eigenlayer-middleware/src/","eigenlayer-scripts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/script/","erc4626-tests/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/","openzeppelin-contracts-upgradeable/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/","openzeppelin-contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/","openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/core/BatcherPaymentService.sol":"BatcherPaymentService"},"evmVersion":"london","libraries":{}},"sources":{"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IBeaconChainOracle.sol":{"keccak256":"0x0fef07aa6179c77198f1514e12e628aa1c876e04f9c181ec853a322179e5be00","urls":["bzz-raw://51438325876cc2d4c77f58488a7e27b488015d1b663c50be6a5cafbd73b9c983","dweb:/ipfs/QmViCuGoYZzi6wtXA8PPKigqVv3KMuNxEVQ1Td9dGqjL18"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol":{"keccak256":"0xab76a9f4eff865cbb689f627cf98263488765519d7a4ec5ffbcb0ca4972842f9","urls":["bzz-raw://ff57ce18e8350bf39f190645db0988bc0f1279f1872150a114a1b520c38a2914","dweb:/ipfs/QmSsUXkNUqYuJgGRumHTSs9rAaboGjecotcM4xHrdBYWaZ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IETHPOSDeposit.sol":{"keccak256":"0x2e60e5f4b0da0a0a4e2a07c63141120998559970c21deac743ea0c64a60a880c","urls":["bzz-raw://e635c346bde5b7ade9bcf35bc733081520cb86015be4fbc6e761e6e9482c4c91","dweb:/ipfs/QmRoeazEnbFn5SPSWAkoFK2gSN9DMp3hJAnrLWuL2sKutz"],"license":"CC0-1.0"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPod.sol":{"keccak256":"0xb50c36ad96b6679bb80fd8331f949cbfbcba0f529026e1421a4d2bae64396eba","urls":["bzz-raw://5719181d780120f1e688c0da276992a8caf185815917f453b3550537c31ed4cc","dweb:/ipfs/QmYprRC5ZEXhz3zAUND5E8Xjn6s5TL8ZF8QbnndVq7aVPR"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol":{"keccak256":"0xd8a64dbed03d3a5cdbefe1af75968f2dde07f973749c2ef5197bf7187c3e448c","urls":["bzz-raw://27ccc7c1fd9352e9f9b357c9063d255dc0ed9583f43db09f786ac7497d7846b8","dweb:/ipfs/QmeJzuJkE9m2NUNwZSp4tGZEZmih1LeucePup8hzMVDRbG"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol":{"keccak256":"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f","urls":["bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324","dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol":{"keccak256":"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49","urls":["bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d","dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISignatureUtils.sol":{"keccak256":"0x5e52482a31d94401a8502f3014c4aada1142b4450fc0596dff8e1866a85fe092","urls":["bzz-raw://17dc326c9361bc1453379f26545963557b2883b0c88bc07d4477e04dbcc0cc8c","dweb:/ipfs/QmZXT7A816W5JH2ymirE2ETaJttqztFCsEL22AV8oEfCK9"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol":{"keccak256":"0x45dfaa2cfdde87f48a6ee38bb6fb739847aef7cf3f6137bdcd8c8a330559ec79","urls":["bzz-raw://1b7f6bd75b42fcaa91ceb7140cb2c41926a1fe6ee2d3161e4fe6186b181ba232","dweb:/ipfs/QmZjbdKiSs33C9i3GDc3sdD39Pz4YPkDoKftowoUF4kHmY"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol":{"keccak256":"0xc530c6a944b70051fd0dac0222de9a4b5baadeaf94ad194daac6ad8d2ace7420","urls":["bzz-raw://3767df0364ce835b52e786d2851431eb9223fe4747602107505477e162231d73","dweb:/ipfs/QmZkH5bKUygQrJomndNaQqkefVRW4rRefCa8HPJ5HMczxJ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategyManager.sol":{"keccak256":"0x68bf02a443fc8b2f612eba3d39bfefa5f61f78b549f111cdecec5f2c58236a52","urls":["bzz-raw://76bc6875ce74128b861fdac5fd1c0c72f3cc9bacf67fa4a73721b95fb23959ef","dweb:/ipfs/QmPix4WJmf9fXyMZxfgwXEHBcg7V4NAbRqs4HUf5YrSJcM"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/BeaconChainProofs.sol":{"keccak256":"0x70d89b05c1c5f47b74a07fbb5a2c05e606fed494e749ea98a9915b7be73df377","urls":["bzz-raw://db1d3bfaee69aef53c8b12b492a17584e6d1ac94610cb8b38aad33e1cdd81af7","dweb:/ipfs/QmfVsMTj1hcf9fMEm5RzvtcBN4dMcAKFBgUUDsNDr5XFpq"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Endian.sol":{"keccak256":"0xf3b72653ba2567a978d4612703fa5f71c5fcd015d8dac7818468f22772d90a9d","urls":["bzz-raw://cee9d09370d968138d775c39525db4cd0768d60d17be7685519de12444e7dd2f","dweb:/ipfs/QmUdGh8wpMei3edKiEWA6S96s9dRt4ekZKJ4nau356X8xQ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Merkle.sol":{"keccak256":"0x9095fc29b96d102b10c02d44b3a6fbfa25593ef6ae4a810363ab885b9e6b0f71","urls":["bzz-raw://0945132d482d56278edddb1d32209903c4d3839c87ba4317aadd97dc23610d0f","dweb:/ipfs/QmVuM2aLRHxitx4rPx3GTYTBCVNcjYn6sHBRr1biUjLBP5"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888","urls":["bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a","dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/interfaces/draft-IERC1822Upgradeable.sol":{"keccak256":"0x77c89f893e403efc6929ba842b7ccf6534d4ffe03afe31670b4a528c0ad78c0f","urls":["bzz-raw://496bd9b3df2455d571018c09f0c6badd29713fdeb907c6aa09d8d28cb603f053","dweb:/ipfs/QmXdJDyYs6WMwMh21dez2BYPxhSUaUYFMDtVNcn2cgFR79"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol":{"keccak256":"0x315887e846f1e5f8d8fa535a229d318bb9290aaa69485117f1ee8a9a6b3be823","urls":["bzz-raw://29dda00da6d269685b555e710e4abf1c3eb6d00c15b888a7880a2f8dd3c4fdc2","dweb:/ipfs/QmSqcjtdECygtT1Gy7uEo42x8542srpgGEeKKHfcnQqXgn"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/beacon/IBeaconUpgradeable.sol":{"keccak256":"0x24b86ac8c005b8c654fbf6ac34a5a4f61580d7273541e83e013e89d66fbf0908","urls":["bzz-raw://4dbfe1a3b3b3fb64294ce41fd2ad362e7b7012208117864f42c1a67620a6d5c1","dweb:/ipfs/QmVMU5tWt7zBQMmf5cpMX8UMHV86T3kFeTxBTBjFqVWfoJ"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e","urls":["bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497","dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x6e36e9b4b71de699c2f3f0d4e4d1aa0b35da99a26e8d5b91ef09ba234b4ef270","urls":["bzz-raw://abfa467c53a0d60b4d09bf04aa952b1d1d44e5766fcc053aace078d7859b8419","dweb:/ipfs/QmebVTZpyNxYfKYTuLMywzEJTdc1Ca8ME4xm3kR9gQgToG"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/security/PausableUpgradeable.sol":{"keccak256":"0x40c636b4572ff5f1dc50cf22097e93c0723ee14eff87e99ac2b02636eeca1250","urls":["bzz-raw://9c7d1f5e15633ab912b74c2f57e24559e66b03232300d4b27ff0f25bc452ecad","dweb:/ipfs/QmYTJkc1cntYkKQ1Tu11nBcJLakiy93Tjytc4XHELo4GmR"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol":{"keccak256":"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3","urls":["bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4","dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149","urls":["bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c","dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/StorageSlotUpgradeable.sol":{"keccak256":"0x09864aea84f01e39313375b5610c73a3c1c68abbdc51e5ccdd25ff977fdadf9a","urls":["bzz-raw://aedb48081190fa828d243529ce25c708202c7d4ccfe99f0e4ecd6bc0cfcd03f3","dweb:/ipfs/QmWyiDQHPZA56iqsAwTmiJoxvNeRQLUVr4gTfzpdpXivpo"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61","urls":["bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354","dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b","urls":["bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34","dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3","urls":["bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638","dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0x84ac2d2f343df1e683da7a12bbcf70db542a7a7a0cea90a5d70fcb5e5d035481","urls":["bzz-raw://73ae8e0c6f975052973265113d762629002ce33987b1933c2a378667e2816f2f","dweb:/ipfs/QmQAootkVfoe4PLaYbT4Xob2dJRm3bZfbCffEHRbCYXNPF"],"license":"MIT"},"lib/eigenlayer-middleware/src/interfaces/IBLSApkRegistry.sol":{"keccak256":"0xc07a5edfd95ab4f16f16a8dc8e76eadf4b0e90fe49db90540d01daaad86898c5","urls":["bzz-raw://52b53266450a53da641e82d8ae3be93c5e09f8342b4ea0cc96bb9038d8406354","dweb:/ipfs/QmVuoiQyqPTLCGnyt8zDaxiyaj4ETdgTGKv4MDHWzqEDjp"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IBLSSignatureChecker.sol":{"keccak256":"0xee5823a6674e553c71f5e127f08245827eb116d1ad418b5a7f2a9d6985fd95e0","urls":["bzz-raw://94aa26debddca6c0784585340cf891de4c2d7edaa3e5ec7229af9730312a5a51","dweb:/ipfs/QmWbHGbM7eVYTAmrCVaDU8b4YTm9VAN82XgLDR78uHC7vj"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IIndexRegistry.sol":{"keccak256":"0x83b2d56aacf27e65c4959a832c5de573e013908c044f6e48ea8284ac5282ae2b","urls":["bzz-raw://877af382587e96bb39bcc6db8bb5e4b871db5025c52347d4bee9afeaa4a6cc8d","dweb:/ipfs/QmdnhsQCChzq2o5NgbeT3JxSsEcMm1PC9QW6zenZNPjD9F"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IRegistry.sol":{"keccak256":"0x51426a17fb7e54bd3720e2890104e97a8559a13ff248b3d6b840916751c143d3","urls":["bzz-raw://01f91289e6100d528cb8b318cb14ff22a0bc52882c9d4db41585e030cc9ddc25","dweb:/ipfs/Qmb22nqGrsrtNovHRwbMCvDHGENuxAgrWu3Db4p7Er2MHY"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol":{"keccak256":"0xdd8effb082c1d5957d5ff43d7c59497b32866a6d82bcc7d5efa49ea9bc9b3385","urls":["bzz-raw://cb33a2a1446585b13b7a509e880c60d658d2d2522ec48a9f02e30d2cff54002d","dweb:/ipfs/QmVNG8ZPZkXzNEadPdTj1uBYLiZdCnYfsE5iGU6nJcJXiD"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol":{"keccak256":"0x1b8b4d757c1b804bc4cf6fbbf8bf8f89ebdeb30a31014751fe7d01deb9d513d4","urls":["bzz-raw://984bf2777b898ed187d28997f9783f5c293a1a1848e3e9aa470ce9183d454c97","dweb:/ipfs/Qme3aTpBrkLu8wYHFMZbCfhXHoZ1M6SpXkeC237T9BuU5B"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/libraries/BN254.sol":{"keccak256":"0xb428c8d0c3b325507a88a61a80115493eb88606ccc19ed64a31e11294ab853b3","urls":["bzz-raw://d7b6fb935bfe0494e6ff970c8f30a86d5f4cf5c3e0967300c28cd383c043acae","dweb:/ipfs/QmUHfFZaVjLPXhkBmcxrZhAHZaSFQDqXtrLGpjGBQBa5Ki"],"license":"MIT"},"src/core/BatcherPaymentService.sol":{"keccak256":"0xbdbb1859b25550e3cadcfcdef8d1466ab09f78d92d66ca6a640a3c3920c7f316","urls":["bzz-raw://1fa2c5e1f60695d07001b4a427ca13c5abbbc5adb5226feb3fcb6abce90a27f8","dweb:/ipfs/QmfNqUDpFCLibJcMpiNJEZNE3Lk2jFqmg4SxmwGikRX2ho"],"license":null},"src/core/IAlignedLayerServiceManager.sol":{"keccak256":"0x1577bcd1d8249a506b60be9519755a0e912f2f2f11f05078efddb69378b67acd","urls":["bzz-raw://83f272a0ef045e22f11939787544057abb2df643b82177077c34adbb92feb367","dweb:/ipfs/Qmd6JhkCY91a29aKPh6rABVgMLyJY1R8NyzX6mkXTb66Uo"],"license":"UNLICENSED"}},"version":1},"id":61} \ No newline at end of file diff --git a/explorer/lib/explorer/contract_managers/aligned_layer_service_manager.ex b/explorer/lib/explorer/contract_managers/aligned_layer_service_manager.ex index 846263e47..05f091aad 100644 --- a/explorer/lib/explorer/contract_managers/aligned_layer_service_manager.ex +++ b/explorer/lib/explorer/contract_managers/aligned_layer_service_manager.ex @@ -18,11 +18,7 @@ defmodule AlignedLayerServiceManager do file -> file end - payment_service_path = - "../contracts/script/deploy/config/#{@environment}/batcher-payment-service.#{@environment}.config.json" - {status_aligned_config, config_json_string} = File.read(config_file_path) - {status_payment_service, payment_service_json_string} = File.read(payment_service_path) case status_aligned_config do :ok -> @@ -34,29 +30,10 @@ defmodule AlignedLayerServiceManager do ) end - case status_payment_service do - :ok -> - Logger.debug("Payment service file read successfully") - - :error -> - raise( - "Payment service file not read successfully, did you run make create-env? If you did,\n make sure Alignedlayer config file is correctly stored" - ) - end - @aligned_layer_service_manager_address Jason.decode!(config_json_string) |> Map.get("addresses") |> Map.get("alignedLayerServiceManager") - @batcher_payment_service_address Jason.decode!(config_json_string) - |> Map.get("addresses") - |> Map.get("batcherPaymentService") - - - @gas_per_proof Jason.decode!(payment_service_json_string) - |> Map.get("amounts") - |> Map.get("gasPerProof") - @first_block (case @environment do "devnet" -> 0 "holesky" -> 1_728_056 @@ -72,10 +49,6 @@ defmodule AlignedLayerServiceManager do @aligned_layer_service_manager_address end - def get_batcher_payment_service_address() do - @batcher_payment_service_address - end - def get_latest_block_number() do {:ok, num} = Ethers.current_block_number() num @@ -83,13 +56,18 @@ defmodule AlignedLayerServiceManager do def get_new_batch_events(%{fromBlock: fromBlock, toBlock: toBlock}) do events = - AlignedLayerServiceManager.EventFilters.new_batch_v2(nil) - |> Ethers.get_logs(fromBlock: fromBlock, toBlock: toBlock) + AlignedLayerServiceManager.EventFilters.new_batch_v3(nil) + |> Ethers.get_logs(fromBlock: fromBlock, toBlock: toBlock) case events do - {:ok, []} -> [] - {:ok, list} -> Enum.map(list, &extract_new_batch_event_info/1) - {:error, reason} -> raise("Error fetching events: #{Map.get(reason, "message")}") + {:ok, []} -> + [] + + {:ok, list} -> + Enum.map(list, &extract_new_batch_event_info/1) + + {:error, reason} -> + raise("Error fetching events: #{Map.get(reason, "message")}") end end @@ -114,14 +92,16 @@ defmodule AlignedLayerServiceManager do batchMerkleRoot: topics_raw |> Enum.at(1), senderAddress: data |> Enum.at(0), taskCreatedBlock: data |> Enum.at(1), - batchDataPointer: data |> Enum.at(2) + batchDataPointer: data |> Enum.at(2), + maxAggregatorFee: data |> Enum.at(3), } end def is_batch_responded(merkle_root) do event = - AlignedLayerServiceManager.EventFilters.batch_verified(Utils.string_to_bytes32(merkle_root)) - |> Ethers.get_logs(fromBlock: @first_block) + Utils.string_to_bytes32(merkle_root) + |> AlignedLayerServiceManager.EventFilters.batch_verified() + |> Ethers.get_logs(fromBlock: @first_block) case event do {:error, reason} -> {:error, reason} @@ -154,8 +134,9 @@ defmodule AlignedLayerServiceManager do response_timestamp: batch_response.block_timestamp, amount_of_proofs: nil, proof_hashes: nil, - cost_per_proof: get_cost_per_proof(), - sender_address: Utils.string_to_bytes32(created_batch.senderAddress) + fee_per_proof: BatcherPaymentServiceManager.get_fee_per_proof(%{merkle_root: created_batch.batchMerkleRoot}), + sender_address: Utils.string_to_bytes32(created_batch.senderAddress), + max_aggregator_fee: created_batch.maxAggregatorFee } end @@ -182,9 +163,10 @@ defmodule AlignedLayerServiceManager do response_transaction_hash: batch_response.transaction_hash, response_timestamp: batch_response.block_timestamp, amount_of_proofs: unverified_batch.amount_of_proofs, - cost_per_proof: unverified_batch.cost_per_proof, - proof_hashes: nil, #don't need this value to update an existing but unverified batch, it is on another table - sender_address: unverified_batch.sender_address + fee_per_proof: unverified_batch.fee_per_proof, + proof_hashes: nil, + sender_address: unverified_batch.sender_address, + max_aggregator_fee: unverified_batch.max_aggregator_fee } end end @@ -213,7 +195,6 @@ defmodule AlignedLayerServiceManager do batch_merkle_root = event |> Map.get(:topics_raw) |> Enum.at(1) sender_address = event |> Map.get(:data) |> Enum.at(0) - {:ok, %BatchVerifiedInfo{ address: event |> Map.get(:address), @@ -236,14 +217,9 @@ defmodule AlignedLayerServiceManager do case Ethers.current_gas_price() do {:ok, gas_price} -> gas_price - {:error, error} -> raise("Error fetching gas price: #{error}") - end - end - def get_cost_per_proof() do - case Integer.parse(@gas_per_proof) do - {value, _} -> value * get_current_gas_price() - :error -> raise("Error parsing @gas_per_proof") + {:error, error} -> + raise("Error fetching gas price: #{error}") end end @@ -251,8 +227,9 @@ defmodule AlignedLayerServiceManager do case AlignedLayerServiceManager.get_restakeable_strategies() |> Ethers.call() do {:ok, restakeable_strategies} -> Strategies.update(restakeable_strategies) + {:error, error} -> - dbg("Error fetching restakeable strategies: #{error}") + Logger.error("Error fetching restakeable strategies: #{error}") raise("Error fetching restakeable strategies: #{error}") end end diff --git a/explorer/lib/explorer/contract_managers/avs_directory_manager.ex b/explorer/lib/explorer/contract_managers/avs_directory_manager.ex index 6ee5259ff..36297c5cd 100644 --- a/explorer/lib/explorer/contract_managers/avs_directory_manager.ex +++ b/explorer/lib/explorer/contract_managers/avs_directory_manager.ex @@ -37,11 +37,10 @@ defmodule AVSDirectoryManager do Enum.map(events, &extract_operator_event_info/1) {:error, reason} -> - IO.inspect("Error fetching operator events") - IO.inspect(reason) + Logger.error("Error fetching operator events: #{inspect(reason)}") [] _ -> - IO.inspect("Unexpected response fetching operator events") + Logger.debug("Unexpected response fetching operator events") [] end end @@ -56,7 +55,7 @@ defmodule AVSDirectoryManager do def extract_operator_event_info(event) do case Mutex.lock(OperatorMutex, {event.topics |> Enum.at(1)}) do {:error, :busy} -> - "Operator already being processed: #{event.topics |> Enum.at(1)}" |> IO.inspect() + "Operator already being processed: #{event.topics |> Enum.at(1)}" |> Logger.error() :empty {:ok, lock} -> @@ -64,18 +63,18 @@ defmodule AVSDirectoryManager do "OperatorAVSRegistrationStatusUpdated(address,address,uint8)" -> case event.data |> hd do 1 -> - IO.inspect("Operator registered") + Logger.debug("Operator registered") Operators.handle_operator_registration(event) 0 -> - IO.inspect("Operator unregistered") + Logger.debug("Operator unregistered") Operators.handle_operator_unregistration(event) _other -> - IO.inspect("Unexpected event data", event.data) + Logger.error("Unexpected event data: #{inspect(event.data)}") end _ -> - IO.inspect("Unexpected event") + Logger.error("Unexpected event") :empty end Mutex.release(OperatorMutex, lock) diff --git a/explorer/lib/explorer/contract_managers/batcher_payment_service_manager.ex b/explorer/lib/explorer/contract_managers/batcher_payment_service_manager.ex new file mode 100644 index 000000000..883d08694 --- /dev/null +++ b/explorer/lib/explorer/contract_managers/batcher_payment_service_manager.ex @@ -0,0 +1,71 @@ +defmodule BatcherPaymentServiceManager do + require Logger + + @aligned_config_file System.get_env("ALIGNED_CONFIG_FILE") + + @environment System.get_env("ENVIRONMENT") + @first_block (case @environment do + "devnet" -> 0 + "holesky" -> 1_728_056 + "mainnet" -> 20_020_000 + _ -> raise("Invalid environment") + end) + + config_file_path = + case @aligned_config_file do + nil -> raise("ALIGNED_CONFIG_FILE not set in .env") + file -> file + end + + {status_aligned_config, config_json_string} = File.read(config_file_path) + + case status_aligned_config do + :ok -> + Logger.debug("Aligned config file read successfully") + + :error -> + raise( + "Config file not read successfully, did you run make create-env? If you did,\n make sure Alignedlayer config file is correctly stored" + ) + end + + @batcher_payment_service_address Jason.decode!(config_json_string) + |> Map.get("addresses") + |> Map.get("batcherPaymentService") + + use Ethers.Contract, + abi_file: "lib/abi/BatcherPaymentService.json", + default_address: @batcher_payment_service_address + + def get_batcher_payment_service_address() do + @batcher_payment_service_address + end + + def get_fee_per_proof(%{merkle_root: merkle_root}) do + BatcherPaymentServiceManager.EventFilters.task_created( + merkle_root + |> Utils.string_to_bytes32() + ) + |> Ethers.get_logs(fromBlock: @first_block) + |> case do + {:ok, []} -> + Logger.warning("No fee per proof events found for merkle root: #{merkle_root}.") + 0 + + {:ok, events} -> + event = events |> hd() + fee_per_proof = event.data |> hd() + Logger.debug("Fee per proof of #{merkle_root}: #{fee_per_proof} WEI.") + + fee_per_proof + + {:error, reason} -> + Logger.error("Error getting fee per proof: #{inspect(reason)}.") + raise("Error getting fee per proof events.") + + other -> + Logger.error("Unexpected response on fee per proof events: #{inspect(other)}") + raise("Unexpected response on fee per proof events.") + end + end +end diff --git a/explorer/lib/explorer/contract_managers/delegation_manager.ex b/explorer/lib/explorer/contract_managers/delegation_manager.ex index 1b4542fd4..de2c7f8d9 100644 --- a/explorer/lib/explorer/contract_managers/delegation_manager.ex +++ b/explorer/lib/explorer/contract_managers/delegation_manager.ex @@ -44,12 +44,11 @@ defmodule DelegationManager do {:ok, data} -> List.last(data).data |> hd() # most recent entry {:error, reason} -> - IO.inspect("Error getting operator url") - IO.inspect(reason) + Logger.error("Error getting operator url: #{inspect(reason)}") other -> - IO.inspect("Unexpected response:") - IO.inspect(other) + Logger.debug("Unexpected response getting operator url: #{inspect(other)}") + end end @@ -66,12 +65,11 @@ defmodule DelegationManager do %Restakings{operator_id: operator_id, operator_address: operator_address, stake: share, quorum_number: 0, strategy_address: strategy_address} end) {:error, error} -> - IO.inspect("Error fetching operator's strategies shares") - IO.inspect(error) + Logger.error("Error getting operator shares: #{inspect(error)}") + error other -> - IO.inspect("Unexpected response on get_operator_all_strategies_shares:") - dbg other + Logger.debug("Unexpected response getting operator shares: #{inspect(other)}") other end end diff --git a/explorer/lib/explorer/contract_managers/stake_registry_manager.ex b/explorer/lib/explorer/contract_managers/stake_registry_manager.ex index 812e71812..e06927a3a 100644 --- a/explorer/lib/explorer/contract_managers/stake_registry_manager.ex +++ b/explorer/lib/explorer/contract_managers/stake_registry_manager.ex @@ -41,12 +41,10 @@ defmodule StakeRegistryManager do {operator_id, operator_address, Enum.count(data) > 0} {:error, reason} -> - dbg("Error getting latest operator stake update") - dbg(reason) + "Error getting latest operator stake update: #{inspect(reason)}" |> Logger.error() other -> - dbg("Unexpected response:") - dbg(other) + "Unexpected response: #{inspect(other)}" |> Logger.debug() end end @@ -55,7 +53,7 @@ defmodule StakeRegistryManager do {:ok, amount} -> amount {:error, error} -> - dbg("Error fetching amount of strategies: #{error}") + "Error fetching amount of strategies: #{error}" |> Logger.error() raise("Error fetching amount of strategies: #{error}") end @@ -64,7 +62,7 @@ defmodule StakeRegistryManager do {:ok, strategy_address} -> [strategy_address | acc] {:error, error} -> - dbg("Error fetching strategy at index #{index}: #{error}") + "Error fetching strategy at index #{index}: #{error}" |> Logger.error() acc end end) @@ -75,13 +73,13 @@ defmodule StakeRegistryManager do def get_stake_of_quorum_for_operator(%Restakings{operator_address: operator_address, quorum_number: nil}) do # AT THE MOMENT, ONLY USING QUORUM 0 get_stake_of_quorum_for_operator(%Restakings{operator_address: operator_address, quorum_number: 0}) end - + def get_stake_of_quorum_for_operator(%Restakings{operator_address: operator_address, quorum_number: quorum_number}) do case StakeRegistryManager.weight_of_operator_for_quorum(quorum_number, operator_address) |> Ethers.call() do {:ok, stake_of_operator} -> stake_of_operator {:error, error} -> - dbg("Error fetching stake of operator: #{error}") + "Error fetching stake of operator: #{error}" |> Logger.error() raise("Error fetching stake of operator: #{error}") end end diff --git a/explorer/lib/explorer/contract_managers/strategy_interface_manager.ex b/explorer/lib/explorer/contract_managers/strategy_interface_manager.ex index c99cb4cea..782c1b207 100644 --- a/explorer/lib/explorer/contract_managers/strategy_interface_manager.ex +++ b/explorer/lib/explorer/contract_managers/strategy_interface_manager.ex @@ -12,12 +12,11 @@ defmodule StrategyInterfaceManager do {:ok, token_address} -> %{strategy | token_address: token_address} {:error, %{"code" => -32015}} -> - dbg("Strategy has no underlying token: #{strategy_address}") # thus, its not a strategy contract + "Strategy has no underlying token: #{strategy_address}" |> Logger.debug() # thus, its not a strategy contract {:error, :not_strategy} other_error -> - dbg("Error fetching token address for #{strategy_address}") - dbg(other_error) + "Error fetching token address for #{strategy_address}: #{inspect(other_error)}" |> Logger.error() other_error end end @@ -26,9 +25,12 @@ defmodule StrategyInterfaceManager do case ERC20InterfaceManager.name(token_address) do {:ok, name} -> %{strategy | name: name} error -> - dbg("Error fetching token name") - dbg(error) - error + case error do + {:error, %{"code" => 3, "data" => "0x", "message" => "execution reverted"}} -> %{strategy | name: "‎"} # token has no Name (empty char), not a common practice but still an ERC20 + _ -> + "Error fetching token name for #{token_address}: #{inspect(error)}" |> Logger.error() + error + end end end def fetch_token_name({:error, error}) do @@ -39,9 +41,12 @@ defmodule StrategyInterfaceManager do case ERC20InterfaceManager.symbol(token_address) do {:ok, symbol} -> %{strategy | symbol: symbol} error -> - dbg("Error fetching token symbol") - dbg(error) - error + case error do + {:error, %{"code" => 3, "data" => "0x", "message" => "execution reverted"}} -> %{strategy | symbol: "‎"} # token has no Symbol (empty char), not a common practice but still an ERC20 + _ -> + "Error fetching token symbol for #{token_address}: #{inspect(error)}" |> Logger.error() + error + end end end def fetch_token_symbol({:error, error}) do diff --git a/explorer/lib/explorer/models/batch_structs.ex b/explorer/lib/explorer/models/batch_structs.ex index 461ba530e..0ba1329d1 100644 --- a/explorer/lib/explorer/models/batch_structs.ex +++ b/explorer/lib/explorer/models/batch_structs.ex @@ -1,7 +1,7 @@ # Raised event in batch creation defmodule NewBatchEvent do - @enforce_keys [:batchMerkleRoot, :senderAddress, :taskCreatedBlock, :batchDataPointer] - defstruct [:batchMerkleRoot, :senderAddress, :taskCreatedBlock, :batchDataPointer] + @enforce_keys [:batchMerkleRoot, :senderAddress, :taskCreatedBlock, :batchDataPointer, :maxAggregatorFee] + defstruct [:batchMerkleRoot, :senderAddress, :taskCreatedBlock, :batchDataPointer, :maxAggregatorFee] def extract_merkle_root(event) do event.topics_raw |> Enum.at(1) @@ -30,8 +30,9 @@ defmodule BatchDB do :submission_transaction_hash, :submission_timestamp, :proof_hashes, - :cost_per_proof, - :sender_address + :fee_per_proof, + :sender_address, + :max_aggregator_fee ] defstruct [ :merkle_root, @@ -45,7 +46,8 @@ defmodule BatchDB do :response_timestamp, :data_pointer, :proof_hashes, - :cost_per_proof, - :sender_address + :fee_per_proof, + :sender_address, + :max_aggregator_fee ] end diff --git a/explorer/lib/explorer/models/batches.ex b/explorer/lib/explorer/models/batches.ex index 6e1e16afc..7d2b430af 100644 --- a/explorer/lib/explorer/models/batches.ex +++ b/explorer/lib/explorer/models/batches.ex @@ -1,4 +1,5 @@ defmodule Batches do + require Logger use Ecto.Schema import Ecto.Changeset import Ecto.Query @@ -14,8 +15,9 @@ defmodule Batches do field :response_transaction_hash, :string field :response_timestamp, :utc_datetime field :data_pointer, :string - field :cost_per_proof, :integer + field :fee_per_proof, :integer field :sender_address, :binary + field :max_aggregator_fee, :decimal timestamps() end @@ -23,8 +25,8 @@ defmodule Batches do @doc false def changeset(new_batch, updates) do new_batch - |> cast(updates, [:merkle_root, :amount_of_proofs, :is_verified, :submission_block_number, :submission_transaction_hash, :submission_timestamp, :response_block_number, :response_transaction_hash, :response_timestamp, :data_pointer, :cost_per_proof, :sender_address]) - |> validate_required([:merkle_root, :amount_of_proofs, :is_verified, :submission_block_number, :submission_transaction_hash, :cost_per_proof, :sender_address]) + |> cast(updates, [:merkle_root, :amount_of_proofs, :is_verified, :submission_block_number, :submission_transaction_hash, :submission_timestamp, :response_block_number, :response_transaction_hash, :response_timestamp, :data_pointer, :fee_per_proof, :sender_address, :max_aggregator_fee]) + |> validate_required([:merkle_root, :amount_of_proofs, :is_verified, :submission_block_number, :submission_transaction_hash, :fee_per_proof, :sender_address]) |> validate_format(:merkle_root, ~r/0x[a-fA-F0-9]{64}/) |> unique_constraint(:merkle_root) |> validate_number(:amount_of_proofs, greater_than: 0) @@ -33,7 +35,8 @@ defmodule Batches do |> validate_format(:submission_transaction_hash, ~r/0x[a-fA-F0-9]{64}/) |> validate_number(:response_block_number, greater_than: 0) |> validate_format(:response_transaction_hash, ~r/0x[a-fA-F0-9]{64}/) - |> validate_number(:cost_per_proof, greater_than: 0) + |> validate_number(:max_aggregator_fee, greater_than: 0) + |> validate_number(:fee_per_proof, greater_than_or_equal_to: 0) end def cast_to_batches(%BatchDB{} = batch_db) do @@ -48,8 +51,9 @@ defmodule Batches do response_transaction_hash: batch_db.response_transaction_hash, response_timestamp: batch_db.response_timestamp, data_pointer: batch_db.data_pointer, - cost_per_proof: batch_db.cost_per_proof, - sender_address: batch_db.sender_address + fee_per_proof: batch_db.fee_per_proof, + sender_address: batch_db.sender_address, + max_aggregator_fee: batch_db.max_aggregator_fee } end @@ -144,12 +148,11 @@ defmodule Batches do case Explorer.Repo.transaction(multi) do {:ok, _} -> - IO.puts("Batch inserted successfully") + Logger.debug("Batch inserted successfully") {:ok, :success} {:error, _failed_operation, failed_changeset, _reason} -> - IO.puts("Batch insert failed:") - IO.inspect(failed_changeset) + Logger.error("Error inserting batch: #{inspect(failed_changeset.errors)}") {:error, failed_changeset} end @@ -166,7 +169,7 @@ defmodule Batches do and existing_batch.response_transaction_hash != batch_changeset.changes.response_transaction_hash) # reorg may change response_tx_hash or stored_proofs == nil and proofs != %{} # no proofs registered in DB, but some received do - "Batch values have changed, updating in DB" |> IO.puts() + "Batch values have changed, updating in DB" |> Logger.debug() updated_changeset = Ecto.Changeset.change(existing_batch, batch_changeset.changes) # no changes in proofs table multi = @@ -176,18 +179,17 @@ defmodule Batches do case Explorer.Repo.transaction(multi) do {:ok, _} -> - "Batch updated and new proofs inserted successfully" |> IO.puts() + "Batch updated and new proofs inserted successfully" |> Logger.debug() {:ok, :empty} {:error, _, changeset, _} -> - "Error: #{inspect(changeset.errors)}" |> IO.puts() + "Error: #{inspect(changeset.errors)}" |> Logger.error() {:error, changeset} end end rescue error -> - IO.inspect("Error updating batch in DB: #{inspect(error)}") - raise error + "Error updating batch in DB: #{inspect(error)}" |> Logger.alert() end end end diff --git a/explorer/lib/explorer/models/eigen_metadata_struct.ex b/explorer/lib/explorer/models/eigen_metadata_struct.ex index 1da8bba3e..499d56064 100644 --- a/explorer/lib/explorer/models/eigen_metadata_struct.ex +++ b/explorer/lib/explorer/models/eigen_metadata_struct.ex @@ -1,4 +1,5 @@ defmodule EigenOperatorMetadataStruct do + require Logger defstruct [:name, :website, :description, :logo, :twitter] def map_to_struct(%{ @@ -18,7 +19,7 @@ defmodule EigenOperatorMetadataStruct do end def map_to_struct(other) do - dbg(other) + Logger.error("Error mapping operator metadata to struct: #{inspect(other)}") {:error, :invalid_format} end diff --git a/explorer/lib/explorer/models/operators.ex b/explorer/lib/explorer/models/operators.ex index d783e2b21..31a275aef 100644 --- a/explorer/lib/explorer/models/operators.ex +++ b/explorer/lib/explorer/models/operators.ex @@ -1,4 +1,5 @@ defmodule Operators do + require Logger use Ecto.Schema import Ecto.Changeset import Ecto.Query @@ -31,6 +32,15 @@ defmodule Operators do Operators.changeset(%Operators{}, Map.from_struct(operator)) end + def generate_new_total_stake_changeset(%{operator_address: operator_address}) do + new_total_stake = StakeRegistryManager.get_stake_of_quorum_for_operator(%Restakings{operator_address: operator_address}) + + query = from(o in Operators, where: o.address == ^operator_address, select: o) + operator = Explorer.Repo.one(query) + + Operators.changeset(operator, %{total_stake: new_total_stake}) + end + def get_operator_by_address(address) do query = from(o in Operators, where: o.address == ^address, select: o) Explorer.Repo.one(query) @@ -47,13 +57,23 @@ defmodule Operators do end def get_operators_with_their_weights() do - total_stake = Explorer.Repo.one(from(o in Operators, select: sum(o.total_stake))) + total_stake = Explorer.Repo.one( + from( + o in Operators, + where: o.is_active == true, + select: sum(o.total_stake)) + ) get_operators() |> Enum.map( fn operator -> - weight = Decimal.div(operator.total_stake, total_stake) - Map.from_struct(operator) |> Map.put(:weight, weight) + case operator.is_active do + false -> + Map.from_struct(operator) |> Map.put(:weight, 0) + true -> + weight = Decimal.div(operator.total_stake, total_stake) + Map.from_struct(operator) |> Map.put(:weight, weight) + end end ) end @@ -70,18 +90,18 @@ defmodule Operators do def register_or_update_operator(%Operators{} = operator) do changeset = case Operators.generate_changeset(operator) do %Ecto.Changeset{valid?: false} = changeset -> - dbg("Invalid changeset: #{inspect(changeset)}") + "Invalid changeset: #{inspect(changeset)}" |> Logger.error() :nil changeset -> changeset end case Explorer.Repo.get_by(Operators, address: operator.address) do nil -> - dbg("Inserting new operator") + "Inserting new operator" |> Logger.debug() Explorer.Repo.insert(changeset) existing_operator -> - dbg("Updating operator") + "Updating operator" |> Logger.debug() Ecto.Changeset.change(existing_operator, changeset.changes) |> Explorer.Repo.update() end @@ -98,9 +118,9 @@ defmodule Operators do {:error, reason} -> case reason do %Jason.DecodeError{} -> - dbg("Error decoding operator metadata: operator link does not contain a JSON") + "Error decoding operator metadata: operator link does not contain a JSON" |> Logger.error() _ -> - dbg("Error fetching operator metadata:", reason) + "Error fetching operator metadata: #{inspect(reason)}" |> Logger.error() end %EigenOperatorMetadataStruct{name: nil, website: nil, description: nil, logo: nil, twitter: nil} end @@ -114,7 +134,8 @@ defmodule Operators do def unregister_operator(%Operators{address: address}) do query = from(o in Operators, where: o.address == ^address) - Explorer.Repo.update_all(query, set: [is_active: false]) + Explorer.Repo.update_all(query, set: [is_active: false, total_stake: 0]) + Restakings.remove_restakes_of_operator(%{operator_address: address}) end def get_total_stake(%Operators{} = operator) do diff --git a/explorer/lib/explorer/models/proofs.ex b/explorer/lib/explorer/models/proofs.ex index eebc9520f..f74f7dac2 100644 --- a/explorer/lib/explorer/models/proofs.ex +++ b/explorer/lib/explorer/models/proofs.ex @@ -42,4 +42,49 @@ defmodule Proofs do end end + def get_number_of_batches_containing_proof(proof_hash_hex) do + proof_hash_hex = String.replace_prefix(proof_hash_hex, "0x", "") + + {:ok, proof_hash_binary} = Base.decode16(proof_hash_hex, case: :mixed) + + query = from p in Proofs, + where: p.proof_hash == ^proof_hash_binary, + select: %{ + count: count(p.batch_merkle_root, :distinct) + } + + case Explorer.Repo.one(query) do + %{count: count} -> count + nil -> 0 + end + end + + def get_batches_containing_proof(proof_hash_hex, page \\ 1, page_size \\ 10) do + proof_hash_hex = String.replace_prefix(proof_hash_hex, "0x", "") + + {:ok, proof_hash_binary} = Base.decode16(proof_hash_hex, case: :mixed) + + offset = (page - 1) * page_size + + query = from(p in Proofs, + where: p.proof_hash == ^proof_hash_binary, + order_by: [desc: p.id], + limit: ^page_size, + offset: ^offset, + distinct: p.batch_merkle_root, + select: p.batch_merkle_root) + + case Explorer.Repo.all(query) do + [] -> + [] + results -> + results + |> case do + [] -> [] + [root] -> [root] + roots -> roots + end + end + end + end diff --git a/explorer/lib/explorer/models/quorums.ex b/explorer/lib/explorer/models/quorums.ex index c667a54da..a12af1ae9 100644 --- a/explorer/lib/explorer/models/quorums.ex +++ b/explorer/lib/explorer/models/quorums.ex @@ -1,4 +1,5 @@ defmodule Quorums do + require Logger use Ecto.Schema import Ecto.Changeset import Ecto.Query @@ -15,7 +16,7 @@ defmodule Quorums do def handle_quorum(%Quorums{} = quorum) do strategy_addresses = StakeRegistryManager.get_strategies_of_quorum(quorum.id) - insert_quorum_if_not_present(quorum) + insert_quorum_if_not_present(quorum) # Only for new Quorums inserted by running Quorums.handle_quorum(%Quorums{id: 0}) Enum.each(strategy_addresses, fn strategy_address -> @@ -31,7 +32,7 @@ defmodule Quorums do def insert_quorum_if_not_present(%Quorums{} = quorum) do case get_quorum_by_id(quorum.id) do nil -> - dbg "inserting new quorum" + "Inserting new quorum" |> Logger.debug() Explorer.Repo.insert(quorum) _ -> nil @@ -53,6 +54,7 @@ defmodule Quorums do end defmodule QuorumStrategies do + require Logger use Ecto.Schema import Ecto.Changeset import Ecto.Query @@ -89,9 +91,9 @@ defmodule QuorumStrategies do QuorumStrategies.generate_changeset(quorum.id, strategy.id) |> Explorer.Repo.insert() end end + def insert_quorum_strategy(any_quorum, nil) do - dbg "trying to insert a nil or errored strategy, skipping" - dbg {any_quorum, nil} + "Trying to insert a nil or errored strategy, skipping: #{inspect(any_quorum)}" |> Logger.warning() nil end end diff --git a/explorer/lib/explorer/models/restakings.ex b/explorer/lib/explorer/models/restakings.ex index 4d4f40c37..788cfb3b5 100644 --- a/explorer/lib/explorer/models/restakings.ex +++ b/explorer/lib/explorer/models/restakings.ex @@ -1,4 +1,5 @@ defmodule Restakings do + require Logger use Ecto.Schema import Ecto.Changeset import Ecto.Query @@ -28,6 +29,7 @@ defmodule Restakings do Operators.get_operators() |> Enum.map(fn operator -> StakeRegistryManager.has_operator_changed_staking(%{fromBlock: from_block, operator_id: operator.id, operator_address: operator.address}) end) |> Enum.reject(fn {_operator_id, _operator_address, has_changed_stake} -> not has_changed_stake end) + |> Enum.reject(fn {operator_id, _operator_address, _has_changed_stake} -> not Operators.get_operator_by_id(operator_id).is_active end) |> Enum.map(fn {operator_id, operator_address, _has_changed_stake} -> DelegationManager.get_operator_all_strategies_shares(%Operators{id: operator_id, address: operator_address}) end) |> Enum.each(&insert_or_update_restakings/1) end @@ -41,29 +43,41 @@ defmodule Restakings do multi = case Restakings.get_by_operator_and_strategy(%Restakings{operator_address: restaking.operator_address, strategy_address: restaking.strategy_address}) do nil -> - "inserting restaking" |> dbg + "Inserting restaking" |> Logger.debug() Ecto.Multi.new() |> Ecto.Multi.insert(:insert_restaking, changeset) |> Ecto.Multi.update(:update_strategy_total_staked, Strategies.generate_update_total_staked_changeset(%{new_restaking: restaking})) existing_restaking -> - "updating restaking" |> dbg + "Updating restaking" |> Logger.debug() Ecto.Multi.new() |> Ecto.Multi.update(:update_restaking, Ecto.Changeset.change(existing_restaking, changeset.changes)) |> Ecto.Multi.update(:update_strategy_total_staked, Strategies.generate_update_total_staked_changeset(%{new_restaking: restaking})) end + multi = multi + |> Ecto.Multi.update(:update_operator_total_stake, Operators.generate_new_total_stake_changeset(%{operator_address: restaking.operator_address})) + case Explorer.Repo.transaction(multi) do {:ok, _} -> - dbg "Restaking inserted or updated" + "Restaking inserted or updated" |> Logger.debug() {:ok, :empty} {:error, _, changeset, _} -> - "Error updating restakings table: #{inspect(changeset.errors)}" |> IO.puts() + "Error updating restakings table: #{inspect(changeset.errors)}" |> Logger.error() {:error, changeset} end end - def get_by_operator_and_strategy(%Restakings{operator_address: operator_address, strategy_address: strategy_address}) do + def remove_restakes_of_operator(%{operator_address: operator_address}) do + Logger.debug("Removing restakes of operator") + query = from(r in Restakings, where: r.operator_address == ^operator_address) + restakings = Explorer.Repo.all(query) + + Explorer.Repo.delete_all(query) + Enum.each(restakings, &Strategies.discount_restaking/1) + end + + def get_by_operator_and_strategy(%Restakings{operator_address: operator_address, strategy_address: strategy_address}) do query = from( r in Restakings, where: r.operator_address == ^operator_address and r.strategy_address == ^strategy_address, @@ -84,6 +98,7 @@ defmodule Restakings do query = from r in Restakings, join: s in Strategies, on: r.strategy_address == s.strategy_address, where: r.operator_id == ^operator_id, + order_by: [desc: r.stake], select: %{ restaking: r, strategy: %{ diff --git a/explorer/lib/explorer/models/strategies.ex b/explorer/lib/explorer/models/strategies.ex index 74bbb342a..9f5c1b312 100644 --- a/explorer/lib/explorer/models/strategies.ex +++ b/explorer/lib/explorer/models/strategies.ex @@ -1,4 +1,5 @@ defmodule Strategies do + require Logger use Ecto.Schema import Ecto.Changeset import Ecto.Query @@ -58,7 +59,7 @@ defmodule Strategies do end def add_strategy(%Strategies{} = new_strategy) do - dbg "adding strategy" + "Adding strategy" |> Logger.debug() Strategies.generate_changeset(new_strategy) |> Explorer.Repo.insert() end def add_strategy({:error, _error}) do @@ -98,4 +99,18 @@ defmodule Strategies do Strategies.changeset(strategy, %{total_staked: new_stake}) end + def discount_restaking(restaking) do + query = from(s in Strategies, + where: s.strategy_address == ^restaking.strategy_address, + select: s) + strategy = Explorer.Repo.one(query) + + new_stake = + strategy.total_staked + |> Decimal.sub(restaking.stake) + |> (fn stake -> if Decimal.compare(stake, 0) == :lt, do: Decimal.new(0), else: stake end).() + + Strategies.changeset(strategy, %{total_staked: new_stake}) |> Explorer.Repo.update() + + end end diff --git a/explorer/lib/explorer/periodically.ex b/explorer/lib/explorer/periodically.ex index 8a13b0527..423b3738e 100644 --- a/explorer/lib/explorer/periodically.ex +++ b/explorer/lib/explorer/periodically.ex @@ -1,4 +1,5 @@ defmodule Explorer.Periodically do + require Logger alias Phoenix.PubSub use GenServer @@ -52,7 +53,7 @@ defmodule Explorer.Periodically do end def process_batches(fromBlock, toBlock) do - "Processing from block #{fromBlock} to block #{toBlock}..." |> IO.inspect() + "Processing from block #{fromBlock} to block #{toBlock}..." |> Logger.debug() try do AlignedLayerServiceManager.get_new_batch_events(%{fromBlock: fromBlock, toBlock: toBlock}) @@ -60,23 +61,23 @@ defmodule Explorer.Periodically do # This function will avoid processing a batch taken by another process |> Enum.map(&process_batch_if_not_in_other_process/1) rescue - error -> IO.puts("An error occurred during batch processing:\n#{inspect(error)}") + error -> Logger.error("An error occurred during batch processing:\n#{inspect(error)}") end - IO.inspect("Done processing from block #{fromBlock} to block #{toBlock}") + Logger.debug("Done processing from block #{fromBlock} to block #{toBlock}") end def process_batch_if_not_in_other_process(%BatchDB{} = batch) do - "Starting batch: #{batch.merkle_root}" |> IO.inspect() + "Starting batch: #{batch.merkle_root}" |> Logger.debug() # Don't process same twice concurrently # one lock for each batch case Mutex.lock(BatchMutex, {batch.merkle_root}) do {:error, :busy} -> - "Batch already being processed: #{batch.merkle_root}" |> IO.inspect() + "Batch already being processed: #{batch.merkle_root}" |> Logger.debug() nil {:ok, lock} -> - "Processing batch: #{batch.merkle_root}" |> IO.inspect() + "Processing batch: #{batch.merkle_root}" |> Logger.debug() {batch_changeset, proofs} = batch @@ -95,21 +96,20 @@ defmodule Explorer.Periodically do }) {:error, error} -> - IO.puts("Some error in DB operation, not broadcasting update_views") - IO.inspect(error) + Logger.error("Some error in DB operation, not broadcasting update_views: #{inspect(error)}") # no changes in DB nil -> nil end - "Done processing batch: #{batch.merkle_root}" |> IO.inspect() + "Done processing batch: #{batch.merkle_root}" |> Logger.debug() Mutex.release(BatchMutex, lock) end end defp process_unverified_batches() do - "Verifying previous unverified batches..." |> IO.inspect() + "Verifying previous unverified batches..." |> Logger.debug() unverified_batches = Batches.get_unverified_batches() array_of_changest_tuples = @@ -127,18 +127,18 @@ defmodule Explorer.Periodically do end def process_quorum_strategy_changes() do - "Processing strategy changes..." |> IO.inspect() + "Processing strategy changes..." |> Logger.debug() AlignedLayerServiceManager.update_restakeable_strategies() Quorums.process_quorum_changes() end def process_operators(fromBlock) do - "Processing operators..." |> IO.inspect() + "Processing operators..." |> Logger.debug() AVSDirectoryManager.process_and_store_operator_data(%{fromBlock: fromBlock}) end def process_restaking_changes(read_from_block) do - "Processing restaking changes..." |> IO.inspect() + "Processing restaking changes..." |> Logger.debug() Restakings.process_restaking_changes(%{fromBlock: read_from_block}) end end diff --git a/explorer/lib/explorer/repo.ex b/explorer/lib/explorer/repo.ex index 7780182ee..a227cbe46 100644 --- a/explorer/lib/explorer/repo.ex +++ b/explorer/lib/explorer/repo.ex @@ -15,7 +15,8 @@ defmodule Explorer.Repo do hostname: System.get_env("DB_HOST"), password: System.get_env("DB_PASS"), username: System.get_env("DB_USER"), - port: 5432 + port: 5432, + log: false ] system_opts diff --git a/explorer/lib/explorer_web/components/assets_cta.ex b/explorer/lib/explorer_web/components/assets_cta.ex index db0c65866..8f0c33a92 100644 --- a/explorer/lib/explorer_web/components/assets_cta.ex +++ b/explorer/lib/explorer_web/components/assets_cta.ex @@ -14,7 +14,7 @@ defmodule AssetsCTAComponent do <.link navigate={~p"/operators"} class="flex flex-col justify-start gap-0.5 group">

- Total Active Operators + Registered Active Operators

<.right_arrow />
diff --git a/explorer/lib/explorer_web/components/clipboard.ex b/explorer/lib/explorer_web/components/clipboard.ex index db9b0dfbc..719ac0291 100644 --- a/explorer/lib/explorer_web/components/clipboard.ex +++ b/explorer/lib/explorer_web/components/clipboard.ex @@ -24,7 +24,7 @@ defmodule CopyToClipboardButtonComponent do } phx-hook="CopyToClipboard" data-clipboard-text={@text_to_copy} - id={"copy-to-clipboard-" <> @text_to_copy} + id={"copy-to-clipboard-" <> Utils.random_id(@text_to_copy)} phx-target={@myself} phx-click="copied" > diff --git a/explorer/lib/explorer_web/components/contracts.ex b/explorer/lib/explorer_web/components/contracts.ex index e2902cf26..6f353d69a 100644 --- a/explorer/lib/explorer_web/components/contracts.ex +++ b/explorer/lib/explorer_web/components/contracts.ex @@ -8,9 +8,9 @@ defmodule ContractsComponent do {:ok, assign(socket, service_manager_address: - AlignedLayerServiceManager.get_aligned_layer_service_manager_address(), + AlignedLayerServiceManager.get_aligned_layer_service_manager_address(), batcher_payment_service_address: - AlignedLayerServiceManager.get_batcher_payment_service_address(), + BatcherPaymentServiceManager.get_batcher_payment_service_address(), network: System.get_env("ENVIRONMENT") )} end diff --git a/explorer/lib/explorer_web/components/core_components.ex b/explorer/lib/explorer_web/components/core_components.ex index f0ec4892b..54976b84f 100644 --- a/explorer/lib/explorer_web/components/core_components.ex +++ b/explorer/lib/explorer_web/components/core_components.ex @@ -388,32 +388,64 @@ defmodule ExplorerWeb.CoreComponents do end @doc """ - Renders a dynamic badge compoent. + Renders a badge component. """ attr :class, :string, default: nil - attr :status, :boolean, default: true - attr :falsy_text, :string, default: "Pending" - attr :truthy_text, :string, default: "Verified" + attr :variant, :string, default: "accent" slot :inner_block, default: nil - def dynamic_badge(assigns) do + def badge(assigns) do ~H""" "text-accent-foreground bg-accent group-hover:bg-primary/80" - false -> "text-background bg-foreground group-hover:bg-foreground/80" + "px-3 py-1 rounded-full font-semibold", + case @variant do + "accent" -> "text-accent-foreground bg-accent group-hover:bg-accent/80" + "primary" -> "text-primary-foreground bg-primary group-hover:bg-primary/80" + "secondary" -> "text-secondary-foreground bg-secondary group-hover:bg-secondary/80" + "destructive" -> "text-destructive-foreground bg-destructive group-hover:bg-destructive/80" + "foreground" -> "text-background bg-foreground group-hover:bg-foreground/80" + "card" -> "text-card-foreground bg-card group-hover:bg-card/80" + _ -> "text-accent-foreground bg-accent group-hover:bg-accent/80" end, @class ]) }> + <%= render_slot(@inner_block) %> + + """ + end + + @doc """ + Renders a dynamic badge compoent. + """ + attr :class, :string, default: nil + attr :status, :boolean, default: true + attr :falsy_text, :string, default: "Pending" + attr :truthy_text, :string, default: "Verified" + slot :inner_block, default: nil + + def dynamic_badge(assigns) do + ~H""" + <.badge + variant={ + case @status do + true -> "accent" + false -> "foreground" + end + } + class={ + classes([ + @class + ]) + } + > <%= case @status do true -> @truthy_text false -> @falsy_text end %> <%= render_slot(@inner_block) %> - + """ end @@ -708,6 +740,43 @@ defmodule ExplorerWeb.CoreComponents do """ end + @doc """ + Renders an empty card background. + + ## Examples + + <.empty_card_background text="No users found" /> + + """ + attr :class, :string, default: nil + attr :inner_text_class, :string, default: nil + attr :text, :string, default: nil + slot :inner_block + + def empty_card_background(assigns) do + ~H""" + <.card_background class={ + classes([ + "overflow-x-auto min-h-[38.45rem] flex flex-col items-center justify-center gap-2", + @class + ]) + }> +

+ <%= @text %> +

+ <%= render_slot(@inner_block) %> + + """ + end + @doc """ Renders a data list. @@ -735,30 +804,6 @@ defmodule ExplorerWeb.CoreComponents do """ end - @doc """ - Renders a back navigation link. - - ## Examples - - <.back navigate={~p"/posts"}>Back to posts - """ - attr :navigate, :any, required: true - slot :inner_block, required: true - - def back(assigns) do - ~H""" -
- <.link - navigate={@navigate} - class="text-sm font-semibold leading-6 text-zinc-900 hover:text-zinc-700" - > - <.icon name="hero-arrow-left-solid" class="h-3 w-3" /> - <%= render_slot(@inner_block) %> - -
- """ - end - @doc """ Renders a [Heroicon](https://heroicons.com). diff --git a/explorer/lib/explorer_web/components/nav.ex b/explorer/lib/explorer_web/components/nav.ex index f4ed5ff0f..a93b9565e 100644 --- a/explorer/lib/explorer_web/components/nav.ex +++ b/explorer/lib/explorer_web/components/nav.ex @@ -1,6 +1,11 @@ defmodule NavComponent do use ExplorerWeb, :live_component + @impl true + def mount(socket) do + {:ok, assign(socket, latest_release: ReleasesHelper.get_latest_release())} + end + @impl true def render(assigns) do ~H""" @@ -46,6 +51,12 @@ defmodule NavComponent do GitHub + <.badge :if={@latest_release != nil} class="hidden md:inline"> + <%= @latest_release %> + <.tooltip> + Latest Aligned version + +