From b9e86ff472fdd489a5b47d9f0679798582219721 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Thu, 24 Oct 2024 14:30:12 +0200 Subject: [PATCH 01/43] append symbiotic-core submodule --- .gitmodules | 3 +++ ethexe/contracts/lib/symbiotic-core | 1 + 2 files changed, 4 insertions(+) create mode 160000 ethexe/contracts/lib/symbiotic-core diff --git a/.gitmodules b/.gitmodules index c389af1310c..7b68e8dbc8c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,3 +10,6 @@ [submodule "ethexe/contracts/lib/openzeppelin-contracts-upgradeable"] path = ethexe/contracts/lib/openzeppelin-contracts-upgradeable url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable +[submodule "ethexe/contracts/lib/symbiotic-core"] + path = ethexe/contracts/lib/symbiotic-core + url = git@github.com:grishasobol/symbiotic-core.git diff --git a/ethexe/contracts/lib/symbiotic-core b/ethexe/contracts/lib/symbiotic-core new file mode 160000 index 00000000000..9cfc73f74b5 --- /dev/null +++ b/ethexe/contracts/lib/symbiotic-core @@ -0,0 +1 @@ +Subproject commit 9cfc73f74b568ad367284407d9b4dbca82a981eb From c9d30e15aa93be6dd68178935b76762976238c04 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Fri, 25 Oct 2024 13:04:09 +0200 Subject: [PATCH 02/43] append initial middleware and simple test --- ethexe/contracts/src/Middleware.sol | 34 ++++++++++++++++++++++++++ ethexe/contracts/test/Middleware.t.sol | 29 ++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 ethexe/contracts/src/Middleware.sol create mode 100644 ethexe/contracts/test/Middleware.t.sol diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol new file mode 100644 index 00000000000..ac4794efa17 --- /dev/null +++ b/ethexe/contracts/src/Middleware.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.26; + +import {Time} from "@openzeppelin/contracts/utils/types/Time.sol"; + +contract Middleware { + uint48 public immutable ERA_DURATION; + uint48 public immutable GENESIS_TIMESTAMP; + address public immutable DELEGATOR_FACTORY; + address public immutable OPERATOR_SPECIFIC_DELEGATOR_TYPE_INDEX; + address public immutable SLASHER_FACTORY; + address public immutable OPERATOR_REGISTRY; + address public immutable NETWORK_REGISTRY; + address public immutable COLLATERAL; + + constructor( + uint48 eraDuration, + address delegatorFactory, + address operatorSpecificDelegatorTypeIndex, + address slasherFactory, + address operatorRegistry, + address networkRegistry, + address collateral + ) { + ERA_DURATION = eraDuration; + GENESIS_TIMESTAMP = Time.timestamp(); + DELEGATOR_FACTORY = delegatorFactory; + OPERATOR_SPECIFIC_DELEGATOR_TYPE_INDEX = operatorSpecificDelegatorTypeIndex; + SLASHER_FACTORY = slasherFactory; + OPERATOR_REGISTRY = operatorRegistry; + NETWORK_REGISTRY = networkRegistry; + COLLATERAL = collateral; + } +} diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol new file mode 100644 index 00000000000..f2dde23ddd7 --- /dev/null +++ b/ethexe/contracts/test/Middleware.t.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.26; + +import {Middleware} from "../src/Middleware.sol"; +import {Test, console} from "forge-std/Test.sol"; +import {Time} from "@openzeppelin/contracts/utils/types/Time.sol"; +import {MessageHashUtils} from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; + +contract MiddlewareTest is Test { + using MessageHashUtils for address; + + Middleware public middleware; + + function setUp() public { + middleware = new Middleware(100, address(0), address(0), address(0), address(0), address(0), address(0)); + } + + function test_constructor() public view { + console.log("ERA_DURATION: ", uint256(middleware.ERA_DURATION())); + assertEq(uint256(middleware.ERA_DURATION()), 100); + assertEq(uint256(middleware.GENESIS_TIMESTAMP()), Time.timestamp()); + assertEq(middleware.DELEGATOR_FACTORY(), address(0)); + assertEq(middleware.OPERATOR_SPECIFIC_DELEGATOR_TYPE_INDEX(), address(0)); + assertEq(middleware.SLASHER_FACTORY(), address(0)); + assertEq(middleware.OPERATOR_REGISTRY(), address(0)); + assertEq(middleware.NETWORK_REGISTRY(), address(0)); + assertEq(middleware.COLLATERAL(), address(0)); + } +} From d0ad83703f88deaabfee621c33dce377745a0654 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Tue, 29 Oct 2024 11:42:54 +0100 Subject: [PATCH 03/43] registrations and get stake implementations --- ethexe/contracts/foundry.toml | 3 +- ethexe/contracts/src/Middleware.sol | 167 +++++++++- .../src/libraries/MapWithTimeData.sol | 74 +++++ ethexe/contracts/test/Middleware.t.sol | 298 +++++++++++++++++- 4 files changed, 525 insertions(+), 17 deletions(-) create mode 100644 ethexe/contracts/src/libraries/MapWithTimeData.sol diff --git a/ethexe/contracts/foundry.toml b/ethexe/contracts/foundry.toml index bb0029c8438..6dfe199eb54 100644 --- a/ethexe/contracts/foundry.toml +++ b/ethexe/contracts/foundry.toml @@ -14,7 +14,8 @@ ignored_warnings_from = [ "src/MirrorProxy.sol", ] # Enable new EVM codegen -via_ir = true +via_ir = false +ignored_warning_paths = ["lib/"] [rpc_endpoints] sepolia = "${SEPOLIA_RPC_URL}" diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index ac4794efa17..822adfedf3c 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -1,34 +1,191 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.26; +import {EnumerableMap} from "@openzeppelin/contracts/utils/structs/EnumerableMap.sol"; import {Time} from "@openzeppelin/contracts/utils/types/Time.sol"; +import {Subnetwork} from "symbiotic-core/src/contracts/libraries/Subnetwork.sol"; +import {IVault} from "symbiotic-core/src/interfaces/vault/IVault.sol"; +import {IRegistry} from "symbiotic-core/src/interfaces/common/IRegistry.sol"; +import {IEntity} from "symbiotic-core/src/interfaces/common/IEntity.sol"; +import {IBaseDelegator} from "symbiotic-core/src/interfaces/delegator/IBaseDelegator.sol"; +import {INetworkRegistry} from "symbiotic-core/src/interfaces/INetworkRegistry.sol"; +import {IOptInService} from "symbiotic-core/src/interfaces/service/IOptInService.sol"; + +import {MapWithTimeData} from "./libraries/MapWithTimeData.sol"; + contract Middleware { + using EnumerableMap for EnumerableMap.AddressToUintMap; + using MapWithTimeData for EnumerableMap.AddressToUintMap; + using Subnetwork for address; + + error OperatorAlreadyRegistered(); + error ZeroVaultAddress(); + error NotKnownVault(); + error IncorrectDelegatorType(); + error VaultWrongEpochDuration(); + error UnknownCollateral(); + error NotEnoughStakeInVault(); + error OperatorGracePeriodNotPassed(); + error VaultGracePeriodNotPassed(); + error NotVaultOwner(); + error IncorrectTimestamp(); + error OperatorDoesNotExist(); + error OperatorDoesNotOptIn(); + uint48 public immutable ERA_DURATION; uint48 public immutable GENESIS_TIMESTAMP; + address public immutable VAULT_FACTORY; address public immutable DELEGATOR_FACTORY; - address public immutable OPERATOR_SPECIFIC_DELEGATOR_TYPE_INDEX; address public immutable SLASHER_FACTORY; address public immutable OPERATOR_REGISTRY; - address public immutable NETWORK_REGISTRY; + address public immutable NETWORK_OPT_IN; address public immutable COLLATERAL; + EnumerableMap.AddressToUintMap private operators; + EnumerableMap.AddressToUintMap private vaults; + constructor( uint48 eraDuration, + address vaultFactory, address delegatorFactory, - address operatorSpecificDelegatorTypeIndex, address slasherFactory, address operatorRegistry, address networkRegistry, + address networkOptIn, address collateral ) { ERA_DURATION = eraDuration; GENESIS_TIMESTAMP = Time.timestamp(); + VAULT_FACTORY = vaultFactory; DELEGATOR_FACTORY = delegatorFactory; - OPERATOR_SPECIFIC_DELEGATOR_TYPE_INDEX = operatorSpecificDelegatorTypeIndex; SLASHER_FACTORY = slasherFactory; OPERATOR_REGISTRY = operatorRegistry; - NETWORK_REGISTRY = networkRegistry; + NETWORK_OPT_IN = networkOptIn; COLLATERAL = collateral; + + INetworkRegistry(networkRegistry).registerNetwork(); + } + + // TODO: append total operator stake check is big enough + // TODO: append check operator is opt-in network + // TODO: append check operator is operator registry entity + function registerOperator() external { + if (!IRegistry(OPERATOR_REGISTRY).isEntity(msg.sender)) { + revert OperatorDoesNotExist(); + } + if (!IOptInService(NETWORK_OPT_IN).isOptedIn(msg.sender, address(this))) { + revert OperatorDoesNotOptIn(); + } + operators.append(msg.sender, address(0)); + } + + function disableOperator() external { + operators.disable(msg.sender); + } + + function enableOperator() external { + operators.enable(msg.sender); + } + + function unregisterOperator() external { + (, uint48 disabledTime) = operators.getTimes(msg.sender); + + if (disabledTime == 0 || disabledTime + 2 * ERA_DURATION > Time.timestamp()) { + revert OperatorGracePeriodNotPassed(); + } + + operators.remove(msg.sender); + } + + // TODO: check vault has enough stake + function registerVault(address vault) external { + if (vault == address(0)) { + revert ZeroVaultAddress(); + } + + if (!IRegistry(VAULT_FACTORY).isEntity(vault)) { + revert NotKnownVault(); + } + + if (IVault(vault).epochDuration() < 2 * ERA_DURATION) { + revert VaultWrongEpochDuration(); + } + + if (IVault(vault).collateral() != COLLATERAL) { + revert UnknownCollateral(); + } + + IBaseDelegator(IVault(vault).delegator()).setMaxNetworkLimit(network_identifier(), type(uint256).max); + + vaults.append(vault, msg.sender); + } + + function disableVault(address vault) external { + address vault_owner = vaults.getPinnedAddress(vault); + + if (vault_owner != msg.sender) { + revert NotVaultOwner(); + } + + vaults.disable(vault); + } + + function enableVault(address vault) external { + address vault_owner = vaults.getPinnedAddress(vault); + + if (vault_owner != msg.sender) { + revert NotVaultOwner(); + } + + vaults.enable(vault); + } + + function unregisterVault(address vault) external { + (, uint48 disabledTime) = vaults.getTimes(vault); + + if (disabledTime == 0 || disabledTime + 2 * ERA_DURATION > Time.timestamp()) { + revert VaultGracePeriodNotPassed(); + } + + vaults.remove(vault); + } + + function getOperatorStakeAt(address operator, uint48 ts) external view returns (uint256 stake) { + _checkTimestampInThePast(ts); + + (uint48 enabledTime, uint48 disabledTime) = operators.getTimes(operator); + if (!_wasActiveAt(enabledTime, disabledTime, ts)) { + return 0; + } + + for (uint256 i; i < vaults.length(); ++i) { + (address vault, uint48 vaultEnabledTime, uint48 vaultDisabledTime) = vaults.atWithTimes(i); + + if (!_wasActiveAt(vaultEnabledTime, vaultDisabledTime, ts)) { + continue; + } + + stake += IBaseDelegator(IVault(vault).delegator()).stakeAt(subnetwork(), operator, ts, new bytes(0)); + } + } + + function _wasActiveAt(uint48 enabledTime, uint48 disabledTime, uint48 ts) private pure returns (bool) { + return enabledTime != 0 && enabledTime <= ts && (disabledTime == 0 || disabledTime >= ts); + } + + // Timestamp must be always in the past + function _checkTimestampInThePast(uint48 ts) private view { + if (ts >= Time.timestamp()) { + revert IncorrectTimestamp(); + } + } + + function subnetwork() public view returns (bytes32) { + return address(this).subnetwork(network_identifier()); + } + + function network_identifier() public pure returns (uint96) { + return 0; } } diff --git a/ethexe/contracts/src/libraries/MapWithTimeData.sol b/ethexe/contracts/src/libraries/MapWithTimeData.sol new file mode 100644 index 00000000000..02b68276e5d --- /dev/null +++ b/ethexe/contracts/src/libraries/MapWithTimeData.sol @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.25; + +import {Checkpoints} from "@openzeppelin/contracts/utils/structs/Checkpoints.sol"; +import {Time} from "@openzeppelin/contracts/utils/types/Time.sol"; +import {EnumerableMap} from "@openzeppelin/contracts/utils/structs/EnumerableMap.sol"; + +library MapWithTimeData { + using EnumerableMap for EnumerableMap.AddressToUintMap; + + error AlreadyAdded(); + error NotEnabled(); + error AlreadyEnabled(); + + function toInner(uint256 value) private pure returns (uint48, uint48, address) { + return (uint48(value), uint48(value >> 48), address(uint160(value >> 96))); + } + + function toValue(uint48 enabledTime, uint48 disabledTime, address pinnedAddress) private pure returns (uint256) { + return uint256(enabledTime) | (uint256(disabledTime) << 48) | (uint256(uint160(pinnedAddress)) << 96); + } + + function append(EnumerableMap.AddressToUintMap storage self, address addr, address pinnedAddress) internal { + if (!self.set(addr, toValue(Time.timestamp(), 0, pinnedAddress))) { + revert AlreadyAdded(); + } + } + + function enable(EnumerableMap.AddressToUintMap storage self, address addr) internal { + (uint48 enabledTime, uint48 disabledTime, address pinnedAddress) = toInner(self.get(addr)); + + if (enabledTime != 0 && disabledTime == 0) { + revert AlreadyEnabled(); + } + + self.set(addr, toValue(Time.timestamp(), 0, pinnedAddress)); + } + + function disable(EnumerableMap.AddressToUintMap storage self, address addr) internal { + (uint48 enabledTime, uint48 disabledTime, address pinnedAddress) = toInner(self.get(addr)); + + if (enabledTime == 0 || disabledTime != 0) { + revert NotEnabled(); + } + + self.set(addr, toValue(enabledTime, Time.timestamp(), pinnedAddress)); + } + + function atWithTimes(EnumerableMap.AddressToUintMap storage self, uint256 idx) + internal + view + returns (address key, uint48 enabledTime, uint48 disabledTime) + { + uint256 value; + (key, value) = self.at(idx); + (enabledTime, disabledTime,) = toInner(value); + } + + function getTimes(EnumerableMap.AddressToUintMap storage self, address addr) + internal + view + returns (uint48 enabledTime, uint48 disabledTime) + { + (enabledTime, disabledTime,) = toInner(self.get(addr)); + } + + function getPinnedAddress(EnumerableMap.AddressToUintMap storage self, address addr) + internal + view + returns (address pinnedAddress) + { + (,, pinnedAddress) = toInner(self.get(addr)); + } +} diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index f2dde23ddd7..b91bab88a67 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -1,29 +1,305 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.26; -import {Middleware} from "../src/Middleware.sol"; -import {Test, console} from "forge-std/Test.sol"; +import {EnumerableMap} from "@openzeppelin/contracts/utils/structs/EnumerableMap.sol"; import {Time} from "@openzeppelin/contracts/utils/types/Time.sol"; import {MessageHashUtils} from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; +import {Upgrades} from "openzeppelin-foundry-upgrades/Upgrades.sol"; + +import {Test, console} from "forge-std/Test.sol"; +import {NetworkRegistry} from "symbiotic-core/src/contracts/NetworkRegistry.sol"; +import {POCBaseTest} from "symbiotic-core/test/POCBase.t.sol"; +import {IVaultConfigurator} from "symbiotic-core/src/interfaces/IVaultConfigurator.sol"; +import {IVault} from "symbiotic-core/src/interfaces/vault/IVault.sol"; +import {IBaseDelegator} from "symbiotic-core/src/interfaces/delegator/IBaseDelegator.sol"; +import {IOperatorSpecificDelegator} from "symbiotic-core/src/interfaces/delegator/IOperatorSpecificDelegator.sol"; +// import {IOptInService} from "symbiotic-core/src/interfaces/service/IOptInService.sol"; + +import {Middleware} from "../src/Middleware.sol"; +import {WrappedVara} from "../src/WrappedVara.sol"; +import {MapWithTimeData} from "../src/libraries/MapWithTimeData.sol"; contract MiddlewareTest is Test { using MessageHashUtils for address; + uint48 eraDuration = 1000; + address public owner; + POCBaseTest public sym; Middleware public middleware; + WrappedVara public wrappedVara; function setUp() public { - middleware = new Middleware(100, address(0), address(0), address(0), address(0), address(0), address(0)); + sym = new POCBaseTest(); + sym.setUp(); + + owner = address(this); + + wrappedVara = WrappedVara( + Upgrades.deployTransparentProxy("WrappedVara.sol", owner, abi.encodeCall(WrappedVara.initialize, (owner))) + ); + + wrappedVara.mint(owner, 1_000_000); + + middleware = new Middleware( + eraDuration, + address(sym.vaultFactory()), + address(sym.delegatorFactory()), + address(sym.slasherFactory()), + address(sym.operatorRegistry()), + address(sym.networkRegistry()), + address(sym.operatorNetworkOptInService()), + address(wrappedVara) + ); } function test_constructor() public view { - console.log("ERA_DURATION: ", uint256(middleware.ERA_DURATION())); - assertEq(uint256(middleware.ERA_DURATION()), 100); + assertEq(uint256(middleware.ERA_DURATION()), eraDuration); assertEq(uint256(middleware.GENESIS_TIMESTAMP()), Time.timestamp()); - assertEq(middleware.DELEGATOR_FACTORY(), address(0)); - assertEq(middleware.OPERATOR_SPECIFIC_DELEGATOR_TYPE_INDEX(), address(0)); - assertEq(middleware.SLASHER_FACTORY(), address(0)); - assertEq(middleware.OPERATOR_REGISTRY(), address(0)); - assertEq(middleware.NETWORK_REGISTRY(), address(0)); - assertEq(middleware.COLLATERAL(), address(0)); + assertEq(middleware.VAULT_FACTORY(), address(sym.vaultFactory())); + assertEq(middleware.DELEGATOR_FACTORY(), address(sym.delegatorFactory())); + assertEq(middleware.SLASHER_FACTORY(), address(sym.slasherFactory())); + assertEq(middleware.OPERATOR_REGISTRY(), address(sym.operatorRegistry())); + assertEq(middleware.COLLATERAL(), address(wrappedVara)); + + sym.networkRegistry().isEntity(address(middleware)); + } + + function test_registerOperator() public { + // Register operator + vm.startPrank(address(0x1)); + sym.operatorRegistry().registerOperator(); + sym.operatorNetworkOptInService().optIn(address(middleware)); + middleware.registerOperator(); + + // Try to register operator again + vm.expectRevert(abi.encodeWithSelector(MapWithTimeData.AlreadyAdded.selector)); + middleware.registerOperator(); + + // Try to register abother operator without registering it in symbiotic + vm.startPrank(address(0x2)); + vm.expectRevert(abi.encodeWithSelector(Middleware.OperatorDoesNotExist.selector)); + middleware.registerOperator(); + + // Try to register operator without opting in network + sym.operatorRegistry().registerOperator(); + vm.expectRevert(abi.encodeWithSelector(Middleware.OperatorDoesNotOptIn.selector)); + middleware.registerOperator(); + + // Now must be possible to register operator + sym.operatorNetworkOptInService().optIn(address(middleware)); + middleware.registerOperator(); + + // Disable operator and the enable it + middleware.disableOperator(); + middleware.enableOperator(); + + // Try to enable operator again + vm.expectRevert(abi.encodeWithSelector(MapWithTimeData.AlreadyEnabled.selector)); + middleware.enableOperator(); + + // Try to disable operator twice + middleware.disableOperator(); + vm.expectRevert(abi.encodeWithSelector(MapWithTimeData.NotEnabled.selector)); + middleware.disableOperator(); + + // Try to unregister operator - failed because operator is not disabled for enough time + vm.expectRevert(abi.encodeWithSelector(Middleware.OperatorGracePeriodNotPassed.selector)); + middleware.unregisterOperator(); + + // Wait for grace period and unregister operator + vm.warp(block.timestamp + eraDuration * 2); + middleware.unregisterOperator(); + } + + function test_registerVault() public { + sym.operatorRegistry().registerOperator(); + address vault = _newVault(eraDuration * 2, owner); + + // Register vault + middleware.registerVault(vault); + + // Try to register vault with zero address + vm.expectRevert(abi.encodeWithSelector(Middleware.ZeroVaultAddress.selector)); + middleware.registerVault(address(0x0)); + + // Try to register unknown vault + vm.expectRevert(abi.encodeWithSelector(Middleware.NotKnownVault.selector)); + middleware.registerVault(address(0x1)); + + // Try to register vault with wrong epoch duration + address vault2 = _newVault(eraDuration, owner); + vm.expectRevert(abi.encodeWithSelector(Middleware.VaultWrongEpochDuration.selector)); + middleware.registerVault(vault2); + + // Try to register vault with unknown collateral + address vault3 = address(sym.vault1()); + vm.expectRevert(abi.encodeWithSelector(Middleware.UnknownCollateral.selector)); + middleware.registerVault(vault3); + + // Try to enable vault once more + vm.expectRevert(abi.encodeWithSelector(MapWithTimeData.AlreadyEnabled.selector)); + middleware.enableVault(vault); + + // Try to disable vault twice + middleware.disableVault(vault); + vm.expectRevert(abi.encodeWithSelector(MapWithTimeData.NotEnabled.selector)); + middleware.disableVault(vault); + + { + vm.startPrank(address(0x1)); + + // Try to enable vault not from owner + vm.expectRevert(abi.encodeWithSelector(Middleware.NotVaultOwner.selector)); + middleware.enableVault(vault); + + // Try to disable vault not from owner + vm.expectRevert(abi.encodeWithSelector(Middleware.NotVaultOwner.selector)); + middleware.disableVault(vault); + + vm.stopPrank(); + } + + // Try to unregister vault - failed because vault is not disabled for enough time + vm.expectRevert(abi.encodeWithSelector(Middleware.VaultGracePeriodNotPassed.selector)); + middleware.unregisterVault(vault); + + // Wait for grace period and unregister vault + vm.warp(block.timestamp + eraDuration * 2); + middleware.unregisterVault(vault); + + // Register vault again, disable and unregister it not by owner + middleware.registerVault(vault); + middleware.disableVault(vault); + vm.startPrank(address(0x1)); + vm.warp(block.timestamp + eraDuration * 2); + middleware.unregisterVault(vault); + vm.stopPrank(); + + // Try to enable unknown vault + vm.expectRevert(abi.encodeWithSelector(EnumerableMap.EnumerableMapNonexistentKey.selector, address(0x1))); + middleware.enableVault(address(0x1)); + + // Try to disable unknown vault + vm.expectRevert(abi.encodeWithSelector(EnumerableMap.EnumerableMapNonexistentKey.selector, address(0x1))); + middleware.disableVault(address(0x1)); + + // Try to unregister unknown vault + vm.expectRevert(abi.encodeWithSelector(EnumerableMap.EnumerableMapNonexistentKey.selector, address(0x1))); + middleware.unregisterVault(address(0x1)); + } + + function test_operatorStake() public { + address operator1 = address(0x1); + address operator2 = address(0x2); + + _registerOperator(operator1); + _registerOperator(operator2); + + address vault1 = _createVaultForOperator(operator1); + address vault2 = _createVaultForOperator(operator2); + + _depositFromInVault(owner, vault1, 1_000); + _depositFromInVault(owner, vault2, 2_000); + + uint48 ts1 = uint48(block.timestamp); + vm.warp(block.timestamp + 1); + assertEq(middleware.getOperatorStakeAt(operator1, ts1), 1_000); + assertEq(middleware.getOperatorStakeAt(operator2, ts1), 2_000); + + // Create one more vault for operator1 and check operator1 stake + address vault3 = _createVaultForOperator(operator1); + + uint48 ts2 = uint48(block.timestamp); + vm.warp(block.timestamp + 1); + assertEq(middleware.getOperatorStakeAt(operator1, ts2), 1_000); + + _depositFromInVault(owner, vault3, 3_000); + uint48 ts3 = uint48(block.timestamp); + vm.warp(block.timestamp + 1); + assertEq(middleware.getOperatorStakeAt(operator1, ts3), 4_000); + } + + function _depositFromInVault(address from, address vault, uint256 amount) private { + vm.startPrank(from); + wrappedVara.approve(vault, amount); + IVault(vault).deposit(from, amount); + vm.stopPrank(); + } + + function _registerOperator(address operator) private { + vm.startPrank(operator); + sym.operatorRegistry().registerOperator(); + sym.operatorNetworkOptInService().optIn(address(middleware)); + middleware.registerOperator(); + vm.stopPrank(); + } + + function _createVaultForOperator(address operator) private returns (address vault) { + // Create vault + vault = _newVault(eraDuration * 2, operator); + { + vm.startPrank(operator); + + // Register vault in middleware + middleware.registerVault(vault); + + // Operator opt-in vault + sym.operatorVaultOptInService().optIn(vault); + + // Set initial network limit + IOperatorSpecificDelegator(IVault(vault).delegator()).setNetworkLimit( + middleware.subnetwork(), type(uint256).max + ); + + vm.stopPrank(); + } + } + + function _setNetworkLimit(address vault, address operator, uint256 limit) private { + vm.startPrank(address(operator)); + IOperatorSpecificDelegator(IVault(vault).delegator()).setNetworkLimit(middleware.subnetwork(), limit); + vm.stopPrank(); + } + + function _newVault(uint48 epochDuration, address operator) private returns (address vault) { + address[] memory networkLimitSetRoleHolders = new address[](1); + networkLimitSetRoleHolders[0] = operator; + + (vault,,) = sym.vaultConfigurator().create( + IVaultConfigurator.InitParams({ + version: sym.vaultFactory().lastVersion(), + owner: owner, + vaultParams: abi.encode( + IVault.InitParams({ + collateral: address(wrappedVara), + burner: address(middleware), + epochDuration: epochDuration, + depositWhitelist: false, + isDepositLimit: false, + depositLimit: 0, + defaultAdminRoleHolder: owner, + depositWhitelistSetRoleHolder: owner, + depositorWhitelistRoleHolder: owner, + isDepositLimitSetRoleHolder: owner, + depositLimitSetRoleHolder: owner + }) + ), + delegatorIndex: 2, + delegatorParams: abi.encode( + IOperatorSpecificDelegator.InitParams({ + baseParams: IBaseDelegator.BaseParams({ + defaultAdminRoleHolder: operator, + hook: address(0), + hookSetRoleHolder: operator + }), + networkLimitSetRoleHolders: networkLimitSetRoleHolders, + operator: operator + }) + ), + withSlasher: false, + slasherIndex: 0, + slasherParams: bytes("") + }) + ); } } From de72ac51736763e0e06294060e3479553e046ac0 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Tue, 29 Oct 2024 17:03:53 +0100 Subject: [PATCH 04/43] append getEnabledValidatorSet and tests --- ethexe/contracts/src/Middleware.sol | 70 ++++++++++++++++++---- ethexe/contracts/test/Middleware.t.sol | 81 ++++++++++++++++++++++---- 2 files changed, 127 insertions(+), 24 deletions(-) diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index 822adfedf3c..8e6a260c964 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -14,6 +14,7 @@ import {IOptInService} from "symbiotic-core/src/interfaces/service/IOptInService import {MapWithTimeData} from "./libraries/MapWithTimeData.sol"; +// TODO: support slashing contract Middleware { using EnumerableMap for EnumerableMap.AddressToUintMap; using MapWithTimeData for EnumerableMap.AddressToUintMap; @@ -35,6 +36,9 @@ contract Middleware { uint48 public immutable ERA_DURATION; uint48 public immutable GENESIS_TIMESTAMP; + uint48 public immutable OPERATOR_GRACE_PERIOD; + uint48 public immutable VAULT_GRACE_PERIOD; + uint48 public immutable VAULT_MIN_EPOCH_DURATION; address public immutable VAULT_FACTORY; address public immutable DELEGATOR_FACTORY; address public immutable SLASHER_FACTORY; @@ -57,6 +61,9 @@ contract Middleware { ) { ERA_DURATION = eraDuration; GENESIS_TIMESTAMP = Time.timestamp(); + OPERATOR_GRACE_PERIOD = 2 * eraDuration; + VAULT_GRACE_PERIOD = 2 * eraDuration; + VAULT_MIN_EPOCH_DURATION = 2 * eraDuration; VAULT_FACTORY = vaultFactory; DELEGATOR_FACTORY = delegatorFactory; SLASHER_FACTORY = slasherFactory; @@ -88,10 +95,11 @@ contract Middleware { operators.enable(msg.sender); } + // TODO: allow anybody to unregister operator function unregisterOperator() external { (, uint48 disabledTime) = operators.getTimes(msg.sender); - if (disabledTime == 0 || disabledTime + 2 * ERA_DURATION > Time.timestamp()) { + if (disabledTime == 0 || disabledTime + OPERATOR_GRACE_PERIOD > Time.timestamp()) { revert OperatorGracePeriodNotPassed(); } @@ -99,6 +107,7 @@ contract Middleware { } // TODO: check vault has enough stake + // TODO: support and check slasher function registerVault(address vault) external { if (vault == address(0)) { revert ZeroVaultAddress(); @@ -108,7 +117,7 @@ contract Middleware { revert NotKnownVault(); } - if (IVault(vault).epochDuration() < 2 * ERA_DURATION) { + if (IVault(vault).epochDuration() < VAULT_MIN_EPOCH_DURATION) { revert VaultWrongEpochDuration(); } @@ -116,7 +125,10 @@ contract Middleware { revert UnknownCollateral(); } - IBaseDelegator(IVault(vault).delegator()).setMaxNetworkLimit(network_identifier(), type(uint256).max); + address delegator = IVault(vault).delegator(); + if (IBaseDelegator(delegator).maxNetworkLimit(subnetwork()) != type(uint256).max) { + IBaseDelegator(delegator).setMaxNetworkLimit(network_identifier(), type(uint256).max); + } vaults.append(vault, msg.sender); } @@ -144,7 +156,7 @@ contract Middleware { function unregisterVault(address vault) external { (, uint48 disabledTime) = vaults.getTimes(vault); - if (disabledTime == 0 || disabledTime + 2 * ERA_DURATION > Time.timestamp()) { + if (disabledTime == 0 || disabledTime + VAULT_GRACE_PERIOD > Time.timestamp()) { revert VaultGracePeriodNotPassed(); } @@ -159,6 +171,48 @@ contract Middleware { return 0; } + stake = _collectOperatorStakeFromVaultsAt(operator, ts); + } + + function getEnabledOperatorsStakeAt(uint48 ts) + public + view + returns (address[] memory enabled_operators, uint256[] memory stakes) + { + _checkTimestampInThePast(ts); + + enabled_operators = new address[](operators.length()); + stakes = new uint256[](operators.length()); + + uint256 operatorIdx = 0; + + for (uint256 i; i < operators.length(); ++i) { + (address operator, uint48 enabled, uint48 disabled) = operators.atWithTimes(i); + + if (!_wasActiveAt(enabled, disabled, ts)) { + continue; + } + + enabled_operators[operatorIdx] = operator; + stakes[operatorIdx] = _collectOperatorStakeFromVaultsAt(operator, ts); + operatorIdx += 1; + } + + assembly { + mstore(enabled_operators, operatorIdx) + mstore(stakes, operatorIdx) + } + } + + function subnetwork() public view returns (bytes32) { + return address(this).subnetwork(network_identifier()); + } + + function network_identifier() public pure returns (uint96) { + return 0; + } + + function _collectOperatorStakeFromVaultsAt(address operator, uint48 ts) private view returns (uint256 stake) { for (uint256 i; i < vaults.length(); ++i) { (address vault, uint48 vaultEnabledTime, uint48 vaultDisabledTime) = vaults.atWithTimes(i); @@ -180,12 +234,4 @@ contract Middleware { revert IncorrectTimestamp(); } } - - function subnetwork() public view returns (bytes32) { - return address(this).subnetwork(network_identifier()); - } - - function network_identifier() public pure returns (uint96) { - return 0; - } } diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index b91bab88a67..43a852777e2 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -201,22 +201,79 @@ contract MiddlewareTest is Test { _depositFromInVault(owner, vault1, 1_000); _depositFromInVault(owner, vault2, 2_000); - uint48 ts1 = uint48(block.timestamp); - vm.warp(block.timestamp + 1); - assertEq(middleware.getOperatorStakeAt(operator1, ts1), 1_000); - assertEq(middleware.getOperatorStakeAt(operator2, ts1), 2_000); + { + // Check operator stake after depositing + uint48 ts = uint48(block.timestamp); + vm.warp(block.timestamp + 1); + assertEq(middleware.getOperatorStakeAt(operator1, ts), 1_000); + assertEq(middleware.getOperatorStakeAt(operator2, ts), 2_000); + (address[] memory enabled_operators, uint256[] memory stakes) = middleware.getEnabledOperatorsStakeAt(ts); + assertEq(enabled_operators.length, 2); + assertEq(stakes.length, 2); + assertEq(enabled_operators[0], operator1); + assertEq(enabled_operators[1], operator2); + } - // Create one more vault for operator1 and check operator1 stake + // Create one more vault for operator1 address vault3 = _createVaultForOperator(operator1); - uint48 ts2 = uint48(block.timestamp); - vm.warp(block.timestamp + 1); - assertEq(middleware.getOperatorStakeAt(operator1, ts2), 1_000); + { + // Check that vault creation doesn't affect operator stake without deposit + uint48 ts = uint48(block.timestamp); + vm.warp(block.timestamp + 1); + assertEq(middleware.getOperatorStakeAt(operator1, ts), 1_000); + } + + { + // Check after depositing to new vault + _depositFromInVault(owner, vault3, 3_000); + uint48 ts = uint48(block.timestamp); + vm.warp(block.timestamp + 1); + assertEq(middleware.getOperatorStakeAt(operator1, ts), 4_000); + } + + { + // Disable vault1 and check operator1 stake + // Disable is not immediate, so we need to check for the next block ts + _disableVault(operator1, vault1); + uint48 ts = uint48(block.timestamp) + 1; + vm.warp(block.timestamp + 2); + assertEq(middleware.getOperatorStakeAt(operator1, ts), 3_000); + } - _depositFromInVault(owner, vault3, 3_000); - uint48 ts3 = uint48(block.timestamp); - vm.warp(block.timestamp + 1); - assertEq(middleware.getOperatorStakeAt(operator1, ts3), 4_000); + { + // Disable operator1 and check operator1 stake is 0 + _disableOperator(operator1); + uint48 ts = uint48(block.timestamp) + 1; + vm.warp(block.timestamp + 2); + assertEq(middleware.getOperatorStakeAt(operator1, ts), 0); + + // Check that operator1 is not in enabled operators list + (address[] memory enabled_operators, uint256[] memory stakes) = middleware.getEnabledOperatorsStakeAt(ts); + assertEq(enabled_operators.length, 1); + assertEq(stakes.length, 1); + assertEq(enabled_operators[0], operator2); + } + + // Try to get stake for current timestamp + vm.expectRevert(abi.encodeWithSelector(Middleware.IncorrectTimestamp.selector)); + middleware.getOperatorStakeAt(operator2, uint48(block.timestamp)); + + // Try to get stake for future timestamp + vm.expectRevert(abi.encodeWithSelector(Middleware.IncorrectTimestamp.selector)); + middleware.getOperatorStakeAt(operator2, uint48(block.timestamp + 1)); + } + + function _disableOperator(address operator) private { + vm.startPrank(operator); + middleware.disableOperator(); + vm.stopPrank(); + } + + function _disableVault(address vault_owner, address vault) private { + vm.startPrank(vault_owner); + middleware.disableVault(vault); + vm.stopPrank(); } function _depositFromInVault(address from, address vault, uint256 amount) private { From 522cb14fea9eebc995e64867d6e4e44ee3123af5 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 30 Oct 2024 11:00:42 +0100 Subject: [PATCH 05/43] refactor subnetwork --- ethexe/contracts/src/Middleware.sol | 20 ++++++-------------- ethexe/contracts/test/Middleware.t.sol | 5 ++--- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index 8e6a260c964..db8ca771104 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -20,13 +20,10 @@ contract Middleware { using MapWithTimeData for EnumerableMap.AddressToUintMap; using Subnetwork for address; - error OperatorAlreadyRegistered(); error ZeroVaultAddress(); error NotKnownVault(); - error IncorrectDelegatorType(); error VaultWrongEpochDuration(); error UnknownCollateral(); - error NotEnoughStakeInVault(); error OperatorGracePeriodNotPassed(); error VaultGracePeriodNotPassed(); error NotVaultOwner(); @@ -45,6 +42,8 @@ contract Middleware { address public immutable OPERATOR_REGISTRY; address public immutable NETWORK_OPT_IN; address public immutable COLLATERAL; + bytes32 public immutable SUBNETWORK; + uint96 public immutable NETWORK_IDENTIFIER = 0; EnumerableMap.AddressToUintMap private operators; EnumerableMap.AddressToUintMap private vaults; @@ -70,6 +69,7 @@ contract Middleware { OPERATOR_REGISTRY = operatorRegistry; NETWORK_OPT_IN = networkOptIn; COLLATERAL = collateral; + SUBNETWORK = address(this).subnetwork(NETWORK_IDENTIFIER); INetworkRegistry(networkRegistry).registerNetwork(); } @@ -126,8 +126,8 @@ contract Middleware { } address delegator = IVault(vault).delegator(); - if (IBaseDelegator(delegator).maxNetworkLimit(subnetwork()) != type(uint256).max) { - IBaseDelegator(delegator).setMaxNetworkLimit(network_identifier(), type(uint256).max); + if (IBaseDelegator(delegator).maxNetworkLimit(SUBNETWORK) != type(uint256).max) { + IBaseDelegator(delegator).setMaxNetworkLimit(NETWORK_IDENTIFIER, type(uint256).max); } vaults.append(vault, msg.sender); @@ -204,14 +204,6 @@ contract Middleware { } } - function subnetwork() public view returns (bytes32) { - return address(this).subnetwork(network_identifier()); - } - - function network_identifier() public pure returns (uint96) { - return 0; - } - function _collectOperatorStakeFromVaultsAt(address operator, uint48 ts) private view returns (uint256 stake) { for (uint256 i; i < vaults.length(); ++i) { (address vault, uint48 vaultEnabledTime, uint48 vaultDisabledTime) = vaults.atWithTimes(i); @@ -220,7 +212,7 @@ contract Middleware { continue; } - stake += IBaseDelegator(IVault(vault).delegator()).stakeAt(subnetwork(), operator, ts, new bytes(0)); + stake += IBaseDelegator(IVault(vault).delegator()).stakeAt(SUBNETWORK, operator, ts, new bytes(0)); } } diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index 43a852777e2..73722d26253 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -13,7 +13,6 @@ import {IVaultConfigurator} from "symbiotic-core/src/interfaces/IVaultConfigurat import {IVault} from "symbiotic-core/src/interfaces/vault/IVault.sol"; import {IBaseDelegator} from "symbiotic-core/src/interfaces/delegator/IBaseDelegator.sol"; import {IOperatorSpecificDelegator} from "symbiotic-core/src/interfaces/delegator/IOperatorSpecificDelegator.sol"; -// import {IOptInService} from "symbiotic-core/src/interfaces/service/IOptInService.sol"; import {Middleware} from "../src/Middleware.sol"; import {WrappedVara} from "../src/WrappedVara.sol"; @@ -305,7 +304,7 @@ contract MiddlewareTest is Test { // Set initial network limit IOperatorSpecificDelegator(IVault(vault).delegator()).setNetworkLimit( - middleware.subnetwork(), type(uint256).max + middleware.SUBNETWORK(), type(uint256).max ); vm.stopPrank(); @@ -314,7 +313,7 @@ contract MiddlewareTest is Test { function _setNetworkLimit(address vault, address operator, uint256 limit) private { vm.startPrank(address(operator)); - IOperatorSpecificDelegator(IVault(vault).delegator()).setNetworkLimit(middleware.subnetwork(), limit); + IOperatorSpecificDelegator(IVault(vault).delegator()).setNetworkLimit(middleware.SUBNETWORK(), limit); vm.stopPrank(); } From 520bf0b5ea0145336d224d3980405840003b4220 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 30 Oct 2024 11:11:22 +0100 Subject: [PATCH 06/43] enabled oeprators -> active operators --- ethexe/contracts/src/Middleware.sol | 10 +++---- ethexe/contracts/test/Middleware.t.sol | 37 +++++++++++++++----------- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index db8ca771104..f9ecffa8949 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -174,14 +174,14 @@ contract Middleware { stake = _collectOperatorStakeFromVaultsAt(operator, ts); } - function getEnabledOperatorsStakeAt(uint48 ts) + function getActiveOperatorsStakeAt(uint48 ts) public view - returns (address[] memory enabled_operators, uint256[] memory stakes) + returns (address[] memory active_operators, uint256[] memory stakes) { _checkTimestampInThePast(ts); - enabled_operators = new address[](operators.length()); + active_operators = new address[](operators.length()); stakes = new uint256[](operators.length()); uint256 operatorIdx = 0; @@ -193,13 +193,13 @@ contract Middleware { continue; } - enabled_operators[operatorIdx] = operator; + active_operators[operatorIdx] = operator; stakes[operatorIdx] = _collectOperatorStakeFromVaultsAt(operator, ts); operatorIdx += 1; } assembly { - mstore(enabled_operators, operatorIdx) + mstore(active_operators, operatorIdx) mstore(stakes, operatorIdx) } } diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index 73722d26253..e852f1909cc 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -197,20 +197,26 @@ contract MiddlewareTest is Test { address vault1 = _createVaultForOperator(operator1); address vault2 = _createVaultForOperator(operator2); - _depositFromInVault(owner, vault1, 1_000); - _depositFromInVault(owner, vault2, 2_000); + uint256 stake1 = 1_000; + uint256 stake2 = 2_000; + uint256 stake3 = 3_000; + + _depositFromInVault(owner, vault1, stake1); + _depositFromInVault(owner, vault2, stake2); { // Check operator stake after depositing uint48 ts = uint48(block.timestamp); vm.warp(block.timestamp + 1); - assertEq(middleware.getOperatorStakeAt(operator1, ts), 1_000); - assertEq(middleware.getOperatorStakeAt(operator2, ts), 2_000); - (address[] memory enabled_operators, uint256[] memory stakes) = middleware.getEnabledOperatorsStakeAt(ts); - assertEq(enabled_operators.length, 2); + assertEq(middleware.getOperatorStakeAt(operator1, ts), stake1); + assertEq(middleware.getOperatorStakeAt(operator2, ts), stake2); + (address[] memory active_operators, uint256[] memory stakes) = middleware.getActiveOperatorsStakeAt(ts); + assertEq(active_operators.length, 2); assertEq(stakes.length, 2); - assertEq(enabled_operators[0], operator1); - assertEq(enabled_operators[1], operator2); + assertEq(active_operators[0], operator1); + assertEq(active_operators[1], operator2); + assertEq(stakes[0], stake1); + assertEq(stakes[1], stake2); } // Create one more vault for operator1 @@ -220,7 +226,7 @@ contract MiddlewareTest is Test { // Check that vault creation doesn't affect operator stake without deposit uint48 ts = uint48(block.timestamp); vm.warp(block.timestamp + 1); - assertEq(middleware.getOperatorStakeAt(operator1, ts), 1_000); + assertEq(middleware.getOperatorStakeAt(operator1, ts), stake1); } { @@ -228,7 +234,7 @@ contract MiddlewareTest is Test { _depositFromInVault(owner, vault3, 3_000); uint48 ts = uint48(block.timestamp); vm.warp(block.timestamp + 1); - assertEq(middleware.getOperatorStakeAt(operator1, ts), 4_000); + assertEq(middleware.getOperatorStakeAt(operator1, ts), stake1 + stake3); } { @@ -237,7 +243,7 @@ contract MiddlewareTest is Test { _disableVault(operator1, vault1); uint48 ts = uint48(block.timestamp) + 1; vm.warp(block.timestamp + 2); - assertEq(middleware.getOperatorStakeAt(operator1, ts), 3_000); + assertEq(middleware.getOperatorStakeAt(operator1, ts), stake3); } { @@ -247,11 +253,12 @@ contract MiddlewareTest is Test { vm.warp(block.timestamp + 2); assertEq(middleware.getOperatorStakeAt(operator1, ts), 0); - // Check that operator1 is not in enabled operators list - (address[] memory enabled_operators, uint256[] memory stakes) = middleware.getEnabledOperatorsStakeAt(ts); - assertEq(enabled_operators.length, 1); + // Check that operator1 is not in active operators list + (address[] memory active_operators, uint256[] memory stakes) = middleware.getActiveOperatorsStakeAt(ts); + assertEq(active_operators.length, 1); assertEq(stakes.length, 1); - assertEq(enabled_operators[0], operator2); + assertEq(active_operators[0], operator2); + assertEq(stakes[0], stake2); } // Try to get stake for current timestamp From 5092b6b7ea67501507ad9c3a7744adf2c7644772 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 30 Oct 2024 13:09:42 +0100 Subject: [PATCH 07/43] pinnedAddress -> pinnedData --- ethexe/contracts/src/Middleware.sol | 11 +++++--- .../src/libraries/MapWithTimeData.sol | 26 +++++++++---------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index f9ecffa8949..26f8ac11e99 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -15,6 +15,9 @@ import {IOptInService} from "symbiotic-core/src/interfaces/service/IOptInService import {MapWithTimeData} from "./libraries/MapWithTimeData.sol"; // TODO: support slashing +// TODO: implement election logic +// TODO: implement fored operators removal +// TODO: implement forced vaults removal contract Middleware { using EnumerableMap for EnumerableMap.AddressToUintMap; using MapWithTimeData for EnumerableMap.AddressToUintMap; @@ -84,7 +87,7 @@ contract Middleware { if (!IOptInService(NETWORK_OPT_IN).isOptedIn(msg.sender, address(this))) { revert OperatorDoesNotOptIn(); } - operators.append(msg.sender, address(0)); + operators.append(msg.sender, 0); } function disableOperator() external { @@ -130,11 +133,11 @@ contract Middleware { IBaseDelegator(delegator).setMaxNetworkLimit(NETWORK_IDENTIFIER, type(uint256).max); } - vaults.append(vault, msg.sender); + vaults.append(vault, uint160(msg.sender)); } function disableVault(address vault) external { - address vault_owner = vaults.getPinnedAddress(vault); + address vault_owner = address(vaults.getPinnedData(vault)); if (vault_owner != msg.sender) { revert NotVaultOwner(); @@ -144,7 +147,7 @@ contract Middleware { } function enableVault(address vault) external { - address vault_owner = vaults.getPinnedAddress(vault); + address vault_owner = address(vaults.getPinnedData(vault)); if (vault_owner != msg.sender) { revert NotVaultOwner(); diff --git a/ethexe/contracts/src/libraries/MapWithTimeData.sol b/ethexe/contracts/src/libraries/MapWithTimeData.sol index 02b68276e5d..8f5d6d4129e 100644 --- a/ethexe/contracts/src/libraries/MapWithTimeData.sol +++ b/ethexe/contracts/src/libraries/MapWithTimeData.sol @@ -12,38 +12,38 @@ library MapWithTimeData { error NotEnabled(); error AlreadyEnabled(); - function toInner(uint256 value) private pure returns (uint48, uint48, address) { - return (uint48(value), uint48(value >> 48), address(uint160(value >> 96))); + function toInner(uint256 value) private pure returns (uint48, uint48, uint160) { + return (uint48(value), uint48(value >> 48), uint160(value >> 96)); } - function toValue(uint48 enabledTime, uint48 disabledTime, address pinnedAddress) private pure returns (uint256) { - return uint256(enabledTime) | (uint256(disabledTime) << 48) | (uint256(uint160(pinnedAddress)) << 96); + function toValue(uint48 enabledTime, uint48 disabledTime, uint160 data) private pure returns (uint256) { + return uint256(enabledTime) | (uint256(disabledTime) << 48) | (uint256(data) << 96); } - function append(EnumerableMap.AddressToUintMap storage self, address addr, address pinnedAddress) internal { - if (!self.set(addr, toValue(Time.timestamp(), 0, pinnedAddress))) { + function append(EnumerableMap.AddressToUintMap storage self, address addr, uint160 data) internal { + if (!self.set(addr, toValue(Time.timestamp(), 0, data))) { revert AlreadyAdded(); } } function enable(EnumerableMap.AddressToUintMap storage self, address addr) internal { - (uint48 enabledTime, uint48 disabledTime, address pinnedAddress) = toInner(self.get(addr)); + (uint48 enabledTime, uint48 disabledTime, uint160 data) = toInner(self.get(addr)); if (enabledTime != 0 && disabledTime == 0) { revert AlreadyEnabled(); } - self.set(addr, toValue(Time.timestamp(), 0, pinnedAddress)); + self.set(addr, toValue(Time.timestamp(), 0, data)); } function disable(EnumerableMap.AddressToUintMap storage self, address addr) internal { - (uint48 enabledTime, uint48 disabledTime, address pinnedAddress) = toInner(self.get(addr)); + (uint48 enabledTime, uint48 disabledTime, uint160 data) = toInner(self.get(addr)); if (enabledTime == 0 || disabledTime != 0) { revert NotEnabled(); } - self.set(addr, toValue(enabledTime, Time.timestamp(), pinnedAddress)); + self.set(addr, toValue(enabledTime, Time.timestamp(), data)); } function atWithTimes(EnumerableMap.AddressToUintMap storage self, uint256 idx) @@ -64,11 +64,11 @@ library MapWithTimeData { (enabledTime, disabledTime,) = toInner(self.get(addr)); } - function getPinnedAddress(EnumerableMap.AddressToUintMap storage self, address addr) + function getPinnedData(EnumerableMap.AddressToUintMap storage self, address addr) internal view - returns (address pinnedAddress) + returns (uint160 data) { - (,, pinnedAddress) = toInner(self.get(addr)); + (,, data) = toInner(self.get(addr)); } } From 1c1e2e221f157d3231f926c8561db45e90871a4d Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 30 Oct 2024 13:27:27 +0100 Subject: [PATCH 08/43] unregisterOperator(operator) --- ethexe/contracts/src/Middleware.sol | 7 +++---- ethexe/contracts/test/Middleware.t.sol | 7 ++++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index 26f8ac11e99..ed50c2fa50f 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -98,15 +98,14 @@ contract Middleware { operators.enable(msg.sender); } - // TODO: allow anybody to unregister operator - function unregisterOperator() external { - (, uint48 disabledTime) = operators.getTimes(msg.sender); + function unregisterOperator(address operator) external { + (, uint48 disabledTime) = operators.getTimes(operator); if (disabledTime == 0 || disabledTime + OPERATOR_GRACE_PERIOD > Time.timestamp()) { revert OperatorGracePeriodNotPassed(); } - operators.remove(msg.sender); + operators.remove(operator); } // TODO: check vault has enough stake diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index e852f1909cc..fcb6294eab6 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -103,11 +103,12 @@ contract MiddlewareTest is Test { // Try to unregister operator - failed because operator is not disabled for enough time vm.expectRevert(abi.encodeWithSelector(Middleware.OperatorGracePeriodNotPassed.selector)); - middleware.unregisterOperator(); + middleware.unregisterOperator(address(0x2)); - // Wait for grace period and unregister operator + // Wait for grace period and unregister operator from other address + vm.startPrank(address(0x3)); vm.warp(block.timestamp + eraDuration * 2); - middleware.unregisterOperator(); + middleware.unregisterOperator(address(0x2)); } function test_registerVault() public { From f348ef8711d35cf8dcabf7240aa23f03992d5866 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 30 Oct 2024 13:28:15 +0100 Subject: [PATCH 09/43] - --- ethexe/contracts/src/Middleware.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index ed50c2fa50f..e0610f2405f 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -16,7 +16,7 @@ import {MapWithTimeData} from "./libraries/MapWithTimeData.sol"; // TODO: support slashing // TODO: implement election logic -// TODO: implement fored operators removal +// TODO: implement forced operators removal // TODO: implement forced vaults removal contract Middleware { using EnumerableMap for EnumerableMap.AddressToUintMap; From 1116f9d665ea8a50ed61ed16e635f8bdfffcf046 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 30 Oct 2024 13:32:02 +0100 Subject: [PATCH 10/43] chore --- ethexe/contracts/foundry.toml | 3 +-- ethexe/contracts/src/Middleware.sol | 4 +--- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/ethexe/contracts/foundry.toml b/ethexe/contracts/foundry.toml index 6dfe199eb54..bb0029c8438 100644 --- a/ethexe/contracts/foundry.toml +++ b/ethexe/contracts/foundry.toml @@ -14,8 +14,7 @@ ignored_warnings_from = [ "src/MirrorProxy.sol", ] # Enable new EVM codegen -via_ir = false -ignored_warning_paths = ["lib/"] +via_ir = true [rpc_endpoints] sepolia = "${SEPOLIA_RPC_URL}" diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index e0610f2405f..7465f791274 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -77,9 +77,7 @@ contract Middleware { INetworkRegistry(networkRegistry).registerNetwork(); } - // TODO: append total operator stake check is big enough - // TODO: append check operator is opt-in network - // TODO: append check operator is operator registry entity + // TODO: Check that total stake is big enough function registerOperator() external { if (!IRegistry(OPERATOR_REGISTRY).isEntity(msg.sender)) { revert OperatorDoesNotExist(); From b058d01d8cc7155cfec8f89edd7e4f571d70d883 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 30 Oct 2024 13:34:32 +0100 Subject: [PATCH 11/43] chore --- ethexe/contracts/test/Middleware.t.sol | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index fcb6294eab6..c230dda60c3 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -54,6 +54,9 @@ contract MiddlewareTest is Test { function test_constructor() public view { assertEq(uint256(middleware.ERA_DURATION()), eraDuration); assertEq(uint256(middleware.GENESIS_TIMESTAMP()), Time.timestamp()); + assertEq(uint256(middleware.OPERATOR_GRACE_PERIOD()), eraDuration * 2); + assertEq(uint256(middleware.VAULT_GRACE_PERIOD()), eraDuration * 2);, + assertEq(uint256(middleware.VAULT_MIN_EPOCH_DURATION()), eraDuration * 2); assertEq(middleware.VAULT_FACTORY(), address(sym.vaultFactory())); assertEq(middleware.DELEGATOR_FACTORY(), address(sym.delegatorFactory())); assertEq(middleware.SLASHER_FACTORY(), address(sym.slasherFactory())); From 629906a00be35437fc4f77222956028c7e54b225 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 30 Oct 2024 16:58:41 +0100 Subject: [PATCH 12/43] st --- ethexe/contracts/test/Middleware.t.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index c230dda60c3..ff35b86200a 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -55,7 +55,7 @@ contract MiddlewareTest is Test { assertEq(uint256(middleware.ERA_DURATION()), eraDuration); assertEq(uint256(middleware.GENESIS_TIMESTAMP()), Time.timestamp()); assertEq(uint256(middleware.OPERATOR_GRACE_PERIOD()), eraDuration * 2); - assertEq(uint256(middleware.VAULT_GRACE_PERIOD()), eraDuration * 2);, + assertEq(uint256(middleware.VAULT_GRACE_PERIOD()), eraDuration * 2); assertEq(uint256(middleware.VAULT_MIN_EPOCH_DURATION()), eraDuration * 2); assertEq(middleware.VAULT_FACTORY(), address(sym.vaultFactory())); assertEq(middleware.DELEGATOR_FACTORY(), address(sym.delegatorFactory())); @@ -235,7 +235,7 @@ contract MiddlewareTest is Test { { // Check after depositing to new vault - _depositFromInVault(owner, vault3, 3_000); + _depositFromInVault(owner, vault3, stake3); uint48 ts = uint48(block.timestamp); vm.warp(block.timestamp + 1); assertEq(middleware.getOperatorStakeAt(operator1, ts), stake1 + stake3); From 4fb9e0ea2d5d34da04889ae13a5142a7dec1ab3b Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Thu, 31 Oct 2024 15:46:39 +0100 Subject: [PATCH 13/43] block.timestamp -> vm.getBlockTimestamp() --- ethexe/contracts/foundry.toml | 1 + ethexe/contracts/test/Middleware.t.sol | 30 +++++++++++++------------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/ethexe/contracts/foundry.toml b/ethexe/contracts/foundry.toml index bb0029c8438..f5cdbadb256 100644 --- a/ethexe/contracts/foundry.toml +++ b/ethexe/contracts/foundry.toml @@ -12,6 +12,7 @@ extra_output = ["storageLayout"] ignored_warnings_from = [ # Warning (3628): This contract has a payable fallback function, but no receive ether function "src/MirrorProxy.sol", + "lib/", ] # Enable new EVM codegen via_ir = true diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index ff35b86200a..ac67060a518 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -110,7 +110,7 @@ contract MiddlewareTest is Test { // Wait for grace period and unregister operator from other address vm.startPrank(address(0x3)); - vm.warp(block.timestamp + eraDuration * 2); + vm.warp(vm.getBlockTimestamp() + eraDuration * 2); middleware.unregisterOperator(address(0x2)); } @@ -167,14 +167,14 @@ contract MiddlewareTest is Test { middleware.unregisterVault(vault); // Wait for grace period and unregister vault - vm.warp(block.timestamp + eraDuration * 2); + vm.warp(vm.getBlockTimestamp() + eraDuration * 2); middleware.unregisterVault(vault); // Register vault again, disable and unregister it not by owner middleware.registerVault(vault); middleware.disableVault(vault); vm.startPrank(address(0x1)); - vm.warp(block.timestamp + eraDuration * 2); + vm.warp(vm.getBlockTimestamp() + eraDuration * 2); middleware.unregisterVault(vault); vm.stopPrank(); @@ -210,8 +210,8 @@ contract MiddlewareTest is Test { { // Check operator stake after depositing - uint48 ts = uint48(block.timestamp); - vm.warp(block.timestamp + 1); + uint48 ts = uint48(vm.getBlockTimestamp()); + vm.warp(vm.getBlockTimestamp() + 1); assertEq(middleware.getOperatorStakeAt(operator1, ts), stake1); assertEq(middleware.getOperatorStakeAt(operator2, ts), stake2); (address[] memory active_operators, uint256[] memory stakes) = middleware.getActiveOperatorsStakeAt(ts); @@ -228,16 +228,16 @@ contract MiddlewareTest is Test { { // Check that vault creation doesn't affect operator stake without deposit - uint48 ts = uint48(block.timestamp); - vm.warp(block.timestamp + 1); + uint48 ts = uint48(vm.getBlockTimestamp()); + vm.warp(vm.getBlockTimestamp() + 1); assertEq(middleware.getOperatorStakeAt(operator1, ts), stake1); } { // Check after depositing to new vault _depositFromInVault(owner, vault3, stake3); - uint48 ts = uint48(block.timestamp); - vm.warp(block.timestamp + 1); + uint48 ts = uint48(vm.getBlockTimestamp()); + vm.warp(vm.getBlockTimestamp() + 1); assertEq(middleware.getOperatorStakeAt(operator1, ts), stake1 + stake3); } @@ -245,16 +245,16 @@ contract MiddlewareTest is Test { // Disable vault1 and check operator1 stake // Disable is not immediate, so we need to check for the next block ts _disableVault(operator1, vault1); - uint48 ts = uint48(block.timestamp) + 1; - vm.warp(block.timestamp + 2); + uint48 ts = uint48(vm.getBlockTimestamp()) + 1; + vm.warp(vm.getBlockTimestamp() + 2); assertEq(middleware.getOperatorStakeAt(operator1, ts), stake3); } { // Disable operator1 and check operator1 stake is 0 _disableOperator(operator1); - uint48 ts = uint48(block.timestamp) + 1; - vm.warp(block.timestamp + 2); + uint48 ts = uint48(vm.getBlockTimestamp()) + 1; + vm.warp(vm.getBlockTimestamp() + 2); assertEq(middleware.getOperatorStakeAt(operator1, ts), 0); // Check that operator1 is not in active operators list @@ -267,11 +267,11 @@ contract MiddlewareTest is Test { // Try to get stake for current timestamp vm.expectRevert(abi.encodeWithSelector(Middleware.IncorrectTimestamp.selector)); - middleware.getOperatorStakeAt(operator2, uint48(block.timestamp)); + middleware.getOperatorStakeAt(operator2, uint48(vm.getBlockTimestamp())); // Try to get stake for future timestamp vm.expectRevert(abi.encodeWithSelector(Middleware.IncorrectTimestamp.selector)); - middleware.getOperatorStakeAt(operator2, uint48(block.timestamp + 1)); + middleware.getOperatorStakeAt(operator2, uint48(vm.getBlockTimestamp() + 1)); } function _disableOperator(address operator) private { From 8b651e873114227857359b0d36675062898c8780 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Thu, 31 Oct 2024 20:32:43 +0100 Subject: [PATCH 14/43] fix potential problem with old timstamps --- ethexe/contracts/src/Middleware.sol | 20 +++++++++++++------ .../src/libraries/MapWithTimeData.sol | 1 + ethexe/contracts/test/Middleware.t.sol | 6 ++++++ 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index 7465f791274..be0eb01c590 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -3,6 +3,7 @@ pragma solidity ^0.8.26; import {EnumerableMap} from "@openzeppelin/contracts/utils/structs/EnumerableMap.sol"; import {Time} from "@openzeppelin/contracts/utils/types/Time.sol"; +import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; import {Subnetwork} from "symbiotic-core/src/contracts/libraries/Subnetwork.sol"; import {IVault} from "symbiotic-core/src/interfaces/vault/IVault.sol"; @@ -18,6 +19,7 @@ import {MapWithTimeData} from "./libraries/MapWithTimeData.sol"; // TODO: implement election logic // TODO: implement forced operators removal // TODO: implement forced vaults removal +// TODO: implement rewards distribution contract Middleware { using EnumerableMap for EnumerableMap.AddressToUintMap; using MapWithTimeData for EnumerableMap.AddressToUintMap; @@ -99,7 +101,7 @@ contract Middleware { function unregisterOperator(address operator) external { (, uint48 disabledTime) = operators.getTimes(operator); - if (disabledTime == 0 || disabledTime + OPERATOR_GRACE_PERIOD > Time.timestamp()) { + if (disabledTime == 0 || Time.timestamp() < disabledTime + OPERATOR_GRACE_PERIOD) { revert OperatorGracePeriodNotPassed(); } @@ -156,7 +158,7 @@ contract Middleware { function unregisterVault(address vault) external { (, uint48 disabledTime) = vaults.getTimes(vault); - if (disabledTime == 0 || disabledTime + VAULT_GRACE_PERIOD > Time.timestamp()) { + if (disabledTime == 0 || Time.timestamp() < disabledTime + VAULT_GRACE_PERIOD) { revert VaultGracePeriodNotPassed(); } @@ -164,7 +166,7 @@ contract Middleware { } function getOperatorStakeAt(address operator, uint48 ts) external view returns (uint256 stake) { - _checkTimestampInThePast(ts); + _checkTimestamp(ts); (uint48 enabledTime, uint48 disabledTime) = operators.getTimes(operator); if (!_wasActiveAt(enabledTime, disabledTime, ts)) { @@ -179,7 +181,7 @@ contract Middleware { view returns (address[] memory active_operators, uint256[] memory stakes) { - _checkTimestampInThePast(ts); + _checkTimestamp(ts); active_operators = new address[](operators.length()); stakes = new uint256[](operators.length()); @@ -220,10 +222,16 @@ contract Middleware { return enabledTime != 0 && enabledTime <= ts && (disabledTime == 0 || disabledTime >= ts); } - // Timestamp must be always in the past - function _checkTimestampInThePast(uint48 ts) private view { + // Timestamp must be always in the past, but not too far, + // so that some operators or vaults can be already unregistered. + function _checkTimestamp(uint48 ts) private view { if (ts >= Time.timestamp()) { revert IncorrectTimestamp(); } + + uint48 gracePeriod = OPERATOR_GRACE_PERIOD < VAULT_GRACE_PERIOD ? OPERATOR_GRACE_PERIOD : VAULT_GRACE_PERIOD; + if (ts + gracePeriod <= Time.timestamp()) { + revert IncorrectTimestamp(); + } } } diff --git a/ethexe/contracts/src/libraries/MapWithTimeData.sol b/ethexe/contracts/src/libraries/MapWithTimeData.sol index 8f5d6d4129e..dc7a527185e 100644 --- a/ethexe/contracts/src/libraries/MapWithTimeData.sol +++ b/ethexe/contracts/src/libraries/MapWithTimeData.sol @@ -13,6 +13,7 @@ library MapWithTimeData { error AlreadyEnabled(); function toInner(uint256 value) private pure returns (uint48, uint48, uint160) { + // casting to uint48 will truncate the value to 48 bits, so it's safe for this case return (uint48(value), uint48(value >> 48), uint160(value >> 96)); } diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index ac67060a518..9800bfc783b 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -272,6 +272,12 @@ contract MiddlewareTest is Test { // Try to get stake for future timestamp vm.expectRevert(abi.encodeWithSelector(Middleware.IncorrectTimestamp.selector)); middleware.getOperatorStakeAt(operator2, uint48(vm.getBlockTimestamp() + 1)); + + // Try to get stake for too old timestamp + uint48 ts = uint48(vm.getBlockTimestamp()); + vm.warp(vm.getBlockTimestamp() + eraDuration * 2); + vm.expectRevert(abi.encodeWithSelector(Middleware.IncorrectTimestamp.selector)); + middleware.getOperatorStakeAt(operator2, ts); } function _disableOperator(address operator) private { From ec014cb835d76a195af842eda78a1b5a718b9fa1 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Fri, 8 Nov 2024 17:47:48 +0100 Subject: [PATCH 15/43] review fixes --- ethexe/contracts/src/Middleware.sol | 34 +++++++++++++++----------- ethexe/contracts/test/Middleware.t.sol | 3 +-- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index be0eb01c590..5d8f8febe09 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -16,6 +16,7 @@ import {IOptInService} from "symbiotic-core/src/interfaces/service/IOptInService import {MapWithTimeData} from "./libraries/MapWithTimeData.sol"; // TODO: support slashing +// TODO: use camelCase for immutable variables // TODO: implement election logic // TODO: implement forced operators removal // TODO: implement forced vaults removal @@ -36,6 +37,8 @@ contract Middleware { error OperatorDoesNotExist(); error OperatorDoesNotOptIn(); + uint96 public constant NETWORK_IDENTIFIER = 0; + uint48 public immutable ERA_DURATION; uint48 public immutable GENESIS_TIMESTAMP; uint48 public immutable OPERATOR_GRACE_PERIOD; @@ -48,7 +51,6 @@ contract Middleware { address public immutable NETWORK_OPT_IN; address public immutable COLLATERAL; bytes32 public immutable SUBNETWORK; - uint96 public immutable NETWORK_IDENTIFIER = 0; EnumerableMap.AddressToUintMap private operators; EnumerableMap.AddressToUintMap private vaults; @@ -127,9 +129,9 @@ contract Middleware { revert UnknownCollateral(); } - address delegator = IVault(vault).delegator(); - if (IBaseDelegator(delegator).maxNetworkLimit(SUBNETWORK) != type(uint256).max) { - IBaseDelegator(delegator).setMaxNetworkLimit(NETWORK_IDENTIFIER, type(uint256).max); + IBaseDelegator delegator = IBaseDelegator(IVault(vault).delegator()); + if (delegator.maxNetworkLimit(SUBNETWORK) != type(uint256).max) { + delegator.setMaxNetworkLimit(NETWORK_IDENTIFIER, type(uint256).max); } vaults.append(vault, uint160(msg.sender)); @@ -165,9 +167,12 @@ contract Middleware { vaults.remove(vault); } - function getOperatorStakeAt(address operator, uint48 ts) external view returns (uint256 stake) { - _checkTimestamp(ts); - + function getOperatorStakeAt(address operator, uint48 ts) + external + view + _validTimestamp(ts) + returns (uint256 stake) + { (uint48 enabledTime, uint48 disabledTime) = operators.getTimes(operator); if (!_wasActiveAt(enabledTime, disabledTime, ts)) { return 0; @@ -179,11 +184,10 @@ contract Middleware { function getActiveOperatorsStakeAt(uint48 ts) public view - returns (address[] memory active_operators, uint256[] memory stakes) + _validTimestamp(ts) + returns (address[] memory activeOperators, uint256[] memory stakes) { - _checkTimestamp(ts); - - active_operators = new address[](operators.length()); + activeOperators = new address[](operators.length()); stakes = new uint256[](operators.length()); uint256 operatorIdx = 0; @@ -195,13 +199,13 @@ contract Middleware { continue; } - active_operators[operatorIdx] = operator; + activeOperators[operatorIdx] = operator; stakes[operatorIdx] = _collectOperatorStakeFromVaultsAt(operator, ts); operatorIdx += 1; } assembly { - mstore(active_operators, operatorIdx) + mstore(activeOperators, operatorIdx) mstore(stakes, operatorIdx) } } @@ -224,7 +228,7 @@ contract Middleware { // Timestamp must be always in the past, but not too far, // so that some operators or vaults can be already unregistered. - function _checkTimestamp(uint48 ts) private view { + modifier _validTimestamp(uint48 ts) { if (ts >= Time.timestamp()) { revert IncorrectTimestamp(); } @@ -233,5 +237,7 @@ contract Middleware { if (ts + gracePeriod <= Time.timestamp()) { revert IncorrectTimestamp(); } + + _; } } diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index 9800bfc783b..ea1ba74559a 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -274,10 +274,9 @@ contract MiddlewareTest is Test { middleware.getOperatorStakeAt(operator2, uint48(vm.getBlockTimestamp() + 1)); // Try to get stake for too old timestamp - uint48 ts = uint48(vm.getBlockTimestamp()); vm.warp(vm.getBlockTimestamp() + eraDuration * 2); vm.expectRevert(abi.encodeWithSelector(Middleware.IncorrectTimestamp.selector)); - middleware.getOperatorStakeAt(operator2, ts); + middleware.getOperatorStakeAt(operator2, uint48(vm.getBlockTimestamp())); } function _disableOperator(address operator) private { From 1a1c389df7dcd71f22f47ff44a991b62b6fc3891 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 6 Nov 2024 23:49:33 +0100 Subject: [PATCH 16/43] add slashing with tests --- ethexe/contracts/foundry.toml | 2 +- ethexe/contracts/src/Middleware.sol | 162 +++++++++++++++++++++---- ethexe/contracts/test/Middleware.t.sol | 162 ++++++++++++++++++++++--- 3 files changed, 280 insertions(+), 46 deletions(-) diff --git a/ethexe/contracts/foundry.toml b/ethexe/contracts/foundry.toml index f5cdbadb256..4b44a15a88b 100644 --- a/ethexe/contracts/foundry.toml +++ b/ethexe/contracts/foundry.toml @@ -15,7 +15,7 @@ ignored_warnings_from = [ "lib/", ] # Enable new EVM codegen -via_ir = true +via_ir = false [rpc_endpoints] sepolia = "${SEPOLIA_RPC_URL}" diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index 5d8f8febe09..7bb14dab872 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -12,6 +12,9 @@ import {IEntity} from "symbiotic-core/src/interfaces/common/IEntity.sol"; import {IBaseDelegator} from "symbiotic-core/src/interfaces/delegator/IBaseDelegator.sol"; import {INetworkRegistry} from "symbiotic-core/src/interfaces/INetworkRegistry.sol"; import {IOptInService} from "symbiotic-core/src/interfaces/service/IOptInService.sol"; +import {INetworkMiddlewareService} from "symbiotic-core/src/interfaces/service/INetworkMiddlewareService.sol"; +import {IVetoSlasher} from "symbiotic-core/src/interfaces/slasher/IVetoSlasher.sol"; +import {IMigratableEntity} from "symbiotic-core/src/interfaces/common/IMigratableEntity.sol"; import {MapWithTimeData} from "./libraries/MapWithTimeData.sol"; @@ -36,17 +39,56 @@ contract Middleware { error IncorrectTimestamp(); error OperatorDoesNotExist(); error OperatorDoesNotOptIn(); + error UnsupportedHook(); + error UnsupportedBurner(); + error DelegatorNotInitialized(); + error SlasherNotInitialized(); + error IncompatibleSlasherType(); + error BurnerHookNotSupported(); + error VetoDurationTooShort(); + error IncompatibleVaultVersion(); + error NotRegistredVault(); + error NotRegistredOperator(); + + struct VaultSlashData { + address vault; + uint256 amount; + } + + struct SlashData { + address operator; + uint48 ts; + VaultSlashData[] vaults; + } + + struct MiddlewareConfig { + uint48 eraDuration; + uint48 minVetoDuration; + address vaultRegistry; + uint64 allowedVaultImplVersion; + uint64 vetoSlasherImplType; + address operatorRegistry; + address networkRegistry; + address networkOptIn; + address middlewareService; + address collateral; + } + + uint96 public constant NETWORK_IDENTIFIER = 0; + uint256 public constant MAX_RESOLVER_SET_EPOCHS_DELAY = 10; uint96 public constant NETWORK_IDENTIFIER = 0; uint48 public immutable ERA_DURATION; + uint48 public immutable MIN_VETO_DURATION; uint48 public immutable GENESIS_TIMESTAMP; uint48 public immutable OPERATOR_GRACE_PERIOD; uint48 public immutable VAULT_GRACE_PERIOD; uint48 public immutable VAULT_MIN_EPOCH_DURATION; - address public immutable VAULT_FACTORY; - address public immutable DELEGATOR_FACTORY; - address public immutable SLASHER_FACTORY; + + address public immutable VAULT_REGISTRY; + uint64 public immutable ALLOWED_VAULT_IMPL_VERSION; + uint64 public immutable VETO_SLASHER_IMPL_TYPE; address public immutable OPERATOR_REGISTRY; address public immutable NETWORK_OPT_IN; address public immutable COLLATERAL; @@ -55,30 +97,24 @@ contract Middleware { EnumerableMap.AddressToUintMap private operators; EnumerableMap.AddressToUintMap private vaults; - constructor( - uint48 eraDuration, - address vaultFactory, - address delegatorFactory, - address slasherFactory, - address operatorRegistry, - address networkRegistry, - address networkOptIn, - address collateral - ) { - ERA_DURATION = eraDuration; + constructor(MiddlewareConfig memory cfg) { + ERA_DURATION = cfg.eraDuration; + MIN_VETO_DURATION = cfg.minVetoDuration; GENESIS_TIMESTAMP = Time.timestamp(); - OPERATOR_GRACE_PERIOD = 2 * eraDuration; - VAULT_GRACE_PERIOD = 2 * eraDuration; - VAULT_MIN_EPOCH_DURATION = 2 * eraDuration; - VAULT_FACTORY = vaultFactory; - DELEGATOR_FACTORY = delegatorFactory; - SLASHER_FACTORY = slasherFactory; - OPERATOR_REGISTRY = operatorRegistry; - NETWORK_OPT_IN = networkOptIn; - COLLATERAL = collateral; + OPERATOR_GRACE_PERIOD = 2 * ERA_DURATION; + VAULT_GRACE_PERIOD = 2 * ERA_DURATION; + VAULT_MIN_EPOCH_DURATION = 2 * ERA_DURATION; + VAULT_REGISTRY = cfg.vaultRegistry; + ALLOWED_VAULT_IMPL_VERSION = cfg.allowedVaultImplVersion; + VETO_SLASHER_IMPL_TYPE = cfg.vetoSlasherImplType; + OPERATOR_REGISTRY = cfg.operatorRegistry; + NETWORK_OPT_IN = cfg.networkOptIn; + COLLATERAL = cfg.collateral; SUBNETWORK = address(this).subnetwork(NETWORK_IDENTIFIER); - INetworkRegistry(networkRegistry).registerNetwork(); + // Presently network and middleware are the same address + INetworkRegistry(cfg.networkRegistry).registerNetwork(); + INetworkMiddlewareService(cfg.middlewareService).setMiddleware(address(this)); } // TODO: Check that total stake is big enough @@ -117,10 +153,14 @@ contract Middleware { revert ZeroVaultAddress(); } - if (!IRegistry(VAULT_FACTORY).isEntity(vault)) { + if (!IRegistry(VAULT_REGISTRY).isEntity(vault)) { revert NotKnownVault(); } + if (IMigratableEntity(vault).version() != ALLOWED_VAULT_IMPL_VERSION) { + revert IncompatibleVaultVersion(); + } + if (IVault(vault).epochDuration() < VAULT_MIN_EPOCH_DURATION) { revert VaultWrongEpochDuration(); } @@ -129,10 +169,32 @@ contract Middleware { revert UnknownCollateral(); } + if (!IVault(vault).isDelegatorInitialized()) { + revert DelegatorNotInitialized(); + } IBaseDelegator delegator = IBaseDelegator(IVault(vault).delegator()); if (delegator.maxNetworkLimit(SUBNETWORK) != type(uint256).max) { delegator.setMaxNetworkLimit(NETWORK_IDENTIFIER, type(uint256).max); } + _delegatorHookCheck(IBaseDelegator(delegator).hook()); + + if (!IVault(vault).isSlasherInitialized()) { + revert SlasherNotInitialized(); + } + address slasher = IVault(vault).slasher(); + if (IEntity(slasher).TYPE() != VETO_SLASHER_IMPL_TYPE) { + revert IncompatibleSlasherType(); + } + if (IVetoSlasher(slasher).isBurnerHook()) { + revert BurnerHookNotSupported(); + } + if (IVetoSlasher(slasher).vetoDuration() < MIN_VETO_DURATION) { + revert VetoDurationTooShort(); + } + + _burnerCheck(IVault(vault).burner()); + + IVetoSlasher(slasher).setResolver(NETWORK_IDENTIFIER, address(this), new bytes(0)); vaults.append(vault, uint160(msg.sender)); } @@ -167,6 +229,7 @@ contract Middleware { vaults.remove(vault); } + // TODO: consider to append ability to use hints function getOperatorStakeAt(address operator, uint48 ts) external view @@ -181,6 +244,7 @@ contract Middleware { stake = _collectOperatorStakeFromVaultsAt(operator, ts); } + // TODO: consider to append ability to use hints function getActiveOperatorsStakeAt(uint48 ts) public view @@ -210,6 +274,40 @@ contract Middleware { } } + // TODO: Only router can call this function + // TODO: consider to use hints + function requestSlash(SlashData[] calldata data) external { + for (uint256 i; i < data.length; ++i) { + SlashData calldata slash_data = data[i]; + if (!operators.contains(slash_data.operator)) { + revert NotRegistredOperator(); + } + + for (uint256 j; j < data.length; ++j) { + VaultSlashData calldata vault_data = slash_data.vaults[j]; + + if (!vaults.contains(vault_data.vault)) { + revert NotRegistredVault(); + } + + address slasher = IVault(vault_data.vault).slasher(); + IVetoSlasher(slasher).requestSlash( + SUBNETWORK, slash_data.operator, vault_data.amount, slash_data.ts, new bytes(0) + ); + } + } + } + + // TODO: only slashes executor + function executeSlash(address vault, uint256 index) external { + if (!vaults.contains(vault)) { + revert NotRegistredVault(); + } + + address slasher = IVault(vault).slasher(); + IVetoSlasher(slasher).executeSlash(index, new bytes(0)); + } + function _collectOperatorStakeFromVaultsAt(address operator, uint48 ts) private view returns (uint256 stake) { for (uint256 i; i < vaults.length(); ++i) { (address vault, uint48 vaultEnabledTime, uint48 vaultDisabledTime) = vaults.atWithTimes(i); @@ -240,4 +338,18 @@ contract Middleware { _; } + + // Supports only null hook for now + function _delegatorHookCheck(address hook) private pure { + if (hook != address(0)) { + revert UnsupportedHook(); + } + } + + // Supports only null burner for now + function _burnerCheck(address burner) private pure { + if (burner == address(0)) { + revert UnsupportedBurner(); + } + } } diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index ea1ba74559a..080362719aa 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -5,14 +5,17 @@ import {EnumerableMap} from "@openzeppelin/contracts/utils/structs/EnumerableMap import {Time} from "@openzeppelin/contracts/utils/types/Time.sol"; import {MessageHashUtils} from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; import {Upgrades} from "openzeppelin-foundry-upgrades/Upgrades.sol"; - import {Test, console} from "forge-std/Test.sol"; +import "forge-std/Vm.sol"; + import {NetworkRegistry} from "symbiotic-core/src/contracts/NetworkRegistry.sol"; import {POCBaseTest} from "symbiotic-core/test/POCBase.t.sol"; import {IVaultConfigurator} from "symbiotic-core/src/interfaces/IVaultConfigurator.sol"; import {IVault} from "symbiotic-core/src/interfaces/vault/IVault.sol"; import {IBaseDelegator} from "symbiotic-core/src/interfaces/delegator/IBaseDelegator.sol"; import {IOperatorSpecificDelegator} from "symbiotic-core/src/interfaces/delegator/IOperatorSpecificDelegator.sol"; +import {IVetoSlasher} from "symbiotic-core/src/interfaces/slasher/IVetoSlasher.sol"; +import {IBaseSlasher} from "symbiotic-core/src/interfaces/slasher/IBaseSlasher.sol"; import {Middleware} from "../src/Middleware.sol"; import {WrappedVara} from "../src/WrappedVara.sol"; @@ -21,6 +24,9 @@ import {MapWithTimeData} from "../src/libraries/MapWithTimeData.sol"; contract MiddlewareTest is Test { using MessageHashUtils for address; + bytes32 public constant REQUEST_SLASH_EVENT_SIGNATURE = + keccak256("RequestSlash(uint256,bytes32,address,uint256,uint48,uint48)"); + uint48 eraDuration = 1000; address public owner; POCBaseTest public sym; @@ -28,6 +34,9 @@ contract MiddlewareTest is Test { WrappedVara public wrappedVara; function setUp() public { + // For correct simbiotic work with time artitmeticks + vm.warp(eraDuration * 100); + sym = new POCBaseTest(); sym.setUp(); @@ -39,16 +48,20 @@ contract MiddlewareTest is Test { wrappedVara.mint(owner, 1_000_000); - middleware = new Middleware( - eraDuration, - address(sym.vaultFactory()), - address(sym.delegatorFactory()), - address(sym.slasherFactory()), - address(sym.operatorRegistry()), - address(sym.networkRegistry()), - address(sym.operatorNetworkOptInService()), - address(wrappedVara) - ); + Middleware.MiddlewareConfig memory cfg = Middleware.MiddlewareConfig({ + eraDuration: eraDuration, + minVetoDuration: eraDuration / 3, + vaultRegistry: address(sym.vaultFactory()), + allowedVaultImplVersion: sym.vaultFactory().lastVersion(), + vetoSlasherImplType: 1, + operatorRegistry: address(sym.operatorRegistry()), + networkRegistry: address(sym.networkRegistry()), + networkOptIn: address(sym.operatorNetworkOptInService()), + middlewareService: address(sym.networkMiddlewareService()), + collateral: address(wrappedVara) + }); + + middleware = new Middleware(cfg); } function test_constructor() public view { @@ -57,9 +70,6 @@ contract MiddlewareTest is Test { assertEq(uint256(middleware.OPERATOR_GRACE_PERIOD()), eraDuration * 2); assertEq(uint256(middleware.VAULT_GRACE_PERIOD()), eraDuration * 2); assertEq(uint256(middleware.VAULT_MIN_EPOCH_DURATION()), eraDuration * 2); - assertEq(middleware.VAULT_FACTORY(), address(sym.vaultFactory())); - assertEq(middleware.DELEGATOR_FACTORY(), address(sym.delegatorFactory())); - assertEq(middleware.SLASHER_FACTORY(), address(sym.slasherFactory())); assertEq(middleware.OPERATOR_REGISTRY(), address(sym.operatorRegistry())); assertEq(middleware.COLLATERAL(), address(wrappedVara)); @@ -274,9 +284,115 @@ contract MiddlewareTest is Test { middleware.getOperatorStakeAt(operator2, uint48(vm.getBlockTimestamp() + 1)); // Try to get stake for too old timestamp - vm.warp(vm.getBlockTimestamp() + eraDuration * 2); - vm.expectRevert(abi.encodeWithSelector(Middleware.IncorrectTimestamp.selector)); - middleware.getOperatorStakeAt(operator2, uint48(vm.getBlockTimestamp())); + { + uint48 ts = uint48(vm.getBlockTimestamp()); + vm.warp(vm.getBlockTimestamp() + eraDuration * 2); + vm.expectRevert(abi.encodeWithSelector(Middleware.IncorrectTimestamp.selector)); + middleware.getOperatorStakeAt(operator2, ts); + } + } + + function test_slash() external { + address operator1 = address(0x1); + address operator2 = address(0x2); + + _registerOperator(operator1); + _registerOperator(operator2); + + address vault1 = _createVaultForOperator(operator1); + address vault2 = _createVaultForOperator(operator2); + + uint256 stake1 = 1_000; + uint256 stake2 = 2_000; + + _depositFromInVault(owner, vault1, stake1); + _depositFromInVault(owner, vault2, stake2); + + uint256 depositionTS = vm.getBlockTimestamp(); + vm.warp(depositionTS + 1); + + // Try to request slash from unknown operator + _requestSlash(address(0xdead), uint48(depositionTS), vault1, 100, Middleware.NotRegistredOperator.selector); + + // Try to request slash from unknown vault + _requestSlash(operator1, uint48(depositionTS), address(0xdead), 100, Middleware.NotRegistredVault.selector); + + // Try to request slash on vault where it has no stake + _requestSlash(operator1, uint48(depositionTS), vault2, 10, IVetoSlasher.InsufficientSlash.selector); + + { + // Make slash request for operator1 in vault1 + uint256 slashIndex = _requestSlash(operator1, uint48(depositionTS), vault1, 100, 0); + uint48 vetoDeadline = _vetoDeadline(IVault(vault1).slasher(), slashIndex); + assertEq(vetoDeadline, uint48(vm.getBlockTimestamp() + eraDuration / 2)); + + // Check it is not possible to execute slash before veto deadline + vm.warp(vetoDeadline - 1); + vm.expectRevert(IVetoSlasher.VetoPeriodNotEnded.selector); + middleware.executeSlash(vault1, slashIndex); + + // Check it is possible to execute slash when ready + vm.warp(vetoDeadline); + middleware.executeSlash(vault1, slashIndex); + + // Check that operator1 stake is decreased + vm.warp(vetoDeadline + 1); + assertEq(middleware.getOperatorStakeAt(operator1, vetoDeadline), stake1 - 100); + + // Try to execute slash twice + vm.expectRevert(IVetoSlasher.SlashRequestCompleted.selector); + middleware.executeSlash(vault1, slashIndex); + } + + { + // Make slash request for operator1 in vault1 + uint256 slashIndex = _requestSlash(operator1, uint48(depositionTS), vault1, 100, 0); + + // Try to slash after slash period + vm.warp(depositionTS + IVault(vault1).epochDuration() + 1); + vm.expectRevert(IVetoSlasher.SlashPeriodEnded.selector); + middleware.executeSlash(vault1, slashIndex); + } + } + + function _vetoDeadline(address slasher, uint256 slash_index) private view returns (uint48) { + (,,,, uint48 vetoDeadline,) = IVetoSlasher(slasher).slashRequests(slash_index); + return vetoDeadline; + } + + function _requestSlash(address operator, uint48 ts, address vault, uint256 amount, bytes4 err) + private + returns (uint256) + { + Middleware.VaultSlashData[] memory vaults = new Middleware.VaultSlashData[](1); + vaults[0] = Middleware.VaultSlashData({vault: vault, amount: amount}); + + Middleware.SlashData[] memory slashings = new Middleware.SlashData[](1); + slashings[0] = Middleware.SlashData({operator: operator, ts: ts, vaults: vaults}); + + vm.recordLogs(); + if (err != 0) { + vm.expectRevert(err); + middleware.requestSlash(slashings); + return type(uint256).max; + } else { + middleware.requestSlash(slashings); + } + Vm.Log[] memory logs = vm.getRecordedLogs(); + + address slasher = IVault(vault).slasher(); + uint256 slashIndex = type(uint256).max; + for (uint256 i = 0; i < logs.length; i++) { + Vm.Log memory log = logs[i]; + bytes32 eventSignature = log.topics[0]; + if (eventSignature == REQUEST_SLASH_EVENT_SIGNATURE && log.emitter == slasher) { + slashIndex = uint256(log.topics[1]); + } + } + + assertNotEq(slashIndex, type(uint256).max); + + return slashIndex; } function _disableOperator(address operator) private { @@ -368,9 +484,15 @@ contract MiddlewareTest is Test { operator: operator }) ), - withSlasher: false, - slasherIndex: 0, - slasherParams: bytes("") + withSlasher: true, + slasherIndex: 1, + slasherParams: abi.encode( + IVetoSlasher.InitParams({ + baseParams: IBaseSlasher.BaseParams({isBurnerHook: false}), + vetoDuration: eraDuration / 2, + resolverSetEpochsDelay: 3 + }) + ) }) ); } From 0abb80d33be1e3fedfa89860144ba6d50afcbcba Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Thu, 7 Nov 2024 12:32:09 +0100 Subject: [PATCH 17/43] veto --- ethexe/contracts/src/Middleware.sol | 12 ++++++++++++ ethexe/contracts/test/Middleware.t.sol | 27 ++++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index 7bb14dab872..ceae9a1d1af 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -299,6 +299,7 @@ contract Middleware { } // TODO: only slashes executor + // TODO: consider to use hints function executeSlash(address vault, uint256 index) external { if (!vaults.contains(vault)) { revert NotRegistredVault(); @@ -308,6 +309,17 @@ contract Middleware { IVetoSlasher(slasher).executeSlash(index, new bytes(0)); } + // TODO: only veto admin + // TODO: consider to use hints + function vetoShash(address vault, uint256 index) external { + if (!vaults.contains(vault)) { + revert NotRegistredVault(); + } + + address slasher = IVault(vault).slasher(); + IVetoSlasher(slasher).vetoSlash(index, new bytes(0)); + } + function _collectOperatorStakeFromVaultsAt(address operator, uint48 ts) private view returns (uint256 stake) { for (uint256 i; i < vaults.length(); ++i) { (address vault, uint48 vaultEnabledTime, uint48 vaultDisabledTime) = vaults.atWithTimes(i); diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index 080362719aa..77106f6dbd6 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -326,12 +326,12 @@ contract MiddlewareTest is Test { uint48 vetoDeadline = _vetoDeadline(IVault(vault1).slasher(), slashIndex); assertEq(vetoDeadline, uint48(vm.getBlockTimestamp() + eraDuration / 2)); - // Check it is not possible to execute slash before veto deadline + // Try to execute slash before veto deadline vm.warp(vetoDeadline - 1); vm.expectRevert(IVetoSlasher.VetoPeriodNotEnded.selector); middleware.executeSlash(vault1, slashIndex); - // Check it is possible to execute slash when ready + // Execute slash when ready vm.warp(vetoDeadline); middleware.executeSlash(vault1, slashIndex); @@ -353,6 +353,29 @@ contract MiddlewareTest is Test { vm.expectRevert(IVetoSlasher.SlashPeriodEnded.selector); middleware.executeSlash(vault1, slashIndex); } + + { + // Make slash request for operator1 in vault1 + uint256 slashIndex = _requestSlash(operator1, uint48(vm.getBlockTimestamp() - 1), vault1, 100, 0); + uint48 vetoDeadline = _vetoDeadline(IVault(vault1).slasher(), slashIndex); + + // Try to execute slash after veto deadline + vm.warp(vetoDeadline); + vm.expectRevert(IVetoSlasher.VetoPeriodEnded.selector); + middleware.vetoShash(vault1, slashIndex); + + // Veto slash + vm.warp(vetoDeadline - 1); + middleware.vetoShash(vault1, slashIndex); + + // Try to execute slash after veto + vm.warp(vetoDeadline); + vm.expectRevert(IVetoSlasher.SlashRequestCompleted.selector); + middleware.executeSlash(vault1, slashIndex); + } + + // TODO: test many slashes + // TODO: test out of funds } function _vetoDeadline(address slasher, uint256 slash_index) private view returns (uint48) { From 9242d56f4cc88437f5151f2c2a9886dba005fc0d Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Thu, 7 Nov 2024 14:58:58 +0100 Subject: [PATCH 18/43] test many slash requests, fix bug --- ethexe/contracts/src/Middleware.sol | 2 +- ethexe/contracts/test/Middleware.t.sol | 84 +++++++++++++++++++++----- 2 files changed, 69 insertions(+), 17 deletions(-) diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index ceae9a1d1af..1a8976633f5 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -283,7 +283,7 @@ contract Middleware { revert NotRegistredOperator(); } - for (uint256 j; j < data.length; ++j) { + for (uint256 j; j < slash_data.vaults.length; ++j) { VaultSlashData calldata vault_data = slash_data.vaults[j]; if (!vaults.contains(vault_data.vault)) { diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index 77106f6dbd6..18f593619cc 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -354,6 +354,42 @@ contract MiddlewareTest is Test { middleware.executeSlash(vault1, slashIndex); } + { + // Try request slashes for one operator, but 2 vaults + Middleware.VaultSlashData[] memory vaults = new Middleware.VaultSlashData[](2); + vaults[0] = Middleware.VaultSlashData({vault: vault1, amount: 10}); + vaults[1] = Middleware.VaultSlashData({vault: vault2, amount: 20}); + + Middleware.SlashData[] memory slashes = new Middleware.SlashData[](2); + slashes[0] = + Middleware.SlashData({operator: operator1, ts: uint48(vm.getBlockTimestamp() - 1), vaults: vaults}); + + _requestSlash(slashes, IVetoSlasher.InsufficientSlash.selector); + } + + { + // Request slases for 2 operators with corresponding vaults + Middleware.VaultSlashData[] memory operator1_vaults = new Middleware.VaultSlashData[](1); + operator1_vaults[0] = Middleware.VaultSlashData({vault: vault1, amount: 10}); + + Middleware.VaultSlashData[] memory operator2_vaults = new Middleware.VaultSlashData[](1); + operator2_vaults[0] = Middleware.VaultSlashData({vault: vault2, amount: 20}); + + Middleware.SlashData[] memory slashes = new Middleware.SlashData[](2); + slashes[0] = Middleware.SlashData({ + operator: operator1, + ts: uint48(vm.getBlockTimestamp() - 1), + vaults: operator1_vaults + }); + slashes[1] = Middleware.SlashData({ + operator: operator2, + ts: uint48(vm.getBlockTimestamp() - 1), + vaults: operator2_vaults + }); + + _requestSlash(slashes, 0); + } + { // Make slash request for operator1 in vault1 uint256 slashIndex = _requestSlash(operator1, uint48(vm.getBlockTimestamp() - 1), vault1, 100, 0); @@ -374,8 +410,19 @@ contract MiddlewareTest is Test { middleware.executeSlash(vault1, slashIndex); } - // TODO: test many slashes - // TODO: test out of funds + { + // Slash all operator1 stake + uint256 slashIndex = + _requestSlash(operator1, uint48(vm.getBlockTimestamp() - 1), vault1, type(uint256).max, 0); + uint48 vetoDeadline = _vetoDeadline(IVault(vault1).slasher(), slashIndex); + + vm.warp(vetoDeadline); + middleware.executeSlash(vault1, slashIndex); + + // Check that operator1 stake is 0 + vm.warp(vetoDeadline + 1); + assertEq(middleware.getOperatorStakeAt(operator1, vetoDeadline), 0); + } } function _vetoDeadline(address slasher, uint256 slash_index) private view returns (uint48) { @@ -385,37 +432,42 @@ contract MiddlewareTest is Test { function _requestSlash(address operator, uint48 ts, address vault, uint256 amount, bytes4 err) private - returns (uint256) + returns (uint256 slashIndex) { Middleware.VaultSlashData[] memory vaults = new Middleware.VaultSlashData[](1); vaults[0] = Middleware.VaultSlashData({vault: vault, amount: amount}); - Middleware.SlashData[] memory slashings = new Middleware.SlashData[](1); - slashings[0] = Middleware.SlashData({operator: operator, ts: ts, vaults: vaults}); + Middleware.SlashData[] memory slashes = new Middleware.SlashData[](1); + slashes[0] = Middleware.SlashData({operator: operator, ts: ts, vaults: vaults}); + + slashIndex = _requestSlash(slashes, err)[0]; + assertNotEq(slashIndex, type(uint256).max); + } + + function _requestSlash(Middleware.SlashData[] memory slashes, bytes4 err) + private + returns (uint256[] memory slashIndexes) + { + slashIndexes = new uint256[](slashes.length); vm.recordLogs(); if (err != 0) { vm.expectRevert(err); - middleware.requestSlash(slashings); - return type(uint256).max; + middleware.requestSlash(slashes); + return slashIndexes; } else { - middleware.requestSlash(slashings); + middleware.requestSlash(slashes); } Vm.Log[] memory logs = vm.getRecordedLogs(); - address slasher = IVault(vault).slasher(); - uint256 slashIndex = type(uint256).max; + uint16 k = 0; for (uint256 i = 0; i < logs.length; i++) { Vm.Log memory log = logs[i]; bytes32 eventSignature = log.topics[0]; - if (eventSignature == REQUEST_SLASH_EVENT_SIGNATURE && log.emitter == slasher) { - slashIndex = uint256(log.topics[1]); + if (eventSignature == REQUEST_SLASH_EVENT_SIGNATURE) { + slashIndexes[k++] = uint256(log.topics[1]); } } - - assertNotEq(slashIndex, type(uint256).max); - - return slashIndex; } function _disableOperator(address operator) private { From e7899ca85859c18f163e253a02e9b2c2fb2775d0 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Thu, 7 Nov 2024 15:58:51 +0100 Subject: [PATCH 19/43] split tests, fix bug for resolver --- ethexe/contracts/src/Middleware.sol | 7 +- ethexe/contracts/test/Middleware.t.sol | 245 ++++++++++++++----------- 2 files changed, 140 insertions(+), 112 deletions(-) diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index 1a8976633f5..97759f63a6a 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -18,7 +18,6 @@ import {IMigratableEntity} from "symbiotic-core/src/interfaces/common/IMigratabl import {MapWithTimeData} from "./libraries/MapWithTimeData.sol"; -// TODO: support slashing // TODO: use camelCase for immutable variables // TODO: implement election logic // TODO: implement forced operators removal @@ -148,6 +147,7 @@ contract Middleware { // TODO: check vault has enough stake // TODO: support and check slasher + // TODO: consider to use hints function registerVault(address vault) external { if (vault == address(0)) { revert ZeroVaultAddress(); @@ -191,11 +191,12 @@ contract Middleware { if (IVetoSlasher(slasher).vetoDuration() < MIN_VETO_DURATION) { revert VetoDurationTooShort(); } + if (IVetoSlasher(slasher).resolver(SUBNETWORK, new bytes(0)) != address(this)) { + IVetoSlasher(slasher).setResolver(NETWORK_IDENTIFIER, address(this), new bytes(0)); + } _burnerCheck(IVault(vault).burner()); - IVetoSlasher(slasher).setResolver(NETWORK_IDENTIFIER, address(this), new bytes(0)); - vaults.append(vault, uint160(msg.sender)); } diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index 18f593619cc..6da9cea7c3a 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -101,7 +101,7 @@ contract MiddlewareTest is Test { sym.operatorNetworkOptInService().optIn(address(middleware)); middleware.registerOperator(); - // Disable operator and the enable it + // Disable operator and then enable it middleware.disableOperator(); middleware.enableOperator(); @@ -293,136 +293,163 @@ contract MiddlewareTest is Test { } function test_slash() external { - address operator1 = address(0x1); - address operator2 = address(0x2); + (address operator1,, address vault1,, uint256 stake1,) = _prepareTwoOperators(); - _registerOperator(operator1); - _registerOperator(operator2); + // Make slash request for operator1 in vault1 + uint256 slashIndex = _requestSlash(operator1, uint48(vm.getBlockTimestamp() - 1), vault1, 100, 0); + uint48 vetoDeadline = _vetoDeadline(IVault(vault1).slasher(), slashIndex); + assertEq(vetoDeadline, uint48(vm.getBlockTimestamp() + eraDuration / 2)); - address vault1 = _createVaultForOperator(operator1); - address vault2 = _createVaultForOperator(operator2); + // Try to execute slash before veto deadline + vm.warp(vetoDeadline - 1); + vm.expectRevert(IVetoSlasher.VetoPeriodNotEnded.selector); + middleware.executeSlash(vault1, slashIndex); - uint256 stake1 = 1_000; - uint256 stake2 = 2_000; + // Execute slash when ready + vm.warp(vetoDeadline); + middleware.executeSlash(vault1, slashIndex); - _depositFromInVault(owner, vault1, stake1); - _depositFromInVault(owner, vault2, stake2); + // Check that operator1 stake is decreased + vm.warp(vetoDeadline + 1); + assertEq(middleware.getOperatorStakeAt(operator1, vetoDeadline), stake1 - 100); + + // Try to execute slash twice + vm.expectRevert(IVetoSlasher.SlashRequestCompleted.selector); + middleware.executeSlash(vault1, slashIndex); + } - uint256 depositionTS = vm.getBlockTimestamp(); - vm.warp(depositionTS + 1); + function test_slashRequestUnknownOperator() external { + (,, address vault1,,,) = _prepareTwoOperators(); // Try to request slash from unknown operator - _requestSlash(address(0xdead), uint48(depositionTS), vault1, 100, Middleware.NotRegistredOperator.selector); + vm.warp(vm.getBlockTimestamp() + 1); + _requestSlash( + address(0xdead), uint48(vm.getBlockTimestamp() - 1), vault1, 100, Middleware.NotRegistredOperator.selector + ); + } + + function test_slashRequestUnknownVault() external { + (address operator1,,,,,) = _prepareTwoOperators(); // Try to request slash from unknown vault - _requestSlash(operator1, uint48(depositionTS), address(0xdead), 100, Middleware.NotRegistredVault.selector); + _requestSlash( + operator1, uint48(vm.getBlockTimestamp() - 1), address(0xdead), 100, Middleware.NotRegistredVault.selector + ); + } + + function test_slashRequestOnVaultWithNoStake() external { + (address operator1,,, address vault2,,) = _prepareTwoOperators(); // Try to request slash on vault where it has no stake - _requestSlash(operator1, uint48(depositionTS), vault2, 10, IVetoSlasher.InsufficientSlash.selector); + _requestSlash( + operator1, uint48(vm.getBlockTimestamp() - 1), vault2, 10, IVetoSlasher.InsufficientSlash.selector + ); + } - { - // Make slash request for operator1 in vault1 - uint256 slashIndex = _requestSlash(operator1, uint48(depositionTS), vault1, 100, 0); - uint48 vetoDeadline = _vetoDeadline(IVault(vault1).slasher(), slashIndex); - assertEq(vetoDeadline, uint48(vm.getBlockTimestamp() + eraDuration / 2)); - - // Try to execute slash before veto deadline - vm.warp(vetoDeadline - 1); - vm.expectRevert(IVetoSlasher.VetoPeriodNotEnded.selector); - middleware.executeSlash(vault1, slashIndex); - - // Execute slash when ready - vm.warp(vetoDeadline); - middleware.executeSlash(vault1, slashIndex); - - // Check that operator1 stake is decreased - vm.warp(vetoDeadline + 1); - assertEq(middleware.getOperatorStakeAt(operator1, vetoDeadline), stake1 - 100); - - // Try to execute slash twice - vm.expectRevert(IVetoSlasher.SlashRequestCompleted.selector); - middleware.executeSlash(vault1, slashIndex); - } + function test_slashAfterSlashPeriod() external { + (address operator1,, address vault1,,,) = _prepareTwoOperators(); - { - // Make slash request for operator1 in vault1 - uint256 slashIndex = _requestSlash(operator1, uint48(depositionTS), vault1, 100, 0); + // Make slash request for operator1 in vault1 + uint256 slashIndex = _requestSlash(operator1, uint48(vm.getBlockTimestamp() - 1), vault1, 100, 0); - // Try to slash after slash period - vm.warp(depositionTS + IVault(vault1).epochDuration() + 1); - vm.expectRevert(IVetoSlasher.SlashPeriodEnded.selector); - middleware.executeSlash(vault1, slashIndex); - } + // Try to slash after slash period + vm.warp(uint48(vm.getBlockTimestamp()) + IVault(vault1).epochDuration()); + vm.expectRevert(IVetoSlasher.SlashPeriodEnded.selector); + middleware.executeSlash(vault1, slashIndex); + } - { - // Try request slashes for one operator, but 2 vaults - Middleware.VaultSlashData[] memory vaults = new Middleware.VaultSlashData[](2); - vaults[0] = Middleware.VaultSlashData({vault: vault1, amount: 10}); - vaults[1] = Middleware.VaultSlashData({vault: vault2, amount: 20}); + function test_slashOneOperatorTwoVaults() external { + (address operator1,, address vault1, address vault2,,) = _prepareTwoOperators(); - Middleware.SlashData[] memory slashes = new Middleware.SlashData[](2); - slashes[0] = - Middleware.SlashData({operator: operator1, ts: uint48(vm.getBlockTimestamp() - 1), vaults: vaults}); + // Try request slashes for one operator, but 2 vaults + Middleware.VaultSlashData[] memory vaults = new Middleware.VaultSlashData[](2); + vaults[0] = Middleware.VaultSlashData({vault: vault1, amount: 10}); + vaults[1] = Middleware.VaultSlashData({vault: vault2, amount: 20}); - _requestSlash(slashes, IVetoSlasher.InsufficientSlash.selector); - } + Middleware.SlashData[] memory slashes = new Middleware.SlashData[](1); + slashes[0] = Middleware.SlashData({operator: operator1, ts: uint48(vm.getBlockTimestamp() - 1), vaults: vaults}); - { - // Request slases for 2 operators with corresponding vaults - Middleware.VaultSlashData[] memory operator1_vaults = new Middleware.VaultSlashData[](1); - operator1_vaults[0] = Middleware.VaultSlashData({vault: vault1, amount: 10}); - - Middleware.VaultSlashData[] memory operator2_vaults = new Middleware.VaultSlashData[](1); - operator2_vaults[0] = Middleware.VaultSlashData({vault: vault2, amount: 20}); - - Middleware.SlashData[] memory slashes = new Middleware.SlashData[](2); - slashes[0] = Middleware.SlashData({ - operator: operator1, - ts: uint48(vm.getBlockTimestamp() - 1), - vaults: operator1_vaults - }); - slashes[1] = Middleware.SlashData({ - operator: operator2, - ts: uint48(vm.getBlockTimestamp() - 1), - vaults: operator2_vaults - }); - - _requestSlash(slashes, 0); - } + _requestSlash(slashes, IVetoSlasher.InsufficientSlash.selector); + } - { - // Make slash request for operator1 in vault1 - uint256 slashIndex = _requestSlash(operator1, uint48(vm.getBlockTimestamp() - 1), vault1, 100, 0); - uint48 vetoDeadline = _vetoDeadline(IVault(vault1).slasher(), slashIndex); - - // Try to execute slash after veto deadline - vm.warp(vetoDeadline); - vm.expectRevert(IVetoSlasher.VetoPeriodEnded.selector); - middleware.vetoShash(vault1, slashIndex); - - // Veto slash - vm.warp(vetoDeadline - 1); - middleware.vetoShash(vault1, slashIndex); - - // Try to execute slash after veto - vm.warp(vetoDeadline); - vm.expectRevert(IVetoSlasher.SlashRequestCompleted.selector); - middleware.executeSlash(vault1, slashIndex); - } + function test_slashTwoOperatorsTwoVaults() external { + (address operator1, address operator2, address vault1, address vault2,,) = _prepareTwoOperators(); - { - // Slash all operator1 stake - uint256 slashIndex = - _requestSlash(operator1, uint48(vm.getBlockTimestamp() - 1), vault1, type(uint256).max, 0); - uint48 vetoDeadline = _vetoDeadline(IVault(vault1).slasher(), slashIndex); + // Request slases for 2 operators with corresponding vaults + Middleware.VaultSlashData[] memory operator1_vaults = new Middleware.VaultSlashData[](1); + operator1_vaults[0] = Middleware.VaultSlashData({vault: vault1, amount: 10}); - vm.warp(vetoDeadline); - middleware.executeSlash(vault1, slashIndex); + Middleware.VaultSlashData[] memory operator2_vaults = new Middleware.VaultSlashData[](1); + operator2_vaults[0] = Middleware.VaultSlashData({vault: vault2, amount: 20}); - // Check that operator1 stake is 0 - vm.warp(vetoDeadline + 1); - assertEq(middleware.getOperatorStakeAt(operator1, vetoDeadline), 0); - } + Middleware.SlashData[] memory slashes = new Middleware.SlashData[](2); + slashes[0] = Middleware.SlashData({ + operator: operator1, + ts: uint48(vm.getBlockTimestamp() - 1), + vaults: operator1_vaults + }); + slashes[1] = Middleware.SlashData({ + operator: operator2, + ts: uint48(vm.getBlockTimestamp() - 1), + vaults: operator2_vaults + }); + + _requestSlash(slashes, 0); + } + + function test_slashVeto() external { + (address operator1,, address vault1,,,) = _prepareTwoOperators(); + + // Make slash request for operator1 in vault1 + uint256 slashIndex = _requestSlash(operator1, uint48(vm.getBlockTimestamp() - 1), vault1, 100, 0); + uint48 vetoDeadline = _vetoDeadline(IVault(vault1).slasher(), slashIndex); + + // Try to execute slash after veto deadline + vm.warp(vetoDeadline); + vm.expectRevert(IVetoSlasher.VetoPeriodEnded.selector); + middleware.vetoShash(vault1, slashIndex); + + // Veto slash + vm.warp(vetoDeadline - 1); + middleware.vetoShash(vault1, slashIndex); + + // Try to execute slash after veto + vm.warp(vetoDeadline); + vm.expectRevert(IVetoSlasher.SlashRequestCompleted.selector); + middleware.executeSlash(vault1, slashIndex); + } + + function test_slashExecutionUnregistredVault() external { + (address operator1,, address vault1,,,) = _prepareTwoOperators(); + + // Make slash request for operator1 in vault1 + uint256 slashIndex = _requestSlash(operator1, uint48(vm.getBlockTimestamp() - 1), vault1, 100, 0); + + // Try to execute slash for unknown vault + vm.expectRevert(Middleware.NotRegistredVault.selector); + middleware.executeSlash(address(0xdead), slashIndex); + } + + function _prepareTwoOperators() + private + returns (address operator1, address operator2, address vault1, address vault2, uint256 stake1, uint256 stake2) + { + operator1 = address(0x1); + operator2 = address(0x2); + + _registerOperator(operator1); + _registerOperator(operator2); + + vault1 = _createVaultForOperator(operator1); + vault2 = _createVaultForOperator(operator2); + + stake1 = 1_000; + stake2 = 2_000; + + _depositFromInVault(owner, vault1, stake1); + _depositFromInVault(owner, vault2, stake2); + + vm.warp(vm.getBlockTimestamp() + 1); } function _vetoDeadline(address slasher, uint256 slash_index) private view returns (uint48) { From 3318c18206ece303ed57d0822c7c7b035ccdd63a Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Thu, 7 Nov 2024 17:07:38 +0100 Subject: [PATCH 20/43] split stake tests --- ethexe/contracts/test/Middleware.t.sol | 163 ++++++++++++++----------- 1 file changed, 90 insertions(+), 73 deletions(-) diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index 6da9cea7c3a..94c3b836b7e 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -64,6 +64,7 @@ contract MiddlewareTest is Test { middleware = new Middleware(cfg); } + // TODO: sync with the latest version of the middleware function test_constructor() public view { assertEq(uint256(middleware.ERA_DURATION()), eraDuration); assertEq(uint256(middleware.GENESIS_TIMESTAMP()), Time.timestamp()); @@ -76,6 +77,7 @@ contract MiddlewareTest is Test { sym.networkRegistry().isEntity(address(middleware)); } + // TODO: split to multiple tests function test_registerOperator() public { // Register operator vm.startPrank(address(0x1)); @@ -124,6 +126,7 @@ contract MiddlewareTest is Test { middleware.unregisterOperator(address(0x2)); } + // TODO: split to multiple tests function test_registerVault() public { sym.operatorRegistry().registerOperator(); address vault = _newVault(eraDuration * 2, owner); @@ -201,95 +204,93 @@ contract MiddlewareTest is Test { middleware.unregisterVault(address(0x1)); } - function test_operatorStake() public { - address operator1 = address(0x1); - address operator2 = address(0x2); + function test_stake() public { + (address operator1, address operator2,,, uint256 stake1, uint256 stake2) = _prepareTwoOperators(); - _registerOperator(operator1); - _registerOperator(operator2); - - address vault1 = _createVaultForOperator(operator1); - address vault2 = _createVaultForOperator(operator2); + uint48 ts = uint48(vm.getBlockTimestamp() - 1); - uint256 stake1 = 1_000; - uint256 stake2 = 2_000; - uint256 stake3 = 3_000; + // Check operator stake after depositing + assertEq(middleware.getOperatorStakeAt(operator1, ts), stake1); + assertEq(middleware.getOperatorStakeAt(operator2, ts), stake2); - _depositFromInVault(owner, vault1, stake1); - _depositFromInVault(owner, vault2, stake2); + // Check active operators + (address[] memory active_operators, uint256[] memory stakes) = middleware.getActiveOperatorsStakeAt(ts); + assertEq(active_operators.length, 2); + assertEq(stakes.length, 2); + assertEq(active_operators[0], operator1); + assertEq(active_operators[1], operator2); + assertEq(stakes[0], stake1); + assertEq(stakes[1], stake2); + } - { - // Check operator stake after depositing - uint48 ts = uint48(vm.getBlockTimestamp()); - vm.warp(vm.getBlockTimestamp() + 1); - assertEq(middleware.getOperatorStakeAt(operator1, ts), stake1); - assertEq(middleware.getOperatorStakeAt(operator2, ts), stake2); - (address[] memory active_operators, uint256[] memory stakes) = middleware.getActiveOperatorsStakeAt(ts); - assertEq(active_operators.length, 2); - assertEq(stakes.length, 2); - assertEq(active_operators[0], operator1); - assertEq(active_operators[1], operator2); - assertEq(stakes[0], stake1); - assertEq(stakes[1], stake2); - } + function test_stakeOperatorWithTwoVaults() public { + (address operator1,, address vault1,, uint256 stake1,) = _prepareTwoOperators(); // Create one more vault for operator1 address vault3 = _createVaultForOperator(operator1); - { - // Check that vault creation doesn't affect operator stake without deposit - uint48 ts = uint48(vm.getBlockTimestamp()); - vm.warp(vm.getBlockTimestamp() + 1); - assertEq(middleware.getOperatorStakeAt(operator1, ts), stake1); - } + // Check that vault creation doesn't affect operator stake without deposit + uint48 ts = uint48(vm.getBlockTimestamp()); + vm.warp(vm.getBlockTimestamp() + 1); + assertEq(middleware.getOperatorStakeAt(operator1, ts), stake1); - { - // Check after depositing to new vault - _depositFromInVault(owner, vault3, stake3); - uint48 ts = uint48(vm.getBlockTimestamp()); - vm.warp(vm.getBlockTimestamp() + 1); - assertEq(middleware.getOperatorStakeAt(operator1, ts), stake1 + stake3); - } + // Check after depositing to new vault + uint256 stake3 = 3_000; + _depositFromInVault(owner, vault3, stake3); + ts = uint48(vm.getBlockTimestamp()); + vm.warp(vm.getBlockTimestamp() + 1); + assertEq(middleware.getOperatorStakeAt(operator1, ts), stake1 + stake3); + + // Disable vault1 and check operator1 stake + _disableVault(operator1, vault1); + // Disable is not immediate, so we need to check for the next block ts + ts = uint48(vm.getBlockTimestamp()) + 1; + vm.warp(vm.getBlockTimestamp() + 2); + assertEq(middleware.getOperatorStakeAt(operator1, ts), stake3); + } - { - // Disable vault1 and check operator1 stake - // Disable is not immediate, so we need to check for the next block ts - _disableVault(operator1, vault1); - uint48 ts = uint48(vm.getBlockTimestamp()) + 1; - vm.warp(vm.getBlockTimestamp() + 2); - assertEq(middleware.getOperatorStakeAt(operator1, ts), stake3); - } + function test_stakeDisabledOperator() public { + (address operator1, address operator2,,,, uint256 stake2) = _prepareTwoOperators(); + + // Disable operator1 and check operator1 stake is 0 + _disableOperator(operator1); + // Disable is not immediate, so we need to check for the next block ts + uint48 ts = uint48(vm.getBlockTimestamp()) + 1; + vm.warp(vm.getBlockTimestamp() + 2); + assertEq(middleware.getOperatorStakeAt(operator1, ts), 0); + + // Check that operator1 is not in active operators list + (address[] memory active_operators, uint256[] memory stakes) = middleware.getActiveOperatorsStakeAt(ts); + assertEq(active_operators.length, 1); + assertEq(stakes.length, 1); + assertEq(active_operators[0], operator2); + assertEq(stakes[0], stake2); + } - { - // Disable operator1 and check operator1 stake is 0 - _disableOperator(operator1); - uint48 ts = uint48(vm.getBlockTimestamp()) + 1; - vm.warp(vm.getBlockTimestamp() + 2); - assertEq(middleware.getOperatorStakeAt(operator1, ts), 0); - - // Check that operator1 is not in active operators list - (address[] memory active_operators, uint256[] memory stakes) = middleware.getActiveOperatorsStakeAt(ts); - assertEq(active_operators.length, 1); - assertEq(stakes.length, 1); - assertEq(active_operators[0], operator2); - assertEq(stakes[0], stake2); - } + function test_stakeTooOldTimestamp() public { + (address operator1,,,,,) = _prepareTwoOperators(); + + // Try to get stake for too old timestamp + uint48 ts = uint48(vm.getBlockTimestamp()); + vm.warp(vm.getBlockTimestamp() + eraDuration * 2); + vm.expectRevert(abi.encodeWithSelector(Middleware.IncorrectTimestamp.selector)); + middleware.getOperatorStakeAt(operator1, ts); + } + + function test_stakeCurrentTimestamp() public { + (address operator1,,,,,) = _prepareTwoOperators(); // Try to get stake for current timestamp vm.expectRevert(abi.encodeWithSelector(Middleware.IncorrectTimestamp.selector)); - middleware.getOperatorStakeAt(operator2, uint48(vm.getBlockTimestamp())); + middleware.getOperatorStakeAt(operator1, uint48(vm.getBlockTimestamp())); + } + + function test_stakeFutureTimestamp() public { + (address operator1,,,,,) = _prepareTwoOperators(); // Try to get stake for future timestamp vm.expectRevert(abi.encodeWithSelector(Middleware.IncorrectTimestamp.selector)); - middleware.getOperatorStakeAt(operator2, uint48(vm.getBlockTimestamp() + 1)); - - // Try to get stake for too old timestamp - { - uint48 ts = uint48(vm.getBlockTimestamp()); - vm.warp(vm.getBlockTimestamp() + eraDuration * 2); - vm.expectRevert(abi.encodeWithSelector(Middleware.IncorrectTimestamp.selector)); - middleware.getOperatorStakeAt(operator2, ts); - } + middleware.getOperatorStakeAt(operator1, uint48(vm.getBlockTimestamp() + 1)); } function test_slash() external { @@ -370,6 +371,17 @@ contract MiddlewareTest is Test { slashes[0] = Middleware.SlashData({operator: operator1, ts: uint48(vm.getBlockTimestamp() - 1), vaults: vaults}); _requestSlash(slashes, IVetoSlasher.InsufficientSlash.selector); + + // Make one more vault for operator1 + address vault3 = _createVaultForOperator(operator1); + _depositFromInVault(owner, vault3, 3_000); + + vm.warp(vm.getBlockTimestamp() + 1); + + // Request slashes with correct vaults + vaults[1] = Middleware.VaultSlashData({vault: vault3, amount: 30}); + slashes[0] = Middleware.SlashData({operator: operator1, ts: uint48(vm.getBlockTimestamp() - 1), vaults: vaults}); + _requestSlash(slashes, 0); } function test_slashTwoOperatorsTwoVaults() external { @@ -475,7 +487,12 @@ contract MiddlewareTest is Test { private returns (uint256[] memory slashIndexes) { - slashIndexes = new uint256[](slashes.length); + uint256 len = 0; + for (uint256 i = 0; i < slashes.length; i++) { + len += slashes[i].vaults.length; + } + + slashIndexes = new uint256[](len); vm.recordLogs(); if (err != 0) { From ed29600cb8a8a0c3c09fee5294798d3ceb3ef0d8 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Thu, 7 Nov 2024 23:53:58 +0100 Subject: [PATCH 21/43] append roles for slashing --- ethexe/contracts/src/Middleware.sol | 23 +++++++++++++++++++---- ethexe/contracts/test/Middleware.t.sol | 4 +++- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index 97759f63a6a..e79688f5b1c 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -19,6 +19,7 @@ import {IMigratableEntity} from "symbiotic-core/src/interfaces/common/IMigratabl import {MapWithTimeData} from "./libraries/MapWithTimeData.sol"; // TODO: use camelCase for immutable variables +// TODO: document all functions and variables // TODO: implement election logic // TODO: implement forced operators removal // TODO: implement forced vaults removal @@ -48,6 +49,7 @@ contract Middleware { error IncompatibleVaultVersion(); error NotRegistredVault(); error NotRegistredOperator(); + error RoleMismatch(); struct VaultSlashData { address vault; @@ -71,6 +73,8 @@ contract Middleware { address networkOptIn; address middlewareService; address collateral; + address roleSlashRequester; + address roleSlashExecutor; } uint96 public constant NETWORK_IDENTIFIER = 0; @@ -93,6 +97,9 @@ contract Middleware { address public immutable COLLATERAL; bytes32 public immutable SUBNETWORK; + address public immutable ROLE_SLASH_REQUESTER; + address public immutable ROLE_SLASH_EXECUTOR; + EnumerableMap.AddressToUintMap private operators; EnumerableMap.AddressToUintMap private vaults; @@ -111,6 +118,9 @@ contract Middleware { COLLATERAL = cfg.collateral; SUBNETWORK = address(this).subnetwork(NETWORK_IDENTIFIER); + ROLE_SLASH_REQUESTER = cfg.roleSlashRequester; + ROLE_SLASH_EXECUTOR = cfg.roleSlashExecutor; + // Presently network and middleware are the same address INetworkRegistry(cfg.networkRegistry).registerNetwork(); INetworkMiddlewareService(cfg.middlewareService).setMiddleware(address(this)); @@ -275,9 +285,8 @@ contract Middleware { } } - // TODO: Only router can call this function // TODO: consider to use hints - function requestSlash(SlashData[] calldata data) external { + function requestSlash(SlashData[] calldata data) external _onlyRole(ROLE_SLASH_REQUESTER) { for (uint256 i; i < data.length; ++i) { SlashData calldata slash_data = data[i]; if (!operators.contains(slash_data.operator)) { @@ -299,9 +308,8 @@ contract Middleware { } } - // TODO: only slashes executor // TODO: consider to use hints - function executeSlash(address vault, uint256 index) external { + function executeSlash(address vault, uint256 index) external _onlyRole(ROLE_SLASH_EXECUTOR) { if (!vaults.contains(vault)) { revert NotRegistredVault(); } @@ -365,4 +373,11 @@ contract Middleware { revert UnsupportedBurner(); } } + + modifier _onlyRole(address role) { + if (msg.sender != role) { + revert RoleMismatch(); + } + _; + } } diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index 94c3b836b7e..64e62786ef2 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -58,7 +58,9 @@ contract MiddlewareTest is Test { networkRegistry: address(sym.networkRegistry()), networkOptIn: address(sym.operatorNetworkOptInService()), middlewareService: address(sym.networkMiddlewareService()), - collateral: address(wrappedVara) + collateral: address(wrappedVara), + roleSlashRequester: owner, + roleSlashExecutor: owner }); middleware = new Middleware(cfg); From 552eb8b015be94f94b207b985c1a1001e878634e Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Fri, 8 Nov 2024 01:27:41 +0100 Subject: [PATCH 22/43] remove veto from middleware - use separate resolver --- ethexe/contracts/src/Middleware.sol | 25 ++++++++++++------------- ethexe/contracts/test/Middleware.t.sol | 16 ++++++++++------ 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index e79688f5b1c..1eaa535ad8d 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -50,6 +50,7 @@ contract Middleware { error NotRegistredVault(); error NotRegistredOperator(); error RoleMismatch(); + error ResolverMismatch(address resolver); struct VaultSlashData { address vault; @@ -75,6 +76,7 @@ contract Middleware { address collateral; address roleSlashRequester; address roleSlashExecutor; + address vetoResolver; } uint96 public constant NETWORK_IDENTIFIER = 0; @@ -100,6 +102,9 @@ contract Middleware { address public immutable ROLE_SLASH_REQUESTER; address public immutable ROLE_SLASH_EXECUTOR; + /// @notice Resolver address for the veto slasher. + address public immutable VETO_RESOLVER; + EnumerableMap.AddressToUintMap private operators; EnumerableMap.AddressToUintMap private vaults; @@ -120,6 +125,7 @@ contract Middleware { ROLE_SLASH_REQUESTER = cfg.roleSlashRequester; ROLE_SLASH_EXECUTOR = cfg.roleSlashExecutor; + VETO_RESOLVER = cfg.vetoResolver; // Presently network and middleware are the same address INetworkRegistry(cfg.networkRegistry).registerNetwork(); @@ -201,8 +207,12 @@ contract Middleware { if (IVetoSlasher(slasher).vetoDuration() < MIN_VETO_DURATION) { revert VetoDurationTooShort(); } - if (IVetoSlasher(slasher).resolver(SUBNETWORK, new bytes(0)) != address(this)) { - IVetoSlasher(slasher).setResolver(NETWORK_IDENTIFIER, address(this), new bytes(0)); + address resolver = IVetoSlasher(slasher).resolver(SUBNETWORK, new bytes(0)); + if (resolver == address(0)) { + IVetoSlasher(slasher).setResolver(NETWORK_IDENTIFIER, VETO_RESOLVER, new bytes(0)); + } else if (resolver != VETO_RESOLVER) { + // TODO: consider how to support this case + revert ResolverMismatch(resolver); } _burnerCheck(IVault(vault).burner()); @@ -318,17 +328,6 @@ contract Middleware { IVetoSlasher(slasher).executeSlash(index, new bytes(0)); } - // TODO: only veto admin - // TODO: consider to use hints - function vetoShash(address vault, uint256 index) external { - if (!vaults.contains(vault)) { - revert NotRegistredVault(); - } - - address slasher = IVault(vault).slasher(); - IVetoSlasher(slasher).vetoSlash(index, new bytes(0)); - } - function _collectOperatorStakeFromVaultsAt(address operator, uint48 ts) private view returns (uint256 stake) { for (uint256 i; i < vaults.length(); ++i) { (address vault, uint48 vaultEnabledTime, uint48 vaultDisabledTime) = vaults.atWithTimes(i); diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index 64e62786ef2..ec063a9f2e1 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -60,7 +60,8 @@ contract MiddlewareTest is Test { middlewareService: address(sym.networkMiddlewareService()), collateral: address(wrappedVara), roleSlashRequester: owner, - roleSlashExecutor: owner + roleSlashExecutor: owner, + vetoResolver: owner }); middleware = new Middleware(cfg); @@ -129,6 +130,8 @@ contract MiddlewareTest is Test { } // TODO: split to multiple tests + // TODO: check vault has valid network params + // TODO: test when vault has incorrect network params function test_registerVault() public { sym.operatorRegistry().registerOperator(); address vault = _newVault(eraDuration * 2, owner); @@ -418,19 +421,20 @@ contract MiddlewareTest is Test { uint256 slashIndex = _requestSlash(operator1, uint48(vm.getBlockTimestamp() - 1), vault1, 100, 0); uint48 vetoDeadline = _vetoDeadline(IVault(vault1).slasher(), slashIndex); + address slasher = IVault(vault1).slasher(); + // Try to execute slash after veto deadline vm.warp(vetoDeadline); vm.expectRevert(IVetoSlasher.VetoPeriodEnded.selector); - middleware.vetoShash(vault1, slashIndex); + IVetoSlasher(slasher).vetoSlash(slashIndex, new bytes(0)); // Veto slash vm.warp(vetoDeadline - 1); - middleware.vetoShash(vault1, slashIndex); + IVetoSlasher(slasher).vetoSlash(slashIndex, new bytes(0)); - // Try to execute slash after veto - vm.warp(vetoDeadline); + // Try to execute slash after veto is done vm.expectRevert(IVetoSlasher.SlashRequestCompleted.selector); - middleware.executeSlash(vault1, slashIndex); + IVetoSlasher(slasher).vetoSlash(slashIndex, new bytes(0)); } function test_slashExecutionUnregistredVault() external { From 861c22cb9fed6fbf4fc1e5483ced9ca2c698ccd9 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Fri, 8 Nov 2024 17:09:51 +0100 Subject: [PATCH 23/43] chore --- ethexe/contracts/foundry.toml | 2 +- ethexe/contracts/src/Middleware.sol | 6 +----- ethexe/contracts/test/Middleware.t.sol | 30 +++++++++----------------- 3 files changed, 12 insertions(+), 26 deletions(-) diff --git a/ethexe/contracts/foundry.toml b/ethexe/contracts/foundry.toml index 4b44a15a88b..f5cdbadb256 100644 --- a/ethexe/contracts/foundry.toml +++ b/ethexe/contracts/foundry.toml @@ -15,7 +15,7 @@ ignored_warnings_from = [ "lib/", ] # Enable new EVM codegen -via_ir = false +via_ir = true [rpc_endpoints] sepolia = "${SEPOLIA_RPC_URL}" diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index 1eaa535ad8d..0a0f4268bcf 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -29,7 +29,6 @@ contract Middleware { using MapWithTimeData for EnumerableMap.AddressToUintMap; using Subnetwork for address; - error ZeroVaultAddress(); error NotKnownVault(); error VaultWrongEpochDuration(); error UnknownCollateral(); @@ -165,10 +164,6 @@ contract Middleware { // TODO: support and check slasher // TODO: consider to use hints function registerVault(address vault) external { - if (vault == address(0)) { - revert ZeroVaultAddress(); - } - if (!IRegistry(VAULT_REGISTRY).isEntity(vault)) { revert NotKnownVault(); } @@ -319,6 +314,7 @@ contract Middleware { } // TODO: consider to use hints + // TODO: array of slashes function executeSlash(address vault, uint256 index) external _onlyRole(ROLE_SLASH_EXECUTOR) { if (!vaults.contains(vault)) { revert NotRegistredVault(); diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index ec063a9f2e1..e30e2168395 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -21,12 +21,12 @@ import {Middleware} from "../src/Middleware.sol"; import {WrappedVara} from "../src/WrappedVara.sol"; import {MapWithTimeData} from "../src/libraries/MapWithTimeData.sol"; +bytes32 constant REQUEST_SLASH_EVENT_SIGNATURE = + keccak256("RequestSlash(uint256,bytes32,address,uint256,uint48,uint48)"); + contract MiddlewareTest is Test { using MessageHashUtils for address; - bytes32 public constant REQUEST_SLASH_EVENT_SIGNATURE = - keccak256("RequestSlash(uint256,bytes32,address,uint256,uint48,uint48)"); - uint48 eraDuration = 1000; address public owner; POCBaseTest public sym; @@ -139,13 +139,9 @@ contract MiddlewareTest is Test { // Register vault middleware.registerVault(vault); - // Try to register vault with zero address - vm.expectRevert(abi.encodeWithSelector(Middleware.ZeroVaultAddress.selector)); - middleware.registerVault(address(0x0)); - // Try to register unknown vault vm.expectRevert(abi.encodeWithSelector(Middleware.NotKnownVault.selector)); - middleware.registerVault(address(0x1)); + middleware.registerVault(address(0xdead)); // Try to register vault with wrong epoch duration address vault2 = _newVault(eraDuration, owner); @@ -568,12 +564,6 @@ contract MiddlewareTest is Test { } } - function _setNetworkLimit(address vault, address operator, uint256 limit) private { - vm.startPrank(address(operator)); - IOperatorSpecificDelegator(IVault(vault).delegator()).setNetworkLimit(middleware.SUBNETWORK(), limit); - vm.stopPrank(); - } - function _newVault(uint48 epochDuration, address operator) private returns (address vault) { address[] memory networkLimitSetRoleHolders = new address[](1); networkLimitSetRoleHolders[0] = operator; @@ -581,7 +571,7 @@ contract MiddlewareTest is Test { (vault,,) = sym.vaultConfigurator().create( IVaultConfigurator.InitParams({ version: sym.vaultFactory().lastVersion(), - owner: owner, + owner: operator, vaultParams: abi.encode( IVault.InitParams({ collateral: address(wrappedVara), @@ -590,11 +580,11 @@ contract MiddlewareTest is Test { depositWhitelist: false, isDepositLimit: false, depositLimit: 0, - defaultAdminRoleHolder: owner, - depositWhitelistSetRoleHolder: owner, - depositorWhitelistRoleHolder: owner, - isDepositLimitSetRoleHolder: owner, - depositLimitSetRoleHolder: owner + defaultAdminRoleHolder: operator, + depositWhitelistSetRoleHolder: operator, + depositorWhitelistRoleHolder: operator, + isDepositLimitSetRoleHolder: operator, + depositLimitSetRoleHolder: operator }) ), delegatorIndex: 2, From a4686d059d468cf898dd1843fa733c77e67671ba Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Fri, 8 Nov 2024 18:00:58 +0100 Subject: [PATCH 24/43] fix after rebase --- ethexe/contracts/src/Middleware.sol | 2 -- 1 file changed, 2 deletions(-) diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index 0a0f4268bcf..44e0733b427 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -81,8 +81,6 @@ contract Middleware { uint96 public constant NETWORK_IDENTIFIER = 0; uint256 public constant MAX_RESOLVER_SET_EPOCHS_DELAY = 10; - uint96 public constant NETWORK_IDENTIFIER = 0; - uint48 public immutable ERA_DURATION; uint48 public immutable MIN_VETO_DURATION; uint48 public immutable GENESIS_TIMESTAMP; From 04a53b4d15865d91dbd8f9a71d166d65c2ff5599 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Mon, 11 Nov 2024 15:51:43 +0100 Subject: [PATCH 25/43] cammel case --- ethexe/contracts/src/Middleware.sol | 221 ++++++++++++++++--------- ethexe/contracts/test/Middleware.t.sol | 18 +- 2 files changed, 149 insertions(+), 90 deletions(-) diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index 44e0733b427..8b55b59308d 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -45,11 +45,13 @@ contract Middleware { error IncompatibleSlasherType(); error BurnerHookNotSupported(); error VetoDurationTooShort(); + error VetoDurationTooLong(); error IncompatibleVaultVersion(); error NotRegistredVault(); error NotRegistredOperator(); error RoleMismatch(); - error ResolverMismatch(address resolver); + error ResolverMismatch(); + error ResolverSetDelayTooLong(); struct VaultSlashData { address vault; @@ -62,9 +64,14 @@ contract Middleware { VaultSlashData[] vaults; } - struct MiddlewareConfig { + struct Config { uint48 eraDuration; + uint48 minVaultEpochDuration; + uint48 operatoraGracePeriod; + uint48 vaultGracePeriod; uint48 minVetoDuration; + uint48 minSlashExecutionDelay; + uint256 maxResolverSetEpochsDelay; address vaultRegistry; uint64 allowedVaultImplVersion; uint64 vetoSlasherImplType; @@ -79,62 +86,65 @@ contract Middleware { } uint96 public constant NETWORK_IDENTIFIER = 0; - uint256 public constant MAX_RESOLVER_SET_EPOCHS_DELAY = 10; - uint48 public immutable ERA_DURATION; - uint48 public immutable MIN_VETO_DURATION; - uint48 public immutable GENESIS_TIMESTAMP; - uint48 public immutable OPERATOR_GRACE_PERIOD; - uint48 public immutable VAULT_GRACE_PERIOD; - uint48 public immutable VAULT_MIN_EPOCH_DURATION; - - address public immutable VAULT_REGISTRY; - uint64 public immutable ALLOWED_VAULT_IMPL_VERSION; - uint64 public immutable VETO_SLASHER_IMPL_TYPE; - address public immutable OPERATOR_REGISTRY; - address public immutable NETWORK_OPT_IN; - address public immutable COLLATERAL; - bytes32 public immutable SUBNETWORK; - - address public immutable ROLE_SLASH_REQUESTER; - address public immutable ROLE_SLASH_EXECUTOR; - - /// @notice Resolver address for the veto slasher. - address public immutable VETO_RESOLVER; + uint48 public immutable eraDuration; + uint48 public immutable minVaultEpochDuration; + uint48 public immutable operatoraGracePeriod; + uint48 public immutable vaultGracePeriod; + uint48 public immutable minVetoDuration; + uint48 public immutable minSlashExecutionDelay; + uint256 public immutable maxResolverSetEpochsDelay; + address public immutable vaultRegistry; + uint64 public immutable allowedVaultImplVersion; + uint64 public immutable vetoSlasherImplType; + address public immutable operatorRegistry; + address public immutable networkRegistry; + address public immutable networkOptIn; + address public immutable middlewareService; + address public immutable collateral; + address public immutable roleSlashRequester; + address public immutable roleSlashExecutor; + address public immutable vetoResolver; + bytes32 public immutable subnetwork; EnumerableMap.AddressToUintMap private operators; EnumerableMap.AddressToUintMap private vaults; - constructor(MiddlewareConfig memory cfg) { - ERA_DURATION = cfg.eraDuration; - MIN_VETO_DURATION = cfg.minVetoDuration; - GENESIS_TIMESTAMP = Time.timestamp(); - OPERATOR_GRACE_PERIOD = 2 * ERA_DURATION; - VAULT_GRACE_PERIOD = 2 * ERA_DURATION; - VAULT_MIN_EPOCH_DURATION = 2 * ERA_DURATION; - VAULT_REGISTRY = cfg.vaultRegistry; - ALLOWED_VAULT_IMPL_VERSION = cfg.allowedVaultImplVersion; - VETO_SLASHER_IMPL_TYPE = cfg.vetoSlasherImplType; - OPERATOR_REGISTRY = cfg.operatorRegistry; - NETWORK_OPT_IN = cfg.networkOptIn; - COLLATERAL = cfg.collateral; - SUBNETWORK = address(this).subnetwork(NETWORK_IDENTIFIER); - - ROLE_SLASH_REQUESTER = cfg.roleSlashRequester; - ROLE_SLASH_EXECUTOR = cfg.roleSlashExecutor; - VETO_RESOLVER = cfg.vetoResolver; + constructor(Config memory cfg) { + _validateConfiguration(cfg); + + eraDuration = cfg.eraDuration; + minVaultEpochDuration = cfg.minVaultEpochDuration; + operatoraGracePeriod = cfg.operatoraGracePeriod; + vaultGracePeriod = cfg.vaultGracePeriod; + minVetoDuration = cfg.minVetoDuration; + minSlashExecutionDelay = cfg.minSlashExecutionDelay; + maxResolverSetEpochsDelay = cfg.maxResolverSetEpochsDelay; + vaultRegistry = cfg.vaultRegistry; + allowedVaultImplVersion = cfg.allowedVaultImplVersion; + vetoSlasherImplType = cfg.vetoSlasherImplType; + operatorRegistry = cfg.operatorRegistry; + networkRegistry = cfg.networkRegistry; + networkOptIn = cfg.networkOptIn; + middlewareService = cfg.middlewareService; + collateral = cfg.collateral; + roleSlashRequester = cfg.roleSlashRequester; + roleSlashExecutor = cfg.roleSlashExecutor; + vetoResolver = cfg.vetoResolver; + + subnetwork = address(this).subnetwork(NETWORK_IDENTIFIER); // Presently network and middleware are the same address - INetworkRegistry(cfg.networkRegistry).registerNetwork(); - INetworkMiddlewareService(cfg.middlewareService).setMiddleware(address(this)); + INetworkRegistry(networkRegistry).registerNetwork(); + INetworkMiddlewareService(middlewareService).setMiddleware(address(this)); } // TODO: Check that total stake is big enough function registerOperator() external { - if (!IRegistry(OPERATOR_REGISTRY).isEntity(msg.sender)) { + if (!IRegistry(operatorRegistry).isEntity(msg.sender)) { revert OperatorDoesNotExist(); } - if (!IOptInService(NETWORK_OPT_IN).isOptedIn(msg.sender, address(this))) { + if (!IOptInService(networkOptIn).isOptedIn(msg.sender, address(this))) { revert OperatorDoesNotOptIn(); } operators.append(msg.sender, 0); @@ -151,7 +161,7 @@ contract Middleware { function unregisterOperator(address operator) external { (, uint48 disabledTime) = operators.getTimes(operator); - if (disabledTime == 0 || Time.timestamp() < disabledTime + OPERATOR_GRACE_PERIOD) { + if (disabledTime == 0 || Time.timestamp() < disabledTime + operatoraGracePeriod) { revert OperatorGracePeriodNotPassed(); } @@ -162,50 +172,61 @@ contract Middleware { // TODO: support and check slasher // TODO: consider to use hints function registerVault(address vault) external { - if (!IRegistry(VAULT_REGISTRY).isEntity(vault)) { + if (!IRegistry(vaultRegistry).isEntity(vault)) { revert NotKnownVault(); } - if (IMigratableEntity(vault).version() != ALLOWED_VAULT_IMPL_VERSION) { + if (IMigratableEntity(vault).version() != allowedVaultImplVersion) { revert IncompatibleVaultVersion(); } - if (IVault(vault).epochDuration() < VAULT_MIN_EPOCH_DURATION) { + uint48 vaultEpochDuration = IVault(vault).epochDuration(); + if (vaultEpochDuration < minVaultEpochDuration) { revert VaultWrongEpochDuration(); } - if (IVault(vault).collateral() != COLLATERAL) { + if (IVault(vault).collateral() != collateral) { revert UnknownCollateral(); } if (!IVault(vault).isDelegatorInitialized()) { revert DelegatorNotInitialized(); } + + if (!IVault(vault).isSlasherInitialized()) { + revert SlasherNotInitialized(); + } + IBaseDelegator delegator = IBaseDelegator(IVault(vault).delegator()); - if (delegator.maxNetworkLimit(SUBNETWORK) != type(uint256).max) { + if (delegator.maxNetworkLimit(subnetwork) != type(uint256).max) { delegator.setMaxNetworkLimit(NETWORK_IDENTIFIER, type(uint256).max); } _delegatorHookCheck(IBaseDelegator(delegator).hook()); - if (!IVault(vault).isSlasherInitialized()) { - revert SlasherNotInitialized(); - } address slasher = IVault(vault).slasher(); - if (IEntity(slasher).TYPE() != VETO_SLASHER_IMPL_TYPE) { + if (IEntity(slasher).TYPE() != vetoSlasherImplType) { revert IncompatibleSlasherType(); } if (IVetoSlasher(slasher).isBurnerHook()) { revert BurnerHookNotSupported(); } - if (IVetoSlasher(slasher).vetoDuration() < MIN_VETO_DURATION) { + uint48 vetoDuration = IVetoSlasher(slasher).vetoDuration(); + if (vetoDuration < minVetoDuration) { revert VetoDurationTooShort(); } - address resolver = IVetoSlasher(slasher).resolver(SUBNETWORK, new bytes(0)); + if (vetoDuration + minSlashExecutionDelay > vaultEpochDuration) { + revert VetoDurationTooLong(); + } + if (IVetoSlasher(slasher).resolverSetEpochsDelay() > maxResolverSetEpochsDelay) { + revert ResolverSetDelayTooLong(); + } + + address resolver = IVetoSlasher(slasher).resolver(subnetwork, new bytes(0)); if (resolver == address(0)) { - IVetoSlasher(slasher).setResolver(NETWORK_IDENTIFIER, VETO_RESOLVER, new bytes(0)); - } else if (resolver != VETO_RESOLVER) { + IVetoSlasher(slasher).setResolver(NETWORK_IDENTIFIER, vetoResolver, new bytes(0)); + } else if (resolver != vetoResolver) { // TODO: consider how to support this case - revert ResolverMismatch(resolver); + revert ResolverMismatch(); } _burnerCheck(IVault(vault).burner()); @@ -236,7 +257,7 @@ contract Middleware { function unregisterVault(address vault) external { (, uint48 disabledTime) = vaults.getTimes(vault); - if (disabledTime == 0 || Time.timestamp() < disabledTime + VAULT_GRACE_PERIOD) { + if (disabledTime == 0 || Time.timestamp() < disabledTime + vaultGracePeriod) { revert VaultGracePeriodNotPassed(); } @@ -289,7 +310,7 @@ contract Middleware { } // TODO: consider to use hints - function requestSlash(SlashData[] calldata data) external _onlyRole(ROLE_SLASH_REQUESTER) { + function requestSlash(SlashData[] calldata data) external _onlyRole(roleSlashRequester) { for (uint256 i; i < data.length; ++i) { SlashData calldata slash_data = data[i]; if (!operators.contains(slash_data.operator)) { @@ -305,7 +326,7 @@ contract Middleware { address slasher = IVault(vault_data.vault).slasher(); IVetoSlasher(slasher).requestSlash( - SUBNETWORK, slash_data.operator, vault_data.amount, slash_data.ts, new bytes(0) + subnetwork, slash_data.operator, vault_data.amount, slash_data.ts, new bytes(0) ); } } @@ -313,7 +334,7 @@ contract Middleware { // TODO: consider to use hints // TODO: array of slashes - function executeSlash(address vault, uint256 index) external _onlyRole(ROLE_SLASH_EXECUTOR) { + function executeSlash(address vault, uint256 index) external _onlyRole(roleSlashExecutor) { if (!vaults.contains(vault)) { revert NotRegistredVault(); } @@ -330,7 +351,7 @@ contract Middleware { continue; } - stake += IBaseDelegator(IVault(vault).delegator()).stakeAt(SUBNETWORK, operator, ts, new bytes(0)); + stake += IBaseDelegator(IVault(vault).delegator()).stakeAt(subnetwork, operator, ts, new bytes(0)); } } @@ -338,21 +359,6 @@ contract Middleware { return enabledTime != 0 && enabledTime <= ts && (disabledTime == 0 || disabledTime >= ts); } - // Timestamp must be always in the past, but not too far, - // so that some operators or vaults can be already unregistered. - modifier _validTimestamp(uint48 ts) { - if (ts >= Time.timestamp()) { - revert IncorrectTimestamp(); - } - - uint48 gracePeriod = OPERATOR_GRACE_PERIOD < VAULT_GRACE_PERIOD ? OPERATOR_GRACE_PERIOD : VAULT_GRACE_PERIOD; - if (ts + gracePeriod <= Time.timestamp()) { - revert IncorrectTimestamp(); - } - - _; - } - // Supports only null hook for now function _delegatorHookCheck(address hook) private pure { if (hook != address(0)) { @@ -367,6 +373,61 @@ contract Middleware { } } + function _validateConfiguration(Config memory cfg) private pure { + require(cfg.eraDuration > 0, "Era duration cannot be zero"); + + // Middleware must support cases when election for next era is made before the start of the next era, + // so the min vaults epoch duration must be bigger than `eraDuration + electionDelay`. + // The election delay is less than or equal to the era duration, so limit `2 * eraDuration` is enough. + require( + cfg.minVaultEpochDuration >= 2 * cfg.eraDuration, "Min vaults epoch duration must be bigger than 2 eras" + ); + + // Operator grace period cannot be smaller than minimum vaults epoch duration. + // Otherwise, it would be impossible to do slash in the next era sometimes. + require( + cfg.operatoraGracePeriod >= cfg.minVaultEpochDuration, + "Operator grace period must be bigger than min vaults epoch duration" + ); + + // Vault grace period cannot be smaller than minimum vaults epoch duration. + // Otherwise, it would be impossible to do slash in the next era sometimes. + require( + cfg.vaultGracePeriod >= cfg.minVaultEpochDuration, + "Vault grace period must be bigger than min vaults epoch duration" + ); + + // Give some time for the resolvers to veto slashes. + require(cfg.minVetoDuration > 0, "Veto duration cannot be zero"); + + // Simbiotic guarantees that any veto slasher has veto duration less than vault epoch duration. + // But we also want to guaratie that there is some time to execute the slash. + require(cfg.minSlashExecutionDelay > 0, "Min slash execution delay cannot be zero"); + require( + cfg.minVetoDuration + cfg.minSlashExecutionDelay <= cfg.minVaultEpochDuration, + "Veto duration and slash execution delay must be less than ot equal to min vaults epoch duration" + ); + + // In order to be able to change resolver, we need to limit max delay in epochs. + // `3` - is minimal number of epochs, which is simbiotic veto slasher impl restrictions. + require(cfg.maxResolverSetEpochsDelay >= 3, "Resolver set epochs delay must be at least 3"); + } + + // Timestamp must be always in the past, but not too far, + // so that some operators or vaults can be already unregistered. + modifier _validTimestamp(uint48 ts) { + if (ts >= Time.timestamp()) { + revert IncorrectTimestamp(); + } + + uint48 gracePeriod = operatoraGracePeriod < vaultGracePeriod ? operatoraGracePeriod : vaultGracePeriod; + if (ts + gracePeriod <= Time.timestamp()) { + revert IncorrectTimestamp(); + } + + _; + } + modifier _onlyRole(address role) { if (msg.sender != role) { revert RoleMismatch(); diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index e30e2168395..b7d487dca41 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -48,9 +48,14 @@ contract MiddlewareTest is Test { wrappedVara.mint(owner, 1_000_000); - Middleware.MiddlewareConfig memory cfg = Middleware.MiddlewareConfig({ + Middleware.Config memory cfg = Middleware.Config({ eraDuration: eraDuration, + minVaultEpochDuration: eraDuration * 2, + operatoraGracePeriod: eraDuration * 2, + vaultGracePeriod: eraDuration * 2, minVetoDuration: eraDuration / 3, + minSlashExecutionDelay: eraDuration / 3, + maxResolverSetEpochsDelay: type(uint256).max, vaultRegistry: address(sym.vaultFactory()), allowedVaultImplVersion: sym.vaultFactory().lastVersion(), vetoSlasherImplType: 1, @@ -69,15 +74,8 @@ contract MiddlewareTest is Test { // TODO: sync with the latest version of the middleware function test_constructor() public view { - assertEq(uint256(middleware.ERA_DURATION()), eraDuration); - assertEq(uint256(middleware.GENESIS_TIMESTAMP()), Time.timestamp()); - assertEq(uint256(middleware.OPERATOR_GRACE_PERIOD()), eraDuration * 2); - assertEq(uint256(middleware.VAULT_GRACE_PERIOD()), eraDuration * 2); - assertEq(uint256(middleware.VAULT_MIN_EPOCH_DURATION()), eraDuration * 2); - assertEq(middleware.OPERATOR_REGISTRY(), address(sym.operatorRegistry())); - assertEq(middleware.COLLATERAL(), address(wrappedVara)); - sym.networkRegistry().isEntity(address(middleware)); + assertEq(sym.networkMiddlewareService().middleware(address(middleware)), address(middleware)); } // TODO: split to multiple tests @@ -557,7 +555,7 @@ contract MiddlewareTest is Test { // Set initial network limit IOperatorSpecificDelegator(IVault(vault).delegator()).setNetworkLimit( - middleware.SUBNETWORK(), type(uint256).max + middleware.subnetwork(), type(uint256).max ); vm.stopPrank(); From ce697ad3e8a8f708bfef5739aa0526e58194fd0c Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Mon, 11 Nov 2024 16:08:39 +0100 Subject: [PATCH 26/43] change arg to array in executeSlash --- ethexe/contracts/src/Middleware.sol | 30 ++++++++++++++------------ ethexe/contracts/test/Middleware.t.sol | 16 +++++++++----- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index 8b55b59308d..3b71c15c325 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -18,12 +18,12 @@ import {IMigratableEntity} from "symbiotic-core/src/interfaces/common/IMigratabl import {MapWithTimeData} from "./libraries/MapWithTimeData.sol"; -// TODO: use camelCase for immutable variables // TODO: document all functions and variables // TODO: implement election logic // TODO: implement forced operators removal // TODO: implement forced vaults removal // TODO: implement rewards distribution +// TODO: use hints for simbiotic calls contract Middleware { using EnumerableMap for EnumerableMap.AddressToUintMap; using MapWithTimeData for EnumerableMap.AddressToUintMap; @@ -64,6 +64,11 @@ contract Middleware { VaultSlashData[] vaults; } + struct SlashIdentifier { + address vault; + uint256 index; + } + struct Config { uint48 eraDuration; uint48 minVaultEpochDuration; @@ -169,8 +174,6 @@ contract Middleware { } // TODO: check vault has enough stake - // TODO: support and check slasher - // TODO: consider to use hints function registerVault(address vault) external { if (!IRegistry(vaultRegistry).isEntity(vault)) { revert NotKnownVault(); @@ -264,7 +267,6 @@ contract Middleware { vaults.remove(vault); } - // TODO: consider to append ability to use hints function getOperatorStakeAt(address operator, uint48 ts) external view @@ -279,7 +281,7 @@ contract Middleware { stake = _collectOperatorStakeFromVaultsAt(operator, ts); } - // TODO: consider to append ability to use hints + // TODO: change return siggnature function getActiveOperatorsStakeAt(uint48 ts) public view @@ -309,7 +311,6 @@ contract Middleware { } } - // TODO: consider to use hints function requestSlash(SlashData[] calldata data) external _onlyRole(roleSlashRequester) { for (uint256 i; i < data.length; ++i) { SlashData calldata slash_data = data[i]; @@ -332,15 +333,16 @@ contract Middleware { } } - // TODO: consider to use hints - // TODO: array of slashes - function executeSlash(address vault, uint256 index) external _onlyRole(roleSlashExecutor) { - if (!vaults.contains(vault)) { - revert NotRegistredVault(); - } + function executeSlash(SlashIdentifier[] calldata slashes) external _onlyRole(roleSlashExecutor) { + for (uint256 i; i < slashes.length; ++i) { + SlashIdentifier calldata slash = slashes[i]; - address slasher = IVault(vault).slasher(); - IVetoSlasher(slasher).executeSlash(index, new bytes(0)); + if (!vaults.contains(slash.vault)) { + revert NotRegistredVault(); + } + + IVetoSlasher(IVault(slash.vault).slasher()).executeSlash(slash.index, new bytes(0)); + } } function _collectOperatorStakeFromVaultsAt(address operator, uint48 ts) private view returns (uint256 stake) { diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index b7d487dca41..0ceb489adf8 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -303,11 +303,11 @@ contract MiddlewareTest is Test { // Try to execute slash before veto deadline vm.warp(vetoDeadline - 1); vm.expectRevert(IVetoSlasher.VetoPeriodNotEnded.selector); - middleware.executeSlash(vault1, slashIndex); + _executeSlash(vault1, slashIndex); // Execute slash when ready vm.warp(vetoDeadline); - middleware.executeSlash(vault1, slashIndex); + _executeSlash(vault1, slashIndex); // Check that operator1 stake is decreased vm.warp(vetoDeadline + 1); @@ -315,7 +315,7 @@ contract MiddlewareTest is Test { // Try to execute slash twice vm.expectRevert(IVetoSlasher.SlashRequestCompleted.selector); - middleware.executeSlash(vault1, slashIndex); + _executeSlash(vault1, slashIndex); } function test_slashRequestUnknownOperator() external { @@ -355,7 +355,7 @@ contract MiddlewareTest is Test { // Try to slash after slash period vm.warp(uint48(vm.getBlockTimestamp()) + IVault(vault1).epochDuration()); vm.expectRevert(IVetoSlasher.SlashPeriodEnded.selector); - middleware.executeSlash(vault1, slashIndex); + _executeSlash(vault1, slashIndex); } function test_slashOneOperatorTwoVaults() external { @@ -439,7 +439,13 @@ contract MiddlewareTest is Test { // Try to execute slash for unknown vault vm.expectRevert(Middleware.NotRegistredVault.selector); - middleware.executeSlash(address(0xdead), slashIndex); + _executeSlash(address(0xdead), slashIndex); + } + + function _executeSlash(address vault, uint256 index) private { + Middleware.SlashIdentifier[] memory slashes = new Middleware.SlashIdentifier[](1); + slashes[0] = Middleware.SlashIdentifier({vault: vault, index: index}); + middleware.executeSlash(slashes); } function _prepareTwoOperators() From 966be6433c4f2909707b5a3ac233d37198267ee2 Mon Sep 17 00:00:00 2001 From: Dmitry Novikov Date: Mon, 18 Nov 2024 18:05:10 +0400 Subject: [PATCH 27/43] refactor: router and stuff --- ethexe/contracts/README.md | 18 +- ethexe/contracts/script/Deployment.s.sol | 52 +- ethexe/contracts/script/upgrades/Router.s.sol | 6 + ethexe/contracts/src/IRouter.sol | 289 +++------ ethexe/contracts/src/Middleware.sol | 2 +- ethexe/contracts/src/Mirror.sol | 16 +- ethexe/contracts/src/MirrorProxy.sol | 2 +- ethexe/contracts/src/Router.sol | 560 +++++++----------- ethexe/contracts/src/libraries/Gear.sol | 200 +++++++ ethexe/contracts/test/Router.t.sol | 256 ++++---- ethexe/ethereum/Mirror.json | 2 +- ethexe/ethereum/MirrorProxy.json | 2 +- ethexe/ethereum/Router.json | 2 +- ethexe/ethereum/WrappedVara.json | 2 +- 14 files changed, 727 insertions(+), 682 deletions(-) create mode 100644 ethexe/contracts/src/libraries/Gear.sol diff --git a/ethexe/contracts/README.md b/ethexe/contracts/README.md index c8e6faf27f2..b9051725c0e 100644 --- a/ethexe/contracts/README.md +++ b/ethexe/contracts/README.md @@ -49,26 +49,26 @@ $ anvil ```shell $ source .env -$ forge script script/Deployment.s.sol:DeploymentScript --rpc-url $SEPOLIA_RPC_URL --broadcast --verify -vvvv -$ forge script script/Deployment.s.sol:DeploymentScript --rpc-url $HOLESKY_RPC_URL --broadcast --verify -vvvv +$ forge script script/Deployment.s.sol:DeploymentScript --slow --rpc-url $SEPOLIA_RPC_URL --broadcast --verify -vvvv +$ forge script script/Deployment.s.sol:DeploymentScript --slow --rpc-url $HOLESKY_RPC_URL --broadcast --verify -vvvv ``` ### Upgrade -> [!WARNING] +> [!WARNING] > Before you run upgrade scripts, edit `reinitialize` method depending on how you want to perform upgrade! ```shell $ source .env -$ forge script upgrades/Mirror.s.sol:MirrorScript --rpc-url $SEPOLIA_RPC_URL --broadcast --verify -vvvv -$ forge script upgrades/Mirror.s.sol:MirrorScript --rpc-url $HOLESKY_RPC_URL --broadcast --verify -vvvv +$ forge script upgrades/Mirror.s.sol:MirrorScript --slow --rpc-url $SEPOLIA_RPC_URL --broadcast --verify -vvvv +$ forge script upgrades/Mirror.s.sol:MirrorScript --slow --rpc-url $HOLESKY_RPC_URL --broadcast --verify -vvvv -$ forge script upgrades/Router.s.sol:RouterScript --rpc-url $SEPOLIA_RPC_URL --broadcast --verify -vvvv -$ forge script upgrades/Router.s.sol:RouterScript --rpc-url $HOLESKY_RPC_URL --broadcast --verify -vvvv +$ forge script upgrades/Router.s.sol:RouterScript --slow --rpc-url $SEPOLIA_RPC_URL --broadcast --verify -vvvv +$ forge script upgrades/Router.s.sol:RouterScript --slow --rpc-url $HOLESKY_RPC_URL --broadcast --verify -vvvv -$ forge script upgrades/WrappedVara.s.sol:WrappedVaraScript --rpc-url $SEPOLIA_RPC_URL --broadcast --verify -vvvv -$ forge script upgrades/WrappedVara.s.sol:WrappedVaraScript --rpc-url $HOLESKY_RPC_URL --broadcast --verify -vvvv +$ forge script upgrades/WrappedVara.s.sol:WrappedVaraScript --slow --rpc-url $SEPOLIA_RPC_URL --broadcast --verify -vvvv +$ forge script upgrades/WrappedVara.s.sol:WrappedVaraScript --slow --rpc-url $HOLESKY_RPC_URL --broadcast --verify -vvvv ``` ### Cast diff --git a/ethexe/contracts/script/Deployment.s.sol b/ethexe/contracts/script/Deployment.s.sol index b595cee8d0b..a02f2c357ea 100644 --- a/ethexe/contracts/script/Deployment.s.sol +++ b/ethexe/contracts/script/Deployment.s.sol @@ -1,14 +1,17 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.26; -import {Upgrades} from "openzeppelin-foundry-upgrades/Upgrades.sol"; -import {Script, console} from "forge-std/Script.sol"; import {Mirror} from "../src/Mirror.sol"; import {MirrorProxy} from "../src/MirrorProxy.sol"; import {Router} from "../src/Router.sol"; +import {Script, console} from "forge-std/Script.sol"; +import {Strings} from "@openzeppelin/contracts/utils/Strings.sol"; +import {Upgrades} from "openzeppelin-foundry-upgrades/Upgrades.sol"; import {WrappedVara} from "../src/WrappedVara.sol"; contract DeploymentScript is Script { + using Strings for uint160; + WrappedVara public wrappedVara; Router public router; Mirror public mirror; @@ -31,7 +34,6 @@ contract DeploymentScript is Script { address mirrorAddress = vm.computeCreateAddress(deployerAddress, vm.getNonce(deployerAddress) + 2); address mirrorProxyAddress = vm.computeCreateAddress(deployerAddress, vm.getNonce(deployerAddress) + 3); - address wrappedVaraAddress = address(wrappedVara); router = Router( Upgrades.deployTransparentProxy( @@ -39,7 +41,7 @@ contract DeploymentScript is Script { deployerAddress, abi.encodeCall( Router.initialize, - (deployerAddress, mirrorAddress, mirrorProxyAddress, wrappedVaraAddress, validatorsArray) + (deployerAddress, mirrorAddress, mirrorProxyAddress, address(wrappedVara), validatorsArray) ) ) ); @@ -48,10 +50,46 @@ contract DeploymentScript is Script { wrappedVara.approve(address(router), type(uint256).max); - vm.stopBroadcast(); + vm.roll(vm.getBlockNumber() + 1); + router.lookupGenesisHash(); - vm.assertEq(router.mirror(), address(mirror)); - vm.assertEq(router.mirrorProxy(), address(mirrorProxy)); + vm.assertEq(router.mirrorImpl(), address(mirror)); + vm.assertEq(router.mirrorProxyImpl(), address(mirrorProxy)); vm.assertEq(mirrorProxy.router(), address(router)); + vm.assertNotEq(router.genesisBlockHash(), bytes32(0)); + + vm.stopBroadcast(); + + printContractInfo("Router", address(router), Upgrades.getImplementationAddress(address(router))); + printContractInfo("WVara", address(wrappedVara), Upgrades.getImplementationAddress(address(wrappedVara))); + printContractInfo("Mirror", mirrorProxyAddress, mirrorAddress); + } + + function printContractInfo(string memory contractName, address contractAddress, address expectedImplementation) + public + pure + { + console.log("================================================================================================"); + console.log("[ CONTRACT ]", contractName); + console.log("[ ADDRESS ]", contractAddress); + console.log("[ IMPL ADDR ]", expectedImplementation); + console.log( + "[ PROXY VERIFICATION ] Click \"Is this a proxy?\" on Etherscan to be able read and write as proxy." + ); + console.log(" Alternatively, run the following curl request."); + console.log("```"); + console.log("curl --request POST 'https://api-holesky.etherscan.io/api' \\"); + console.log(" --header 'Content-Type: application/x-www-form-urlencoded' \\"); + console.log(" --data-urlencode 'module=contract' \\"); + console.log(" --data-urlencode 'action=verifyproxycontract' \\"); + console.log(string.concat(" --data-urlencode 'address=", uint160(contractAddress).toHexString(), "' \\")); + console.log( + string.concat( + " --data-urlencode 'expectedimplementation=", uint160(expectedImplementation).toHexString(), "' \\" + ) + ); + console.log(" --data-urlencode \"apikey=$ETHERSCAN_API_KEY\""); + console.log("```"); + console.log("================================================================================================"); } } diff --git a/ethexe/contracts/script/upgrades/Router.s.sol b/ethexe/contracts/script/upgrades/Router.s.sol index 0b9540179a0..e3ac101837b 100644 --- a/ethexe/contracts/script/upgrades/Router.s.sol +++ b/ethexe/contracts/script/upgrades/Router.s.sol @@ -3,6 +3,7 @@ pragma solidity ^0.8.26; import {Upgrades} from "openzeppelin-foundry-upgrades/Upgrades.sol"; import {Script, console} from "forge-std/Script.sol"; +import {IRouter} from "../../src/IRouter.sol"; import {Router} from "../../src/Router.sol"; contract RouterScript is Script { @@ -19,6 +20,11 @@ contract RouterScript is Script { reinitialize ? abi.encodeCall(Router.reinitialize, () /*Router.reinitialize arguments*/ ) : new bytes(0); Upgrades.upgradeProxy(routerAddress, "Router.sol", data); + if (reinitialize) { + vm.roll(vm.getBlockNumber() + 1); + IRouter(routerAddress).lookupGenesisHash(); + } + vm.stopBroadcast(); } } diff --git a/ethexe/contracts/src/IRouter.sol b/ethexe/contracts/src/IRouter.sol index 1b556770389..acb0d3dcc19 100644 --- a/ethexe/contracts/src/IRouter.sol +++ b/ethexe/contracts/src/IRouter.sol @@ -1,239 +1,118 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.26; -// TODO (breathx): sort here everything. -interface IRouter { - /* Storage related structures */ +import {Gear} from "./libraries/Gear.sol"; - /// @custom:storage-location erc7201:router.storage.Router +/// @title Gear.exe Router Interface +/// @notice The Router interface provides basic co-processor functionalities, such as WASM submission, program creation, and result settlement, acting as an authority for acknowledged programs, driven by validator signature verification. +/// @dev The Router serves as the primary entry point representing a co-processor instance. It emits two types of events: *informational* events, which are intended to notify external users of actions that have occurred within the co-processor, and *requesting* events, which are intended to request processing logic from validator nodes. +interface IRouter { + /// @custom:storage-location erc7201:router.storage.Router. struct Storage { - bytes32 genesisBlockHash; - address mirror; - address mirrorProxy; - address wrappedVara; - bytes32 lastBlockCommitmentHash; - uint48 lastBlockCommitmentTimestamp; - uint256 signingThresholdPercentage; - uint64 baseWeight; - uint128 valuePerWeight; - mapping(address => bool) validators; - address[] validatorsKeys; - mapping(bytes32 => CodeState) codes; - uint256 validatedCodesCount; - mapping(address => bytes32) programs; - uint256 programsCount; - } - - enum CodeState { - Unknown, - ValidationRequested, - Validated + /// @notice Genesis block information for this router. + /// @dev This identifies the co-processor instance. To allow interactions with the router, after initialization, someone must call `lookupGenesisHash()`. + Gear.GenesisBlockInfo genesisBlock; + /// @notice Information about the latest committed block. + /// @dev There is a guarantee that, for this block, validators have performed all necessary transitions. + Gear.CommittedBlockInfo latestCommittedBlock; + /// @notice Details of the related contracts' implementation. + Gear.AddressBook implAddresses; + /// @notice Parameters for validation and signature verification. + /// @dev This contains information about the validator set and the verification threshold for signatures. + Gear.ValidationSettings validationSettings; + /// @notice Computation parameters for programs processing. + /// @dev These parameters should be used for the operational logic of event and message handling on nodes. Any modifications will take effect in the next block. + Gear.ComputationSettings computeSettings; + /// @notice Gear protocol data related to this router instance. + /// @dev This contains information about the available codes and programs. + Gear.ProtocolData protocolData; } - /* Commitment related structures */ + /// @notice Emitted when all necessary state transitions have been applied and states have changed. + /// @dev This is an *informational* event, signaling that the block outcome has been committed. + /// @param hash The block hash that was "finalized" in relation to the necessary transitions. + event BlockCommitted(bytes32 hash); - struct CodeCommitment { - bytes32 id; - bool valid; - } - - struct BlockCommitment { - bytes32 blockHash; - uint48 blockTimestamp; - bytes32 prevCommitmentHash; - bytes32 predBlockHash; - StateTransition[] transitions; - } - - struct StateTransition { - address actorId; - bytes32 newStateHash; - address inheritor; - uint128 valueToReceive; - ValueClaim[] valueClaims; - OutgoingMessage[] messages; - } - - struct ValueClaim { - bytes32 messageId; - address destination; - uint128 value; - } - - struct OutgoingMessage { - bytes32 id; - address destination; - bytes payload; - uint128 value; - ReplyDetails replyDetails; - } - - struct ReplyDetails { - bytes32 to; - bytes4 code; - } - - /* Events section */ - - /** - * @dev Emitted when a new state transitions are applied. - * - * NOTE: It's event for USERS: - * it informs about new block outcome committed. - */ - event BlockCommitted(bytes32 blockHash); - - /** - * @dev Emitted when a new code validation request submitted. - * - * NOTE: It's event for NODES: - * it requires to download and validate code from blob. - */ - event CodeValidationRequested(bytes32 codeId, bytes32 blobTxHash); - - /** - * @dev Emitted when a code, previously requested to be validated, gets validated. - * - * NOTE: It's event for USERS: - * it informs about validation results of previously requested code. - */ + /// @notice Emitted when a code, previously requested for validation, receives validation results, so its CodeStatus changed. + /// @dev This is an *informational* event, signaling the results of code validation. + /// @param id The ID of the code that was validated. + /// @param valid The result of the validation: indicates whether the code ID can be used for program creation. event CodeGotValidated(bytes32 id, bool indexed valid); - // TODO (breathx): describe proposal of splitting init in two steps. - /** - * @dev Emitted when a new program created. - * - * NOTE: It's event for USERS: - * it informs about new program creation and it's availability on Ethereum. - * - * NOTE: It's event for NODES: - * it requires to create associated gear program in local storage. - */ - event ProgramCreated(address actorId, bytes32 indexed codeId); - - /** - * @dev Emitted when the validators set is changed. - * - * NOTE: It's event for USERS: - * it informs about validators rotation. - * - * NOTE: It's event for NODES: - * it requires to update authorities that sign outcomes. - */ - event ValidatorsSetChanged(); - - /** - * @dev Emitted when the storage slot is changed. - * - * NOTE: It's event for USERS: - * it informs about router being wiped and all programs and codes deletion. - * - * NOTE: It's event for NODES: - * it requires to clean the local storage. - */ + /// @notice Emitted when a new code validation request is submitted. + /// @dev This is a *requesting* event, signaling that validators need to download and validate the code from the transaction blob. + /// @param id The expected code ID of the applied WASM blob, represented as a Blake2 hash. + /// @param blobTxHash The transaction hash that contains the WASM blob. Set to zero if applied to the current transaction. + event CodeValidationRequested(bytes32 id, bytes32 blobTxHash); + + /// @notice Emitted when the computation settings have been changed. + /// @dev This is both an *informational* and *requesting* event, signaling that an authority decided to change the computation settings. Users and program authors may want to adjust their practices, while validators need to apply the changes internally starting from the next block. + /// @param threshold The amount of Gear gas initially allocated for free to allow the program to decide if it wants to process the incoming message. + /// @param wvaraPerSecond The amount of WVara to be charged from the program's execution balance per second of computation. + event ComputationSettingsChanged(uint64 threshold, uint128 wvaraPerSecond); + + /// @notice Emitted when a new program within the co-processor is created and is now available on-chain. + /// @dev This is both an *informational* and *requesting* event, signaling the creation of a new program and its Ethereum mirror. Validators need to initialize it with a zeroed hash state internally. + /// @param actor ID of the actor that was created. It is accessible inside the co-processor and on Ethereum by this identifier. + /// @param codeId The code ID of the WASM implementation of the created program. + event ProgramCreated(address actor, bytes32 indexed codeId); + + /// @notice Emitted when the router's storage slot has been changed. + /// @dev This is both an *informational* and *requesting* event, signaling that an authority decided to wipe the router state, rendering all previously existing codes and programs ineligible. Validators need to wipe their databases immediately. event StorageSlotChanged(); - /** - * @dev Emitted when the tx's base weight is changed. - * - * NOTE: It's event for USERS: - * it informs about new value of commission for each message sending. - * - * NOTE: It's event for NODES: - * it requires to update commission in programs execution parameters. - */ - event BaseWeightChanged(uint64 baseWeight); - - /** - * @dev Emitted when the value per executable weight is changed. - * - * NOTE: It's event for USERS: - * it informs about new conversion rate between weight and it's WVara price. - * - * NOTE: It's event for NODES: - * it requires to update conversion rate in programs execution parameters. - */ - event ValuePerWeightChanged(uint128 valuePerWeight); - - /* Functions section */ - - /* Operational functions */ - - function getStorageSlot() external view returns (bytes32); - - function setStorageSlot(string calldata namespace) external; + /// @notice Emitted when the election mechanism forces the validator set to be changed. + /// @dev This is an *informational* event, signaling that only new validators are now able to pass commitment signing verification. + event ValidatorsChanged(); + // # Views. function genesisBlockHash() external view returns (bytes32); + function latestCommittedBlockHash() external view returns (bytes32); - function lastBlockCommitmentHash() external view returns (bytes32); - - function lastBlockCommitmentTimestamp() external view returns (uint48); - + function mirrorImpl() external view returns (address); + function mirrorProxyImpl() external view returns (address); function wrappedVara() external view returns (address); - function mirrorProxy() external view returns (address); - - function mirror() external view returns (address); - - function setMirror(address mirror) external; - - /* Codes and programs observing functions */ - - function validatedCodesCount() external view returns (uint256); - - function codeState(bytes32 codeId) external view returns (CodeState); - - function programsCount() external view returns (uint256); - - /** - * @dev Returns bytes32(0) in case of inexistent program. - */ - function programCodeId(address program) external view returns (bytes32); - - /* Validators' set related functions */ - - function signingThresholdPercentage() external view returns (uint256); - - function validatorsThreshold() external view returns (uint256); - + function areValidators(address[] calldata validators) external view returns (bool); + function isValidator(address validator) external view returns (bool); + function signingThresholdPercentage() external view returns (uint16); function validatorsCount() external view returns (uint256); + function validatorsKeys() external view returns (address[] memory); + function validatorsThreshold() external view returns (uint256); - function validatorExists(address validator) external view returns (bool); - - function validators() external view returns (address[] memory); - - function updateValidators(address[] calldata validatorsAddressArray) external; - - /* Economic and token related functions */ - - function baseWeight() external view returns (uint64); - - function setBaseWeight(uint64 baseWeight) external; - - function valuePerWeight() external view returns (uint128); + function computeSettings() external view returns (Gear.ComputationSettings memory); - function setValuePerWeight(uint128 valuePerWeight) external; + function codeState(bytes32 codeId) external view returns (Gear.CodeState); + function codesStates(bytes32[] calldata codesIds) external view returns (Gear.CodeState[] memory); + function programCodeId(address programId) external view returns (bytes32); + function programsCodeIds(address[] calldata programsIds) external view returns (bytes32[] memory); + function programsCount() external view returns (uint256); + function validatedCodesCount() external view returns (uint256); - function baseFee() external view returns (uint128); + // # Owner calls. + function setMirror(address newMirror) external; - /* Primary Gear logic */ + // # Calls. + function lookupGenesisHash() external; + /// @dev CodeValidationRequested Emitted on success. function requestCodeValidation(bytes32 codeId, bytes32 blobTxHash) external; - + /// @dev ProgramCreated Emitted on success. function createProgram(bytes32 codeId, bytes32 salt, bytes calldata payload, uint128 value) external - payable returns (address); - + /// @dev ProgramCreated Emitted on success. function createProgramWithDecoder( - address decoderImplementation, + address decoderImpl, bytes32 codeId, bytes32 salt, bytes calldata payload, uint128 value - ) external payable returns (address); - - function commitCodes(CodeCommitment[] calldata codeCommitmentsArray, bytes[] calldata signatures) external; + ) external returns (address); - function commitBlocks(BlockCommitment[] calldata blockCommitmentsArray, bytes[] calldata signatures) external; + // # Validators calls. + /// @dev CodeGotValidated Emitted for each code in commitment. + function commitCodes(Gear.CodeCommitment[] calldata codeCommitments, bytes[] calldata signatures) external; + /// @dev BlockCommitted Emitted on success. Triggers multiple events for each corresponding mirror. + function commitBlocks(Gear.BlockCommitment[] calldata blockCommitments, bytes[] calldata signatures) external; } diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index 5d8f8febe09..af84f2ca125 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -204,7 +204,7 @@ contract Middleware { operatorIdx += 1; } - assembly { + assembly ("memory-safe") { mstore(activeOperators, operatorIdx) mstore(stakes, operatorIdx) } diff --git a/ethexe/contracts/src/Mirror.sol b/ethexe/contracts/src/Mirror.sol index c211d5b2f7d..68c85cce545 100644 --- a/ethexe/contracts/src/Mirror.sol +++ b/ethexe/contracts/src/Mirror.sol @@ -28,8 +28,7 @@ contract Mirror is IMirror { function sendMessage(bytes calldata _payload, uint128 _value) external payable returns (bytes32) { require(inheritor == address(0), "program is terminated"); - uint128 baseFee = IRouter(router()).baseFee(); - _retrieveValueToRouter(baseFee + _value); + _retrieveValueToRouter(_value); bytes32 id = keccak256(abi.encodePacked(address(this), nonce++)); @@ -41,8 +40,7 @@ contract Mirror is IMirror { function sendReply(bytes32 _repliedTo, bytes calldata _payload, uint128 _value) external payable { require(inheritor == address(0), "program is terminated"); - uint128 baseFee = IRouter(router()).baseFee(); - _retrieveValueToRouter(baseFee + _value); + _retrieveValueToRouter(_value); emit ReplyQueueingRequested(_repliedTo, _source(), _payload, _value); } @@ -176,13 +174,15 @@ contract Mirror is IMirror { } function _retrieveValueToRouter(uint128 _value) private { - address routerAddress = router(); + if (_value != 0) { + address routerAddress = router(); - IWrappedVara wrappedVara = IWrappedVara(IRouter(routerAddress).wrappedVara()); + IWrappedVara wrappedVara = IWrappedVara(IRouter(routerAddress).wrappedVara()); - bool success = wrappedVara.transferFrom(_source(), routerAddress, _value); + bool success = wrappedVara.transferFrom(_source(), routerAddress, _value); - require(success, "failed to retrieve WVara"); + require(success, "failed to retrieve WVara"); + } } function _sendValueTo(address destination, uint128 value) private { diff --git a/ethexe/contracts/src/MirrorProxy.sol b/ethexe/contracts/src/MirrorProxy.sol index 2a987fb3482..aeecba61f2e 100644 --- a/ethexe/contracts/src/MirrorProxy.sol +++ b/ethexe/contracts/src/MirrorProxy.sol @@ -19,6 +19,6 @@ contract MirrorProxy is IMirrorProxy, Proxy { } function _implementation() internal view virtual override returns (address) { - return IRouter(router).mirror(); + return IRouter(router).mirrorImpl(); } } diff --git a/ethexe/contracts/src/Router.sol b/ethexe/contracts/src/Router.sol index 41d0ecc9a81..a569284a080 100644 --- a/ethexe/contracts/src/Router.sol +++ b/ethexe/contracts/src/Router.sol @@ -4,19 +4,15 @@ pragma solidity ^0.8.26; import {StorageSlot} from "@openzeppelin/contracts/utils/StorageSlot.sol"; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol"; -import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; -import {MessageHashUtils} from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; import {ReentrancyGuardTransient} from "@openzeppelin/contracts/utils/ReentrancyGuardTransient.sol"; import {IRouter} from "./IRouter.sol"; import {IMirror} from "./IMirror.sol"; import {IWrappedVara} from "./IWrappedVara.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; +import {Gear} from "./libraries/Gear.sol"; contract Router is IRouter, OwnableUpgradeable, ReentrancyGuardTransient { - using ECDSA for bytes32; - using MessageHashUtils for address; - // keccak256(abi.encode(uint256(keccak256("router.storage.Slot")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant SLOT_STORAGE = 0x5c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000; @@ -26,515 +22,417 @@ contract Router is IRouter, OwnableUpgradeable, ReentrancyGuardTransient { } function initialize( - address initialOwner, + address _owner, address _mirror, address _mirrorProxy, address _wrappedVara, - address[] memory _validatorsKeys + address[] calldata _validatorsKeys ) public initializer { - __Ownable_init(initialOwner); + __Ownable_init(_owner); - setStorageSlot("router.storage.RouterV1"); - Storage storage router = _getStorage(); + _setStorageSlot("router.storage.RouterV1"); + Storage storage router = _router(); - router.genesisBlockHash = blockhash(block.number - 1); - router.mirror = _mirror; - router.mirrorProxy = _mirrorProxy; - router.wrappedVara = _wrappedVara; - router.signingThresholdPercentage = 6666; // 2/3 percentage (66.66%). - router.baseWeight = 2_500_000_000; - router.valuePerWeight = 10; - _setValidators(_validatorsKeys); + router.genesisBlock = Gear.newGenesis(); + router.implAddresses = Gear.AddressBook(_mirror, _mirrorProxy, _wrappedVara); + router.validationSettings.signingThresholdPercentage = Gear.SIGNING_THRESHOLD_PERCENTAGE; + _setValidators(router, _validatorsKeys); + router.computeSettings = Gear.defaultComputationSettings(); } function reinitialize() public onlyOwner reinitializer(2) { - Storage storage oldRouter = _getStorage(); - - address _mirror = oldRouter.mirror; - address _mirrorProxy = oldRouter.mirrorProxy; - address _wrappedVara = oldRouter.wrappedVara; - address[] memory _validatorsKeys = oldRouter.validatorsKeys; + Storage storage oldRouter = _router(); - setStorageSlot("router.storage.RouterV2"); - Storage storage router = _getStorage(); + _setStorageSlot("router.storage.RouterV2"); + Storage storage newRouter = _router(); - router.genesisBlockHash = blockhash(block.number - 1); - router.mirror = _mirror; - router.mirrorProxy = _mirrorProxy; - router.wrappedVara = _wrappedVara; - _setValidators(_validatorsKeys); - } + newRouter.genesisBlock = Gear.newGenesis(); + newRouter.implAddresses = oldRouter.implAddresses; - /* Operational functions */ + newRouter.validationSettings.signingThresholdPercentage = + oldRouter.validationSettings.signingThresholdPercentage; + _setValidators(newRouter, oldRouter.validationSettings.validatorsKeys); - function getStorageSlot() public view returns (bytes32) { - return StorageSlot.getBytes32Slot(SLOT_STORAGE).value; + newRouter.computeSettings = oldRouter.computeSettings; } - function setStorageSlot(string memory namespace) public onlyOwner { - bytes32 slot = keccak256(abi.encode(uint256(keccak256(bytes(namespace))) - 1)) & ~bytes32(uint256(0xff)); - - StorageSlot.getBytes32Slot(SLOT_STORAGE).value = slot; - - emit StorageSlotChanged(); + // # Views. + function genesisBlockHash() public view returns (bytes32) { + return _router().genesisBlock.hash; } - function genesisBlockHash() public view returns (bytes32) { - Storage storage router = _getStorage(); - return router.genesisBlockHash; + function latestCommittedBlockHash() public view returns (bytes32) { + return _router().latestCommittedBlock.hash; } - function lastBlockCommitmentHash() public view returns (bytes32) { - Storage storage router = _getStorage(); - return router.lastBlockCommitmentHash; + function mirrorImpl() public view returns (address) { + return _router().implAddresses.mirror; } - function lastBlockCommitmentTimestamp() public view returns (uint48) { - Storage storage router = _getStorage(); - return router.lastBlockCommitmentTimestamp; + function mirrorProxyImpl() public view returns (address) { + return _router().implAddresses.mirrorProxy; } function wrappedVara() public view returns (address) { - Storage storage router = _getStorage(); - return router.wrappedVara; + return _router().implAddresses.wrappedVara; } - function mirrorProxy() public view returns (address) { - Storage storage router = _getStorage(); - return router.mirrorProxy; + function areValidators(address[] calldata _validators) public view returns (bool) { + Storage storage router = _router(); + + for (uint256 i = 0; i < _validators.length; i++) { + if (!router.validationSettings.validators[_validators[i]]) { + return false; + } + } + + return true; } - function mirror() public view returns (address) { - Storage storage router = _getStorage(); - return router.mirror; + function isValidator(address _validator) public view returns (bool) { + return _router().validationSettings.validators[_validator]; } - function setMirror(address _mirror) external onlyOwner { - Storage storage router = _getStorage(); - router.mirror = _mirror; + function signingThresholdPercentage() public view returns (uint16) { + return _router().validationSettings.signingThresholdPercentage; } - /* Codes and programs observing functions */ + function validatorsCount() public view returns (uint256) { + return _router().validationSettings.validatorsKeys.length; + } - function validatedCodesCount() public view returns (uint256) { - Storage storage router = _getStorage(); - return router.validatedCodesCount; + function validatorsKeys() public view returns (address[] memory) { + return _router().validationSettings.validatorsKeys; } - function codeState(bytes32 codeId) public view returns (CodeState) { - Storage storage router = _getStorage(); - return router.codes[codeId]; + function validatorsThreshold() public view returns (uint256) { + return Gear.validatorsThresholdOf(_router().validationSettings); } - function programsCount() public view returns (uint256) { - Storage storage router = _getStorage(); - return router.programsCount; + function computeSettings() public view returns (Gear.ComputationSettings memory) { + return _router().computeSettings; } - function programCodeId(address program) public view returns (bytes32) { - Storage storage router = _getStorage(); - return router.programs[program]; + function codeState(bytes32 _codeId) public view returns (Gear.CodeState) { + return _router().protocolData.codes[_codeId]; } - /* Validators' set related functions */ + function codesStates(bytes32[] calldata _codesIds) public view returns (Gear.CodeState[] memory) { + Storage storage router = _router(); - function signingThresholdPercentage() public view returns (uint256) { - Storage storage router = _getStorage(); - return router.signingThresholdPercentage; - } + Gear.CodeState[] memory res = new Gear.CodeState[](_codesIds.length); - function validatorsThreshold() public view returns (uint256) { - // Dividing by 10000 to adjust for percentage - return (validatorsCount() * signingThresholdPercentage() + 9999) / 10000; - } + for (uint256 i = 0; i < _codesIds.length; i++) { + res[i] = router.protocolData.codes[_codesIds[i]]; + } - function validatorsCount() public view returns (uint256) { - Storage storage router = _getStorage(); - return router.validatorsKeys.length; + return res; } - function validatorExists(address validator) public view returns (bool) { - Storage storage router = _getStorage(); - return router.validators[validator]; + function programCodeId(address _programId) public view returns (bytes32) { + return _router().protocolData.programs[_programId]; } - function validators() public view returns (address[] memory) { - Storage storage router = _getStorage(); - return router.validatorsKeys; - } + function programsCodeIds(address[] calldata _programsIds) public view returns (bytes32[] memory) { + Storage storage router = _router(); - // TODO: replace `OnlyOwner` with `OnlyDAO` or smth. - function updateValidators(address[] calldata validatorsAddressArray) external onlyOwner { - _cleanValidators(); - _setValidators(validatorsAddressArray); + bytes32[] memory res = new bytes32[](_programsIds.length); - emit ValidatorsSetChanged(); - } - - /* Economic and token related functions */ + for (uint256 i = 0; i < _programsIds.length; i++) { + res[i] = router.protocolData.programs[_programsIds[i]]; + } - function baseWeight() public view returns (uint64) { - Storage storage router = _getStorage(); - return router.baseWeight; + return res; } - function setBaseWeight(uint64 _baseWeight) external onlyOwner { - Storage storage router = _getStorage(); - router.baseWeight = _baseWeight; + function programsCount() public view returns (uint256) { + return _router().protocolData.programsCount; + } - emit BaseWeightChanged(_baseWeight); + function validatedCodesCount() public view returns (uint256) { + return _router().protocolData.validatedCodesCount; } - function valuePerWeight() public view returns (uint128) { - Storage storage router = _getStorage(); - return router.valuePerWeight; + // Owner calls. + function setMirror(address newMirror) external onlyOwner { + _router().implAddresses.mirror = newMirror; } - function setValuePerWeight(uint128 _valuePerWeight) external onlyOwner { - Storage storage router = _getStorage(); - router.valuePerWeight = _valuePerWeight; + // # Calls. + function lookupGenesisHash() external { + Storage storage router = _router(); - emit ValuePerWeightChanged(_valuePerWeight); - } + require(router.genesisBlock.hash == bytes32(0), "genesis hash already set"); - function baseFee() public view returns (uint128) { - return uint128(baseWeight()) * valuePerWeight(); - } + bytes32 genesisHash = blockhash(router.genesisBlock.number); - /* Primary Gear logic */ + require(genesisHash != bytes32(0), "unable to lookup genesis hash"); - function requestCodeValidation(bytes32 codeId, bytes32 blobTxHash) external { - require(blobTxHash != 0 || blobhash(0) != 0, "blobTxHash couldn't be found"); + router.genesisBlock.hash = blockhash(router.genesisBlock.number); + } + + function requestCodeValidation(bytes32 _codeId, bytes32 _blobTxHash) external { + require(_blobTxHash != 0 || blobhash(0) != 0, "blob can't be found"); - Storage storage router = _getStorage(); + Storage storage router = _router(); + require(router.genesisBlock.hash != bytes32(0), "router genesis is zero; call `lookupGenesisHash()` first"); - require(router.codes[codeId] == CodeState.Unknown, "code with such id already requested or validated"); + require( + router.protocolData.codes[_codeId] == Gear.CodeState.Unknown, + "given code id is already on validation or validated" + ); - router.codes[codeId] = CodeState.ValidationRequested; + router.protocolData.codes[_codeId] = Gear.CodeState.ValidationRequested; - emit CodeValidationRequested(codeId, blobTxHash); + emit CodeValidationRequested(_codeId, _blobTxHash); } - function createProgram(bytes32 codeId, bytes32 salt, bytes calldata payload, uint128 _value) + function createProgram(bytes32 _codeId, bytes32 _salt, bytes calldata _payload, uint128 _value) external - payable returns (address) { - (address actorId, uint128 executableBalance) = _createProgramWithoutMessage(codeId, salt, _value); + (address actorId, uint128 executableBalance) = _createProgramWithoutMessage(_codeId, _salt, _value); - IMirror(actorId).initMessage(tx.origin, payload, _value, executableBalance); + IMirror(actorId).initMessage(msg.sender, _payload, _value, executableBalance); return actorId; } function createProgramWithDecoder( - address decoderImplementation, - bytes32 codeId, - bytes32 salt, - bytes calldata payload, + address _decoderImpl, + bytes32 _codeId, + bytes32 _salt, + bytes calldata _payload, uint128 _value - ) external payable returns (address) { - (address actorId, uint128 executableBalance) = _createProgramWithoutMessage(codeId, salt, _value); + ) external returns (address) { + (address actorId, uint128 executableBalance) = _createProgramWithoutMessage(_codeId, _salt, _value); IMirror mirrorInstance = IMirror(actorId); - mirrorInstance.createDecoder(decoderImplementation, keccak256(abi.encodePacked(codeId, salt))); + mirrorInstance.createDecoder(_decoderImpl, keccak256(abi.encodePacked(_codeId, _salt))); - mirrorInstance.initMessage(tx.origin, payload, _value, executableBalance); + mirrorInstance.initMessage(msg.sender, _payload, _value, executableBalance); return actorId; } - function commitCodes(CodeCommitment[] calldata codeCommitmentsArray, bytes[] calldata signatures) external { - Storage storage router = _getStorage(); - - bytes memory codeCommetmentsHashes; - - for (uint256 i = 0; i < codeCommitmentsArray.length; i++) { - CodeCommitment calldata codeCommitment = codeCommitmentsArray[i]; + // # Validators calls. + function commitCodes(Gear.CodeCommitment[] calldata _codeCommitments, bytes[] calldata _signatures) external { + Storage storage router = _router(); + require(router.genesisBlock.hash != bytes32(0), "router genesis is zero; call `lookupGenesisHash()` first"); - bytes32 codeCommitmentHash = _codeCommitmentHash(codeCommitment); + bytes memory codeCommitmentsHashes; - codeCommetmentsHashes = bytes.concat(codeCommetmentsHashes, codeCommitmentHash); + for (uint256 i = 0; i < _codeCommitments.length; i++) { + Gear.CodeCommitment calldata codeCommitment = _codeCommitments[i]; - bytes32 codeId = codeCommitment.id; - require(router.codes[codeId] == CodeState.ValidationRequested, "code should be requested for validation"); + require( + router.protocolData.codes[codeCommitment.id] == Gear.CodeState.ValidationRequested, + "code must be requested for validation to be committed" + ); if (codeCommitment.valid) { - router.codes[codeId] = CodeState.Validated; - router.validatedCodesCount++; - - emit CodeGotValidated(codeId, true); + router.protocolData.codes[codeCommitment.id] = Gear.CodeState.Validated; + router.protocolData.validatedCodesCount++; } else { - delete router.codes[codeId]; - - emit CodeGotValidated(codeId, false); + delete router.protocolData.codes[codeCommitment.id]; } + + emit CodeGotValidated(codeCommitment.id, codeCommitment.valid); + + codeCommitmentsHashes = bytes.concat(codeCommitmentsHashes, Gear.codeCommitmentHash(codeCommitment)); } - _validateSignatures(keccak256(codeCommetmentsHashes), signatures); + require( + Gear.validateSignatures(router, keccak256(codeCommitmentsHashes), _signatures), + "signatures verification failed" + ); } - function commitBlocks(BlockCommitment[] calldata blockCommitmentsArray, bytes[] calldata signatures) + function commitBlocks(Gear.BlockCommitment[] calldata _blockCommitments, bytes[] calldata _signatures) external nonReentrant { - bytes memory blockCommitmentsHashes; - - for (uint256 i = 0; i < blockCommitmentsArray.length; i++) { - BlockCommitment calldata blockCommitment = blockCommitmentsArray[i]; + Storage storage router = _router(); + require(router.genesisBlock.hash != bytes32(0), "router genesis is zero; call `lookupGenesisHash()` first"); - bytes32 blockCommitmentHash = _commitBlock(blockCommitment); + bytes memory blockCommitmentsHashes; - blockCommitmentsHashes = bytes.concat(blockCommitmentsHashes, blockCommitmentHash); + for (uint256 i = 0; i < _blockCommitments.length; i++) { + Gear.BlockCommitment calldata blockCommitment = _blockCommitments[i]; + blockCommitmentsHashes = bytes.concat(blockCommitmentsHashes, _commitBlock(router, blockCommitment)); } - _validateSignatures(keccak256(blockCommitmentsHashes), signatures); + require( + Gear.validateSignatures(router, keccak256(blockCommitmentsHashes), _signatures), + "signatures verification failed" + ); } /* Helper private functions */ - function _createProgramWithoutMessage(bytes32 codeId, bytes32 salt, uint128 _value) + function _createProgramWithoutMessage(bytes32 _codeId, bytes32 _salt, uint128 _value) private returns (address, uint128) { - Storage storage router = _getStorage(); + Storage storage router = _router(); + require(router.genesisBlock.hash != bytes32(0), "router genesis is zero; call `lookupGenesisHash()` first"); - require(router.codes[codeId] == CodeState.Validated, "code must be validated before program creation"); - - uint128 baseFeeValue = baseFee(); + require( + router.protocolData.codes[_codeId] == Gear.CodeState.Validated, + "code must be validated before program creation" + ); // By default get 10 WVara for executable balance. - uint128 executableBalance = uint128(10 ** IERC20Metadata(router.wrappedVara).decimals()); - - uint128 totalValue = baseFeeValue + executableBalance + _value; + uint128 executableBalance = 10_000_000_000_000; - _retrieveValue(totalValue); + _retrieveValue(router, executableBalance + _value); // Check for duplicate isn't necessary, because `Clones.cloneDeterministic` // reverts execution in case of address is already taken. - address actorId = Clones.cloneDeterministic(router.mirrorProxy, keccak256(abi.encodePacked(codeId, salt))); + address actorId = + Clones.cloneDeterministic(router.implAddresses.mirrorProxy, keccak256(abi.encodePacked(_codeId, _salt))); - router.programs[actorId] = codeId; - router.programsCount++; + router.protocolData.programs[actorId] = _codeId; + router.protocolData.programsCount++; - emit ProgramCreated(actorId, codeId); + emit ProgramCreated(actorId, _codeId); return (actorId, executableBalance); } - function _validateSignatures(bytes32 dataHash, bytes[] calldata signatures) private view { - Storage storage router = _getStorage(); - - uint256 threshold = validatorsThreshold(); - - bytes32 messageHash = address(this).toDataWithIntendedValidatorHash(abi.encodePacked(dataHash)); - uint256 validSignatures = 0; - - for (uint256 i = 0; i < signatures.length; i++) { - bytes calldata signature = signatures[i]; - - address validator = messageHash.recover(signature); - - if (router.validators[validator]) { - if (++validSignatures == threshold) { - break; - } - } else { - require(false, "incorrect signature"); - } - } - - require(validSignatures >= threshold, "not enough valid signatures"); - } - - function _commitBlock(BlockCommitment calldata blockCommitment) private returns (bytes32) { - Storage storage router = _getStorage(); - + function _commitBlock(Storage storage router, Gear.BlockCommitment calldata _blockCommitment) + private + returns (bytes32) + { require( - router.lastBlockCommitmentHash == blockCommitment.prevCommitmentHash, "invalid previous commitment hash" + router.latestCommittedBlock.hash == _blockCommitment.previousCommittedBlock, + "invalid previous committed block hash" ); - require(_isPredecessorHash(blockCommitment.predBlockHash), "allowed predecessor block not found"); + + require(Gear.blockIsPredecessor(_blockCommitment.predecessorBlock), "allowed predecessor block wasn't found"); /* * @dev SECURITY: this settlement should be performed before any other calls to avoid reentrancy. */ - router.lastBlockCommitmentHash = blockCommitment.blockHash; - router.lastBlockCommitmentTimestamp = blockCommitment.blockTimestamp; + router.latestCommittedBlock = Gear.CommittedBlockInfo(_blockCommitment.hash, _blockCommitment.timestamp); bytes memory transitionsHashes; - for (uint256 i = 0; i < blockCommitment.transitions.length; i++) { - StateTransition calldata stateTransition = blockCommitment.transitions[i]; - - bytes32 transitionHash = _doStateTransition(stateTransition); + for (uint256 i = 0; i < _blockCommitment.transitions.length; i++) { + Gear.StateTransition calldata stateTransition = _blockCommitment.transitions[i]; - transitionsHashes = bytes.concat(transitionsHashes, transitionHash); + transitionsHashes = bytes.concat(transitionsHashes, _doStateTransition(stateTransition)); } - emit BlockCommitted(blockCommitment.blockHash); + emit BlockCommitted(_blockCommitment.hash); - return _blockCommitmentHash( - blockCommitment.blockHash, - blockCommitment.blockTimestamp, - blockCommitment.prevCommitmentHash, - blockCommitment.predBlockHash, + return Gear.blockCommitmentHash( + _blockCommitment.hash, + _blockCommitment.timestamp, + _blockCommitment.previousCommittedBlock, + _blockCommitment.predecessorBlock, keccak256(transitionsHashes) ); } - function _isPredecessorHash(bytes32 hash) private view returns (bool) { - for (uint256 i = block.number - 1; i > 0; i--) { - bytes32 ret = blockhash(i); - if (ret == hash) { - return true; - } else if (ret == 0) { - break; - } - } - return false; - } + function _doStateTransition(Gear.StateTransition calldata _stateTransition) private returns (bytes32) { + Storage storage router = _router(); - function _doStateTransition(StateTransition calldata stateTransition) private returns (bytes32) { - Storage storage router = _getStorage(); - - require(router.programs[stateTransition.actorId] != 0, "couldn't perform transition for unknown program"); + require( + router.protocolData.programs[_stateTransition.actorId] != 0, + "couldn't perform transition for unknown program" + ); - IWrappedVara wrappedVaraActor = IWrappedVara(router.wrappedVara); - wrappedVaraActor.transfer(stateTransition.actorId, stateTransition.valueToReceive); + IWrappedVara wrappedVaraActor = IWrappedVara(router.implAddresses.wrappedVara); + wrappedVaraActor.transfer(_stateTransition.actorId, _stateTransition.valueToReceive); - IMirror mirrorActor = IMirror(stateTransition.actorId); + IMirror mirrorActor = IMirror(_stateTransition.actorId); bytes memory valueClaimsBytes; - for (uint256 i = 0; i < stateTransition.valueClaims.length; i++) { - ValueClaim calldata valueClaim = stateTransition.valueClaims[i]; + for (uint256 i = 0; i < _stateTransition.valueClaims.length; i++) { + Gear.ValueClaim calldata claim = _stateTransition.valueClaims[i]; - valueClaimsBytes = bytes.concat( - valueClaimsBytes, abi.encodePacked(valueClaim.messageId, valueClaim.destination, valueClaim.value) - ); + mirrorActor.valueClaimed(claim.messageId, claim.destination, claim.value); - mirrorActor.valueClaimed(valueClaim.messageId, valueClaim.destination, valueClaim.value); + valueClaimsBytes = bytes.concat(valueClaimsBytes, Gear.valueClaimBytes(claim)); } bytes memory messagesHashes; - for (uint256 i = 0; i < stateTransition.messages.length; i++) { - OutgoingMessage calldata outgoingMessage = stateTransition.messages[i]; - - messagesHashes = bytes.concat(messagesHashes, _outgoingMessageHash(outgoingMessage)); + for (uint256 i = 0; i < _stateTransition.messages.length; i++) { + Gear.Message calldata message = _stateTransition.messages[i]; - if (outgoingMessage.replyDetails.to == 0) { - mirrorActor.messageSent( - outgoingMessage.id, outgoingMessage.destination, outgoingMessage.payload, outgoingMessage.value - ); + if (message.replyDetails.to == 0) { + mirrorActor.messageSent(message.id, message.destination, message.payload, message.value); } else { mirrorActor.replySent( - outgoingMessage.destination, - outgoingMessage.payload, - outgoingMessage.value, - outgoingMessage.replyDetails.to, - outgoingMessage.replyDetails.code + message.destination, + message.payload, + message.value, + message.replyDetails.to, + message.replyDetails.code ); } + + messagesHashes = bytes.concat(messagesHashes, Gear.messageHash(message)); } - if (stateTransition.inheritor != address(0)) { - mirrorActor.setInheritor(stateTransition.inheritor); + if (_stateTransition.inheritor != address(0)) { + mirrorActor.setInheritor(_stateTransition.inheritor); } - mirrorActor.updateState(stateTransition.newStateHash); + mirrorActor.updateState(_stateTransition.newStateHash); - return _stateTransitionHash( - stateTransition.actorId, - stateTransition.newStateHash, - stateTransition.inheritor, - stateTransition.valueToReceive, + return Gear.stateTransitionHash( + _stateTransition.actorId, + _stateTransition.newStateHash, + _stateTransition.inheritor, + _stateTransition.valueToReceive, keccak256(valueClaimsBytes), keccak256(messagesHashes) ); } - function _blockCommitmentHash( - bytes32 blockHash, - uint48 blockTimestamp, - bytes32 prevCommitmentHash, - bytes32 predBlockHash, - bytes32 transitionsHashesHash - ) private pure returns (bytes32) { - return keccak256( - abi.encodePacked(blockHash, blockTimestamp, prevCommitmentHash, predBlockHash, transitionsHashesHash) - ); - } - - function _stateTransitionHash( - address actorId, - bytes32 newStateHash, - address inheritor, - uint128 valueToReceive, - bytes32 valueClaimsHash, - bytes32 messagesHashesHash - ) private pure returns (bytes32) { - return keccak256( - abi.encodePacked(actorId, newStateHash, inheritor, valueToReceive, valueClaimsHash, messagesHashesHash) - ); - } - - function _outgoingMessageHash(OutgoingMessage calldata outgoingMessage) private pure returns (bytes32) { - return keccak256( - abi.encodePacked( - outgoingMessage.id, - outgoingMessage.destination, - outgoingMessage.payload, - outgoingMessage.value, - outgoingMessage.replyDetails.to, - outgoingMessage.replyDetails.code - ) - ); - } - - function _codeCommitmentHash(CodeCommitment calldata codeCommitment) private pure returns (bytes32) { - return keccak256(abi.encodePacked(codeCommitment.id, codeCommitment.valid)); - } - - function _retrieveValue(uint128 _value) private { - Storage storage router = _getStorage(); - - bool success = IERC20(router.wrappedVara).transferFrom(tx.origin, address(this), _value); + function _retrieveValue(Storage storage router, uint128 _value) private { + bool success = IERC20(router.implAddresses.wrappedVara).transferFrom(msg.sender, address(this), _value); require(success, "failed to retrieve WVara"); } - function _cleanValidators() private { - Storage storage router = _getStorage(); + function _setValidators(Storage storage router, address[] memory _validatorsKeys) private { + require(router.validationSettings.validatorsKeys.length == 0, "remove previous validators first"); - for (uint256 i = 0; i < router.validatorsKeys.length; i++) { - address validator = router.validatorsKeys[i]; - delete router.validators[validator]; + for (uint256 i = 0; i < _validatorsKeys.length; i++) { + router.validationSettings.validators[_validatorsKeys[i]] = true; } - delete router.validatorsKeys; + router.validationSettings.validatorsKeys = _validatorsKeys; } - function _setValidators(address[] memory _validatorsArray) private { - Storage storage router = _getStorage(); - - require(router.validatorsKeys.length == 0, "previous validators weren't removed"); - - for (uint256 i = 0; i < _validatorsArray.length; i++) { - address validator = _validatorsArray[i]; - router.validators[validator] = true; + function _removeValidators(Storage storage router) private { + for (uint256 i = 0; i < router.validationSettings.validatorsKeys.length; i++) { + delete router.validationSettings.validators[router.validationSettings.validatorsKeys[i]]; } - router.validatorsKeys = _validatorsArray; + delete router.validationSettings.validatorsKeys; } - function _getStorage() private view returns (Storage storage router) { - bytes32 slot = getStorageSlot(); + function _router() private view returns (Storage storage router) { + bytes32 slot = _getStorageSlot(); - /// @solidity memory-safe-assembly - assembly { + assembly ("memory-safe") { router.slot := slot } } + + function _getStorageSlot() private view returns (bytes32) { + return StorageSlot.getBytes32Slot(SLOT_STORAGE).value; + } + + function _setStorageSlot(string memory namespace) private onlyOwner { + bytes32 slot = keccak256(abi.encode(uint256(keccak256(bytes(namespace))) - 1)) & ~bytes32(uint256(0xff)); + StorageSlot.getBytes32Slot(SLOT_STORAGE).value = slot; + } } diff --git a/ethexe/contracts/src/libraries/Gear.sol b/ethexe/contracts/src/libraries/Gear.sol new file mode 100644 index 00000000000..e38b7acf509 --- /dev/null +++ b/ethexe/contracts/src/libraries/Gear.sol @@ -0,0 +1,200 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.26; + +import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import {IRouter} from "../IRouter.sol"; +import {MessageHashUtils} from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; + +library Gear { + using ECDSA for bytes32; + using MessageHashUtils for address; + + // 2.5 * 10^9 of gear gas. + uint64 public constant COMPUTATION_THRESHOLD = 2_500_000_000; + + // 2/3; 66.(6)% of validators signatures to verify. + uint16 public constant SIGNING_THRESHOLD_PERCENTAGE = 6666; + + // 10 WVara tokens per compute second. + uint128 public constant WVARA_PER_SECOND = 10_000_000_000_000; + + struct AddressBook { + address mirror; + address mirrorProxy; + address wrappedVara; + } + + struct BlockCommitment { + bytes32 hash; + uint48 timestamp; + bytes32 previousCommittedBlock; + bytes32 predecessorBlock; + StateTransition[] transitions; + } + + struct CodeCommitment { + bytes32 id; + bool valid; + } + + enum CodeState { + Unknown, + ValidationRequested, + Validated + } + + struct CommittedBlockInfo { + bytes32 hash; + uint48 timestamp; + } + + struct ComputationSettings { + uint64 threshold; + uint128 wvaraPerSecond; + } + + struct GenesisBlockInfo { + bytes32 hash; + uint32 number; + uint48 timestamp; + } + + struct Message { + bytes32 id; + address destination; + bytes payload; + uint128 value; + ReplyDetails replyDetails; + } + + struct ProtocolData { + mapping(bytes32 => CodeState) codes; + mapping(address => bytes32) programs; + uint256 programsCount; + uint256 validatedCodesCount; + } + + struct ReplyDetails { + bytes32 to; + bytes4 code; + } + + struct StateTransition { + address actorId; + bytes32 newStateHash; + address inheritor; + uint128 valueToReceive; + ValueClaim[] valueClaims; + Message[] messages; + } + + struct ValidationSettings { + uint16 signingThresholdPercentage; + // TODO: replace with one single pubkey and validators amount. + mapping(address => bool) validators; + address[] validatorsKeys; + } + + struct ValueClaim { + bytes32 messageId; + address destination; + uint128 value; + } + + function blockCommitmentHash( + bytes32 hash, + uint48 timestamp, + bytes32 previousCommittedBlock, + bytes32 predecessorBlock, + bytes32 transitionsHashesHash + ) internal pure returns (bytes32) { + return keccak256( + abi.encodePacked(hash, timestamp, previousCommittedBlock, predecessorBlock, transitionsHashesHash) + ); + } + + function blockIsPredecessor(bytes32 hash) internal view returns (bool) { + for (uint256 i = block.number - 1; i > 0; i--) { + bytes32 ret = blockhash(i); + if (ret == hash) { + return true; + } else if (ret == 0) { + break; + } + } + + return false; + } + + function codeCommitmentHash(CodeCommitment calldata codeCommitment) internal pure returns (bytes32) { + return keccak256(abi.encodePacked(codeCommitment.id, codeCommitment.valid)); + } + + function defaultComputationSettings() internal pure returns (ComputationSettings memory) { + return ComputationSettings(COMPUTATION_THRESHOLD, WVARA_PER_SECOND); + } + + function messageHash(Message memory message) internal pure returns (bytes32) { + return keccak256( + abi.encodePacked( + message.id, + message.destination, + message.payload, + message.value, + message.replyDetails.to, + message.replyDetails.code + ) + ); + } + + function newGenesis() internal view returns (GenesisBlockInfo memory) { + return GenesisBlockInfo(bytes32(0), uint32(block.number), uint48(block.timestamp)); + } + + function stateTransitionHash( + address actor, + bytes32 newStateHash, + address inheritor, + uint128 valueToReceive, + bytes32 valueClaimsHash, + bytes32 messagesHashesHash + ) internal pure returns (bytes32) { + return keccak256( + abi.encodePacked(actor, newStateHash, inheritor, valueToReceive, valueClaimsHash, messagesHashesHash) + ); + } + + function validateSignatures(IRouter.Storage storage router, bytes32 _dataHash, bytes[] calldata _signatures) + internal + view + returns (bool) + { + uint256 threshold = validatorsThresholdOf(router.validationSettings); + + bytes32 msgHash = address(this).toDataWithIntendedValidatorHash(abi.encodePacked(_dataHash)); + uint256 validSignatures = 0; + + for (uint256 i = 0; i < _signatures.length; i++) { + bytes calldata signature = _signatures[i]; + + address validator = msgHash.recover(signature); + + if (router.validationSettings.validators[validator]) { + if (++validSignatures == threshold) { + return true; + } + } + } + + return false; + } + + function validatorsThresholdOf(ValidationSettings storage settings) internal view returns (uint256) { + // Dividing by 10000 to adjust for percentage + return (settings.validatorsKeys.length * uint256(settings.signingThresholdPercentage) + 9999) / 10000; + } + + function valueClaimBytes(ValueClaim memory claim) internal pure returns (bytes memory) { + return abi.encodePacked(claim.messageId, claim.destination, claim.value); + } +} diff --git a/ethexe/contracts/test/Router.t.sol b/ethexe/contracts/test/Router.t.sol index 5e26291d0f6..16399e24763 100644 --- a/ethexe/contracts/test/Router.t.sol +++ b/ethexe/contracts/test/Router.t.sol @@ -8,102 +8,139 @@ import {IMirror, Mirror} from "../src/Mirror.sol"; import {MirrorProxy} from "../src/MirrorProxy.sol"; import {IRouter, Router} from "../src/Router.sol"; import {WrappedVara} from "../src/WrappedVara.sol"; +import {Gear} from "../src/libraries/Gear.sol"; contract RouterTest is Test { using MessageHashUtils for address; - address immutable deployerAddress = 0x116B4369a90d2E9DA6BD7a924A23B164E10f6FE9; + address immutable deployer = 0x116B4369a90d2E9DA6BD7a924A23B164E10f6FE9; - address immutable validatorPublicKey_1 = 0x45D6536E3D4AdC8f4e13c5c4aA54bE968C55Abf1; - uint256 immutable validatorPrivateKey_1 = 0x32816f851b9cc71c4eb956214ded8cf481f7af66c125d1fb9deae366ae4f13a6; + address immutable alicePublic = 0x45D6536E3D4AdC8f4e13c5c4aA54bE968C55Abf1; + uint256 immutable alicePrivate = 0x32816f851b9cc71c4eb956214ded8cf481f7af66c125d1fb9deae366ae4f13a6; - address[] public validatorsArray; + address immutable bobPublic = 0xeFDa593324697918773069E0226dAD49d702f4D8; + uint256 immutable bobPrivate = 0x068cc4910d9f5aae82f66d926757fde55a7d2e72b25b2a243606e5147712a450; + + address immutable charliePublic = 0x84de3f115eC548A32CcC9464D14376f888ab49e1; + uint256 immutable charliePrivate = 0xa3f79c90a74fd984fd9c2a9c4286c53ad5ac38e32123e06720e9211566378bc4; + + address[] public validatorsPublicKeys; uint256[] public validatorsPrivateKeys; - WrappedVara public wrappedVara; Router public router; - Mirror public mirror; - MirrorProxy public mirrorProxy; function setUp() public { - validatorsArray.push(validatorPublicKey_1); - validatorsPrivateKeys.push(validatorPrivateKey_1); + validatorsPublicKeys.push(alicePublic); + validatorsPublicKeys.push(bobPublic); + validatorsPublicKeys.push(charliePublic); + + validatorsPrivateKeys.push(alicePrivate); + validatorsPrivateKeys.push(bobPrivate); + validatorsPrivateKeys.push(charliePrivate); - startPrank(deployerAddress); + startPrank(deployer); - wrappedVara = WrappedVara( + WrappedVara wrappedVara = WrappedVara( Upgrades.deployTransparentProxy( - "WrappedVara.sol", deployerAddress, abi.encodeCall(WrappedVara.initialize, (deployerAddress)) + "WrappedVara.sol", deployer, abi.encodeCall(WrappedVara.initialize, (deployer)) ) ); - address wrappedVaraAddress = address(wrappedVara); - address mirrorAddress = vm.computeCreateAddress(deployerAddress, vm.getNonce(deployerAddress) + 2); - address mirrorProxyAddress = vm.computeCreateAddress(deployerAddress, vm.getNonce(deployerAddress) + 3); + address mirrorAddress = vm.computeCreateAddress(deployer, vm.getNonce(deployer) + 2); + address mirrorProxyAddress = vm.computeCreateAddress(deployer, vm.getNonce(deployer) + 3); router = Router( Upgrades.deployTransparentProxy( "Router.sol", - deployerAddress, + deployer, abi.encodeCall( Router.initialize, - (deployerAddress, mirrorAddress, mirrorProxyAddress, wrappedVaraAddress, validatorsArray) + (deployer, mirrorAddress, mirrorProxyAddress, address(wrappedVara), validatorsPublicKeys) ) ) ); - mirror = new Mirror(); - mirrorProxy = new MirrorProxy(address(router)); + + vm.roll(block.number + 1); + + router.lookupGenesisHash(); wrappedVara.approve(address(router), type(uint256).max); - assertEq(router.mirror(), address(mirror)); - assertEq(router.mirrorProxy(), address(mirrorProxy)); + Mirror mirror = new Mirror(); + + MirrorProxy mirrorProxy = new MirrorProxy(address(router)); assertEq(mirrorProxy.router(), address(router)); - assertEq(router.validators(), validatorsArray); - assert(router.validatorExists(validatorPublicKey_1)); + assertEq(router.mirrorImpl(), address(mirror)); + assertEq(router.mirrorProxyImpl(), address(mirrorProxy)); + assertEq(router.validatorsKeys(), validatorsPublicKeys); + assertEq(router.signingThresholdPercentage(), 6666); + + assert(router.areValidators(validatorsPublicKeys)); } function test_ping() public { - startPrank(deployerAddress); + startPrank(deployer); bytes32 codeId = bytes32(uint256(1)); bytes32 blobTxHash = bytes32(uint256(2)); router.requestCodeValidation(codeId, blobTxHash); - IRouter.CodeCommitment[] memory codeCommitmentsArray = new IRouter.CodeCommitment[](1); - codeCommitmentsArray[0] = IRouter.CodeCommitment(codeId, true); - - commitCodes(codeCommitmentsArray); + Gear.CodeCommitment[] memory codeCommitments = new Gear.CodeCommitment[](1); + codeCommitments[0] = Gear.CodeCommitment(codeId, true); - address actorId = router.createProgram(codeId, "salt", "PING", 1_000_000_000); - IMirror deployedProgram = IMirror(actorId); + assertEq(router.validatorsKeys().length, 3); + assertEq(router.validatorsThreshold(), 2); - assertEq(deployedProgram.router(), address(router)); - assertEq(deployedProgram.stateHash(), 0); - assertEq(deployedProgram.inheritor(), address(0)); + router.commitCodes(codeCommitments, _signCodeCommitments(codeCommitments)); - vm.roll(100); - - // TODO (breathx): add test on this. - IRouter.ValueClaim[] memory valueClaims = new IRouter.ValueClaim[](0); + address actorId = router.createProgram(codeId, "salt", "PING", 1_000_000_000); + IMirror actor = IMirror(actorId); + + assertEq(actor.router(), address(router)); + assertEq(actor.stateHash(), 0); + assertEq(actor.inheritor(), address(0)); + + vm.roll(block.number + 1); + + Gear.Message[] memory messages = new Gear.Message[](1); + messages[0] = Gear.Message( + 0, // message id + deployer, // destination + "PONG", // payload + 0, // value + Gear.ReplyDetails( + 0, // reply to + 0 // reply code + ) + ); - IRouter.OutgoingMessage[] memory outgoingMessages = new IRouter.OutgoingMessage[](1); - outgoingMessages[0] = IRouter.OutgoingMessage(0, deployerAddress, "PONG", 0, IRouter.ReplyDetails(0, 0)); + Gear.StateTransition[] memory transitions = new Gear.StateTransition[](1); + transitions[0] = Gear.StateTransition( + actorId, // actor id + bytes32(uint256(42)), // new state hash + address(0), // inheritor + uint128(0), // value to recieve + new Gear.ValueClaim[](0), // value claims + messages // messages + ); - IRouter.StateTransition[] memory transitionsArray = new IRouter.StateTransition[](1); - IRouter.BlockCommitment[] memory blockCommitmentsArray = new IRouter.BlockCommitment[](1); - transitionsArray[0] = - IRouter.StateTransition(actorId, bytes32(uint256(1)), address(0), 0, valueClaims, outgoingMessages); - blockCommitmentsArray[0] = IRouter.BlockCommitment( - bytes32(uint256(1)), uint48(0), bytes32(uint256(0)), blockhash(block.number - 1), transitionsArray + Gear.BlockCommitment[] memory blockCommitments = new Gear.BlockCommitment[](1); + blockCommitments[0] = Gear.BlockCommitment( + bytes32(uint256(1)), // block hash + uint48(0), // block timestamp + bytes32(uint256(0)), // previous committed block + blockhash(block.number - 1), // predecessor block + transitions // transitions ); - commitBlocks(blockCommitmentsArray); + router.commitBlocks(blockCommitments, _signBlockCommitments(blockCommitments)); - assertEq(deployedProgram.stateHash(), bytes32(uint256(1))); - assertEq(deployedProgram.nonce(), 1); + assertEq(router.latestCommittedBlockHash(), bytes32(uint256(1))); + + assertEq(actor.stateHash(), bytes32(uint256(42))); + assertEq(actor.nonce(), uint256(1)); } /* helper functions */ @@ -112,68 +149,36 @@ contract RouterTest is Test { vm.startPrank(msgSender, msgSender); } - function commitCodes(IRouter.CodeCommitment[] memory codeCommitmentsArray) private { - bytes memory codesBytes; - - for (uint256 i = 0; i < codeCommitmentsArray.length; i++) { - IRouter.CodeCommitment memory codeCommitment = codeCommitmentsArray[i]; - codesBytes = bytes.concat(codesBytes, keccak256(abi.encodePacked(codeCommitment.id, codeCommitment.valid))); - } - - router.commitCodes(codeCommitmentsArray, createSignatures(codesBytes)); - } - - function commitBlocks(IRouter.BlockCommitment[] memory commitments) private { - bytes memory message; - - for (uint256 i = 0; i < commitments.length; i++) { - IRouter.BlockCommitment memory commitment = commitments[i]; - message = bytes.concat(message, commitBlock(commitment)); - } - - router.commitBlocks(commitments, createSignatures(message)); - } - - function commitBlock(IRouter.BlockCommitment memory commitment) private pure returns (bytes32) { - bytes memory transitionsHashesBytes; + function _signBlockCommitments(Gear.BlockCommitment[] memory blockCommitments) + private + view + returns (bytes[] memory) + { + bytes memory blockCommitmentsBytes; - for (uint256 i = 0; i < commitment.transitions.length; i++) { - IRouter.StateTransition memory transition = commitment.transitions[i]; + for (uint256 i = 0; i < blockCommitments.length; i++) { + Gear.BlockCommitment memory blockCommitment = blockCommitments[i]; - bytes memory valueClaimsBytes; + bytes memory transitionsHashesBytes; - for (uint256 j = 0; j < transition.valueClaims.length; j++) { - IRouter.ValueClaim memory valueClaim = transition.valueClaims[j]; + for (uint256 j = 0; j < blockCommitment.transitions.length; j++) { + Gear.StateTransition memory transition = blockCommitment.transitions[j]; - valueClaimsBytes = bytes.concat( - valueClaimsBytes, abi.encodePacked(valueClaim.messageId, valueClaim.destination, valueClaim.value) - ); - } + bytes memory valueClaimsBytes; + for (uint256 k = 0; k < transition.valueClaims.length; k++) { + Gear.ValueClaim memory claim = transition.valueClaims[k]; + valueClaimsBytes = bytes.concat(valueClaimsBytes, Gear.valueClaimBytes(claim)); + } - bytes memory messagesHashesBytes; - - for (uint256 j = 0; j < transition.messages.length; j++) { - IRouter.OutgoingMessage memory outgoingMessage = transition.messages[j]; - - messagesHashesBytes = bytes.concat( - messagesHashesBytes, - keccak256( - abi.encodePacked( - outgoingMessage.id, - outgoingMessage.destination, - outgoingMessage.payload, - outgoingMessage.value, - outgoingMessage.replyDetails.to, - outgoingMessage.replyDetails.code - ) - ) - ); - } + bytes memory messagesHashesBytes; + for (uint256 k = 0; k < transition.messages.length; k++) { + Gear.Message memory message = transition.messages[k]; + messagesHashesBytes = bytes.concat(messagesHashesBytes, Gear.messageHash(message)); + } - transitionsHashesBytes = bytes.concat( - transitionsHashesBytes, - keccak256( - abi.encodePacked( + transitionsHashesBytes = bytes.concat( + transitionsHashesBytes, + Gear.stateTransitionHash( transition.actorId, transition.newStateHash, transition.inheritor, @@ -181,28 +186,47 @@ contract RouterTest is Test { keccak256(valueClaimsBytes), keccak256(messagesHashesBytes) ) + ); + } + + blockCommitmentsBytes = bytes.concat( + blockCommitmentsBytes, + Gear.blockCommitmentHash( + blockCommitment.hash, + blockCommitment.timestamp, + blockCommitment.previousCommittedBlock, + blockCommitment.predecessorBlock, + keccak256(transitionsHashesBytes) ) ); } - return keccak256( - abi.encodePacked( - commitment.blockHash, - commitment.blockTimestamp, - commitment.prevCommitmentHash, - commitment.predBlockHash, - keccak256(transitionsHashesBytes) - ) - ); + return _signBytes(blockCommitmentsBytes); } - function createSignatures(bytes memory message) private view returns (bytes[] memory) { + function _signCodeCommitments(Gear.CodeCommitment[] memory codeCommitments) private view returns (bytes[] memory) { + bytes memory codeCommitmentsBytes; + + for (uint256 i = 0; i < codeCommitments.length; i++) { + Gear.CodeCommitment memory codeCommitment = codeCommitments[i]; + + codeCommitmentsBytes = + bytes.concat(codeCommitmentsBytes, keccak256(abi.encodePacked(codeCommitment.id, codeCommitment.valid))); + } + + return _signBytes(codeCommitmentsBytes); + } + + function _signBytes(bytes memory message) private view returns (bytes[] memory) { bytes[] memory signatures = new bytes[](validatorsPrivateKeys.length); - bytes32 messageHash = address(router).toDataWithIntendedValidatorHash(abi.encodePacked(keccak256(message))); + + bytes32 msgHash = address(router).toDataWithIntendedValidatorHash(abi.encodePacked(keccak256(message))); for (uint256 i = 0; i < validatorsPrivateKeys.length; i++) { uint256 validatorPrivateKey = validatorsPrivateKeys[i]; - (uint8 v, bytes32 r, bytes32 s) = vm.sign(validatorPrivateKey, messageHash); + + (uint8 v, bytes32 r, bytes32 s) = vm.sign(validatorPrivateKey, msgHash); + signatures[i] = abi.encodePacked(r, s, v); } diff --git a/ethexe/ethereum/Mirror.json b/ethexe/ethereum/Mirror.json index efd3fd07f4e..ceb28844bd2 100644 --- a/ethexe/ethereum/Mirror.json +++ b/ethexe/ethereum/Mirror.json @@ -1 +1 @@ -{"abi":[{"type":"function","name":"claimValue","inputs":[{"name":"_claimedId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"createDecoder","inputs":[{"name":"implementation","type":"address","internalType":"address"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"decoder","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"executableBalanceTopUp","inputs":[{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"inheritor","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"initMessage","inputs":[{"name":"source","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"executableBalance","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"messageSent","inputs":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"nonce","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"replySent","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"replyTo","type":"bytes32","internalType":"bytes32"},{"name":"replyCode","type":"bytes4","internalType":"bytes4"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"router","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"sendMessage","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"payable"},{"type":"function","name":"sendReply","inputs":[{"name":"_repliedTo","type":"bytes32","internalType":"bytes32"},{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"sendValueToInheritor","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setInheritor","inputs":[{"name":"_inheritor","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stateHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"updateState","inputs":[{"name":"newStateHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"valueClaimed","inputs":[{"name":"claimedId","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"ExecutableBalanceTopUpRequested","inputs":[{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Message","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destination","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"MessageQueueingRequested","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Reply","inputs":[{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"},{"name":"replyTo","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"replyCode","type":"bytes4","indexed":true,"internalType":"bytes4"}],"anonymous":false},{"type":"event","name":"ReplyQueueingRequested","inputs":[{"name":"repliedTo","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"StateChanged","inputs":[{"name":"stateHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ValueClaimed","inputs":[{"name":"claimedId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"ValueClaimingRequested","inputs":[{"name":"claimedId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"FailedDeployment","inputs":[]},{"type":"error","name":"InsufficientBalance","inputs":[{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x608080604052346015576112dc908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f803560e01c806312b22256146109f357806314503e511461097857806329336f391461087c57806336a52a18146108545780635b1b84f7146106a357806360302d241461068a578063701da98e1461066d578063704ed542146106055780638ea59e1d146105a057806391d5a64c146105385780639cb330051461050f578063affed0e0146104f1578063c2df60091461048e578063c78bde771461040e578063d562422214610298578063de1dd2e0146101045763f887ea40146100d5575f80fd5b3461010157806003193601126101015760206100ef610fe6565b6040516001600160a01b039091168152f35b80fd5b50346101015760803660031901126101015761011e610a47565b60243567ffffffffffffffff81116102945761013e903690600401610a9f565b90610147610a73565b92610150610a89565b9361016c6001600160a01b03610164610fe6565b163314610acd565b6002549081610238577f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c6947f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c0542366676020846101c761023296610fd8565b6002556040513060601b6bffffffffffffffffffffffff1916838201908152601481019290925261020581603484015b03601f198101835282610b74565b519020986001600160801b0360405191168152a16040516001600160a01b03909416969394859485610c1d565b0390a280f35b60405162461bcd60e51b815260206004820152602e60248201527f696e6974206d657373616765206d75737420626520637265617465642062656660448201526d6f726520616e79206f746865727360901b6064820152608490fd5b8280fd5b5060403660031901126101015760043567ffffffffffffffff811161040a576102c5903690600401610a9f565b602435906001600160801b0382168203610406576001546102ef906001600160a01b031615610b30565b600460206001600160a01b03610303610fe6565b16604051928380926337792e1d60e11b82525afa9081156103fb57610358847f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c6949361035d93602099916103ce575b50610bc9565b61116c565b60025461036981610fd8565b6002556040513060601b6bffffffffffffffffffffffff1916878201908152601481019290925261039d81603484016101f7565b519020936103c36001600160a01b036103b461128a565b16946040519384938885610c1d565b0390a2604051908152f35b6103ee9150893d8b116103f4575b6103e68183610b74565b810190610baa565b5f610352565b503d6103dc565b6040513d87823e3d90fd5b8380fd5b5080fd5b50346101015760a036600319011261010157610428610a47565b60243567ffffffffffffffff811161029457610448903690600401610a9f565b9091610452610a73565b608435926001600160e01b03198416840361048a576104879461047e6001600160a01b03610164610fe6565b60643593610ec5565b80f35b8580fd5b5034610101576080366003190112610101576104a8610a5d565b6044359067ffffffffffffffff8211610294576104cc610487923690600401610a9f565b906104d5610a89565b926104e96001600160a01b03610164610fe6565b600435610ded565b50346101015780600319360112610101576020600254604051908152f35b50346101015780600319360112610101576003546040516001600160a01b039091168152602090f35b503461010157602036600319011261010157600154610560906001600160a01b031615610b30565b6001600160a01b0361057061128a565b167f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c497860206040516004358152a280f35b5034610101576020366003190112610101576004356105c86001600160a01b03610164610fe6565b808254036105d4575080f35b6020817f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c080930928455604051908152a180f35b506020366003190112610101576004356001600160801b03811690818103610294577f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c0542366679161066360209261035860018060a01b036001541615610b30565b604051908152a180f35b503461010157806003193601126101015760209054604051908152f35b5034610101578060031936011261010157610487610c6a565b5034610792576040366003190112610792576106bd610a47565b6106d06001600160a01b03610164610fe6565b6002546107f5576003546001600160a01b03166107a55780763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff6e5af43d82803e903d91602b57fd5bf39360881c16175f5260781b1760205260018060a01b03602435603760095ff516801561079657600380546001600160a01b03191682179055803b15610792575f809160046040518094819363204a7f0760e21b83525af1801561078757610779575080f35b61078591505f90610b74565b005b6040513d5f823e3d90fd5b5f80fd5b63b06ebf3d60e01b5f5260045ffd5b60405162461bcd60e51b815260206004820152602260248201527f6465636f64657220636f756c64206f6e6c792062652063726561746564206f6e604482015261636560f01b6064820152608490fd5b60405162461bcd60e51b815260206004820152603160248201527f6465636f64657220636f756c64206f6e6c792062652063726561746564206265604482015270666f726520696e6974206d65737361676560781b6064820152608490fd5b34610792575f366003190112610792576001546040516001600160a01b039091168152602090f35b60603660031901126107925760243567ffffffffffffffff8111610792576108a960049136908301610a9f565b6108b4929192610a73565b6001549093906108cd906001600160a01b031615610b30565b60206001600160a01b036108df610fe6565b16604051948580926337792e1d60e11b82525afa92831561078757610358857fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f95610930935f916109595750610bc9565b6109546001600160a01b0361094361128a565b169460405193849360043585610c1d565b0390a2005b610972915060203d6020116103f4576103e68183610b74565b88610352565b34610792576060366003190112610792577fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd6578360406109b4610a5d565b6109da6109bf610a73565b9182906109d56001600160a01b03610164610fe6565b611041565b6001600160801b038251916004358352166020820152a1005b3461079257602036600319011261079257610a0c610a47565b610a1f6001600160a01b03610164610fe6565b60018060a01b03166bffffffffffffffffffffffff60a01b6001541617600155610785610c6a565b600435906001600160a01b038216820361079257565b602435906001600160a01b038216820361079257565b604435906001600160801b038216820361079257565b606435906001600160801b038216820361079257565b9181601f840112156107925782359167ffffffffffffffff8311610792576020838186019501011161079257565b15610ad457565b60405162461bcd60e51b815260206004820152602e60248201527f6f6e6c7920726f7574657220636f6e747261637420697320656c696769626c6560448201526d103337b91037b832b930ba34b7b760911b6064820152608490fd5b15610b3757565b60405162461bcd60e51b81526020600482015260156024820152741c1c9bd9dc985b481a5cc81d195c9b5a5b985d1959605a1b6044820152606490fd5b90601f8019910116810190811067ffffffffffffffff821117610b9657604052565b634e487b7160e01b5f52604160045260245ffd5b9081602091031261079257516001600160801b03811681036107925790565b906001600160801b03809116911601906001600160801b038211610be957565b634e487b7160e01b5f52601160045260245ffd5b908060209392818452848401375f828201840152601f01601f1916010190565b92604092610c44916001600160801b03939796978652606060208701526060860191610bfd565b9416910152565b9081602091031261079257516001600160a01b03811681036107925790565b6001546001600160a01b03168015610d695760049060206001600160a01b03610c91610fe6565b166040519384809263088f50cf60e41b82525afa918215610787576024926020915f91610d3c575b506040516370a0823160e01b815230600482015293849182906001600160a01b03165afa918215610787575f92610d01575b506001600160801b03610cff921690611041565b565b91506020823d602011610d34575b81610d1c60209383610b74565b81010312610792579051906001600160801b03610ceb565b3d9150610d0f565b610d5c9150823d8411610d62575b610d548183610b74565b810190610c4b565b5f610cb9565b503d610d4a565b60405162461bcd60e51b815260206004820152601960248201527f70726f6772616d206973206e6f74207465726d696e61746564000000000000006044820152606490fd5b3d15610de8573d9067ffffffffffffffff8211610b965760405191610ddd601f8201601f191660200184610b74565b82523d5f602084013e565b606090565b600354909493906001600160a01b031680610e44575b507f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f801177393610e3f9160405194859460018060a01b03169785610c1d565b0390a2565b5f80916040518260208201916374fad4ef60e01b83528a602482015260018060a01b038816604482015260806064820152610ea481610e8760a482018a8d610bfd565b6001600160801b038d16608483015203601f198101835282610b74565b51926207a120f1610eb3610dae565b50610ebe575f610e03565b5050505050565b94909294610ed38682611041565b6003546001600160a01b03169081610f45575b50507fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c6936001600160801b03610f29604051958695606087526060870191610bfd565b9616602084015260408301526001600160e01b031916930390a2565b604051639649744960e01b602082019081526001600160a01b03909216602482015260a060448201525f92839290918390610fbd818c6001600160801b03610f9160c484018d8f610bfd565b91166064830152608482018d90526001600160e01b03198a1660a483015203601f198101835282610b74565b51926207a120f1610fcc610dae565b50610ebe575f80610ee6565b5f198114610be95760010190565b6040516303e21fa960e61b8152602081600481305afa908115610787575f9161100d575090565b611026915060203d602011610d6257610d548183610b74565b90565b90816020910312610792575180151581036107925790565b60049160206001600160a01b03611056610fe6565b166040519485809263088f50cf60e41b82525afa928315610787575f93611142575b506001600160801b03168061108c57505050565b60405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183915f91165af1908115610787575f91611113575b50156110d757565b60405162461bcd60e51b81526020600482015260146024820152736661696c656420746f2073656e6420575661726160601b6044820152606490fd5b611135915060203d60201161113b575b61112d8183610b74565b810190611029565b5f6110cf565b503d611123565b6001600160801b039193506111659060203d602011610d6257610d548183610b74565b9290611078565b6001600160a01b0361117c610fe6565b60405163088f50cf60e41b81529116602082600481845afa918215610787576020926064915f9161126d575b505f6111b261128a565b6040516323b872dd60e01b81526001600160a01b03918216600482015260248101959095526001600160801b039690961660448501529294859384929091165af1908115610787575f9161124e575b501561120957565b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b611267915060203d60201161113b5761112d8183610b74565b5f611201565b6112849150843d8611610d6257610d548183610b74565b5f6111a8565b600354336001600160a01b03909116036112a2573290565b339056fea264697066735822122053014fd347f0badd5a640fea8157059cb031141fb96d1162746883ff7e93eb8e64736f6c634300081a0033","sourceMap":"403:6188:157:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f803560e01c806312b22256146109f357806314503e511461097857806329336f391461087c57806336a52a18146108545780635b1b84f7146106a357806360302d241461068a578063701da98e1461066d578063704ed542146106055780638ea59e1d146105a057806391d5a64c146105385780639cb330051461050f578063affed0e0146104f1578063c2df60091461048e578063c78bde771461040e578063d562422214610298578063de1dd2e0146101045763f887ea40146100d5575f80fd5b3461010157806003193601126101015760206100ef610fe6565b6040516001600160a01b039091168152f35b80fd5b50346101015760803660031901126101015761011e610a47565b60243567ffffffffffffffff81116102945761013e903690600401610a9f565b90610147610a73565b92610150610a89565b9361016c6001600160a01b03610164610fe6565b163314610acd565b6002549081610238577f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c6947f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c0542366676020846101c761023296610fd8565b6002556040513060601b6bffffffffffffffffffffffff1916838201908152601481019290925261020581603484015b03601f198101835282610b74565b519020986001600160801b0360405191168152a16040516001600160a01b03909416969394859485610c1d565b0390a280f35b60405162461bcd60e51b815260206004820152602e60248201527f696e6974206d657373616765206d75737420626520637265617465642062656660448201526d6f726520616e79206f746865727360901b6064820152608490fd5b8280fd5b5060403660031901126101015760043567ffffffffffffffff811161040a576102c5903690600401610a9f565b602435906001600160801b0382168203610406576001546102ef906001600160a01b031615610b30565b600460206001600160a01b03610303610fe6565b16604051928380926337792e1d60e11b82525afa9081156103fb57610358847f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c6949361035d93602099916103ce575b50610bc9565b61116c565b60025461036981610fd8565b6002556040513060601b6bffffffffffffffffffffffff1916878201908152601481019290925261039d81603484016101f7565b519020936103c36001600160a01b036103b461128a565b16946040519384938885610c1d565b0390a2604051908152f35b6103ee9150893d8b116103f4575b6103e68183610b74565b810190610baa565b5f610352565b503d6103dc565b6040513d87823e3d90fd5b8380fd5b5080fd5b50346101015760a036600319011261010157610428610a47565b60243567ffffffffffffffff811161029457610448903690600401610a9f565b9091610452610a73565b608435926001600160e01b03198416840361048a576104879461047e6001600160a01b03610164610fe6565b60643593610ec5565b80f35b8580fd5b5034610101576080366003190112610101576104a8610a5d565b6044359067ffffffffffffffff8211610294576104cc610487923690600401610a9f565b906104d5610a89565b926104e96001600160a01b03610164610fe6565b600435610ded565b50346101015780600319360112610101576020600254604051908152f35b50346101015780600319360112610101576003546040516001600160a01b039091168152602090f35b503461010157602036600319011261010157600154610560906001600160a01b031615610b30565b6001600160a01b0361057061128a565b167f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c497860206040516004358152a280f35b5034610101576020366003190112610101576004356105c86001600160a01b03610164610fe6565b808254036105d4575080f35b6020817f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c080930928455604051908152a180f35b506020366003190112610101576004356001600160801b03811690818103610294577f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c0542366679161066360209261035860018060a01b036001541615610b30565b604051908152a180f35b503461010157806003193601126101015760209054604051908152f35b5034610101578060031936011261010157610487610c6a565b5034610792576040366003190112610792576106bd610a47565b6106d06001600160a01b03610164610fe6565b6002546107f5576003546001600160a01b03166107a55780763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff6e5af43d82803e903d91602b57fd5bf39360881c16175f5260781b1760205260018060a01b03602435603760095ff516801561079657600380546001600160a01b03191682179055803b15610792575f809160046040518094819363204a7f0760e21b83525af1801561078757610779575080f35b61078591505f90610b74565b005b6040513d5f823e3d90fd5b5f80fd5b63b06ebf3d60e01b5f5260045ffd5b60405162461bcd60e51b815260206004820152602260248201527f6465636f64657220636f756c64206f6e6c792062652063726561746564206f6e604482015261636560f01b6064820152608490fd5b60405162461bcd60e51b815260206004820152603160248201527f6465636f64657220636f756c64206f6e6c792062652063726561746564206265604482015270666f726520696e6974206d65737361676560781b6064820152608490fd5b34610792575f366003190112610792576001546040516001600160a01b039091168152602090f35b60603660031901126107925760243567ffffffffffffffff8111610792576108a960049136908301610a9f565b6108b4929192610a73565b6001549093906108cd906001600160a01b031615610b30565b60206001600160a01b036108df610fe6565b16604051948580926337792e1d60e11b82525afa92831561078757610358857fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f95610930935f916109595750610bc9565b6109546001600160a01b0361094361128a565b169460405193849360043585610c1d565b0390a2005b610972915060203d6020116103f4576103e68183610b74565b88610352565b34610792576060366003190112610792577fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd6578360406109b4610a5d565b6109da6109bf610a73565b9182906109d56001600160a01b03610164610fe6565b611041565b6001600160801b038251916004358352166020820152a1005b3461079257602036600319011261079257610a0c610a47565b610a1f6001600160a01b03610164610fe6565b60018060a01b03166bffffffffffffffffffffffff60a01b6001541617600155610785610c6a565b600435906001600160a01b038216820361079257565b602435906001600160a01b038216820361079257565b604435906001600160801b038216820361079257565b606435906001600160801b038216820361079257565b9181601f840112156107925782359167ffffffffffffffff8311610792576020838186019501011161079257565b15610ad457565b60405162461bcd60e51b815260206004820152602e60248201527f6f6e6c7920726f7574657220636f6e747261637420697320656c696769626c6560448201526d103337b91037b832b930ba34b7b760911b6064820152608490fd5b15610b3757565b60405162461bcd60e51b81526020600482015260156024820152741c1c9bd9dc985b481a5cc81d195c9b5a5b985d1959605a1b6044820152606490fd5b90601f8019910116810190811067ffffffffffffffff821117610b9657604052565b634e487b7160e01b5f52604160045260245ffd5b9081602091031261079257516001600160801b03811681036107925790565b906001600160801b03809116911601906001600160801b038211610be957565b634e487b7160e01b5f52601160045260245ffd5b908060209392818452848401375f828201840152601f01601f1916010190565b92604092610c44916001600160801b03939796978652606060208701526060860191610bfd565b9416910152565b9081602091031261079257516001600160a01b03811681036107925790565b6001546001600160a01b03168015610d695760049060206001600160a01b03610c91610fe6565b166040519384809263088f50cf60e41b82525afa918215610787576024926020915f91610d3c575b506040516370a0823160e01b815230600482015293849182906001600160a01b03165afa918215610787575f92610d01575b506001600160801b03610cff921690611041565b565b91506020823d602011610d34575b81610d1c60209383610b74565b81010312610792579051906001600160801b03610ceb565b3d9150610d0f565b610d5c9150823d8411610d62575b610d548183610b74565b810190610c4b565b5f610cb9565b503d610d4a565b60405162461bcd60e51b815260206004820152601960248201527f70726f6772616d206973206e6f74207465726d696e61746564000000000000006044820152606490fd5b3d15610de8573d9067ffffffffffffffff8211610b965760405191610ddd601f8201601f191660200184610b74565b82523d5f602084013e565b606090565b600354909493906001600160a01b031680610e44575b507f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f801177393610e3f9160405194859460018060a01b03169785610c1d565b0390a2565b5f80916040518260208201916374fad4ef60e01b83528a602482015260018060a01b038816604482015260806064820152610ea481610e8760a482018a8d610bfd565b6001600160801b038d16608483015203601f198101835282610b74565b51926207a120f1610eb3610dae565b50610ebe575f610e03565b5050505050565b94909294610ed38682611041565b6003546001600160a01b03169081610f45575b50507fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c6936001600160801b03610f29604051958695606087526060870191610bfd565b9616602084015260408301526001600160e01b031916930390a2565b604051639649744960e01b602082019081526001600160a01b03909216602482015260a060448201525f92839290918390610fbd818c6001600160801b03610f9160c484018d8f610bfd565b91166064830152608482018d90526001600160e01b03198a1660a483015203601f198101835282610b74565b51926207a120f1610fcc610dae565b50610ebe575f80610ee6565b5f198114610be95760010190565b6040516303e21fa960e61b8152602081600481305afa908115610787575f9161100d575090565b611026915060203d602011610d6257610d548183610b74565b90565b90816020910312610792575180151581036107925790565b60049160206001600160a01b03611056610fe6565b166040519485809263088f50cf60e41b82525afa928315610787575f93611142575b506001600160801b03168061108c57505050565b60405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183915f91165af1908115610787575f91611113575b50156110d757565b60405162461bcd60e51b81526020600482015260146024820152736661696c656420746f2073656e6420575661726160601b6044820152606490fd5b611135915060203d60201161113b575b61112d8183610b74565b810190611029565b5f6110cf565b503d611123565b6001600160801b039193506111659060203d602011610d6257610d548183610b74565b9290611078565b6001600160a01b0361117c610fe6565b60405163088f50cf60e41b81529116602082600481845afa918215610787576020926064915f9161126d575b505f6111b261128a565b6040516323b872dd60e01b81526001600160a01b03918216600482015260248101959095526001600160801b039690961660448501529294859384929091165af1908115610787575f9161124e575b501561120957565b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b611267915060203d60201161113b5761112d8183610b74565b5f611201565b6112849150843d8611610d6257610d548183610b74565b5f6111a8565b600354336001600160a01b03909116036112a2573290565b339056fea264697066735822122053014fd347f0badd5a640fea8157059cb031141fb96d1162746883ff7e93eb8e64736f6c634300081a0033","sourceMap":"403:6188:157:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;403:6188:157;;;;;;;;;;;;;;;;-1:-1:-1;;403:6188:157;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;5608:81;-1:-1:-1;;;;;5630:8:157;;:::i;:::-;403:6188;5616:10;:22;5608:81;:::i;:::-;5165:5;403:6188;5165:10;;403:6188;;5511:52;5347:7;5446:50;403:6188;5347:7;;5511:52;5347:7;;:::i;:::-;5165:5;403:6188;;;5412:4;403:6188;;-1:-1:-1;;403:6188:157;5387:42;;;403:6188;;;;;;;;;;5387:42;403:6188;;;;5387:42;;1197:40;;5387:42;;;;;;:::i;:::-;403:6188;5377:53;;403:6188;-1:-1:-1;;;;;403:6188:157;;;;;;5446:50;403:6188;;-1:-1:-1;;;;;403:6188:157;;;;;;;;;5511:52;:::i;:::-;;;;403:6188;;;;;-1:-1:-1;;;403:6188:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;403:6188:157;;;;;;;;;;;;-1:-1:-1;403:6188:157;;-1:-1:-1;;403:6188:157;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;403:6188:157;;;;;;;;1000:57;;-1:-1:-1;;;;;403:6188:157;1008:23;1000:57;:::i;:::-;403:6188;;-1:-1:-1;;;;;1094:8:157;;:::i;:::-;403:6188;;;;;;;;;;1086:27;;;;;;;;;1146:16;1086:27;1254:57;1086:27;;1146:16;1086:27;403:6188;1086:27;;;;403:6188;1146:16;;:::i;:::-;;:::i;:::-;1229:7;403:6188;1229:7;;;:::i;:::-;;403:6188;;;1222:4;403:6188;;-1:-1:-1;;403:6188:157;1197:40;;;403:6188;;;;;;;;;;1197:40;403:6188;;;;1197:40;403:6188;1197:40;403:6188;1187:51;;;1254:57;-1:-1:-1;;;;;1283:9:157;;:::i;:::-;403:6188;;;;1254:57;;;;;;:::i;:::-;;;;403:6188;;;;;;1086:27;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;403:6188;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;403:6188:157;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;403:6188:157;;;;;;5699:1;;5608:81;-1:-1:-1;;;;;5630:8:157;;:::i;5608:81::-;403:6188;;5699:1;;:::i;:::-;403:6188;;;;;;;;;;;;;-1:-1:-1;;403:6188:157;;;;;;:::i;:::-;;;;;;;;;;5699:1;403:6188;;;;;;:::i;:::-;;;;:::i;:::-;;5608:81;-1:-1:-1;;;;;5630:8:157;;:::i;5608:81::-;403:6188;;5699:1;:::i;403:6188::-;;;;;;;;;;;;;;568:20;403:6188;;;;;;;;;;;;;;;;;;;;604:22;403:6188;;;-1:-1:-1;;;;;403:6188:157;;;;;;;;;;;;;;;-1:-1:-1;;403:6188:157;;;;;;1765:57;;-1:-1:-1;;;;;403:6188:157;1773:23;1765:57;:::i;:::-;-1:-1:-1;;;;;1873:9:157;;:::i;:::-;403:6188;1838:45;403:6188;;;;;;;1838:45;403:6188;;;;;;;;;-1:-1:-1;;403:6188:157;;;;;;5608:81;-1:-1:-1;;;;;5630:8:157;;:::i;5608:81::-;403:6188;;;2539:25;2535:123;;403:6188;;;2535:123;403:6188;;2624:23;403:6188;;;;;;;;2624:23;403:6188;;;-1:-1:-1;403:6188:157;;-1:-1:-1;;403:6188:157;;;;;;-1:-1:-1;;;;;403:6188:157;;;;;;;;2085:39;403:6188;2062:6;403:6188;;1971:57;403:6188;;;;;1979:9;403:6188;;1979:23;1971:57;:::i;2062:6::-;403:6188;;;;;2085:39;403:6188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;403:6188:157;;;;;;:::i;:::-;5608:81;-1:-1:-1;;;;;5630:8:157;;:::i;5608:81::-;4734:5;403:6188;;;4816:7;403:6188;-1:-1:-1;;;;;403:6188:157;;;3743:569:44;;;;;;;;;403:6188:157;3743:569:44;;;;403:6188:157;3743:569:44;403:6188:157;;;;;;;3743:569:44;;403:6188:157;3743:569:44;403:6188:157;4325:22:44;;4321:85;;4816:7:157;403:6188;;-1:-1:-1;;;;;;403:6188:157;;;;;4955:36;;;;;403:6188;;;;;;;;;;;;;4955:36;;;;;;;;;;403:6188;;;4955:36;;;;403:6188;4955:36;;:::i;:::-;403:6188;4955:36;403:6188;;;;;;;;;4955:36;403:6188;;;4321:85:44;4370:25;;;403:6188:157;4370:25:44;403:6188:157;;4370:25:44;403:6188:157;;;-1:-1:-1;;;403:6188:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;403:6188:157;;;;;;;;;;-1:-1:-1;;;403:6188:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;403:6188:157;;;;;;;;;;;;;-1:-1:-1;;403:6188:157;;;;;;;;-1:-1:-1;;;;;403:6188:157;;;;;;;;;;;-1:-1:-1;;403:6188:157;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;1451:57;;-1:-1:-1;;;;;403:6188:157;1459:23;1451:57;:::i;:::-;403:6188;-1:-1:-1;;;;;1545:8:157;;:::i;:::-;403:6188;;;;;;;;;;1537:27;;;;;;;;;1597:16;1537:27;1630:63;1537:27;1597:16;1537:27;403:6188;1537:27;;;1597:16;;:::i;:::-;1630:63;-1:-1:-1;;;;;1665:9:157;;:::i;:::-;403:6188;;;;;;;;;1630:63;;:::i;:::-;;;;403:6188;1537:27;;;;403:6188;1537:27;403:6188;1537:27;;;;;;;:::i;:::-;;;;403:6188;;;;;;-1:-1:-1;;403:6188:157;;;;4592:30;403:6188;;;:::i;:::-;4570:5;403:6188;;:::i;:::-;;;;5608:81;-1:-1:-1;;;;;5630:8:157;;:::i;5608:81::-;4570:5;:::i;:::-;-1:-1:-1;;;;;403:6188:157;;;;;;;;;;;;4592:30;403:6188;;;;;;;-1:-1:-1;;403:6188:157;;;;;;:::i;:::-;5608:81;-1:-1:-1;;;;;5630:8:157;;:::i;5608:81::-;403:6188;;;;;;;;;2828:22;403:6188;;;2828:22;403:6188;2828:22;;:::i;403:6188::-;;;;-1:-1:-1;;;;;403:6188:157;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;403:6188:157;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;403:6188:157;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;403:6188:157;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;403:6188:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;403:6188:157;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;403:6188:157;;;;;;;;;;;;-1:-1:-1;;;403:6188:157;;;;;;;;;;1197:40;;403:6188;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;403:6188:157;;;;;-1:-1:-1;403:6188:157;;;;;;;;;;;-1:-1:-1;;;;;403:6188:157;;;;;;;:::o;:::-;;-1:-1:-1;;;;;403:6188:157;;;;;;;-1:-1:-1;;;;;403:6188:157;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;403:6188:157;;;;;;;;-1:-1:-1;;403:6188:157;;;;:::o;:::-;;;;;;-1:-1:-1;;;;;403:6188:157;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;;;;;403:6188:157;;;;;;;:::o;2137:267::-;403:6188;;-1:-1:-1;;;;;403:6188:157;2194:23;;403:6188;;2289:31;;;-1:-1:-1;;;;;2297:8:157;;:::i;:::-;403:6188;;;;;;;;;;2289:31;;;;;;;;;2276:70;2289:31;;;-1:-1:-1;2289:31:157;;;2137:267;-1:-1:-1;403:6188:157;;-1:-1:-1;;;2276:70:157;;2340:4;2289:31;2276:70;;403:6188;;;;;;-1:-1:-1;;;;;403:6188:157;2276:70;;;;;;;-1:-1:-1;2276:70:157;;;2137:267;403:6188;-1:-1:-1;;;;;2380:16:157;403:6188;;2380:16;;:::i;:::-;2137:267::o;2276:70::-;;;2289:31;2276:70;;2289:31;2276:70;;;;;;2289:31;2276:70;;;:::i;:::-;;;403:6188;;;;;;;-1:-1:-1;;;;;2276:70:157;;;;;-1:-1:-1;2276:70:157;;2289:31;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;403:6188;;;-1:-1:-1;;;403:6188:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1197:40;403:6188;;-1:-1:-1;;403:6188:157;;;;;:::i;:::-;;;;-1:-1:-1;403:6188:157;;;;:::o;:::-;;;:::o;2896:754::-;3113:7;403:6188;2896:754;;;;-1:-1:-1;;;;;403:6188:157;;3109:479;;2896:754;403:6188;3603:40;403:6188;3603:40;403:6188;;;;;;;;;;;;3603:40;;;:::i;:::-;;;;2896:754::o;3109:479::-;-1:-1:-1;403:6188:157;;;;3190:94;;;;3213:37;;;;3190:94;;;;;;403:6188;;;;;;;;;;;;;;;;;3190:94;403:6188;;;;;;;;:::i;:::-;-1:-1:-1;;;;;403:6188:157;;;;;;3190:94;1197:40;;3190:94;;;;;;:::i;:::-;3410:36;;3428:7;3410:36;;;:::i;:::-;;3461:117;;3109:479;;;3461:117;3557:7;;;;;:::o;3656:775::-;;;;;3846:5;;;;:::i;:::-;3867:7;403:6188;-1:-1:-1;;;;;403:6188:157;;;3863:505;;3656:775;403:6188;;4383:41;403:6188;-1:-1:-1;;;;;403:6188:157;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;;403:6188:157;;4383:41;;;3656:775::o;3863:505::-;403:6188;;-1:-1:-1;;;3928:138:157;;;;;;-1:-1:-1;;;;;403:6188:157;;;3928:138;;;403:6188;;;;;;-1:-1:-1;;;;403:6188:157;;-1:-1:-1;;3928:138:157;403:6188;;-1:-1:-1;;;;;403:6188:157;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;403:6188:157;;;;;;3928:138;-1:-1:-1;;3928:138:157;;;;;;:::i;:::-;4192:36;;4210:7;4192:36;;;:::i;:::-;;4243:115;;3863:505;;;;403:6188;-1:-1:-1;;403:6188:157;;;;;;;:::o;666:108::-;403:6188;;-1:-1:-1;;;731:36:157;;;403:6188;731:36;403:6188;752:4;731:36;;;;;;;-1:-1:-1;731:36:157;;;724:43;666:108;:::o;731:36::-;;;;;;;;;;;;;;:::i;:::-;666:108;:::o;403:6188::-;;;;;;;;;;;;;;;;;;:::o;6273:316::-;6389:31;;;-1:-1:-1;;;;;6397:8:157;;:::i;:::-;403:6188;;;;;;;;;;6389:31;;;;;;;;;-1:-1:-1;6389:31:157;;;6273:316;403:6188;-1:-1:-1;;;;;403:6188:157;6436:10;6432:151;;6273:316;;;:::o;6432:151::-;403:6188;;-1:-1:-1;;;6477:40:157;;-1:-1:-1;;;;;403:6188:157;;;6389:31;6477:40;;403:6188;;;;;;;;;6389:31;;403:6188;;6477:40;;403:6188;;-1:-1:-1;;403:6188:157;6477:40;;;;;;;-1:-1:-1;6477:40:157;;;6432:151;403:6188;;;;6273:316::o;403:6188::-;;;-1:-1:-1;;;403:6188:157;;6389:31;;403:6188;;;;;;;;-1:-1:-1;;;6477:40:157;403:6188;;;;;;6477:40;;;;6389:31;6477:40;6389:31;6477:40;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;6389:31;-1:-1:-1;;;;;6389:31:157;;;;;;;;;;;;;;;:::i;:::-;;;;;5935:332;-1:-1:-1;;;;;6025:8:157;;:::i;:::-;403:6188;;-1:-1:-1;;;6084:36:157;;403:6188;;6084:36;403:6188;6084:36;403:6188;;6084:36;;;;;;;;;6147:58;6084:36;-1:-1:-1;6084:36:157;;;5935:332;6172:9;-1:-1:-1;6172:9:157;;:::i;:::-;403:6188;;-1:-1:-1;;;6147:58:157;;-1:-1:-1;;;;;403:6188:157;;;6084:36;6147:58;;403:6188;;;;;;;;-1:-1:-1;;;;;403:6188:157;;;;;;;;;;;;;;-1:-1:-1;;403:6188:157;6147:58;;;;;;;-1:-1:-1;6147:58:157;;;5935:332;403:6188;;;;5935:332::o;403:6188::-;;;-1:-1:-1;;;403:6188:157;;6084:36;;403:6188;;;;;;;;;;;;;6147:58;;403:6188;6147:58;;;;6084:36;6147:58;6084:36;6147:58;;;;;;;:::i;:::-;;;;6084:36;;;;;;;;;;;;;;:::i;:::-;;;;5747:182;5825:7;403:6188;5811:10;-1:-1:-1;;;;;403:6188:157;;;5811:21;403:6188;;5855:9;5848:16;:::o;5807:116::-;5811:10;5895:17;:::o","linkReferences":{}},"methodIdentifiers":{"claimValue(bytes32)":"91d5a64c","createDecoder(address,bytes32)":"5b1b84f7","decoder()":"9cb33005","executableBalanceTopUp(uint128)":"704ed542","inheritor()":"36a52a18","initMessage(address,bytes,uint128,uint128)":"de1dd2e0","messageSent(bytes32,address,bytes,uint128)":"c2df6009","nonce()":"affed0e0","replySent(address,bytes,uint128,bytes32,bytes4)":"c78bde77","router()":"f887ea40","sendMessage(bytes,uint128)":"d5624222","sendReply(bytes32,bytes,uint128)":"29336f39","sendValueToInheritor()":"60302d24","setInheritor(address)":"12b22256","stateHash()":"701da98e","updateState(bytes32)":"8ea59e1d","valueClaimed(bytes32,address,uint128)":"14503e51"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ExecutableBalanceTopUpRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"Message\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"MessageQueueingRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"replyTo\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"replyCode\",\"type\":\"bytes4\"}],\"name\":\"Reply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"repliedTo\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ReplyQueueingRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateHash\",\"type\":\"bytes32\"}],\"name\":\"StateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ValueClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"}],\"name\":\"ValueClaimingRequested\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_claimedId\",\"type\":\"bytes32\"}],\"name\":\"claimValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"createDecoder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decoder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"executableBalanceTopUp\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inheritor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"executableBalance\",\"type\":\"uint128\"}],\"name\":\"initMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"messageSent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"internalType\":\"bytes32\",\"name\":\"replyTo\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"replyCode\",\"type\":\"bytes4\"}],\"name\":\"replySent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"router\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_repliedTo\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"sendReply\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sendValueToInheritor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_inheritor\",\"type\":\"address\"}],\"name\":\"setInheritor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stateHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"newStateHash\",\"type\":\"bytes32\"}],\"name\":\"updateState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"valueClaimed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}]},\"events\":{\"ExecutableBalanceTopUpRequested(uint128)\":{\"details\":\"Emitted when a user requests program's executable balance top up with his tokens. NOTE: It's event for NODES: it requires to top up balance of the program.\"},\"Message(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when the program sends outgoing message. NOTE: It's event for USERS: it informs about new message sent from program.\"},\"MessageQueueingRequested(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when a new message is sent to be queued. NOTE: It's event for NODES: it requires to insert message in the program's queue.\"},\"Reply(bytes,uint128,bytes32,bytes4)\":{\"details\":\"Emitted when the program sends reply message. NOTE: It's event for USERS: it informs about new reply sent from program.\"},\"ReplyQueueingRequested(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when a new reply is sent and requested to be verified and queued. NOTE: It's event for NODES: it requires to insert message in the program's queue, if message, exists.\"},\"StateChanged(bytes32)\":{\"details\":\"Emitted when the state hash of program is changed. NOTE: It's event for USERS: it informs about state changes.\"},\"ValueClaimed(bytes32,uint128)\":{\"details\":\"Emitted when a user succeed in claiming value request and receives balance. NOTE: It's event for USERS: it informs about value claimed.\"},\"ValueClaimingRequested(bytes32,address)\":{\"details\":\"Emitted when a reply's value is requested to be verified and claimed. NOTE: It's event for NODES: it requires to claim value from message, if exists.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Mirror.sol\":\"Mirror\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":symbiotic-core/=lib/symbiotic-core/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts/contracts/proxy/Clones.sol\":{\"keccak256\":\"0x4cc853b89072428e406c60c6e8d5280b31f9d99d6caf7b041650e649746513a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38a1bbdb89a8f5d1820a2dcc34b5086a6e199c7a8965007345975b5db8997a64\",\"dweb:/ipfs/QmcN6yJBkoserTqAMpue55HmMCMf7dGJYUbGi8p366HqZq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323\",\"dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR\"]},\"lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a\",\"dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd\"]},\"src/IMirror.sol\":{\"keccak256\":\"0x78105f388516b83fcb68f7c006c5d9d685bc8ad7fadcdfa56c0919efa79a6373\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://3a8ab1264895b4f5c8fd3aa18524016c4e88712a50e0a9935f421e13f3e09601\",\"dweb:/ipfs/QmXyVe9k37fDFWmrfjYHisxmqnEynevYo88uVrnRAmYW6L\"]},\"src/IMirrorDecoder.sol\":{\"keccak256\":\"0x95bfe42461bd03e726f894679f4b4133034a405672fe8343c3343d0964cf9072\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://a0907d84596ed62b9ea222fd841fc0259e87b17dd0b5af3f6d0d8a8f4726994d\",\"dweb:/ipfs/QmTkumKh7DBJNXrark6NBqBxCtnYmbRMGYkRyxxzpW9wKr\"]},\"src/IMirrorProxy.sol\":{\"keccak256\":\"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469\",\"dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG\"]},\"src/IRouter.sol\":{\"keccak256\":\"0xe617d8ee99b9f35a45b5591fe67cc6c60930a525933cafb2315eb45a1cd91d4f\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://9d3b9e731c182559acb506fa22b833591a29cedf1d2f34656819736fb044cc8f\",\"dweb:/ipfs/QmNPskadyFYM8zJMAQPAAYuLQCr3h3c8NLs2RQo4ZRQLq3\"]},\"src/IWrappedVara.sol\":{\"keccak256\":\"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f\",\"dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf\"]},\"src/Mirror.sol\":{\"keccak256\":\"0xdaa3b0c9b0b6ee16e301331fa6eb8924acf99f6d1428506351881187f2c1cbef\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://57342861c4a20fb28b983d0235c56d42073138c1996ff6b7ee7e29a0697d31a6\",\"dweb:/ipfs/QmNYCZZFgBADfMR9HSugS4RcH3jniLnEVhRquV6vD82uri\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"FailedDeployment"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"InsufficientBalance"},{"inputs":[{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ExecutableBalanceTopUpRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"address","name":"destination","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"Message","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"MessageQueueingRequested","anonymous":false},{"inputs":[{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false},{"internalType":"bytes32","name":"replyTo","type":"bytes32","indexed":false},{"internalType":"bytes4","name":"replyCode","type":"bytes4","indexed":true}],"type":"event","name":"Reply","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"repliedTo","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ReplyQueueingRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"stateHash","type":"bytes32","indexed":false}],"type":"event","name":"StateChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ValueClaimed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true}],"type":"event","name":"ValueClaimingRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_claimedId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"claimValue"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"createDecoder"},{"inputs":[],"stateMutability":"view","type":"function","name":"decoder","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"executableBalanceTopUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"inheritor","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"source","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"uint128","name":"executableBalance","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"initMessage"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"messageSent"},{"inputs":[],"stateMutability":"view","type":"function","name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"bytes32","name":"replyTo","type":"bytes32"},{"internalType":"bytes4","name":"replyCode","type":"bytes4"}],"stateMutability":"nonpayable","type":"function","name":"replySent"},{"inputs":[],"stateMutability":"view","type":"function","name":"router","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"sendMessage","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"_repliedTo","type":"bytes32"},{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"sendReply"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"sendValueToInheritor"},{"inputs":[{"internalType":"address","name":"_inheritor","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setInheritor"},{"inputs":[],"stateMutability":"view","type":"function","name":"stateHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"newStateHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"updateState"},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint128","name":"value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"valueClaimed"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","symbiotic-core/=lib/symbiotic-core/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Mirror.sol":"Mirror"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts/contracts/proxy/Clones.sol":{"keccak256":"0x4cc853b89072428e406c60c6e8d5280b31f9d99d6caf7b041650e649746513a6","urls":["bzz-raw://38a1bbdb89a8f5d1820a2dcc34b5086a6e199c7a8965007345975b5db8997a64","dweb:/ipfs/QmcN6yJBkoserTqAMpue55HmMCMf7dGJYUbGi8p366HqZq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28","urls":["bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323","dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179","urls":["bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a","dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd"],"license":"MIT"},"src/IMirror.sol":{"keccak256":"0x78105f388516b83fcb68f7c006c5d9d685bc8ad7fadcdfa56c0919efa79a6373","urls":["bzz-raw://3a8ab1264895b4f5c8fd3aa18524016c4e88712a50e0a9935f421e13f3e09601","dweb:/ipfs/QmXyVe9k37fDFWmrfjYHisxmqnEynevYo88uVrnRAmYW6L"],"license":"UNLICENSED"},"src/IMirrorDecoder.sol":{"keccak256":"0x95bfe42461bd03e726f894679f4b4133034a405672fe8343c3343d0964cf9072","urls":["bzz-raw://a0907d84596ed62b9ea222fd841fc0259e87b17dd0b5af3f6d0d8a8f4726994d","dweb:/ipfs/QmTkumKh7DBJNXrark6NBqBxCtnYmbRMGYkRyxxzpW9wKr"],"license":"UNLICENSED"},"src/IMirrorProxy.sol":{"keccak256":"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570","urls":["bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469","dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0xe617d8ee99b9f35a45b5591fe67cc6c60930a525933cafb2315eb45a1cd91d4f","urls":["bzz-raw://9d3b9e731c182559acb506fa22b833591a29cedf1d2f34656819736fb044cc8f","dweb:/ipfs/QmNPskadyFYM8zJMAQPAAYuLQCr3h3c8NLs2RQo4ZRQLq3"],"license":"UNLICENSED"},"src/IWrappedVara.sol":{"keccak256":"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175","urls":["bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f","dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf"],"license":"UNLICENSED"},"src/Mirror.sol":{"keccak256":"0xdaa3b0c9b0b6ee16e301331fa6eb8924acf99f6d1428506351881187f2c1cbef","urls":["bzz-raw://57342861c4a20fb28b983d0235c56d42073138c1996ff6b7ee7e29a0697d31a6","dweb:/ipfs/QmNYCZZFgBADfMR9HSugS4RcH3jniLnEVhRquV6vD82uri"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[{"astId":74522,"contract":"src/Mirror.sol:Mirror","label":"stateHash","offset":0,"slot":"0","type":"t_bytes32"},{"astId":74524,"contract":"src/Mirror.sol:Mirror","label":"inheritor","offset":0,"slot":"1","type":"t_address"},{"astId":74526,"contract":"src/Mirror.sol:Mirror","label":"nonce","offset":0,"slot":"2","type":"t_uint256"},{"astId":74528,"contract":"src/Mirror.sol:Mirror","label":"decoder","offset":0,"slot":"3","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/Mirror.sol","id":75106,"exportedSymbols":{"Clones":[41840],"IMirror":[73387],"IMirrorDecoder":[73422],"IMirrorProxy":[73430],"IRouter":[73763],"IWrappedVara":[73774],"Mirror":[75105]},"nodeType":"SourceUnit","src":"39:6553:157","nodes":[{"id":74506,"nodeType":"PragmaDirective","src":"39:24:157","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":74508,"nodeType":"ImportDirective","src":"65:48:157","nodes":[],"absolutePath":"src/IMirrorProxy.sol","file":"./IMirrorProxy.sol","nameLocation":"-1:-1:-1","scope":75106,"sourceUnit":73431,"symbolAliases":[{"foreign":{"id":74507,"name":"IMirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73430,"src":"73:12:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":74510,"nodeType":"ImportDirective","src":"114:38:157","nodes":[],"absolutePath":"src/IMirror.sol","file":"./IMirror.sol","nameLocation":"-1:-1:-1","scope":75106,"sourceUnit":73388,"symbolAliases":[{"foreign":{"id":74509,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73387,"src":"122:7:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":74512,"nodeType":"ImportDirective","src":"153:38:157","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":75106,"sourceUnit":73764,"symbolAliases":[{"foreign":{"id":74511,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73763,"src":"161:7:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":74514,"nodeType":"ImportDirective","src":"192:48:157","nodes":[],"absolutePath":"src/IWrappedVara.sol","file":"./IWrappedVara.sol","nameLocation":"-1:-1:-1","scope":75106,"sourceUnit":73775,"symbolAliases":[{"foreign":{"id":74513,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73774,"src":"200:12:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":74516,"nodeType":"ImportDirective","src":"241:52:157","nodes":[],"absolutePath":"src/IMirrorDecoder.sol","file":"./IMirrorDecoder.sol","nameLocation":"-1:-1:-1","scope":75106,"sourceUnit":73423,"symbolAliases":[{"foreign":{"id":74515,"name":"IMirrorDecoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73422,"src":"249:14:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":74518,"nodeType":"ImportDirective","src":"294:64:157","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/Clones.sol","file":"@openzeppelin/contracts/proxy/Clones.sol","nameLocation":"-1:-1:-1","scope":75106,"sourceUnit":41841,"symbolAliases":[{"foreign":{"id":74517,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41840,"src":"302:6:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75105,"nodeType":"ContractDefinition","src":"403:6188:157","nodes":[{"id":74522,"nodeType":"VariableDeclaration","src":"436:24:157","nodes":[],"baseFunctions":[73274],"constant":false,"functionSelector":"701da98e","mutability":"mutable","name":"stateHash","nameLocation":"451:9:157","scope":75105,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74521,"name":"bytes32","nodeType":"ElementaryTypeName","src":"436:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":74524,"nodeType":"VariableDeclaration","src":"466:24:157","nodes":[],"baseFunctions":[73279],"constant":false,"functionSelector":"36a52a18","mutability":"mutable","name":"inheritor","nameLocation":"481:9:157","scope":75105,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74523,"name":"address","nodeType":"ElementaryTypeName","src":"466:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":74526,"nodeType":"VariableDeclaration","src":"568:20:157","nodes":[],"baseFunctions":[73284],"constant":false,"functionSelector":"affed0e0","mutability":"mutable","name":"nonce","nameLocation":"583:5:157","scope":75105,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74525,"name":"uint256","nodeType":"ElementaryTypeName","src":"568:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":74528,"nodeType":"VariableDeclaration","src":"604:22:157","nodes":[],"baseFunctions":[73294],"constant":false,"functionSelector":"9cb33005","mutability":"mutable","name":"decoder","nameLocation":"619:7:157","scope":75105,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74527,"name":"address","nodeType":"ElementaryTypeName","src":"604:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":74543,"nodeType":"FunctionDefinition","src":"666:108:157","nodes":[],"body":{"id":74542,"nodeType":"Block","src":"714:60:157","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":74536,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"752:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$75105","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$75105","typeString":"contract Mirror"}],"id":74535,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"744:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74534,"name":"address","nodeType":"ElementaryTypeName","src":"744:7:157","typeDescriptions":{}}},"id":74537,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"744:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74533,"name":"IMirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73430,"src":"731:12:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirrorProxy_$73430_$","typeString":"type(contract IMirrorProxy)"}},"id":74538,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"731:27:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirrorProxy_$73430","typeString":"contract IMirrorProxy"}},"id":74539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"759:6:157","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":73429,"src":"731:34:157","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"731:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":74532,"id":74541,"nodeType":"Return","src":"724:43:157"}]},"baseFunctions":[73289],"functionSelector":"f887ea40","implemented":true,"kind":"function","modifiers":[],"name":"router","nameLocation":"675:6:157","parameters":{"id":74529,"nodeType":"ParameterList","parameters":[],"src":"681:2:157"},"returnParameters":{"id":74532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74531,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":74543,"src":"705:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74530,"name":"address","nodeType":"ElementaryTypeName","src":"705:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"704:9:157"},"scope":75105,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":74602,"nodeType":"FunctionDefinition","src":"893:445:157","nodes":[],"body":{"id":74601,"nodeType":"Block","src":"990:348:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74553,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74524,"src":"1008:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":74556,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1029:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74555,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1021:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74554,"name":"address","nodeType":"ElementaryTypeName","src":"1021:7:157","typeDescriptions":{}}},"id":74557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1021:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1008:23:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726f6772616d206973207465726d696e61746564","id":74559,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1033:23:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""},"value":"program is terminated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""}],"id":74552,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1000:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1000:57:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74561,"nodeType":"ExpressionStatement","src":"1000:57:157"},{"assignments":[74563],"declarations":[{"constant":false,"id":74563,"mutability":"mutable","name":"baseFee","nameLocation":"1076:7:157","nodeType":"VariableDeclaration","scope":74601,"src":"1068:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":74562,"name":"uint128","nodeType":"ElementaryTypeName","src":"1068:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":74570,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":74565,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74543,"src":"1094:6:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":74566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1094:8:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74564,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73763,"src":"1086:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$73763_$","typeString":"type(contract IRouter)"}},"id":74567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1086:17:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$73763","typeString":"contract IRouter"}},"id":74568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1104:7:157","memberName":"baseFee","nodeType":"MemberAccess","referencedDeclaration":73707,"src":"1086:25:157","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint128_$","typeString":"function () view external returns (uint128)"}},"id":74569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1086:27:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"1068:45:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":74574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74572,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74563,"src":"1146:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":74573,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74547,"src":"1156:6:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"1146:16:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74571,"name":"_retrieveValueToRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75066,"src":"1123:22:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":74575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1123:40:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74576,"nodeType":"ExpressionStatement","src":"1123:40:157"},{"assignments":[74578],"declarations":[{"constant":false,"id":74578,"mutability":"mutable","name":"id","nameLocation":"1182:2:157","nodeType":"VariableDeclaration","scope":74601,"src":"1174:10:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74577,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1174:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":74590,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":74584,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1222:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$75105","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$75105","typeString":"contract Mirror"}],"id":74583,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1214:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74582,"name":"address","nodeType":"ElementaryTypeName","src":"1214:7:157","typeDescriptions":{}}},"id":74585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1214:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1229:7:157","subExpression":{"id":74586,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74526,"src":"1229:5:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":74580,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1197:3:157","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":74581,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1201:12:157","memberName":"encodePacked","nodeType":"MemberAccess","src":"1197:16:157","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":74588,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1197:40:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":74579,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1187:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":74589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1187:51:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1174:64:157"},{"eventCall":{"arguments":[{"id":74592,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74578,"src":"1279:2:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"id":74593,"name":"_source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75029,"src":"1283:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":74594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1283:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74595,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74545,"src":"1294:8:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":74596,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74547,"src":"1304:6:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74591,"name":"MessageQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73217,"src":"1254:24:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":74597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1254:57:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74598,"nodeType":"EmitStatement","src":"1249:62:157"},{"expression":{"id":74599,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74578,"src":"1329:2:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":74551,"id":74600,"nodeType":"Return","src":"1322:9:157"}]},"baseFunctions":[73303],"functionSelector":"d5624222","implemented":true,"kind":"function","modifiers":[],"name":"sendMessage","nameLocation":"902:11:157","parameters":{"id":74548,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74545,"mutability":"mutable","name":"_payload","nameLocation":"929:8:157","nodeType":"VariableDeclaration","scope":74602,"src":"914:23:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":74544,"name":"bytes","nodeType":"ElementaryTypeName","src":"914:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":74547,"mutability":"mutable","name":"_value","nameLocation":"947:6:157","nodeType":"VariableDeclaration","scope":74602,"src":"939:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":74546,"name":"uint128","nodeType":"ElementaryTypeName","src":"939:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"913:41:157"},"returnParameters":{"id":74551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74550,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":74602,"src":"981:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74549,"name":"bytes32","nodeType":"ElementaryTypeName","src":"981:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"980:9:157"},"scope":75105,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":74645,"nodeType":"FunctionDefinition","src":"1344:356:157","nodes":[],"body":{"id":74644,"nodeType":"Block","src":"1441:259:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74612,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74524,"src":"1459:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":74615,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1480:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74614,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1472:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74613,"name":"address","nodeType":"ElementaryTypeName","src":"1472:7:157","typeDescriptions":{}}},"id":74616,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1472:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1459:23:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726f6772616d206973207465726d696e61746564","id":74618,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1484:23:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""},"value":"program is terminated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""}],"id":74611,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1451:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1451:57:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74620,"nodeType":"ExpressionStatement","src":"1451:57:157"},{"assignments":[74622],"declarations":[{"constant":false,"id":74622,"mutability":"mutable","name":"baseFee","nameLocation":"1527:7:157","nodeType":"VariableDeclaration","scope":74644,"src":"1519:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":74621,"name":"uint128","nodeType":"ElementaryTypeName","src":"1519:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":74629,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":74624,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74543,"src":"1545:6:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":74625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1545:8:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74623,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73763,"src":"1537:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$73763_$","typeString":"type(contract IRouter)"}},"id":74626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1537:17:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$73763","typeString":"contract IRouter"}},"id":74627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1555:7:157","memberName":"baseFee","nodeType":"MemberAccess","referencedDeclaration":73707,"src":"1537:25:157","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint128_$","typeString":"function () view external returns (uint128)"}},"id":74628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1537:27:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"1519:45:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":74633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74631,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74622,"src":"1597:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":74632,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74608,"src":"1607:6:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"1597:16:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74630,"name":"_retrieveValueToRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75066,"src":"1574:22:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":74634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1574:40:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74635,"nodeType":"ExpressionStatement","src":"1574:40:157"},{"eventCall":{"arguments":[{"id":74637,"name":"_repliedTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74604,"src":"1653:10:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"id":74638,"name":"_source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75029,"src":"1665:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":74639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1665:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74640,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74606,"src":"1676:8:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":74641,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74608,"src":"1686:6:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74636,"name":"ReplyQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73228,"src":"1630:22:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":74642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1630:63:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74643,"nodeType":"EmitStatement","src":"1625:68:157"}]},"baseFunctions":[73312],"functionSelector":"29336f39","implemented":true,"kind":"function","modifiers":[],"name":"sendReply","nameLocation":"1353:9:157","parameters":{"id":74609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74604,"mutability":"mutable","name":"_repliedTo","nameLocation":"1371:10:157","nodeType":"VariableDeclaration","scope":74645,"src":"1363:18:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74603,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1363:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":74606,"mutability":"mutable","name":"_payload","nameLocation":"1398:8:157","nodeType":"VariableDeclaration","scope":74645,"src":"1383:23:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":74605,"name":"bytes","nodeType":"ElementaryTypeName","src":"1383:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":74608,"mutability":"mutable","name":"_value","nameLocation":"1416:6:157","nodeType":"VariableDeclaration","scope":74645,"src":"1408:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":74607,"name":"uint128","nodeType":"ElementaryTypeName","src":"1408:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1362:61:157"},"returnParameters":{"id":74610,"nodeType":"ParameterList","parameters":[],"src":"1441:0:157"},"scope":75105,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":74667,"nodeType":"FunctionDefinition","src":"1706:184:157","nodes":[],"body":{"id":74666,"nodeType":"Block","src":"1755:135:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74651,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74524,"src":"1773:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":74654,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1794:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74653,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1786:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74652,"name":"address","nodeType":"ElementaryTypeName","src":"1786:7:157","typeDescriptions":{}}},"id":74655,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1786:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1773:23:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726f6772616d206973207465726d696e61746564","id":74657,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1798:23:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""},"value":"program is terminated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""}],"id":74650,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1765:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1765:57:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74659,"nodeType":"ExpressionStatement","src":"1765:57:157"},{"eventCall":{"arguments":[{"id":74661,"name":"_claimedId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74647,"src":"1861:10:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"id":74662,"name":"_source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75029,"src":"1873:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":74663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1873:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":74660,"name":"ValueClaimingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73235,"src":"1838:22:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":74664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1838:45:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74665,"nodeType":"EmitStatement","src":"1833:50:157"}]},"baseFunctions":[73317],"functionSelector":"91d5a64c","implemented":true,"kind":"function","modifiers":[],"name":"claimValue","nameLocation":"1715:10:157","parameters":{"id":74648,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74647,"mutability":"mutable","name":"_claimedId","nameLocation":"1734:10:157","nodeType":"VariableDeclaration","scope":74667,"src":"1726:18:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74646,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1726:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1725:20:157"},"returnParameters":{"id":74649,"nodeType":"ParameterList","parameters":[],"src":"1755:0:157"},"scope":75105,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":74691,"nodeType":"FunctionDefinition","src":"1896:235:157","nodes":[],"body":{"id":74690,"nodeType":"Block","src":"1961:170:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74673,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74524,"src":"1979:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":74676,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2000:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74675,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1992:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74674,"name":"address","nodeType":"ElementaryTypeName","src":"1992:7:157","typeDescriptions":{}}},"id":74677,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1992:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1979:23:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726f6772616d206973207465726d696e61746564","id":74679,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2004:23:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""},"value":"program is terminated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""}],"id":74672,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1971:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1971:57:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74681,"nodeType":"ExpressionStatement","src":"1971:57:157"},{"expression":{"arguments":[{"id":74683,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74669,"src":"2062:6:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74682,"name":"_retrieveValueToRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75066,"src":"2039:22:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":74684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2039:30:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74685,"nodeType":"ExpressionStatement","src":"2039:30:157"},{"eventCall":{"arguments":[{"id":74687,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74669,"src":"2117:6:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74686,"name":"ExecutableBalanceTopUpRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73240,"src":"2085:31:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":74688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2085:39:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74689,"nodeType":"EmitStatement","src":"2080:44:157"}]},"baseFunctions":[73322],"functionSelector":"704ed542","implemented":true,"kind":"function","modifiers":[],"name":"executableBalanceTopUp","nameLocation":"1905:22:157","parameters":{"id":74670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74669,"mutability":"mutable","name":"_value","nameLocation":"1936:6:157","nodeType":"VariableDeclaration","scope":74691,"src":"1928:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":74668,"name":"uint128","nodeType":"ElementaryTypeName","src":"1928:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1927:16:157"},"returnParameters":{"id":74671,"nodeType":"ParameterList","parameters":[],"src":"1961:0:157"},"scope":75105,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":74730,"nodeType":"FunctionDefinition","src":"2137:267:157","nodes":[],"body":{"id":74729,"nodeType":"Block","src":"2176:228:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74695,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74524,"src":"2194:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":74698,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2215:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74697,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2207:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74696,"name":"address","nodeType":"ElementaryTypeName","src":"2207:7:157","typeDescriptions":{}}},"id":74699,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2207:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2194:23:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726f6772616d206973206e6f74207465726d696e61746564","id":74701,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2219:27:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_645ea9267b04b6ac53df8eea2c448cbffac59a494197543c99a5f296932bd588","typeString":"literal_string \"program is not terminated\""},"value":"program is not terminated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_645ea9267b04b6ac53df8eea2c448cbffac59a494197543c99a5f296932bd588","typeString":"literal_string \"program is not terminated\""}],"id":74694,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"2186:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2186:61:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74703,"nodeType":"ExpressionStatement","src":"2186:61:157"},{"assignments":[74705],"declarations":[{"constant":false,"id":74705,"mutability":"mutable","name":"balance","nameLocation":"2266:7:157","nodeType":"VariableDeclaration","scope":74729,"src":"2258:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74704,"name":"uint256","nodeType":"ElementaryTypeName","src":"2258:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":74720,"initialValue":{"arguments":[{"arguments":[{"id":74717,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2340:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$75105","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$75105","typeString":"contract Mirror"}],"id":74716,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2332:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74715,"name":"address","nodeType":"ElementaryTypeName","src":"2332:7:157","typeDescriptions":{}}},"id":74718,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2332:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":74708,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74543,"src":"2297:6:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":74709,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2297:8:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74707,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73763,"src":"2289:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$73763_$","typeString":"type(contract IRouter)"}},"id":74710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2289:17:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$73763","typeString":"contract IRouter"}},"id":74711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2307:11:157","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":73607,"src":"2289:29:157","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74712,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2289:31:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74706,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73774,"src":"2276:12:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$73774_$","typeString":"type(contract IWrappedVara)"}},"id":74713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2276:45:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73774","typeString":"contract IWrappedVara"}},"id":74714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2322:9:157","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":43097,"src":"2276:55:157","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":74719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2276:70:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2258:88:157"},{"expression":{"arguments":[{"id":74722,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74524,"src":"2369:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":74725,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74705,"src":"2388:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":74724,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2380:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":74723,"name":"uint128","nodeType":"ElementaryTypeName","src":"2380:7:157","typeDescriptions":{}}},"id":74726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2380:16:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74721,"name":"_sendValueTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75104,"src":"2356:12:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":74727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2356:41:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74728,"nodeType":"ExpressionStatement","src":"2356:41:157"}]},"baseFunctions":[73325],"functionSelector":"60302d24","implemented":true,"kind":"function","modifiers":[],"name":"sendValueToInheritor","nameLocation":"2146:20:157","parameters":{"id":74692,"nodeType":"ParameterList","parameters":[],"src":"2166:2:157"},"returnParameters":{"id":74693,"nodeType":"ParameterList","parameters":[],"src":"2176:0:157"},"scope":75105,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":74751,"nodeType":"FunctionDefinition","src":"2462:202:157","nodes":[],"body":{"id":74750,"nodeType":"Block","src":"2525:139:157","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":74739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74737,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74522,"src":"2539:9:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":74738,"name":"newStateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74732,"src":"2552:12:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2539:25:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74749,"nodeType":"IfStatement","src":"2535:123:157","trueBody":{"id":74748,"nodeType":"Block","src":"2566:92:157","statements":[{"expression":{"id":74742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":74740,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74522,"src":"2580:9:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":74741,"name":"newStateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74732,"src":"2592:12:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2580:24:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":74743,"nodeType":"ExpressionStatement","src":"2580:24:157"},{"eventCall":{"arguments":[{"id":74745,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74522,"src":"2637:9:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":74744,"name":"StateChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73206,"src":"2624:12:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":74746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2624:23:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74747,"nodeType":"EmitStatement","src":"2619:28:157"}]}}]},"baseFunctions":[73330],"functionSelector":"8ea59e1d","implemented":true,"kind":"function","modifiers":[{"id":74735,"kind":"modifierInvocation","modifierName":{"id":74734,"name":"onlyRouter","nameLocations":["2514:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":75010,"src":"2514:10:157"},"nodeType":"ModifierInvocation","src":"2514:10:157"}],"name":"updateState","nameLocation":"2471:11:157","parameters":{"id":74733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74732,"mutability":"mutable","name":"newStateHash","nameLocation":"2491:12:157","nodeType":"VariableDeclaration","scope":74751,"src":"2483:20:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74731,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2483:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2482:22:157"},"returnParameters":{"id":74736,"nodeType":"ParameterList","parameters":[],"src":"2525:0:157"},"scope":75105,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":74766,"nodeType":"FunctionDefinition","src":"2756:134:157","nodes":[],"body":{"id":74765,"nodeType":"Block","src":"2818:72:157","nodes":[],"statements":[{"expression":{"id":74760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":74758,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74524,"src":"2828:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":74759,"name":"_inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74753,"src":"2840:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2828:22:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":74761,"nodeType":"ExpressionStatement","src":"2828:22:157"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":74762,"name":"sendValueToInheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74730,"src":"2861:20:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":74763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2861:22:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74764,"nodeType":"ExpressionStatement","src":"2861:22:157"}]},"baseFunctions":[73335],"functionSelector":"12b22256","implemented":true,"kind":"function","modifiers":[{"id":74756,"kind":"modifierInvocation","modifierName":{"id":74755,"name":"onlyRouter","nameLocations":["2807:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":75010,"src":"2807:10:157"},"nodeType":"ModifierInvocation","src":"2807:10:157"}],"name":"setInheritor","nameLocation":"2765:12:157","parameters":{"id":74754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74753,"mutability":"mutable","name":"_inheritor","nameLocation":"2786:10:157","nodeType":"VariableDeclaration","scope":74766,"src":"2778:18:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74752,"name":"address","nodeType":"ElementaryTypeName","src":"2778:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2777:20:157"},"returnParameters":{"id":74757,"nodeType":"ParameterList","parameters":[],"src":"2818:0:157"},"scope":75105,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":74821,"nodeType":"FunctionDefinition","src":"2896:754:157","nodes":[],"body":{"id":74820,"nodeType":"Block","src":"3009:641:157","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74779,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74528,"src":"3113:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":74782,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3132:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74781,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3124:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74780,"name":"address","nodeType":"ElementaryTypeName","src":"3124:7:157","typeDescriptions":{}}},"id":74783,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3124:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3113:21:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74812,"nodeType":"IfStatement","src":"3109:479:157","trueBody":{"id":74811,"nodeType":"Block","src":"3136:452:157","statements":[{"assignments":[74786],"declarations":[{"constant":false,"id":74786,"mutability":"mutable","name":"callData","nameLocation":"3163:8:157","nodeType":"VariableDeclaration","scope":74811,"src":"3150:21:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":74785,"name":"bytes","nodeType":"ElementaryTypeName","src":"3150:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":74797,"initialValue":{"arguments":[{"expression":{"expression":{"id":74789,"name":"IMirrorDecoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73422,"src":"3213:14:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirrorDecoder_$73422_$","typeString":"type(contract IMirrorDecoder)"}},"id":74790,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3228:13:157","memberName":"onMessageSent","nodeType":"MemberAccess","referencedDeclaration":73408,"src":"3213:28:157","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_bytes32_$_t_address_$_t_bytes_calldata_ptr_$_t_uint128_$returns$__$","typeString":"function IMirrorDecoder.onMessageSent(bytes32,address,bytes calldata,uint128)"}},"id":74791,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3242:8:157","memberName":"selector","nodeType":"MemberAccess","src":"3213:37:157","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":74792,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74768,"src":"3252:2:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":74793,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74770,"src":"3256:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74794,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74772,"src":"3269:7:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":74795,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74774,"src":"3278:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":74787,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3190:3:157","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":74788,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3194:18:157","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"3190:22:157","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":74796,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3190:94:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3150:134:157"},{"assignments":[74799,null],"declarations":[{"constant":false,"id":74799,"mutability":"mutable","name":"success","nameLocation":"3398:7:157","nodeType":"VariableDeclaration","scope":74811,"src":"3393:12:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":74798,"name":"bool","nodeType":"ElementaryTypeName","src":"3393:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":74806,"initialValue":{"arguments":[{"id":74804,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74786,"src":"3437:8:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":74800,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74528,"src":"3410:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":74801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3418:4:157","memberName":"call","nodeType":"MemberAccess","src":"3410:12:157","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":74803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["gas"],"nodeType":"FunctionCallOptions","options":[{"hexValue":"3530305f303030","id":74802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3428:7:157","typeDescriptions":{"typeIdentifier":"t_rational_500000_by_1","typeString":"int_const 500000"},"value":"500_000"}],"src":"3410:26:157","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":74805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3410:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3392:54:157"},{"condition":{"id":74807,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74799,"src":"3465:7:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74810,"nodeType":"IfStatement","src":"3461:117:157","trueBody":{"id":74809,"nodeType":"Block","src":"3474:104:157","statements":[{"functionReturnParameters":74778,"id":74808,"nodeType":"Return","src":"3557:7:157"}]}}]}},{"eventCall":{"arguments":[{"id":74814,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74768,"src":"3611:2:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":74815,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74770,"src":"3615:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74816,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74772,"src":"3628:7:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":74817,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74774,"src":"3637:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74813,"name":"Message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73251,"src":"3603:7:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":74818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3603:40:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74819,"nodeType":"EmitStatement","src":"3598:45:157"}]},"baseFunctions":[73346],"functionSelector":"c2df6009","implemented":true,"kind":"function","modifiers":[{"id":74777,"kind":"modifierInvocation","modifierName":{"id":74776,"name":"onlyRouter","nameLocations":["2998:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":75010,"src":"2998:10:157"},"nodeType":"ModifierInvocation","src":"2998:10:157"}],"name":"messageSent","nameLocation":"2905:11:157","parameters":{"id":74775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74768,"mutability":"mutable","name":"id","nameLocation":"2925:2:157","nodeType":"VariableDeclaration","scope":74821,"src":"2917:10:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74767,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2917:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":74770,"mutability":"mutable","name":"destination","nameLocation":"2937:11:157","nodeType":"VariableDeclaration","scope":74821,"src":"2929:19:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74769,"name":"address","nodeType":"ElementaryTypeName","src":"2929:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":74772,"mutability":"mutable","name":"payload","nameLocation":"2965:7:157","nodeType":"VariableDeclaration","scope":74821,"src":"2950:22:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":74771,"name":"bytes","nodeType":"ElementaryTypeName","src":"2950:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":74774,"mutability":"mutable","name":"value","nameLocation":"2982:5:157","nodeType":"VariableDeclaration","scope":74821,"src":"2974:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":74773,"name":"uint128","nodeType":"ElementaryTypeName","src":"2974:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"2916:72:157"},"returnParameters":{"id":74778,"nodeType":"ParameterList","parameters":[],"src":"3009:0:157"},"scope":75105,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":74884,"nodeType":"FunctionDefinition","src":"3656:775:157","nodes":[],"body":{"id":74883,"nodeType":"Block","src":"3810:621:157","nodes":[],"statements":[{"expression":{"arguments":[{"id":74837,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74823,"src":"3833:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74838,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74827,"src":"3846:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74836,"name":"_sendValueTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75104,"src":"3820:12:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":74839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3820:32:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74840,"nodeType":"ExpressionStatement","src":"3820:32:157"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74841,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74528,"src":"3867:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":74844,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3886:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74843,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3878:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74842,"name":"address","nodeType":"ElementaryTypeName","src":"3878:7:157","typeDescriptions":{}}},"id":74845,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3878:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3867:21:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74875,"nodeType":"IfStatement","src":"3863:505:157","trueBody":{"id":74874,"nodeType":"Block","src":"3890:478:157","statements":[{"assignments":[74848],"declarations":[{"constant":false,"id":74848,"mutability":"mutable","name":"callData","nameLocation":"3917:8:157","nodeType":"VariableDeclaration","scope":74874,"src":"3904:21:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":74847,"name":"bytes","nodeType":"ElementaryTypeName","src":"3904:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":74860,"initialValue":{"arguments":[{"expression":{"expression":{"id":74851,"name":"IMirrorDecoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73422,"src":"3968:14:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirrorDecoder_$73422_$","typeString":"type(contract IMirrorDecoder)"}},"id":74852,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3983:11:157","memberName":"onReplySent","nodeType":"MemberAccess","referencedDeclaration":73421,"src":"3968:26:157","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_bytes_calldata_ptr_$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function IMirrorDecoder.onReplySent(address,bytes calldata,uint128,bytes32,bytes4)"}},"id":74853,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3995:8:157","memberName":"selector","nodeType":"MemberAccess","src":"3968:35:157","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":74854,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74823,"src":"4005:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74855,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74825,"src":"4018:7:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":74856,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74827,"src":"4027:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":74857,"name":"replyTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74829,"src":"4034:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":74858,"name":"replyCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74831,"src":"4043:9:157","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":74849,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3928:3:157","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":74850,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3932:18:157","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"3928:22:157","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":74859,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3928:138:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3904:162:157"},{"assignments":[74862,null],"declarations":[{"constant":false,"id":74862,"mutability":"mutable","name":"success","nameLocation":"4180:7:157","nodeType":"VariableDeclaration","scope":74874,"src":"4175:12:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":74861,"name":"bool","nodeType":"ElementaryTypeName","src":"4175:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":74869,"initialValue":{"arguments":[{"id":74867,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74848,"src":"4219:8:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":74863,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74528,"src":"4192:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":74864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4200:4:157","memberName":"call","nodeType":"MemberAccess","src":"4192:12:157","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":74866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["gas"],"nodeType":"FunctionCallOptions","options":[{"hexValue":"3530305f303030","id":74865,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4210:7:157","typeDescriptions":{"typeIdentifier":"t_rational_500000_by_1","typeString":"int_const 500000"},"value":"500_000"}],"src":"4192:26:157","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":74868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4192:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4174:54:157"},{"condition":{"id":74870,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74862,"src":"4247:7:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74873,"nodeType":"IfStatement","src":"4243:115:157","trueBody":{"id":74872,"nodeType":"Block","src":"4256:102:157","statements":[{"functionReturnParameters":74835,"id":74871,"nodeType":"Return","src":"4337:7:157"}]}}]}},{"eventCall":{"arguments":[{"id":74877,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74825,"src":"4389:7:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":74878,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74827,"src":"4398:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":74879,"name":"replyTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74829,"src":"4405:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":74880,"name":"replyCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74831,"src":"4414:9:157","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":74876,"name":"Reply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73262,"src":"4383:5:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function (bytes memory,uint128,bytes32,bytes4)"}},"id":74881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4383:41:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74882,"nodeType":"EmitStatement","src":"4378:46:157"}]},"baseFunctions":[73359],"functionSelector":"c78bde77","implemented":true,"kind":"function","modifiers":[{"id":74834,"kind":"modifierInvocation","modifierName":{"id":74833,"name":"onlyRouter","nameLocations":["3795:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":75010,"src":"3795:10:157"},"nodeType":"ModifierInvocation","src":"3795:10:157"}],"name":"replySent","nameLocation":"3665:9:157","parameters":{"id":74832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74823,"mutability":"mutable","name":"destination","nameLocation":"3683:11:157","nodeType":"VariableDeclaration","scope":74884,"src":"3675:19:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74822,"name":"address","nodeType":"ElementaryTypeName","src":"3675:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":74825,"mutability":"mutable","name":"payload","nameLocation":"3711:7:157","nodeType":"VariableDeclaration","scope":74884,"src":"3696:22:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":74824,"name":"bytes","nodeType":"ElementaryTypeName","src":"3696:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":74827,"mutability":"mutable","name":"value","nameLocation":"3728:5:157","nodeType":"VariableDeclaration","scope":74884,"src":"3720:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":74826,"name":"uint128","nodeType":"ElementaryTypeName","src":"3720:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":74829,"mutability":"mutable","name":"replyTo","nameLocation":"3743:7:157","nodeType":"VariableDeclaration","scope":74884,"src":"3735:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74828,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3735:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":74831,"mutability":"mutable","name":"replyCode","nameLocation":"3759:9:157","nodeType":"VariableDeclaration","scope":74884,"src":"3752:16:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":74830,"name":"bytes4","nodeType":"ElementaryTypeName","src":"3752:6:157","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"3674:95:157"},"returnParameters":{"id":74835,"nodeType":"ParameterList","parameters":[],"src":"3810:0:157"},"scope":75105,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":74906,"nodeType":"FunctionDefinition","src":"4437:192:157","nodes":[],"body":{"id":74905,"nodeType":"Block","src":"4534:95:157","nodes":[],"statements":[{"expression":{"arguments":[{"id":74896,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74888,"src":"4557:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74897,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74890,"src":"4570:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74895,"name":"_sendValueTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75104,"src":"4544:12:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":74898,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4544:32:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74899,"nodeType":"ExpressionStatement","src":"4544:32:157"},{"eventCall":{"arguments":[{"id":74901,"name":"claimedId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74886,"src":"4605:9:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":74902,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74890,"src":"4616:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74900,"name":"ValueClaimed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73269,"src":"4592:12:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint128_$returns$__$","typeString":"function (bytes32,uint128)"}},"id":74903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4592:30:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74904,"nodeType":"EmitStatement","src":"4587:35:157"}]},"baseFunctions":[73368],"functionSelector":"14503e51","implemented":true,"kind":"function","modifiers":[{"id":74893,"kind":"modifierInvocation","modifierName":{"id":74892,"name":"onlyRouter","nameLocations":["4523:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":75010,"src":"4523:10:157"},"nodeType":"ModifierInvocation","src":"4523:10:157"}],"name":"valueClaimed","nameLocation":"4446:12:157","parameters":{"id":74891,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74886,"mutability":"mutable","name":"claimedId","nameLocation":"4467:9:157","nodeType":"VariableDeclaration","scope":74906,"src":"4459:17:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74885,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4459:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":74888,"mutability":"mutable","name":"destination","nameLocation":"4486:11:157","nodeType":"VariableDeclaration","scope":74906,"src":"4478:19:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74887,"name":"address","nodeType":"ElementaryTypeName","src":"4478:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":74890,"mutability":"mutable","name":"value","nameLocation":"4507:5:157","nodeType":"VariableDeclaration","scope":74906,"src":"4499:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":74889,"name":"uint128","nodeType":"ElementaryTypeName","src":"4499:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"4458:55:157"},"returnParameters":{"id":74894,"nodeType":"ParameterList","parameters":[],"src":"4534:0:157"},"scope":75105,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":74947,"nodeType":"FunctionDefinition","src":"4635:363:157","nodes":[],"body":{"id":74946,"nodeType":"Block","src":"4716:282:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74916,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74526,"src":"4734:5:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":74917,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4743:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4734:10:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6465636f64657220636f756c64206f6e6c792062652063726561746564206265666f726520696e6974206d657373616765","id":74919,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4746:51:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_6179111dcaf1477c3041b02777f68e6f9b47b46bbab14442425a87a2628d248f","typeString":"literal_string \"decoder could only be created before init message\""},"value":"decoder could only be created before init message"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6179111dcaf1477c3041b02777f68e6f9b47b46bbab14442425a87a2628d248f","typeString":"literal_string \"decoder could only be created before init message\""}],"id":74915,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4726:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4726:72:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74921,"nodeType":"ExpressionStatement","src":"4726:72:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74923,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74528,"src":"4816:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":74926,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4835:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74925,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4827:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74924,"name":"address","nodeType":"ElementaryTypeName","src":"4827:7:157","typeDescriptions":{}}},"id":74927,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4827:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4816:21:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6465636f64657220636f756c64206f6e6c792062652063726561746564206f6e6365","id":74929,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4839:36:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_2e378c5f64e230407f2ea4b317edbd32f061bf14b6bede40dc75fef40a2c3f34","typeString":"literal_string \"decoder could only be created once\""},"value":"decoder could only be created once"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2e378c5f64e230407f2ea4b317edbd32f061bf14b6bede40dc75fef40a2c3f34","typeString":"literal_string \"decoder could only be created once\""}],"id":74922,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4808:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4808:68:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74931,"nodeType":"ExpressionStatement","src":"4808:68:157"},{"expression":{"id":74938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":74932,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74528,"src":"4887:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":74935,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74908,"src":"4923:14:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74936,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74910,"src":"4939:4:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":74933,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41840,"src":"4897:6:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Clones_$41840_$","typeString":"type(library Clones)"}},"id":74934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4904:18:157","memberName":"cloneDeterministic","nodeType":"MemberAccess","referencedDeclaration":41758,"src":"4897:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$","typeString":"function (address,bytes32) returns (address)"}},"id":74937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4897:47:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4887:57:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":74939,"nodeType":"ExpressionStatement","src":"4887:57:157"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74941,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74528,"src":"4970:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74940,"name":"IMirrorDecoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73422,"src":"4955:14:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirrorDecoder_$73422_$","typeString":"type(contract IMirrorDecoder)"}},"id":74942,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4955:23:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirrorDecoder_$73422","typeString":"contract IMirrorDecoder"}},"id":74943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4979:10:157","memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":73392,"src":"4955:34:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$__$","typeString":"function () external"}},"id":74944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4955:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74945,"nodeType":"ExpressionStatement","src":"4955:36:157"}]},"baseFunctions":[73375],"functionSelector":"5b1b84f7","implemented":true,"kind":"function","modifiers":[{"id":74913,"kind":"modifierInvocation","modifierName":{"id":74912,"name":"onlyRouter","nameLocations":["4705:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":75010,"src":"4705:10:157"},"nodeType":"ModifierInvocation","src":"4705:10:157"}],"name":"createDecoder","nameLocation":"4644:13:157","parameters":{"id":74911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74908,"mutability":"mutable","name":"implementation","nameLocation":"4666:14:157","nodeType":"VariableDeclaration","scope":74947,"src":"4658:22:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74907,"name":"address","nodeType":"ElementaryTypeName","src":"4658:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":74910,"mutability":"mutable","name":"salt","nameLocation":"4690:4:157","nodeType":"VariableDeclaration","scope":74947,"src":"4682:12:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74909,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4682:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4657:38:157"},"returnParameters":{"id":74914,"nodeType":"ParameterList","parameters":[],"src":"4716:0:157"},"scope":75105,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":74997,"nodeType":"FunctionDefinition","src":"5004:566:157","nodes":[],"body":{"id":74996,"nodeType":"Block","src":"5147:423:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74961,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74526,"src":"5165:5:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":74962,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5174:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5165:10:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e6974206d657373616765206d7573742062652063726561746564206265666f726520616e79206f7468657273","id":74964,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5177:48:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_f66d837affa62c092147eee2ea617e19f402b656aab0578ab0acad8d1e9a6341","typeString":"literal_string \"init message must be created before any others\""},"value":"init message must be created before any others"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f66d837affa62c092147eee2ea617e19f402b656aab0578ab0acad8d1e9a6341","typeString":"literal_string \"init message must be created before any others\""}],"id":74960,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"5157:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5157:69:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74966,"nodeType":"ExpressionStatement","src":"5157:69:157"},{"assignments":[74968],"declarations":[{"constant":false,"id":74968,"mutability":"mutable","name":"initNonce","nameLocation":"5335:9:157","nodeType":"VariableDeclaration","scope":74996,"src":"5327:17:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74967,"name":"uint256","nodeType":"ElementaryTypeName","src":"5327:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":74971,"initialValue":{"id":74970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5347:7:157","subExpression":{"id":74969,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74526,"src":"5347:5:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5327:27:157"},{"assignments":[74973],"declarations":[{"constant":false,"id":74973,"mutability":"mutable","name":"id","nameLocation":"5372:2:157","nodeType":"VariableDeclaration","scope":74996,"src":"5364:10:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74972,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5364:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":74984,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":74979,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5412:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$75105","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$75105","typeString":"contract Mirror"}],"id":74978,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5404:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74977,"name":"address","nodeType":"ElementaryTypeName","src":"5404:7:157","typeDescriptions":{}}},"id":74980,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5404:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74981,"name":"initNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74968,"src":"5419:9:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":74975,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5387:3:157","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":74976,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5391:12:157","memberName":"encodePacked","nodeType":"MemberAccess","src":"5387:16:157","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":74982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5387:42:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":74974,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5377:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":74983,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5377:53:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5364:66:157"},{"eventCall":{"arguments":[{"id":74986,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74955,"src":"5478:17:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74985,"name":"ExecutableBalanceTopUpRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73240,"src":"5446:31:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":74987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5446:50:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74988,"nodeType":"EmitStatement","src":"5441:55:157"},{"eventCall":{"arguments":[{"id":74990,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74973,"src":"5536:2:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":74991,"name":"source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74949,"src":"5540:6:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74992,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74951,"src":"5548:7:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":74993,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74953,"src":"5557:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74989,"name":"MessageQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73217,"src":"5511:24:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":74994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5511:52:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74995,"nodeType":"EmitStatement","src":"5506:57:157"}]},"baseFunctions":[73386],"functionSelector":"de1dd2e0","implemented":true,"kind":"function","modifiers":[{"id":74958,"kind":"modifierInvocation","modifierName":{"id":74957,"name":"onlyRouter","nameLocations":["5132:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":75010,"src":"5132:10:157"},"nodeType":"ModifierInvocation","src":"5132:10:157"}],"name":"initMessage","nameLocation":"5013:11:157","parameters":{"id":74956,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74949,"mutability":"mutable","name":"source","nameLocation":"5033:6:157","nodeType":"VariableDeclaration","scope":74997,"src":"5025:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74948,"name":"address","nodeType":"ElementaryTypeName","src":"5025:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":74951,"mutability":"mutable","name":"payload","nameLocation":"5056:7:157","nodeType":"VariableDeclaration","scope":74997,"src":"5041:22:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":74950,"name":"bytes","nodeType":"ElementaryTypeName","src":"5041:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":74953,"mutability":"mutable","name":"value","nameLocation":"5073:5:157","nodeType":"VariableDeclaration","scope":74997,"src":"5065:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":74952,"name":"uint128","nodeType":"ElementaryTypeName","src":"5065:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":74955,"mutability":"mutable","name":"executableBalance","nameLocation":"5088:17:157","nodeType":"VariableDeclaration","scope":74997,"src":"5080:25:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":74954,"name":"uint128","nodeType":"ElementaryTypeName","src":"5080:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"5024:82:157"},"returnParameters":{"id":74959,"nodeType":"ParameterList","parameters":[],"src":"5147:0:157"},"scope":75105,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75010,"nodeType":"ModifierDefinition","src":"5576:131:157","nodes":[],"body":{"id":75009,"nodeType":"Block","src":"5598:109:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75000,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5616:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5620:6:157","memberName":"sender","nodeType":"MemberAccess","src":"5616:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":75002,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74543,"src":"5630:6:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":75003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5630:8:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5616:22:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6f6e6c7920726f7574657220636f6e747261637420697320656c696769626c6520666f72206f7065726174696f6e","id":75005,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5640:48:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_64d2230e88596248f8ffc0c335875e1b5d3e7ef288684b79c0f3f409577b1f91","typeString":"literal_string \"only router contract is eligible for operation\""},"value":"only router contract is eligible for operation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_64d2230e88596248f8ffc0c335875e1b5d3e7ef288684b79c0f3f409577b1f91","typeString":"literal_string \"only router contract is eligible for operation\""}],"id":74999,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"5608:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5608:81:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75007,"nodeType":"ExpressionStatement","src":"5608:81:157"},{"id":75008,"nodeType":"PlaceholderStatement","src":"5699:1:157"}]},"name":"onlyRouter","nameLocation":"5585:10:157","parameters":{"id":74998,"nodeType":"ParameterList","parameters":[],"src":"5595:2:157"},"virtual":false,"visibility":"internal"},{"id":75029,"nodeType":"FunctionDefinition","src":"5747:182:157","nodes":[],"body":{"id":75028,"nodeType":"Block","src":"5797:132:157","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75015,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5811:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5815:6:157","memberName":"sender","nodeType":"MemberAccess","src":"5811:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":75017,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74528,"src":"5825:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5811:21:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":75026,"nodeType":"Block","src":"5881:42:157","statements":[{"expression":{"expression":{"id":75023,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5902:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5906:6:157","memberName":"sender","nodeType":"MemberAccess","src":"5902:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75014,"id":75025,"nodeType":"Return","src":"5895:17:157"}]},"id":75027,"nodeType":"IfStatement","src":"5807:116:157","trueBody":{"id":75022,"nodeType":"Block","src":"5834:41:157","statements":[{"expression":{"expression":{"id":75019,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"5855:2:157","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":75020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5858:6:157","memberName":"origin","nodeType":"MemberAccess","src":"5855:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75014,"id":75021,"nodeType":"Return","src":"5848:16:157"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_source","nameLocation":"5756:7:157","parameters":{"id":75011,"nodeType":"ParameterList","parameters":[],"src":"5763:2:157"},"returnParameters":{"id":75014,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75013,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75029,"src":"5788:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75012,"name":"address","nodeType":"ElementaryTypeName","src":"5788:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5787:9:157"},"scope":75105,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":75066,"nodeType":"FunctionDefinition","src":"5935:332:157","nodes":[],"body":{"id":75065,"nodeType":"Block","src":"5991:276:157","nodes":[],"statements":[{"assignments":[75035],"declarations":[{"constant":false,"id":75035,"mutability":"mutable","name":"routerAddress","nameLocation":"6009:13:157","nodeType":"VariableDeclaration","scope":75065,"src":"6001:21:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75034,"name":"address","nodeType":"ElementaryTypeName","src":"6001:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":75038,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75036,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74543,"src":"6025:6:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":75037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6025:8:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6001:32:157"},{"assignments":[75041],"declarations":[{"constant":false,"id":75041,"mutability":"mutable","name":"wrappedVara","nameLocation":"6057:11:157","nodeType":"VariableDeclaration","scope":75065,"src":"6044:24:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73774","typeString":"contract IWrappedVara"},"typeName":{"id":75040,"nodeType":"UserDefinedTypeName","pathNode":{"id":75039,"name":"IWrappedVara","nameLocations":["6044:12:157"],"nodeType":"IdentifierPath","referencedDeclaration":73774,"src":"6044:12:157"},"referencedDeclaration":73774,"src":"6044:12:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73774","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"id":75049,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":75044,"name":"routerAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75035,"src":"6092:13:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75043,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73763,"src":"6084:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$73763_$","typeString":"type(contract IRouter)"}},"id":75045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6084:22:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$73763","typeString":"contract IRouter"}},"id":75046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6107:11:157","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":73607,"src":"6084:34:157","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":75047,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6084:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75042,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73774,"src":"6071:12:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$73774_$","typeString":"type(contract IWrappedVara)"}},"id":75048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6071:50:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73774","typeString":"contract IWrappedVara"}},"nodeType":"VariableDeclarationStatement","src":"6044:77:157"},{"assignments":[75051],"declarations":[{"constant":false,"id":75051,"mutability":"mutable","name":"success","nameLocation":"6137:7:157","nodeType":"VariableDeclaration","scope":75065,"src":"6132:12:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75050,"name":"bool","nodeType":"ElementaryTypeName","src":"6132:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":75059,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":75054,"name":"_source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75029,"src":"6172:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":75055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6172:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75056,"name":"routerAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75035,"src":"6183:13:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75057,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75031,"src":"6198:6:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":75052,"name":"wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75041,"src":"6147:11:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73774","typeString":"contract IWrappedVara"}},"id":75053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6159:12:157","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":43139,"src":"6147:24:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":75058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6147:58:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"6132:73:157"},{"expression":{"arguments":[{"id":75061,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75051,"src":"6224:7:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207265747269657665205756617261","id":75062,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6233:26:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""},"value":"failed to retrieve WVara"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""}],"id":75060,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6216:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6216:44:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75064,"nodeType":"ExpressionStatement","src":"6216:44:157"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_retrieveValueToRouter","nameLocation":"5944:22:157","parameters":{"id":75032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75031,"mutability":"mutable","name":"_value","nameLocation":"5975:6:157","nodeType":"VariableDeclaration","scope":75066,"src":"5967:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75030,"name":"uint128","nodeType":"ElementaryTypeName","src":"5967:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"5966:16:157"},"returnParameters":{"id":75033,"nodeType":"ParameterList","parameters":[],"src":"5991:0:157"},"scope":75105,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":75104,"nodeType":"FunctionDefinition","src":"6273:316:157","nodes":[],"body":{"id":75103,"nodeType":"Block","src":"6339:250:157","nodes":[],"statements":[{"assignments":[75075],"declarations":[{"constant":false,"id":75075,"mutability":"mutable","name":"wrappedVara","nameLocation":"6362:11:157","nodeType":"VariableDeclaration","scope":75103,"src":"6349:24:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73774","typeString":"contract IWrappedVara"},"typeName":{"id":75074,"nodeType":"UserDefinedTypeName","pathNode":{"id":75073,"name":"IWrappedVara","nameLocations":["6349:12:157"],"nodeType":"IdentifierPath","referencedDeclaration":73774,"src":"6349:12:157"},"referencedDeclaration":73774,"src":"6349:12:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73774","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"id":75084,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":75078,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74543,"src":"6397:6:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":75079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6397:8:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75077,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73763,"src":"6389:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$73763_$","typeString":"type(contract IRouter)"}},"id":75080,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6389:17:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$73763","typeString":"contract IRouter"}},"id":75081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6407:11:157","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":73607,"src":"6389:29:157","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":75082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6389:31:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75076,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73774,"src":"6376:12:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$73774_$","typeString":"type(contract IWrappedVara)"}},"id":75083,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6376:45:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73774","typeString":"contract IWrappedVara"}},"nodeType":"VariableDeclarationStatement","src":"6349:72:157"},{"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":75087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75085,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75070,"src":"6436:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":75086,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6445:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6436:10:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75102,"nodeType":"IfStatement","src":"6432:151:157","trueBody":{"id":75101,"nodeType":"Block","src":"6448:135:157","statements":[{"assignments":[75089],"declarations":[{"constant":false,"id":75089,"mutability":"mutable","name":"success","nameLocation":"6467:7:157","nodeType":"VariableDeclaration","scope":75101,"src":"6462:12:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75088,"name":"bool","nodeType":"ElementaryTypeName","src":"6462:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":75095,"initialValue":{"arguments":[{"id":75092,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75068,"src":"6498:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75093,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75070,"src":"6511:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":75090,"name":"wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75075,"src":"6477:11:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73774","typeString":"contract IWrappedVara"}},"id":75091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6489:8:157","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":43107,"src":"6477:20:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":75094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6477:40:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"6462:55:157"},{"expression":{"arguments":[{"id":75097,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75089,"src":"6540:7:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f2073656e64205756617261","id":75098,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6549:22:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_8ec034c4b2ac47d4229390ddbbb751ebe057cb836b00500cd6f2ff2a9adb713a","typeString":"literal_string \"failed to send WVara\""},"value":"failed to send WVara"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8ec034c4b2ac47d4229390ddbbb751ebe057cb836b00500cd6f2ff2a9adb713a","typeString":"literal_string \"failed to send WVara\""}],"id":75096,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6532:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6532:40:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75100,"nodeType":"ExpressionStatement","src":"6532:40:157"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_sendValueTo","nameLocation":"6282:12:157","parameters":{"id":75071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75068,"mutability":"mutable","name":"destination","nameLocation":"6303:11:157","nodeType":"VariableDeclaration","scope":75104,"src":"6295:19:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75067,"name":"address","nodeType":"ElementaryTypeName","src":"6295:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75070,"mutability":"mutable","name":"value","nameLocation":"6324:5:157","nodeType":"VariableDeclaration","scope":75104,"src":"6316:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75069,"name":"uint128","nodeType":"ElementaryTypeName","src":"6316:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"6294:36:157"},"returnParameters":{"id":75072,"nodeType":"ParameterList","parameters":[],"src":"6339:0:157"},"scope":75105,"stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[{"baseName":{"id":74519,"name":"IMirror","nameLocations":["422:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":73387,"src":"422:7:157"},"id":74520,"nodeType":"InheritanceSpecifier","src":"422:7:157"}],"canonicalName":"Mirror","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[75105,73387],"name":"Mirror","nameLocation":"412:6:157","scope":75106,"usedErrors":[43912,43918],"usedEvents":[73206,73217,73228,73235,73240,73251,73262,73269]}],"license":"UNLICENSED"},"id":157} \ No newline at end of file +{"abi":[{"type":"function","name":"claimValue","inputs":[{"name":"_claimedId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"createDecoder","inputs":[{"name":"implementation","type":"address","internalType":"address"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"decoder","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"executableBalanceTopUp","inputs":[{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"inheritor","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"initMessage","inputs":[{"name":"source","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"executableBalance","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"messageSent","inputs":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"nonce","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"replySent","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"replyTo","type":"bytes32","internalType":"bytes32"},{"name":"replyCode","type":"bytes4","internalType":"bytes4"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"router","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"sendMessage","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"payable"},{"type":"function","name":"sendReply","inputs":[{"name":"_repliedTo","type":"bytes32","internalType":"bytes32"},{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"sendValueToInheritor","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setInheritor","inputs":[{"name":"_inheritor","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stateHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"updateState","inputs":[{"name":"newStateHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"valueClaimed","inputs":[{"name":"claimedId","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"ExecutableBalanceTopUpRequested","inputs":[{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Message","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destination","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"MessageQueueingRequested","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Reply","inputs":[{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"},{"name":"replyTo","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"replyCode","type":"bytes4","indexed":true,"internalType":"bytes4"}],"anonymous":false},{"type":"event","name":"ReplyQueueingRequested","inputs":[{"name":"repliedTo","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"StateChanged","inputs":[{"name":"stateHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ValueClaimed","inputs":[{"name":"claimedId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"ValueClaimingRequested","inputs":[{"name":"claimedId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"FailedDeployment","inputs":[]},{"type":"error","name":"InsufficientBalance","inputs":[{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x608080604052346015576111d7908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f803560e01c806312b222561461092557806314503e51146108aa57806329336f391461080757806336a52a18146107df5780635b1b84f71461062e57806360302d2414610615578063701da98e146105f8578063704ed5421461058b5780638ea59e1d1461052657806391d5a64c146104be5780639cb3300514610495578063affed0e014610477578063c2df600914610414578063c78bde7714610394578063d562422214610298578063de1dd2e0146101045763f887ea40146100d5575f80fd5b3461010157806003193601126101015760206100ef610ed9565b6040516001600160a01b039091168152f35b80fd5b50346101015760803660031901126101015761011e610979565b60243567ffffffffffffffff81116102945761013e9036906004016109d1565b906101476109a5565b926101506109bb565b9361016c6001600160a01b03610164610ed9565b1633146109ff565b6002549081610238577f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c6947f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c0542366676020846101c761023296610eb7565b6002556040513060601b6bffffffffffffffffffffffff1916838201908152601481019290925261020581603484015b03601f198101835282610af4565b519020986001600160801b0360405191168152a16040516001600160a01b03909416969394859485610ac6565b0390a280f35b60405162461bcd60e51b815260206004820152602e60248201527f696e6974206d657373616765206d75737420626520637265617465642062656660448201526d6f726520616e79206f746865727360901b6064820152608490fd5b8280fd5b5060403660031901126101015760043567ffffffffffffffff8111610390576102c59036906004016109d1565b91602435906001600160801b038216820361010157506001546020937f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c691610316906001600160a01b031615610a62565b61031f8361105f565b60025461032b81610eb7565b6002556040513060601b6bffffffffffffffffffffffff1916878201908152601481019290925261035f81603484016101f7565b519020936103856001600160a01b03610376611185565b16946040519384938885610ac6565b0390a2604051908152f35b5080fd5b50346101015760a0366003190112610101576103ae610979565b60243567ffffffffffffffff8111610294576103ce9036906004016109d1565b90916103d86109a5565b608435926001600160e01b0319841684036104105761040d946104046001600160a01b03610164610ed9565b60643593610da4565b80f35b8580fd5b50346101015760803660031901126101015761042e61098f565b6044359067ffffffffffffffff82116102945761045261040d9236906004016109d1565b9061045b6109bb565b9261046f6001600160a01b03610164610ed9565b600435610ccc565b50346101015780600319360112610101576020600254604051908152f35b50346101015780600319360112610101576003546040516001600160a01b039091168152602090f35b5034610101576020366003190112610101576001546104e6906001600160a01b031615610a62565b6001600160a01b036104f6611185565b167f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c497860206040516004358152a280f35b50346101015760203660031901126101015760043561054e6001600160a01b03610164610ed9565b8082540361055a575080f35b6020817f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c080930928455604051908152a180f35b506020366003190112610101576004356001600160801b03811690818103610294577f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c054236667916105ee6020926105e960018060a01b036001541615610a62565b61105f565b604051908152a180f35b503461010157806003193601126101015760209054604051908152f35b503461010157806003193601126101015761040d610b49565b503461071d57604036600319011261071d57610648610979565b61065b6001600160a01b03610164610ed9565b600254610780576003546001600160a01b03166107305780763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff6e5af43d82803e903d91602b57fd5bf39360881c16175f5260781b1760205260018060a01b03602435603760095ff516801561072157600380546001600160a01b03191682179055803b1561071d575f809160046040518094819363204a7f0760e21b83525af1801561071257610704575080f35b61071091505f90610af4565b005b6040513d5f823e3d90fd5b5f80fd5b63b06ebf3d60e01b5f5260045ffd5b60405162461bcd60e51b815260206004820152602260248201527f6465636f64657220636f756c64206f6e6c792062652063726561746564206f6e604482015261636560f01b6064820152608490fd5b60405162461bcd60e51b815260206004820152603160248201527f6465636f64657220636f756c64206f6e6c792062652063726561746564206265604482015270666f726520696e6974206d65737361676560781b6064820152608490fd5b3461071d575f36600319011261071d576001546040516001600160a01b039091168152602090f35b606036600319011261071d5760243567ffffffffffffffff811161071d576108547fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f9136906004016109d1565b61085f9291926109a5565b600154909390610878906001600160a01b031615610a62565b6108818461105f565b6108a56001600160a01b03610894611185565b169460405193849360043585610ac6565b0390a2005b3461071d57606036600319011261071d577fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd6578360406108e661098f565b61090c6108f16109a5565b9182906109076001600160a01b03610164610ed9565b610f34565b6001600160801b038251916004358352166020820152a1005b3461071d57602036600319011261071d5761093e610979565b6109516001600160a01b03610164610ed9565b60018060a01b03166bffffffffffffffffffffffff60a01b6001541617600155610710610b49565b600435906001600160a01b038216820361071d57565b602435906001600160a01b038216820361071d57565b604435906001600160801b038216820361071d57565b606435906001600160801b038216820361071d57565b9181601f8401121561071d5782359167ffffffffffffffff831161071d576020838186019501011161071d57565b15610a0657565b60405162461bcd60e51b815260206004820152602e60248201527f6f6e6c7920726f7574657220636f6e747261637420697320656c696769626c6560448201526d103337b91037b832b930ba34b7b760911b6064820152608490fd5b15610a6957565b60405162461bcd60e51b81526020600482015260156024820152741c1c9bd9dc985b481a5cc81d195c9b5a5b985d1959605a1b6044820152606490fd5b908060209392818452848401375f828201840152601f01601f1916010190565b92604092610aed916001600160801b03939796978652606060208701526060860191610aa6565b9416910152565b90601f8019910116810190811067ffffffffffffffff821117610b1657604052565b634e487b7160e01b5f52604160045260245ffd5b9081602091031261071d57516001600160a01b038116810361071d5790565b6001546001600160a01b03168015610c485760049060206001600160a01b03610b70610ed9565b166040519384809263088f50cf60e41b82525afa918215610712576024926020915f91610c1b575b506040516370a0823160e01b815230600482015293849182906001600160a01b03165afa918215610712575f92610be0575b506001600160801b03610bde921690610f34565b565b91506020823d602011610c13575b81610bfb60209383610af4565b8101031261071d579051906001600160801b03610bca565b3d9150610bee565b610c3b9150823d8411610c41575b610c338183610af4565b810190610b2a565b5f610b98565b503d610c29565b60405162461bcd60e51b815260206004820152601960248201527f70726f6772616d206973206e6f74207465726d696e61746564000000000000006044820152606490fd5b3d15610cc7573d9067ffffffffffffffff8211610b165760405191610cbc601f8201601f191660200184610af4565b82523d5f602084013e565b606090565b600354909493906001600160a01b031680610d23575b507f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f801177393610d1e9160405194859460018060a01b03169785610ac6565b0390a2565b5f80916040518260208201916374fad4ef60e01b83528a602482015260018060a01b038816604482015260806064820152610d8381610d6660a482018a8d610aa6565b6001600160801b038d16608483015203601f198101835282610af4565b51926207a120f1610d92610c8d565b50610d9d575f610ce2565b5050505050565b94909294610db28682610f34565b6003546001600160a01b03169081610e24575b50507fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c6936001600160801b03610e08604051958695606087526060870191610aa6565b9616602084015260408301526001600160e01b031916930390a2565b604051639649744960e01b602082019081526001600160a01b03909216602482015260a060448201525f92839290918390610e9c818c6001600160801b03610e7060c484018d8f610aa6565b91166064830152608482018d90526001600160e01b03198a1660a483015203601f198101835282610af4565b51926207a120f1610eab610c8d565b50610d9d575f80610dc5565b5f198114610ec55760010190565b634e487b7160e01b5f52601160045260245ffd5b6040516303e21fa960e61b8152602081600481305afa908115610712575f91610f00575090565b610f19915060203d602011610c4157610c338183610af4565b90565b9081602091031261071d5751801515810361071d5790565b60049160206001600160a01b03610f49610ed9565b166040519485809263088f50cf60e41b82525afa928315610712575f93611035575b506001600160801b031680610f7f57505050565b60405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183915f91165af1908115610712575f91611006575b5015610fca57565b60405162461bcd60e51b81526020600482015260146024820152736661696c656420746f2073656e6420575661726160601b6044820152606490fd5b611028915060203d60201161102e575b6110208183610af4565b810190610f1c565b5f610fc2565b503d611016565b6001600160801b039193506110589060203d602011610c4157610c338183610af4565b9290610f6b565b6001600160801b0316806110705750565b6001600160a01b03611080610ed9565b60405163088f50cf60e41b81529116602082600481845afa918215610712576020926064915f91611168575b505f6110b6611185565b6040516323b872dd60e01b81526001600160a01b039182166004820152602481019590955260448501969096529294859384929091165af1908115610712575f91611149575b501561110457565b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b611162915060203d60201161102e576110208183610af4565b5f6110fc565b61117f9150843d8611610c4157610c338183610af4565b5f6110ac565b600354336001600160a01b039091160361119d573290565b339056fea2646970667358221220f5697e311c10f416592928134d8a84bf8e6414ec9396a610ef592b6157d24ef064736f6c634300081a0033","sourceMap":"403:6111:157:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f803560e01c806312b222561461092557806314503e51146108aa57806329336f391461080757806336a52a18146107df5780635b1b84f71461062e57806360302d2414610615578063701da98e146105f8578063704ed5421461058b5780638ea59e1d1461052657806391d5a64c146104be5780639cb3300514610495578063affed0e014610477578063c2df600914610414578063c78bde7714610394578063d562422214610298578063de1dd2e0146101045763f887ea40146100d5575f80fd5b3461010157806003193601126101015760206100ef610ed9565b6040516001600160a01b039091168152f35b80fd5b50346101015760803660031901126101015761011e610979565b60243567ffffffffffffffff81116102945761013e9036906004016109d1565b906101476109a5565b926101506109bb565b9361016c6001600160a01b03610164610ed9565b1633146109ff565b6002549081610238577f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c6947f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c0542366676020846101c761023296610eb7565b6002556040513060601b6bffffffffffffffffffffffff1916838201908152601481019290925261020581603484015b03601f198101835282610af4565b519020986001600160801b0360405191168152a16040516001600160a01b03909416969394859485610ac6565b0390a280f35b60405162461bcd60e51b815260206004820152602e60248201527f696e6974206d657373616765206d75737420626520637265617465642062656660448201526d6f726520616e79206f746865727360901b6064820152608490fd5b8280fd5b5060403660031901126101015760043567ffffffffffffffff8111610390576102c59036906004016109d1565b91602435906001600160801b038216820361010157506001546020937f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c691610316906001600160a01b031615610a62565b61031f8361105f565b60025461032b81610eb7565b6002556040513060601b6bffffffffffffffffffffffff1916878201908152601481019290925261035f81603484016101f7565b519020936103856001600160a01b03610376611185565b16946040519384938885610ac6565b0390a2604051908152f35b5080fd5b50346101015760a0366003190112610101576103ae610979565b60243567ffffffffffffffff8111610294576103ce9036906004016109d1565b90916103d86109a5565b608435926001600160e01b0319841684036104105761040d946104046001600160a01b03610164610ed9565b60643593610da4565b80f35b8580fd5b50346101015760803660031901126101015761042e61098f565b6044359067ffffffffffffffff82116102945761045261040d9236906004016109d1565b9061045b6109bb565b9261046f6001600160a01b03610164610ed9565b600435610ccc565b50346101015780600319360112610101576020600254604051908152f35b50346101015780600319360112610101576003546040516001600160a01b039091168152602090f35b5034610101576020366003190112610101576001546104e6906001600160a01b031615610a62565b6001600160a01b036104f6611185565b167f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c497860206040516004358152a280f35b50346101015760203660031901126101015760043561054e6001600160a01b03610164610ed9565b8082540361055a575080f35b6020817f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c080930928455604051908152a180f35b506020366003190112610101576004356001600160801b03811690818103610294577f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c054236667916105ee6020926105e960018060a01b036001541615610a62565b61105f565b604051908152a180f35b503461010157806003193601126101015760209054604051908152f35b503461010157806003193601126101015761040d610b49565b503461071d57604036600319011261071d57610648610979565b61065b6001600160a01b03610164610ed9565b600254610780576003546001600160a01b03166107305780763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff6e5af43d82803e903d91602b57fd5bf39360881c16175f5260781b1760205260018060a01b03602435603760095ff516801561072157600380546001600160a01b03191682179055803b1561071d575f809160046040518094819363204a7f0760e21b83525af1801561071257610704575080f35b61071091505f90610af4565b005b6040513d5f823e3d90fd5b5f80fd5b63b06ebf3d60e01b5f5260045ffd5b60405162461bcd60e51b815260206004820152602260248201527f6465636f64657220636f756c64206f6e6c792062652063726561746564206f6e604482015261636560f01b6064820152608490fd5b60405162461bcd60e51b815260206004820152603160248201527f6465636f64657220636f756c64206f6e6c792062652063726561746564206265604482015270666f726520696e6974206d65737361676560781b6064820152608490fd5b3461071d575f36600319011261071d576001546040516001600160a01b039091168152602090f35b606036600319011261071d5760243567ffffffffffffffff811161071d576108547fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f9136906004016109d1565b61085f9291926109a5565b600154909390610878906001600160a01b031615610a62565b6108818461105f565b6108a56001600160a01b03610894611185565b169460405193849360043585610ac6565b0390a2005b3461071d57606036600319011261071d577fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd6578360406108e661098f565b61090c6108f16109a5565b9182906109076001600160a01b03610164610ed9565b610f34565b6001600160801b038251916004358352166020820152a1005b3461071d57602036600319011261071d5761093e610979565b6109516001600160a01b03610164610ed9565b60018060a01b03166bffffffffffffffffffffffff60a01b6001541617600155610710610b49565b600435906001600160a01b038216820361071d57565b602435906001600160a01b038216820361071d57565b604435906001600160801b038216820361071d57565b606435906001600160801b038216820361071d57565b9181601f8401121561071d5782359167ffffffffffffffff831161071d576020838186019501011161071d57565b15610a0657565b60405162461bcd60e51b815260206004820152602e60248201527f6f6e6c7920726f7574657220636f6e747261637420697320656c696769626c6560448201526d103337b91037b832b930ba34b7b760911b6064820152608490fd5b15610a6957565b60405162461bcd60e51b81526020600482015260156024820152741c1c9bd9dc985b481a5cc81d195c9b5a5b985d1959605a1b6044820152606490fd5b908060209392818452848401375f828201840152601f01601f1916010190565b92604092610aed916001600160801b03939796978652606060208701526060860191610aa6565b9416910152565b90601f8019910116810190811067ffffffffffffffff821117610b1657604052565b634e487b7160e01b5f52604160045260245ffd5b9081602091031261071d57516001600160a01b038116810361071d5790565b6001546001600160a01b03168015610c485760049060206001600160a01b03610b70610ed9565b166040519384809263088f50cf60e41b82525afa918215610712576024926020915f91610c1b575b506040516370a0823160e01b815230600482015293849182906001600160a01b03165afa918215610712575f92610be0575b506001600160801b03610bde921690610f34565b565b91506020823d602011610c13575b81610bfb60209383610af4565b8101031261071d579051906001600160801b03610bca565b3d9150610bee565b610c3b9150823d8411610c41575b610c338183610af4565b810190610b2a565b5f610b98565b503d610c29565b60405162461bcd60e51b815260206004820152601960248201527f70726f6772616d206973206e6f74207465726d696e61746564000000000000006044820152606490fd5b3d15610cc7573d9067ffffffffffffffff8211610b165760405191610cbc601f8201601f191660200184610af4565b82523d5f602084013e565b606090565b600354909493906001600160a01b031680610d23575b507f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f801177393610d1e9160405194859460018060a01b03169785610ac6565b0390a2565b5f80916040518260208201916374fad4ef60e01b83528a602482015260018060a01b038816604482015260806064820152610d8381610d6660a482018a8d610aa6565b6001600160801b038d16608483015203601f198101835282610af4565b51926207a120f1610d92610c8d565b50610d9d575f610ce2565b5050505050565b94909294610db28682610f34565b6003546001600160a01b03169081610e24575b50507fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c6936001600160801b03610e08604051958695606087526060870191610aa6565b9616602084015260408301526001600160e01b031916930390a2565b604051639649744960e01b602082019081526001600160a01b03909216602482015260a060448201525f92839290918390610e9c818c6001600160801b03610e7060c484018d8f610aa6565b91166064830152608482018d90526001600160e01b03198a1660a483015203601f198101835282610af4565b51926207a120f1610eab610c8d565b50610d9d575f80610dc5565b5f198114610ec55760010190565b634e487b7160e01b5f52601160045260245ffd5b6040516303e21fa960e61b8152602081600481305afa908115610712575f91610f00575090565b610f19915060203d602011610c4157610c338183610af4565b90565b9081602091031261071d5751801515810361071d5790565b60049160206001600160a01b03610f49610ed9565b166040519485809263088f50cf60e41b82525afa928315610712575f93611035575b506001600160801b031680610f7f57505050565b60405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183915f91165af1908115610712575f91611006575b5015610fca57565b60405162461bcd60e51b81526020600482015260146024820152736661696c656420746f2073656e6420575661726160601b6044820152606490fd5b611028915060203d60201161102e575b6110208183610af4565b810190610f1c565b5f610fc2565b503d611016565b6001600160801b039193506110589060203d602011610c4157610c338183610af4565b9290610f6b565b6001600160801b0316806110705750565b6001600160a01b03611080610ed9565b60405163088f50cf60e41b81529116602082600481845afa918215610712576020926064915f91611168575b505f6110b6611185565b6040516323b872dd60e01b81526001600160a01b039182166004820152602481019590955260448501969096529294859384929091165af1908115610712575f91611149575b501561110457565b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b611162915060203d60201161102e576110208183610af4565b5f6110fc565b61117f9150843d8611610c4157610c338183610af4565b5f6110ac565b600354336001600160a01b039091160361119d573290565b339056fea2646970667358221220f5697e311c10f416592928134d8a84bf8e6414ec9396a610ef592b6157d24ef064736f6c634300081a0033","sourceMap":"403:6111:157:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;403:6111:157;;;;;;;;;;;;;;;;-1:-1:-1;;403:6111:157;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;5478:81;-1:-1:-1;;;;;5500:8:157;;:::i;:::-;403:6111;5486:10;:22;5478:81;:::i;:::-;5035:5;403:6111;5035:10;;403:6111;;5381:52;5217:7;5316:50;403:6111;5217:7;;5381:52;5217:7;;:::i;:::-;5035:5;403:6111;;;5282:4;403:6111;;-1:-1:-1;;403:6111:157;5257:42;;;403:6111;;;;;;;;;;5257:42;403:6111;;;;5257:42;;1132:40;;5257:42;;;;;;:::i;:::-;403:6111;5247:53;;403:6111;-1:-1:-1;;;;;403:6111:157;;;;;;5316:50;403:6111;;-1:-1:-1;;;;;403:6111:157;;;;;;;;;5381:52;:::i;:::-;;;;403:6111;;;;;-1:-1:-1;;;403:6111:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;403:6111:157;;;;;;;;;;;;-1:-1:-1;403:6111:157;;-1:-1:-1;;403:6111:157;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;403:6111:157;;;;;;-1:-1:-1;403:6111:157;;;;1189:57;;1000;;-1:-1:-1;;;;;403:6111:157;1008:23;1000:57;:::i;:::-;1091:6;;;:::i;:::-;1164:7;403:6111;1164:7;;;:::i;:::-;;403:6111;;;1157:4;403:6111;;-1:-1:-1;;403:6111:157;1132:40;;;403:6111;;;;;;;;;;1132:40;403:6111;;;;1132:40;403:6111;1132:40;403:6111;1122:51;;;1189:57;-1:-1:-1;;;;;1218:9:157;;:::i;:::-;403:6111;;;;1189:57;;;;;;:::i;:::-;;;;403:6111;;;;;;;;;;;;;;;;;-1:-1:-1;;403:6111:157;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;403:6111:157;;;;;;5569:1;;5478:81;-1:-1:-1;;;;;5500:8:157;;:::i;5478:81::-;403:6111;;5569:1;;:::i;:::-;403:6111;;;;;;;;;;;;;-1:-1:-1;;403:6111:157;;;;;;:::i;:::-;;;;;;;;;;5569:1;403:6111;;;;;;:::i;:::-;;;;:::i;:::-;;5478:81;-1:-1:-1;;;;;5500:8:157;;:::i;5478:81::-;403:6111;;5569:1;:::i;403:6111::-;;;;;;;;;;;;;;568:20;403:6111;;;;;;;;;;;;;;;;;;;;604:22;403:6111;;;-1:-1:-1;;;;;403:6111:157;;;;;;;;;;;;;;;-1:-1:-1;;403:6111:157;;;;;;1635:57;;-1:-1:-1;;;;;403:6111:157;1643:23;1635:57;:::i;:::-;-1:-1:-1;;;;;1743:9:157;;:::i;:::-;403:6111;1708:45;403:6111;;;;;;;1708:45;403:6111;;;;;;;;;-1:-1:-1;;403:6111:157;;;;;;5478:81;-1:-1:-1;;;;;5500:8:157;;:::i;5478:81::-;403:6111;;;2409:25;2405:123;;403:6111;;;2405:123;403:6111;;2494:23;403:6111;;;;;;;;2494:23;403:6111;;;-1:-1:-1;403:6111:157;;-1:-1:-1;;403:6111:157;;;;;;-1:-1:-1;;;;;403:6111:157;;;;;;;;1955:39;403:6111;1932:6;403:6111;;1841:57;403:6111;;;;;1849:9;403:6111;;1849:23;1841:57;:::i;:::-;1932:6;:::i;:::-;403:6111;;;;;1955:39;403:6111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;403:6111:157;;;;;;:::i;:::-;5478:81;-1:-1:-1;;;;;5500:8:157;;:::i;5478:81::-;4604:5;403:6111;;;4686:7;403:6111;-1:-1:-1;;;;;403:6111:157;;;3743:569:44;;;;;;;;;403:6111:157;3743:569:44;;;;403:6111:157;3743:569:44;403:6111:157;;;;;;;3743:569:44;;403:6111:157;3743:569:44;403:6111:157;4325:22:44;;4321:85;;4686:7:157;403:6111;;-1:-1:-1;;;;;;403:6111:157;;;;;4825:36;;;;;403:6111;;;;;;;;;;;;;4825:36;;;;;;;;;;403:6111;;;4825:36;;;;403:6111;4825:36;;:::i;:::-;403:6111;4825:36;403:6111;;;;;;;;;4825:36;403:6111;;;4321:85:44;4370:25;;;403:6111:157;4370:25:44;403:6111:157;;4370:25:44;403:6111:157;;;-1:-1:-1;;;403:6111:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;403:6111:157;;;;;;;;;;-1:-1:-1;;;403:6111:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;403:6111:157;;;;;;;;;;;;;-1:-1:-1;;403:6111:157;;;;;;;;-1:-1:-1;;;;;403:6111:157;;;;;;;;;;;-1:-1:-1;;403:6111:157;;;;;;;;;;;;1500:63;403:6111;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;1386:57;;-1:-1:-1;;;;;403:6111:157;1394:23;1386:57;:::i;:::-;1477:6;;;:::i;:::-;1500:63;-1:-1:-1;;;;;1535:9:157;;:::i;:::-;403:6111;;;;;;;;;1500:63;;:::i;:::-;;;;403:6111;;;;;;;-1:-1:-1;;403:6111:157;;;;4462:30;403:6111;;;:::i;:::-;4440:5;403:6111;;:::i;:::-;;;;5478:81;-1:-1:-1;;;;;5500:8:157;;:::i;5478:81::-;4440:5;:::i;:::-;-1:-1:-1;;;;;403:6111:157;;;;;;;;;;;;4462:30;403:6111;;;;;;;-1:-1:-1;;403:6111:157;;;;;;:::i;:::-;5478:81;-1:-1:-1;;;;;5500:8:157;;:::i;5478:81::-;403:6111;;;;;;;;;2698:22;403:6111;;;2698:22;403:6111;2698:22;;:::i;403:6111::-;;;;-1:-1:-1;;;;;403:6111:157;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;403:6111:157;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;403:6111:157;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;403:6111:157;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;403:6111:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;403:6111:157;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;403:6111:157;;;;;;;;;;;;-1:-1:-1;;;403:6111:157;;;;;;;;;;;;;;;;;;;;-1:-1:-1;403:6111:157;;;;;;;;-1:-1:-1;;403:6111:157;;;;:::o;:::-;;;;;;-1:-1:-1;;;;;403:6111:157;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;1132:40;;403:6111;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;403:6111:157;;;;;-1:-1:-1;403:6111:157;;;;;;;;;;;-1:-1:-1;;;;;403:6111:157;;;;;;;:::o;2007:267::-;403:6111;;-1:-1:-1;;;;;403:6111:157;2064:23;;403:6111;;2159:31;;;-1:-1:-1;;;;;2167:8:157;;:::i;:::-;403:6111;;;;;;;;;;2159:31;;;;;;;;;2146:70;2159:31;;;-1:-1:-1;2159:31:157;;;2007:267;-1:-1:-1;403:6111:157;;-1:-1:-1;;;2146:70:157;;2210:4;2159:31;2146:70;;403:6111;;;;;;-1:-1:-1;;;;;403:6111:157;2146:70;;;;;;;-1:-1:-1;2146:70:157;;;2007:267;403:6111;-1:-1:-1;;;;;2250:16:157;403:6111;;2250:16;;:::i;:::-;2007:267::o;2146:70::-;;;2159:31;2146:70;;2159:31;2146:70;;;;;;2159:31;2146:70;;;:::i;:::-;;;403:6111;;;;;;;-1:-1:-1;;;;;2146:70:157;;;;;-1:-1:-1;2146:70:157;;2159:31;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;403:6111;;;-1:-1:-1;;;403:6111:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1132:40;403:6111;;-1:-1:-1;;403:6111:157;;;;;:::i;:::-;;;;-1:-1:-1;403:6111:157;;;;:::o;:::-;;;:::o;2766:754::-;2983:7;403:6111;2766:754;;;;-1:-1:-1;;;;;403:6111:157;;2979:479;;2766:754;403:6111;3473:40;403:6111;3473:40;403:6111;;;;;;;;;;;;3473:40;;;:::i;:::-;;;;2766:754::o;2979:479::-;-1:-1:-1;403:6111:157;;;;3060:94;;;;3083:37;;;;3060:94;;;;;;403:6111;;;;;;;;;;;;;;;;;3060:94;403:6111;;;;;;;;:::i;:::-;-1:-1:-1;;;;;403:6111:157;;;;;;3060:94;1132:40;;3060:94;;;;;;:::i;:::-;3280:36;;3298:7;3280:36;;;:::i;:::-;;3331:117;;2979:479;;;3331:117;3427:7;;;;;:::o;3526:775::-;;;;;3716:5;;;;:::i;:::-;3737:7;403:6111;-1:-1:-1;;;;;403:6111:157;;;3733:505;;3526:775;403:6111;;4253:41;403:6111;-1:-1:-1;;;;;403:6111:157;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;;403:6111:157;;4253:41;;;3526:775::o;3733:505::-;403:6111;;-1:-1:-1;;;3798:138:157;;;;;;-1:-1:-1;;;;;403:6111:157;;;3798:138;;;403:6111;;;;;;-1:-1:-1;;;;403:6111:157;;-1:-1:-1;;3798:138:157;403:6111;;-1:-1:-1;;;;;403:6111:157;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;403:6111:157;;;;;;3798:138;-1:-1:-1;;3798:138:157;;;;;;:::i;:::-;4062:36;;4080:7;4062:36;;;:::i;:::-;;4113:115;;3733:505;;;;403:6111;-1:-1:-1;;403:6111:157;;;;;;;:::o;:::-;;;;;;;;;;;;666:108;403:6111;;-1:-1:-1;;;731:36:157;;;403:6111;731:36;403:6111;752:4;731:36;;;;;;;-1:-1:-1;731:36:157;;;724:43;666:108;:::o;731:36::-;;;;;;;;;;;;;;:::i;:::-;666:108;:::o;403:6111::-;;;;;;;;;;;;;;;;;;:::o;6196:316::-;6312:31;;;-1:-1:-1;;;;;6320:8:157;;:::i;:::-;403:6111;;;;;;;;;;6312:31;;;;;;;;;-1:-1:-1;6312:31:157;;;6196:316;403:6111;-1:-1:-1;;;;;403:6111:157;6359:10;6355:151;;6196:316;;;:::o;6355:151::-;403:6111;;-1:-1:-1;;;6400:40:157;;-1:-1:-1;;;;;403:6111:157;;;6312:31;6400:40;;403:6111;;;;;;;;;6312:31;;403:6111;;6400:40;;403:6111;;-1:-1:-1;;403:6111:157;6400:40;;;;;;;-1:-1:-1;6400:40:157;;;6355:151;403:6111;;;;6196:316::o;403:6111::-;;;-1:-1:-1;;;403:6111:157;;6312:31;;403:6111;;;;;;;;-1:-1:-1;;;6400:40:157;403:6111;;;;;;6400:40;;;;6312:31;6400:40;6312:31;6400:40;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;6312:31;-1:-1:-1;;;;;6312:31:157;;;;;;;;;;;;;;;:::i;:::-;;;;;5805:385;-1:-1:-1;;;;;403:6111:157;5875:11;5871:313;;5805:385;:::o;5871:313::-;-1:-1:-1;;;;;5926:8:157;;:::i;:::-;403:6111;;-1:-1:-1;;;5989:36:157;;403:6111;;5989:36;403:6111;5989:36;403:6111;;5989:36;;;;;;;;;6056:58;5989:36;5885:1;5989:36;;;5871:313;6081:9;5885:1;6081:9;;:::i;:::-;403:6111;;-1:-1:-1;;;6056:58:157;;-1:-1:-1;;;;;403:6111:157;;;5989:36;6056:58;;403:6111;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;403:6111:157;6056:58;;;;;;;5885:1;6056:58;;;5871:313;403:6111;;;;5805:385::o;403:6111::-;;;-1:-1:-1;;;403:6111:157;;5989:36;;403:6111;;;;;;;;;;;;;6056:58;;403:6111;6056:58;;;;5989:36;6056:58;5989:36;6056:58;;;;;;;:::i;:::-;;;;5989:36;;;;;;;;;;;;;;:::i;:::-;;;;5617:182;5695:7;403:6111;5681:10;-1:-1:-1;;;;;403:6111:157;;;5681:21;403:6111;;5725:9;5718:16;:::o;5677:116::-;5681:10;5765:17;:::o","linkReferences":{}},"methodIdentifiers":{"claimValue(bytes32)":"91d5a64c","createDecoder(address,bytes32)":"5b1b84f7","decoder()":"9cb33005","executableBalanceTopUp(uint128)":"704ed542","inheritor()":"36a52a18","initMessage(address,bytes,uint128,uint128)":"de1dd2e0","messageSent(bytes32,address,bytes,uint128)":"c2df6009","nonce()":"affed0e0","replySent(address,bytes,uint128,bytes32,bytes4)":"c78bde77","router()":"f887ea40","sendMessage(bytes,uint128)":"d5624222","sendReply(bytes32,bytes,uint128)":"29336f39","sendValueToInheritor()":"60302d24","setInheritor(address)":"12b22256","stateHash()":"701da98e","updateState(bytes32)":"8ea59e1d","valueClaimed(bytes32,address,uint128)":"14503e51"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ExecutableBalanceTopUpRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"Message\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"MessageQueueingRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"replyTo\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"replyCode\",\"type\":\"bytes4\"}],\"name\":\"Reply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"repliedTo\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ReplyQueueingRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateHash\",\"type\":\"bytes32\"}],\"name\":\"StateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ValueClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"}],\"name\":\"ValueClaimingRequested\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_claimedId\",\"type\":\"bytes32\"}],\"name\":\"claimValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"createDecoder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decoder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"executableBalanceTopUp\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inheritor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"executableBalance\",\"type\":\"uint128\"}],\"name\":\"initMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"messageSent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"internalType\":\"bytes32\",\"name\":\"replyTo\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"replyCode\",\"type\":\"bytes4\"}],\"name\":\"replySent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"router\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_repliedTo\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"sendReply\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sendValueToInheritor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_inheritor\",\"type\":\"address\"}],\"name\":\"setInheritor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stateHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"newStateHash\",\"type\":\"bytes32\"}],\"name\":\"updateState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"valueClaimed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}]},\"events\":{\"ExecutableBalanceTopUpRequested(uint128)\":{\"details\":\"Emitted when a user requests program's executable balance top up with his tokens. NOTE: It's event for NODES: it requires to top up balance of the program.\"},\"Message(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when the program sends outgoing message. NOTE: It's event for USERS: it informs about new message sent from program.\"},\"MessageQueueingRequested(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when a new message is sent to be queued. NOTE: It's event for NODES: it requires to insert message in the program's queue.\"},\"Reply(bytes,uint128,bytes32,bytes4)\":{\"details\":\"Emitted when the program sends reply message. NOTE: It's event for USERS: it informs about new reply sent from program.\"},\"ReplyQueueingRequested(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when a new reply is sent and requested to be verified and queued. NOTE: It's event for NODES: it requires to insert message in the program's queue, if message, exists.\"},\"StateChanged(bytes32)\":{\"details\":\"Emitted when the state hash of program is changed. NOTE: It's event for USERS: it informs about state changes.\"},\"ValueClaimed(bytes32,uint128)\":{\"details\":\"Emitted when a user succeed in claiming value request and receives balance. NOTE: It's event for USERS: it informs about value claimed.\"},\"ValueClaimingRequested(bytes32,address)\":{\"details\":\"Emitted when a reply's value is requested to be verified and claimed. NOTE: It's event for NODES: it requires to claim value from message, if exists.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Mirror.sol\":\"Mirror\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":symbiotic-core/=lib/symbiotic-core/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts/contracts/proxy/Clones.sol\":{\"keccak256\":\"0x4cc853b89072428e406c60c6e8d5280b31f9d99d6caf7b041650e649746513a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38a1bbdb89a8f5d1820a2dcc34b5086a6e199c7a8965007345975b5db8997a64\",\"dweb:/ipfs/QmcN6yJBkoserTqAMpue55HmMCMf7dGJYUbGi8p366HqZq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323\",\"dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR\"]},\"lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a\",\"dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3\",\"dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6\",\"dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087\",\"dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8\",\"dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da\",\"dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047\",\"dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615\",\"dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5\"]},\"src/IMirror.sol\":{\"keccak256\":\"0x78105f388516b83fcb68f7c006c5d9d685bc8ad7fadcdfa56c0919efa79a6373\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://3a8ab1264895b4f5c8fd3aa18524016c4e88712a50e0a9935f421e13f3e09601\",\"dweb:/ipfs/QmXyVe9k37fDFWmrfjYHisxmqnEynevYo88uVrnRAmYW6L\"]},\"src/IMirrorDecoder.sol\":{\"keccak256\":\"0x95bfe42461bd03e726f894679f4b4133034a405672fe8343c3343d0964cf9072\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://a0907d84596ed62b9ea222fd841fc0259e87b17dd0b5af3f6d0d8a8f4726994d\",\"dweb:/ipfs/QmTkumKh7DBJNXrark6NBqBxCtnYmbRMGYkRyxxzpW9wKr\"]},\"src/IMirrorProxy.sol\":{\"keccak256\":\"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469\",\"dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG\"]},\"src/IRouter.sol\":{\"keccak256\":\"0xeb107ab461f4c9598bf85ab0ec01a0d34a0a5dd016abed77c3c32f27ca885abe\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://86d38748e5911f3b325957cc8703d023bb7b3f9dd6f60997dd8c1122fcd0e9b9\",\"dweb:/ipfs/QmTo5PQs3cdGT8xr1qNm85kht7vMdYF6dr2iYnL3PLwe5H\"]},\"src/IWrappedVara.sol\":{\"keccak256\":\"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f\",\"dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf\"]},\"src/Mirror.sol\":{\"keccak256\":\"0x0267b86e843457670a1bfde7690c19f449383eab961b6127dda5f8e4fe5a1d83\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://13361caf3d945b1fb9117e8fc360059b28a5764f1811d8f53f96fb1f8a9d352f\",\"dweb:/ipfs/QmWhAnGpkpVohUWxkJSJm5PmNZVS8WpGQCfwkqTG2TXd1g\"]},\"src/libraries/Gear.sol\":{\"keccak256\":\"0x726a90f878e03abe4dd98fd91a94d313596b22f9a7cc55da674d663ba9dde90b\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://f3d0eac56e80230b4a6d744be6877625403d19a0e951a07fa80d80ed3f26bc3d\",\"dweb:/ipfs/QmP7DdZ3YoFTqjJ1Jqyoy81LLNosZ7jN6sN3wnUYkVuJ2d\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"FailedDeployment"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"InsufficientBalance"},{"inputs":[{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ExecutableBalanceTopUpRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"address","name":"destination","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"Message","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"MessageQueueingRequested","anonymous":false},{"inputs":[{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false},{"internalType":"bytes32","name":"replyTo","type":"bytes32","indexed":false},{"internalType":"bytes4","name":"replyCode","type":"bytes4","indexed":true}],"type":"event","name":"Reply","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"repliedTo","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ReplyQueueingRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"stateHash","type":"bytes32","indexed":false}],"type":"event","name":"StateChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ValueClaimed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true}],"type":"event","name":"ValueClaimingRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_claimedId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"claimValue"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"createDecoder"},{"inputs":[],"stateMutability":"view","type":"function","name":"decoder","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"executableBalanceTopUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"inheritor","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"source","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"uint128","name":"executableBalance","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"initMessage"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"messageSent"},{"inputs":[],"stateMutability":"view","type":"function","name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"bytes32","name":"replyTo","type":"bytes32"},{"internalType":"bytes4","name":"replyCode","type":"bytes4"}],"stateMutability":"nonpayable","type":"function","name":"replySent"},{"inputs":[],"stateMutability":"view","type":"function","name":"router","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"sendMessage","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"_repliedTo","type":"bytes32"},{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"sendReply"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"sendValueToInheritor"},{"inputs":[{"internalType":"address","name":"_inheritor","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setInheritor"},{"inputs":[],"stateMutability":"view","type":"function","name":"stateHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"newStateHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"updateState"},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint128","name":"value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"valueClaimed"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","symbiotic-core/=lib/symbiotic-core/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Mirror.sol":"Mirror"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts/contracts/proxy/Clones.sol":{"keccak256":"0x4cc853b89072428e406c60c6e8d5280b31f9d99d6caf7b041650e649746513a6","urls":["bzz-raw://38a1bbdb89a8f5d1820a2dcc34b5086a6e199c7a8965007345975b5db8997a64","dweb:/ipfs/QmcN6yJBkoserTqAMpue55HmMCMf7dGJYUbGi8p366HqZq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28","urls":["bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323","dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179","urls":["bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a","dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a","urls":["bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3","dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b","urls":["bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6","dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb","urls":["bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087","dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38","urls":["bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8","dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee","urls":["bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da","dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e","urls":["bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047","dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44","urls":["bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615","dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5"],"license":"MIT"},"src/IMirror.sol":{"keccak256":"0x78105f388516b83fcb68f7c006c5d9d685bc8ad7fadcdfa56c0919efa79a6373","urls":["bzz-raw://3a8ab1264895b4f5c8fd3aa18524016c4e88712a50e0a9935f421e13f3e09601","dweb:/ipfs/QmXyVe9k37fDFWmrfjYHisxmqnEynevYo88uVrnRAmYW6L"],"license":"UNLICENSED"},"src/IMirrorDecoder.sol":{"keccak256":"0x95bfe42461bd03e726f894679f4b4133034a405672fe8343c3343d0964cf9072","urls":["bzz-raw://a0907d84596ed62b9ea222fd841fc0259e87b17dd0b5af3f6d0d8a8f4726994d","dweb:/ipfs/QmTkumKh7DBJNXrark6NBqBxCtnYmbRMGYkRyxxzpW9wKr"],"license":"UNLICENSED"},"src/IMirrorProxy.sol":{"keccak256":"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570","urls":["bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469","dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0xeb107ab461f4c9598bf85ab0ec01a0d34a0a5dd016abed77c3c32f27ca885abe","urls":["bzz-raw://86d38748e5911f3b325957cc8703d023bb7b3f9dd6f60997dd8c1122fcd0e9b9","dweb:/ipfs/QmTo5PQs3cdGT8xr1qNm85kht7vMdYF6dr2iYnL3PLwe5H"],"license":"UNLICENSED"},"src/IWrappedVara.sol":{"keccak256":"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175","urls":["bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f","dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf"],"license":"UNLICENSED"},"src/Mirror.sol":{"keccak256":"0x0267b86e843457670a1bfde7690c19f449383eab961b6127dda5f8e4fe5a1d83","urls":["bzz-raw://13361caf3d945b1fb9117e8fc360059b28a5764f1811d8f53f96fb1f8a9d352f","dweb:/ipfs/QmWhAnGpkpVohUWxkJSJm5PmNZVS8WpGQCfwkqTG2TXd1g"],"license":"UNLICENSED"},"src/libraries/Gear.sol":{"keccak256":"0x726a90f878e03abe4dd98fd91a94d313596b22f9a7cc55da674d663ba9dde90b","urls":["bzz-raw://f3d0eac56e80230b4a6d744be6877625403d19a0e951a07fa80d80ed3f26bc3d","dweb:/ipfs/QmP7DdZ3YoFTqjJ1Jqyoy81LLNosZ7jN6sN3wnUYkVuJ2d"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[{"astId":74655,"contract":"src/Mirror.sol:Mirror","label":"stateHash","offset":0,"slot":"0","type":"t_bytes32"},{"astId":74657,"contract":"src/Mirror.sol:Mirror","label":"inheritor","offset":0,"slot":"1","type":"t_address"},{"astId":74659,"contract":"src/Mirror.sol:Mirror","label":"nonce","offset":0,"slot":"2","type":"t_uint256"},{"astId":74661,"contract":"src/Mirror.sol:Mirror","label":"decoder","offset":0,"slot":"3","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/Mirror.sol","id":75222,"exportedSymbols":{"Clones":[41840],"IMirror":[73603],"IMirrorDecoder":[73638],"IMirrorProxy":[73646],"IRouter":[73896],"IWrappedVara":[73907],"Mirror":[75221]},"nodeType":"SourceUnit","src":"39:6476:157","nodes":[{"id":74639,"nodeType":"PragmaDirective","src":"39:24:157","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":74641,"nodeType":"ImportDirective","src":"65:48:157","nodes":[],"absolutePath":"src/IMirrorProxy.sol","file":"./IMirrorProxy.sol","nameLocation":"-1:-1:-1","scope":75222,"sourceUnit":73647,"symbolAliases":[{"foreign":{"id":74640,"name":"IMirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73646,"src":"73:12:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":74643,"nodeType":"ImportDirective","src":"114:38:157","nodes":[],"absolutePath":"src/IMirror.sol","file":"./IMirror.sol","nameLocation":"-1:-1:-1","scope":75222,"sourceUnit":73604,"symbolAliases":[{"foreign":{"id":74642,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73603,"src":"122:7:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":74645,"nodeType":"ImportDirective","src":"153:38:157","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":75222,"sourceUnit":73897,"symbolAliases":[{"foreign":{"id":74644,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73896,"src":"161:7:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":74647,"nodeType":"ImportDirective","src":"192:48:157","nodes":[],"absolutePath":"src/IWrappedVara.sol","file":"./IWrappedVara.sol","nameLocation":"-1:-1:-1","scope":75222,"sourceUnit":73908,"symbolAliases":[{"foreign":{"id":74646,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73907,"src":"200:12:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":74649,"nodeType":"ImportDirective","src":"241:52:157","nodes":[],"absolutePath":"src/IMirrorDecoder.sol","file":"./IMirrorDecoder.sol","nameLocation":"-1:-1:-1","scope":75222,"sourceUnit":73639,"symbolAliases":[{"foreign":{"id":74648,"name":"IMirrorDecoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73638,"src":"249:14:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":74651,"nodeType":"ImportDirective","src":"294:64:157","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/Clones.sol","file":"@openzeppelin/contracts/proxy/Clones.sol","nameLocation":"-1:-1:-1","scope":75222,"sourceUnit":41841,"symbolAliases":[{"foreign":{"id":74650,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41840,"src":"302:6:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75221,"nodeType":"ContractDefinition","src":"403:6111:157","nodes":[{"id":74655,"nodeType":"VariableDeclaration","src":"436:24:157","nodes":[],"baseFunctions":[73490],"constant":false,"functionSelector":"701da98e","mutability":"mutable","name":"stateHash","nameLocation":"451:9:157","scope":75221,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74654,"name":"bytes32","nodeType":"ElementaryTypeName","src":"436:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":74657,"nodeType":"VariableDeclaration","src":"466:24:157","nodes":[],"baseFunctions":[73495],"constant":false,"functionSelector":"36a52a18","mutability":"mutable","name":"inheritor","nameLocation":"481:9:157","scope":75221,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74656,"name":"address","nodeType":"ElementaryTypeName","src":"466:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":74659,"nodeType":"VariableDeclaration","src":"568:20:157","nodes":[],"baseFunctions":[73500],"constant":false,"functionSelector":"affed0e0","mutability":"mutable","name":"nonce","nameLocation":"583:5:157","scope":75221,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74658,"name":"uint256","nodeType":"ElementaryTypeName","src":"568:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":74661,"nodeType":"VariableDeclaration","src":"604:22:157","nodes":[],"baseFunctions":[73510],"constant":false,"functionSelector":"9cb33005","mutability":"mutable","name":"decoder","nameLocation":"619:7:157","scope":75221,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74660,"name":"address","nodeType":"ElementaryTypeName","src":"604:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":74676,"nodeType":"FunctionDefinition","src":"666:108:157","nodes":[],"body":{"id":74675,"nodeType":"Block","src":"714:60:157","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":74669,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"752:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$75221","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$75221","typeString":"contract Mirror"}],"id":74668,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"744:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74667,"name":"address","nodeType":"ElementaryTypeName","src":"744:7:157","typeDescriptions":{}}},"id":74670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"744:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74666,"name":"IMirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73646,"src":"731:12:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirrorProxy_$73646_$","typeString":"type(contract IMirrorProxy)"}},"id":74671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"731:27:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirrorProxy_$73646","typeString":"contract IMirrorProxy"}},"id":74672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"759:6:157","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":73645,"src":"731:34:157","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"731:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":74665,"id":74674,"nodeType":"Return","src":"724:43:157"}]},"baseFunctions":[73505],"functionSelector":"f887ea40","implemented":true,"kind":"function","modifiers":[],"name":"router","nameLocation":"675:6:157","parameters":{"id":74662,"nodeType":"ParameterList","parameters":[],"src":"681:2:157"},"returnParameters":{"id":74665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74664,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":74676,"src":"705:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74663,"name":"address","nodeType":"ElementaryTypeName","src":"705:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"704:9:157"},"scope":75221,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":74724,"nodeType":"FunctionDefinition","src":"893:380:157","nodes":[],"body":{"id":74723,"nodeType":"Block","src":"990:283:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74686,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74657,"src":"1008:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":74689,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1029:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74688,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1021:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74687,"name":"address","nodeType":"ElementaryTypeName","src":"1021:7:157","typeDescriptions":{}}},"id":74690,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1021:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1008:23:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726f6772616d206973207465726d696e61746564","id":74692,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1033:23:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""},"value":"program is terminated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""}],"id":74685,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1000:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1000:57:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74694,"nodeType":"ExpressionStatement","src":"1000:57:157"},{"expression":{"arguments":[{"id":74696,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74680,"src":"1091:6:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74695,"name":"_retrieveValueToRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75182,"src":"1068:22:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":74697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1068:30:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74698,"nodeType":"ExpressionStatement","src":"1068:30:157"},{"assignments":[74700],"declarations":[{"constant":false,"id":74700,"mutability":"mutable","name":"id","nameLocation":"1117:2:157","nodeType":"VariableDeclaration","scope":74723,"src":"1109:10:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74699,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1109:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":74712,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":74706,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1157:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$75221","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$75221","typeString":"contract Mirror"}],"id":74705,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1149:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74704,"name":"address","nodeType":"ElementaryTypeName","src":"1149:7:157","typeDescriptions":{}}},"id":74707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1149:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1164:7:157","subExpression":{"id":74708,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74659,"src":"1164:5:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":74702,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1132:3:157","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":74703,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1136:12:157","memberName":"encodePacked","nodeType":"MemberAccess","src":"1132:16:157","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":74710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1132:40:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":74701,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1122:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":74711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1122:51:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1109:64:157"},{"eventCall":{"arguments":[{"id":74714,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74700,"src":"1214:2:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"id":74715,"name":"_source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75140,"src":"1218:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":74716,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1218:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74717,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74678,"src":"1229:8:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":74718,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74680,"src":"1239:6:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74713,"name":"MessageQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73433,"src":"1189:24:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":74719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1189:57:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74720,"nodeType":"EmitStatement","src":"1184:62:157"},{"expression":{"id":74721,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74700,"src":"1264:2:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":74684,"id":74722,"nodeType":"Return","src":"1257:9:157"}]},"baseFunctions":[73519],"functionSelector":"d5624222","implemented":true,"kind":"function","modifiers":[],"name":"sendMessage","nameLocation":"902:11:157","parameters":{"id":74681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74678,"mutability":"mutable","name":"_payload","nameLocation":"929:8:157","nodeType":"VariableDeclaration","scope":74724,"src":"914:23:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":74677,"name":"bytes","nodeType":"ElementaryTypeName","src":"914:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":74680,"mutability":"mutable","name":"_value","nameLocation":"947:6:157","nodeType":"VariableDeclaration","scope":74724,"src":"939:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":74679,"name":"uint128","nodeType":"ElementaryTypeName","src":"939:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"913:41:157"},"returnParameters":{"id":74684,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74683,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":74724,"src":"981:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74682,"name":"bytes32","nodeType":"ElementaryTypeName","src":"981:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"980:9:157"},"scope":75221,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":74756,"nodeType":"FunctionDefinition","src":"1279:291:157","nodes":[],"body":{"id":74755,"nodeType":"Block","src":"1376:194:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74734,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74657,"src":"1394:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":74737,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1415:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74736,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1407:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74735,"name":"address","nodeType":"ElementaryTypeName","src":"1407:7:157","typeDescriptions":{}}},"id":74738,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1407:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1394:23:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726f6772616d206973207465726d696e61746564","id":74740,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1419:23:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""},"value":"program is terminated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""}],"id":74733,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1386:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1386:57:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74742,"nodeType":"ExpressionStatement","src":"1386:57:157"},{"expression":{"arguments":[{"id":74744,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74730,"src":"1477:6:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74743,"name":"_retrieveValueToRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75182,"src":"1454:22:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":74745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1454:30:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74746,"nodeType":"ExpressionStatement","src":"1454:30:157"},{"eventCall":{"arguments":[{"id":74748,"name":"_repliedTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74726,"src":"1523:10:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"id":74749,"name":"_source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75140,"src":"1535:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":74750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1535:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74751,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74728,"src":"1546:8:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":74752,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74730,"src":"1556:6:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74747,"name":"ReplyQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73444,"src":"1500:22:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":74753,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1500:63:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74754,"nodeType":"EmitStatement","src":"1495:68:157"}]},"baseFunctions":[73528],"functionSelector":"29336f39","implemented":true,"kind":"function","modifiers":[],"name":"sendReply","nameLocation":"1288:9:157","parameters":{"id":74731,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74726,"mutability":"mutable","name":"_repliedTo","nameLocation":"1306:10:157","nodeType":"VariableDeclaration","scope":74756,"src":"1298:18:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74725,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1298:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":74728,"mutability":"mutable","name":"_payload","nameLocation":"1333:8:157","nodeType":"VariableDeclaration","scope":74756,"src":"1318:23:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":74727,"name":"bytes","nodeType":"ElementaryTypeName","src":"1318:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":74730,"mutability":"mutable","name":"_value","nameLocation":"1351:6:157","nodeType":"VariableDeclaration","scope":74756,"src":"1343:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":74729,"name":"uint128","nodeType":"ElementaryTypeName","src":"1343:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1297:61:157"},"returnParameters":{"id":74732,"nodeType":"ParameterList","parameters":[],"src":"1376:0:157"},"scope":75221,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":74778,"nodeType":"FunctionDefinition","src":"1576:184:157","nodes":[],"body":{"id":74777,"nodeType":"Block","src":"1625:135:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74762,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74657,"src":"1643:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":74765,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1664:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74764,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1656:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74763,"name":"address","nodeType":"ElementaryTypeName","src":"1656:7:157","typeDescriptions":{}}},"id":74766,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1656:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1643:23:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726f6772616d206973207465726d696e61746564","id":74768,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1668:23:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""},"value":"program is terminated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""}],"id":74761,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1635:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1635:57:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74770,"nodeType":"ExpressionStatement","src":"1635:57:157"},{"eventCall":{"arguments":[{"id":74772,"name":"_claimedId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74758,"src":"1731:10:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"id":74773,"name":"_source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75140,"src":"1743:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":74774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1743:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":74771,"name":"ValueClaimingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73451,"src":"1708:22:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":74775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1708:45:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74776,"nodeType":"EmitStatement","src":"1703:50:157"}]},"baseFunctions":[73533],"functionSelector":"91d5a64c","implemented":true,"kind":"function","modifiers":[],"name":"claimValue","nameLocation":"1585:10:157","parameters":{"id":74759,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74758,"mutability":"mutable","name":"_claimedId","nameLocation":"1604:10:157","nodeType":"VariableDeclaration","scope":74778,"src":"1596:18:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74757,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1596:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1595:20:157"},"returnParameters":{"id":74760,"nodeType":"ParameterList","parameters":[],"src":"1625:0:157"},"scope":75221,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":74802,"nodeType":"FunctionDefinition","src":"1766:235:157","nodes":[],"body":{"id":74801,"nodeType":"Block","src":"1831:170:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74784,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74657,"src":"1849:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":74787,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1870:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74786,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1862:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74785,"name":"address","nodeType":"ElementaryTypeName","src":"1862:7:157","typeDescriptions":{}}},"id":74788,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1862:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1849:23:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726f6772616d206973207465726d696e61746564","id":74790,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1874:23:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""},"value":"program is terminated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""}],"id":74783,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1841:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1841:57:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74792,"nodeType":"ExpressionStatement","src":"1841:57:157"},{"expression":{"arguments":[{"id":74794,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74780,"src":"1932:6:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74793,"name":"_retrieveValueToRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75182,"src":"1909:22:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":74795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1909:30:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74796,"nodeType":"ExpressionStatement","src":"1909:30:157"},{"eventCall":{"arguments":[{"id":74798,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74780,"src":"1987:6:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74797,"name":"ExecutableBalanceTopUpRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73456,"src":"1955:31:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":74799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1955:39:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74800,"nodeType":"EmitStatement","src":"1950:44:157"}]},"baseFunctions":[73538],"functionSelector":"704ed542","implemented":true,"kind":"function","modifiers":[],"name":"executableBalanceTopUp","nameLocation":"1775:22:157","parameters":{"id":74781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74780,"mutability":"mutable","name":"_value","nameLocation":"1806:6:157","nodeType":"VariableDeclaration","scope":74802,"src":"1798:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":74779,"name":"uint128","nodeType":"ElementaryTypeName","src":"1798:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1797:16:157"},"returnParameters":{"id":74782,"nodeType":"ParameterList","parameters":[],"src":"1831:0:157"},"scope":75221,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":74841,"nodeType":"FunctionDefinition","src":"2007:267:157","nodes":[],"body":{"id":74840,"nodeType":"Block","src":"2046:228:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74806,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74657,"src":"2064:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":74809,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2085:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74808,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2077:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74807,"name":"address","nodeType":"ElementaryTypeName","src":"2077:7:157","typeDescriptions":{}}},"id":74810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2077:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2064:23:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726f6772616d206973206e6f74207465726d696e61746564","id":74812,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2089:27:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_645ea9267b04b6ac53df8eea2c448cbffac59a494197543c99a5f296932bd588","typeString":"literal_string \"program is not terminated\""},"value":"program is not terminated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_645ea9267b04b6ac53df8eea2c448cbffac59a494197543c99a5f296932bd588","typeString":"literal_string \"program is not terminated\""}],"id":74805,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"2056:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2056:61:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74814,"nodeType":"ExpressionStatement","src":"2056:61:157"},{"assignments":[74816],"declarations":[{"constant":false,"id":74816,"mutability":"mutable","name":"balance","nameLocation":"2136:7:157","nodeType":"VariableDeclaration","scope":74840,"src":"2128:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74815,"name":"uint256","nodeType":"ElementaryTypeName","src":"2128:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":74831,"initialValue":{"arguments":[{"arguments":[{"id":74828,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2210:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$75221","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$75221","typeString":"contract Mirror"}],"id":74827,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2202:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74826,"name":"address","nodeType":"ElementaryTypeName","src":"2202:7:157","typeDescriptions":{}}},"id":74829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2202:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":74819,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74676,"src":"2167:6:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":74820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2167:8:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74818,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73896,"src":"2159:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$73896_$","typeString":"type(contract IRouter)"}},"id":74821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2159:17:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$73896","typeString":"contract IRouter"}},"id":74822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2177:11:157","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":73741,"src":"2159:29:157","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2159:31:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74817,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73907,"src":"2146:12:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$73907_$","typeString":"type(contract IWrappedVara)"}},"id":74824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2146:45:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"}},"id":74825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2192:9:157","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":43097,"src":"2146:55:157","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":74830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2146:70:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2128:88:157"},{"expression":{"arguments":[{"id":74833,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74657,"src":"2239:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":74836,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74816,"src":"2258:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":74835,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2250:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":74834,"name":"uint128","nodeType":"ElementaryTypeName","src":"2250:7:157","typeDescriptions":{}}},"id":74837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2250:16:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74832,"name":"_sendValueTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75220,"src":"2226:12:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":74838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2226:41:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74839,"nodeType":"ExpressionStatement","src":"2226:41:157"}]},"baseFunctions":[73541],"functionSelector":"60302d24","implemented":true,"kind":"function","modifiers":[],"name":"sendValueToInheritor","nameLocation":"2016:20:157","parameters":{"id":74803,"nodeType":"ParameterList","parameters":[],"src":"2036:2:157"},"returnParameters":{"id":74804,"nodeType":"ParameterList","parameters":[],"src":"2046:0:157"},"scope":75221,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":74862,"nodeType":"FunctionDefinition","src":"2332:202:157","nodes":[],"body":{"id":74861,"nodeType":"Block","src":"2395:139:157","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":74850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74848,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74655,"src":"2409:9:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":74849,"name":"newStateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74843,"src":"2422:12:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2409:25:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74860,"nodeType":"IfStatement","src":"2405:123:157","trueBody":{"id":74859,"nodeType":"Block","src":"2436:92:157","statements":[{"expression":{"id":74853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":74851,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74655,"src":"2450:9:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":74852,"name":"newStateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74843,"src":"2462:12:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2450:24:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":74854,"nodeType":"ExpressionStatement","src":"2450:24:157"},{"eventCall":{"arguments":[{"id":74856,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74655,"src":"2507:9:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":74855,"name":"StateChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73422,"src":"2494:12:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":74857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2494:23:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74858,"nodeType":"EmitStatement","src":"2489:28:157"}]}}]},"baseFunctions":[73546],"functionSelector":"8ea59e1d","implemented":true,"kind":"function","modifiers":[{"id":74846,"kind":"modifierInvocation","modifierName":{"id":74845,"name":"onlyRouter","nameLocations":["2384:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":75121,"src":"2384:10:157"},"nodeType":"ModifierInvocation","src":"2384:10:157"}],"name":"updateState","nameLocation":"2341:11:157","parameters":{"id":74844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74843,"mutability":"mutable","name":"newStateHash","nameLocation":"2361:12:157","nodeType":"VariableDeclaration","scope":74862,"src":"2353:20:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74842,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2353:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2352:22:157"},"returnParameters":{"id":74847,"nodeType":"ParameterList","parameters":[],"src":"2395:0:157"},"scope":75221,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":74877,"nodeType":"FunctionDefinition","src":"2626:134:157","nodes":[],"body":{"id":74876,"nodeType":"Block","src":"2688:72:157","nodes":[],"statements":[{"expression":{"id":74871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":74869,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74657,"src":"2698:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":74870,"name":"_inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74864,"src":"2710:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2698:22:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":74872,"nodeType":"ExpressionStatement","src":"2698:22:157"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":74873,"name":"sendValueToInheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74841,"src":"2731:20:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":74874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2731:22:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74875,"nodeType":"ExpressionStatement","src":"2731:22:157"}]},"baseFunctions":[73551],"functionSelector":"12b22256","implemented":true,"kind":"function","modifiers":[{"id":74867,"kind":"modifierInvocation","modifierName":{"id":74866,"name":"onlyRouter","nameLocations":["2677:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":75121,"src":"2677:10:157"},"nodeType":"ModifierInvocation","src":"2677:10:157"}],"name":"setInheritor","nameLocation":"2635:12:157","parameters":{"id":74865,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74864,"mutability":"mutable","name":"_inheritor","nameLocation":"2656:10:157","nodeType":"VariableDeclaration","scope":74877,"src":"2648:18:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74863,"name":"address","nodeType":"ElementaryTypeName","src":"2648:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2647:20:157"},"returnParameters":{"id":74868,"nodeType":"ParameterList","parameters":[],"src":"2688:0:157"},"scope":75221,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":74932,"nodeType":"FunctionDefinition","src":"2766:754:157","nodes":[],"body":{"id":74931,"nodeType":"Block","src":"2879:641:157","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74890,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74661,"src":"2983:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":74893,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3002:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74892,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2994:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74891,"name":"address","nodeType":"ElementaryTypeName","src":"2994:7:157","typeDescriptions":{}}},"id":74894,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2994:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2983:21:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74923,"nodeType":"IfStatement","src":"2979:479:157","trueBody":{"id":74922,"nodeType":"Block","src":"3006:452:157","statements":[{"assignments":[74897],"declarations":[{"constant":false,"id":74897,"mutability":"mutable","name":"callData","nameLocation":"3033:8:157","nodeType":"VariableDeclaration","scope":74922,"src":"3020:21:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":74896,"name":"bytes","nodeType":"ElementaryTypeName","src":"3020:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":74908,"initialValue":{"arguments":[{"expression":{"expression":{"id":74900,"name":"IMirrorDecoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73638,"src":"3083:14:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirrorDecoder_$73638_$","typeString":"type(contract IMirrorDecoder)"}},"id":74901,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3098:13:157","memberName":"onMessageSent","nodeType":"MemberAccess","referencedDeclaration":73624,"src":"3083:28:157","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_bytes32_$_t_address_$_t_bytes_calldata_ptr_$_t_uint128_$returns$__$","typeString":"function IMirrorDecoder.onMessageSent(bytes32,address,bytes calldata,uint128)"}},"id":74902,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3112:8:157","memberName":"selector","nodeType":"MemberAccess","src":"3083:37:157","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":74903,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74879,"src":"3122:2:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":74904,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74881,"src":"3126:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74905,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74883,"src":"3139:7:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":74906,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74885,"src":"3148:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":74898,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3060:3:157","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":74899,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3064:18:157","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"3060:22:157","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":74907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3060:94:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3020:134:157"},{"assignments":[74910,null],"declarations":[{"constant":false,"id":74910,"mutability":"mutable","name":"success","nameLocation":"3268:7:157","nodeType":"VariableDeclaration","scope":74922,"src":"3263:12:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":74909,"name":"bool","nodeType":"ElementaryTypeName","src":"3263:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":74917,"initialValue":{"arguments":[{"id":74915,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74897,"src":"3307:8:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":74911,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74661,"src":"3280:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":74912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3288:4:157","memberName":"call","nodeType":"MemberAccess","src":"3280:12:157","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":74914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["gas"],"nodeType":"FunctionCallOptions","options":[{"hexValue":"3530305f303030","id":74913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3298:7:157","typeDescriptions":{"typeIdentifier":"t_rational_500000_by_1","typeString":"int_const 500000"},"value":"500_000"}],"src":"3280:26:157","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":74916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3280:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3262:54:157"},{"condition":{"id":74918,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74910,"src":"3335:7:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74921,"nodeType":"IfStatement","src":"3331:117:157","trueBody":{"id":74920,"nodeType":"Block","src":"3344:104:157","statements":[{"functionReturnParameters":74889,"id":74919,"nodeType":"Return","src":"3427:7:157"}]}}]}},{"eventCall":{"arguments":[{"id":74925,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74879,"src":"3481:2:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":74926,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74881,"src":"3485:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74927,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74883,"src":"3498:7:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":74928,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74885,"src":"3507:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74924,"name":"Message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73467,"src":"3473:7:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":74929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3473:40:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74930,"nodeType":"EmitStatement","src":"3468:45:157"}]},"baseFunctions":[73562],"functionSelector":"c2df6009","implemented":true,"kind":"function","modifiers":[{"id":74888,"kind":"modifierInvocation","modifierName":{"id":74887,"name":"onlyRouter","nameLocations":["2868:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":75121,"src":"2868:10:157"},"nodeType":"ModifierInvocation","src":"2868:10:157"}],"name":"messageSent","nameLocation":"2775:11:157","parameters":{"id":74886,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74879,"mutability":"mutable","name":"id","nameLocation":"2795:2:157","nodeType":"VariableDeclaration","scope":74932,"src":"2787:10:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74878,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2787:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":74881,"mutability":"mutable","name":"destination","nameLocation":"2807:11:157","nodeType":"VariableDeclaration","scope":74932,"src":"2799:19:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74880,"name":"address","nodeType":"ElementaryTypeName","src":"2799:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":74883,"mutability":"mutable","name":"payload","nameLocation":"2835:7:157","nodeType":"VariableDeclaration","scope":74932,"src":"2820:22:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":74882,"name":"bytes","nodeType":"ElementaryTypeName","src":"2820:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":74885,"mutability":"mutable","name":"value","nameLocation":"2852:5:157","nodeType":"VariableDeclaration","scope":74932,"src":"2844:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":74884,"name":"uint128","nodeType":"ElementaryTypeName","src":"2844:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"2786:72:157"},"returnParameters":{"id":74889,"nodeType":"ParameterList","parameters":[],"src":"2879:0:157"},"scope":75221,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":74995,"nodeType":"FunctionDefinition","src":"3526:775:157","nodes":[],"body":{"id":74994,"nodeType":"Block","src":"3680:621:157","nodes":[],"statements":[{"expression":{"arguments":[{"id":74948,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74934,"src":"3703:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74949,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74938,"src":"3716:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74947,"name":"_sendValueTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75220,"src":"3690:12:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":74950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3690:32:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74951,"nodeType":"ExpressionStatement","src":"3690:32:157"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74952,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74661,"src":"3737:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":74955,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3756:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74954,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3748:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74953,"name":"address","nodeType":"ElementaryTypeName","src":"3748:7:157","typeDescriptions":{}}},"id":74956,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3748:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3737:21:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74986,"nodeType":"IfStatement","src":"3733:505:157","trueBody":{"id":74985,"nodeType":"Block","src":"3760:478:157","statements":[{"assignments":[74959],"declarations":[{"constant":false,"id":74959,"mutability":"mutable","name":"callData","nameLocation":"3787:8:157","nodeType":"VariableDeclaration","scope":74985,"src":"3774:21:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":74958,"name":"bytes","nodeType":"ElementaryTypeName","src":"3774:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":74971,"initialValue":{"arguments":[{"expression":{"expression":{"id":74962,"name":"IMirrorDecoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73638,"src":"3838:14:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirrorDecoder_$73638_$","typeString":"type(contract IMirrorDecoder)"}},"id":74963,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3853:11:157","memberName":"onReplySent","nodeType":"MemberAccess","referencedDeclaration":73637,"src":"3838:26:157","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_bytes_calldata_ptr_$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function IMirrorDecoder.onReplySent(address,bytes calldata,uint128,bytes32,bytes4)"}},"id":74964,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3865:8:157","memberName":"selector","nodeType":"MemberAccess","src":"3838:35:157","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":74965,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74934,"src":"3875:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74966,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74936,"src":"3888:7:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":74967,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74938,"src":"3897:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":74968,"name":"replyTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74940,"src":"3904:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":74969,"name":"replyCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74942,"src":"3913:9:157","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":74960,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3798:3:157","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":74961,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3802:18:157","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"3798:22:157","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":74970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3798:138:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3774:162:157"},{"assignments":[74973,null],"declarations":[{"constant":false,"id":74973,"mutability":"mutable","name":"success","nameLocation":"4050:7:157","nodeType":"VariableDeclaration","scope":74985,"src":"4045:12:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":74972,"name":"bool","nodeType":"ElementaryTypeName","src":"4045:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":74980,"initialValue":{"arguments":[{"id":74978,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"4089:8:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":74974,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74661,"src":"4062:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":74975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4070:4:157","memberName":"call","nodeType":"MemberAccess","src":"4062:12:157","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":74977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["gas"],"nodeType":"FunctionCallOptions","options":[{"hexValue":"3530305f303030","id":74976,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4080:7:157","typeDescriptions":{"typeIdentifier":"t_rational_500000_by_1","typeString":"int_const 500000"},"value":"500_000"}],"src":"4062:26:157","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":74979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4062:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4044:54:157"},{"condition":{"id":74981,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74973,"src":"4117:7:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74984,"nodeType":"IfStatement","src":"4113:115:157","trueBody":{"id":74983,"nodeType":"Block","src":"4126:102:157","statements":[{"functionReturnParameters":74946,"id":74982,"nodeType":"Return","src":"4207:7:157"}]}}]}},{"eventCall":{"arguments":[{"id":74988,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74936,"src":"4259:7:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":74989,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74938,"src":"4268:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":74990,"name":"replyTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74940,"src":"4275:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":74991,"name":"replyCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74942,"src":"4284:9:157","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":74987,"name":"Reply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73478,"src":"4253:5:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function (bytes memory,uint128,bytes32,bytes4)"}},"id":74992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4253:41:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74993,"nodeType":"EmitStatement","src":"4248:46:157"}]},"baseFunctions":[73575],"functionSelector":"c78bde77","implemented":true,"kind":"function","modifiers":[{"id":74945,"kind":"modifierInvocation","modifierName":{"id":74944,"name":"onlyRouter","nameLocations":["3665:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":75121,"src":"3665:10:157"},"nodeType":"ModifierInvocation","src":"3665:10:157"}],"name":"replySent","nameLocation":"3535:9:157","parameters":{"id":74943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74934,"mutability":"mutable","name":"destination","nameLocation":"3553:11:157","nodeType":"VariableDeclaration","scope":74995,"src":"3545:19:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74933,"name":"address","nodeType":"ElementaryTypeName","src":"3545:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":74936,"mutability":"mutable","name":"payload","nameLocation":"3581:7:157","nodeType":"VariableDeclaration","scope":74995,"src":"3566:22:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":74935,"name":"bytes","nodeType":"ElementaryTypeName","src":"3566:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":74938,"mutability":"mutable","name":"value","nameLocation":"3598:5:157","nodeType":"VariableDeclaration","scope":74995,"src":"3590:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":74937,"name":"uint128","nodeType":"ElementaryTypeName","src":"3590:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":74940,"mutability":"mutable","name":"replyTo","nameLocation":"3613:7:157","nodeType":"VariableDeclaration","scope":74995,"src":"3605:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74939,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3605:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":74942,"mutability":"mutable","name":"replyCode","nameLocation":"3629:9:157","nodeType":"VariableDeclaration","scope":74995,"src":"3622:16:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":74941,"name":"bytes4","nodeType":"ElementaryTypeName","src":"3622:6:157","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"3544:95:157"},"returnParameters":{"id":74946,"nodeType":"ParameterList","parameters":[],"src":"3680:0:157"},"scope":75221,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75017,"nodeType":"FunctionDefinition","src":"4307:192:157","nodes":[],"body":{"id":75016,"nodeType":"Block","src":"4404:95:157","nodes":[],"statements":[{"expression":{"arguments":[{"id":75007,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74999,"src":"4427:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75008,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75001,"src":"4440:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75006,"name":"_sendValueTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75220,"src":"4414:12:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":75009,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4414:32:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75010,"nodeType":"ExpressionStatement","src":"4414:32:157"},{"eventCall":{"arguments":[{"id":75012,"name":"claimedId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74997,"src":"4475:9:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75013,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75001,"src":"4486:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75011,"name":"ValueClaimed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73485,"src":"4462:12:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint128_$returns$__$","typeString":"function (bytes32,uint128)"}},"id":75014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4462:30:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75015,"nodeType":"EmitStatement","src":"4457:35:157"}]},"baseFunctions":[73584],"functionSelector":"14503e51","implemented":true,"kind":"function","modifiers":[{"id":75004,"kind":"modifierInvocation","modifierName":{"id":75003,"name":"onlyRouter","nameLocations":["4393:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":75121,"src":"4393:10:157"},"nodeType":"ModifierInvocation","src":"4393:10:157"}],"name":"valueClaimed","nameLocation":"4316:12:157","parameters":{"id":75002,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74997,"mutability":"mutable","name":"claimedId","nameLocation":"4337:9:157","nodeType":"VariableDeclaration","scope":75017,"src":"4329:17:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74996,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4329:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":74999,"mutability":"mutable","name":"destination","nameLocation":"4356:11:157","nodeType":"VariableDeclaration","scope":75017,"src":"4348:19:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74998,"name":"address","nodeType":"ElementaryTypeName","src":"4348:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75001,"mutability":"mutable","name":"value","nameLocation":"4377:5:157","nodeType":"VariableDeclaration","scope":75017,"src":"4369:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75000,"name":"uint128","nodeType":"ElementaryTypeName","src":"4369:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"4328:55:157"},"returnParameters":{"id":75005,"nodeType":"ParameterList","parameters":[],"src":"4404:0:157"},"scope":75221,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75058,"nodeType":"FunctionDefinition","src":"4505:363:157","nodes":[],"body":{"id":75057,"nodeType":"Block","src":"4586:282:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75027,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74659,"src":"4604:5:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":75028,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4613:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4604:10:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6465636f64657220636f756c64206f6e6c792062652063726561746564206265666f726520696e6974206d657373616765","id":75030,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4616:51:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_6179111dcaf1477c3041b02777f68e6f9b47b46bbab14442425a87a2628d248f","typeString":"literal_string \"decoder could only be created before init message\""},"value":"decoder could only be created before init message"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6179111dcaf1477c3041b02777f68e6f9b47b46bbab14442425a87a2628d248f","typeString":"literal_string \"decoder could only be created before init message\""}],"id":75026,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4596:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4596:72:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75032,"nodeType":"ExpressionStatement","src":"4596:72:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75034,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74661,"src":"4686:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":75037,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4705:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":75036,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4697:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":75035,"name":"address","nodeType":"ElementaryTypeName","src":"4697:7:157","typeDescriptions":{}}},"id":75038,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4697:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4686:21:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6465636f64657220636f756c64206f6e6c792062652063726561746564206f6e6365","id":75040,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4709:36:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_2e378c5f64e230407f2ea4b317edbd32f061bf14b6bede40dc75fef40a2c3f34","typeString":"literal_string \"decoder could only be created once\""},"value":"decoder could only be created once"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2e378c5f64e230407f2ea4b317edbd32f061bf14b6bede40dc75fef40a2c3f34","typeString":"literal_string \"decoder could only be created once\""}],"id":75033,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4678:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4678:68:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75042,"nodeType":"ExpressionStatement","src":"4678:68:157"},{"expression":{"id":75049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":75043,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74661,"src":"4757:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":75046,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75019,"src":"4793:14:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75047,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75021,"src":"4809:4:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":75044,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41840,"src":"4767:6:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Clones_$41840_$","typeString":"type(library Clones)"}},"id":75045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4774:18:157","memberName":"cloneDeterministic","nodeType":"MemberAccess","referencedDeclaration":41758,"src":"4767:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$","typeString":"function (address,bytes32) returns (address)"}},"id":75048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4767:47:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4757:57:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75050,"nodeType":"ExpressionStatement","src":"4757:57:157"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":75052,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74661,"src":"4840:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75051,"name":"IMirrorDecoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73638,"src":"4825:14:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirrorDecoder_$73638_$","typeString":"type(contract IMirrorDecoder)"}},"id":75053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4825:23:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirrorDecoder_$73638","typeString":"contract IMirrorDecoder"}},"id":75054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4849:10:157","memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":73608,"src":"4825:34:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$__$","typeString":"function () external"}},"id":75055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4825:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75056,"nodeType":"ExpressionStatement","src":"4825:36:157"}]},"baseFunctions":[73591],"functionSelector":"5b1b84f7","implemented":true,"kind":"function","modifiers":[{"id":75024,"kind":"modifierInvocation","modifierName":{"id":75023,"name":"onlyRouter","nameLocations":["4575:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":75121,"src":"4575:10:157"},"nodeType":"ModifierInvocation","src":"4575:10:157"}],"name":"createDecoder","nameLocation":"4514:13:157","parameters":{"id":75022,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75019,"mutability":"mutable","name":"implementation","nameLocation":"4536:14:157","nodeType":"VariableDeclaration","scope":75058,"src":"4528:22:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75018,"name":"address","nodeType":"ElementaryTypeName","src":"4528:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75021,"mutability":"mutable","name":"salt","nameLocation":"4560:4:157","nodeType":"VariableDeclaration","scope":75058,"src":"4552:12:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75020,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4552:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4527:38:157"},"returnParameters":{"id":75025,"nodeType":"ParameterList","parameters":[],"src":"4586:0:157"},"scope":75221,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75108,"nodeType":"FunctionDefinition","src":"4874:566:157","nodes":[],"body":{"id":75107,"nodeType":"Block","src":"5017:423:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75072,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74659,"src":"5035:5:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":75073,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5044:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5035:10:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e6974206d657373616765206d7573742062652063726561746564206265666f726520616e79206f7468657273","id":75075,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5047:48:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_f66d837affa62c092147eee2ea617e19f402b656aab0578ab0acad8d1e9a6341","typeString":"literal_string \"init message must be created before any others\""},"value":"init message must be created before any others"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f66d837affa62c092147eee2ea617e19f402b656aab0578ab0acad8d1e9a6341","typeString":"literal_string \"init message must be created before any others\""}],"id":75071,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"5027:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5027:69:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75077,"nodeType":"ExpressionStatement","src":"5027:69:157"},{"assignments":[75079],"declarations":[{"constant":false,"id":75079,"mutability":"mutable","name":"initNonce","nameLocation":"5205:9:157","nodeType":"VariableDeclaration","scope":75107,"src":"5197:17:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75078,"name":"uint256","nodeType":"ElementaryTypeName","src":"5197:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75082,"initialValue":{"id":75081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5217:7:157","subExpression":{"id":75080,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74659,"src":"5217:5:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5197:27:157"},{"assignments":[75084],"declarations":[{"constant":false,"id":75084,"mutability":"mutable","name":"id","nameLocation":"5242:2:157","nodeType":"VariableDeclaration","scope":75107,"src":"5234:10:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75083,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5234:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":75095,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":75090,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5282:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$75221","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$75221","typeString":"contract Mirror"}],"id":75089,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5274:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":75088,"name":"address","nodeType":"ElementaryTypeName","src":"5274:7:157","typeDescriptions":{}}},"id":75091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5274:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75092,"name":"initNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75079,"src":"5289:9:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":75086,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5257:3:157","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":75087,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5261:12:157","memberName":"encodePacked","nodeType":"MemberAccess","src":"5257:16:157","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":75093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5257:42:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":75085,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5247:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":75094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5247:53:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5234:66:157"},{"eventCall":{"arguments":[{"id":75097,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75066,"src":"5348:17:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75096,"name":"ExecutableBalanceTopUpRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73456,"src":"5316:31:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":75098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5316:50:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75099,"nodeType":"EmitStatement","src":"5311:55:157"},{"eventCall":{"arguments":[{"id":75101,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75084,"src":"5406:2:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75102,"name":"source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75060,"src":"5410:6:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75103,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75062,"src":"5418:7:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":75104,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75064,"src":"5427:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75100,"name":"MessageQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73433,"src":"5381:24:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":75105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5381:52:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75106,"nodeType":"EmitStatement","src":"5376:57:157"}]},"baseFunctions":[73602],"functionSelector":"de1dd2e0","implemented":true,"kind":"function","modifiers":[{"id":75069,"kind":"modifierInvocation","modifierName":{"id":75068,"name":"onlyRouter","nameLocations":["5002:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":75121,"src":"5002:10:157"},"nodeType":"ModifierInvocation","src":"5002:10:157"}],"name":"initMessage","nameLocation":"4883:11:157","parameters":{"id":75067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75060,"mutability":"mutable","name":"source","nameLocation":"4903:6:157","nodeType":"VariableDeclaration","scope":75108,"src":"4895:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75059,"name":"address","nodeType":"ElementaryTypeName","src":"4895:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75062,"mutability":"mutable","name":"payload","nameLocation":"4926:7:157","nodeType":"VariableDeclaration","scope":75108,"src":"4911:22:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":75061,"name":"bytes","nodeType":"ElementaryTypeName","src":"4911:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":75064,"mutability":"mutable","name":"value","nameLocation":"4943:5:157","nodeType":"VariableDeclaration","scope":75108,"src":"4935:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75063,"name":"uint128","nodeType":"ElementaryTypeName","src":"4935:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":75066,"mutability":"mutable","name":"executableBalance","nameLocation":"4958:17:157","nodeType":"VariableDeclaration","scope":75108,"src":"4950:25:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75065,"name":"uint128","nodeType":"ElementaryTypeName","src":"4950:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"4894:82:157"},"returnParameters":{"id":75070,"nodeType":"ParameterList","parameters":[],"src":"5017:0:157"},"scope":75221,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75121,"nodeType":"ModifierDefinition","src":"5446:131:157","nodes":[],"body":{"id":75120,"nodeType":"Block","src":"5468:109:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75111,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5486:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5490:6:157","memberName":"sender","nodeType":"MemberAccess","src":"5486:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":75113,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74676,"src":"5500:6:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":75114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5500:8:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5486:22:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6f6e6c7920726f7574657220636f6e747261637420697320656c696769626c6520666f72206f7065726174696f6e","id":75116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5510:48:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_64d2230e88596248f8ffc0c335875e1b5d3e7ef288684b79c0f3f409577b1f91","typeString":"literal_string \"only router contract is eligible for operation\""},"value":"only router contract is eligible for operation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_64d2230e88596248f8ffc0c335875e1b5d3e7ef288684b79c0f3f409577b1f91","typeString":"literal_string \"only router contract is eligible for operation\""}],"id":75110,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"5478:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5478:81:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75118,"nodeType":"ExpressionStatement","src":"5478:81:157"},{"id":75119,"nodeType":"PlaceholderStatement","src":"5569:1:157"}]},"name":"onlyRouter","nameLocation":"5455:10:157","parameters":{"id":75109,"nodeType":"ParameterList","parameters":[],"src":"5465:2:157"},"virtual":false,"visibility":"internal"},{"id":75140,"nodeType":"FunctionDefinition","src":"5617:182:157","nodes":[],"body":{"id":75139,"nodeType":"Block","src":"5667:132:157","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75126,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5681:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5685:6:157","memberName":"sender","nodeType":"MemberAccess","src":"5681:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":75128,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74661,"src":"5695:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5681:21:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":75137,"nodeType":"Block","src":"5751:42:157","statements":[{"expression":{"expression":{"id":75134,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5772:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5776:6:157","memberName":"sender","nodeType":"MemberAccess","src":"5772:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75125,"id":75136,"nodeType":"Return","src":"5765:17:157"}]},"id":75138,"nodeType":"IfStatement","src":"5677:116:157","trueBody":{"id":75133,"nodeType":"Block","src":"5704:41:157","statements":[{"expression":{"expression":{"id":75130,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"5725:2:157","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":75131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5728:6:157","memberName":"origin","nodeType":"MemberAccess","src":"5725:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75125,"id":75132,"nodeType":"Return","src":"5718:16:157"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_source","nameLocation":"5626:7:157","parameters":{"id":75122,"nodeType":"ParameterList","parameters":[],"src":"5633:2:157"},"returnParameters":{"id":75125,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75124,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75140,"src":"5658:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75123,"name":"address","nodeType":"ElementaryTypeName","src":"5658:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5657:9:157"},"scope":75221,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":75182,"nodeType":"FunctionDefinition","src":"5805:385:157","nodes":[],"body":{"id":75181,"nodeType":"Block","src":"5861:329:157","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":75147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75145,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75142,"src":"5875:6:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":75146,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5885:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5875:11:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75180,"nodeType":"IfStatement","src":"5871:313:157","trueBody":{"id":75179,"nodeType":"Block","src":"5888:296:157","statements":[{"assignments":[75149],"declarations":[{"constant":false,"id":75149,"mutability":"mutable","name":"routerAddress","nameLocation":"5910:13:157","nodeType":"VariableDeclaration","scope":75179,"src":"5902:21:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75148,"name":"address","nodeType":"ElementaryTypeName","src":"5902:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":75152,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75150,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74676,"src":"5926:6:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":75151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5926:8:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5902:32:157"},{"assignments":[75155],"declarations":[{"constant":false,"id":75155,"mutability":"mutable","name":"wrappedVara","nameLocation":"5962:11:157","nodeType":"VariableDeclaration","scope":75179,"src":"5949:24:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"},"typeName":{"id":75154,"nodeType":"UserDefinedTypeName","pathNode":{"id":75153,"name":"IWrappedVara","nameLocations":["5949:12:157"],"nodeType":"IdentifierPath","referencedDeclaration":73907,"src":"5949:12:157"},"referencedDeclaration":73907,"src":"5949:12:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"id":75163,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":75158,"name":"routerAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75149,"src":"5997:13:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75157,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73896,"src":"5989:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$73896_$","typeString":"type(contract IRouter)"}},"id":75159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5989:22:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$73896","typeString":"contract IRouter"}},"id":75160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6012:11:157","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":73741,"src":"5989:34:157","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":75161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5989:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75156,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73907,"src":"5976:12:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$73907_$","typeString":"type(contract IWrappedVara)"}},"id":75162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5976:50:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"}},"nodeType":"VariableDeclarationStatement","src":"5949:77:157"},{"assignments":[75165],"declarations":[{"constant":false,"id":75165,"mutability":"mutable","name":"success","nameLocation":"6046:7:157","nodeType":"VariableDeclaration","scope":75179,"src":"6041:12:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75164,"name":"bool","nodeType":"ElementaryTypeName","src":"6041:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":75173,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":75168,"name":"_source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75140,"src":"6081:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":75169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6081:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75170,"name":"routerAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75149,"src":"6092:13:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75171,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75142,"src":"6107:6:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":75166,"name":"wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75155,"src":"6056:11:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"}},"id":75167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6068:12:157","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":43139,"src":"6056:24:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":75172,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6056:58:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"6041:73:157"},{"expression":{"arguments":[{"id":75175,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75165,"src":"6137:7:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207265747269657665205756617261","id":75176,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6146:26:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""},"value":"failed to retrieve WVara"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""}],"id":75174,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6129:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6129:44:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75178,"nodeType":"ExpressionStatement","src":"6129:44:157"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_retrieveValueToRouter","nameLocation":"5814:22:157","parameters":{"id":75143,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75142,"mutability":"mutable","name":"_value","nameLocation":"5845:6:157","nodeType":"VariableDeclaration","scope":75182,"src":"5837:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75141,"name":"uint128","nodeType":"ElementaryTypeName","src":"5837:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"5836:16:157"},"returnParameters":{"id":75144,"nodeType":"ParameterList","parameters":[],"src":"5861:0:157"},"scope":75221,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":75220,"nodeType":"FunctionDefinition","src":"6196:316:157","nodes":[],"body":{"id":75219,"nodeType":"Block","src":"6262:250:157","nodes":[],"statements":[{"assignments":[75191],"declarations":[{"constant":false,"id":75191,"mutability":"mutable","name":"wrappedVara","nameLocation":"6285:11:157","nodeType":"VariableDeclaration","scope":75219,"src":"6272:24:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"},"typeName":{"id":75190,"nodeType":"UserDefinedTypeName","pathNode":{"id":75189,"name":"IWrappedVara","nameLocations":["6272:12:157"],"nodeType":"IdentifierPath","referencedDeclaration":73907,"src":"6272:12:157"},"referencedDeclaration":73907,"src":"6272:12:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"id":75200,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":75194,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74676,"src":"6320:6:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":75195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6320:8:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75193,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73896,"src":"6312:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$73896_$","typeString":"type(contract IRouter)"}},"id":75196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6312:17:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$73896","typeString":"contract IRouter"}},"id":75197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6330:11:157","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":73741,"src":"6312:29:157","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":75198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6312:31:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75192,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73907,"src":"6299:12:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$73907_$","typeString":"type(contract IWrappedVara)"}},"id":75199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6299:45:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"}},"nodeType":"VariableDeclarationStatement","src":"6272:72:157"},{"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":75203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75201,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75186,"src":"6359:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":75202,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6368:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6359:10:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75218,"nodeType":"IfStatement","src":"6355:151:157","trueBody":{"id":75217,"nodeType":"Block","src":"6371:135:157","statements":[{"assignments":[75205],"declarations":[{"constant":false,"id":75205,"mutability":"mutable","name":"success","nameLocation":"6390:7:157","nodeType":"VariableDeclaration","scope":75217,"src":"6385:12:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75204,"name":"bool","nodeType":"ElementaryTypeName","src":"6385:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":75211,"initialValue":{"arguments":[{"id":75208,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75184,"src":"6421:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75209,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75186,"src":"6434:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":75206,"name":"wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75191,"src":"6400:11:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"}},"id":75207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6412:8:157","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":43107,"src":"6400:20:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":75210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6400:40:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"6385:55:157"},{"expression":{"arguments":[{"id":75213,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75205,"src":"6463:7:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f2073656e64205756617261","id":75214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6472:22:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_8ec034c4b2ac47d4229390ddbbb751ebe057cb836b00500cd6f2ff2a9adb713a","typeString":"literal_string \"failed to send WVara\""},"value":"failed to send WVara"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8ec034c4b2ac47d4229390ddbbb751ebe057cb836b00500cd6f2ff2a9adb713a","typeString":"literal_string \"failed to send WVara\""}],"id":75212,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6455:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6455:40:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75216,"nodeType":"ExpressionStatement","src":"6455:40:157"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_sendValueTo","nameLocation":"6205:12:157","parameters":{"id":75187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75184,"mutability":"mutable","name":"destination","nameLocation":"6226:11:157","nodeType":"VariableDeclaration","scope":75220,"src":"6218:19:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75183,"name":"address","nodeType":"ElementaryTypeName","src":"6218:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75186,"mutability":"mutable","name":"value","nameLocation":"6247:5:157","nodeType":"VariableDeclaration","scope":75220,"src":"6239:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75185,"name":"uint128","nodeType":"ElementaryTypeName","src":"6239:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"6217:36:157"},"returnParameters":{"id":75188,"nodeType":"ParameterList","parameters":[],"src":"6262:0:157"},"scope":75221,"stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[{"baseName":{"id":74652,"name":"IMirror","nameLocations":["422:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":73603,"src":"422:7:157"},"id":74653,"nodeType":"InheritanceSpecifier","src":"422:7:157"}],"canonicalName":"Mirror","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[75221,73603],"name":"Mirror","nameLocation":"412:6:157","scope":75222,"usedErrors":[43912,43918],"usedEvents":[73422,73433,73444,73451,73456,73467,73478,73485]}],"license":"UNLICENSED"},"id":157} \ No newline at end of file diff --git a/ethexe/ethereum/MirrorProxy.json b/ethexe/ethereum/MirrorProxy.json index 9acb9553940..859025fb2ca 100644 --- a/ethexe/ethereum/MirrorProxy.json +++ b/ethexe/ethereum/MirrorProxy.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"_router","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"payable"},{"type":"function","name":"router","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"}],"bytecode":{"object":"0x60a034606b57601f61021038819003918201601f19168301916001600160401b03831184841017606f57808492602094604052833981010312606b57516001600160a01b0381168103606b5760805260405161018c908161008482396080518181816023015260e10152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe608060405260043610156100c0575b632226c8b960e11b60809081526020906004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156100b5575f9015610139575060203d6020116100ae575b601f19601f820116608001906080821067ffffffffffffffff83111761009a5761009591604052608001610117565b610139565b634e487b7160e01b5f52604160045260245ffd5b503d610066565b6040513d5f823e3d90fd5b5f3560e01c63f887ea400361000e5734610113575f366003190112610113577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166080908152602090f35b5f80fd5b602090607f190112610113576080516001600160a01b03811681036101135790565b5f8091368280378136915af43d5f803e15610152573d5ff35b3d5ffdfea26469706673582212205992e45a1a3aab2e01486835c37b23f9ba510507f648357a87e689d38e5b10ed64736f6c634300081a0033","sourceMap":"259:282:158:-:0;;;;;;;;;;;;;-1:-1:-1;;259:282:158;;;;-1:-1:-1;;;;;259:282:158;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;259:282:158;;;;;;386:16;;259:282;;;;;;;;386:16;259:282;;;;;;;;;;;;-1:-1:-1;259:282:158;;;;;;-1:-1:-1;259:282:158;;;;;-1:-1:-1;259:282:158","linkReferences":{}},"deployedBytecode":{"object":"0x608060405260043610156100c0575b632226c8b960e11b60809081526020906004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156100b5575f9015610139575060203d6020116100ae575b601f19601f820116608001906080821067ffffffffffffffff83111761009a5761009591604052608001610117565b610139565b634e487b7160e01b5f52604160045260245ffd5b503d610066565b6040513d5f823e3d90fd5b5f3560e01c63f887ea400361000e5734610113575f366003190112610113577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166080908152602090f35b5f80fd5b602090607f190112610113576080516001600160a01b03811681036101135790565b5f8091368280378136915af43d5f803e15610152573d5ff35b3d5ffdfea26469706673582212205992e45a1a3aab2e01486835c37b23f9ba510507f648357a87e689d38e5b10ed64736f6c634300081a0033","sourceMap":"259:282:158:-:0;;;;;;;;;-1:-1:-1;;;;259:282:158;508:24;;;;;259:282;;516:6;-1:-1:-1;;;;;259:282:158;508:24;;;;;;-1:-1:-1;508:24:158;;2381:17:47;508:24:158;;;;;;;;;259:282;;;;;;;;;;;;;;;;;;508:24;259:282;;;;508:24;;:::i;:::-;2381:17:47;:::i;259:282:158:-;;;;-1:-1:-1;259:282:158;;;;;-1:-1:-1;259:282:158;508:24;;;;;;259:282;;;-1:-1:-1;259:282:158;;;;;;;;;;;;;;;;;;;-1:-1:-1;;259:282:158;;;;309:31;-1:-1:-1;;;;;259:282:158;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;259:282:158;;;;;;;:::o;949:895:47:-;1019:819;949:895;;1019:819;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{},"immutableReferences":{"75119":[{"start":35,"length":32},{"start":225,"length":32}]}},"methodIdentifiers":{"router()":"f887ea40"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"router\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/MirrorProxy.sol\":\"MirrorProxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":symbiotic-core/=lib/symbiotic-core/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]},\"src/IMirrorProxy.sol\":{\"keccak256\":\"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469\",\"dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG\"]},\"src/IRouter.sol\":{\"keccak256\":\"0xe617d8ee99b9f35a45b5591fe67cc6c60930a525933cafb2315eb45a1cd91d4f\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://9d3b9e731c182559acb506fa22b833591a29cedf1d2f34656819736fb044cc8f\",\"dweb:/ipfs/QmNPskadyFYM8zJMAQPAAYuLQCr3h3c8NLs2RQo4ZRQLq3\"]},\"src/MirrorProxy.sol\":{\"keccak256\":\"0xbb15dbe1f5a0bb2168af590f1aee9748d3a96b4f7423f3428fe6fd24a9796c30\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://d17ae2869b3fbfcc3a03754bedffcd798f70bf53b771f95d1f2f0b8f113662a8\",\"dweb:/ipfs/QmdUwWV5MdYzsxXaq1R2zLAttW5XwEKX6SSTpVo6pRynwq\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"stateMutability":"payable","type":"fallback"},{"inputs":[],"stateMutability":"view","type":"function","name":"router","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","symbiotic-core/=lib/symbiotic-core/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/MirrorProxy.sol":"MirrorProxy"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol":{"keccak256":"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd","urls":["bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac","dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e"],"license":"MIT"},"src/IMirrorProxy.sol":{"keccak256":"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570","urls":["bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469","dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0xe617d8ee99b9f35a45b5591fe67cc6c60930a525933cafb2315eb45a1cd91d4f","urls":["bzz-raw://9d3b9e731c182559acb506fa22b833591a29cedf1d2f34656819736fb044cc8f","dweb:/ipfs/QmNPskadyFYM8zJMAQPAAYuLQCr3h3c8NLs2RQo4ZRQLq3"],"license":"UNLICENSED"},"src/MirrorProxy.sol":{"keccak256":"0xbb15dbe1f5a0bb2168af590f1aee9748d3a96b4f7423f3428fe6fd24a9796c30","urls":["bzz-raw://d17ae2869b3fbfcc3a03754bedffcd798f70bf53b771f95d1f2f0b8f113662a8","dweb:/ipfs/QmdUwWV5MdYzsxXaq1R2zLAttW5XwEKX6SSTpVo6pRynwq"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/MirrorProxy.sol","id":75144,"exportedSymbols":{"IMirrorProxy":[73430],"IRouter":[73763],"MirrorProxy":[75143],"Proxy":[42208]},"nodeType":"SourceUnit","src":"39:503:158","nodes":[{"id":75107,"nodeType":"PragmaDirective","src":"39:24:158","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":75109,"nodeType":"ImportDirective","src":"65:62:158","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol","file":"@openzeppelin/contracts/proxy/Proxy.sol","nameLocation":"-1:-1:-1","scope":75144,"sourceUnit":42209,"symbolAliases":[{"foreign":{"id":75108,"name":"Proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42208,"src":"73:5:158","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75111,"nodeType":"ImportDirective","src":"128:48:158","nodes":[],"absolutePath":"src/IMirrorProxy.sol","file":"./IMirrorProxy.sol","nameLocation":"-1:-1:-1","scope":75144,"sourceUnit":73431,"symbolAliases":[{"foreign":{"id":75110,"name":"IMirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73430,"src":"136:12:158","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75113,"nodeType":"ImportDirective","src":"177:38:158","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":75144,"sourceUnit":73764,"symbolAliases":[{"foreign":{"id":75112,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73763,"src":"185:7:158","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75143,"nodeType":"ContractDefinition","src":"259:282:158","nodes":[{"id":75119,"nodeType":"VariableDeclaration","src":"309:31:158","nodes":[],"baseFunctions":[73429],"constant":false,"functionSelector":"f887ea40","mutability":"immutable","name":"router","nameLocation":"334:6:158","scope":75143,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75118,"name":"address","nodeType":"ElementaryTypeName","src":"309:7:158","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":75129,"nodeType":"FunctionDefinition","src":"347:62:158","nodes":[],"body":{"id":75128,"nodeType":"Block","src":"376:33:158","nodes":[],"statements":[{"expression":{"id":75126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":75124,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75119,"src":"386:6:158","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75125,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75121,"src":"395:7:158","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"386:16:158","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75127,"nodeType":"ExpressionStatement","src":"386:16:158"}]},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":75122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75121,"mutability":"mutable","name":"_router","nameLocation":"367:7:158","nodeType":"VariableDeclaration","scope":75129,"src":"359:15:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75120,"name":"address","nodeType":"ElementaryTypeName","src":"359:7:158","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"358:17:158"},"returnParameters":{"id":75123,"nodeType":"ParameterList","parameters":[],"src":"376:0:158"},"scope":75143,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":75142,"nodeType":"FunctionDefinition","src":"415:124:158","nodes":[],"body":{"id":75141,"nodeType":"Block","src":"491:48:158","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":75136,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75119,"src":"516:6:158","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75135,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73763,"src":"508:7:158","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$73763_$","typeString":"type(contract IRouter)"}},"id":75137,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"508:15:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$73763","typeString":"contract IRouter"}},"id":75138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"524:6:158","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":73617,"src":"508:22:158","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":75139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"508:24:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75134,"id":75140,"nodeType":"Return","src":"501:31:158"}]},"baseFunctions":[42189],"implemented":true,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"424:15:158","overrides":{"id":75131,"nodeType":"OverrideSpecifier","overrides":[],"src":"464:8:158"},"parameters":{"id":75130,"nodeType":"ParameterList","parameters":[],"src":"439:2:158"},"returnParameters":{"id":75134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75133,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75142,"src":"482:7:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75132,"name":"address","nodeType":"ElementaryTypeName","src":"482:7:158","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"481:9:158"},"scope":75143,"stateMutability":"view","virtual":true,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":75114,"name":"IMirrorProxy","nameLocations":["283:12:158"],"nodeType":"IdentifierPath","referencedDeclaration":73430,"src":"283:12:158"},"id":75115,"nodeType":"InheritanceSpecifier","src":"283:12:158"},{"baseName":{"id":75116,"name":"Proxy","nameLocations":["297:5:158"],"nodeType":"IdentifierPath","referencedDeclaration":42208,"src":"297:5:158"},"id":75117,"nodeType":"InheritanceSpecifier","src":"297:5:158"}],"canonicalName":"MirrorProxy","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[75143,42208,73430],"name":"MirrorProxy","nameLocation":"268:11:158","scope":75144,"usedErrors":[],"usedEvents":[]}],"license":"UNLICENSED"},"id":158} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"_router","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"payable"},{"type":"function","name":"router","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"}],"bytecode":{"object":"0x60a034606b57601f61021038819003918201601f19168301916001600160401b03831184841017606f57808492602094604052833981010312606b57516001600160a01b0381168103606b5760805260405161018c908161008482396080518181816023015260e10152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe608060405260043610156100c0575b63e6fabc0960e01b60809081526020906004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156100b5575f9015610139575060203d6020116100ae575b601f19601f820116608001906080821067ffffffffffffffff83111761009a5761009591604052608001610117565b610139565b634e487b7160e01b5f52604160045260245ffd5b503d610066565b6040513d5f823e3d90fd5b5f3560e01c63f887ea400361000e5734610113575f366003190112610113577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166080908152602090f35b5f80fd5b602090607f190112610113576080516001600160a01b03811681036101135790565b5f8091368280378136915af43d5f803e15610152573d5ff35b3d5ffdfea26469706673582212209ff5d0768b388d552aa08103cacc8bf82ca0130b3866af2c09be0493bef3b73664736f6c634300081a0033","sourceMap":"259:286:158:-:0;;;;;;;;;;;;;-1:-1:-1;;259:286:158;;;;-1:-1:-1;;;;;259:286:158;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;259:286:158;;;;;;386:16;;259:286;;;;;;;;386:16;259:286;;;;;;;;;;;;-1:-1:-1;259:286:158;;;;;;-1:-1:-1;259:286:158;;;;;-1:-1:-1;259:286:158","linkReferences":{}},"deployedBytecode":{"object":"0x608060405260043610156100c0575b63e6fabc0960e01b60809081526020906004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156100b5575f9015610139575060203d6020116100ae575b601f19601f820116608001906080821067ffffffffffffffff83111761009a5761009591604052608001610117565b610139565b634e487b7160e01b5f52604160045260245ffd5b503d610066565b6040513d5f823e3d90fd5b5f3560e01c63f887ea400361000e5734610113575f366003190112610113577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166080908152602090f35b5f80fd5b602090607f190112610113576080516001600160a01b03811681036101135790565b5f8091368280378136915af43d5f803e15610152573d5ff35b3d5ffdfea26469706673582212209ff5d0768b388d552aa08103cacc8bf82ca0130b3866af2c09be0493bef3b73664736f6c634300081a0033","sourceMap":"259:286:158:-:0;;;;;;;;;-1:-1:-1;;;;259:286:158;508:28;;;;;259:286;;516:6;-1:-1:-1;;;;;259:286:158;508:28;;;;;;-1:-1:-1;508:28:158;;2381:17:47;508:28:158;;;;;;;;;259:286;;;;;;;;;;;;;;;;;;508:28;259:286;;;;508:28;;:::i;:::-;2381:17:47;:::i;259:286:158:-;;;;-1:-1:-1;259:286:158;;;;;-1:-1:-1;259:286:158;508:28;;;;;;259:286;;;-1:-1:-1;259:286:158;;;;;;;;;;;;;;;;;;;-1:-1:-1;;259:286:158;;;;309:31;-1:-1:-1;;;;;259:286:158;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;259:286:158;;;;;;;:::o;949:895:47:-;1019:819;949:895;;1019:819;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{},"immutableReferences":{"75235":[{"start":35,"length":32},{"start":225,"length":32}]}},"methodIdentifiers":{"router()":"f887ea40"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"router\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/MirrorProxy.sol\":\"MirrorProxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":symbiotic-core/=lib/symbiotic-core/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3\",\"dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6\",\"dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087\",\"dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8\",\"dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da\",\"dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047\",\"dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615\",\"dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5\"]},\"src/IMirrorProxy.sol\":{\"keccak256\":\"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469\",\"dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG\"]},\"src/IRouter.sol\":{\"keccak256\":\"0xeb107ab461f4c9598bf85ab0ec01a0d34a0a5dd016abed77c3c32f27ca885abe\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://86d38748e5911f3b325957cc8703d023bb7b3f9dd6f60997dd8c1122fcd0e9b9\",\"dweb:/ipfs/QmTo5PQs3cdGT8xr1qNm85kht7vMdYF6dr2iYnL3PLwe5H\"]},\"src/MirrorProxy.sol\":{\"keccak256\":\"0x5aa79edf0ac44b938c81e38e5a63e5ed53078a67870e910cecf1019766f40326\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://dc722a0b42b2ad97f63486a200bfaed40f33dad6d0ea1697fd0c2d6cc6280316\",\"dweb:/ipfs/Qmb66iPmELyjyzaBDMaNr3XVL5QHCcf9s9cvhQuTceDHsP\"]},\"src/libraries/Gear.sol\":{\"keccak256\":\"0x726a90f878e03abe4dd98fd91a94d313596b22f9a7cc55da674d663ba9dde90b\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://f3d0eac56e80230b4a6d744be6877625403d19a0e951a07fa80d80ed3f26bc3d\",\"dweb:/ipfs/QmP7DdZ3YoFTqjJ1Jqyoy81LLNosZ7jN6sN3wnUYkVuJ2d\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"stateMutability":"payable","type":"fallback"},{"inputs":[],"stateMutability":"view","type":"function","name":"router","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","symbiotic-core/=lib/symbiotic-core/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/MirrorProxy.sol":"MirrorProxy"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol":{"keccak256":"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd","urls":["bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac","dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a","urls":["bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3","dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b","urls":["bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6","dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb","urls":["bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087","dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38","urls":["bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8","dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee","urls":["bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da","dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e","urls":["bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047","dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44","urls":["bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615","dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5"],"license":"MIT"},"src/IMirrorProxy.sol":{"keccak256":"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570","urls":["bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469","dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0xeb107ab461f4c9598bf85ab0ec01a0d34a0a5dd016abed77c3c32f27ca885abe","urls":["bzz-raw://86d38748e5911f3b325957cc8703d023bb7b3f9dd6f60997dd8c1122fcd0e9b9","dweb:/ipfs/QmTo5PQs3cdGT8xr1qNm85kht7vMdYF6dr2iYnL3PLwe5H"],"license":"UNLICENSED"},"src/MirrorProxy.sol":{"keccak256":"0x5aa79edf0ac44b938c81e38e5a63e5ed53078a67870e910cecf1019766f40326","urls":["bzz-raw://dc722a0b42b2ad97f63486a200bfaed40f33dad6d0ea1697fd0c2d6cc6280316","dweb:/ipfs/Qmb66iPmELyjyzaBDMaNr3XVL5QHCcf9s9cvhQuTceDHsP"],"license":"UNLICENSED"},"src/libraries/Gear.sol":{"keccak256":"0x726a90f878e03abe4dd98fd91a94d313596b22f9a7cc55da674d663ba9dde90b","urls":["bzz-raw://f3d0eac56e80230b4a6d744be6877625403d19a0e951a07fa80d80ed3f26bc3d","dweb:/ipfs/QmP7DdZ3YoFTqjJ1Jqyoy81LLNosZ7jN6sN3wnUYkVuJ2d"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/MirrorProxy.sol","id":75260,"exportedSymbols":{"IMirrorProxy":[73646],"IRouter":[73896],"MirrorProxy":[75259],"Proxy":[42208]},"nodeType":"SourceUnit","src":"39:507:158","nodes":[{"id":75223,"nodeType":"PragmaDirective","src":"39:24:158","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":75225,"nodeType":"ImportDirective","src":"65:62:158","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol","file":"@openzeppelin/contracts/proxy/Proxy.sol","nameLocation":"-1:-1:-1","scope":75260,"sourceUnit":42209,"symbolAliases":[{"foreign":{"id":75224,"name":"Proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42208,"src":"73:5:158","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75227,"nodeType":"ImportDirective","src":"128:48:158","nodes":[],"absolutePath":"src/IMirrorProxy.sol","file":"./IMirrorProxy.sol","nameLocation":"-1:-1:-1","scope":75260,"sourceUnit":73647,"symbolAliases":[{"foreign":{"id":75226,"name":"IMirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73646,"src":"136:12:158","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75229,"nodeType":"ImportDirective","src":"177:38:158","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":75260,"sourceUnit":73897,"symbolAliases":[{"foreign":{"id":75228,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73896,"src":"185:7:158","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75259,"nodeType":"ContractDefinition","src":"259:286:158","nodes":[{"id":75235,"nodeType":"VariableDeclaration","src":"309:31:158","nodes":[],"baseFunctions":[73645],"constant":false,"functionSelector":"f887ea40","mutability":"immutable","name":"router","nameLocation":"334:6:158","scope":75259,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75234,"name":"address","nodeType":"ElementaryTypeName","src":"309:7:158","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":75245,"nodeType":"FunctionDefinition","src":"347:62:158","nodes":[],"body":{"id":75244,"nodeType":"Block","src":"376:33:158","nodes":[],"statements":[{"expression":{"id":75242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":75240,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75235,"src":"386:6:158","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75241,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75237,"src":"395:7:158","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"386:16:158","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75243,"nodeType":"ExpressionStatement","src":"386:16:158"}]},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":75238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75237,"mutability":"mutable","name":"_router","nameLocation":"367:7:158","nodeType":"VariableDeclaration","scope":75245,"src":"359:15:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75236,"name":"address","nodeType":"ElementaryTypeName","src":"359:7:158","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"358:17:158"},"returnParameters":{"id":75239,"nodeType":"ParameterList","parameters":[],"src":"376:0:158"},"scope":75259,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":75258,"nodeType":"FunctionDefinition","src":"415:128:158","nodes":[],"body":{"id":75257,"nodeType":"Block","src":"491:52:158","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":75252,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75235,"src":"516:6:158","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75251,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73896,"src":"508:7:158","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$73896_$","typeString":"type(contract IRouter)"}},"id":75253,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"508:15:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$73896","typeString":"contract IRouter"}},"id":75254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"524:10:158","memberName":"mirrorImpl","nodeType":"MemberAccess","referencedDeclaration":73731,"src":"508:26:158","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":75255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"508:28:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75250,"id":75256,"nodeType":"Return","src":"501:35:158"}]},"baseFunctions":[42189],"implemented":true,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"424:15:158","overrides":{"id":75247,"nodeType":"OverrideSpecifier","overrides":[],"src":"464:8:158"},"parameters":{"id":75246,"nodeType":"ParameterList","parameters":[],"src":"439:2:158"},"returnParameters":{"id":75250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75249,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75258,"src":"482:7:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75248,"name":"address","nodeType":"ElementaryTypeName","src":"482:7:158","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"481:9:158"},"scope":75259,"stateMutability":"view","virtual":true,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":75230,"name":"IMirrorProxy","nameLocations":["283:12:158"],"nodeType":"IdentifierPath","referencedDeclaration":73646,"src":"283:12:158"},"id":75231,"nodeType":"InheritanceSpecifier","src":"283:12:158"},{"baseName":{"id":75232,"name":"Proxy","nameLocations":["297:5:158"],"nodeType":"IdentifierPath","referencedDeclaration":42208,"src":"297:5:158"},"id":75233,"nodeType":"InheritanceSpecifier","src":"297:5:158"}],"canonicalName":"MirrorProxy","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[75259,42208,73646],"name":"MirrorProxy","nameLocation":"268:11:158","scope":75260,"usedErrors":[],"usedEvents":[]}],"license":"UNLICENSED"},"id":158} \ No newline at end of file diff --git a/ethexe/ethereum/Router.json b/ethexe/ethereum/Router.json index 47bb0ecd782..ee276041db5 100644 --- a/ethexe/ethereum/Router.json +++ b/ethexe/ethereum/Router.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"baseFee","inputs":[],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"baseWeight","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"codeState","inputs":[{"name":"codeId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint8","internalType":"enum IRouter.CodeState"}],"stateMutability":"view"},{"type":"function","name":"commitBlocks","inputs":[{"name":"blockCommitmentsArray","type":"tuple[]","internalType":"struct IRouter.BlockCommitment[]","components":[{"name":"blockHash","type":"bytes32","internalType":"bytes32"},{"name":"blockTimestamp","type":"uint48","internalType":"uint48"},{"name":"prevCommitmentHash","type":"bytes32","internalType":"bytes32"},{"name":"predBlockHash","type":"bytes32","internalType":"bytes32"},{"name":"transitions","type":"tuple[]","internalType":"struct IRouter.StateTransition[]","components":[{"name":"actorId","type":"address","internalType":"address"},{"name":"newStateHash","type":"bytes32","internalType":"bytes32"},{"name":"inheritor","type":"address","internalType":"address"},{"name":"valueToReceive","type":"uint128","internalType":"uint128"},{"name":"valueClaims","type":"tuple[]","internalType":"struct IRouter.ValueClaim[]","components":[{"name":"messageId","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"value","type":"uint128","internalType":"uint128"}]},{"name":"messages","type":"tuple[]","internalType":"struct IRouter.OutgoingMessage[]","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"replyDetails","type":"tuple","internalType":"struct IRouter.ReplyDetails","components":[{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"code","type":"bytes4","internalType":"bytes4"}]}]}]}]},{"name":"signatures","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"commitCodes","inputs":[{"name":"codeCommitmentsArray","type":"tuple[]","internalType":"struct IRouter.CodeCommitment[]","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"valid","type":"bool","internalType":"bool"}]},{"name":"signatures","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"createProgram","inputs":[{"name":"codeId","type":"bytes32","internalType":"bytes32"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"payable"},{"type":"function","name":"createProgramWithDecoder","inputs":[{"name":"decoderImplementation","type":"address","internalType":"address"},{"name":"codeId","type":"bytes32","internalType":"bytes32"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"payable"},{"type":"function","name":"genesisBlockHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getStorageSlot","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"initialOwner","type":"address","internalType":"address"},{"name":"_mirror","type":"address","internalType":"address"},{"name":"_mirrorProxy","type":"address","internalType":"address"},{"name":"_wrappedVara","type":"address","internalType":"address"},{"name":"_validatorsKeys","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"lastBlockCommitmentHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"lastBlockCommitmentTimestamp","inputs":[],"outputs":[{"name":"","type":"uint48","internalType":"uint48"}],"stateMutability":"view"},{"type":"function","name":"mirror","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"mirrorProxy","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"programCodeId","inputs":[{"name":"program","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"programsCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"reinitialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"requestCodeValidation","inputs":[{"name":"codeId","type":"bytes32","internalType":"bytes32"},{"name":"blobTxHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setBaseWeight","inputs":[{"name":"_baseWeight","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMirror","inputs":[{"name":"_mirror","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setStorageSlot","inputs":[{"name":"namespace","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setValuePerWeight","inputs":[{"name":"_valuePerWeight","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"signingThresholdPercentage","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateValidators","inputs":[{"name":"validatorsAddressArray","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"validatedCodesCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validatorExists","inputs":[{"name":"validator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"validators","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"validatorsCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validatorsThreshold","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"valuePerWeight","inputs":[],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"wrappedVara","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"BaseWeightChanged","inputs":[{"name":"baseWeight","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"BlockCommitted","inputs":[{"name":"blockHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"CodeGotValidated","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"valid","type":"bool","indexed":true,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"CodeValidationRequested","inputs":[{"name":"codeId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"blobTxHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"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":"ProgramCreated","inputs":[{"name":"actorId","type":"address","indexed":false,"internalType":"address"},{"name":"codeId","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"StorageSlotChanged","inputs":[],"anonymous":false},{"type":"event","name":"ValidatorsSetChanged","inputs":[],"anonymous":false},{"type":"event","name":"ValuePerWeightChanged","inputs":[{"name":"valuePerWeight","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"error","name":"ECDSAInvalidSignature","inputs":[]},{"type":"error","name":"ECDSAInvalidSignatureLength","inputs":[{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ECDSAInvalidSignatureS","inputs":[{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"FailedDeployment","inputs":[]},{"type":"error","name":"InsufficientBalance","inputs":[{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]}],"bytecode":{"object":"0x6080806040523460d0577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c1660c1576002600160401b03196001600160401b03821601605c575b60405161298890816100d58239f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80604d565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c9081627a32e714611ce75750806301b1d156146113825780630834fecc1461134b5780631c149d8a1461120357806328e24b3d146111d95780632dacfb69146111ac5780633d43b4181461115a5780634083acec14611125578063444d9172146110ed5780635686cad51461103b578063666d124c14610f3f5780636c2eb35014610d375780636ef25c3a14610d0c578063715018a614610ca557806378ee5dec14610c6d5780638028861a14610bf05780638074b45514610b3157806388f50cf014610af95780638da5cb5b14610ac55780638febbd5914610a785780639067088e14610a305780639670822614610a0757806396a2ddfa146109da578063a6bbbe1c1461092f578063c13911e8146108e9578063ca1e781914610872578063d3fd63641461083c578063e71731e41461074f578063e97d3eb31461052a578063ed612f8c146104fd578063edc87225146104db578063efd81abc146104ae578063f2fde38b146104885763f8453e7c14610191575f80fd5b346104845760a0366003190112610484576101aa611d41565b602435906001600160a01b038216820361048457604435916001600160a01b038316830361048457606435926001600160a01b0384168403610484576084356001600160401b038111610484573660238201121561048457610216903690602481600401359101611dfe565b905f805160206129338339815191525460ff8160401c1615946001600160401b0382168015908161047c575b6001149081610472575b159081610469575b5061045a5767ffffffffffffffff1982166001175f8051602061293383398151915255610297918661042e575b5061028a6127ab565b6102926127ab565b611fda565b60409485516102a68782611d57565b6017815260208101907f726f757465722e73746f726167652e526f75746572563100000000000000000082526102da61226c565b5190205f19810190811161041a5786519060208201908152602082526103008883611d57565b60ff19915190201690815f80516020612913833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc5f80a15f1943019243841161041a57924082556001820180546001600160a01b03199081166001600160a01b03978816179091556002830180548216948716949094179093556003820180549093169416939093179055611a0a60068301556007919091018054680a000000009502f9006001600160c01b03199091161790556103c39061259d565b6103c957005b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f8051602061293383398151915254165f80516020612933833981519152555160018152a1005b634e487b7160e01b5f52601160045260245ffd5b68ffffffffffffffffff191668010000000000000001175f80516020612933833981519152555f610281565b63f92ee8a960e01b5f5260045ffd5b9050155f610254565b303b15915061024c565b879150610242565b5f80fd5b34610484576020366003190112610484576104ac6104a4611d41565b61029261226c565b005b34610484575f36600319011261048457602060065f80516020612913833981519152540154604051908152f35b34610484575f3660031901126104845760206104f5611f9c565b604051908152f35b34610484575f36600319011261048457602060095f80516020612913833981519152540154604051908152f35b34610484576040366003190112610484576004356001600160401b0381116104845736602382011215610484578060040135906001600160401b038211610484573660248360061b83010111610484576024356001600160401b0381116104845761059a83913690600401611d11565b90925f8051602061291383398151915254906060925f95600a8401945b8688101561073e578760061b840197610609604460248b01359a01926105dc84611f81565b60405160208101918d8352151560f81b604082015260218152610600604182611d57565b51902090611e62565b98805f528760205260ff60405f205416600381101561072a576001036106d557610634600193611f81565b15610692577f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c960208285935f528a825260405f20600260ff19825416179055600b8a016106818154611f8e565b9055604051908152a25b01966105b7565b7f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c96020825f9384528a825260408420805460ff19169055604051908152a261068b565b60405162461bcd60e51b815260206004820152602760248201527f636f64652073686f756c642062652072657175657374656420666f722076616c60448201526634b230ba34b7b760c91b6064820152608490fd5b634e487b7160e01b5f52602160045260245ffd5b6104ac9350602081519101206120e7565b34610484576020366003190112610484576004356001600160401b0381116104845761077f903690600401611d11565b61078761226c565b5f805160206129138339815191525460088101906009015f5b81548110156107d7575f82815260208082208301546001600160a01b0316825284905260409020805460ff191690556001016107a0565b5080545f825591508161081e575b6107f86107f3368587611dfe565b61259d565b7f144bbc027dc176e94c43b7c1bcff2a8aa58ab434029eec294743cd4ab2e54f515f80a1005b5f5260205f20908101905b818110156107e5575f8155600101610829565b34610484575f3660031901126104845760206001600160401b0360075f8051602061291383398151915254015416604051908152f35b34610484575f3660031901126104845761089c60095f805160206129138339815191525401611eee565b6040518091602082016020835281518091526020604084019201905f5b8181106108c7575050500390f35b82516001600160a01b03168452859450602093840193909201916001016108b9565b3461048457602036600319011261048457600a5f8051602061291383398151915254016004355f5260205260ff60405f205416604051600382101561072a576020918152f35b34610484576020366003190112610484576004356001600160801b03811690818103610484577f9f5e1796f1a0adf311f86170503308a06a16560a7679b7b6da35f4999200d7409160209161098261226c565b5f8051602061291383398151915254600701805477ffffffffffffffffffffffffffffffff00000000000000001916604092831b77ffffffffffffffffffffffffffffffff00000000000000001617905551908152a1005b34610484575f366003190112610484576020600d5f80516020612913833981519152540154604051908152f35b34610484575f3660031901126104845760205f8051602061291383398151915254604051908152f35b3461048457602036600319011261048457610a49611d41565b600c5f8051602061291383398151915254019060018060a01b03165f52602052602060405f2054604051908152f35b3461048457602036600319011261048457610a91611d41565b60085f8051602061291383398151915254019060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b34610484575f366003190112610484575f805160206128f3833981519152546040516001600160a01b039091168152602090f35b34610484575f366003190112610484575f8051602061291383398151915254600301546040516001600160a01b039091168152602090f35b6080366003190112610484576044356001600160401b03811161048457610b5c903690600401611dd1565b90606435916001600160801b038316830361048457610b80836024356004356122bf565b6001600160a01b0390911692909190833b1561048457610bb75f9360405196879485946306f0ee9760e51b86523260048701611eb1565b038183855af1918215610be557602092610bd5575b50604051908152f35b5f610bdf91611d57565b82610bcc565b6040513d5f823e3d90fd5b34610484576020366003190112610484576004356001600160401b0381168091036104845760207f01326573cfc0bc40a2550923254394ebd7529e3e3301840dfa33cf786aead0c791610c4161226c565b5f8051602061291383398151915254600701805467ffffffffffffffff191682179055604051908152a1005b34610484575f366003190112610484575f8051602061291383398151915254600201546040516001600160a01b039091168152602090f35b34610484575f36600319011261048457610cbd61226c565b5f805160206128f383398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610484575f366003190112610484576020610d26611f3f565b6001600160801b0360405191168152f35b34610484575f36600319011261048457610d4f61226c565b5f805160206129338339815191525460ff8160401c168015610f2b575b61045a5768ffffffffffffffffff191668010000000000000002175f80516020612933833981519152555f80516020612913833981519152546001810154600282015460038301546001600160a01b0390811693918116921690610dd290600901611eee565b906040918251610de28482611d57565b6017815260208101907f726f757465722e73746f726167652e526f7574657256320000000000000000008252610e1661226c565b5190205f19810190811161041a578351906020820190815260208252610e3c8583611d57565b60ff19915190201694855f80516020612913833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc5f80a15f19430143811161041a574086556001860180546001600160a01b03199081166001600160a01b03958616179091556002870180548216968516969096179095556003909501805490941694909116939093179091557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160209190610efe9061259d565b60ff60401b195f8051602061293383398151915254165f80516020612933833981519152555160028152a1005b5060026001600160401b0382161015610d6c565b60a036600319011261048457610f53611d41565b6044356024356064356001600160401b03811161048457610f78903690600401611dd1565b90608435946001600160801b038616860361048457610f988686866122bf565b949060018060a01b0316956040519060208201928352604082015260408152610fc2606082611d57565b519020853b1561048457604051635b1b84f760e01b81526001600160a01b03909216600483015260248201525f8160448183895af18015610be55761102b575b50833b1561048457610bb75f9360405196879485946306f0ee9760e51b86523260048701611eb1565b5f61103591611d57565b85611002565b34610484576020366003190112610484576004356001600160401b03811161048457366023820112156104845761107c903690602481600401359101611d8c565b61108461226c565b602081519101205f19810190811161041a576040519060208201908152602082526110b0604083611d57565b9051902060ff19165f80516020612913833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc5f80a1005b34610484575f366003190112610484575f8051602061291383398151915254600101546040516001600160a01b039091168152602090f35b34610484575f36600319011261048457602065ffffffffffff60055f8051602061291383398151915254015416604051908152f35b3461048457602036600319011261048457611173611d41565b61117b61226c565b5f805160206129138339815191525460010180546001600160a01b0319166001600160a01b03909216919091179055005b34610484575f36600319011261048457602060045f80516020612913833981519152540154604051908152f35b34610484575f3660031901126104845760205f805160206129138339815191525454604051908152f35b34610484576040366003190112610484576024356004358115801590611341575b156112fc57600a5f80516020612913833981519152540190805f528160205260ff60405f205416600381101561072a5761129e577f65672eaf4ff8b823ea29ae013fef437d1fa9ed431125263a7a1f0ac49eada39692604092825f52602052825f20600160ff1982541617905582519182526020820152a1005b60405162461bcd60e51b815260206004820152603060248201527f636f64652077697468207375636820696420616c72656164792072657175657360448201526f1d1959081bdc881d985b1a59185d195960821b6064820152608490fd5b60405162461bcd60e51b815260206004820152601c60248201527f626c6f6254784861736820636f756c646e277420626520666f756e64000000006044820152606490fd5b505f491515611224565b34610484575f366003190112610484576020610d266001600160801b0360075f8051602061291383398151915254015460401c1690565b34610484576040366003190112610484576004356001600160401b038111610484576113b2903690600401611d11565b906024356001600160401b038111610484576113d2903690600401611d11565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f009291925c611cd85760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d5f9060605b85831015611ca1578260051b84013595609e1985360301871215610484575f805160206129138339815191525460048101805460408a8901013503611c5d5761147260608a890101356126de565b15611c0c5788879995999894989693960135905565ffffffffffff600561149d6020878a010161204b565b9201911665ffffffffffff198254161790556060925f965b6114c5878301608081019061205e565b9050881015611b62576114e8886114e2898501608081019061205e565b90612093565b955f805160206129138339815191525461150188612721565b6001600160a01b03165f908152600c8201602052604090205415611b0557600301546001600160801b03906020906001600160a01b031660448a5f611551606061154a84612721565b9301612735565b60405163a9059cbb60e01b81526001600160a01b0390931660048401529590951660248201529384928391905af18015610be557611ad9575b506001600160a01b0361159c88612721565b16995f9160605b6115b060808b018b612761565b9050841015611716576115c660808b018b612761565b85919510156117025760206116708f93826115e781606087028b0101612721565b6115f86040606088028c0101612735565b6040519083820192606089028d013584526001600160601b03199060601b1660408301526001600160801b03199060801b1660548201526044815261163e606482611d57565b6040519584879551918291018587015e840190838201905f8252519283915e01015f815203601f198101835282611d57565b94611682602060608402830101612721565b611693604060608502840101612735565b933b15610484578f5f92836064926001600160801b0360405198899687956314503e5160e01b875260608b020135600487015260018060a01b031660248601521660448401525af1918215610be5576001926116f2575b5001926115a3565b5f6116fc91611d57565b8e6116ea565b634e487b7160e01b5f52603260045260245ffd5b9690919599939492509996996060915f5b61173460a08c018c61205e565b905081101561197157806117f58f92611755906114e28f60a081019061205e565b9561176260208801612721565b6060610600603460548b61178561177c60408301836120b5565b96909201612735565b8d608061179460a08301612796565b9188604051998a96602088019c8d853590526001600160601b03199060601b166040890152888801378501936001600160801b031990831b16868501520135606483015263ffffffff60e01b16608482015203016014810184520182611d57565b9460808101356118a85761180b60208201612721565b9261181960408301836120b5565b91909461182860608501612735565b823b15610484575f9485916001600160801b036118766040519a8b988997889663c2df600960e01b885235600488015260018060a01b03166024870152608060448701526084860191611e91565b9116606483015203925af1918215610be557600192611898575b505b01611727565b5f6118a291611d57565b8f611890565b916118b560208401612721565b906118c360408501856120b5565b6118d260608794939401612735565b956118df60a08201612796565b94833b156104845761192b975f96608088946001600160801b036040519c8d9a8b998a9863c78bde7760e01b8a5260018060a01b031660048a015260a060248a015260a4890191611e91565b94166044860152013560648401526001600160e01b031916608483015203925af1918215610be557600192611961575b50611892565b5f61196b91611d57565b8f61195b565b50959496929b939998909a91604082019160018060a01b0361199284612721565b16611a82575b602081013591863b15610484575f80976024604051809a8193638ea59e1d60e01b83528860048401525af1958615610be557600197611a6397611a72575b506119f560606119ee6119e886612721565b97612721565b9401612735565b90602081519101209160208151910120926040519460208601966001600160601b03199060601b16875260348601526001600160601b03199060601b1660548501526001600160801b03199060801b166068840152607883015260988201526098815261060060b882611d57565b940196929790979491946114b5565b5f611a7c91611d57565b5f6119d6565b611a8b83612721565b863b1561048457604051630959112b60e11b81526001600160a01b0390911660048201525f81602481838b5af18015610be557611ac9575b50611998565b5f611ad391611d57565b8e611ac3565b611af99060203d8111611afe575b611af18183611d57565b810190612749565b61158a565b503d611ae7565b60405162461bcd60e51b815260206004820152602f60248201527f636f756c646e277420706572666f726d207472616e736974696f6e20666f722060448201526e756e6b6e6f776e2070726f6772616d60881b6064820152608490fd5b90611c0292975093600193949895987fd756eca21e02cb0dbde1e44a4d9c6921b5c8aa4668cfa0752784b3dc855bce1e6020604051838b01358152a1611bac6020828a010161204b565b91602081519101206060604051926020840194818c0135865265ffffffffffff60d01b9060d01b1660408501526040818c01013560468501528a010135606683015260868201526086815261060060a682611d57565b9401919093611424565b60405162461bcd60e51b815260206004820152602360248201527f616c6c6f776564207072656465636573736f7220626c6f636b206e6f7420666f6044820152621d5b9960ea1b6064820152608490fd5b606460405162461bcd60e51b815260206004820152602060248201527f696e76616c69642070726576696f757320636f6d6d69746d656e7420686173686044820152fd5b9084611cb392602081519101206120e7565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b633ee5aeb560e01b5f5260045ffd5b34610484575f36600319011261048457602090600b5f805160206129138339815191525401548152f35b9181601f84011215610484578235916001600160401b038311610484576020808501948460051b01011161048457565b600435906001600160a01b038216820361048457565b90601f801991011681019081106001600160401b03821117611d7857604052565b634e487b7160e01b5f52604160045260245ffd5b9291926001600160401b038211611d785760405191611db5601f8201601f191660200184611d57565b829481845281830111610484578281602093845f960137010152565b9181601f84011215610484578235916001600160401b038311610484576020838186019501011161048457565b9092916001600160401b038411611d78578360051b916020604051611e2582860182611d57565b809681520192810191821161048457915b818310611e4257505050565b82356001600160a01b038116810361048457815260209283019201611e36565b602080611e8f928195946040519682889351918291018585015e8201908382015203018085520183611d57565b565b908060209392818452848401375f828201840152601f01601f1916010190565b93959490611ee16001600160801b0393606095859360018060a01b03168852608060208901526080880191611e91565b9616604085015216910152565b90604051918281549182825260208201905f5260205f20925f5b818110611f1d575050611e8f92500383611d57565b84546001600160a01b0316835260019485019487945060209093019201611f08565b5f8051602061291383398151915254600701546001600160401b038116906001600160801b039060401c811616026001600160801b03811690810361041a5790565b3580151581036104845790565b5f19811461041a5760010190565b5f8051602061291383398151915254600660098201549101549081810291818304149015171561041a5761270f810180911161041a57612710900490565b6001600160a01b03168015612038575f805160206128f383398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b3565ffffffffffff811681036104845790565b903590601e198136030182121561048457018035906001600160401b03821161048457602001918160051b3603831361048457565b91908110156117025760051b8101359060be1981360301821215610484570190565b903590601e198136030182121561048457018035906001600160401b0382116104845760200191813603831361048457565b905f805160206129138339815191525490612100611f9c565b9260405190602082019081526020825261211b604083611d57565b612157603660405180936020820195601960f81b87523060601b60228401525180918484015e81015f838201520301601f198101835282611d57565b5190205f9260080191835b868510156122605761219861218f6121896121828860051b8601866120b5565b3691611d8c565b856127d6565b90929192612810565b6001600160a01b03165f9081526020859052604090205460ff1615612225576121c090611f8e565b938585146121d15760010193612162565b505050509091505b106121e057565b60405162461bcd60e51b815260206004820152601b60248201527f6e6f7420656e6f7567682076616c6964207369676e61747572657300000000006044820152606490fd5b60405162461bcd60e51b8152602060048201526013602482015272696e636f7272656374207369676e617475726560681b6044820152606490fd5b949550505050506121d9565b5f805160206128f3833981519152546001600160a01b0316330361228c57565b63118cdaa760e01b5f523360045260245ffd5b906001600160801b03809116911601906001600160801b03821161041a57565b9291925f805160206129138339815191525491815f52600a830160205260ff60405f205416600381101561072a57600203612541576122fc611f3f565b60038401805460405163313ce56760e01b81529297919290602090829060049082906001600160a01b03165afa8015610be5575f90612504575b60ff915016604d811161041a5760646123686020936123636001600160801b038095600a0a16809c61229f565b61229f565b93546040516323b872dd60e01b8152326004820152306024820152929094166044830152909283919082905f906001600160a01b03165af1908115610be5575f916124e5575b50156124a0576e5af43d82803e903d91602b57fd5bf360028401549160405160208101918583526040820152604081526123e9606082611d57565b51902091763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f526effffffffffffffffffffffffffffff199060781b1617602052603760095ff5916001600160a01b038316908115612491577f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf191600d602092825f52600c810184528560405f2055016124848154611f8e565b9055604051908152a29190565b63b06ebf3d60e01b5f5260045ffd5b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b6124fe915060203d602011611afe57611af18183611d57565b5f6123ae565b506020813d602011612539575b8161251e60209383611d57565b81010312610484575160ff811681036104845760ff90612336565b3d9150612511565b60405162461bcd60e51b815260206004820152602e60248201527f636f6465206d7573742062652076616c696461746564206265666f726520707260448201526d37b3b930b69031b932b0ba34b7b760911b6064820152608490fd5b5f8051602061291383398151915254906009820190815461268d579091600801905f5b81518110156125ff57600581901b82016020908101516001600160a01b03165f9081529084905260409020805460ff19166001908117909155016125c0565b5080519291506001600160401b038311611d7857680100000000000000008311611d78578154838355808410612667575b50602001905f5260205f205f5b83811061264a5750505050565b82516001600160a01b03168183015560209092019160010161263d565b825f528360205f2091820191015b8181106126825750612630565b5f8155600101612675565b60405162461bcd60e51b815260206004820152602360248201527f70726576696f75732076616c696461746f727320776572656e27742072656d6f6044820152621d995960ea1b6064820152608490fd5b905f19430143811161041a57805b6126f7575b505f9150565b804083810361270857506001925050565b1561271c57801561041a575f1901806126ec565b6126f1565b356001600160a01b03811681036104845790565b356001600160801b03811681036104845790565b90816020910312610484575180151581036104845790565b903590601e198136030182121561048457018035906001600160401b0382116104845760200191606082023603831361048457565b356001600160e01b0319811681036104845790565b60ff5f805160206129338339815191525460401c16156127c757565b631afcd79f60e31b5f5260045ffd5b8151919060418303612806576127ff9250602082015190606060408401519301515f1a90612870565b9192909190565b50505f9160029190565b600481101561072a5780612822575050565b600181036128395763f645eedf60e01b5f5260045ffd5b60028103612854575063fce698f760e01b5f5260045260245ffd5b60031461285e5750565b6335e2f38360e21b5f5260045260245ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116128e7579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15610be5575f516001600160a01b038116156128dd57905f905f90565b505f906001905f90565b5050505f916003919056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212205b21b15c839d0898ccc6206da2a4be14eda15d1a5e91a72c0e2b08ae2f9a2e3e64736f6c634300081a0033","sourceMap":"879:18203:159:-:0;;;;;;;8837:64:26;879:18203:159;;;;;;7896:76:26;;-1:-1:-1;;;;;;;;;;;879:18203:159;;7985:34:26;7981:146;;-1:-1:-1;879:18203:159;;;;;;;;;7981:146:26;-1:-1:-1;;;;;;879:18203:159;-1:-1:-1;;;;;879:18203:159;;;8837:64:26;879:18203:159;;;8087:29:26;;879:18203:159;;8087:29:26;7981:146;;;;7896:76;7938:23;;;-1:-1:-1;7938:23:26;;-1:-1:-1;7938:23:26;879:18203:159;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080806040526004361015610012575f80fd5b5f3560e01c9081627a32e714611ce75750806301b1d156146113825780630834fecc1461134b5780631c149d8a1461120357806328e24b3d146111d95780632dacfb69146111ac5780633d43b4181461115a5780634083acec14611125578063444d9172146110ed5780635686cad51461103b578063666d124c14610f3f5780636c2eb35014610d375780636ef25c3a14610d0c578063715018a614610ca557806378ee5dec14610c6d5780638028861a14610bf05780638074b45514610b3157806388f50cf014610af95780638da5cb5b14610ac55780638febbd5914610a785780639067088e14610a305780639670822614610a0757806396a2ddfa146109da578063a6bbbe1c1461092f578063c13911e8146108e9578063ca1e781914610872578063d3fd63641461083c578063e71731e41461074f578063e97d3eb31461052a578063ed612f8c146104fd578063edc87225146104db578063efd81abc146104ae578063f2fde38b146104885763f8453e7c14610191575f80fd5b346104845760a0366003190112610484576101aa611d41565b602435906001600160a01b038216820361048457604435916001600160a01b038316830361048457606435926001600160a01b0384168403610484576084356001600160401b038111610484573660238201121561048457610216903690602481600401359101611dfe565b905f805160206129338339815191525460ff8160401c1615946001600160401b0382168015908161047c575b6001149081610472575b159081610469575b5061045a5767ffffffffffffffff1982166001175f8051602061293383398151915255610297918661042e575b5061028a6127ab565b6102926127ab565b611fda565b60409485516102a68782611d57565b6017815260208101907f726f757465722e73746f726167652e526f75746572563100000000000000000082526102da61226c565b5190205f19810190811161041a5786519060208201908152602082526103008883611d57565b60ff19915190201690815f80516020612913833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc5f80a15f1943019243841161041a57924082556001820180546001600160a01b03199081166001600160a01b03978816179091556002830180548216948716949094179093556003820180549093169416939093179055611a0a60068301556007919091018054680a000000009502f9006001600160c01b03199091161790556103c39061259d565b6103c957005b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f8051602061293383398151915254165f80516020612933833981519152555160018152a1005b634e487b7160e01b5f52601160045260245ffd5b68ffffffffffffffffff191668010000000000000001175f80516020612933833981519152555f610281565b63f92ee8a960e01b5f5260045ffd5b9050155f610254565b303b15915061024c565b879150610242565b5f80fd5b34610484576020366003190112610484576104ac6104a4611d41565b61029261226c565b005b34610484575f36600319011261048457602060065f80516020612913833981519152540154604051908152f35b34610484575f3660031901126104845760206104f5611f9c565b604051908152f35b34610484575f36600319011261048457602060095f80516020612913833981519152540154604051908152f35b34610484576040366003190112610484576004356001600160401b0381116104845736602382011215610484578060040135906001600160401b038211610484573660248360061b83010111610484576024356001600160401b0381116104845761059a83913690600401611d11565b90925f8051602061291383398151915254906060925f95600a8401945b8688101561073e578760061b840197610609604460248b01359a01926105dc84611f81565b60405160208101918d8352151560f81b604082015260218152610600604182611d57565b51902090611e62565b98805f528760205260ff60405f205416600381101561072a576001036106d557610634600193611f81565b15610692577f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c960208285935f528a825260405f20600260ff19825416179055600b8a016106818154611f8e565b9055604051908152a25b01966105b7565b7f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c96020825f9384528a825260408420805460ff19169055604051908152a261068b565b60405162461bcd60e51b815260206004820152602760248201527f636f64652073686f756c642062652072657175657374656420666f722076616c60448201526634b230ba34b7b760c91b6064820152608490fd5b634e487b7160e01b5f52602160045260245ffd5b6104ac9350602081519101206120e7565b34610484576020366003190112610484576004356001600160401b0381116104845761077f903690600401611d11565b61078761226c565b5f805160206129138339815191525460088101906009015f5b81548110156107d7575f82815260208082208301546001600160a01b0316825284905260409020805460ff191690556001016107a0565b5080545f825591508161081e575b6107f86107f3368587611dfe565b61259d565b7f144bbc027dc176e94c43b7c1bcff2a8aa58ab434029eec294743cd4ab2e54f515f80a1005b5f5260205f20908101905b818110156107e5575f8155600101610829565b34610484575f3660031901126104845760206001600160401b0360075f8051602061291383398151915254015416604051908152f35b34610484575f3660031901126104845761089c60095f805160206129138339815191525401611eee565b6040518091602082016020835281518091526020604084019201905f5b8181106108c7575050500390f35b82516001600160a01b03168452859450602093840193909201916001016108b9565b3461048457602036600319011261048457600a5f8051602061291383398151915254016004355f5260205260ff60405f205416604051600382101561072a576020918152f35b34610484576020366003190112610484576004356001600160801b03811690818103610484577f9f5e1796f1a0adf311f86170503308a06a16560a7679b7b6da35f4999200d7409160209161098261226c565b5f8051602061291383398151915254600701805477ffffffffffffffffffffffffffffffff00000000000000001916604092831b77ffffffffffffffffffffffffffffffff00000000000000001617905551908152a1005b34610484575f366003190112610484576020600d5f80516020612913833981519152540154604051908152f35b34610484575f3660031901126104845760205f8051602061291383398151915254604051908152f35b3461048457602036600319011261048457610a49611d41565b600c5f8051602061291383398151915254019060018060a01b03165f52602052602060405f2054604051908152f35b3461048457602036600319011261048457610a91611d41565b60085f8051602061291383398151915254019060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b34610484575f366003190112610484575f805160206128f3833981519152546040516001600160a01b039091168152602090f35b34610484575f366003190112610484575f8051602061291383398151915254600301546040516001600160a01b039091168152602090f35b6080366003190112610484576044356001600160401b03811161048457610b5c903690600401611dd1565b90606435916001600160801b038316830361048457610b80836024356004356122bf565b6001600160a01b0390911692909190833b1561048457610bb75f9360405196879485946306f0ee9760e51b86523260048701611eb1565b038183855af1918215610be557602092610bd5575b50604051908152f35b5f610bdf91611d57565b82610bcc565b6040513d5f823e3d90fd5b34610484576020366003190112610484576004356001600160401b0381168091036104845760207f01326573cfc0bc40a2550923254394ebd7529e3e3301840dfa33cf786aead0c791610c4161226c565b5f8051602061291383398151915254600701805467ffffffffffffffff191682179055604051908152a1005b34610484575f366003190112610484575f8051602061291383398151915254600201546040516001600160a01b039091168152602090f35b34610484575f36600319011261048457610cbd61226c565b5f805160206128f383398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610484575f366003190112610484576020610d26611f3f565b6001600160801b0360405191168152f35b34610484575f36600319011261048457610d4f61226c565b5f805160206129338339815191525460ff8160401c168015610f2b575b61045a5768ffffffffffffffffff191668010000000000000002175f80516020612933833981519152555f80516020612913833981519152546001810154600282015460038301546001600160a01b0390811693918116921690610dd290600901611eee565b906040918251610de28482611d57565b6017815260208101907f726f757465722e73746f726167652e526f7574657256320000000000000000008252610e1661226c565b5190205f19810190811161041a578351906020820190815260208252610e3c8583611d57565b60ff19915190201694855f80516020612913833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc5f80a15f19430143811161041a574086556001860180546001600160a01b03199081166001600160a01b03958616179091556002870180548216968516969096179095556003909501805490941694909116939093179091557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160209190610efe9061259d565b60ff60401b195f8051602061293383398151915254165f80516020612933833981519152555160028152a1005b5060026001600160401b0382161015610d6c565b60a036600319011261048457610f53611d41565b6044356024356064356001600160401b03811161048457610f78903690600401611dd1565b90608435946001600160801b038616860361048457610f988686866122bf565b949060018060a01b0316956040519060208201928352604082015260408152610fc2606082611d57565b519020853b1561048457604051635b1b84f760e01b81526001600160a01b03909216600483015260248201525f8160448183895af18015610be55761102b575b50833b1561048457610bb75f9360405196879485946306f0ee9760e51b86523260048701611eb1565b5f61103591611d57565b85611002565b34610484576020366003190112610484576004356001600160401b03811161048457366023820112156104845761107c903690602481600401359101611d8c565b61108461226c565b602081519101205f19810190811161041a576040519060208201908152602082526110b0604083611d57565b9051902060ff19165f80516020612913833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc5f80a1005b34610484575f366003190112610484575f8051602061291383398151915254600101546040516001600160a01b039091168152602090f35b34610484575f36600319011261048457602065ffffffffffff60055f8051602061291383398151915254015416604051908152f35b3461048457602036600319011261048457611173611d41565b61117b61226c565b5f805160206129138339815191525460010180546001600160a01b0319166001600160a01b03909216919091179055005b34610484575f36600319011261048457602060045f80516020612913833981519152540154604051908152f35b34610484575f3660031901126104845760205f805160206129138339815191525454604051908152f35b34610484576040366003190112610484576024356004358115801590611341575b156112fc57600a5f80516020612913833981519152540190805f528160205260ff60405f205416600381101561072a5761129e577f65672eaf4ff8b823ea29ae013fef437d1fa9ed431125263a7a1f0ac49eada39692604092825f52602052825f20600160ff1982541617905582519182526020820152a1005b60405162461bcd60e51b815260206004820152603060248201527f636f64652077697468207375636820696420616c72656164792072657175657360448201526f1d1959081bdc881d985b1a59185d195960821b6064820152608490fd5b60405162461bcd60e51b815260206004820152601c60248201527f626c6f6254784861736820636f756c646e277420626520666f756e64000000006044820152606490fd5b505f491515611224565b34610484575f366003190112610484576020610d266001600160801b0360075f8051602061291383398151915254015460401c1690565b34610484576040366003190112610484576004356001600160401b038111610484576113b2903690600401611d11565b906024356001600160401b038111610484576113d2903690600401611d11565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f009291925c611cd85760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d5f9060605b85831015611ca1578260051b84013595609e1985360301871215610484575f805160206129138339815191525460048101805460408a8901013503611c5d5761147260608a890101356126de565b15611c0c5788879995999894989693960135905565ffffffffffff600561149d6020878a010161204b565b9201911665ffffffffffff198254161790556060925f965b6114c5878301608081019061205e565b9050881015611b62576114e8886114e2898501608081019061205e565b90612093565b955f805160206129138339815191525461150188612721565b6001600160a01b03165f908152600c8201602052604090205415611b0557600301546001600160801b03906020906001600160a01b031660448a5f611551606061154a84612721565b9301612735565b60405163a9059cbb60e01b81526001600160a01b0390931660048401529590951660248201529384928391905af18015610be557611ad9575b506001600160a01b0361159c88612721565b16995f9160605b6115b060808b018b612761565b9050841015611716576115c660808b018b612761565b85919510156117025760206116708f93826115e781606087028b0101612721565b6115f86040606088028c0101612735565b6040519083820192606089028d013584526001600160601b03199060601b1660408301526001600160801b03199060801b1660548201526044815261163e606482611d57565b6040519584879551918291018587015e840190838201905f8252519283915e01015f815203601f198101835282611d57565b94611682602060608402830101612721565b611693604060608502840101612735565b933b15610484578f5f92836064926001600160801b0360405198899687956314503e5160e01b875260608b020135600487015260018060a01b031660248601521660448401525af1918215610be5576001926116f2575b5001926115a3565b5f6116fc91611d57565b8e6116ea565b634e487b7160e01b5f52603260045260245ffd5b9690919599939492509996996060915f5b61173460a08c018c61205e565b905081101561197157806117f58f92611755906114e28f60a081019061205e565b9561176260208801612721565b6060610600603460548b61178561177c60408301836120b5565b96909201612735565b8d608061179460a08301612796565b9188604051998a96602088019c8d853590526001600160601b03199060601b166040890152888801378501936001600160801b031990831b16868501520135606483015263ffffffff60e01b16608482015203016014810184520182611d57565b9460808101356118a85761180b60208201612721565b9261181960408301836120b5565b91909461182860608501612735565b823b15610484575f9485916001600160801b036118766040519a8b988997889663c2df600960e01b885235600488015260018060a01b03166024870152608060448701526084860191611e91565b9116606483015203925af1918215610be557600192611898575b505b01611727565b5f6118a291611d57565b8f611890565b916118b560208401612721565b906118c360408501856120b5565b6118d260608794939401612735565b956118df60a08201612796565b94833b156104845761192b975f96608088946001600160801b036040519c8d9a8b998a9863c78bde7760e01b8a5260018060a01b031660048a015260a060248a015260a4890191611e91565b94166044860152013560648401526001600160e01b031916608483015203925af1918215610be557600192611961575b50611892565b5f61196b91611d57565b8f61195b565b50959496929b939998909a91604082019160018060a01b0361199284612721565b16611a82575b602081013591863b15610484575f80976024604051809a8193638ea59e1d60e01b83528860048401525af1958615610be557600197611a6397611a72575b506119f560606119ee6119e886612721565b97612721565b9401612735565b90602081519101209160208151910120926040519460208601966001600160601b03199060601b16875260348601526001600160601b03199060601b1660548501526001600160801b03199060801b166068840152607883015260988201526098815261060060b882611d57565b940196929790979491946114b5565b5f611a7c91611d57565b5f6119d6565b611a8b83612721565b863b1561048457604051630959112b60e11b81526001600160a01b0390911660048201525f81602481838b5af18015610be557611ac9575b50611998565b5f611ad391611d57565b8e611ac3565b611af99060203d8111611afe575b611af18183611d57565b810190612749565b61158a565b503d611ae7565b60405162461bcd60e51b815260206004820152602f60248201527f636f756c646e277420706572666f726d207472616e736974696f6e20666f722060448201526e756e6b6e6f776e2070726f6772616d60881b6064820152608490fd5b90611c0292975093600193949895987fd756eca21e02cb0dbde1e44a4d9c6921b5c8aa4668cfa0752784b3dc855bce1e6020604051838b01358152a1611bac6020828a010161204b565b91602081519101206060604051926020840194818c0135865265ffffffffffff60d01b9060d01b1660408501526040818c01013560468501528a010135606683015260868201526086815261060060a682611d57565b9401919093611424565b60405162461bcd60e51b815260206004820152602360248201527f616c6c6f776564207072656465636573736f7220626c6f636b206e6f7420666f6044820152621d5b9960ea1b6064820152608490fd5b606460405162461bcd60e51b815260206004820152602060248201527f696e76616c69642070726576696f757320636f6d6d69746d656e7420686173686044820152fd5b9084611cb392602081519101206120e7565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b633ee5aeb560e01b5f5260045ffd5b34610484575f36600319011261048457602090600b5f805160206129138339815191525401548152f35b9181601f84011215610484578235916001600160401b038311610484576020808501948460051b01011161048457565b600435906001600160a01b038216820361048457565b90601f801991011681019081106001600160401b03821117611d7857604052565b634e487b7160e01b5f52604160045260245ffd5b9291926001600160401b038211611d785760405191611db5601f8201601f191660200184611d57565b829481845281830111610484578281602093845f960137010152565b9181601f84011215610484578235916001600160401b038311610484576020838186019501011161048457565b9092916001600160401b038411611d78578360051b916020604051611e2582860182611d57565b809681520192810191821161048457915b818310611e4257505050565b82356001600160a01b038116810361048457815260209283019201611e36565b602080611e8f928195946040519682889351918291018585015e8201908382015203018085520183611d57565b565b908060209392818452848401375f828201840152601f01601f1916010190565b93959490611ee16001600160801b0393606095859360018060a01b03168852608060208901526080880191611e91565b9616604085015216910152565b90604051918281549182825260208201905f5260205f20925f5b818110611f1d575050611e8f92500383611d57565b84546001600160a01b0316835260019485019487945060209093019201611f08565b5f8051602061291383398151915254600701546001600160401b038116906001600160801b039060401c811616026001600160801b03811690810361041a5790565b3580151581036104845790565b5f19811461041a5760010190565b5f8051602061291383398151915254600660098201549101549081810291818304149015171561041a5761270f810180911161041a57612710900490565b6001600160a01b03168015612038575f805160206128f383398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b3565ffffffffffff811681036104845790565b903590601e198136030182121561048457018035906001600160401b03821161048457602001918160051b3603831361048457565b91908110156117025760051b8101359060be1981360301821215610484570190565b903590601e198136030182121561048457018035906001600160401b0382116104845760200191813603831361048457565b905f805160206129138339815191525490612100611f9c565b9260405190602082019081526020825261211b604083611d57565b612157603660405180936020820195601960f81b87523060601b60228401525180918484015e81015f838201520301601f198101835282611d57565b5190205f9260080191835b868510156122605761219861218f6121896121828860051b8601866120b5565b3691611d8c565b856127d6565b90929192612810565b6001600160a01b03165f9081526020859052604090205460ff1615612225576121c090611f8e565b938585146121d15760010193612162565b505050509091505b106121e057565b60405162461bcd60e51b815260206004820152601b60248201527f6e6f7420656e6f7567682076616c6964207369676e61747572657300000000006044820152606490fd5b60405162461bcd60e51b8152602060048201526013602482015272696e636f7272656374207369676e617475726560681b6044820152606490fd5b949550505050506121d9565b5f805160206128f3833981519152546001600160a01b0316330361228c57565b63118cdaa760e01b5f523360045260245ffd5b906001600160801b03809116911601906001600160801b03821161041a57565b9291925f805160206129138339815191525491815f52600a830160205260ff60405f205416600381101561072a57600203612541576122fc611f3f565b60038401805460405163313ce56760e01b81529297919290602090829060049082906001600160a01b03165afa8015610be5575f90612504575b60ff915016604d811161041a5760646123686020936123636001600160801b038095600a0a16809c61229f565b61229f565b93546040516323b872dd60e01b8152326004820152306024820152929094166044830152909283919082905f906001600160a01b03165af1908115610be5575f916124e5575b50156124a0576e5af43d82803e903d91602b57fd5bf360028401549160405160208101918583526040820152604081526123e9606082611d57565b51902091763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f526effffffffffffffffffffffffffffff199060781b1617602052603760095ff5916001600160a01b038316908115612491577f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf191600d602092825f52600c810184528560405f2055016124848154611f8e565b9055604051908152a29190565b63b06ebf3d60e01b5f5260045ffd5b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b6124fe915060203d602011611afe57611af18183611d57565b5f6123ae565b506020813d602011612539575b8161251e60209383611d57565b81010312610484575160ff811681036104845760ff90612336565b3d9150612511565b60405162461bcd60e51b815260206004820152602e60248201527f636f6465206d7573742062652076616c696461746564206265666f726520707260448201526d37b3b930b69031b932b0ba34b7b760911b6064820152608490fd5b5f8051602061291383398151915254906009820190815461268d579091600801905f5b81518110156125ff57600581901b82016020908101516001600160a01b03165f9081529084905260409020805460ff19166001908117909155016125c0565b5080519291506001600160401b038311611d7857680100000000000000008311611d78578154838355808410612667575b50602001905f5260205f205f5b83811061264a5750505050565b82516001600160a01b03168183015560209092019160010161263d565b825f528360205f2091820191015b8181106126825750612630565b5f8155600101612675565b60405162461bcd60e51b815260206004820152602360248201527f70726576696f75732076616c696461746f727320776572656e27742072656d6f6044820152621d995960ea1b6064820152608490fd5b905f19430143811161041a57805b6126f7575b505f9150565b804083810361270857506001925050565b1561271c57801561041a575f1901806126ec565b6126f1565b356001600160a01b03811681036104845790565b356001600160801b03811681036104845790565b90816020910312610484575180151581036104845790565b903590601e198136030182121561048457018035906001600160401b0382116104845760200191606082023603831361048457565b356001600160e01b0319811681036104845790565b60ff5f805160206129338339815191525460401c16156127c757565b631afcd79f60e31b5f5260045ffd5b8151919060418303612806576127ff9250602082015190606060408401519301515f1a90612870565b9192909190565b50505f9160029190565b600481101561072a5780612822575050565b600181036128395763f645eedf60e01b5f5260045ffd5b60028103612854575063fce698f760e01b5f5260045260245ffd5b60031461285e5750565b6335e2f38360e21b5f5260045260245ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116128e7579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15610be5575f516001600160a01b038116156128dd57905f905f90565b505f906001905f90565b5050505f916003919056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212205b21b15c839d0898ccc6206da2a4be14eda15d1a5e91a72c0e2b08ae2f9a2e3e64736f6c634300081a0033","sourceMap":"879:18203:159:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;;;;;;;879:18203:159;;;;;;4301:16:26;879:18203:159;-1:-1:-1;;;;;879:18203:159;;4726:16:26;;:34;;;;879:18203:159;4805:1:26;4790:16;:50;;;;879:18203:159;4855:13:26;:30;;;;879:18203:159;4851:91:26;;;-1:-1:-1;;879:18203:159;;4805:1:26;879:18203:159;-1:-1:-1;;;;;;;;;;;879:18203:159;6961:1:26;;879:18203:159;4979:67:26;;879:18203:159;6893:76:26;;;:::i;:::-;;;:::i;:::-;6961:1;:::i;:::-;879:18203:159;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:25;;:::i;:::-;879:18203:159;3042:27;;-1:-1:-1;;879:18203:159;;;;;;;;;3023:52;879:18203;3023:52;;879:18203;;;;3023:52;;;;;;:::i;:::-;879:18203;;;;3013:63;;:89;1170:66;;-1:-1:-1;;;;;;;;;;;1170:66:159;3182:20;879:18203;3182:20;;879:18203;;1742:12;879:18203;1742:12;;879:18203;;;;1732:27;;1170:66;;4805:1:26;1769:13:159;;879:18203;;-1:-1:-1;;;;;;879:18203:159;;;-1:-1:-1;;;;;879:18203:159;;;;;;;1802:18;;;879:18203;;;;;;;;;;;;;;1845:18;;;879:18203;;;;;;;;;;;;;1924:4;1888:33;;;1170:66;1966:17;;;;;879:18203;;;-1:-1:-1;;;;;;879:18203:159;;;;;;2060:15;;;:::i;:::-;5066:101:26;;879:18203:159;5066:101:26;879:18203:159;5142:14:26;879:18203:159;-1:-1:-1;;;879:18203:159;-1:-1:-1;;;;;;;;;;;879:18203:159;;-1:-1:-1;;;;;;;;;;;879:18203:159;;4805:1:26;879:18203:159;;5142:14:26;879:18203:159;;;;;;;;;;;;;4979:67:26;-1:-1:-1;;879:18203:159;;;-1:-1:-1;;;;;;;;;;;879:18203:159;4979:67:26;;;4851:91;6498:23;;;879:18203:159;4908:23:26;879:18203:159;;4908:23:26;4855:30;4872:13;;;4855:30;;;4790:50;4818:4;4810:25;:30;;-1:-1:-1;4790:50:26;;4726:34;;;-1:-1:-1;4726:34:26;;879:18203:159;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;2357:1:25;879:18203:159;;:::i;:::-;2303:62:25;;:::i;2357:1::-;879:18203:159;;;;;;;-1:-1:-1;;879:18203:159;;;;;5198:33;-1:-1:-1;;;;;;;;;;;879:18203:159;5198:33;879:18203;;;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;;5576:21;-1:-1:-1;;;;;;;;;;;879:18203:159;5576:21;879:18203;;;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;;;;;;;879:18203:159;8783:34;879:18203;8833:13;879:18203;9208:12;;;;8828:824;8881:3;8848:31;;;;;;879:18203;;;;;;9082:55;17789:20;879:18203;;;;17789:20;;;;;;:::i;:::-;879:18203;;;17753:57;;879:18203;;;;;;;;;;;;;17753:57;;;;;;:::i;:::-;879:18203;17743:68;;9082:55;;:::i;:::-;879:18203;;;;;;;;;;;;;;;;;;;;9208:53;879:18203;;9324:20;879:18203;9324:20;;:::i;:::-;;;;9476:30;879:18203;;;;;;;;;;;;9387:19;879:18203;;;;;;;;9424:26;;;:28;879:18203;;9424:28;:::i;:::-;1170:66;;879:18203;;;;;9476:30;9320:322;879:18203;8833:13;;;9320:322;9596:31;879:18203;;;;;;;;;;;;;;;;;;;;;;;;9596:31;9320:322;;879:18203;;;-1:-1:-1;;;879:18203:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;879:18203:159;;;;;;;;;;;;;;;;;;;8848:31;9716:10;8848:31;;879:18203;;;;;9682:32;9716:10;:::i;879:18203::-;;;;;;-1:-1:-1;;879:18203:159;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;:::i;:::-;2303:62:25;;:::i;:::-;-1:-1:-1;;;;;;;;;;;879:18203:159;18320:17;;;;18206:21;;879:18203;18236:3;879:18203;;18202:32;;;;;879:18203;;;;;;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;;18187:13;;18202:32;-1:-1:-1;879:18203:159;;;;;;-1:-1:-1;879:18203:159;;;18182:177;6137:38;879:18203;;;;;:::i;:::-;6137:38;:::i;:::-;6191:22;879:18203;6191:22;;879:18203;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;;-1:-1:-1;;;;;6390:17:159;-1:-1:-1;;;;;;;;;;;879:18203:159;6390:17;879:18203;;;;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;;5920:21;-1:-1:-1;;;;;;;;;;;879:18203:159;5920:21;879:18203;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;-1:-1:-1;879:18203:159;;;;;;;;;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;4662:12;-1:-1:-1;;;;;;;;;;;879:18203:159;4662:12;879:18203;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;6969:38;2303:62:25;879:18203:159;2303:62:25;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;879:18203:159;6914:21;;879:18203;;-1:-1:-1;;879:18203:159;;;;;;;;;;;;;;6969:38;879:18203;;;;;;;-1:-1:-1;;879:18203:159;;;;;4815:20;-1:-1:-1;;;;;;;;;;;879:18203:159;4815:20;879:18203;;;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;;-1:-1:-1;;;;;;;;;;;879:18203:159;;;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;;;:::i;:::-;4983:15;-1:-1:-1;;;;;;;;;;;879:18203:159;4983:15;:24;879:18203;;;;;;-1:-1:-1;879:18203:159;;;;;-1:-1:-1;879:18203:159;;;;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;;;:::i;:::-;5753:17;-1:-1:-1;;;;;;;;;;;879:18203:159;5753:17;:28;879:18203;;;;;;-1:-1:-1;879:18203:159;;;;;;-1:-1:-1;879:18203:159;;;;;;;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;-1:-1:-1;;;;;;;;;;;879:18203:159;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;-1:-1:-1;;;;;;;;;;;879:18203:159;3847:18;;879:18203;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;7841:50;879:18203;;;;;7841:50;:::i;:::-;-1:-1:-1;;;;;879:18203:159;;;;;;;7902:75;;;;;;879:18203;;;;;;;;;;;;7902:75;;7931:9;879:18203;7902:75;;;:::i;:::-;;;;;;;;;;;;879:18203;7902:75;;;879:18203;;;;;;;;7902:75;879:18203;7902:75;;;:::i;:::-;;;;;879:18203;;;;;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;6587:30;2303:62:25;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;879:18203:159;6540:17;;879:18203;;-1:-1:-1;;879:18203:159;;;;;;;;;;6587:30;879:18203;;;;;;;-1:-1:-1;;879:18203:159;;;;-1:-1:-1;;;;;;;;;;;879:18203:159;3996:18;;879:18203;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;2303:62:25;;:::i;:::-;-1:-1:-1;;;;;;;;;;;879:18203:159;;-1:-1:-1;;;;;;879:18203:159;;;;;;;-1:-1:-1;;;;;879:18203:159;3975:40:25;879:18203:159;;3975:40:25;879:18203:159;;;;;;;-1:-1:-1;;879:18203:159;;;;;;;:::i;:::-;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;2303:62:25;;:::i;:::-;-1:-1:-1;;;;;;;;;;;879:18203:159;;;;;;6431:44:26;;;;879:18203:159;6427:105:26;;-1:-1:-1;;879:18203:159;;;-1:-1:-1;;;;;;;;;;;879:18203:159;-1:-1:-1;;;;;;;;;;;879:18203:159;;2227:16;;879:18203;2144:1;2276:21;;879:18203;2330:21;;;879:18203;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;;2396:24;;879:18203;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:25;;:::i;:::-;879:18203:159;3042:27;;-1:-1:-1;;879:18203:159;;;;;;;;;3023:52;879:18203;3023:52;;879:18203;;;;3023:52;;;;;;:::i;:::-;879:18203;;;;3013:63;;:89;1170:66;;-1:-1:-1;;;;;;;;;;;1170:66:159;3182:20;879:18203;3182:20;;879:18203;;2567:12;879:18203;2567:12;879:18203;;;;2557:27;1170:66;;6593:4:26;2594:13:159;;879:18203;;-1:-1:-1;;;;;;879:18203:159;;;-1:-1:-1;;;;;879:18203:159;;;;;;;2144:1;2627:18;;879:18203;;;;;;;;;;;;;;2330:21;2670:18;;;879:18203;;;;;;;;;;;;;;;;6656:20:26;;879:18203:159;;-1:-1:-1;2728:15:159;;;:::i;:::-;-1:-1:-1;;;879:18203:159;-1:-1:-1;;;;;;;;;;;879:18203:159;;-1:-1:-1;;;;;;;;;;;879:18203:159;;2144:1;879:18203;;6656:20:26;879:18203:159;6431:44:26;879:18203:159;2144:1;-1:-1:-1;;;;;879:18203:159;;6450:25:26;;6431:44;;879:18203:159;;;-1:-1:-1;;879:18203:159;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;8288:50;;;;;:::i;:::-;879:18203;;;;;;;;;;;8463:30;879:18203;8463:30;;879:18203;;;;;;;;8463:30;;;879:18203;8463:30;;:::i;:::-;879:18203;8453:41;;8401:94;;;;;879:18203;;-1:-1:-1;;;8401:94:159;;-1:-1:-1;;;;;879:18203:159;;;;8401:94;;879:18203;;;;;-1:-1:-1;879:18203:159;;;-1:-1:-1;8401:94:159;;;;;;;;;879:18203;8506:73;;;;;;;879:18203;;;;;;;;;;;;8506:73;;8533:9;879:18203;8506:73;;;:::i;8401:94::-;879:18203;8401:94;;;:::i;:::-;;;;879:18203;;;;;;-1:-1:-1;;879:18203:159;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2303:62:25;;:::i;:::-;879:18203:159;;;;;3042:27;879:18203;;;;;;;;;;;3023:52;879:18203;3023:52;;879:18203;;;;3023:52;;;879:18203;3023:52;;:::i;:::-;879:18203;;3013:63;;-1:-1:-1;;3013:89:159;-1:-1:-1;;;;;;;;;;;1170:66:159;3182:20;879:18203;;3182:20;879:18203;;;;;;;-1:-1:-1;;879:18203:159;;;;-1:-1:-1;;;;;;;;;;;879:18203:159;;4140:13;879:18203;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;;;3681:35;-1:-1:-1;;;;;;;;;;;879:18203:159;3681:35;879:18203;;;;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;;;:::i;:::-;2303:62:25;;:::i;:::-;-1:-1:-1;;;;;;;;;;;879:18203:159;4279:13;;879:18203;;-1:-1:-1;;;;;;879:18203:159;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;;;-1:-1:-1;;;;;;;;;;;879:18203:159;3504:30;879:18203;;;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;;-1:-1:-1;;;;;;;;;;;879:18203:159;;;;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;;;;;7263:15;;;;;:35;;879:18203;;;;7399:12;-1:-1:-1;;;;;;;;;;;879:18203:159;7399:12;879:18203;;;;;;;;;;;;;;;;;;;;;7572:43;879:18203;;;;;;;;;;;7527:29;879:18203;;;;;;;;;;;;;;;;;7572:43;879:18203;;;;-1:-1:-1;;;879:18203:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;879:18203:159;;;;;;;;;;-1:-1:-1;;;879:18203:159;;;;;;;;;;;;;;;;;;;;7263:35;7282:11;879:18203;7282:11;:16;;7263:35;;879:18203;;;;;;-1:-1:-1;;879:18203:159;;;;;;-1:-1:-1;;;;;6751:21:159;-1:-1:-1;;;;;;;;;;;879:18203:159;6751:21;879:18203;;;;6630:149;;879:18203;;;;;;-1:-1:-1;;879:18203:159;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;:::i;:::-;516:66:62;7368:53:64;;;;1292:93:62;;1503:4;516:66;7628:52:64;879:18203:159;;;9993:3;9959:32;;;;;;879:18203;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;879:18203:159;;12466:30;;879:18203;;;;;;12500:34;879:18203;12466:68;879:18203;;12598:49;879:18203;;;;12617:29;879:18203;12598:49;:::i;:::-;879:18203;;;;;;;;;;;;;;;;1170:66;;879:18203;;12933:30;879:18203;;;;12933:30;;:::i;:::-;12895:35;;879:18203;;;;;;;;;;;13020:13;879:18203;13015:320;13075:3;13039:27;879:18203;;;13039:27;;;;;:::i;:::-;13035:38;;;;;;;13137:30;879:18203;13137:27;879:18203;;;13039:27;;;;13137;:::i;:::-;:30;;:::i;:::-;879:18203;-1:-1:-1;;;;;;;;;;;879:18203:159;14191:23;;;:::i;:::-;-1:-1:-1;;;;;879:18203:159;;;;;14175:15;;;879:18203;;;;;;14175:45;879:18203;;14328:18;;879:18203;-1:-1:-1;;;;;879:18203:159;;;-1:-1:-1;;;;;879:18203:159;;14383:23;879:18203;14408:30;879:18203;14383:23;;;:::i;:::-;14408:30;;;:::i;:::-;879:18203;;-1:-1:-1;;;14357:82:159;;-1:-1:-1;;;;;879:18203:159;;;;14357:82;;879:18203;;;;;;;;;;;;;;-1:-1:-1;14357:82:159;;;;;;;;13075:3;-1:-1:-1;;;;;;14480:23:159;;;:::i;:::-;879:18203;;;;;14615:3;14579:27;13039;14579;;;;:::i;:::-;14575:38;;;;;;;14667:27;13039;14579;;14667;;:::i;:::-;879:18203;;;;;;;;;;;;14818:22;879:18203;;;;;;14818:22;;:::i;:::-;14842:16;879:18203;;;;;;14842:16;;:::i;:::-;879:18203;;14779:80;;;;879:18203;;;;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;-1:-1:-1;;;;;879:18203:159;;13039:27;879:18203;;;;;;;14779:80;;;;;;:::i;:::-;879:18203;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14779:80;;879:18203;;;;;;:::i;:::-;;14935:22;879:18203;;;;;;14818:22;14935;:::i;:::-;14959:16;879:18203;;;;;;14842:16;14959;:::i;:::-;14888:88;;;;;879:18203;;;;14779:80;879:18203;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;14888:88;;879:18203;;;;;;14888:88;;879:18203;;;;;;;;;;;;;;;;14888:88;;;;;;;1503:4:62;14888:88:159;;;14615:3;;879:18203;14560:13;;;14888:88;879:18203;14888:88;;;:::i;:::-;;;;879:18203;;;;;;;;;;;;14575:38;;;;;;;;;;;;;879:18203;15040:13;879:18203;15092:3;15059:24;;;;;;:::i;:::-;15055:35;;;;;;;15059:24;15213:67;15059:24;;15154:27;15059:24;15154;15059;;;;15154;;:::i;:27::-;17382;;879:18203;17382:27;;;:::i;:::-;879:18203;17312:291;879:18203;;17427:23;17468:21;17427:23;879:18203;17427:23;;;;:::i;:::-;17468:21;;;;;:::i;:::-;17556:33;13039:27;17556:33;15059:24;17556:33;;;:::i;:::-;879:18203;;;;17312:291;;;879:18203;17312:291;;879:18203;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;17507:28;879:18203;14779:80;879:18203;;;;;;;;;;;17312:291;;;;;;;;;;:::i;15213:67::-;17507:28;13039:27;17507:28;;879:18203;13039:27;;15420;879:18203;17382:27;;15420;:::i;:::-;17427:23;15449;879:18203;17427:23;;15449;;:::i;:::-;17468:21;;;15474;879:18203;17468:21;;15474;:::i;:::-;15355:158;;;;;879:18203;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;;;15355:158;;879:18203;;15355:158;;879:18203;;;;;;;;;;;13039:27;879:18203;;;;;;;;;:::i;:::-;;;14779:80;879:18203;;;15355:158;;;;;;;;;1503:4:62;15355:158:159;;;15295:556;;;879:18203;15040:13;;15355:158;879:18203;15355:158;;;:::i;:::-;;;;15295:556;17382:27;15595;879:18203;17382:27;;15595;:::i;:::-;17427:23;15644;879:18203;17427:23;;15644;;:::i;:::-;15689:21;879:18203;17468:21;;;;;15689;:::i;:::-;17556:33;15785;15059:24;17556:33;;15785;:::i;:::-;15552:284;;;;;;879:18203;;;;13039:27;879:18203;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;;15552:284;;879:18203;;;;;;;15552:284;;879:18203;15059:24;879:18203;;;;;;;;;:::i;:::-;;;;;;;17507:28;879:18203;14779:80;879:18203;;;-1:-1:-1;;;;;;879:18203:159;;;;;15552:284;;;;;;;;;1503:4:62;15552:284:159;;;15295:556;;;;15552:284;879:18203;15552:284;;;:::i;:::-;;;;15055:35;;;;;;;;;;;;;879:18203;15875:25;;879:18203;;;;;;15875:25;;;:::i;:::-;879:18203;15871:121;;15035:826;879:18203;16026:28;;879:18203;16002:53;;;;;;879:18203;;;;;;;;;;;;;16002:53;;;879:18203;16002:53;;879:18203;16002:53;;;;;;;1503:4:62;16002:53:159;13277:47;16002:53;;;15035:826;16107:23;16225:30;879:18203;16186:25;16107:23;;;:::i;:::-;16186:25;;:::i;:::-;14408:30;;16225;:::i;:::-;879:18203;;;;;;16269:27;879:18203;;;;;;16310:25;879:18203;;;17043:103;879:18203;17043:103;;879:18203;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;-1:-1:-1;;;;;879:18203:159;;13039:27;879:18203;;;;;;;;;;;;;;;17043:103;;;;;;:::i;13277:47::-;13075:3;879:18203;13020:13;;;;;;;;;;16002:53;879:18203;16002:53;;;:::i;:::-;;;;15871:121;15955:25;;;:::i;:::-;15930:51;;;;;879:18203;;-1:-1:-1;;;15930:51:159;;-1:-1:-1;;;;;879:18203:159;;;;15930:51;;879:18203;-1:-1:-1;879:18203:159;;;-1:-1:-1;15930:51:159;;;;;;;;;15871:121;;;;15930:51;879:18203;15930:51;;;:::i;:::-;;;;14357:82;;;879:18203;14357:82;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;879:18203;;;-1:-1:-1;;;879:18203:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;14779:80:159;879:18203;;;;;;13035:38;;10193:57;13035:38;;;;1503:4:62;13035:38:159;;;;;13350:41;879:18203;;;;;;;;;13350:41;13482:30;879:18203;;;;12933:30;13482;:::i;:::-;879:18203;;;;;;13617:28;879:18203;;;16629:101;879:18203;16629:101;;879:18203;;;;;;;;;;;;;;;;;;;;;;12500:34;879:18203;;;;;;;12617:29;879:18203;;;;;;;;;;16629:101;;;;;;:::i;10193:57::-;9993:3;879:18203;9944:13;;;;;879:18203;;;-1:-1:-1;;;879:18203:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;14779:80:159;879:18203;;;;;;;14779:80;879:18203;;;;;;;;;;;;;;;;;;;;;;;9959:32;;;10326:10;9959:32;879:18203;;;;;10291:33;10326:10;:::i;:::-;879:18203;516:66:62;7628:52:64;879:18203:159;1292:93:62;1344:30;;;879:18203:159;1344:30:62;879:18203:159;;1344:30:62;879:18203:159;;;;;;-1:-1:-1;;879:18203:159;;;;;;4491:26;-1:-1:-1;;;;;;;;;;;879:18203:159;4491:26;879:18203;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;879:18203:159;;;;;;:::o;:::-;;;14779:80;;879:18203;;;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;:::o;:::-;;;;-1:-1:-1;879:18203:159;;;;;-1:-1:-1;879:18203:159;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;14779:80;879:18203;;-1:-1:-1;;879:18203:159;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;879:18203:159;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;879:18203:159;;;;;;;;-1:-1:-1;;879:18203:159;;;;:::o;:::-;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;-1:-1:-1;879:18203:159;;-1:-1:-1;879:18203:159;;-1:-1:-1;879:18203:159;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;-1:-1:-1;879:18203:159;;;;;;;;7020:113;-1:-1:-1;;;;;;;;;;;879:18203:159;6390:17;;879:18203;-1:-1:-1;;;;;879:18203:159;;;-1:-1:-1;;;;;879:18203:159;;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;7020:113;:::o;879:18203::-;;;;;;;;;;:::o;:::-;-1:-1:-1;;879:18203:159;;;;;;;:::o;5244:204::-;-1:-1:-1;;;;;;;;;;;879:18203:159;5198:33;5576:21;;;879:18203;5198:33;;879:18203;;;;;;;;;;;;;;;;5428:4;879:18203;;;;;;;5436:5;879:18203;;5244:204;:::o;3405:215:25:-;-1:-1:-1;;;;;879:18203:159;3489:22:25;;3485:91;;-1:-1:-1;;;;;;;;;;;879:18203:159;;-1:-1:-1;;;;;;879:18203:159;;;;;;;-1:-1:-1;;;;;879:18203:159;3975:40:25;-1:-1:-1;;3975:40:25;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;879:18203:159;;3509:1:25;3534:31;879:18203:159;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;;;;:::o;11446:844::-;;-1:-1:-1;;;;;;;;;;;879:18203:159;11614:21;;;:::i;:::-;879:18203;;;11714:26;;;;879:18203;;;11714:26;;;;879:18203;11714:26;;:::i;:::-;2858:45:68;879:18203:159;;;2858:45:68;;11714:26:159;2858:45:68;;879:18203:159;;;;;;11676:4;879:18203;;;;;;;;;;;;;;;-1:-1:-1;879:18203:159;;;;2858:45:68;;14779:80:159;;2858:45:68;;;;;;:::i;:::-;879:18203:159;2848:56:68;;-1:-1:-1;;11975:17:159;;;-1:-1:-1;11832:3:159;11809:21;;;;;;3915:8:66;3859:27;879:18203:159;;;;;;;;;:::i;:::-;;;;:::i;:::-;3859:27:66;;:::i;:::-;3915:8;;;;;:::i;:::-;-1:-1:-1;;;;;879:18203:159;-1:-1:-1;879:18203:159;;;;;;;;;;;;;;;;12027:17;;;:::i;:::-;:30;;;;12023:82;;879:18203;;11794:13;;;12023:82;12081:5;;;;;;;11789:416;12223:28;879:18203;;11446:844::o;879:18203::-;;;-1:-1:-1;;;879:18203:159;;11714:26;879:18203;;;;;;;;;;;;;;;;;11971:224;879:18203;;-1:-1:-1;;;879:18203:159;;11714:26;879:18203;;;;;;;;;-1:-1:-1;;;879:18203:159;;;;;;;11809:21;;;;;;;;;;2658:162:25;-1:-1:-1;;;;;;;;;;;879:18203:159;-1:-1:-1;;;;;879:18203:159;966:10:30;2717:23:25;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:25;966:10:30;2763:40:25;879:18203:159;;-1:-1:-1;2763:40:25;879:18203:159;;-1:-1:-1;;;;;879:18203:159;;;;;;;-1:-1:-1;;;;;879:18203:159;;;;:::o;10386:1054::-;;;;-1:-1:-1;;;;;;;;;;;879:18203:159;;;-1:-1:-1;879:18203:159;10592:12;;;879:18203;;;;-1:-1:-1;879:18203:159;;;;;;;;;10616:19;10592:43;879:18203;;10720:9;;:::i;:::-;879:18203;10856:18;;879:18203;;;;-1:-1:-1;;;10841:45:159;;10856:18;;;;879:18203;;;;;10841:45;;879:18203;;-1:-1:-1;;;;;879:18203:159;10841:45;;;;;;-1:-1:-1;10841:45:159;;;10386:1054;879:18203;;;;;;;;;17946:73;10919:41;879:18203;;10919:32;-1:-1:-1;;;;;879:18203:159;;10592:12;879:18203;;10919:32;;;:::i;:::-;:41;:::i;:::-;879:18203;;;;-1:-1:-1;;;17946:73:159;;17986:9;10841:45;17946:73;;879:18203;18005:4;879:18203;;;;;;;;;;;;;;;;-1:-1:-1;879:18203:159;;-1:-1:-1;;;;;;;879:18203:159;17946:73;;;;;;;-1:-1:-1;17946:73:159;;;10386:1054;879:18203;;;;3743:569:44;10616:19:159;11202:18;;879:18203;;;;;11232:30;;879:18203;;;;;;;;;11232:30;;;879:18203;11232:30;;:::i;:::-;879:18203;11222:41;;3743:569:44;;;;;;;;-1:-1:-1;3743:569:44;;;;;;;;879:18203:159;3743:569:44;;;-1:-1:-1;3743:569:44;879:18203:159;-1:-1:-1;;;;;879:18203:159;;;4325:22:44;;4321:85;;11356:31:159;11275:24;11318:20;879:18203;11275:24;879:18203;-1:-1:-1;879:18203:159;11275:15;;;879:18203;;;;-1:-1:-1;879:18203:159;1170:66;11318:20;:22;879:18203;;11318:22;:::i;:::-;1170:66;;879:18203;;;;;11356:31;11398:35;10386:1054;:::o;4321:85:44:-;4370:25;;;-1:-1:-1;4370:25:44;10841:45:159;-1:-1:-1;4370:25:44;879:18203:159;;;-1:-1:-1;;;879:18203:159;;;10841:45;879:18203;;;;;;;;;;;;;17946:73;;879:18203;17946:73;;;;879:18203;17946:73;879:18203;17946:73;;;;;;;:::i;:::-;;;;10841:45;;879:18203;10841:45;;879:18203;10841:45;;;;;;879:18203;10841:45;;;:::i;:::-;;;879:18203;;;;;;;;;;;;;10841:45;;;;;;-1:-1:-1;10841:45:159;;879:18203;;;-1:-1:-1;;;879:18203:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;879:18203:159;;;;;;;18410:442;-1:-1:-1;;;;;;;;;;;879:18203:159;18544:21;;;;879:18203;;;;;18633:13;;18749:17;;;-1:-1:-1;18677:3:159;879:18203;;18648:27;;;;;879:18203;;;;;;;;;;;-1:-1:-1;;;;;879:18203:159;-1:-1:-1;879:18203:159;;;;;;;;;;;;-1:-1:-1;;879:18203:159;;;;;;;;;18633:13;;18648:27;-1:-1:-1;879:18203:159;;;18648:27;-1:-1:-1;;;;;;879:18203:159;;;;;;;;;;;;;;;;;;;18628:167;879:18203;;;;-1:-1:-1;879:18203:159;;-1:-1:-1;879:18203:159;-1:-1:-1;879:18203:159;;;;;;18410:442;;;;:::o;879:18203::-;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;;;;;;-1:-1:-1;879:18203:159;;;-1:-1:-1;879:18203:159;;;;;;;;;;;;;;;;-1:-1:-1;879:18203:159;;;;;;;;;-1:-1:-1;;;879:18203:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;879:18203:159;;;;;;;13668:338;;879:18203;;13765:12;879:18203;13765:12;879:18203;;;;13748:230;13783:5;;;13748:230;-1:-1:-1;879:18203:159;;-1:-1:-1;13668:338:159:o;13790:3::-;13823:12;;13853:11;;;;;-1:-1:-1;13780:1:159;;-1:-1:-1;;13884:11:159:o;13849:119::-;13920:8;13916:52;;879:18203;;;;-1:-1:-1;;879:18203:159;;13753:28;;13916:52;13948:5;;879:18203;;-1:-1:-1;;;;;879:18203:159;;;;;;;:::o;:::-;;-1:-1:-1;;;;;879:18203:159;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;879:18203:159;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;;;;;;879:18203:159;;;;;;;:::o;7084:141:26:-;879:18203:159;-1:-1:-1;;;;;;;;;;;879:18203:159;;;;7150:18:26;7146:73;;7084:141::o;7146:73::-;7191:17;;;-1:-1:-1;7191:17:26;;-1:-1:-1;7191:17:26;2129:766:66;879:18203:159;;;2129:766:66;2276:2;2256:22;;2276:2;;2739:25;2539:180;;;;;;;;;;;;;;;-1:-1:-1;2539:180:66;2739:25;;:::i;:::-;2732:32;;;;;:::o;2252:637::-;2795:83;;2811:1;2795:83;2815:35;2795:83;;:::o;7196:532::-;879:18203:159;;;;;;7282:29:66;;;7327:7;;:::o;7278:444::-;879:18203:159;7378:38:66;;879:18203:159;;7439:23:66;;;7291:20;7439:23;879:18203:159;7291:20:66;7439:23;7374:348;7492:35;7483:44;;7492:35;;7550:46;;;;7291:20;7550:46;879:18203:159;;;7291:20:66;7550:46;7479:243;7626:30;7617:39;7613:109;;7479:243;7196:532::o;7613:109::-;7679:32;;;7291:20;7679:32;879:18203:159;;;7291:20:66;7679:32;5140:1530;;;6199:66;6186:79;;6182:164;;879:18203:159;;;;;;-1:-1:-1;879:18203:159;;;;;;;;;;;;;;;;;;;6457:24:66;;;;;;;;;-1:-1:-1;6457:24:66;-1:-1:-1;;;;;879:18203:159;;6495:20:66;6491:113;;6614:49;-1:-1:-1;6614:49:66;-1:-1:-1;5140:1530:66;:::o;6491:113::-;6531:62;-1:-1:-1;6531:62:66;6457:24;6531:62;-1:-1:-1;6531:62:66;:::o;6182:164::-;6281:54;;;6297:1;6281:54;6301:30;6281:54;;:::o","linkReferences":{}},"methodIdentifiers":{"baseFee()":"6ef25c3a","baseWeight()":"d3fd6364","codeState(bytes32)":"c13911e8","commitBlocks((bytes32,uint48,bytes32,bytes32,(address,bytes32,address,uint128,(bytes32,address,uint128)[],(bytes32,address,bytes,uint128,(bytes32,bytes4))[])[])[],bytes[])":"01b1d156","commitCodes((bytes32,bool)[],bytes[])":"e97d3eb3","createProgram(bytes32,bytes32,bytes,uint128)":"8074b455","createProgramWithDecoder(address,bytes32,bytes32,bytes,uint128)":"666d124c","genesisBlockHash()":"28e24b3d","getStorageSlot()":"96708226","initialize(address,address,address,address,address[])":"f8453e7c","lastBlockCommitmentHash()":"2dacfb69","lastBlockCommitmentTimestamp()":"4083acec","mirror()":"444d9172","mirrorProxy()":"78ee5dec","owner()":"8da5cb5b","programCodeId(address)":"9067088e","programsCount()":"96a2ddfa","reinitialize()":"6c2eb350","renounceOwnership()":"715018a6","requestCodeValidation(bytes32,bytes32)":"1c149d8a","setBaseWeight(uint64)":"8028861a","setMirror(address)":"3d43b418","setStorageSlot(string)":"5686cad5","setValuePerWeight(uint128)":"a6bbbe1c","signingThresholdPercentage()":"efd81abc","transferOwnership(address)":"f2fde38b","updateValidators(address[])":"e71731e4","validatedCodesCount()":"007a32e7","validatorExists(address)":"8febbd59","validators()":"ca1e7819","validatorsCount()":"ed612f8c","validatorsThreshold()":"edc87225","valuePerWeight()":"0834fecc","wrappedVara()":"88f50cf0"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"baseWeight\",\"type\":\"uint64\"}],\"name\":\"BaseWeightChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"name\":\"BlockCommitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"CodeGotValidated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blobTxHash\",\"type\":\"bytes32\"}],\"name\":\"CodeValidationRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"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\":\"actorId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"}],\"name\":\"ProgramCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"StorageSlotChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"ValidatorsSetChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"valuePerWeight\",\"type\":\"uint128\"}],\"name\":\"ValuePerWeightChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"baseFee\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"}],\"name\":\"codeState\",\"outputs\":[{\"internalType\":\"enum IRouter.CodeState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint48\",\"name\":\"blockTimestamp\",\"type\":\"uint48\"},{\"internalType\":\"bytes32\",\"name\":\"prevCommitmentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"predBlockHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"actorId\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"newStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"inheritor\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"valueToReceive\",\"type\":\"uint128\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct IRouter.ValueClaim[]\",\"name\":\"valueClaims\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"code\",\"type\":\"bytes4\"}],\"internalType\":\"struct IRouter.ReplyDetails\",\"name\":\"replyDetails\",\"type\":\"tuple\"}],\"internalType\":\"struct IRouter.OutgoingMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IRouter.StateTransition[]\",\"name\":\"transitions\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IRouter.BlockCommitment[]\",\"name\":\"blockCommitmentsArray\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"name\":\"commitBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"internalType\":\"struct IRouter.CodeCommitment[]\",\"name\":\"codeCommitmentsArray\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"name\":\"commitCodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"createProgram\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"decoderImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"createProgramWithDecoder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStorageSlot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirror\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirrorProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wrappedVara\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"_validatorsKeys\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBlockCommitmentHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBlockCommitmentTimestamp\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirror\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"program\",\"type\":\"address\"}],\"name\":\"programCodeId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"programsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobTxHash\",\"type\":\"bytes32\"}],\"name\":\"requestCodeValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_baseWeight\",\"type\":\"uint64\"}],\"name\":\"setBaseWeight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mirror\",\"type\":\"address\"}],\"name\":\"setMirror\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"namespace\",\"type\":\"string\"}],\"name\":\"setStorageSlot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_valuePerWeight\",\"type\":\"uint128\"}],\"name\":\"setValuePerWeight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"signingThresholdPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"validatorsAddressArray\",\"type\":\"address[]\"}],\"name\":\"updateValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatedCodesCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"validatorExists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"valuePerWeight\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wrappedVara\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}]},\"events\":{\"BaseWeightChanged(uint64)\":{\"details\":\"Emitted when the tx's base weight is changed. NOTE: It's event for USERS: it informs about new value of commission for each message sending. NOTE: It's event for NODES: it requires to update commission in programs execution parameters.\"},\"BlockCommitted(bytes32)\":{\"details\":\"Emitted when a new state transitions are applied. NOTE: It's event for USERS: it informs about new block outcome committed.\"},\"CodeGotValidated(bytes32,bool)\":{\"details\":\"Emitted when a code, previously requested to be validated, gets validated. NOTE: It's event for USERS: it informs about validation results of previously requested code.\"},\"CodeValidationRequested(bytes32,bytes32)\":{\"details\":\"Emitted when a new code validation request submitted. NOTE: It's event for NODES: it requires to download and validate code from blob.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"ProgramCreated(address,bytes32)\":{\"details\":\"Emitted when a new program created. NOTE: It's event for USERS: it informs about new program creation and it's availability on Ethereum. NOTE: It's event for NODES: it requires to create associated gear program in local storage.\"},\"StorageSlotChanged()\":{\"details\":\"Emitted when the storage slot is changed. NOTE: It's event for USERS: it informs about router being wiped and all programs and codes deletion. NOTE: It's event for NODES: it requires to clean the local storage.\"},\"ValidatorsSetChanged()\":{\"details\":\"Emitted when the validators set is changed. NOTE: It's event for USERS: it informs about validators rotation. NOTE: It's event for NODES: it requires to update authorities that sign outcomes.\"},\"ValuePerWeightChanged(uint128)\":{\"details\":\"Emitted when the value per executable weight is changed. NOTE: It's event for USERS: it informs about new conversion rate between weight and it's WVara price. NOTE: It's event for NODES: it requires to update conversion rate in programs execution parameters.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"programCodeId(address)\":{\"details\":\"Returns bytes32(0) in case of inexistent program.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling 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.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Router.sol\":\"Router\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":symbiotic-core/=lib/symbiotic-core/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts/contracts/proxy/Clones.sol\":{\"keccak256\":\"0x4cc853b89072428e406c60c6e8d5280b31f9d99d6caf7b041650e649746513a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38a1bbdb89a8f5d1820a2dcc34b5086a6e199c7a8965007345975b5db8997a64\",\"dweb:/ipfs/QmcN6yJBkoserTqAMpue55HmMCMf7dGJYUbGi8p366HqZq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323\",\"dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR\"]},\"lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a\",\"dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3\",\"dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn\"]},\"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x629828db7f6354641b2bc42f6f6742b07bed39959361f92b781224fd33cfb0c9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2654b69b5d9b42ad4c981875add283a06db8bd02e01c614d4f0d498860d0c58\",\"dweb:/ipfs/QmWE3oD4Ti4UKrZTiA4cxAwprkFTpBYsLRrc62w5Lg16Q8\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097\",\"dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6\",\"dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087\",\"dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8\",\"dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da\",\"dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047\",\"dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615\",\"dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5\"]},\"src/IMirror.sol\":{\"keccak256\":\"0x78105f388516b83fcb68f7c006c5d9d685bc8ad7fadcdfa56c0919efa79a6373\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://3a8ab1264895b4f5c8fd3aa18524016c4e88712a50e0a9935f421e13f3e09601\",\"dweb:/ipfs/QmXyVe9k37fDFWmrfjYHisxmqnEynevYo88uVrnRAmYW6L\"]},\"src/IRouter.sol\":{\"keccak256\":\"0xe617d8ee99b9f35a45b5591fe67cc6c60930a525933cafb2315eb45a1cd91d4f\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://9d3b9e731c182559acb506fa22b833591a29cedf1d2f34656819736fb044cc8f\",\"dweb:/ipfs/QmNPskadyFYM8zJMAQPAAYuLQCr3h3c8NLs2RQo4ZRQLq3\"]},\"src/IWrappedVara.sol\":{\"keccak256\":\"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f\",\"dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf\"]},\"src/Router.sol\":{\"keccak256\":\"0x5820512d311ba29e78123f3dc190ebbee7a68768035e14144d237816ef7673f1\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7c129b4f9f5bb1da71f601302ab5b72acb3c0cbe63159e1b163014ab9e70cca2\",\"dweb:/ipfs/QmQKZANhbpescNoMfDSkZ3c3rnWCGuNoZ8XGaLsvASHs7y\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"ECDSAInvalidSignature"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"ECDSAInvalidSignatureLength"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"type":"error","name":"ECDSAInvalidSignatureS"},{"inputs":[],"type":"error","name":"FailedDeployment"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"InsufficientBalance"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[{"internalType":"uint64","name":"baseWeight","type":"uint64","indexed":false}],"type":"event","name":"BaseWeightChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32","indexed":false}],"type":"event","name":"BlockCommitted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"bool","name":"valid","type":"bool","indexed":true}],"type":"event","name":"CodeGotValidated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32","indexed":false},{"internalType":"bytes32","name":"blobTxHash","type":"bytes32","indexed":false}],"type":"event","name":"CodeValidationRequested","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","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":"actorId","type":"address","indexed":false},{"internalType":"bytes32","name":"codeId","type":"bytes32","indexed":true}],"type":"event","name":"ProgramCreated","anonymous":false},{"inputs":[],"type":"event","name":"StorageSlotChanged","anonymous":false},{"inputs":[],"type":"event","name":"ValidatorsSetChanged","anonymous":false},{"inputs":[{"internalType":"uint128","name":"valuePerWeight","type":"uint128","indexed":false}],"type":"event","name":"ValuePerWeightChanged","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"baseFee","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"baseWeight","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32"}],"stateMutability":"view","type":"function","name":"codeState","outputs":[{"internalType":"enum IRouter.CodeState","name":"","type":"uint8"}]},{"inputs":[{"internalType":"struct IRouter.BlockCommitment[]","name":"blockCommitmentsArray","type":"tuple[]","components":[{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"uint48","name":"blockTimestamp","type":"uint48"},{"internalType":"bytes32","name":"prevCommitmentHash","type":"bytes32"},{"internalType":"bytes32","name":"predBlockHash","type":"bytes32"},{"internalType":"struct IRouter.StateTransition[]","name":"transitions","type":"tuple[]","components":[{"internalType":"address","name":"actorId","type":"address"},{"internalType":"bytes32","name":"newStateHash","type":"bytes32"},{"internalType":"address","name":"inheritor","type":"address"},{"internalType":"uint128","name":"valueToReceive","type":"uint128"},{"internalType":"struct IRouter.ValueClaim[]","name":"valueClaims","type":"tuple[]","components":[{"internalType":"bytes32","name":"messageId","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint128","name":"value","type":"uint128"}]},{"internalType":"struct IRouter.OutgoingMessage[]","name":"messages","type":"tuple[]","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"struct IRouter.ReplyDetails","name":"replyDetails","type":"tuple","components":[{"internalType":"bytes32","name":"to","type":"bytes32"},{"internalType":"bytes4","name":"code","type":"bytes4"}]}]}]}]},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"commitBlocks"},{"inputs":[{"internalType":"struct IRouter.CodeCommitment[]","name":"codeCommitmentsArray","type":"tuple[]","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"bool","name":"valid","type":"bool"}]},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"commitCodes"},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"createProgram","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"decoderImplementation","type":"address"},{"internalType":"bytes32","name":"codeId","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"createProgramWithDecoder","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"genesisBlockHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getStorageSlot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"address","name":"_mirror","type":"address"},{"internalType":"address","name":"_mirrorProxy","type":"address"},{"internalType":"address","name":"_wrappedVara","type":"address"},{"internalType":"address[]","name":"_validatorsKeys","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"lastBlockCommitmentHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"lastBlockCommitmentTimestamp","outputs":[{"internalType":"uint48","name":"","type":"uint48"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"mirror","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"mirrorProxy","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"program","type":"address"}],"stateMutability":"view","type":"function","name":"programCodeId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"programsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"reinitialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32"},{"internalType":"bytes32","name":"blobTxHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"requestCodeValidation"},{"inputs":[{"internalType":"uint64","name":"_baseWeight","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"setBaseWeight"},{"inputs":[{"internalType":"address","name":"_mirror","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setMirror"},{"inputs":[{"internalType":"string","name":"namespace","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"setStorageSlot"},{"inputs":[{"internalType":"uint128","name":"_valuePerWeight","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"setValuePerWeight"},{"inputs":[],"stateMutability":"view","type":"function","name":"signingThresholdPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"address[]","name":"validatorsAddressArray","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"updateValidators"},{"inputs":[],"stateMutability":"view","type":"function","name":"validatedCodesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"validator","type":"address"}],"stateMutability":"view","type":"function","name":"validatorExists","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"valuePerWeight","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"wrappedVara","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"owner()":{"details":"Returns the address of the current owner."},"programCodeId(address)":{"details":"Returns bytes32(0) in case of inexistent program."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling 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."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","symbiotic-core/=lib/symbiotic-core/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Router.sol":"Router"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/Clones.sol":{"keccak256":"0x4cc853b89072428e406c60c6e8d5280b31f9d99d6caf7b041650e649746513a6","urls":["bzz-raw://38a1bbdb89a8f5d1820a2dcc34b5086a6e199c7a8965007345975b5db8997a64","dweb:/ipfs/QmcN6yJBkoserTqAMpue55HmMCMf7dGJYUbGi8p366HqZq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28","urls":["bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323","dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179","urls":["bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a","dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a","urls":["bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3","dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol":{"keccak256":"0x629828db7f6354641b2bc42f6f6742b07bed39959361f92b781224fd33cfb0c9","urls":["bzz-raw://a2654b69b5d9b42ad4c981875add283a06db8bd02e01c614d4f0d498860d0c58","dweb:/ipfs/QmWE3oD4Ti4UKrZTiA4cxAwprkFTpBYsLRrc62w5Lg16Q8"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4","urls":["bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097","dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b","urls":["bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6","dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb","urls":["bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087","dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38","urls":["bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8","dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee","urls":["bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da","dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e","urls":["bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047","dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44","urls":["bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615","dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5"],"license":"MIT"},"src/IMirror.sol":{"keccak256":"0x78105f388516b83fcb68f7c006c5d9d685bc8ad7fadcdfa56c0919efa79a6373","urls":["bzz-raw://3a8ab1264895b4f5c8fd3aa18524016c4e88712a50e0a9935f421e13f3e09601","dweb:/ipfs/QmXyVe9k37fDFWmrfjYHisxmqnEynevYo88uVrnRAmYW6L"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0xe617d8ee99b9f35a45b5591fe67cc6c60930a525933cafb2315eb45a1cd91d4f","urls":["bzz-raw://9d3b9e731c182559acb506fa22b833591a29cedf1d2f34656819736fb044cc8f","dweb:/ipfs/QmNPskadyFYM8zJMAQPAAYuLQCr3h3c8NLs2RQo4ZRQLq3"],"license":"UNLICENSED"},"src/IWrappedVara.sol":{"keccak256":"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175","urls":["bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f","dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf"],"license":"UNLICENSED"},"src/Router.sol":{"keccak256":"0x5820512d311ba29e78123f3dc190ebbee7a68768035e14144d237816ef7673f1","urls":["bzz-raw://7c129b4f9f5bb1da71f601302ab5b72acb3c0cbe63159e1b163014ab9e70cca2","dweb:/ipfs/QmQKZANhbpescNoMfDSkZ3c3rnWCGuNoZ8XGaLsvASHs7y"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/Router.sol","id":76909,"exportedSymbols":{"Clones":[41840],"ECDSA":[45249],"IERC20":[43140],"IERC20Metadata":[43166],"IMirror":[73387],"IRouter":[73763],"IWrappedVara":[73774],"MessageHashUtils":[45550],"OwnableUpgradeable":[39387],"ReentrancyGuardTransient":[44045],"Router":[76908],"StorageSlot":[44581]},"nodeType":"SourceUnit","src":"39:19044:159","nodes":[{"id":75145,"nodeType":"PragmaDirective","src":"39:24:159","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":75147,"nodeType":"ImportDirective","src":"65:74:159","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol","file":"@openzeppelin/contracts/utils/StorageSlot.sol","nameLocation":"-1:-1:-1","scope":76909,"sourceUnit":44582,"symbolAliases":[{"foreign":{"id":75146,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44581,"src":"73:11:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75149,"nodeType":"ImportDirective","src":"140:101:159","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":76909,"sourceUnit":39388,"symbolAliases":[{"foreign":{"id":75148,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39387,"src":"148:18:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75151,"nodeType":"ImportDirective","src":"242:64:159","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/Clones.sol","file":"@openzeppelin/contracts/proxy/Clones.sol","nameLocation":"-1:-1:-1","scope":76909,"sourceUnit":41841,"symbolAliases":[{"foreign":{"id":75150,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41840,"src":"250:6:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75153,"nodeType":"ImportDirective","src":"307:75:159","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol","file":"@openzeppelin/contracts/utils/cryptography/ECDSA.sol","nameLocation":"-1:-1:-1","scope":76909,"sourceUnit":45250,"symbolAliases":[{"foreign":{"id":75152,"name":"ECDSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45249,"src":"315:5:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75155,"nodeType":"ImportDirective","src":"383:97:159","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol","file":"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol","nameLocation":"-1:-1:-1","scope":76909,"sourceUnit":45551,"symbolAliases":[{"foreign":{"id":75154,"name":"MessageHashUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45550,"src":"391:16:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75157,"nodeType":"ImportDirective","src":"481:100:159","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol","file":"@openzeppelin/contracts/utils/ReentrancyGuardTransient.sol","nameLocation":"-1:-1:-1","scope":76909,"sourceUnit":44046,"symbolAliases":[{"foreign":{"id":75156,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44045,"src":"489:24:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75159,"nodeType":"ImportDirective","src":"582:38:159","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":76909,"sourceUnit":73764,"symbolAliases":[{"foreign":{"id":75158,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73763,"src":"590:7:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75161,"nodeType":"ImportDirective","src":"621:38:159","nodes":[],"absolutePath":"src/IMirror.sol","file":"./IMirror.sol","nameLocation":"-1:-1:-1","scope":76909,"sourceUnit":73388,"symbolAliases":[{"foreign":{"id":75160,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73387,"src":"629:7:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75163,"nodeType":"ImportDirective","src":"660:48:159","nodes":[],"absolutePath":"src/IWrappedVara.sol","file":"./IWrappedVara.sol","nameLocation":"-1:-1:-1","scope":76909,"sourceUnit":73775,"symbolAliases":[{"foreign":{"id":75162,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73774,"src":"668:12:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75165,"nodeType":"ImportDirective","src":"709:70:159","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","nameLocation":"-1:-1:-1","scope":76909,"sourceUnit":43141,"symbolAliases":[{"foreign":{"id":75164,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43140,"src":"717:6:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75167,"nodeType":"ImportDirective","src":"780:97:159","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","nameLocation":"-1:-1:-1","scope":76909,"sourceUnit":43167,"symbolAliases":[{"foreign":{"id":75166,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43166,"src":"788:14:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":76908,"nodeType":"ContractDefinition","src":"879:18203:159","nodes":[{"id":75176,"nodeType":"UsingForDirective","src":"958:24:159","nodes":[],"global":false,"libraryName":{"id":75174,"name":"ECDSA","nameLocations":["964:5:159"],"nodeType":"IdentifierPath","referencedDeclaration":45249,"src":"964:5:159"},"typeName":{"id":75175,"name":"bytes32","nodeType":"ElementaryTypeName","src":"974:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"id":75179,"nodeType":"UsingForDirective","src":"987:35:159","nodes":[],"global":false,"libraryName":{"id":75177,"name":"MessageHashUtils","nameLocations":["993:16:159"],"nodeType":"IdentifierPath","referencedDeclaration":45550,"src":"993:16:159"},"typeName":{"id":75178,"name":"address","nodeType":"ElementaryTypeName","src":"1014:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"id":75182,"nodeType":"VariableDeclaration","src":"1130:106:159","nodes":[],"constant":true,"mutability":"constant","name":"SLOT_STORAGE","nameLocation":"1155:12:159","scope":76908,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75180,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1130:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307835633039636131623962383132376134666439663363333834616163353962363631343431653832306531373733333735336666356632653836653165303030","id":75181,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1170:66:159","typeDescriptions":{"typeIdentifier":"t_rational_41630078590300661333111585883568696735413380457407274925697692750148467286016_by_1","typeString":"int_const 4163...(69 digits omitted)...6016"},"value":"0x5c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000"},"visibility":"private"},{"id":75190,"nodeType":"FunctionDefinition","src":"1296:53:159","nodes":[],"body":{"id":75189,"nodeType":"Block","src":"1310:39:159","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75186,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39609,"src":"1320:20:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":75187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1320:22:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75188,"nodeType":"ExpressionStatement","src":"1320:22:159"}]},"documentation":{"id":75183,"nodeType":"StructuredDocumentation","src":"1243:48:159","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":75184,"nodeType":"ParameterList","parameters":[],"src":"1307:2:159"},"returnParameters":{"id":75185,"nodeType":"ParameterList","parameters":[],"src":"1310:0:159"},"scope":76908,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":75272,"nodeType":"FunctionDefinition","src":"1355:728:159","nodes":[],"body":{"id":75271,"nodeType":"Block","src":"1557:526:159","nodes":[],"statements":[{"expression":{"arguments":[{"id":75207,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75192,"src":"1582:12:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75206,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39247,"src":"1567:14:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":75208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1567:28:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75209,"nodeType":"ExpressionStatement","src":"1567:28:159"},{"expression":{"arguments":[{"hexValue":"726f757465722e73746f726167652e526f757465725631","id":75211,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1621:25:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_ebe34d7458caf9bba83b85ded6e7716871c7d6d7b9aa651344a78a4d0d1eb88b","typeString":"literal_string \"router.storage.RouterV1\""},"value":"router.storage.RouterV1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_ebe34d7458caf9bba83b85ded6e7716871c7d6d7b9aa651344a78a4d0d1eb88b","typeString":"literal_string \"router.storage.RouterV1\""}],"id":75210,"name":"setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75413,"src":"1606:14:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":75212,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1606:41:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75213,"nodeType":"ExpressionStatement","src":"1606:41:159"},{"assignments":[75216],"declarations":[{"constant":false,"id":75216,"mutability":"mutable","name":"router","nameLocation":"1673:6:159","nodeType":"VariableDeclaration","scope":75271,"src":"1657:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75215,"nodeType":"UserDefinedTypeName","pathNode":{"id":75214,"name":"Storage","nameLocations":["1657:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"1657:7:159"},"referencedDeclaration":73472,"src":"1657:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75219,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75217,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"1682:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1682:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"1657:38:159"},{"expression":{"id":75229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75220,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75216,"src":"1706:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75222,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1713:16:159","memberName":"genesisBlockHash","nodeType":"MemberAccess","referencedDeclaration":73435,"src":"1706:23:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75224,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1742:5:159","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":75225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1748:6:159","memberName":"number","nodeType":"MemberAccess","src":"1742:12:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":75226,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1757:1:159","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1742:16:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":75223,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"1732:9:159","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":75228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1732:27:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1706:53:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":75230,"nodeType":"ExpressionStatement","src":"1706:53:159"},{"expression":{"id":75235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75231,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75216,"src":"1769:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75233,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1776:6:159","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":73437,"src":"1769:13:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75234,"name":"_mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75194,"src":"1785:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1769:23:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75236,"nodeType":"ExpressionStatement","src":"1769:23:159"},{"expression":{"id":75241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75237,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75216,"src":"1802:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75239,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1809:11:159","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":73439,"src":"1802:18:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75240,"name":"_mirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75196,"src":"1823:12:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1802:33:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75242,"nodeType":"ExpressionStatement","src":"1802:33:159"},{"expression":{"id":75247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75243,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75216,"src":"1845:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75245,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1852:11:159","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":73441,"src":"1845:18:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75246,"name":"_wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75198,"src":"1866:12:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1845:33:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75248,"nodeType":"ExpressionStatement","src":"1845:33:159"},{"expression":{"id":75253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75249,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75216,"src":"1888:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75251,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1895:26:159","memberName":"signingThresholdPercentage","nodeType":"MemberAccess","referencedDeclaration":73447,"src":"1888:33:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"36363636","id":75252,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1924:4:159","typeDescriptions":{"typeIdentifier":"t_rational_6666_by_1","typeString":"int_const 6666"},"value":"6666"},"src":"1888:40:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":75254,"nodeType":"ExpressionStatement","src":"1888:40:159"},{"expression":{"id":75259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75255,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75216,"src":"1966:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75257,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1973:10:159","memberName":"baseWeight","nodeType":"MemberAccess","referencedDeclaration":73449,"src":"1966:17:159","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"325f3530305f3030305f303030","id":75258,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1986:13:159","typeDescriptions":{"typeIdentifier":"t_rational_2500000000_by_1","typeString":"int_const 2500000000"},"value":"2_500_000_000"},"src":"1966:33:159","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":75260,"nodeType":"ExpressionStatement","src":"1966:33:159"},{"expression":{"id":75265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75261,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75216,"src":"2009:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75263,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2016:14:159","memberName":"valuePerWeight","nodeType":"MemberAccess","referencedDeclaration":73451,"src":"2009:21:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"3130","id":75264,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2033:2:159","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"2009:26:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":75266,"nodeType":"ExpressionStatement","src":"2009:26:159"},{"expression":{"arguments":[{"id":75268,"name":"_validatorsKeys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75201,"src":"2060:15:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"id":75267,"name":"_setValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76894,"src":"2045:14:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory)"}},"id":75269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2045:31:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75270,"nodeType":"ExpressionStatement","src":"2045:31:159"}]},"functionSelector":"f8453e7c","implemented":true,"kind":"function","modifiers":[{"id":75204,"kind":"modifierInvocation","modifierName":{"id":75203,"name":"initializer","nameLocations":["1545:11:159"],"nodeType":"IdentifierPath","referencedDeclaration":39495,"src":"1545:11:159"},"nodeType":"ModifierInvocation","src":"1545:11:159"}],"name":"initialize","nameLocation":"1364:10:159","parameters":{"id":75202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75192,"mutability":"mutable","name":"initialOwner","nameLocation":"1392:12:159","nodeType":"VariableDeclaration","scope":75272,"src":"1384:20:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75191,"name":"address","nodeType":"ElementaryTypeName","src":"1384:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75194,"mutability":"mutable","name":"_mirror","nameLocation":"1422:7:159","nodeType":"VariableDeclaration","scope":75272,"src":"1414:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75193,"name":"address","nodeType":"ElementaryTypeName","src":"1414:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75196,"mutability":"mutable","name":"_mirrorProxy","nameLocation":"1447:12:159","nodeType":"VariableDeclaration","scope":75272,"src":"1439:20:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75195,"name":"address","nodeType":"ElementaryTypeName","src":"1439:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75198,"mutability":"mutable","name":"_wrappedVara","nameLocation":"1477:12:159","nodeType":"VariableDeclaration","scope":75272,"src":"1469:20:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75197,"name":"address","nodeType":"ElementaryTypeName","src":"1469:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75201,"mutability":"mutable","name":"_validatorsKeys","nameLocation":"1516:15:159","nodeType":"VariableDeclaration","scope":75272,"src":"1499:32:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":75199,"name":"address","nodeType":"ElementaryTypeName","src":"1499:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75200,"nodeType":"ArrayTypeName","src":"1499:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1374:163:159"},"returnParameters":{"id":75205,"nodeType":"ParameterList","parameters":[],"src":"1557:0:159"},"scope":76908,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":75353,"nodeType":"FunctionDefinition","src":"2089:662:159","nodes":[],"body":{"id":75352,"nodeType":"Block","src":"2147:604:159","nodes":[],"statements":[{"assignments":[75282],"declarations":[{"constant":false,"id":75282,"mutability":"mutable","name":"oldRouter","nameLocation":"2173:9:159","nodeType":"VariableDeclaration","scope":75352,"src":"2157:25:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75281,"nodeType":"UserDefinedTypeName","pathNode":{"id":75280,"name":"Storage","nameLocations":["2157:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"2157:7:159"},"referencedDeclaration":73472,"src":"2157:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75285,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75283,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"2185:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2185:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2157:41:159"},{"assignments":[75287],"declarations":[{"constant":false,"id":75287,"mutability":"mutable","name":"_mirror","nameLocation":"2217:7:159","nodeType":"VariableDeclaration","scope":75352,"src":"2209:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75286,"name":"address","nodeType":"ElementaryTypeName","src":"2209:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":75290,"initialValue":{"expression":{"id":75288,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75282,"src":"2227:9:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75289,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2237:6:159","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":73437,"src":"2227:16:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2209:34:159"},{"assignments":[75292],"declarations":[{"constant":false,"id":75292,"mutability":"mutable","name":"_mirrorProxy","nameLocation":"2261:12:159","nodeType":"VariableDeclaration","scope":75352,"src":"2253:20:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75291,"name":"address","nodeType":"ElementaryTypeName","src":"2253:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":75295,"initialValue":{"expression":{"id":75293,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75282,"src":"2276:9:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75294,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2286:11:159","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":73439,"src":"2276:21:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2253:44:159"},{"assignments":[75297],"declarations":[{"constant":false,"id":75297,"mutability":"mutable","name":"_wrappedVara","nameLocation":"2315:12:159","nodeType":"VariableDeclaration","scope":75352,"src":"2307:20:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75296,"name":"address","nodeType":"ElementaryTypeName","src":"2307:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":75300,"initialValue":{"expression":{"id":75298,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75282,"src":"2330:9:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75299,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2340:11:159","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":73441,"src":"2330:21:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2307:44:159"},{"assignments":[75305],"declarations":[{"constant":false,"id":75305,"mutability":"mutable","name":"_validatorsKeys","nameLocation":"2378:15:159","nodeType":"VariableDeclaration","scope":75352,"src":"2361:32:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":75303,"name":"address","nodeType":"ElementaryTypeName","src":"2361:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75304,"nodeType":"ArrayTypeName","src":"2361:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":75308,"initialValue":{"expression":{"id":75306,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75282,"src":"2396:9:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75307,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2406:14:159","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":73458,"src":"2396:24:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2361:59:159"},{"expression":{"arguments":[{"hexValue":"726f757465722e73746f726167652e526f757465725632","id":75310,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2446:25:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_07554b5a957f065078e703cffe06326f3995e4f57feb37a649312406c8f4f44a","typeString":"literal_string \"router.storage.RouterV2\""},"value":"router.storage.RouterV2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_07554b5a957f065078e703cffe06326f3995e4f57feb37a649312406c8f4f44a","typeString":"literal_string \"router.storage.RouterV2\""}],"id":75309,"name":"setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75413,"src":"2431:14:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":75311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2431:41:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75312,"nodeType":"ExpressionStatement","src":"2431:41:159"},{"assignments":[75315],"declarations":[{"constant":false,"id":75315,"mutability":"mutable","name":"router","nameLocation":"2498:6:159","nodeType":"VariableDeclaration","scope":75352,"src":"2482:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75314,"nodeType":"UserDefinedTypeName","pathNode":{"id":75313,"name":"Storage","nameLocations":["2482:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"2482:7:159"},"referencedDeclaration":73472,"src":"2482:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75318,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75316,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"2507:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2507:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2482:38:159"},{"expression":{"id":75328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75319,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75315,"src":"2531:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75321,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2538:16:159","memberName":"genesisBlockHash","nodeType":"MemberAccess","referencedDeclaration":73435,"src":"2531:23:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75323,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2567:5:159","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":75324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2573:6:159","memberName":"number","nodeType":"MemberAccess","src":"2567:12:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":75325,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2582:1:159","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2567:16:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":75322,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"2557:9:159","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":75327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2557:27:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2531:53:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":75329,"nodeType":"ExpressionStatement","src":"2531:53:159"},{"expression":{"id":75334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75330,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75315,"src":"2594:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75332,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2601:6:159","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":73437,"src":"2594:13:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75333,"name":"_mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75287,"src":"2610:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2594:23:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75335,"nodeType":"ExpressionStatement","src":"2594:23:159"},{"expression":{"id":75340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75336,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75315,"src":"2627:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75338,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2634:11:159","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":73439,"src":"2627:18:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75339,"name":"_mirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75292,"src":"2648:12:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2627:33:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75341,"nodeType":"ExpressionStatement","src":"2627:33:159"},{"expression":{"id":75346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75342,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75315,"src":"2670:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75344,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2677:11:159","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":73441,"src":"2670:18:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75345,"name":"_wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75297,"src":"2691:12:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2670:33:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75347,"nodeType":"ExpressionStatement","src":"2670:33:159"},{"expression":{"arguments":[{"id":75349,"name":"_validatorsKeys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75305,"src":"2728:15:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"id":75348,"name":"_setValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76894,"src":"2713:14:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory)"}},"id":75350,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2713:31:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75351,"nodeType":"ExpressionStatement","src":"2713:31:159"}]},"functionSelector":"6c2eb350","implemented":true,"kind":"function","modifiers":[{"id":75275,"kind":"modifierInvocation","modifierName":{"id":75274,"name":"onlyOwner","nameLocations":["2120:9:159"],"nodeType":"IdentifierPath","referencedDeclaration":39282,"src":"2120:9:159"},"nodeType":"ModifierInvocation","src":"2120:9:159"},{"arguments":[{"hexValue":"32","id":75277,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2144:1:159","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"id":75278,"kind":"modifierInvocation","modifierName":{"id":75276,"name":"reinitializer","nameLocations":["2130:13:159"],"nodeType":"IdentifierPath","referencedDeclaration":39542,"src":"2130:13:159"},"nodeType":"ModifierInvocation","src":"2130:16:159"}],"name":"reinitialize","nameLocation":"2098:12:159","parameters":{"id":75273,"nodeType":"ParameterList","parameters":[],"src":"2110:2:159"},"returnParameters":{"id":75279,"nodeType":"ParameterList","parameters":[],"src":"2147:0:159"},"scope":76908,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":75365,"nodeType":"FunctionDefinition","src":"2790:126:159","nodes":[],"body":{"id":75364,"nodeType":"Block","src":"2846:70:159","nodes":[],"statements":[{"expression":{"expression":{"arguments":[{"id":75360,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75182,"src":"2890:12:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":75358,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44581,"src":"2863:11:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$44581_$","typeString":"type(library StorageSlot)"}},"id":75359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2875:14:159","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":44319,"src":"2863:26:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$44274_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":75361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2863:40:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$44274_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":75362,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2904:5:159","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":44273,"src":"2863:46:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":75357,"id":75363,"nodeType":"Return","src":"2856:53:159"}]},"baseFunctions":[73582],"functionSelector":"96708226","implemented":true,"kind":"function","modifiers":[],"name":"getStorageSlot","nameLocation":"2799:14:159","parameters":{"id":75354,"nodeType":"ParameterList","parameters":[],"src":"2813:2:159"},"returnParameters":{"id":75357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75356,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75365,"src":"2837:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75355,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2837:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2836:9:159"},"scope":76908,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75413,"nodeType":"FunctionDefinition","src":"2922:287:159","nodes":[],"body":{"id":75412,"nodeType":"Block","src":"2988:221:159","nodes":[],"statements":[{"assignments":[75373],"declarations":[{"constant":false,"id":75373,"mutability":"mutable","name":"slot","nameLocation":"3006:4:159","nodeType":"VariableDeclaration","scope":75412,"src":"2998:12:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75372,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2998:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":75399,"initialValue":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"id":75382,"name":"namespace","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75367,"src":"3058:9:159","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":75381,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3052:5:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":75380,"name":"bytes","nodeType":"ElementaryTypeName","src":"3052:5:159","typeDescriptions":{}}},"id":75383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3052:16:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":75379,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3042:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":75384,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3042:27:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":75378,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3034:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":75377,"name":"uint256","nodeType":"ElementaryTypeName","src":"3034:7:159","typeDescriptions":{}}},"id":75385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3034:36:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":75386,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3073:1:159","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3034:40:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":75375,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3023:3:159","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":75376,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3027:6:159","memberName":"encode","nodeType":"MemberAccess","src":"3023:10:159","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":75388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3023:52:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":75374,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3013:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":75389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3013:63:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":75397,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"3079:23:159","subExpression":{"arguments":[{"arguments":[{"hexValue":"30786666","id":75394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3096:4:159","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"}],"id":75393,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3088:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":75392,"name":"uint256","nodeType":"ElementaryTypeName","src":"3088:7:159","typeDescriptions":{}}},"id":75395,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3088:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":75391,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3080:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":75390,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3080:7:159","typeDescriptions":{}}},"id":75396,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3080:22:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3013:89:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2998:104:159"},{"expression":{"id":75407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":75403,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75182,"src":"3140:12:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":75400,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44581,"src":"3113:11:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$44581_$","typeString":"type(library StorageSlot)"}},"id":75402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3125:14:159","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":44319,"src":"3113:26:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$44274_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":75404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3113:40:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$44274_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":75405,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3154:5:159","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":44273,"src":"3113:46:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75406,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75373,"src":"3162:4:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3113:53:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":75408,"nodeType":"ExpressionStatement","src":"3113:53:159"},{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":75409,"name":"StorageSlotChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73567,"src":"3182:18:159","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":75410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3182:20:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75411,"nodeType":"EmitStatement","src":"3177:25:159"}]},"baseFunctions":[73587],"functionSelector":"5686cad5","implemented":true,"kind":"function","modifiers":[{"id":75370,"kind":"modifierInvocation","modifierName":{"id":75369,"name":"onlyOwner","nameLocations":["2978:9:159"],"nodeType":"IdentifierPath","referencedDeclaration":39282,"src":"2978:9:159"},"nodeType":"ModifierInvocation","src":"2978:9:159"}],"name":"setStorageSlot","nameLocation":"2931:14:159","parameters":{"id":75368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75367,"mutability":"mutable","name":"namespace","nameLocation":"2960:9:159","nodeType":"VariableDeclaration","scope":75413,"src":"2946:23:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":75366,"name":"string","nodeType":"ElementaryTypeName","src":"2946:6:159","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2945:25:159"},"returnParameters":{"id":75371,"nodeType":"ParameterList","parameters":[],"src":"2988:0:159"},"scope":76908,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":75428,"nodeType":"FunctionDefinition","src":"3215:153:159","nodes":[],"body":{"id":75427,"nodeType":"Block","src":"3273:95:159","nodes":[],"statements":[{"assignments":[75420],"declarations":[{"constant":false,"id":75420,"mutability":"mutable","name":"router","nameLocation":"3299:6:159","nodeType":"VariableDeclaration","scope":75427,"src":"3283:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75419,"nodeType":"UserDefinedTypeName","pathNode":{"id":75418,"name":"Storage","nameLocations":["3283:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"3283:7:159"},"referencedDeclaration":73472,"src":"3283:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75423,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75421,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"3308:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3308:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3283:38:159"},{"expression":{"expression":{"id":75424,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75420,"src":"3338:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75425,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3345:16:159","memberName":"genesisBlockHash","nodeType":"MemberAccess","referencedDeclaration":73435,"src":"3338:23:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":75417,"id":75426,"nodeType":"Return","src":"3331:30:159"}]},"baseFunctions":[73592],"functionSelector":"28e24b3d","implemented":true,"kind":"function","modifiers":[],"name":"genesisBlockHash","nameLocation":"3224:16:159","parameters":{"id":75414,"nodeType":"ParameterList","parameters":[],"src":"3240:2:159"},"returnParameters":{"id":75417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75416,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75428,"src":"3264:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75415,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3264:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3263:9:159"},"scope":76908,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75443,"nodeType":"FunctionDefinition","src":"3374:167:159","nodes":[],"body":{"id":75442,"nodeType":"Block","src":"3439:102:159","nodes":[],"statements":[{"assignments":[75435],"declarations":[{"constant":false,"id":75435,"mutability":"mutable","name":"router","nameLocation":"3465:6:159","nodeType":"VariableDeclaration","scope":75442,"src":"3449:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75434,"nodeType":"UserDefinedTypeName","pathNode":{"id":75433,"name":"Storage","nameLocations":["3449:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"3449:7:159"},"referencedDeclaration":73472,"src":"3449:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75438,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75436,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"3474:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3474:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3449:38:159"},{"expression":{"expression":{"id":75439,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75435,"src":"3504:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75440,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3511:23:159","memberName":"lastBlockCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":73443,"src":"3504:30:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":75432,"id":75441,"nodeType":"Return","src":"3497:37:159"}]},"baseFunctions":[73597],"functionSelector":"2dacfb69","implemented":true,"kind":"function","modifiers":[],"name":"lastBlockCommitmentHash","nameLocation":"3383:23:159","parameters":{"id":75429,"nodeType":"ParameterList","parameters":[],"src":"3406:2:159"},"returnParameters":{"id":75432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75431,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75443,"src":"3430:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75430,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3430:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3429:9:159"},"scope":76908,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75458,"nodeType":"FunctionDefinition","src":"3547:176:159","nodes":[],"body":{"id":75457,"nodeType":"Block","src":"3616:107:159","nodes":[],"statements":[{"assignments":[75450],"declarations":[{"constant":false,"id":75450,"mutability":"mutable","name":"router","nameLocation":"3642:6:159","nodeType":"VariableDeclaration","scope":75457,"src":"3626:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75449,"nodeType":"UserDefinedTypeName","pathNode":{"id":75448,"name":"Storage","nameLocations":["3626:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"3626:7:159"},"referencedDeclaration":73472,"src":"3626:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75453,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75451,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"3651:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75452,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3651:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3626:38:159"},{"expression":{"expression":{"id":75454,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75450,"src":"3681:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75455,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3688:28:159","memberName":"lastBlockCommitmentTimestamp","nodeType":"MemberAccess","referencedDeclaration":73445,"src":"3681:35:159","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":75447,"id":75456,"nodeType":"Return","src":"3674:42:159"}]},"baseFunctions":[73602],"functionSelector":"4083acec","implemented":true,"kind":"function","modifiers":[],"name":"lastBlockCommitmentTimestamp","nameLocation":"3556:28:159","parameters":{"id":75444,"nodeType":"ParameterList","parameters":[],"src":"3584:2:159"},"returnParameters":{"id":75447,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75446,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75458,"src":"3608:6:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":75445,"name":"uint48","nodeType":"ElementaryTypeName","src":"3608:6:159","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"3607:8:159"},"scope":76908,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75473,"nodeType":"FunctionDefinition","src":"3729:143:159","nodes":[],"body":{"id":75472,"nodeType":"Block","src":"3782:90:159","nodes":[],"statements":[{"assignments":[75465],"declarations":[{"constant":false,"id":75465,"mutability":"mutable","name":"router","nameLocation":"3808:6:159","nodeType":"VariableDeclaration","scope":75472,"src":"3792:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75464,"nodeType":"UserDefinedTypeName","pathNode":{"id":75463,"name":"Storage","nameLocations":["3792:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"3792:7:159"},"referencedDeclaration":73472,"src":"3792:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75468,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75466,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"3817:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75467,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3817:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3792:38:159"},{"expression":{"expression":{"id":75469,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75465,"src":"3847:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75470,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3854:11:159","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":73441,"src":"3847:18:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75462,"id":75471,"nodeType":"Return","src":"3840:25:159"}]},"baseFunctions":[73607],"functionSelector":"88f50cf0","implemented":true,"kind":"function","modifiers":[],"name":"wrappedVara","nameLocation":"3738:11:159","parameters":{"id":75459,"nodeType":"ParameterList","parameters":[],"src":"3749:2:159"},"returnParameters":{"id":75462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75461,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75473,"src":"3773:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75460,"name":"address","nodeType":"ElementaryTypeName","src":"3773:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3772:9:159"},"scope":76908,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75488,"nodeType":"FunctionDefinition","src":"3878:143:159","nodes":[],"body":{"id":75487,"nodeType":"Block","src":"3931:90:159","nodes":[],"statements":[{"assignments":[75480],"declarations":[{"constant":false,"id":75480,"mutability":"mutable","name":"router","nameLocation":"3957:6:159","nodeType":"VariableDeclaration","scope":75487,"src":"3941:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75479,"nodeType":"UserDefinedTypeName","pathNode":{"id":75478,"name":"Storage","nameLocations":["3941:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"3941:7:159"},"referencedDeclaration":73472,"src":"3941:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75483,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75481,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"3966:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3966:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3941:38:159"},{"expression":{"expression":{"id":75484,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75480,"src":"3996:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75485,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4003:11:159","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":73439,"src":"3996:18:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75477,"id":75486,"nodeType":"Return","src":"3989:25:159"}]},"baseFunctions":[73612],"functionSelector":"78ee5dec","implemented":true,"kind":"function","modifiers":[],"name":"mirrorProxy","nameLocation":"3887:11:159","parameters":{"id":75474,"nodeType":"ParameterList","parameters":[],"src":"3898:2:159"},"returnParameters":{"id":75477,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75476,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75488,"src":"3922:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75475,"name":"address","nodeType":"ElementaryTypeName","src":"3922:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3921:9:159"},"scope":76908,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75503,"nodeType":"FunctionDefinition","src":"4027:133:159","nodes":[],"body":{"id":75502,"nodeType":"Block","src":"4075:85:159","nodes":[],"statements":[{"assignments":[75495],"declarations":[{"constant":false,"id":75495,"mutability":"mutable","name":"router","nameLocation":"4101:6:159","nodeType":"VariableDeclaration","scope":75502,"src":"4085:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75494,"nodeType":"UserDefinedTypeName","pathNode":{"id":75493,"name":"Storage","nameLocations":["4085:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"4085:7:159"},"referencedDeclaration":73472,"src":"4085:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75498,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75496,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"4110:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4110:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4085:38:159"},{"expression":{"expression":{"id":75499,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75495,"src":"4140:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75500,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4147:6:159","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":73437,"src":"4140:13:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75492,"id":75501,"nodeType":"Return","src":"4133:20:159"}]},"baseFunctions":[73617],"functionSelector":"444d9172","implemented":true,"kind":"function","modifiers":[],"name":"mirror","nameLocation":"4036:6:159","parameters":{"id":75489,"nodeType":"ParameterList","parameters":[],"src":"4042:2:159"},"returnParameters":{"id":75492,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75491,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75503,"src":"4066:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75490,"name":"address","nodeType":"ElementaryTypeName","src":"4066:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4065:9:159"},"scope":76908,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75523,"nodeType":"FunctionDefinition","src":"4166:143:159","nodes":[],"body":{"id":75522,"nodeType":"Block","src":"4221:88:159","nodes":[],"statements":[{"assignments":[75512],"declarations":[{"constant":false,"id":75512,"mutability":"mutable","name":"router","nameLocation":"4247:6:159","nodeType":"VariableDeclaration","scope":75522,"src":"4231:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75511,"nodeType":"UserDefinedTypeName","pathNode":{"id":75510,"name":"Storage","nameLocations":["4231:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"4231:7:159"},"referencedDeclaration":73472,"src":"4231:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75515,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75513,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"4256:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75514,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4256:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4231:38:159"},{"expression":{"id":75520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75516,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75512,"src":"4279:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75518,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4286:6:159","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":73437,"src":"4279:13:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75519,"name":"_mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75505,"src":"4295:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4279:23:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75521,"nodeType":"ExpressionStatement","src":"4279:23:159"}]},"baseFunctions":[73622],"functionSelector":"3d43b418","implemented":true,"kind":"function","modifiers":[{"id":75508,"kind":"modifierInvocation","modifierName":{"id":75507,"name":"onlyOwner","nameLocations":["4211:9:159"],"nodeType":"IdentifierPath","referencedDeclaration":39282,"src":"4211:9:159"},"nodeType":"ModifierInvocation","src":"4211:9:159"}],"name":"setMirror","nameLocation":"4175:9:159","parameters":{"id":75506,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75505,"mutability":"mutable","name":"_mirror","nameLocation":"4193:7:159","nodeType":"VariableDeclaration","scope":75523,"src":"4185:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75504,"name":"address","nodeType":"ElementaryTypeName","src":"4185:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4184:17:159"},"returnParameters":{"id":75509,"nodeType":"ParameterList","parameters":[],"src":"4221:0:159"},"scope":76908,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75538,"nodeType":"FunctionDefinition","src":"4365:159:159","nodes":[],"body":{"id":75537,"nodeType":"Block","src":"4426:98:159","nodes":[],"statements":[{"assignments":[75530],"declarations":[{"constant":false,"id":75530,"mutability":"mutable","name":"router","nameLocation":"4452:6:159","nodeType":"VariableDeclaration","scope":75537,"src":"4436:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75529,"nodeType":"UserDefinedTypeName","pathNode":{"id":75528,"name":"Storage","nameLocations":["4436:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"4436:7:159"},"referencedDeclaration":73472,"src":"4436:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75533,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75531,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"4461:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4461:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4436:38:159"},{"expression":{"expression":{"id":75534,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75530,"src":"4491:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75535,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4498:19:159","memberName":"validatedCodesCount","nodeType":"MemberAccess","referencedDeclaration":73465,"src":"4491:26:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":75527,"id":75536,"nodeType":"Return","src":"4484:33:159"}]},"baseFunctions":[73627],"functionSelector":"007a32e7","implemented":true,"kind":"function","modifiers":[],"name":"validatedCodesCount","nameLocation":"4374:19:159","parameters":{"id":75524,"nodeType":"ParameterList","parameters":[],"src":"4393:2:159"},"returnParameters":{"id":75527,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75526,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75538,"src":"4417:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75525,"name":"uint256","nodeType":"ElementaryTypeName","src":"4417:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4416:9:159"},"scope":76908,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75558,"nodeType":"FunctionDefinition","src":"4530:159:159","nodes":[],"body":{"id":75557,"nodeType":"Block","src":"4597:92:159","nodes":[],"statements":[{"assignments":[75548],"declarations":[{"constant":false,"id":75548,"mutability":"mutable","name":"router","nameLocation":"4623:6:159","nodeType":"VariableDeclaration","scope":75557,"src":"4607:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75547,"nodeType":"UserDefinedTypeName","pathNode":{"id":75546,"name":"Storage","nameLocations":["4607:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"4607:7:159"},"referencedDeclaration":73472,"src":"4607:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75551,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75549,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"4632:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4632:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4607:38:159"},{"expression":{"baseExpression":{"expression":{"id":75552,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75548,"src":"4662:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75553,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4669:5:159","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":73463,"src":"4662:12:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$73476_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":75555,"indexExpression":{"id":75554,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75540,"src":"4675:6:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4662:20:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$73476","typeString":"enum IRouter.CodeState"}},"functionReturnParameters":75545,"id":75556,"nodeType":"Return","src":"4655:27:159"}]},"baseFunctions":[73635],"functionSelector":"c13911e8","implemented":true,"kind":"function","modifiers":[],"name":"codeState","nameLocation":"4539:9:159","parameters":{"id":75541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75540,"mutability":"mutable","name":"codeId","nameLocation":"4557:6:159","nodeType":"VariableDeclaration","scope":75558,"src":"4549:14:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75539,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4549:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4548:16:159"},"returnParameters":{"id":75545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75544,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75558,"src":"4586:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$73476","typeString":"enum IRouter.CodeState"},"typeName":{"id":75543,"nodeType":"UserDefinedTypeName","pathNode":{"id":75542,"name":"CodeState","nameLocations":["4586:9:159"],"nodeType":"IdentifierPath","referencedDeclaration":73476,"src":"4586:9:159"},"referencedDeclaration":73476,"src":"4586:9:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$73476","typeString":"enum IRouter.CodeState"}},"visibility":"internal"}],"src":"4585:11:159"},"scope":76908,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75573,"nodeType":"FunctionDefinition","src":"4695:147:159","nodes":[],"body":{"id":75572,"nodeType":"Block","src":"4750:92:159","nodes":[],"statements":[{"assignments":[75565],"declarations":[{"constant":false,"id":75565,"mutability":"mutable","name":"router","nameLocation":"4776:6:159","nodeType":"VariableDeclaration","scope":75572,"src":"4760:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75564,"nodeType":"UserDefinedTypeName","pathNode":{"id":75563,"name":"Storage","nameLocations":["4760:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"4760:7:159"},"referencedDeclaration":73472,"src":"4760:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75568,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75566,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"4785:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4785:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4760:38:159"},{"expression":{"expression":{"id":75569,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75565,"src":"4815:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75570,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4822:13:159","memberName":"programsCount","nodeType":"MemberAccess","referencedDeclaration":73471,"src":"4815:20:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":75562,"id":75571,"nodeType":"Return","src":"4808:27:159"}]},"baseFunctions":[73640],"functionSelector":"96a2ddfa","implemented":true,"kind":"function","modifiers":[],"name":"programsCount","nameLocation":"4704:13:159","parameters":{"id":75559,"nodeType":"ParameterList","parameters":[],"src":"4717:2:159"},"returnParameters":{"id":75562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75561,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75573,"src":"4741:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75560,"name":"uint256","nodeType":"ElementaryTypeName","src":"4741:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4740:9:159"},"scope":76908,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75592,"nodeType":"FunctionDefinition","src":"4848:166:159","nodes":[],"body":{"id":75591,"nodeType":"Block","src":"4918:96:159","nodes":[],"statements":[{"assignments":[75582],"declarations":[{"constant":false,"id":75582,"mutability":"mutable","name":"router","nameLocation":"4944:6:159","nodeType":"VariableDeclaration","scope":75591,"src":"4928:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75581,"nodeType":"UserDefinedTypeName","pathNode":{"id":75580,"name":"Storage","nameLocations":["4928:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"4928:7:159"},"referencedDeclaration":73472,"src":"4928:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75585,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75583,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"4953:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75584,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4953:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4928:38:159"},{"expression":{"baseExpression":{"expression":{"id":75586,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75582,"src":"4983:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75587,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4990:8:159","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":73469,"src":"4983:15:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":75589,"indexExpression":{"id":75588,"name":"program","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75575,"src":"4999:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4983:24:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":75579,"id":75590,"nodeType":"Return","src":"4976:31:159"}]},"baseFunctions":[73648],"functionSelector":"9067088e","implemented":true,"kind":"function","modifiers":[],"name":"programCodeId","nameLocation":"4857:13:159","parameters":{"id":75576,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75575,"mutability":"mutable","name":"program","nameLocation":"4879:7:159","nodeType":"VariableDeclaration","scope":75592,"src":"4871:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75574,"name":"address","nodeType":"ElementaryTypeName","src":"4871:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4870:17:159"},"returnParameters":{"id":75579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75578,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75592,"src":"4909:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75577,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4909:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4908:9:159"},"scope":76908,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75607,"nodeType":"FunctionDefinition","src":"5065:173:159","nodes":[],"body":{"id":75606,"nodeType":"Block","src":"5133:105:159","nodes":[],"statements":[{"assignments":[75599],"declarations":[{"constant":false,"id":75599,"mutability":"mutable","name":"router","nameLocation":"5159:6:159","nodeType":"VariableDeclaration","scope":75606,"src":"5143:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75598,"nodeType":"UserDefinedTypeName","pathNode":{"id":75597,"name":"Storage","nameLocations":["5143:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"5143:7:159"},"referencedDeclaration":73472,"src":"5143:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75602,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75600,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"5168:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5168:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5143:38:159"},{"expression":{"expression":{"id":75603,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75599,"src":"5198:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75604,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5205:26:159","memberName":"signingThresholdPercentage","nodeType":"MemberAccess","referencedDeclaration":73447,"src":"5198:33:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":75596,"id":75605,"nodeType":"Return","src":"5191:40:159"}]},"baseFunctions":[73653],"functionSelector":"efd81abc","implemented":true,"kind":"function","modifiers":[],"name":"signingThresholdPercentage","nameLocation":"5074:26:159","parameters":{"id":75593,"nodeType":"ParameterList","parameters":[],"src":"5100:2:159"},"returnParameters":{"id":75596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75595,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75607,"src":"5124:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75594,"name":"uint256","nodeType":"ElementaryTypeName","src":"5124:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5123:9:159"},"scope":76908,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75624,"nodeType":"FunctionDefinition","src":"5244:204:159","nodes":[],"body":{"id":75623,"nodeType":"Block","src":"5305:143:159","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":75612,"name":"validatorsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75640,"src":"5377:15:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":75613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5377:17:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":75614,"name":"signingThresholdPercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75607,"src":"5397:26:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":75615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5397:28:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5377:48:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"39393939","id":75617,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5428:4:159","typeDescriptions":{"typeIdentifier":"t_rational_9999_by_1","typeString":"int_const 9999"},"value":"9999"},"src":"5377:55:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":75619,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5376:57:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130303030","id":75620,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5436:5:159","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"10000"},"src":"5376:65:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":75611,"id":75622,"nodeType":"Return","src":"5369:72:159"}]},"baseFunctions":[73658],"functionSelector":"edc87225","implemented":true,"kind":"function","modifiers":[],"name":"validatorsThreshold","nameLocation":"5253:19:159","parameters":{"id":75608,"nodeType":"ParameterList","parameters":[],"src":"5272:2:159"},"returnParameters":{"id":75611,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75610,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75624,"src":"5296:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75609,"name":"uint256","nodeType":"ElementaryTypeName","src":"5296:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5295:9:159"},"scope":76908,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75640,"nodeType":"FunctionDefinition","src":"5454:157:159","nodes":[],"body":{"id":75639,"nodeType":"Block","src":"5511:100:159","nodes":[],"statements":[{"assignments":[75631],"declarations":[{"constant":false,"id":75631,"mutability":"mutable","name":"router","nameLocation":"5537:6:159","nodeType":"VariableDeclaration","scope":75639,"src":"5521:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75630,"nodeType":"UserDefinedTypeName","pathNode":{"id":75629,"name":"Storage","nameLocations":["5521:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"5521:7:159"},"referencedDeclaration":73472,"src":"5521:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75634,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75632,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"5546:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5546:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5521:38:159"},{"expression":{"expression":{"expression":{"id":75635,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75631,"src":"5576:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75636,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5583:14:159","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":73458,"src":"5576:21:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":75637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5598:6:159","memberName":"length","nodeType":"MemberAccess","src":"5576:28:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":75628,"id":75638,"nodeType":"Return","src":"5569:35:159"}]},"baseFunctions":[73663],"functionSelector":"ed612f8c","implemented":true,"kind":"function","modifiers":[],"name":"validatorsCount","nameLocation":"5463:15:159","parameters":{"id":75625,"nodeType":"ParameterList","parameters":[],"src":"5478:2:159"},"returnParameters":{"id":75628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75627,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75640,"src":"5502:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75626,"name":"uint256","nodeType":"ElementaryTypeName","src":"5502:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5501:9:159"},"scope":76908,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75659,"nodeType":"FunctionDefinition","src":"5617:171:159","nodes":[],"body":{"id":75658,"nodeType":"Block","src":"5688:100:159","nodes":[],"statements":[{"assignments":[75649],"declarations":[{"constant":false,"id":75649,"mutability":"mutable","name":"router","nameLocation":"5714:6:159","nodeType":"VariableDeclaration","scope":75658,"src":"5698:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75648,"nodeType":"UserDefinedTypeName","pathNode":{"id":75647,"name":"Storage","nameLocations":["5698:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"5698:7:159"},"referencedDeclaration":73472,"src":"5698:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75652,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75650,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"5723:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5723:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5698:38:159"},{"expression":{"baseExpression":{"expression":{"id":75653,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75649,"src":"5753:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75654,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5760:10:159","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":73455,"src":"5753:17:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":75656,"indexExpression":{"id":75655,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75642,"src":"5771:9:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5753:28:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":75646,"id":75657,"nodeType":"Return","src":"5746:35:159"}]},"baseFunctions":[73670],"functionSelector":"8febbd59","implemented":true,"kind":"function","modifiers":[],"name":"validatorExists","nameLocation":"5626:15:159","parameters":{"id":75643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75642,"mutability":"mutable","name":"validator","nameLocation":"5650:9:159","nodeType":"VariableDeclaration","scope":75659,"src":"5642:17:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75641,"name":"address","nodeType":"ElementaryTypeName","src":"5642:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5641:19:159"},"returnParameters":{"id":75646,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75645,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75659,"src":"5682:4:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75644,"name":"bool","nodeType":"ElementaryTypeName","src":"5682:4:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5681:6:159"},"scope":76908,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75675,"nodeType":"FunctionDefinition","src":"5794:154:159","nodes":[],"body":{"id":75674,"nodeType":"Block","src":"5855:93:159","nodes":[],"statements":[{"assignments":[75667],"declarations":[{"constant":false,"id":75667,"mutability":"mutable","name":"router","nameLocation":"5881:6:159","nodeType":"VariableDeclaration","scope":75674,"src":"5865:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75666,"nodeType":"UserDefinedTypeName","pathNode":{"id":75665,"name":"Storage","nameLocations":["5865:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"5865:7:159"},"referencedDeclaration":73472,"src":"5865:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75670,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75668,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"5890:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5890:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5865:38:159"},{"expression":{"expression":{"id":75671,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75667,"src":"5920:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75672,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5927:14:159","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":73458,"src":"5920:21:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"functionReturnParameters":75664,"id":75673,"nodeType":"Return","src":"5913:28:159"}]},"baseFunctions":[73676],"functionSelector":"ca1e7819","implemented":true,"kind":"function","modifiers":[],"name":"validators","nameLocation":"5803:10:159","parameters":{"id":75660,"nodeType":"ParameterList","parameters":[],"src":"5813:2:159"},"returnParameters":{"id":75664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75663,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75675,"src":"5837:16:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":75661,"name":"address","nodeType":"ElementaryTypeName","src":"5837:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75662,"nodeType":"ArrayTypeName","src":"5837:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5836:18:159"},"scope":76908,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75694,"nodeType":"FunctionDefinition","src":"6011:209:159","nodes":[],"body":{"id":75693,"nodeType":"Block","src":"6099:121:159","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75683,"name":"_cleanValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76839,"src":"6109:16:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":75684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6109:18:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75685,"nodeType":"ExpressionStatement","src":"6109:18:159"},{"expression":{"arguments":[{"id":75687,"name":"validatorsAddressArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75678,"src":"6152:22:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}],"id":75686,"name":"_setValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76894,"src":"6137:14:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory)"}},"id":75688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6137:38:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75689,"nodeType":"ExpressionStatement","src":"6137:38:159"},{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":75690,"name":"ValidatorsSetChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73564,"src":"6191:20:159","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":75691,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6191:22:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75692,"nodeType":"EmitStatement","src":"6186:27:159"}]},"baseFunctions":[73682],"functionSelector":"e71731e4","implemented":true,"kind":"function","modifiers":[{"id":75681,"kind":"modifierInvocation","modifierName":{"id":75680,"name":"onlyOwner","nameLocations":["6089:9:159"],"nodeType":"IdentifierPath","referencedDeclaration":39282,"src":"6089:9:159"},"nodeType":"ModifierInvocation","src":"6089:9:159"}],"name":"updateValidators","nameLocation":"6020:16:159","parameters":{"id":75679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75678,"mutability":"mutable","name":"validatorsAddressArray","nameLocation":"6056:22:159","nodeType":"VariableDeclaration","scope":75694,"src":"6037:41:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":75676,"name":"address","nodeType":"ElementaryTypeName","src":"6037:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75677,"nodeType":"ArrayTypeName","src":"6037:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"6036:43:159"},"returnParameters":{"id":75682,"nodeType":"ParameterList","parameters":[],"src":"6099:0:159"},"scope":76908,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75709,"nodeType":"FunctionDefinition","src":"6274:140:159","nodes":[],"body":{"id":75708,"nodeType":"Block","src":"6325:89:159","nodes":[],"statements":[{"assignments":[75701],"declarations":[{"constant":false,"id":75701,"mutability":"mutable","name":"router","nameLocation":"6351:6:159","nodeType":"VariableDeclaration","scope":75708,"src":"6335:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75700,"nodeType":"UserDefinedTypeName","pathNode":{"id":75699,"name":"Storage","nameLocations":["6335:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"6335:7:159"},"referencedDeclaration":73472,"src":"6335:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75704,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75702,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"6360:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6360:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6335:38:159"},{"expression":{"expression":{"id":75705,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75701,"src":"6390:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75706,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6397:10:159","memberName":"baseWeight","nodeType":"MemberAccess","referencedDeclaration":73449,"src":"6390:17:159","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":75698,"id":75707,"nodeType":"Return","src":"6383:24:159"}]},"baseFunctions":[73687],"functionSelector":"d3fd6364","implemented":true,"kind":"function","modifiers":[],"name":"baseWeight","nameLocation":"6283:10:159","parameters":{"id":75695,"nodeType":"ParameterList","parameters":[],"src":"6293:2:159"},"returnParameters":{"id":75698,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75697,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75709,"src":"6317:6:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":75696,"name":"uint64","nodeType":"ElementaryTypeName","src":"6317:6:159","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"6316:8:159"},"scope":76908,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75733,"nodeType":"FunctionDefinition","src":"6420:204:159","nodes":[],"body":{"id":75732,"nodeType":"Block","src":"6482:142:159","nodes":[],"statements":[{"assignments":[75718],"declarations":[{"constant":false,"id":75718,"mutability":"mutable","name":"router","nameLocation":"6508:6:159","nodeType":"VariableDeclaration","scope":75732,"src":"6492:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75717,"nodeType":"UserDefinedTypeName","pathNode":{"id":75716,"name":"Storage","nameLocations":["6492:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"6492:7:159"},"referencedDeclaration":73472,"src":"6492:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75721,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75719,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"6517:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6517:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6492:38:159"},{"expression":{"id":75726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75722,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75718,"src":"6540:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75724,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6547:10:159","memberName":"baseWeight","nodeType":"MemberAccess","referencedDeclaration":73449,"src":"6540:17:159","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75725,"name":"_baseWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75711,"src":"6560:11:159","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"6540:31:159","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":75727,"nodeType":"ExpressionStatement","src":"6540:31:159"},{"eventCall":{"arguments":[{"id":75729,"name":"_baseWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75711,"src":"6605:11:159","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":75728,"name":"BaseWeightChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73572,"src":"6587:17:159","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint64_$returns$__$","typeString":"function (uint64)"}},"id":75730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6587:30:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75731,"nodeType":"EmitStatement","src":"6582:35:159"}]},"baseFunctions":[73692],"functionSelector":"8028861a","implemented":true,"kind":"function","modifiers":[{"id":75714,"kind":"modifierInvocation","modifierName":{"id":75713,"name":"onlyOwner","nameLocations":["6472:9:159"],"nodeType":"IdentifierPath","referencedDeclaration":39282,"src":"6472:9:159"},"nodeType":"ModifierInvocation","src":"6472:9:159"}],"name":"setBaseWeight","nameLocation":"6429:13:159","parameters":{"id":75712,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75711,"mutability":"mutable","name":"_baseWeight","nameLocation":"6450:11:159","nodeType":"VariableDeclaration","scope":75733,"src":"6443:18:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":75710,"name":"uint64","nodeType":"ElementaryTypeName","src":"6443:6:159","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"6442:20:159"},"returnParameters":{"id":75715,"nodeType":"ParameterList","parameters":[],"src":"6482:0:159"},"scope":76908,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75748,"nodeType":"FunctionDefinition","src":"6630:149:159","nodes":[],"body":{"id":75747,"nodeType":"Block","src":"6686:93:159","nodes":[],"statements":[{"assignments":[75740],"declarations":[{"constant":false,"id":75740,"mutability":"mutable","name":"router","nameLocation":"6712:6:159","nodeType":"VariableDeclaration","scope":75747,"src":"6696:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75739,"nodeType":"UserDefinedTypeName","pathNode":{"id":75738,"name":"Storage","nameLocations":["6696:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"6696:7:159"},"referencedDeclaration":73472,"src":"6696:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75743,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75741,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"6721:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6721:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6696:38:159"},{"expression":{"expression":{"id":75744,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75740,"src":"6751:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75745,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6758:14:159","memberName":"valuePerWeight","nodeType":"MemberAccess","referencedDeclaration":73451,"src":"6751:21:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":75737,"id":75746,"nodeType":"Return","src":"6744:28:159"}]},"baseFunctions":[73697],"functionSelector":"0834fecc","implemented":true,"kind":"function","modifiers":[],"name":"valuePerWeight","nameLocation":"6639:14:159","parameters":{"id":75734,"nodeType":"ParameterList","parameters":[],"src":"6653:2:159"},"returnParameters":{"id":75737,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75736,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75748,"src":"6677:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75735,"name":"uint128","nodeType":"ElementaryTypeName","src":"6677:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"6676:9:159"},"scope":76908,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75772,"nodeType":"FunctionDefinition","src":"6785:229:159","nodes":[],"body":{"id":75771,"nodeType":"Block","src":"6856:158:159","nodes":[],"statements":[{"assignments":[75757],"declarations":[{"constant":false,"id":75757,"mutability":"mutable","name":"router","nameLocation":"6882:6:159","nodeType":"VariableDeclaration","scope":75771,"src":"6866:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75756,"nodeType":"UserDefinedTypeName","pathNode":{"id":75755,"name":"Storage","nameLocations":["6866:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"6866:7:159"},"referencedDeclaration":73472,"src":"6866:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75760,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75758,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"6891:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6891:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6866:38:159"},{"expression":{"id":75765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75761,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75757,"src":"6914:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75763,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6921:14:159","memberName":"valuePerWeight","nodeType":"MemberAccess","referencedDeclaration":73451,"src":"6914:21:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75764,"name":"_valuePerWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75750,"src":"6938:15:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"6914:39:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":75766,"nodeType":"ExpressionStatement","src":"6914:39:159"},{"eventCall":{"arguments":[{"id":75768,"name":"_valuePerWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75750,"src":"6991:15:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75767,"name":"ValuePerWeightChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73577,"src":"6969:21:159","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":75769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6969:38:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75770,"nodeType":"EmitStatement","src":"6964:43:159"}]},"baseFunctions":[73702],"functionSelector":"a6bbbe1c","implemented":true,"kind":"function","modifiers":[{"id":75753,"kind":"modifierInvocation","modifierName":{"id":75752,"name":"onlyOwner","nameLocations":["6846:9:159"],"nodeType":"IdentifierPath","referencedDeclaration":39282,"src":"6846:9:159"},"nodeType":"ModifierInvocation","src":"6846:9:159"}],"name":"setValuePerWeight","nameLocation":"6794:17:159","parameters":{"id":75751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75750,"mutability":"mutable","name":"_valuePerWeight","nameLocation":"6820:15:159","nodeType":"VariableDeclaration","scope":75772,"src":"6812:23:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75749,"name":"uint128","nodeType":"ElementaryTypeName","src":"6812:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"6811:25:159"},"returnParameters":{"id":75754,"nodeType":"ParameterList","parameters":[],"src":"6856:0:159"},"scope":76908,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75787,"nodeType":"FunctionDefinition","src":"7020:113:159","nodes":[],"body":{"id":75786,"nodeType":"Block","src":"7069:64:159","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":75784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":75779,"name":"baseWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75709,"src":"7094:10:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint64_$","typeString":"function () view returns (uint64)"}},"id":75780,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7094:12:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":75778,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7086:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":75777,"name":"uint128","nodeType":"ElementaryTypeName","src":"7086:7:159","typeDescriptions":{}}},"id":75781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7086:21:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":75782,"name":"valuePerWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75748,"src":"7110:14:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint128_$","typeString":"function () view returns (uint128)"}},"id":75783,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7110:16:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7086:40:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":75776,"id":75785,"nodeType":"Return","src":"7079:47:159"}]},"baseFunctions":[73707],"functionSelector":"6ef25c3a","implemented":true,"kind":"function","modifiers":[],"name":"baseFee","nameLocation":"7029:7:159","parameters":{"id":75773,"nodeType":"ParameterList","parameters":[],"src":"7036:2:159"},"returnParameters":{"id":75776,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75775,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75787,"src":"7060:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75774,"name":"uint128","nodeType":"ElementaryTypeName","src":"7060:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"7059:9:159"},"scope":76908,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75839,"nodeType":"FunctionDefinition","src":"7169:453:159","nodes":[],"body":{"id":75838,"nodeType":"Block","src":"7245:377:159","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75795,"name":"blobTxHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75791,"src":"7263:10:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":75796,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7277:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7263:15:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"hexValue":"30","id":75799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7291:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":75798,"name":"blobhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-29,"src":"7282:8:159","typeDescriptions":{"typeIdentifier":"t_function_blobhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":75800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7282:11:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":75801,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7297:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7282:16:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7263:35:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"626c6f6254784861736820636f756c646e277420626520666f756e64","id":75804,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7300:30:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_944fe86403884466c74284042289853a231d438ed298af2a81bff9b6914f84e1","typeString":"literal_string \"blobTxHash couldn't be found\""},"value":"blobTxHash couldn't be found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_944fe86403884466c74284042289853a231d438ed298af2a81bff9b6914f84e1","typeString":"literal_string \"blobTxHash couldn't be found\""}],"id":75794,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7255:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7255:76:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75806,"nodeType":"ExpressionStatement","src":"7255:76:159"},{"assignments":[75809],"declarations":[{"constant":false,"id":75809,"mutability":"mutable","name":"router","nameLocation":"7358:6:159","nodeType":"VariableDeclaration","scope":75838,"src":"7342:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75808,"nodeType":"UserDefinedTypeName","pathNode":{"id":75807,"name":"Storage","nameLocations":["7342:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"7342:7:159"},"referencedDeclaration":73472,"src":"7342:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75812,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75810,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"7367:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75811,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7367:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"7342:38:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$73476","typeString":"enum IRouter.CodeState"},"id":75820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":75814,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75809,"src":"7399:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75815,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7406:5:159","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":73463,"src":"7399:12:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$73476_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":75817,"indexExpression":{"id":75816,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75789,"src":"7412:6:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7399:20:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$73476","typeString":"enum IRouter.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":75818,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73476,"src":"7423:9:159","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$73476_$","typeString":"type(enum IRouter.CodeState)"}},"id":75819,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7433:7:159","memberName":"Unknown","nodeType":"MemberAccess","referencedDeclaration":73473,"src":"7423:17:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$73476","typeString":"enum IRouter.CodeState"}},"src":"7399:41:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f64652077697468207375636820696420616c726561647920726571756573746564206f722076616c696461746564","id":75821,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7442:50:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_86d0efc10a98e1b7506967b99e345a37d8ca52b6f212bb7eaafd6d43a903647b","typeString":"literal_string \"code with such id already requested or validated\""},"value":"code with such id already requested or validated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_86d0efc10a98e1b7506967b99e345a37d8ca52b6f212bb7eaafd6d43a903647b","typeString":"literal_string \"code with such id already requested or validated\""}],"id":75813,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7391:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7391:102:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75823,"nodeType":"ExpressionStatement","src":"7391:102:159"},{"expression":{"id":75831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":75824,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75809,"src":"7504:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75827,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7511:5:159","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":73463,"src":"7504:12:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$73476_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":75828,"indexExpression":{"id":75826,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75789,"src":"7517:6:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7504:20:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$73476","typeString":"enum IRouter.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":75829,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73476,"src":"7527:9:159","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$73476_$","typeString":"type(enum IRouter.CodeState)"}},"id":75830,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7537:19:159","memberName":"ValidationRequested","nodeType":"MemberAccess","referencedDeclaration":73474,"src":"7527:29:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$73476","typeString":"enum IRouter.CodeState"}},"src":"7504:52:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$73476","typeString":"enum IRouter.CodeState"}},"id":75832,"nodeType":"ExpressionStatement","src":"7504:52:159"},{"eventCall":{"arguments":[{"id":75834,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75789,"src":"7596:6:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75835,"name":"blobTxHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75791,"src":"7604:10:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":75833,"name":"CodeValidationRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73547,"src":"7572:23:159","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (bytes32,bytes32)"}},"id":75836,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7572:43:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75837,"nodeType":"EmitStatement","src":"7567:48:159"}]},"baseFunctions":[73714],"functionSelector":"1c149d8a","implemented":true,"kind":"function","modifiers":[],"name":"requestCodeValidation","nameLocation":"7178:21:159","parameters":{"id":75792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75789,"mutability":"mutable","name":"codeId","nameLocation":"7208:6:159","nodeType":"VariableDeclaration","scope":75839,"src":"7200:14:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75788,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7200:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":75791,"mutability":"mutable","name":"blobTxHash","nameLocation":"7224:10:159","nodeType":"VariableDeclaration","scope":75839,"src":"7216:18:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75790,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7216:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7199:36:159"},"returnParameters":{"id":75793,"nodeType":"ParameterList","parameters":[],"src":"7245:0:159"},"scope":76908,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75876,"nodeType":"FunctionDefinition","src":"7628:381:159","nodes":[],"body":{"id":75875,"nodeType":"Block","src":"7784:225:159","nodes":[],"statements":[{"assignments":[75853,75855],"declarations":[{"constant":false,"id":75853,"mutability":"mutable","name":"actorId","nameLocation":"7803:7:159","nodeType":"VariableDeclaration","scope":75875,"src":"7795:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75852,"name":"address","nodeType":"ElementaryTypeName","src":"7795:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75855,"mutability":"mutable","name":"executableBalance","nameLocation":"7820:17:159","nodeType":"VariableDeclaration","scope":75875,"src":"7812:25:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75854,"name":"uint128","nodeType":"ElementaryTypeName","src":"7812:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":75861,"initialValue":{"arguments":[{"id":75857,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75841,"src":"7870:6:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75858,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75843,"src":"7878:4:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75859,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75847,"src":"7884:6:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75856,"name":"_createProgramWithoutMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76204,"src":"7841:28:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint128_$returns$_t_address_$_t_uint128_$","typeString":"function (bytes32,bytes32,uint128) returns (address,uint128)"}},"id":75860,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7841:50:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint128_$","typeString":"tuple(address,uint128)"}},"nodeType":"VariableDeclarationStatement","src":"7794:97:159"},{"expression":{"arguments":[{"expression":{"id":75866,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"7931:2:159","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":75867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7934:6:159","memberName":"origin","nodeType":"MemberAccess","src":"7931:9:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75868,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75845,"src":"7942:7:159","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":75869,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75847,"src":"7951:6:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":75870,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75855,"src":"7959:17:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"id":75863,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75853,"src":"7910:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75862,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73387,"src":"7902:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$73387_$","typeString":"type(contract IMirror)"}},"id":75864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7902:16:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73387","typeString":"contract IMirror"}},"id":75865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7919:11:159","memberName":"initMessage","nodeType":"MemberAccess","referencedDeclaration":73386,"src":"7902:28:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (address,bytes memory,uint128,uint128) external"}},"id":75871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7902:75:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75872,"nodeType":"ExpressionStatement","src":"7902:75:159"},{"expression":{"id":75873,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75853,"src":"7995:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75851,"id":75874,"nodeType":"Return","src":"7988:14:159"}]},"baseFunctions":[73727],"functionSelector":"8074b455","implemented":true,"kind":"function","modifiers":[],"name":"createProgram","nameLocation":"7637:13:159","parameters":{"id":75848,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75841,"mutability":"mutable","name":"codeId","nameLocation":"7659:6:159","nodeType":"VariableDeclaration","scope":75876,"src":"7651:14:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75840,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7651:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":75843,"mutability":"mutable","name":"salt","nameLocation":"7675:4:159","nodeType":"VariableDeclaration","scope":75876,"src":"7667:12:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75842,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7667:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":75845,"mutability":"mutable","name":"payload","nameLocation":"7696:7:159","nodeType":"VariableDeclaration","scope":75876,"src":"7681:22:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":75844,"name":"bytes","nodeType":"ElementaryTypeName","src":"7681:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":75847,"mutability":"mutable","name":"_value","nameLocation":"7713:6:159","nodeType":"VariableDeclaration","scope":75876,"src":"7705:14:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75846,"name":"uint128","nodeType":"ElementaryTypeName","src":"7705:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"7650:70:159"},"returnParameters":{"id":75851,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75850,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75876,"src":"7771:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75849,"name":"address","nodeType":"ElementaryTypeName","src":"7771:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7770:9:159"},"scope":76908,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":75934,"nodeType":"FunctionDefinition","src":"8015:596:159","nodes":[],"body":{"id":75933,"nodeType":"Block","src":"8231:380:159","nodes":[],"statements":[{"assignments":[75892,75894],"declarations":[{"constant":false,"id":75892,"mutability":"mutable","name":"actorId","nameLocation":"8250:7:159","nodeType":"VariableDeclaration","scope":75933,"src":"8242:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75891,"name":"address","nodeType":"ElementaryTypeName","src":"8242:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75894,"mutability":"mutable","name":"executableBalance","nameLocation":"8267:17:159","nodeType":"VariableDeclaration","scope":75933,"src":"8259:25:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75893,"name":"uint128","nodeType":"ElementaryTypeName","src":"8259:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":75900,"initialValue":{"arguments":[{"id":75896,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75880,"src":"8317:6:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75897,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75882,"src":"8325:4:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75898,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75886,"src":"8331:6:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75895,"name":"_createProgramWithoutMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76204,"src":"8288:28:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint128_$returns$_t_address_$_t_uint128_$","typeString":"function (bytes32,bytes32,uint128) returns (address,uint128)"}},"id":75899,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8288:50:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint128_$","typeString":"tuple(address,uint128)"}},"nodeType":"VariableDeclarationStatement","src":"8241:97:159"},{"assignments":[75903],"declarations":[{"constant":false,"id":75903,"mutability":"mutable","name":"mirrorInstance","nameLocation":"8357:14:159","nodeType":"VariableDeclaration","scope":75933,"src":"8349:22:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73387","typeString":"contract IMirror"},"typeName":{"id":75902,"nodeType":"UserDefinedTypeName","pathNode":{"id":75901,"name":"IMirror","nameLocations":["8349:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73387,"src":"8349:7:159"},"referencedDeclaration":73387,"src":"8349:7:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73387","typeString":"contract IMirror"}},"visibility":"internal"}],"id":75907,"initialValue":{"arguments":[{"id":75905,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75892,"src":"8382:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75904,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73387,"src":"8374:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$73387_$","typeString":"type(contract IMirror)"}},"id":75906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8374:16:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73387","typeString":"contract IMirror"}},"nodeType":"VariableDeclarationStatement","src":"8349:41:159"},{"expression":{"arguments":[{"id":75911,"name":"decoderImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75878,"src":"8430:21:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":75915,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75880,"src":"8480:6:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75916,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75882,"src":"8488:4:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":75913,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8463:3:159","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":75914,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8467:12:159","memberName":"encodePacked","nodeType":"MemberAccess","src":"8463:16:159","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":75917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8463:30:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":75912,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8453:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":75918,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8453:41:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":75908,"name":"mirrorInstance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75903,"src":"8401:14:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73387","typeString":"contract IMirror"}},"id":75910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8416:13:159","memberName":"createDecoder","nodeType":"MemberAccess","referencedDeclaration":73375,"src":"8401:28:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes32_$returns$__$","typeString":"function (address,bytes32) external"}},"id":75919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8401:94:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75920,"nodeType":"ExpressionStatement","src":"8401:94:159"},{"expression":{"arguments":[{"expression":{"id":75924,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"8533:2:159","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":75925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8536:6:159","memberName":"origin","nodeType":"MemberAccess","src":"8533:9:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75926,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75884,"src":"8544:7:159","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":75927,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75886,"src":"8553:6:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":75928,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75894,"src":"8561:17:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":75921,"name":"mirrorInstance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75903,"src":"8506:14:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73387","typeString":"contract IMirror"}},"id":75923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8521:11:159","memberName":"initMessage","nodeType":"MemberAccess","referencedDeclaration":73386,"src":"8506:26:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (address,bytes memory,uint128,uint128) external"}},"id":75929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8506:73:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75930,"nodeType":"ExpressionStatement","src":"8506:73:159"},{"expression":{"id":75931,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75892,"src":"8597:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75890,"id":75932,"nodeType":"Return","src":"8590:14:159"}]},"baseFunctions":[73742],"functionSelector":"666d124c","implemented":true,"kind":"function","modifiers":[],"name":"createProgramWithDecoder","nameLocation":"8024:24:159","parameters":{"id":75887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75878,"mutability":"mutable","name":"decoderImplementation","nameLocation":"8066:21:159","nodeType":"VariableDeclaration","scope":75934,"src":"8058:29:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75877,"name":"address","nodeType":"ElementaryTypeName","src":"8058:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75880,"mutability":"mutable","name":"codeId","nameLocation":"8105:6:159","nodeType":"VariableDeclaration","scope":75934,"src":"8097:14:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75879,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8097:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":75882,"mutability":"mutable","name":"salt","nameLocation":"8129:4:159","nodeType":"VariableDeclaration","scope":75934,"src":"8121:12:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75881,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8121:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":75884,"mutability":"mutable","name":"payload","nameLocation":"8158:7:159","nodeType":"VariableDeclaration","scope":75934,"src":"8143:22:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":75883,"name":"bytes","nodeType":"ElementaryTypeName","src":"8143:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":75886,"mutability":"mutable","name":"_value","nameLocation":"8183:6:159","nodeType":"VariableDeclaration","scope":75934,"src":"8175:14:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75885,"name":"uint128","nodeType":"ElementaryTypeName","src":"8175:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"8048:147:159"},"returnParameters":{"id":75890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75889,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75934,"src":"8222:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75888,"name":"address","nodeType":"ElementaryTypeName","src":"8222:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8221:9:159"},"scope":76908,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":76047,"nodeType":"FunctionDefinition","src":"8617:1117:159","nodes":[],"body":{"id":76046,"nodeType":"Block","src":"8724:1010:159","nodes":[],"statements":[{"assignments":[75946],"declarations":[{"constant":false,"id":75946,"mutability":"mutable","name":"router","nameLocation":"8750:6:159","nodeType":"VariableDeclaration","scope":76046,"src":"8734:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75945,"nodeType":"UserDefinedTypeName","pathNode":{"id":75944,"name":"Storage","nameLocations":["8734:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"8734:7:159"},"referencedDeclaration":73472,"src":"8734:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75949,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75947,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"8759:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75948,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8759:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"8734:38:159"},{"assignments":[75951],"declarations":[{"constant":false,"id":75951,"mutability":"mutable","name":"codeCommetmentsHashes","nameLocation":"8796:21:159","nodeType":"VariableDeclaration","scope":76046,"src":"8783:34:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":75950,"name":"bytes","nodeType":"ElementaryTypeName","src":"8783:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":75952,"nodeType":"VariableDeclarationStatement","src":"8783:34:159"},{"body":{"id":76037,"nodeType":"Block","src":"8886:766:159","statements":[{"assignments":[75966],"declarations":[{"constant":false,"id":75966,"mutability":"mutable","name":"codeCommitment","nameLocation":"8924:14:159","nodeType":"VariableDeclaration","scope":76037,"src":"8900:38:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$73481_calldata_ptr","typeString":"struct IRouter.CodeCommitment"},"typeName":{"id":75965,"nodeType":"UserDefinedTypeName","pathNode":{"id":75964,"name":"CodeCommitment","nameLocations":["8900:14:159"],"nodeType":"IdentifierPath","referencedDeclaration":73481,"src":"8900:14:159"},"referencedDeclaration":73481,"src":"8900:14:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$73481_storage_ptr","typeString":"struct IRouter.CodeCommitment"}},"visibility":"internal"}],"id":75970,"initialValue":{"baseExpression":{"id":75967,"name":"codeCommitmentsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75938,"src":"8941:20:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$73481_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata[] calldata"}},"id":75969,"indexExpression":{"id":75968,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75954,"src":"8962:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8941:23:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$73481_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"8900:64:159"},{"assignments":[75972],"declarations":[{"constant":false,"id":75972,"mutability":"mutable","name":"codeCommitmentHash","nameLocation":"8987:18:159","nodeType":"VariableDeclaration","scope":76037,"src":"8979:26:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75971,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8979:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":75976,"initialValue":{"arguments":[{"id":75974,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75966,"src":"9028:14:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$73481_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_CodeCommitment_$73481_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}],"id":75973,"name":"_codeCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76765,"src":"9008:19:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_CodeCommitment_$73481_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.CodeCommitment calldata) pure returns (bytes32)"}},"id":75975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9008:35:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"8979:64:159"},{"expression":{"id":75984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":75977,"name":"codeCommetmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75951,"src":"9058:21:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":75981,"name":"codeCommetmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75951,"src":"9095:21:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":75982,"name":"codeCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75972,"src":"9118:18:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":75979,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9082:5:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":75978,"name":"bytes","nodeType":"ElementaryTypeName","src":"9082:5:159","typeDescriptions":{}}},"id":75980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9088:6:159","memberName":"concat","nodeType":"MemberAccess","src":"9082:12:159","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":75983,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9082:55:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"9058:79:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":75985,"nodeType":"ExpressionStatement","src":"9058:79:159"},{"assignments":[75987],"declarations":[{"constant":false,"id":75987,"mutability":"mutable","name":"codeId","nameLocation":"9160:6:159","nodeType":"VariableDeclaration","scope":76037,"src":"9152:14:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75986,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9152:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":75990,"initialValue":{"expression":{"id":75988,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75966,"src":"9169:14:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$73481_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"id":75989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9184:2:159","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":73478,"src":"9169:17:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"9152:34:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$73476","typeString":"enum IRouter.CodeState"},"id":75998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":75992,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75946,"src":"9208:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75993,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9215:5:159","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":73463,"src":"9208:12:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$73476_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":75995,"indexExpression":{"id":75994,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75987,"src":"9221:6:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9208:20:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$73476","typeString":"enum IRouter.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":75996,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73476,"src":"9232:9:159","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$73476_$","typeString":"type(enum IRouter.CodeState)"}},"id":75997,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9242:19:159","memberName":"ValidationRequested","nodeType":"MemberAccess","referencedDeclaration":73474,"src":"9232:29:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$73476","typeString":"enum IRouter.CodeState"}},"src":"9208:53:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f64652073686f756c642062652072657175657374656420666f722076616c69646174696f6e","id":75999,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9263:41:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_9f0f0146c5c6578abd878317fc7dbe7872a552fba3ce3a30a1e42dfd172e27f7","typeString":"literal_string \"code should be requested for validation\""},"value":"code should be requested for validation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9f0f0146c5c6578abd878317fc7dbe7872a552fba3ce3a30a1e42dfd172e27f7","typeString":"literal_string \"code should be requested for validation\""}],"id":75991,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"9200:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9200:105:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76001,"nodeType":"ExpressionStatement","src":"9200:105:159"},{"condition":{"expression":{"id":76002,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75966,"src":"9324:14:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$73481_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"id":76003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9339:5:159","memberName":"valid","nodeType":"MemberAccess","referencedDeclaration":73480,"src":"9324:20:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":76035,"nodeType":"Block","src":"9527:115:159","statements":[{"expression":{"id":76028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"9545:27:159","subExpression":{"baseExpression":{"expression":{"id":76024,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75946,"src":"9552:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76025,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9559:5:159","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":73463,"src":"9552:12:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$73476_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":76027,"indexExpression":{"id":76026,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75987,"src":"9565:6:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9552:20:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$73476","typeString":"enum IRouter.CodeState"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76029,"nodeType":"ExpressionStatement","src":"9545:27:159"},{"eventCall":{"arguments":[{"id":76031,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75987,"src":"9613:6:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"66616c7365","id":76032,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9621:5:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":76030,"name":"CodeGotValidated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73554,"src":"9596:16:159","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bool_$returns$__$","typeString":"function (bytes32,bool)"}},"id":76033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9596:31:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76034,"nodeType":"EmitStatement","src":"9591:36:159"}]},"id":76036,"nodeType":"IfStatement","src":"9320:322:159","trueBody":{"id":76023,"nodeType":"Block","src":"9346:175:159","statements":[{"expression":{"id":76011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":76004,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75946,"src":"9364:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76007,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9371:5:159","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":73463,"src":"9364:12:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$73476_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":76008,"indexExpression":{"id":76006,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75987,"src":"9377:6:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9364:20:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$73476","typeString":"enum IRouter.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":76009,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73476,"src":"9387:9:159","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$73476_$","typeString":"type(enum IRouter.CodeState)"}},"id":76010,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9397:9:159","memberName":"Validated","nodeType":"MemberAccess","referencedDeclaration":73475,"src":"9387:19:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$73476","typeString":"enum IRouter.CodeState"}},"src":"9364:42:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$73476","typeString":"enum IRouter.CodeState"}},"id":76012,"nodeType":"ExpressionStatement","src":"9364:42:159"},{"expression":{"id":76016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"9424:28:159","subExpression":{"expression":{"id":76013,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75946,"src":"9424:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76015,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"9431:19:159","memberName":"validatedCodesCount","nodeType":"MemberAccess","referencedDeclaration":73465,"src":"9424:26:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76017,"nodeType":"ExpressionStatement","src":"9424:28:159"},{"eventCall":{"arguments":[{"id":76019,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75987,"src":"9493:6:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"74727565","id":76020,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9501:4:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":76018,"name":"CodeGotValidated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73554,"src":"9476:16:159","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bool_$returns$__$","typeString":"function (bytes32,bool)"}},"id":76021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9476:30:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76022,"nodeType":"EmitStatement","src":"9471:35:159"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75957,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75954,"src":"8848:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":75958,"name":"codeCommitmentsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75938,"src":"8852:20:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$73481_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata[] calldata"}},"id":75959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8873:6:159","memberName":"length","nodeType":"MemberAccess","src":"8852:27:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8848:31:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76038,"initializationExpression":{"assignments":[75954],"declarations":[{"constant":false,"id":75954,"mutability":"mutable","name":"i","nameLocation":"8841:1:159","nodeType":"VariableDeclaration","scope":76038,"src":"8833:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75953,"name":"uint256","nodeType":"ElementaryTypeName","src":"8833:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75956,"initialValue":{"hexValue":"30","id":75955,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8845:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8833:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":75962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8881:3:159","subExpression":{"id":75961,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75954,"src":"8881:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":75963,"nodeType":"ExpressionStatement","src":"8881:3:159"},"nodeType":"ForStatement","src":"8828:824:159"},{"expression":{"arguments":[{"arguments":[{"id":76041,"name":"codeCommetmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75951,"src":"9692:21:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76040,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"9682:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9682:32:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":76043,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75941,"src":"9716:10:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}],"id":76039,"name":"_validateSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76293,"src":"9662:19:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$returns$__$","typeString":"function (bytes32,bytes calldata[] calldata) view"}},"id":76044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9662:65:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76045,"nodeType":"ExpressionStatement","src":"9662:65:159"}]},"baseFunctions":[73752],"functionSelector":"e97d3eb3","implemented":true,"kind":"function","modifiers":[],"name":"commitCodes","nameLocation":"8626:11:159","parameters":{"id":75942,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75938,"mutability":"mutable","name":"codeCommitmentsArray","nameLocation":"8664:20:159","nodeType":"VariableDeclaration","scope":76047,"src":"8638:46:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$73481_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.CodeCommitment[]"},"typeName":{"baseType":{"id":75936,"nodeType":"UserDefinedTypeName","pathNode":{"id":75935,"name":"CodeCommitment","nameLocations":["8638:14:159"],"nodeType":"IdentifierPath","referencedDeclaration":73481,"src":"8638:14:159"},"referencedDeclaration":73481,"src":"8638:14:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$73481_storage_ptr","typeString":"struct IRouter.CodeCommitment"}},"id":75937,"nodeType":"ArrayTypeName","src":"8638:16:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$73481_storage_$dyn_storage_ptr","typeString":"struct IRouter.CodeCommitment[]"}},"visibility":"internal"},{"constant":false,"id":75941,"mutability":"mutable","name":"signatures","nameLocation":"8703:10:159","nodeType":"VariableDeclaration","scope":76047,"src":"8686:27:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":75939,"name":"bytes","nodeType":"ElementaryTypeName","src":"8686:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":75940,"nodeType":"ArrayTypeName","src":"8686:7:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"8637:77:159"},"returnParameters":{"id":75943,"nodeType":"ParameterList","parameters":[],"src":"8724:0:159"},"scope":76908,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":76105,"nodeType":"FunctionDefinition","src":"9740:604:159","nodes":[],"body":{"id":76104,"nodeType":"Block","src":"9883:461:159","nodes":[],"statements":[{"assignments":[76060],"declarations":[{"constant":false,"id":76060,"mutability":"mutable","name":"blockCommitmentsHashes","nameLocation":"9906:22:159","nodeType":"VariableDeclaration","scope":76104,"src":"9893:35:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":76059,"name":"bytes","nodeType":"ElementaryTypeName","src":"9893:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":76061,"nodeType":"VariableDeclarationStatement","src":"9893:35:159"},{"body":{"id":76095,"nodeType":"Block","src":"9998:263:159","statements":[{"assignments":[76075],"declarations":[{"constant":false,"id":76075,"mutability":"mutable","name":"blockCommitment","nameLocation":"10037:15:159","nodeType":"VariableDeclaration","scope":76095,"src":"10012:40:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$73494_calldata_ptr","typeString":"struct IRouter.BlockCommitment"},"typeName":{"id":76074,"nodeType":"UserDefinedTypeName","pathNode":{"id":76073,"name":"BlockCommitment","nameLocations":["10012:15:159"],"nodeType":"IdentifierPath","referencedDeclaration":73494,"src":"10012:15:159"},"referencedDeclaration":73494,"src":"10012:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$73494_storage_ptr","typeString":"struct IRouter.BlockCommitment"}},"visibility":"internal"}],"id":76079,"initialValue":{"baseExpression":{"id":76076,"name":"blockCommitmentsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76051,"src":"10055:21:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$73494_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata[] calldata"}},"id":76078,"indexExpression":{"id":76077,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76063,"src":"10077:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10055:24:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$73494_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"10012:67:159"},{"assignments":[76081],"declarations":[{"constant":false,"id":76081,"mutability":"mutable","name":"blockCommitmentHash","nameLocation":"10102:19:159","nodeType":"VariableDeclaration","scope":76095,"src":"10094:27:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76080,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10094:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":76085,"initialValue":{"arguments":[{"id":76083,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76075,"src":"10137:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$73494_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_BlockCommitment_$73494_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}],"id":76082,"name":"_commitBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76398,"src":"10124:12:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_BlockCommitment_$73494_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.BlockCommitment calldata) returns (bytes32)"}},"id":76084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10124:29:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"10094:59:159"},{"expression":{"id":76093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":76086,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76060,"src":"10168:22:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":76090,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76060,"src":"10206:22:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":76091,"name":"blockCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76081,"src":"10230:19:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76088,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10193:5:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":76087,"name":"bytes","nodeType":"ElementaryTypeName","src":"10193:5:159","typeDescriptions":{}}},"id":76089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10199:6:159","memberName":"concat","nodeType":"MemberAccess","src":"10193:12:159","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10193:57:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"10168:82:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":76094,"nodeType":"ExpressionStatement","src":"10168:82:159"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76066,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76063,"src":"9959:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":76067,"name":"blockCommitmentsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76051,"src":"9963:21:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$73494_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata[] calldata"}},"id":76068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9985:6:159","memberName":"length","nodeType":"MemberAccess","src":"9963:28:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9959:32:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76096,"initializationExpression":{"assignments":[76063],"declarations":[{"constant":false,"id":76063,"mutability":"mutable","name":"i","nameLocation":"9952:1:159","nodeType":"VariableDeclaration","scope":76096,"src":"9944:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76062,"name":"uint256","nodeType":"ElementaryTypeName","src":"9944:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76065,"initialValue":{"hexValue":"30","id":76064,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9956:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9944:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":76071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"9993:3:159","subExpression":{"id":76070,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76063,"src":"9993:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76072,"nodeType":"ExpressionStatement","src":"9993:3:159"},"nodeType":"ForStatement","src":"9939:322:159"},{"expression":{"arguments":[{"arguments":[{"id":76099,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76060,"src":"10301:22:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76098,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"10291:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10291:33:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":76101,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76054,"src":"10326:10:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}],"id":76097,"name":"_validateSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76293,"src":"10271:19:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$returns$__$","typeString":"function (bytes32,bytes calldata[] calldata) view"}},"id":76102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10271:66:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76103,"nodeType":"ExpressionStatement","src":"10271:66:159"}]},"baseFunctions":[73762],"functionSelector":"01b1d156","implemented":true,"kind":"function","modifiers":[{"id":76057,"kind":"modifierInvocation","modifierName":{"id":76056,"name":"nonReentrant","nameLocations":["9866:12:159"],"nodeType":"IdentifierPath","referencedDeclaration":44000,"src":"9866:12:159"},"nodeType":"ModifierInvocation","src":"9866:12:159"}],"name":"commitBlocks","nameLocation":"9749:12:159","parameters":{"id":76055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76051,"mutability":"mutable","name":"blockCommitmentsArray","nameLocation":"9789:21:159","nodeType":"VariableDeclaration","scope":76105,"src":"9762:48:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$73494_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.BlockCommitment[]"},"typeName":{"baseType":{"id":76049,"nodeType":"UserDefinedTypeName","pathNode":{"id":76048,"name":"BlockCommitment","nameLocations":["9762:15:159"],"nodeType":"IdentifierPath","referencedDeclaration":73494,"src":"9762:15:159"},"referencedDeclaration":73494,"src":"9762:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$73494_storage_ptr","typeString":"struct IRouter.BlockCommitment"}},"id":76050,"nodeType":"ArrayTypeName","src":"9762:17:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$73494_storage_$dyn_storage_ptr","typeString":"struct IRouter.BlockCommitment[]"}},"visibility":"internal"},{"constant":false,"id":76054,"mutability":"mutable","name":"signatures","nameLocation":"9829:10:159","nodeType":"VariableDeclaration","scope":76105,"src":"9812:27:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":76052,"name":"bytes","nodeType":"ElementaryTypeName","src":"9812:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":76053,"nodeType":"ArrayTypeName","src":"9812:7:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"9761:79:159"},"returnParameters":{"id":76058,"nodeType":"ParameterList","parameters":[],"src":"9883:0:159"},"scope":76908,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":76204,"nodeType":"FunctionDefinition","src":"10386:1054:159","nodes":[],"body":{"id":76203,"nodeType":"Block","src":"10525:915:159","nodes":[],"statements":[{"assignments":[76120],"declarations":[{"constant":false,"id":76120,"mutability":"mutable","name":"router","nameLocation":"10551:6:159","nodeType":"VariableDeclaration","scope":76203,"src":"10535:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76119,"nodeType":"UserDefinedTypeName","pathNode":{"id":76118,"name":"Storage","nameLocations":["10535:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"10535:7:159"},"referencedDeclaration":73472,"src":"10535:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":76123,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":76121,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"10560:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":76122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10560:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"10535:38:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$73476","typeString":"enum IRouter.CodeState"},"id":76131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":76125,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76120,"src":"10592:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76126,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10599:5:159","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":73463,"src":"10592:12:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$73476_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":76128,"indexExpression":{"id":76127,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76107,"src":"10605:6:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10592:20:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$73476","typeString":"enum IRouter.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":76129,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73476,"src":"10616:9:159","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$73476_$","typeString":"type(enum IRouter.CodeState)"}},"id":76130,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10626:9:159","memberName":"Validated","nodeType":"MemberAccess","referencedDeclaration":73475,"src":"10616:19:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$73476","typeString":"enum IRouter.CodeState"}},"src":"10592:43:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f6465206d7573742062652076616c696461746564206265666f72652070726f6772616d206372656174696f6e","id":76132,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10637:48:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_b5148f5f8f63c81848fb75aafb9815f0b7600419fddac60bd483eec7cf08a631","typeString":"literal_string \"code must be validated before program creation\""},"value":"code must be validated before program creation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b5148f5f8f63c81848fb75aafb9815f0b7600419fddac60bd483eec7cf08a631","typeString":"literal_string \"code must be validated before program creation\""}],"id":76124,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"10584:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10584:102:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76134,"nodeType":"ExpressionStatement","src":"10584:102:159"},{"assignments":[76136],"declarations":[{"constant":false,"id":76136,"mutability":"mutable","name":"baseFeeValue","nameLocation":"10705:12:159","nodeType":"VariableDeclaration","scope":76203,"src":"10697:20:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":76135,"name":"uint128","nodeType":"ElementaryTypeName","src":"10697:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":76139,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":76137,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75787,"src":"10720:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint128_$","typeString":"function () view returns (uint128)"}},"id":76138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10720:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"10697:32:159"},{"assignments":[76141],"declarations":[{"constant":false,"id":76141,"mutability":"mutable","name":"executableBalance","nameLocation":"10807:17:159","nodeType":"VariableDeclaration","scope":76203,"src":"10799:25:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":76140,"name":"uint128","nodeType":"ElementaryTypeName","src":"10799:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":76153,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":76144,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10835:2:159","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":76146,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76120,"src":"10856:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76147,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10863:11:159","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":73441,"src":"10856:18:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":76145,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43166,"src":"10841:14:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Metadata_$43166_$","typeString":"type(contract IERC20Metadata)"}},"id":76148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10841:34:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$43166","typeString":"contract IERC20Metadata"}},"id":76149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10876:8:159","memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":43165,"src":"10841:43:159","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":76150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10841:45:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"10835:51:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":76143,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10827:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":76142,"name":"uint128","nodeType":"ElementaryTypeName","src":"10827:7:159","typeDescriptions":{}}},"id":76152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10827:60:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"10799:88:159"},{"assignments":[76155],"declarations":[{"constant":false,"id":76155,"mutability":"mutable","name":"totalValue","nameLocation":"10906:10:159","nodeType":"VariableDeclaration","scope":76203,"src":"10898:18:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":76154,"name":"uint128","nodeType":"ElementaryTypeName","src":"10898:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":76161,"initialValue":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":76160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":76158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76156,"name":"baseFeeValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76136,"src":"10919:12:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":76157,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76141,"src":"10934:17:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"10919:32:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":76159,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76111,"src":"10954:6:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"10919:41:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"10898:62:159"},{"expression":{"arguments":[{"id":76163,"name":"totalValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76155,"src":"10986:10:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":76162,"name":"_retrieveValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76798,"src":"10971:14:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":76164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10971:26:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76165,"nodeType":"ExpressionStatement","src":"10971:26:159"},{"assignments":[76167],"declarations":[{"constant":false,"id":76167,"mutability":"mutable","name":"actorId","nameLocation":"11166:7:159","nodeType":"VariableDeclaration","scope":76203,"src":"11158:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76166,"name":"address","nodeType":"ElementaryTypeName","src":"11158:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":76180,"initialValue":{"arguments":[{"expression":{"id":76170,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76120,"src":"11202:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76171,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11209:11:159","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":73439,"src":"11202:18:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":76175,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76107,"src":"11249:6:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":76176,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76109,"src":"11257:4:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76173,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"11232:3:159","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":76174,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11236:12:159","memberName":"encodePacked","nodeType":"MemberAccess","src":"11232:16:159","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11232:30:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76172,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"11222:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11222:41:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76168,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41840,"src":"11176:6:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Clones_$41840_$","typeString":"type(library Clones)"}},"id":76169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11183:18:159","memberName":"cloneDeterministic","nodeType":"MemberAccess","referencedDeclaration":41758,"src":"11176:25:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$","typeString":"function (address,bytes32) returns (address)"}},"id":76179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11176:88:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"11158:106:159"},{"expression":{"id":76187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":76181,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76120,"src":"11275:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76184,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11282:8:159","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":73469,"src":"11275:15:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":76185,"indexExpression":{"id":76183,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76167,"src":"11291:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11275:24:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":76186,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76107,"src":"11302:6:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11275:33:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":76188,"nodeType":"ExpressionStatement","src":"11275:33:159"},{"expression":{"id":76192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"11318:22:159","subExpression":{"expression":{"id":76189,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76120,"src":"11318:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76191,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11325:13:159","memberName":"programsCount","nodeType":"MemberAccess","referencedDeclaration":73471,"src":"11318:20:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76193,"nodeType":"ExpressionStatement","src":"11318:22:159"},{"eventCall":{"arguments":[{"id":76195,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76167,"src":"11371:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":76196,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76107,"src":"11380:6:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":76194,"name":"ProgramCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73561,"src":"11356:14:159","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bytes32_$returns$__$","typeString":"function (address,bytes32)"}},"id":76197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11356:31:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76198,"nodeType":"EmitStatement","src":"11351:36:159"},{"expression":{"components":[{"id":76199,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76167,"src":"11406:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":76200,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76141,"src":"11415:17:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"id":76201,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11405:28:159","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint128_$","typeString":"tuple(address,uint128)"}},"functionReturnParameters":76117,"id":76202,"nodeType":"Return","src":"11398:35:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_createProgramWithoutMessage","nameLocation":"10395:28:159","parameters":{"id":76112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76107,"mutability":"mutable","name":"codeId","nameLocation":"10432:6:159","nodeType":"VariableDeclaration","scope":76204,"src":"10424:14:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76106,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10424:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":76109,"mutability":"mutable","name":"salt","nameLocation":"10448:4:159","nodeType":"VariableDeclaration","scope":76204,"src":"10440:12:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76108,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10440:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":76111,"mutability":"mutable","name":"_value","nameLocation":"10462:6:159","nodeType":"VariableDeclaration","scope":76204,"src":"10454:14:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":76110,"name":"uint128","nodeType":"ElementaryTypeName","src":"10454:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"10423:46:159"},"returnParameters":{"id":76117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76114,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76204,"src":"10503:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76113,"name":"address","nodeType":"ElementaryTypeName","src":"10503:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":76116,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76204,"src":"10512:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":76115,"name":"uint128","nodeType":"ElementaryTypeName","src":"10512:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"10502:18:159"},"scope":76908,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76293,"nodeType":"FunctionDefinition","src":"11446:844:159","nodes":[],"body":{"id":76292,"nodeType":"Block","src":"11535:755:159","nodes":[],"statements":[{"assignments":[76214],"declarations":[{"constant":false,"id":76214,"mutability":"mutable","name":"router","nameLocation":"11561:6:159","nodeType":"VariableDeclaration","scope":76292,"src":"11545:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76213,"nodeType":"UserDefinedTypeName","pathNode":{"id":76212,"name":"Storage","nameLocations":["11545:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"11545:7:159"},"referencedDeclaration":73472,"src":"11545:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":76217,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":76215,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"11570:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":76216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11570:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"11545:38:159"},{"assignments":[76219],"declarations":[{"constant":false,"id":76219,"mutability":"mutable","name":"threshold","nameLocation":"11602:9:159","nodeType":"VariableDeclaration","scope":76292,"src":"11594:17:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76218,"name":"uint256","nodeType":"ElementaryTypeName","src":"11594:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76222,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":76220,"name":"validatorsThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75624,"src":"11614:19:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":76221,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11614:21:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11594:41:159"},{"assignments":[76224],"declarations":[{"constant":false,"id":76224,"mutability":"mutable","name":"messageHash","nameLocation":"11654:11:159","nodeType":"VariableDeclaration","scope":76292,"src":"11646:19:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76223,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11646:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":76235,"initialValue":{"arguments":[{"arguments":[{"id":76232,"name":"dataHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76206,"src":"11731:8:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76230,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"11714:3:159","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":76231,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11718:12:159","memberName":"encodePacked","nodeType":"MemberAccess","src":"11714:16:159","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11714:26:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":76227,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11676:4:159","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$76908","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$76908","typeString":"contract Router"}],"id":76226,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11668:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":76225,"name":"address","nodeType":"ElementaryTypeName","src":"11668:7:159","typeDescriptions":{}}},"id":76228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11668:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":76229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11682:31:159","memberName":"toDataWithIntendedValidatorHash","nodeType":"MemberAccess","referencedDeclaration":45537,"src":"11668:45:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes32_$attached_to$_t_address_$","typeString":"function (address,bytes memory) pure returns (bytes32)"}},"id":76234,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11668:73:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"11646:95:159"},{"assignments":[76237],"declarations":[{"constant":false,"id":76237,"mutability":"mutable","name":"validSignatures","nameLocation":"11759:15:159","nodeType":"VariableDeclaration","scope":76292,"src":"11751:23:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76236,"name":"uint256","nodeType":"ElementaryTypeName","src":"11751:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76239,"initialValue":{"hexValue":"30","id":76238,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11777:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11751:27:159"},{"body":{"id":76283,"nodeType":"Block","src":"11837:368:159","statements":[{"assignments":[76252],"declarations":[{"constant":false,"id":76252,"mutability":"mutable","name":"signature","nameLocation":"11866:9:159","nodeType":"VariableDeclaration","scope":76283,"src":"11851:24:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":76251,"name":"bytes","nodeType":"ElementaryTypeName","src":"11851:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":76256,"initialValue":{"baseExpression":{"id":76253,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76209,"src":"11878:10:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},"id":76255,"indexExpression":{"id":76254,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76241,"src":"11889:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11878:13:159","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"nodeType":"VariableDeclarationStatement","src":"11851:40:159"},{"assignments":[76258],"declarations":[{"constant":false,"id":76258,"mutability":"mutable","name":"validator","nameLocation":"11914:9:159","nodeType":"VariableDeclaration","scope":76283,"src":"11906:17:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76257,"name":"address","nodeType":"ElementaryTypeName","src":"11906:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":76263,"initialValue":{"arguments":[{"id":76261,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76252,"src":"11946:9:159","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":76259,"name":"messageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76224,"src":"11926:11:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":76260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11938:7:159","memberName":"recover","nodeType":"MemberAccess","referencedDeclaration":45005,"src":"11926:19:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bytes memory) pure returns (address)"}},"id":76262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11926:30:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"11906:50:159"},{"condition":{"baseExpression":{"expression":{"id":76264,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76214,"src":"11975:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76265,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11982:10:159","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":73455,"src":"11975:17:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":76267,"indexExpression":{"id":76266,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76258,"src":"11993:9:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11975:28:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":76281,"nodeType":"Block","src":"12125:70:159","statements":[{"expression":{"arguments":[{"hexValue":"66616c7365","id":76277,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12151:5:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"696e636f7272656374207369676e6174757265","id":76278,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12158:21:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_641ab7289dc6df3dff0edafbede614b21294e2bb9f09800443d88f57818afe8f","typeString":"literal_string \"incorrect signature\""},"value":"incorrect signature"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_641ab7289dc6df3dff0edafbede614b21294e2bb9f09800443d88f57818afe8f","typeString":"literal_string \"incorrect signature\""}],"id":76276,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"12143:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12143:37:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76280,"nodeType":"ExpressionStatement","src":"12143:37:159"}]},"id":76282,"nodeType":"IfStatement","src":"11971:224:159","trueBody":{"id":76275,"nodeType":"Block","src":"12005:114:159","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"12027:17:159","subExpression":{"id":76268,"name":"validSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76237,"src":"12029:15:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":76270,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76219,"src":"12048:9:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12027:30:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76274,"nodeType":"IfStatement","src":"12023:82:159","trueBody":{"id":76273,"nodeType":"Block","src":"12059:46:159","statements":[{"id":76272,"nodeType":"Break","src":"12081:5:159"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76244,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76241,"src":"11809:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":76245,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76209,"src":"11813:10:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},"id":76246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11824:6:159","memberName":"length","nodeType":"MemberAccess","src":"11813:17:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11809:21:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76284,"initializationExpression":{"assignments":[76241],"declarations":[{"constant":false,"id":76241,"mutability":"mutable","name":"i","nameLocation":"11802:1:159","nodeType":"VariableDeclaration","scope":76284,"src":"11794:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76240,"name":"uint256","nodeType":"ElementaryTypeName","src":"11794:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76243,"initialValue":{"hexValue":"30","id":76242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11806:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11794:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":76249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"11832:3:159","subExpression":{"id":76248,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76241,"src":"11832:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76250,"nodeType":"ExpressionStatement","src":"11832:3:159"},"nodeType":"ForStatement","src":"11789:416:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76286,"name":"validSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76237,"src":"12223:15:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":76287,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76219,"src":"12242:9:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12223:28:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6e6f7420656e6f7567682076616c6964207369676e617475726573","id":76289,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12253:29:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_8852ba723d98bcf316aab69f38fb5da08e0bfb912ef589b19218c396aac3c0bc","typeString":"literal_string \"not enough valid signatures\""},"value":"not enough valid signatures"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8852ba723d98bcf316aab69f38fb5da08e0bfb912ef589b19218c396aac3c0bc","typeString":"literal_string \"not enough valid signatures\""}],"id":76285,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"12215:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12215:68:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76291,"nodeType":"ExpressionStatement","src":"12215:68:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_validateSignatures","nameLocation":"11455:19:159","parameters":{"id":76210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76206,"mutability":"mutable","name":"dataHash","nameLocation":"11483:8:159","nodeType":"VariableDeclaration","scope":76293,"src":"11475:16:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76205,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11475:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":76209,"mutability":"mutable","name":"signatures","nameLocation":"11510:10:159","nodeType":"VariableDeclaration","scope":76293,"src":"11493:27:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":76207,"name":"bytes","nodeType":"ElementaryTypeName","src":"11493:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":76208,"nodeType":"ArrayTypeName","src":"11493:7:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"11474:47:159"},"returnParameters":{"id":76211,"nodeType":"ParameterList","parameters":[],"src":"11535:0:159"},"scope":76908,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":76398,"nodeType":"FunctionDefinition","src":"12296:1366:159","nodes":[],"body":{"id":76397,"nodeType":"Block","src":"12386:1276:159","nodes":[],"statements":[{"assignments":[76303],"declarations":[{"constant":false,"id":76303,"mutability":"mutable","name":"router","nameLocation":"12412:6:159","nodeType":"VariableDeclaration","scope":76397,"src":"12396:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76302,"nodeType":"UserDefinedTypeName","pathNode":{"id":76301,"name":"Storage","nameLocations":["12396:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"12396:7:159"},"referencedDeclaration":73472,"src":"12396:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":76306,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":76304,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"12421:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":76305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12421:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"12396:38:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":76312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":76308,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76303,"src":"12466:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76309,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12473:23:159","memberName":"lastBlockCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":73443,"src":"12466:30:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":76310,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76296,"src":"12500:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$73494_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":76311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12516:18:159","memberName":"prevCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":73487,"src":"12500:34:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12466:68:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e76616c69642070726576696f757320636f6d6d69746d656e742068617368","id":76313,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12536:34:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_fef95c9e1944529fb91083689c978504d88f59fdb02e6fd241a073fa572e7d3e","typeString":"literal_string \"invalid previous commitment hash\""},"value":"invalid previous commitment hash"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fef95c9e1944529fb91083689c978504d88f59fdb02e6fd241a073fa572e7d3e","typeString":"literal_string \"invalid previous commitment hash\""}],"id":76307,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"12445:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12445:135:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76315,"nodeType":"ExpressionStatement","src":"12445:135:159"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":76318,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76296,"src":"12617:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$73494_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":76319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12633:13:159","memberName":"predBlockHash","nodeType":"MemberAccess","referencedDeclaration":73489,"src":"12617:29:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":76317,"name":"_isPredecessorHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76442,"src":"12598:18:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32) view returns (bool)"}},"id":76320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12598:49:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"616c6c6f776564207072656465636573736f7220626c6f636b206e6f7420666f756e64","id":76321,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12649:37:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_7d09fbc5a1c193a0826cadcc2903c8170aac2d31f22b53e69a64923153c8207e","typeString":"literal_string \"allowed predecessor block not found\""},"value":"allowed predecessor block not found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7d09fbc5a1c193a0826cadcc2903c8170aac2d31f22b53e69a64923153c8207e","typeString":"literal_string \"allowed predecessor block not found\""}],"id":76316,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"12590:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12590:97:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76323,"nodeType":"ExpressionStatement","src":"12590:97:159"},{"expression":{"id":76329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":76324,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76303,"src":"12827:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76326,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"12834:23:159","memberName":"lastBlockCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":73443,"src":"12827:30:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":76327,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76296,"src":"12860:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$73494_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":76328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12876:9:159","memberName":"blockHash","nodeType":"MemberAccess","referencedDeclaration":73483,"src":"12860:25:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12827:58:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":76330,"nodeType":"ExpressionStatement","src":"12827:58:159"},{"expression":{"id":76336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":76331,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76303,"src":"12895:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76333,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"12902:28:159","memberName":"lastBlockCommitmentTimestamp","nodeType":"MemberAccess","referencedDeclaration":73445,"src":"12895:35:159","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":76334,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76296,"src":"12933:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$73494_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":76335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12949:14:159","memberName":"blockTimestamp","nodeType":"MemberAccess","referencedDeclaration":73485,"src":"12933:30:159","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"12895:68:159","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":76337,"nodeType":"ExpressionStatement","src":"12895:68:159"},{"assignments":[76339],"declarations":[{"constant":false,"id":76339,"mutability":"mutable","name":"transitionsHashes","nameLocation":"12987:17:159","nodeType":"VariableDeclaration","scope":76397,"src":"12974:30:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":76338,"name":"bytes","nodeType":"ElementaryTypeName","src":"12974:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":76340,"nodeType":"VariableDeclarationStatement","src":"12974:30:159"},{"body":{"id":76376,"nodeType":"Block","src":"13080:255:159","statements":[{"assignments":[76355],"declarations":[{"constant":false,"id":76355,"mutability":"mutable","name":"stateTransition","nameLocation":"13119:15:159","nodeType":"VariableDeclaration","scope":76376,"src":"13094:40:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$73511_calldata_ptr","typeString":"struct IRouter.StateTransition"},"typeName":{"id":76354,"nodeType":"UserDefinedTypeName","pathNode":{"id":76353,"name":"StateTransition","nameLocations":["13094:15:159"],"nodeType":"IdentifierPath","referencedDeclaration":73511,"src":"13094:15:159"},"referencedDeclaration":73511,"src":"13094:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$73511_storage_ptr","typeString":"struct IRouter.StateTransition"}},"visibility":"internal"}],"id":76360,"initialValue":{"baseExpression":{"expression":{"id":76356,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76296,"src":"13137:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$73494_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":76357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13153:11:159","memberName":"transitions","nodeType":"MemberAccess","referencedDeclaration":73493,"src":"13137:27:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$73511_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.StateTransition calldata[] calldata"}},"id":76359,"indexExpression":{"id":76358,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76342,"src":"13165:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13137:30:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$73511_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"nodeType":"VariableDeclarationStatement","src":"13094:73:159"},{"assignments":[76362],"declarations":[{"constant":false,"id":76362,"mutability":"mutable","name":"transitionHash","nameLocation":"13190:14:159","nodeType":"VariableDeclaration","scope":76376,"src":"13182:22:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76361,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13182:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":76366,"initialValue":{"arguments":[{"id":76364,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76355,"src":"13226:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$73511_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_StateTransition_$73511_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}],"id":76363,"name":"_doStateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76660,"src":"13207:18:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_StateTransition_$73511_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.StateTransition calldata) returns (bytes32)"}},"id":76365,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13207:35:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"13182:60:159"},{"expression":{"id":76374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":76367,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76339,"src":"13257:17:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":76371,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76339,"src":"13290:17:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":76372,"name":"transitionHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76362,"src":"13309:14:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76369,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13277:5:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":76368,"name":"bytes","nodeType":"ElementaryTypeName","src":"13277:5:159","typeDescriptions":{}}},"id":76370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13283:6:159","memberName":"concat","nodeType":"MemberAccess","src":"13277:12:159","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13277:47:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"13257:67:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":76375,"nodeType":"ExpressionStatement","src":"13257:67:159"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76345,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76342,"src":"13035:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":76346,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76296,"src":"13039:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$73494_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":76347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13055:11:159","memberName":"transitions","nodeType":"MemberAccess","referencedDeclaration":73493,"src":"13039:27:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$73511_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.StateTransition calldata[] calldata"}},"id":76348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13067:6:159","memberName":"length","nodeType":"MemberAccess","src":"13039:34:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13035:38:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76377,"initializationExpression":{"assignments":[76342],"declarations":[{"constant":false,"id":76342,"mutability":"mutable","name":"i","nameLocation":"13028:1:159","nodeType":"VariableDeclaration","scope":76377,"src":"13020:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76341,"name":"uint256","nodeType":"ElementaryTypeName","src":"13020:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76344,"initialValue":{"hexValue":"30","id":76343,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13032:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13020:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":76351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"13075:3:159","subExpression":{"id":76350,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76342,"src":"13075:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76352,"nodeType":"ExpressionStatement","src":"13075:3:159"},"nodeType":"ForStatement","src":"13015:320:159"},{"eventCall":{"arguments":[{"expression":{"id":76379,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76296,"src":"13365:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$73494_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":76380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13381:9:159","memberName":"blockHash","nodeType":"MemberAccess","referencedDeclaration":73483,"src":"13365:25:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":76378,"name":"BlockCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73540,"src":"13350:14:159","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":76381,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13350:41:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76382,"nodeType":"EmitStatement","src":"13345:46:159"},{"expression":{"arguments":[{"expression":{"id":76384,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76296,"src":"13443:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$73494_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":76385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13459:9:159","memberName":"blockHash","nodeType":"MemberAccess","referencedDeclaration":73483,"src":"13443:25:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76386,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76296,"src":"13482:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$73494_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":76387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13498:14:159","memberName":"blockTimestamp","nodeType":"MemberAccess","referencedDeclaration":73485,"src":"13482:30:159","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"expression":{"id":76388,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76296,"src":"13526:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$73494_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":76389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13542:18:159","memberName":"prevCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":73487,"src":"13526:34:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76390,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76296,"src":"13574:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$73494_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":76391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13590:13:159","memberName":"predBlockHash","nodeType":"MemberAccess","referencedDeclaration":73489,"src":"13574:29:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":76393,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76339,"src":"13627:17:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76392,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"13617:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13617:28:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":76383,"name":"_blockCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76687,"src":"13409:20:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint48_$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint48,bytes32,bytes32,bytes32) pure returns (bytes32)"}},"id":76395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13409:246:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":76300,"id":76396,"nodeType":"Return","src":"13402:253:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_commitBlock","nameLocation":"12305:12:159","parameters":{"id":76297,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76296,"mutability":"mutable","name":"blockCommitment","nameLocation":"12343:15:159","nodeType":"VariableDeclaration","scope":76398,"src":"12318:40:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$73494_calldata_ptr","typeString":"struct IRouter.BlockCommitment"},"typeName":{"id":76295,"nodeType":"UserDefinedTypeName","pathNode":{"id":76294,"name":"BlockCommitment","nameLocations":["12318:15:159"],"nodeType":"IdentifierPath","referencedDeclaration":73494,"src":"12318:15:159"},"referencedDeclaration":73494,"src":"12318:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$73494_storage_ptr","typeString":"struct IRouter.BlockCommitment"}},"visibility":"internal"}],"src":"12317:42:159"},"returnParameters":{"id":76300,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76299,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76398,"src":"12377:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76298,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12377:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"12376:9:159"},"scope":76908,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76442,"nodeType":"FunctionDefinition","src":"13668:338:159","nodes":[],"body":{"id":76441,"nodeType":"Block","src":"13738:268:159","nodes":[],"statements":[{"body":{"id":76437,"nodeType":"Block","src":"13795:183:159","statements":[{"assignments":[76419],"declarations":[{"constant":false,"id":76419,"mutability":"mutable","name":"ret","nameLocation":"13817:3:159","nodeType":"VariableDeclaration","scope":76437,"src":"13809:11:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76418,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13809:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":76423,"initialValue":{"arguments":[{"id":76421,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76406,"src":"13833:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":76420,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"13823:9:159","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":76422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13823:12:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"13809:26:159"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":76426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76424,"name":"ret","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76419,"src":"13853:3:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":76425,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76400,"src":"13860:4:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"13853:11:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":76432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76430,"name":"ret","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76419,"src":"13920:3:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":76431,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13927:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13920:8:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76435,"nodeType":"IfStatement","src":"13916:52:159","trueBody":{"id":76434,"nodeType":"Block","src":"13930:38:159","statements":[{"id":76433,"nodeType":"Break","src":"13948:5:159"}]}},"id":76436,"nodeType":"IfStatement","src":"13849:119:159","trueBody":{"id":76429,"nodeType":"Block","src":"13866:44:159","statements":[{"expression":{"hexValue":"74727565","id":76427,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"13891:4:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":76404,"id":76428,"nodeType":"Return","src":"13884:11:159"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76412,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76406,"src":"13783:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":76413,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13787:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13783:5:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76438,"initializationExpression":{"assignments":[76406],"declarations":[{"constant":false,"id":76406,"mutability":"mutable","name":"i","nameLocation":"13761:1:159","nodeType":"VariableDeclaration","scope":76438,"src":"13753:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76405,"name":"uint256","nodeType":"ElementaryTypeName","src":"13753:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76411,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":76407,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"13765:5:159","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":76408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13771:6:159","memberName":"number","nodeType":"MemberAccess","src":"13765:12:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":76409,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13780:1:159","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"13765:16:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13753:28:159"},"isSimpleCounterLoop":false,"loopExpression":{"expression":{"id":76416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":false,"src":"13790:3:159","subExpression":{"id":76415,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76406,"src":"13790:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76417,"nodeType":"ExpressionStatement","src":"13790:3:159"},"nodeType":"ForStatement","src":"13748:230:159"},{"expression":{"hexValue":"66616c7365","id":76439,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"13994:5:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":76404,"id":76440,"nodeType":"Return","src":"13987:12:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_isPredecessorHash","nameLocation":"13677:18:159","parameters":{"id":76401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76400,"mutability":"mutable","name":"hash","nameLocation":"13704:4:159","nodeType":"VariableDeclaration","scope":76442,"src":"13696:12:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76399,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13696:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"13695:14:159"},"returnParameters":{"id":76404,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76403,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76442,"src":"13732:4:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":76402,"name":"bool","nodeType":"ElementaryTypeName","src":"13732:4:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13731:6:159"},"scope":76908,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":76660,"nodeType":"FunctionDefinition","src":"14012:2340:159","nodes":[],"body":{"id":76659,"nodeType":"Block","src":"14108:2244:159","nodes":[],"statements":[{"assignments":[76452],"declarations":[{"constant":false,"id":76452,"mutability":"mutable","name":"router","nameLocation":"14134:6:159","nodeType":"VariableDeclaration","scope":76659,"src":"14118:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76451,"nodeType":"UserDefinedTypeName","pathNode":{"id":76450,"name":"Storage","nameLocations":["14118:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"14118:7:159"},"referencedDeclaration":73472,"src":"14118:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":76455,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":76453,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"14143:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":76454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14143:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"14118:38:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":76463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":76457,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76452,"src":"14175:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76458,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14182:8:159","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":73469,"src":"14175:15:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":76461,"indexExpression":{"expression":{"id":76459,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76445,"src":"14191:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$73511_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":76460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14207:7:159","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":73496,"src":"14191:23:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14175:40:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":76462,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14219:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14175:45:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f756c646e277420706572666f726d207472616e736974696f6e20666f7220756e6b6e6f776e2070726f6772616d","id":76464,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14222:49:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_31c5a066db04c91ff8a121d71b24335cd54a57cfe01a7cdd47f234348f1a72d6","typeString":"literal_string \"couldn't perform transition for unknown program\""},"value":"couldn't perform transition for unknown program"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_31c5a066db04c91ff8a121d71b24335cd54a57cfe01a7cdd47f234348f1a72d6","typeString":"literal_string \"couldn't perform transition for unknown program\""}],"id":76456,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"14167:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14167:105:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76466,"nodeType":"ExpressionStatement","src":"14167:105:159"},{"assignments":[76469],"declarations":[{"constant":false,"id":76469,"mutability":"mutable","name":"wrappedVaraActor","nameLocation":"14296:16:159","nodeType":"VariableDeclaration","scope":76659,"src":"14283:29:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73774","typeString":"contract IWrappedVara"},"typeName":{"id":76468,"nodeType":"UserDefinedTypeName","pathNode":{"id":76467,"name":"IWrappedVara","nameLocations":["14283:12:159"],"nodeType":"IdentifierPath","referencedDeclaration":73774,"src":"14283:12:159"},"referencedDeclaration":73774,"src":"14283:12:159","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73774","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"id":76474,"initialValue":{"arguments":[{"expression":{"id":76471,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76452,"src":"14328:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76472,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14335:11:159","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":73441,"src":"14328:18:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":76470,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73774,"src":"14315:12:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$73774_$","typeString":"type(contract IWrappedVara)"}},"id":76473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14315:32:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73774","typeString":"contract IWrappedVara"}},"nodeType":"VariableDeclarationStatement","src":"14283:64:159"},{"expression":{"arguments":[{"expression":{"id":76478,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76445,"src":"14383:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$73511_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":76479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14399:7:159","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":73496,"src":"14383:23:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76480,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76445,"src":"14408:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$73511_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":76481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14424:14:159","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":73502,"src":"14408:30:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":76475,"name":"wrappedVaraActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76469,"src":"14357:16:159","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73774","typeString":"contract IWrappedVara"}},"id":76477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14374:8:159","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":43107,"src":"14357:25:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":76482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14357:82:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76483,"nodeType":"ExpressionStatement","src":"14357:82:159"},{"assignments":[76486],"declarations":[{"constant":false,"id":76486,"mutability":"mutable","name":"mirrorActor","nameLocation":"14458:11:159","nodeType":"VariableDeclaration","scope":76659,"src":"14450:19:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73387","typeString":"contract IMirror"},"typeName":{"id":76485,"nodeType":"UserDefinedTypeName","pathNode":{"id":76484,"name":"IMirror","nameLocations":["14450:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73387,"src":"14450:7:159"},"referencedDeclaration":73387,"src":"14450:7:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73387","typeString":"contract IMirror"}},"visibility":"internal"}],"id":76491,"initialValue":{"arguments":[{"expression":{"id":76488,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76445,"src":"14480:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$73511_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":76489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14496:7:159","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":73496,"src":"14480:23:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":76487,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73387,"src":"14472:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$73387_$","typeString":"type(contract IMirror)"}},"id":76490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14472:32:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73387","typeString":"contract IMirror"}},"nodeType":"VariableDeclarationStatement","src":"14450:54:159"},{"assignments":[76493],"declarations":[{"constant":false,"id":76493,"mutability":"mutable","name":"valueClaimsBytes","nameLocation":"14528:16:159","nodeType":"VariableDeclaration","scope":76659,"src":"14515:29:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":76492,"name":"bytes","nodeType":"ElementaryTypeName","src":"14515:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":76494,"nodeType":"VariableDeclarationStatement","src":"14515:29:159"},{"body":{"id":76543,"nodeType":"Block","src":"14620:367:159","statements":[{"assignments":[76509],"declarations":[{"constant":false,"id":76509,"mutability":"mutable","name":"valueClaim","nameLocation":"14654:10:159","nodeType":"VariableDeclaration","scope":76543,"src":"14634:30:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$73518_calldata_ptr","typeString":"struct IRouter.ValueClaim"},"typeName":{"id":76508,"nodeType":"UserDefinedTypeName","pathNode":{"id":76507,"name":"ValueClaim","nameLocations":["14634:10:159"],"nodeType":"IdentifierPath","referencedDeclaration":73518,"src":"14634:10:159"},"referencedDeclaration":73518,"src":"14634:10:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$73518_storage_ptr","typeString":"struct IRouter.ValueClaim"}},"visibility":"internal"}],"id":76514,"initialValue":{"baseExpression":{"expression":{"id":76510,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76445,"src":"14667:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$73511_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":76511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14683:11:159","memberName":"valueClaims","nodeType":"MemberAccess","referencedDeclaration":73506,"src":"14667:27:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$73518_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata[] calldata"}},"id":76513,"indexExpression":{"id":76512,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76496,"src":"14695:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14667:30:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$73518_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"nodeType":"VariableDeclarationStatement","src":"14634:63:159"},{"expression":{"id":76530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":76515,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76493,"src":"14712:16:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":76519,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76493,"src":"14761:16:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"expression":{"id":76522,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76509,"src":"14796:10:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$73518_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":76523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14807:9:159","memberName":"messageId","nodeType":"MemberAccess","referencedDeclaration":73513,"src":"14796:20:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76524,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76509,"src":"14818:10:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$73518_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":76525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14829:11:159","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":73515,"src":"14818:22:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76526,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76509,"src":"14842:10:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$73518_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":76527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14853:5:159","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":73517,"src":"14842:16:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":76520,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"14779:3:159","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":76521,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14783:12:159","memberName":"encodePacked","nodeType":"MemberAccess","src":"14779:16:159","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14779:80:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":76517,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14731:5:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":76516,"name":"bytes","nodeType":"ElementaryTypeName","src":"14731:5:159","typeDescriptions":{}}},"id":76518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14737:6:159","memberName":"concat","nodeType":"MemberAccess","src":"14731:12:159","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14731:142:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"14712:161:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":76531,"nodeType":"ExpressionStatement","src":"14712:161:159"},{"expression":{"arguments":[{"expression":{"id":76535,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76509,"src":"14913:10:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$73518_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":76536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14924:9:159","memberName":"messageId","nodeType":"MemberAccess","referencedDeclaration":73513,"src":"14913:20:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76537,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76509,"src":"14935:10:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$73518_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":76538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14946:11:159","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":73515,"src":"14935:22:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76539,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76509,"src":"14959:10:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$73518_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":76540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14970:5:159","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":73517,"src":"14959:16:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":76532,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76486,"src":"14888:11:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73387","typeString":"contract IMirror"}},"id":76534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14900:12:159","memberName":"valueClaimed","nodeType":"MemberAccess","referencedDeclaration":73368,"src":"14888:24:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,uint128) external"}},"id":76541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14888:88:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76542,"nodeType":"ExpressionStatement","src":"14888:88:159"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76499,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76496,"src":"14575:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":76500,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76445,"src":"14579:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$73511_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":76501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14595:11:159","memberName":"valueClaims","nodeType":"MemberAccess","referencedDeclaration":73506,"src":"14579:27:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$73518_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata[] calldata"}},"id":76502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14607:6:159","memberName":"length","nodeType":"MemberAccess","src":"14579:34:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14575:38:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76544,"initializationExpression":{"assignments":[76496],"declarations":[{"constant":false,"id":76496,"mutability":"mutable","name":"i","nameLocation":"14568:1:159","nodeType":"VariableDeclaration","scope":76544,"src":"14560:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76495,"name":"uint256","nodeType":"ElementaryTypeName","src":"14560:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76498,"initialValue":{"hexValue":"30","id":76497,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14572:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"14560:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":76505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"14615:3:159","subExpression":{"id":76504,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76496,"src":"14615:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76506,"nodeType":"ExpressionStatement","src":"14615:3:159"},"nodeType":"ForStatement","src":"14555:432:159"},{"assignments":[76546],"declarations":[{"constant":false,"id":76546,"mutability":"mutable","name":"messagesHashes","nameLocation":"15010:14:159","nodeType":"VariableDeclaration","scope":76659,"src":"14997:27:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":76545,"name":"bytes","nodeType":"ElementaryTypeName","src":"14997:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":76547,"nodeType":"VariableDeclarationStatement","src":"14997:27:159"},{"body":{"id":76617,"nodeType":"Block","src":"15097:764:159","statements":[{"assignments":[76562],"declarations":[{"constant":false,"id":76562,"mutability":"mutable","name":"outgoingMessage","nameLocation":"15136:15:159","nodeType":"VariableDeclaration","scope":76617,"src":"15111:40:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$73530_calldata_ptr","typeString":"struct IRouter.OutgoingMessage"},"typeName":{"id":76561,"nodeType":"UserDefinedTypeName","pathNode":{"id":76560,"name":"OutgoingMessage","nameLocations":["15111:15:159"],"nodeType":"IdentifierPath","referencedDeclaration":73530,"src":"15111:15:159"},"referencedDeclaration":73530,"src":"15111:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$73530_storage_ptr","typeString":"struct IRouter.OutgoingMessage"}},"visibility":"internal"}],"id":76567,"initialValue":{"baseExpression":{"expression":{"id":76563,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76445,"src":"15154:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$73511_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":76564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15170:8:159","memberName":"messages","nodeType":"MemberAccess","referencedDeclaration":73510,"src":"15154:24:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutgoingMessage_$73530_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata[] calldata"}},"id":76566,"indexExpression":{"id":76565,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76549,"src":"15179:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15154:27:159","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$73530_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"nodeType":"VariableDeclarationStatement","src":"15111:70:159"},{"expression":{"id":76577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":76568,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76546,"src":"15196:14:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":76572,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76546,"src":"15226:14:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":76574,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76562,"src":"15263:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$73530_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_OutgoingMessage_$73530_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}],"id":76573,"name":"_outgoingMessageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76746,"src":"15242:20:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_OutgoingMessage_$73530_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.OutgoingMessage calldata) pure returns (bytes32)"}},"id":76575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15242:37:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76570,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15213:5:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":76569,"name":"bytes","nodeType":"ElementaryTypeName","src":"15213:5:159","typeDescriptions":{}}},"id":76571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15219:6:159","memberName":"concat","nodeType":"MemberAccess","src":"15213:12:159","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76576,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15213:67:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"15196:84:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":76578,"nodeType":"ExpressionStatement","src":"15196:84:159"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":76583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":76579,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76562,"src":"15299:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$73530_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":76580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15315:12:159","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":73529,"src":"15299:28:159","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$73535_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":76581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15328:2:159","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":73532,"src":"15299:31:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":76582,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15334:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"15299:36:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":76615,"nodeType":"Block","src":"15534:317:159","statements":[{"expression":{"arguments":[{"expression":{"id":76601,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76562,"src":"15595:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$73530_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":76602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15611:11:159","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":73522,"src":"15595:27:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76603,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76562,"src":"15644:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$73530_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":76604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15660:7:159","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":73524,"src":"15644:23:159","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":76605,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76562,"src":"15689:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$73530_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":76606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15705:5:159","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":73526,"src":"15689:21:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"expression":{"id":76607,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76562,"src":"15732:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$73530_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":76608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15748:12:159","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":73529,"src":"15732:28:159","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$73535_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":76609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15761:2:159","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":73532,"src":"15732:31:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"expression":{"id":76610,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76562,"src":"15785:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$73530_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":76611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15801:12:159","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":73529,"src":"15785:28:159","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$73535_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":76612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15814:4:159","memberName":"code","nodeType":"MemberAccess","referencedDeclaration":73534,"src":"15785:33:159","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":76598,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76486,"src":"15552:11:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73387","typeString":"contract IMirror"}},"id":76600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15564:9:159","memberName":"replySent","nodeType":"MemberAccess","referencedDeclaration":73359,"src":"15552:21:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function (address,bytes memory,uint128,bytes32,bytes4) external"}},"id":76613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15552:284:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76614,"nodeType":"ExpressionStatement","src":"15552:284:159"}]},"id":76616,"nodeType":"IfStatement","src":"15295:556:159","trueBody":{"id":76597,"nodeType":"Block","src":"15337:191:159","statements":[{"expression":{"arguments":[{"expression":{"id":76587,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76562,"src":"15400:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$73530_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":76588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15416:2:159","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":73520,"src":"15400:18:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76589,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76562,"src":"15420:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$73530_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":76590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15436:11:159","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":73522,"src":"15420:27:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76591,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76562,"src":"15449:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$73530_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":76592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15465:7:159","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":73524,"src":"15449:23:159","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":76593,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76562,"src":"15474:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$73530_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":76594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15490:5:159","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":73526,"src":"15474:21:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":76584,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76486,"src":"15355:11:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73387","typeString":"contract IMirror"}},"id":76586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15367:11:159","memberName":"messageSent","nodeType":"MemberAccess","referencedDeclaration":73346,"src":"15355:23:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128) external"}},"id":76595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15355:158:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76596,"nodeType":"ExpressionStatement","src":"15355:158:159"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76552,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76549,"src":"15055:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":76553,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76445,"src":"15059:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$73511_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":76554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15075:8:159","memberName":"messages","nodeType":"MemberAccess","referencedDeclaration":73510,"src":"15059:24:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutgoingMessage_$73530_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata[] calldata"}},"id":76555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15084:6:159","memberName":"length","nodeType":"MemberAccess","src":"15059:31:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15055:35:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76618,"initializationExpression":{"assignments":[76549],"declarations":[{"constant":false,"id":76549,"mutability":"mutable","name":"i","nameLocation":"15048:1:159","nodeType":"VariableDeclaration","scope":76618,"src":"15040:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76548,"name":"uint256","nodeType":"ElementaryTypeName","src":"15040:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76551,"initialValue":{"hexValue":"30","id":76550,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15052:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15040:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":76558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"15092:3:159","subExpression":{"id":76557,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76549,"src":"15092:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76559,"nodeType":"ExpressionStatement","src":"15092:3:159"},"nodeType":"ForStatement","src":"15035:826:159"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":76625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":76619,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76445,"src":"15875:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$73511_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":76620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15891:9:159","memberName":"inheritor","nodeType":"MemberAccess","referencedDeclaration":73500,"src":"15875:25:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":76623,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15912:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":76622,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15904:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":76621,"name":"address","nodeType":"ElementaryTypeName","src":"15904:7:159","typeDescriptions":{}}},"id":76624,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15904:10:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"15875:39:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76634,"nodeType":"IfStatement","src":"15871:121:159","trueBody":{"id":76633,"nodeType":"Block","src":"15916:76:159","statements":[{"expression":{"arguments":[{"expression":{"id":76629,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76445,"src":"15955:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$73511_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":76630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15971:9:159","memberName":"inheritor","nodeType":"MemberAccess","referencedDeclaration":73500,"src":"15955:25:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":76626,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76486,"src":"15930:11:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73387","typeString":"contract IMirror"}},"id":76628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15942:12:159","memberName":"setInheritor","nodeType":"MemberAccess","referencedDeclaration":73335,"src":"15930:24:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":76631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15930:51:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76632,"nodeType":"ExpressionStatement","src":"15930:51:159"}]}},{"expression":{"arguments":[{"expression":{"id":76638,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76445,"src":"16026:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$73511_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":76639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16042:12:159","memberName":"newStateHash","nodeType":"MemberAccess","referencedDeclaration":73498,"src":"16026:28:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76635,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76486,"src":"16002:11:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73387","typeString":"contract IMirror"}},"id":76637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16014:11:159","memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":73330,"src":"16002:23:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32) external"}},"id":76640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16002:53:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76641,"nodeType":"ExpressionStatement","src":"16002:53:159"},{"expression":{"arguments":[{"expression":{"id":76643,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76445,"src":"16107:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$73511_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":76644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16123:7:159","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":73496,"src":"16107:23:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76645,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76445,"src":"16144:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$73511_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":76646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16160:12:159","memberName":"newStateHash","nodeType":"MemberAccess","referencedDeclaration":73498,"src":"16144:28:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76647,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76445,"src":"16186:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$73511_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":76648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16202:9:159","memberName":"inheritor","nodeType":"MemberAccess","referencedDeclaration":73500,"src":"16186:25:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76649,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76445,"src":"16225:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$73511_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":76650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16241:14:159","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":73502,"src":"16225:30:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"arguments":[{"id":76652,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76493,"src":"16279:16:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76651,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"16269:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16269:27:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":76655,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76546,"src":"16320:14:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76654,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"16310:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76656,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16310:25:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":76642,"name":"_stateTransitionHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76717,"src":"16073:20:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_bytes32_$_t_address_$_t_uint128_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (address,bytes32,address,uint128,bytes32,bytes32) pure returns (bytes32)"}},"id":76657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16073:272:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":76449,"id":76658,"nodeType":"Return","src":"16066:279:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_doStateTransition","nameLocation":"14021:18:159","parameters":{"id":76446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76445,"mutability":"mutable","name":"stateTransition","nameLocation":"14065:15:159","nodeType":"VariableDeclaration","scope":76660,"src":"14040:40:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$73511_calldata_ptr","typeString":"struct IRouter.StateTransition"},"typeName":{"id":76444,"nodeType":"UserDefinedTypeName","pathNode":{"id":76443,"name":"StateTransition","nameLocations":["14040:15:159"],"nodeType":"IdentifierPath","referencedDeclaration":73511,"src":"14040:15:159"},"referencedDeclaration":73511,"src":"14040:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$73511_storage_ptr","typeString":"struct IRouter.StateTransition"}},"visibility":"internal"}],"src":"14039:42:159"},"returnParameters":{"id":76449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76448,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76660,"src":"14099:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76447,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14099:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"14098:9:159"},"scope":76908,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76687,"nodeType":"FunctionDefinition","src":"16358:389:159","nodes":[],"body":{"id":76686,"nodeType":"Block","src":"16589:158:159","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":76678,"name":"blockHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76662,"src":"16646:9:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":76679,"name":"blockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76664,"src":"16657:14:159","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"id":76680,"name":"prevCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76666,"src":"16673:18:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":76681,"name":"predBlockHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76668,"src":"16693:13:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":76682,"name":"transitionsHashesHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76670,"src":"16708:21:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76676,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"16629:3:159","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":76677,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16633:12:159","memberName":"encodePacked","nodeType":"MemberAccess","src":"16629:16:159","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16629:101:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76675,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"16606:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16606:134:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":76674,"id":76685,"nodeType":"Return","src":"16599:141:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_blockCommitmentHash","nameLocation":"16367:20:159","parameters":{"id":76671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76662,"mutability":"mutable","name":"blockHash","nameLocation":"16405:9:159","nodeType":"VariableDeclaration","scope":76687,"src":"16397:17:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76661,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16397:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":76664,"mutability":"mutable","name":"blockTimestamp","nameLocation":"16431:14:159","nodeType":"VariableDeclaration","scope":76687,"src":"16424:21:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":76663,"name":"uint48","nodeType":"ElementaryTypeName","src":"16424:6:159","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"},{"constant":false,"id":76666,"mutability":"mutable","name":"prevCommitmentHash","nameLocation":"16463:18:159","nodeType":"VariableDeclaration","scope":76687,"src":"16455:26:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76665,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16455:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":76668,"mutability":"mutable","name":"predBlockHash","nameLocation":"16499:13:159","nodeType":"VariableDeclaration","scope":76687,"src":"16491:21:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76667,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16491:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":76670,"mutability":"mutable","name":"transitionsHashesHash","nameLocation":"16530:21:159","nodeType":"VariableDeclaration","scope":76687,"src":"16522:29:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76669,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16522:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"16387:170:159"},"returnParameters":{"id":76674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76673,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76687,"src":"16580:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76672,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16580:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"16579:9:159"},"scope":76908,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":76717,"nodeType":"FunctionDefinition","src":"16753:410:159","nodes":[],"body":{"id":76716,"nodeType":"Block","src":"17003:160:159","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":76707,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76689,"src":"17060:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":76708,"name":"newStateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76691,"src":"17069:12:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":76709,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76693,"src":"17083:9:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":76710,"name":"valueToReceive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76695,"src":"17094:14:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":76711,"name":"valueClaimsHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76697,"src":"17110:15:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":76712,"name":"messagesHashesHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76699,"src":"17127:18:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76705,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"17043:3:159","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":76706,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17047:12:159","memberName":"encodePacked","nodeType":"MemberAccess","src":"17043:16:159","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17043:103:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76704,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"17020:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17020:136:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":76703,"id":76715,"nodeType":"Return","src":"17013:143:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_stateTransitionHash","nameLocation":"16762:20:159","parameters":{"id":76700,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76689,"mutability":"mutable","name":"actorId","nameLocation":"16800:7:159","nodeType":"VariableDeclaration","scope":76717,"src":"16792:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76688,"name":"address","nodeType":"ElementaryTypeName","src":"16792:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":76691,"mutability":"mutable","name":"newStateHash","nameLocation":"16825:12:159","nodeType":"VariableDeclaration","scope":76717,"src":"16817:20:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76690,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16817:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":76693,"mutability":"mutable","name":"inheritor","nameLocation":"16855:9:159","nodeType":"VariableDeclaration","scope":76717,"src":"16847:17:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76692,"name":"address","nodeType":"ElementaryTypeName","src":"16847:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":76695,"mutability":"mutable","name":"valueToReceive","nameLocation":"16882:14:159","nodeType":"VariableDeclaration","scope":76717,"src":"16874:22:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":76694,"name":"uint128","nodeType":"ElementaryTypeName","src":"16874:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":76697,"mutability":"mutable","name":"valueClaimsHash","nameLocation":"16914:15:159","nodeType":"VariableDeclaration","scope":76717,"src":"16906:23:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76696,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16906:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":76699,"mutability":"mutable","name":"messagesHashesHash","nameLocation":"16947:18:159","nodeType":"VariableDeclaration","scope":76717,"src":"16939:26:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76698,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16939:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"16782:189:159"},"returnParameters":{"id":76703,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76702,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76717,"src":"16994:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76701,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16994:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"16993:9:159"},"scope":76908,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":76746,"nodeType":"FunctionDefinition","src":"17169:451:159","nodes":[],"body":{"id":76745,"nodeType":"Block","src":"17272:348:159","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":76728,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76720,"src":"17346:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$73530_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":76729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17362:2:159","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":73520,"src":"17346:18:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76730,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76720,"src":"17382:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$73530_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":76731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17398:11:159","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":73522,"src":"17382:27:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76732,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76720,"src":"17427:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$73530_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":76733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17443:7:159","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":73524,"src":"17427:23:159","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":76734,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76720,"src":"17468:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$73530_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":76735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17484:5:159","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":73526,"src":"17468:21:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"expression":{"id":76736,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76720,"src":"17507:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$73530_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":76737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17523:12:159","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":73529,"src":"17507:28:159","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$73535_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":76738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17536:2:159","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":73532,"src":"17507:31:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"expression":{"id":76739,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76720,"src":"17556:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$73530_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":76740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17572:12:159","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":73529,"src":"17556:28:159","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$73535_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":76741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17585:4:159","memberName":"code","nodeType":"MemberAccess","referencedDeclaration":73534,"src":"17556:33:159","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":76726,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"17312:3:159","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":76727,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17316:12:159","memberName":"encodePacked","nodeType":"MemberAccess","src":"17312:16:159","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17312:291:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76725,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"17289:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17289:324:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":76724,"id":76744,"nodeType":"Return","src":"17282:331:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_outgoingMessageHash","nameLocation":"17178:20:159","parameters":{"id":76721,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76720,"mutability":"mutable","name":"outgoingMessage","nameLocation":"17224:15:159","nodeType":"VariableDeclaration","scope":76746,"src":"17199:40:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$73530_calldata_ptr","typeString":"struct IRouter.OutgoingMessage"},"typeName":{"id":76719,"nodeType":"UserDefinedTypeName","pathNode":{"id":76718,"name":"OutgoingMessage","nameLocations":["17199:15:159"],"nodeType":"IdentifierPath","referencedDeclaration":73530,"src":"17199:15:159"},"referencedDeclaration":73530,"src":"17199:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$73530_storage_ptr","typeString":"struct IRouter.OutgoingMessage"}},"visibility":"internal"}],"src":"17198:42:159"},"returnParameters":{"id":76724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76723,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76746,"src":"17263:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76722,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17263:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"17262:9:159"},"scope":76908,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":76765,"nodeType":"FunctionDefinition","src":"17626:192:159","nodes":[],"body":{"id":76764,"nodeType":"Block","src":"17726:92:159","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":76757,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76749,"src":"17770:14:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$73481_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"id":76758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17785:2:159","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":73478,"src":"17770:17:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76759,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76749,"src":"17789:14:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$73481_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"id":76760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17804:5:159","memberName":"valid","nodeType":"MemberAccess","referencedDeclaration":73480,"src":"17789:20:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":76755,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"17753:3:159","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":76756,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17757:12:159","memberName":"encodePacked","nodeType":"MemberAccess","src":"17753:16:159","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17753:57:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76754,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"17743:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17743:68:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":76753,"id":76763,"nodeType":"Return","src":"17736:75:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_codeCommitmentHash","nameLocation":"17635:19:159","parameters":{"id":76750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76749,"mutability":"mutable","name":"codeCommitment","nameLocation":"17679:14:159","nodeType":"VariableDeclaration","scope":76765,"src":"17655:38:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$73481_calldata_ptr","typeString":"struct IRouter.CodeCommitment"},"typeName":{"id":76748,"nodeType":"UserDefinedTypeName","pathNode":{"id":76747,"name":"CodeCommitment","nameLocations":["17655:14:159"],"nodeType":"IdentifierPath","referencedDeclaration":73481,"src":"17655:14:159"},"referencedDeclaration":73481,"src":"17655:14:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$73481_storage_ptr","typeString":"struct IRouter.CodeCommitment"}},"visibility":"internal"}],"src":"17654:40:159"},"returnParameters":{"id":76753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76752,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76765,"src":"17717:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76751,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17717:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"17716:9:159"},"scope":76908,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":76798,"nodeType":"FunctionDefinition","src":"17824:257:159","nodes":[],"body":{"id":76797,"nodeType":"Block","src":"17872:209:159","nodes":[],"statements":[{"assignments":[76772],"declarations":[{"constant":false,"id":76772,"mutability":"mutable","name":"router","nameLocation":"17898:6:159","nodeType":"VariableDeclaration","scope":76797,"src":"17882:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76771,"nodeType":"UserDefinedTypeName","pathNode":{"id":76770,"name":"Storage","nameLocations":["17882:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"17882:7:159"},"referencedDeclaration":73472,"src":"17882:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":76775,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":76773,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"17907:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":76774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17907:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"17882:38:159"},{"assignments":[76777],"declarations":[{"constant":false,"id":76777,"mutability":"mutable","name":"success","nameLocation":"17936:7:159","nodeType":"VariableDeclaration","scope":76797,"src":"17931:12:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":76776,"name":"bool","nodeType":"ElementaryTypeName","src":"17931:4:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":76791,"initialValue":{"arguments":[{"expression":{"id":76783,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"17986:2:159","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":76784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17989:6:159","memberName":"origin","nodeType":"MemberAccess","src":"17986:9:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":76787,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"18005:4:159","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$76908","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$76908","typeString":"contract Router"}],"id":76786,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17997:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":76785,"name":"address","nodeType":"ElementaryTypeName","src":"17997:7:159","typeDescriptions":{}}},"id":76788,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17997:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":76789,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76767,"src":"18012:6:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"expression":{"id":76779,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76772,"src":"17953:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76780,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17960:11:159","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":73441,"src":"17953:18:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":76778,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43140,"src":"17946:6:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$43140_$","typeString":"type(contract IERC20)"}},"id":76781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17946:26:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43140","typeString":"contract IERC20"}},"id":76782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17973:12:159","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":43139,"src":"17946:39:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":76790,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17946:73:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"17931:88:159"},{"expression":{"arguments":[{"id":76793,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76777,"src":"18038:7:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207265747269657665205756617261","id":76794,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18047:26:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""},"value":"failed to retrieve WVara"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""}],"id":76792,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"18030:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18030:44:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76796,"nodeType":"ExpressionStatement","src":"18030:44:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_retrieveValue","nameLocation":"17833:14:159","parameters":{"id":76768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76767,"mutability":"mutable","name":"_value","nameLocation":"17856:6:159","nodeType":"VariableDeclaration","scope":76798,"src":"17848:14:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":76766,"name":"uint128","nodeType":"ElementaryTypeName","src":"17848:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"17847:16:159"},"returnParameters":{"id":76769,"nodeType":"ParameterList","parameters":[],"src":"17872:0:159"},"scope":76908,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76839,"nodeType":"FunctionDefinition","src":"18087:317:159","nodes":[],"body":{"id":76838,"nodeType":"Block","src":"18123:281:159","nodes":[],"statements":[{"assignments":[76803],"declarations":[{"constant":false,"id":76803,"mutability":"mutable","name":"router","nameLocation":"18149:6:159","nodeType":"VariableDeclaration","scope":76838,"src":"18133:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76802,"nodeType":"UserDefinedTypeName","pathNode":{"id":76801,"name":"Storage","nameLocations":["18133:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"18133:7:159"},"referencedDeclaration":73472,"src":"18133:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":76806,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":76804,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"18158:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":76805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18158:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"18133:38:159"},{"body":{"id":76832,"nodeType":"Block","src":"18241:118:159","statements":[{"assignments":[76820],"declarations":[{"constant":false,"id":76820,"mutability":"mutable","name":"validator","nameLocation":"18263:9:159","nodeType":"VariableDeclaration","scope":76832,"src":"18255:17:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76819,"name":"address","nodeType":"ElementaryTypeName","src":"18255:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":76825,"initialValue":{"baseExpression":{"expression":{"id":76821,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76803,"src":"18275:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76822,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18282:14:159","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":73458,"src":"18275:21:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":76824,"indexExpression":{"id":76823,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76808,"src":"18297:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18275:24:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"18255:44:159"},{"expression":{"id":76830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"18313:35:159","subExpression":{"baseExpression":{"expression":{"id":76826,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76803,"src":"18320:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76827,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18327:10:159","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":73455,"src":"18320:17:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":76829,"indexExpression":{"id":76828,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76820,"src":"18338:9:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"18320:28:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76831,"nodeType":"ExpressionStatement","src":"18313:35:159"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76811,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76808,"src":"18202:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":76812,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76803,"src":"18206:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76813,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18213:14:159","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":73458,"src":"18206:21:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":76814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18228:6:159","memberName":"length","nodeType":"MemberAccess","src":"18206:28:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18202:32:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76833,"initializationExpression":{"assignments":[76808],"declarations":[{"constant":false,"id":76808,"mutability":"mutable","name":"i","nameLocation":"18195:1:159","nodeType":"VariableDeclaration","scope":76833,"src":"18187:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76807,"name":"uint256","nodeType":"ElementaryTypeName","src":"18187:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76810,"initialValue":{"hexValue":"30","id":76809,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18199:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"18187:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":76817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"18236:3:159","subExpression":{"id":76816,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76808,"src":"18236:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76818,"nodeType":"ExpressionStatement","src":"18236:3:159"},"nodeType":"ForStatement","src":"18182:177:159"},{"expression":{"id":76836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"18369:28:159","subExpression":{"expression":{"id":76834,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76803,"src":"18376:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76835,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"18383:14:159","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":73458,"src":"18376:21:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76837,"nodeType":"ExpressionStatement","src":"18369:28:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_cleanValidators","nameLocation":"18096:16:159","parameters":{"id":76799,"nodeType":"ParameterList","parameters":[],"src":"18112:2:159"},"returnParameters":{"id":76800,"nodeType":"ParameterList","parameters":[],"src":"18123:0:159"},"scope":76908,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76894,"nodeType":"FunctionDefinition","src":"18410:442:159","nodes":[],"body":{"id":76893,"nodeType":"Block","src":"18477:375:159","nodes":[],"statements":[{"assignments":[76847],"declarations":[{"constant":false,"id":76847,"mutability":"mutable","name":"router","nameLocation":"18503:6:159","nodeType":"VariableDeclaration","scope":76893,"src":"18487:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76846,"nodeType":"UserDefinedTypeName","pathNode":{"id":76845,"name":"Storage","nameLocations":["18487:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"18487:7:159"},"referencedDeclaration":73472,"src":"18487:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":76850,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":76848,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76907,"src":"18512:11:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73472_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":76849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18512:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"18487:38:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":76852,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76847,"src":"18544:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76853,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18551:14:159","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":73458,"src":"18544:21:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":76854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18566:6:159","memberName":"length","nodeType":"MemberAccess","src":"18544:28:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":76855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18576:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"18544:33:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726576696f75732076616c696461746f727320776572656e27742072656d6f766564","id":76857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18579:37:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_cbe432dd5148cbcd3965634d2fa4c608dba4822bc479da840b7f667e6442b9d2","typeString":"literal_string \"previous validators weren't removed\""},"value":"previous validators weren't removed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cbe432dd5148cbcd3965634d2fa4c608dba4822bc479da840b7f667e6442b9d2","typeString":"literal_string \"previous validators weren't removed\""}],"id":76851,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"18536:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18536:81:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76859,"nodeType":"ExpressionStatement","src":"18536:81:159"},{"body":{"id":76885,"nodeType":"Block","src":"18682:113:159","statements":[{"assignments":[76872],"declarations":[{"constant":false,"id":76872,"mutability":"mutable","name":"validator","nameLocation":"18704:9:159","nodeType":"VariableDeclaration","scope":76885,"src":"18696:17:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76871,"name":"address","nodeType":"ElementaryTypeName","src":"18696:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":76876,"initialValue":{"baseExpression":{"id":76873,"name":"_validatorsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76842,"src":"18716:16:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":76875,"indexExpression":{"id":76874,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76861,"src":"18733:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18716:19:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"18696:39:159"},{"expression":{"id":76883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":76877,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76847,"src":"18749:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76880,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18756:10:159","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":73455,"src":"18749:17:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":76881,"indexExpression":{"id":76879,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76872,"src":"18767:9:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"18749:28:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":76882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"18780:4:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"18749:35:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76884,"nodeType":"ExpressionStatement","src":"18749:35:159"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76864,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76861,"src":"18648:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":76865,"name":"_validatorsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76842,"src":"18652:16:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":76866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18669:6:159","memberName":"length","nodeType":"MemberAccess","src":"18652:23:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18648:27:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76886,"initializationExpression":{"assignments":[76861],"declarations":[{"constant":false,"id":76861,"mutability":"mutable","name":"i","nameLocation":"18641:1:159","nodeType":"VariableDeclaration","scope":76886,"src":"18633:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76860,"name":"uint256","nodeType":"ElementaryTypeName","src":"18633:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76863,"initialValue":{"hexValue":"30","id":76862,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18645:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"18633:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":76869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"18677:3:159","subExpression":{"id":76868,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76861,"src":"18677:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76870,"nodeType":"ExpressionStatement","src":"18677:3:159"},"nodeType":"ForStatement","src":"18628:167:159"},{"expression":{"id":76891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":76887,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76847,"src":"18805:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76889,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"18812:14:159","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":73458,"src":"18805:21:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":76890,"name":"_validatorsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76842,"src":"18829:16:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"18805:40:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":76892,"nodeType":"ExpressionStatement","src":"18805:40:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_setValidators","nameLocation":"18419:14:159","parameters":{"id":76843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76842,"mutability":"mutable","name":"_validatorsArray","nameLocation":"18451:16:159","nodeType":"VariableDeclaration","scope":76894,"src":"18434:33:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":76840,"name":"address","nodeType":"ElementaryTypeName","src":"18434:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":76841,"nodeType":"ArrayTypeName","src":"18434:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"18433:35:159"},"returnParameters":{"id":76844,"nodeType":"ParameterList","parameters":[],"src":"18477:0:159"},"scope":76908,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76907,"nodeType":"FunctionDefinition","src":"18858:222:159","nodes":[],"body":{"id":76906,"nodeType":"Block","src":"18927:153:159","nodes":[],"statements":[{"assignments":[76901],"declarations":[{"constant":false,"id":76901,"mutability":"mutable","name":"slot","nameLocation":"18945:4:159","nodeType":"VariableDeclaration","scope":76906,"src":"18937:12:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76900,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18937:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":76904,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":76902,"name":"getStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75365,"src":"18952:14:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":76903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18952:16:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"18937:31:159"},{"AST":{"nativeSrc":"19031:43:159","nodeType":"YulBlock","src":"19031:43:159","statements":[{"nativeSrc":"19045:19:159","nodeType":"YulAssignment","src":"19045:19:159","value":{"name":"slot","nativeSrc":"19060:4:159","nodeType":"YulIdentifier","src":"19060:4:159"},"variableNames":[{"name":"router.slot","nativeSrc":"19045:11:159","nodeType":"YulIdentifier","src":"19045:11:159"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":76898,"isOffset":false,"isSlot":true,"src":"19045:11:159","suffix":"slot","valueSize":1},{"declaration":76901,"isOffset":false,"isSlot":false,"src":"19060:4:159","valueSize":1}],"id":76905,"nodeType":"InlineAssembly","src":"19022:52:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_getStorage","nameLocation":"18867:11:159","parameters":{"id":76895,"nodeType":"ParameterList","parameters":[],"src":"18878:2:159"},"returnParameters":{"id":76899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76898,"mutability":"mutable","name":"router","nameLocation":"18919:6:159","nodeType":"VariableDeclaration","scope":76907,"src":"18903:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76897,"nodeType":"UserDefinedTypeName","pathNode":{"id":76896,"name":"Storage","nameLocations":["18903:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73472,"src":"18903:7:159"},"referencedDeclaration":73472,"src":"18903:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73472_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"src":"18902:24:159"},"scope":76908,"stateMutability":"view","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[{"baseName":{"id":75168,"name":"IRouter","nameLocations":["898:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73763,"src":"898:7:159"},"id":75169,"nodeType":"InheritanceSpecifier","src":"898:7:159"},{"baseName":{"id":75170,"name":"OwnableUpgradeable","nameLocations":["907:18:159"],"nodeType":"IdentifierPath","referencedDeclaration":39387,"src":"907:18:159"},"id":75171,"nodeType":"InheritanceSpecifier","src":"907:18:159"},{"baseName":{"id":75172,"name":"ReentrancyGuardTransient","nameLocations":["927:24:159"],"nodeType":"IdentifierPath","referencedDeclaration":44045,"src":"927:24:159"},"id":75173,"nodeType":"InheritanceSpecifier","src":"927:24:159"}],"canonicalName":"Router","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[76908,44045,39387,40535,39641,73763],"name":"Router","nameLocation":"888:6:159","scope":76909,"usedErrors":[39223,39228,39404,39407,43912,43918,43989,44912,44917,44922],"usedEvents":[39234,39412,73540,73547,73554,73561,73564,73567,73572,73577]}],"license":"UNLICENSED"},"id":159} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"areValidators","inputs":[{"name":"_validators","type":"address[]","internalType":"address[]"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"codeState","inputs":[{"name":"_codeId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint8","internalType":"enum Gear.CodeState"}],"stateMutability":"view"},{"type":"function","name":"codesStates","inputs":[{"name":"_codesIds","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"","type":"uint8[]","internalType":"enum Gear.CodeState[]"}],"stateMutability":"view"},{"type":"function","name":"commitBlocks","inputs":[{"name":"_blockCommitments","type":"tuple[]","internalType":"struct Gear.BlockCommitment[]","components":[{"name":"hash","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint48","internalType":"uint48"},{"name":"previousCommittedBlock","type":"bytes32","internalType":"bytes32"},{"name":"predecessorBlock","type":"bytes32","internalType":"bytes32"},{"name":"transitions","type":"tuple[]","internalType":"struct Gear.StateTransition[]","components":[{"name":"actorId","type":"address","internalType":"address"},{"name":"newStateHash","type":"bytes32","internalType":"bytes32"},{"name":"inheritor","type":"address","internalType":"address"},{"name":"valueToReceive","type":"uint128","internalType":"uint128"},{"name":"valueClaims","type":"tuple[]","internalType":"struct Gear.ValueClaim[]","components":[{"name":"messageId","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"value","type":"uint128","internalType":"uint128"}]},{"name":"messages","type":"tuple[]","internalType":"struct Gear.Message[]","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"replyDetails","type":"tuple","internalType":"struct Gear.ReplyDetails","components":[{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"code","type":"bytes4","internalType":"bytes4"}]}]}]}]},{"name":"_signatures","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"commitCodes","inputs":[{"name":"_codeCommitments","type":"tuple[]","internalType":"struct Gear.CodeCommitment[]","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"valid","type":"bool","internalType":"bool"}]},{"name":"_signatures","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"computeSettings","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct Gear.ComputationSettings","components":[{"name":"threshold","type":"uint64","internalType":"uint64"},{"name":"wvaraPerSecond","type":"uint128","internalType":"uint128"}]}],"stateMutability":"view"},{"type":"function","name":"createProgram","inputs":[{"name":"_codeId","type":"bytes32","internalType":"bytes32"},{"name":"_salt","type":"bytes32","internalType":"bytes32"},{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"createProgramWithDecoder","inputs":[{"name":"_decoderImpl","type":"address","internalType":"address"},{"name":"_codeId","type":"bytes32","internalType":"bytes32"},{"name":"_salt","type":"bytes32","internalType":"bytes32"},{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"genesisBlockHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_owner","type":"address","internalType":"address"},{"name":"_mirror","type":"address","internalType":"address"},{"name":"_mirrorProxy","type":"address","internalType":"address"},{"name":"_wrappedVara","type":"address","internalType":"address"},{"name":"_validatorsKeys","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isValidator","inputs":[{"name":"_validator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"latestCommittedBlockHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"lookupGenesisHash","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mirrorImpl","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"mirrorProxyImpl","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"programCodeId","inputs":[{"name":"_programId","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"programsCodeIds","inputs":[{"name":"_programsIds","type":"address[]","internalType":"address[]"}],"outputs":[{"name":"","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"view"},{"type":"function","name":"programsCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"reinitialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"requestCodeValidation","inputs":[{"name":"_codeId","type":"bytes32","internalType":"bytes32"},{"name":"_blobTxHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMirror","inputs":[{"name":"newMirror","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"signingThresholdPercentage","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"validatedCodesCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validatorsCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validatorsKeys","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"validatorsThreshold","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"wrappedVara","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"BlockCommitted","inputs":[{"name":"hash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"CodeGotValidated","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"valid","type":"bool","indexed":true,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"CodeValidationRequested","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"blobTxHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ComputationSettingsChanged","inputs":[{"name":"threshold","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"wvaraPerSecond","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"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":"ProgramCreated","inputs":[{"name":"actor","type":"address","indexed":false,"internalType":"address"},{"name":"codeId","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"StorageSlotChanged","inputs":[],"anonymous":false},{"type":"event","name":"ValidatorsChanged","inputs":[],"anonymous":false},{"type":"error","name":"ECDSAInvalidSignature","inputs":[]},{"type":"error","name":"ECDSAInvalidSignatureLength","inputs":[{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ECDSAInvalidSignatureS","inputs":[{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"FailedDeployment","inputs":[]},{"type":"error","name":"InsufficientBalance","inputs":[{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]}],"bytecode":{"object":"0x6080806040523460d0577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c1660c1576002600160401b03196001600160401b03821601605c575b604051612b7590816100d58239f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80604d565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c9081627a32e714611ec85750806301b1d156146114475780631c149d8a146112fa57806328e24b3d146112d05780633d43b4181461127e57806365ecfea214611246578063666d124c146111455780636c2eb35014610ebf5780636e61dd4914610e48578063715018a614610de15780638074b45514610d1d57806382bdeaad14610c1857806384d22a4f14610bb057806388f50cf014610b785780638b1edf1e14610ab35780638da5cb5b14610a7f5780638f381dbe14610a3a5780639067088e146109f257806396a2ddfa146109c5578063baaf0201146108ca578063c13911e814610886578063c9f16a1114610859578063e6fabc0914610821578063e97d3eb3146105fd578063ed612f8c146105d0578063edc872251461059c578063efd81abc1461056b578063f2fde38b14610545578063f8453e7c146101b65763facd743b14610165575f80fd5b346101b25760203660031901126101b25761017e611f22565b60085f80516020612b0083398151915254019060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b5f80fd5b346101b25760a03660031901126101b2576101cf611f22565b6024356001600160a01b03811691908290036101b2576044356001600160a01b03811692908390036101b2576064356001600160a01b038116908190036101b2576084356001600160401b0381116101b25761022f903690600401611ef2565b915f80516020612b208339815191525460ff8160401c1615956001600160401b0382168015908161053d575b6001149081610533575b15908161052a575b5061051b5767ffffffffffffffff1982166001175f80516020612b20833981519152556102b091876104ef575b506102a3612998565b6102ab612998565b612270565b60409586516102bf8882612042565b6017815260208101907f726f757465722e73746f726167652e526f75746572563100000000000000000082526102f36124ba565b5190205f1981019081116104db5787519060208201908152602082526103198983612042565b60ff19915190201694855f80516020612b008339815191525561033a612758565b80518755600187019063ffffffff60208201511669ffffffffffff000000008b845493015160201b169169ffffffffffffffffffff1916171790558288805161038281612027565b8381526020810185905201526004860180546001600160a01b03199081166001600160a01b0393841617909155600587018054821693831693909317909255600686018054909216921691909117905560078301805461ffff1916611a0a1790556103ec8261218c565b916103f986519384612042565b808352602083019060051b8201913683116101b257905b8282106104c35750505090610427600a928261279d565b61042f6121c7565b506509184e72a000602085516104448161200c565b639502f900815201520180546001600160c01b0319166d09184e72a000000000009502f90017905561047257005b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f80516020612b2083398151915254165f80516020612b20833981519152555160018152a1005b602080916104d084611f38565b815201910190610410565b634e487b7160e01b5f52601160045260245ffd5b68ffffffffffffffffff191668010000000000000001175f80516020612b20833981519152558861029a565b63f92ee8a960e01b5f5260045ffd5b9050158961026d565b303b159150610265565b88915061025b565b346101b25760203660031901126101b257610569610561611f22565b6102ab6124ba565b005b346101b2575f3660031901126101b257602061ffff60075f80516020612b0083398151915254015416604051908152f35b346101b2575f3660031901126101b25760206105c860075f80516020612b0083398151915254016128c4565b604051908152f35b346101b2575f3660031901126101b257602060095f80516020612b00833981519152540154604051908152f35b346101b25760403660031901126101b2576004356001600160401b0381116101b257366023820112156101b25780600401356001600160401b0381116101b2573660248260061b840101116101b2576024356001600160401b0381116101b25761066b903690600401611ef2565b905f80516020612b00833981519152549361068885541515611f9a565b600b8501925f9260605b86851015610805578460061b8401602481013591825f528760205260ff60405f20541660038110156107f15760010361078e57600192610741604461076e94016106db81612255565b1561077657825f528a60205260405f20600260ff19825416179055600e8d016107048154612262565b90555b61071081612255565b15157f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c96020604051868152a2612255565b6040519060208201928352151560f81b604082015260218152610765604182612042565b51902090612063565b940193610692565b825f528a60205260405f2060ff198154169055610707565b60405162461bcd60e51b815260206004820152603560248201527f636f6465206d7573742062652072657175657374656420666f722076616c6964604482015274185d1a5bdb881d1bc818994818dbdb5b5a5d1d1959605a1b6064820152608490fd5b634e487b7160e01b5f52602160045260245ffd5b9161081c91886105699460208151910120906123c2565b612092565b346101b2575f3660031901126101b2575f80516020612b0083398151915254600401546040516001600160a01b039091168152602090f35b346101b2575f3660031901126101b257602060025f80516020612b00833981519152540154604051908152f35b346101b25760203660031901126101b257600b5f80516020612b0083398151915254016004355f52602052602060ff60405f2054166108c86040518092611f8d565bf35b346101b25760203660031901126101b2576004356001600160401b0381116101b2576108fa903690600401611ef2565b5f80516020612b0083398151915254916109138261218c565b926109216040519485612042565b82845261092d8361218c565b602085019390601f1901368537600c5f9201915b81811061098c578486604051918291602083019060208452518091526040830191905f5b818110610973575050500390f35b8251845285945060209384019390920191600101610965565b806109a261099d60019385886121a3565b6121df565b828060a01b03165f528360205260405f20546109be82896121b3565b5201610941565b346101b2575f3660031901126101b2576020600d5f80516020612b00833981519152540154604051908152f35b346101b25760203660031901126101b257610a0b611f22565b600c5f80516020612b0083398151915254019060018060a01b03165f52602052602060405f2054604051908152f35b346101b25760203660031901126101b2576004356001600160401b0381116101b257610a75610a6f6020923690600401611ef2565b906121f3565b6040519015158152f35b346101b2575f3660031901126101b2575f80516020612ae0833981519152546040516001600160a01b039091168152602090f35b346101b2575f3660031901126101b2575f80516020612b00833981519152548054610b335763ffffffff60018201541640908115610aee5755005b60405162461bcd60e51b815260206004820152601d60248201527f756e61626c6520746f206c6f6f6b75702067656e6573697320686173680000006044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f67656e65736973206861736820616c72656164792073657400000000000000006044820152606490fd5b346101b2575f3660031901126101b2575f80516020612b0083398151915254600601546040516001600160a01b039091168152602090f35b346101b2575f3660031901126101b257610bc86121c7565b506040600a5f80516020612b0083398151915254016001600160801b03825191610bf18361200c565b548160206001600160401b038316948581520191851c168152835192835251166020820152f35b346101b25760203660031901126101b2576004356001600160401b0381116101b257610c48903690600401611ef2565b5f80516020612b008339815191525491610c618261218c565b92610c6f6040519485612042565b828452610c7b8361218c565b602085019390601f1901368537600b5f9201915b818110610ce4578486604051918291602083019060208452518091526040830191905f5b818110610cc1575050500390f35b9193509160208082610cd66001948851611f8d565b019401910191849392610cb3565b610cef8183866121a3565b355f528260205260ff60405f20541690610d0981886121b3565b9160038110156107f1576001925201610c8f565b346101b25760803660031901126101b2576044356001600160401b0381116101b257610d4d903690600401611f4c565b90606435916001600160801b03831683036101b257610d71836024356004356124ed565b6001600160a01b0390911692909190833b156101b257610da85f9360405196879485946306f0ee9760e51b865233600487016120fe565b038183855af1918215610dd657602092610dc6575b50604051908152f35b5f610dd091612042565b82610dbd565b6040513d5f823e3d90fd5b346101b2575f3660031901126101b257610df96124ba565b5f80516020612ae083398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101b2575f3660031901126101b257610e7260095f80516020612b00833981519152540161213b565b6040518091602082016020835281518091526020604084019201905f5b818110610e9d575050500390f35b82516001600160a01b0316845285945060209384019390920191600101610e8f565b346101b2575f3660031901126101b257610ed76124ba565b5f80516020612b208339815191525460ff8160401c168015611131575b61051b5768ffffffffffffffffff191668010000000000000002175f80516020612b20833981519152555f80516020612b008339815191525460408051610f3b8282612042565b6017815260208101907f726f757465722e73746f726167652e526f7574657256320000000000000000008252610f6f6124ba565b5190205f198101919082116104db577fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d292600a80602094845190868201908152868252610fbc8683612042565b60ff19915190201692835f80516020612b0083398151915255610fdd612758565b80518555600185019063ffffffff888201511669ffffffffffff000000008884549301518a1b169169ffffffffffffffffffff1916171790556004810160048501908082036110e3575b505061ffff600782015416600785019061ffff198254161790556110566110506009830161213b565b8561279d565b01910190808203611091575b505060ff60401b195f80516020612b2083398151915254165f80516020612b20833981519152555160028152a1005b806001600160401b03806001600160801b03935416166001600160401b031984541617835554831c16600160401b600160c01b03825491841b1690600160401b600160c01b0319161790558380611062565b5481546001600160a01b03199081166001600160a01b039283161790925560058381015490870180548416918316919091179055600680840154908701805490931691161790558780611027565b5060026001600160401b0382161015610ef4565b346101b25760a03660031901126101b25761115e611f22565b6044356024356064356001600160401b0381116101b257611183903690600401611f4c565b90608435946001600160801b03861686036101b2576111a38686866124ed565b949060018060a01b03169560405190602082019283526040820152604081526111cd606082612042565b519020853b156101b257604051635b1b84f760e01b81526001600160a01b03909216600483015260248201525f8160448183895af18015610dd657611236575b50833b156101b257610da85f9360405196879485946306f0ee9760e51b865233600487016120fe565b5f61124091612042565b8561120d565b346101b2575f3660031901126101b2575f80516020612b0083398151915254600501546040516001600160a01b039091168152602090f35b346101b25760203660031901126101b257611297611f22565b61129f6124ba565b5f80516020612b008339815191525460040180546001600160a01b0319166001600160a01b03909216919091179055005b346101b2575f3660031901126101b25760205f80516020612b008339815191525454604051908152f35b346101b25760403660031901126101b257602435600435811580159061143d575b1561140257600b5f80516020612b008339815191525461133d81541515611f9a565b0190805f528160205260ff60405f20541660038110156107f1576113a1577f65672eaf4ff8b823ea29ae013fef437d1fa9ed431125263a7a1f0ac49eada39692604092825f52602052825f20600160ff1982541617905582519182526020820152a1005b60405162461bcd60e51b815260206004820152603360248201527f676976656e20636f646520696420697320616c7265616479206f6e2076616c6960448201527219185d1a5bdb881bdc881d985b1a59185d1959606a1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526013602482015272189b1bd88818d85b89dd08189948199bdd5b99606a1b6044820152606490fd5b505f49151561131b565b346101b25760403660031901126101b2576004356001600160401b0381116101b257611477903690600401611ef2565b906024356001600160401b0381116101b257611497903690600401611ef2565b9190927f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c611eb95792919060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d5f80516020612b00833981519152549161150383541515611f9a565b5f9160605b86841015611e7d578360051b82013594609e19833603018612156101b25760028101546040878501013503611e2a57611546606087850101356128f4565b15611dd65791929385840135602061156181898801016122e1565b65ffffffffffff604051916115758361200c565b84835216918291015281600286015565ffffffffffff196003860154161760038501556060945f985b6115ae828a0160808101906122f4565b90508a1015611d2e576115d18a6115cb848c0160808101906122f4565b90612329565b975f80516020612b00833981519152546115ea8a6121df565b6001600160a01b03165f908152600c8201602052604090205415611cd157600601546001600160801b03906020906001600160a01b031660448c5f61163a6060611633846121df565b9301612937565b60405163a9059cbb60e01b81526001600160a01b0390931660048401529590951660248201529384928391905af18015610dd657611ca5575b506001600160a01b036116858a6121df565b169b5f9260605b61169960808d018d612963565b9050851015611820576116af60808d018d612963565b86929192101561180c578f91606087020180359160208201936116d1856121df565b9260408101936116e085612937565b833b156101b2576040516314503e5160e01b8152600481018890526001600160a01b0390921660248301526001600160801b03166044820152915f908390606490829084905af1918215610dd6576060926117fc575b503603126101b257602080936117f493604060019761177061176583519261175d84612027565b868452611f38565b938487840152611f79565b91018190526040805185810194855260609390931b6bffffffffffffffffffffffff19169083015260801b6fffffffffffffffffffffffffffffffff19166054820152604481526117c2606482612042565b6040519584879551918291018587015e840190838201905f8252519283915e01015f815203601f198101835282612042565b94019361168c565b5f61180691612042565b5f611736565b634e487b7160e01b5f52603260045260245ffd5b98909192979b94959693509b989b6060925f935b61184160a08e018e6122f4565b9050851015611b36578f9061185f868f8060a06115cb9201906122f4565b9060808201359283155f14611a725761187a602084016121df565b611887604085018561234b565b909261189560608701612937565b92813b156101b2575f8781956001600160801b036118e4604051998a988997889663c2df600960e01b885235600488015260018060a01b031660248701526080604487015260848601916120de565b9116606483015203925af18015610dd657611a62575b505b8136039260c084126101b2576040519360a085018581106001600160401b03821117611a4e576040528335855261193560208501611f38565b916020860192835260408501356001600160401b0381116101b257850136601f820112156101b25761196e90369060208135910161237d565b9460408701958652604061198460608301611f79565b6060890190815293607f1901126101b25760a090604051926119a58461200c565b835201356001600160e01b0319811681036101b2576054611a46968360349360019a602061076597019182528260808201525197519251965191519063ffffffff60e01b9051169060206040519889958287019b8c526001600160601b03199060601b1660408701528051918291018787015e8401926001600160801b03199060801b16858401526064830152608482015203016014810184520182612042565b940193611834565b634e487b7160e01b5f52604160045260245ffd5b5f611a6c91612042565b5f6118fa565b611a7e602084016121df565b90611a8c604085018561234b565b91611a9960608701612937565b9260a087013563ffffffff60e01b81168091036101b257823b156101b25760405163c78bde7760e01b81526001600160a01b03909616600487015260a060248701525f9486948593879385939290916001600160801b0391611aff9160a48701916120de565b921660448401528b6064840152608483015203925af18015610dd657611b26575b506118fc565b5f611b3091612042565b5f611b20565b90969993509d939a90969d9c919c9b97949b604082019160018060a01b03611b5d846121df565b16611c4e575b602081013591863b156101b2575f80976024604051809a8193638ea59e1d60e01b83528860048401525af1958615610dd657600197611c2e97611c3e575b50611bc06060611bb9611bb3866121df565b976121df565b9401612937565b90602081519101209160208151910120926040519460208601966001600160601b03199060601b16875260348601526001600160601b03199060601b1660548501526001600160801b03199060801b166068840152607883015260988201526098815261076560b882612042565b960198999199969294909661159e565b5f611c4891612042565b5f611ba1565b611c57836121df565b863b156101b257604051630959112b60e11b81526001600160a01b0390911660048201525f81602481838b5af18015610dd657611c95575b50611b63565b5f611c9f91612042565b5f611c8f565b611cc59060203d8111611cca575b611cbd8183612042565b81019061294b565b611673565b503d611cb3565b60405162461bcd60e51b815260206004820152602f60248201527f636f756c646e277420706572666f726d207472616e736974696f6e20666f722060448201526e756e6b6e6f776e2070726f6772616d60881b6064820152608490fd5b9498509690611dc992999695600194927fd756eca21e02cb0dbde1e44a4d9c6921b5c8aa4668cfa0752784b3dc855bce1e6020604051858152a16060611d786020838d01016122e1565b926020815191012091604051936020850195865265ffffffffffff60d01b9060d01b1660408501526040818d01013560468501528b010135606683015260868201526086815261076560a682612042565b9601929594939094611508565b60405162461bcd60e51b815260206004820152602660248201527f616c6c6f776564207072656465636573736f7220626c6f636b207761736e277460448201526508199bdd5b9960d21b6064820152608490fd5b60405162461bcd60e51b815260206004820152602560248201527f696e76616c69642070726576696f757320636f6d6d697474656420626c6f636b604482015264040d0c2e6d60db1b6064820152608490fd5b61081c838787611e949460208151910120906123c2565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b633ee5aeb560e01b5f5260045ffd5b346101b2575f3660031901126101b257602090600e5f80516020612b008339815191525401548152f35b9181601f840112156101b2578235916001600160401b0383116101b2576020808501948460051b0101116101b257565b600435906001600160a01b03821682036101b257565b35906001600160a01b03821682036101b257565b9181601f840112156101b2578235916001600160401b0383116101b257602083818601950101116101b257565b35906001600160801b03821682036101b257565b9060038210156107f15752565b15611fa157565b60405162461bcd60e51b815260206004820152603860248201527f726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f60448201527f6f6b757047656e657369734861736828296020666972737400000000000000006064820152608490fd5b604081019081106001600160401b03821117611a4e57604052565b606081019081106001600160401b03821117611a4e57604052565b90601f801991011681019081106001600160401b03821117611a4e57604052565b602080612090928195946040519682889351918291018585015e8201908382015203018085520183612042565b565b1561209957565b60405162461bcd60e51b815260206004820152601e60248201527f7369676e61747572657320766572696669636174696f6e206661696c656400006044820152606490fd5b908060209392818452848401375f828201840152601f01601f1916010190565b9395949061212e6001600160801b0393606095859360018060a01b031688526080602089015260808801916120de565b9616604085015216910152565b90604051918281549182825260208201905f5260205f20925f5b81811061216a57505061209092500383612042565b84546001600160a01b0316835260019485019487945060209093019201612155565b6001600160401b038111611a4e5760051b60200190565b919081101561180c5760051b0190565b805182101561180c5760209160051b010190565b604051906121d48261200c565b5f6020838281520152565b356001600160a01b03811681036101b25790565b5f80516020612b0083398151915254600801905f5b8381106122185750505050600190565b61222661099d8286856121a3565b6001600160a01b03165f9081526020849052604090205460ff161561224d57600101612208565b505050505f90565b3580151581036101b25790565b5f1981146104db5760010190565b6001600160a01b031680156122ce575f80516020612ae083398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b3565ffffffffffff811681036101b25790565b903590601e19813603018212156101b257018035906001600160401b0382116101b257602001918160051b360383136101b257565b919081101561180c5760051b8101359060be19813603018212156101b2570190565b903590601e19813603018212156101b257018035906001600160401b0382116101b2576020019181360383136101b257565b9291926001600160401b038211611a4e57604051916123a6601f8201601f191660200184612042565b8294818452818301116101b2578281602093845f960137010152565b9190916123d1600782016128c4565b926040519060208201908152602082526123ec604083612042565b612428603660405180936020820195601960f81b87523060601b60228401525180918484015e81015f838201520301601f198101835282612042565b5190205f9260085f9301925b868110156124af5761246a61246161245b6124548460051b86018661234b565b369161237d565b856129c3565b909291926129fd565b6001600160a01b03165f9081526020859052604090205460ff16612491575b600101612434565b9361249b90612262565b938585036124895750505050505050600190565b505050505050505f90565b5f80516020612ae0833981519152546001600160a01b031633036124da57565b63118cdaa760e01b5f523360045260245ffd5b905f80516020612b00833981519152549261250a84541515611f9a565b825f52600b840160205260ff60405f20541660038110156107f1576002036126fc576001600160801b03166509184e72a000016001600160801b0381116104db5760068401546040516323b872dd60e01b81523360048201523060248201526001600160801b03929092166044830152602090829060649082905f906001600160a01b03165af1908115610dd6575f916126dd575b5015612698576e5af43d82803e903d91602b57fd5bf360058401549160405160208101918583526040820152604081526125da606082612042565b51902091763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f526effffffffffffffffffffffffffffff199060781b1617602052603760095ff5916001600160a01b038316908115612689577f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf191600d602092825f52600c810184528560405f2055016126758154612262565b9055604051908152a2906509184e72a00090565b63b06ebf3d60e01b5f5260045ffd5b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b6126f6915060203d602011611cca57611cbd8183612042565b5f61259f565b60405162461bcd60e51b815260206004820152602e60248201527f636f6465206d7573742062652076616c696461746564206265666f726520707260448201526d37b3b930b69031b932b0ba34b7b760911b6064820152608490fd5b5f6040805161276681612027565b828152826020820152015260405161277d81612027565b5f815263ffffffff4316602082015265ffffffffffff4216604082015290565b9060098201908154612880579091600801905f5b81518110156127f2576001906001600160a01b036127cf82856121b3565b5116828060a01b03165f528360205260405f208260ff19825416179055016127b1565b5080519291506001600160401b038311611a4e57680100000000000000008311611a4e57815483835580841061285a575b50602001905f5260205f205f5b83811061283d5750505050565b82516001600160a01b031681830155602090920191600101612830565b825f528360205f2091820191015b8181106128755750612823565b5f8155600101612868565b606460405162461bcd60e51b815260206004820152602060248201527f72656d6f76652070726576696f75732076616c696461746f72732066697273746044820152fd5b61ffff6002820154915416908181029181830414901517156104db5761270f81018091116104db57612710900490565b905f1943014381116104db57805b61290d575b505f9150565b804083810361291e57506001925050565b156129325780156104db575f190180612902565b612907565b356001600160801b03811681036101b25790565b908160209103126101b2575180151581036101b25790565b903590601e19813603018212156101b257018035906001600160401b0382116101b2576020019160608202360383136101b257565b60ff5f80516020612b208339815191525460401c16156129b457565b631afcd79f60e31b5f5260045ffd5b81519190604183036129f3576129ec9250602082015190606060408401519301515f1a90612a5d565b9192909190565b50505f9160029190565b60048110156107f15780612a0f575050565b60018103612a265763f645eedf60e01b5f5260045ffd5b60028103612a41575063fce698f760e01b5f5260045260245ffd5b600314612a4b5750565b6335e2f38360e21b5f5260045260245ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612ad4579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15610dd6575f516001600160a01b03811615612aca57905f905f90565b505f906001905f90565b5050505f916003919056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a264697066735822122078c1ad60695c1fc31d1d6562e88d3081b77fc44d6dd36e9c0413e682ad9fe35164736f6c634300081a0033","sourceMap":"748:15481:159:-:0;;;;;;;8837:64:26;748:15481:159;;;;;;7896:76:26;;-1:-1:-1;;;;;;;;;;;748:15481:159;;7985:34:26;7981:146;;-1:-1:-1;748:15481:159;;;;;;;;;7981:146:26;-1:-1:-1;;;;;;748:15481:159;-1:-1:-1;;;;;748:15481:159;;;8837:64:26;748:15481:159;;;8087:29:26;;748:15481:159;;8087:29:26;7981:146;;;;7896:76;7938:23;;;-1:-1:-1;7938:23:26;;-1:-1:-1;7938:23:26;748:15481:159;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080806040526004361015610012575f80fd5b5f3560e01c9081627a32e714611ec85750806301b1d156146114475780631c149d8a146112fa57806328e24b3d146112d05780633d43b4181461127e57806365ecfea214611246578063666d124c146111455780636c2eb35014610ebf5780636e61dd4914610e48578063715018a614610de15780638074b45514610d1d57806382bdeaad14610c1857806384d22a4f14610bb057806388f50cf014610b785780638b1edf1e14610ab35780638da5cb5b14610a7f5780638f381dbe14610a3a5780639067088e146109f257806396a2ddfa146109c5578063baaf0201146108ca578063c13911e814610886578063c9f16a1114610859578063e6fabc0914610821578063e97d3eb3146105fd578063ed612f8c146105d0578063edc872251461059c578063efd81abc1461056b578063f2fde38b14610545578063f8453e7c146101b65763facd743b14610165575f80fd5b346101b25760203660031901126101b25761017e611f22565b60085f80516020612b0083398151915254019060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b5f80fd5b346101b25760a03660031901126101b2576101cf611f22565b6024356001600160a01b03811691908290036101b2576044356001600160a01b03811692908390036101b2576064356001600160a01b038116908190036101b2576084356001600160401b0381116101b25761022f903690600401611ef2565b915f80516020612b208339815191525460ff8160401c1615956001600160401b0382168015908161053d575b6001149081610533575b15908161052a575b5061051b5767ffffffffffffffff1982166001175f80516020612b20833981519152556102b091876104ef575b506102a3612998565b6102ab612998565b612270565b60409586516102bf8882612042565b6017815260208101907f726f757465722e73746f726167652e526f75746572563100000000000000000082526102f36124ba565b5190205f1981019081116104db5787519060208201908152602082526103198983612042565b60ff19915190201694855f80516020612b008339815191525561033a612758565b80518755600187019063ffffffff60208201511669ffffffffffff000000008b845493015160201b169169ffffffffffffffffffff1916171790558288805161038281612027565b8381526020810185905201526004860180546001600160a01b03199081166001600160a01b0393841617909155600587018054821693831693909317909255600686018054909216921691909117905560078301805461ffff1916611a0a1790556103ec8261218c565b916103f986519384612042565b808352602083019060051b8201913683116101b257905b8282106104c35750505090610427600a928261279d565b61042f6121c7565b506509184e72a000602085516104448161200c565b639502f900815201520180546001600160c01b0319166d09184e72a000000000009502f90017905561047257005b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f80516020612b2083398151915254165f80516020612b20833981519152555160018152a1005b602080916104d084611f38565b815201910190610410565b634e487b7160e01b5f52601160045260245ffd5b68ffffffffffffffffff191668010000000000000001175f80516020612b20833981519152558861029a565b63f92ee8a960e01b5f5260045ffd5b9050158961026d565b303b159150610265565b88915061025b565b346101b25760203660031901126101b257610569610561611f22565b6102ab6124ba565b005b346101b2575f3660031901126101b257602061ffff60075f80516020612b0083398151915254015416604051908152f35b346101b2575f3660031901126101b25760206105c860075f80516020612b0083398151915254016128c4565b604051908152f35b346101b2575f3660031901126101b257602060095f80516020612b00833981519152540154604051908152f35b346101b25760403660031901126101b2576004356001600160401b0381116101b257366023820112156101b25780600401356001600160401b0381116101b2573660248260061b840101116101b2576024356001600160401b0381116101b25761066b903690600401611ef2565b905f80516020612b00833981519152549361068885541515611f9a565b600b8501925f9260605b86851015610805578460061b8401602481013591825f528760205260ff60405f20541660038110156107f15760010361078e57600192610741604461076e94016106db81612255565b1561077657825f528a60205260405f20600260ff19825416179055600e8d016107048154612262565b90555b61071081612255565b15157f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c96020604051868152a2612255565b6040519060208201928352151560f81b604082015260218152610765604182612042565b51902090612063565b940193610692565b825f528a60205260405f2060ff198154169055610707565b60405162461bcd60e51b815260206004820152603560248201527f636f6465206d7573742062652072657175657374656420666f722076616c6964604482015274185d1a5bdb881d1bc818994818dbdb5b5a5d1d1959605a1b6064820152608490fd5b634e487b7160e01b5f52602160045260245ffd5b9161081c91886105699460208151910120906123c2565b612092565b346101b2575f3660031901126101b2575f80516020612b0083398151915254600401546040516001600160a01b039091168152602090f35b346101b2575f3660031901126101b257602060025f80516020612b00833981519152540154604051908152f35b346101b25760203660031901126101b257600b5f80516020612b0083398151915254016004355f52602052602060ff60405f2054166108c86040518092611f8d565bf35b346101b25760203660031901126101b2576004356001600160401b0381116101b2576108fa903690600401611ef2565b5f80516020612b0083398151915254916109138261218c565b926109216040519485612042565b82845261092d8361218c565b602085019390601f1901368537600c5f9201915b81811061098c578486604051918291602083019060208452518091526040830191905f5b818110610973575050500390f35b8251845285945060209384019390920191600101610965565b806109a261099d60019385886121a3565b6121df565b828060a01b03165f528360205260405f20546109be82896121b3565b5201610941565b346101b2575f3660031901126101b2576020600d5f80516020612b00833981519152540154604051908152f35b346101b25760203660031901126101b257610a0b611f22565b600c5f80516020612b0083398151915254019060018060a01b03165f52602052602060405f2054604051908152f35b346101b25760203660031901126101b2576004356001600160401b0381116101b257610a75610a6f6020923690600401611ef2565b906121f3565b6040519015158152f35b346101b2575f3660031901126101b2575f80516020612ae0833981519152546040516001600160a01b039091168152602090f35b346101b2575f3660031901126101b2575f80516020612b00833981519152548054610b335763ffffffff60018201541640908115610aee5755005b60405162461bcd60e51b815260206004820152601d60248201527f756e61626c6520746f206c6f6f6b75702067656e6573697320686173680000006044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f67656e65736973206861736820616c72656164792073657400000000000000006044820152606490fd5b346101b2575f3660031901126101b2575f80516020612b0083398151915254600601546040516001600160a01b039091168152602090f35b346101b2575f3660031901126101b257610bc86121c7565b506040600a5f80516020612b0083398151915254016001600160801b03825191610bf18361200c565b548160206001600160401b038316948581520191851c168152835192835251166020820152f35b346101b25760203660031901126101b2576004356001600160401b0381116101b257610c48903690600401611ef2565b5f80516020612b008339815191525491610c618261218c565b92610c6f6040519485612042565b828452610c7b8361218c565b602085019390601f1901368537600b5f9201915b818110610ce4578486604051918291602083019060208452518091526040830191905f5b818110610cc1575050500390f35b9193509160208082610cd66001948851611f8d565b019401910191849392610cb3565b610cef8183866121a3565b355f528260205260ff60405f20541690610d0981886121b3565b9160038110156107f1576001925201610c8f565b346101b25760803660031901126101b2576044356001600160401b0381116101b257610d4d903690600401611f4c565b90606435916001600160801b03831683036101b257610d71836024356004356124ed565b6001600160a01b0390911692909190833b156101b257610da85f9360405196879485946306f0ee9760e51b865233600487016120fe565b038183855af1918215610dd657602092610dc6575b50604051908152f35b5f610dd091612042565b82610dbd565b6040513d5f823e3d90fd5b346101b2575f3660031901126101b257610df96124ba565b5f80516020612ae083398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101b2575f3660031901126101b257610e7260095f80516020612b00833981519152540161213b565b6040518091602082016020835281518091526020604084019201905f5b818110610e9d575050500390f35b82516001600160a01b0316845285945060209384019390920191600101610e8f565b346101b2575f3660031901126101b257610ed76124ba565b5f80516020612b208339815191525460ff8160401c168015611131575b61051b5768ffffffffffffffffff191668010000000000000002175f80516020612b20833981519152555f80516020612b008339815191525460408051610f3b8282612042565b6017815260208101907f726f757465722e73746f726167652e526f7574657256320000000000000000008252610f6f6124ba565b5190205f198101919082116104db577fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d292600a80602094845190868201908152868252610fbc8683612042565b60ff19915190201692835f80516020612b0083398151915255610fdd612758565b80518555600185019063ffffffff888201511669ffffffffffff000000008884549301518a1b169169ffffffffffffffffffff1916171790556004810160048501908082036110e3575b505061ffff600782015416600785019061ffff198254161790556110566110506009830161213b565b8561279d565b01910190808203611091575b505060ff60401b195f80516020612b2083398151915254165f80516020612b20833981519152555160028152a1005b806001600160401b03806001600160801b03935416166001600160401b031984541617835554831c16600160401b600160c01b03825491841b1690600160401b600160c01b0319161790558380611062565b5481546001600160a01b03199081166001600160a01b039283161790925560058381015490870180548416918316919091179055600680840154908701805490931691161790558780611027565b5060026001600160401b0382161015610ef4565b346101b25760a03660031901126101b25761115e611f22565b6044356024356064356001600160401b0381116101b257611183903690600401611f4c565b90608435946001600160801b03861686036101b2576111a38686866124ed565b949060018060a01b03169560405190602082019283526040820152604081526111cd606082612042565b519020853b156101b257604051635b1b84f760e01b81526001600160a01b03909216600483015260248201525f8160448183895af18015610dd657611236575b50833b156101b257610da85f9360405196879485946306f0ee9760e51b865233600487016120fe565b5f61124091612042565b8561120d565b346101b2575f3660031901126101b2575f80516020612b0083398151915254600501546040516001600160a01b039091168152602090f35b346101b25760203660031901126101b257611297611f22565b61129f6124ba565b5f80516020612b008339815191525460040180546001600160a01b0319166001600160a01b03909216919091179055005b346101b2575f3660031901126101b25760205f80516020612b008339815191525454604051908152f35b346101b25760403660031901126101b257602435600435811580159061143d575b1561140257600b5f80516020612b008339815191525461133d81541515611f9a565b0190805f528160205260ff60405f20541660038110156107f1576113a1577f65672eaf4ff8b823ea29ae013fef437d1fa9ed431125263a7a1f0ac49eada39692604092825f52602052825f20600160ff1982541617905582519182526020820152a1005b60405162461bcd60e51b815260206004820152603360248201527f676976656e20636f646520696420697320616c7265616479206f6e2076616c6960448201527219185d1a5bdb881bdc881d985b1a59185d1959606a1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526013602482015272189b1bd88818d85b89dd08189948199bdd5b99606a1b6044820152606490fd5b505f49151561131b565b346101b25760403660031901126101b2576004356001600160401b0381116101b257611477903690600401611ef2565b906024356001600160401b0381116101b257611497903690600401611ef2565b9190927f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c611eb95792919060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d5f80516020612b00833981519152549161150383541515611f9a565b5f9160605b86841015611e7d578360051b82013594609e19833603018612156101b25760028101546040878501013503611e2a57611546606087850101356128f4565b15611dd65791929385840135602061156181898801016122e1565b65ffffffffffff604051916115758361200c565b84835216918291015281600286015565ffffffffffff196003860154161760038501556060945f985b6115ae828a0160808101906122f4565b90508a1015611d2e576115d18a6115cb848c0160808101906122f4565b90612329565b975f80516020612b00833981519152546115ea8a6121df565b6001600160a01b03165f908152600c8201602052604090205415611cd157600601546001600160801b03906020906001600160a01b031660448c5f61163a6060611633846121df565b9301612937565b60405163a9059cbb60e01b81526001600160a01b0390931660048401529590951660248201529384928391905af18015610dd657611ca5575b506001600160a01b036116858a6121df565b169b5f9260605b61169960808d018d612963565b9050851015611820576116af60808d018d612963565b86929192101561180c578f91606087020180359160208201936116d1856121df565b9260408101936116e085612937565b833b156101b2576040516314503e5160e01b8152600481018890526001600160a01b0390921660248301526001600160801b03166044820152915f908390606490829084905af1918215610dd6576060926117fc575b503603126101b257602080936117f493604060019761177061176583519261175d84612027565b868452611f38565b938487840152611f79565b91018190526040805185810194855260609390931b6bffffffffffffffffffffffff19169083015260801b6fffffffffffffffffffffffffffffffff19166054820152604481526117c2606482612042565b6040519584879551918291018587015e840190838201905f8252519283915e01015f815203601f198101835282612042565b94019361168c565b5f61180691612042565b5f611736565b634e487b7160e01b5f52603260045260245ffd5b98909192979b94959693509b989b6060925f935b61184160a08e018e6122f4565b9050851015611b36578f9061185f868f8060a06115cb9201906122f4565b9060808201359283155f14611a725761187a602084016121df565b611887604085018561234b565b909261189560608701612937565b92813b156101b2575f8781956001600160801b036118e4604051998a988997889663c2df600960e01b885235600488015260018060a01b031660248701526080604487015260848601916120de565b9116606483015203925af18015610dd657611a62575b505b8136039260c084126101b2576040519360a085018581106001600160401b03821117611a4e576040528335855261193560208501611f38565b916020860192835260408501356001600160401b0381116101b257850136601f820112156101b25761196e90369060208135910161237d565b9460408701958652604061198460608301611f79565b6060890190815293607f1901126101b25760a090604051926119a58461200c565b835201356001600160e01b0319811681036101b2576054611a46968360349360019a602061076597019182528260808201525197519251965191519063ffffffff60e01b9051169060206040519889958287019b8c526001600160601b03199060601b1660408701528051918291018787015e8401926001600160801b03199060801b16858401526064830152608482015203016014810184520182612042565b940193611834565b634e487b7160e01b5f52604160045260245ffd5b5f611a6c91612042565b5f6118fa565b611a7e602084016121df565b90611a8c604085018561234b565b91611a9960608701612937565b9260a087013563ffffffff60e01b81168091036101b257823b156101b25760405163c78bde7760e01b81526001600160a01b03909616600487015260a060248701525f9486948593879385939290916001600160801b0391611aff9160a48701916120de565b921660448401528b6064840152608483015203925af18015610dd657611b26575b506118fc565b5f611b3091612042565b5f611b20565b90969993509d939a90969d9c919c9b97949b604082019160018060a01b03611b5d846121df565b16611c4e575b602081013591863b156101b2575f80976024604051809a8193638ea59e1d60e01b83528860048401525af1958615610dd657600197611c2e97611c3e575b50611bc06060611bb9611bb3866121df565b976121df565b9401612937565b90602081519101209160208151910120926040519460208601966001600160601b03199060601b16875260348601526001600160601b03199060601b1660548501526001600160801b03199060801b166068840152607883015260988201526098815261076560b882612042565b960198999199969294909661159e565b5f611c4891612042565b5f611ba1565b611c57836121df565b863b156101b257604051630959112b60e11b81526001600160a01b0390911660048201525f81602481838b5af18015610dd657611c95575b50611b63565b5f611c9f91612042565b5f611c8f565b611cc59060203d8111611cca575b611cbd8183612042565b81019061294b565b611673565b503d611cb3565b60405162461bcd60e51b815260206004820152602f60248201527f636f756c646e277420706572666f726d207472616e736974696f6e20666f722060448201526e756e6b6e6f776e2070726f6772616d60881b6064820152608490fd5b9498509690611dc992999695600194927fd756eca21e02cb0dbde1e44a4d9c6921b5c8aa4668cfa0752784b3dc855bce1e6020604051858152a16060611d786020838d01016122e1565b926020815191012091604051936020850195865265ffffffffffff60d01b9060d01b1660408501526040818d01013560468501528b010135606683015260868201526086815261076560a682612042565b9601929594939094611508565b60405162461bcd60e51b815260206004820152602660248201527f616c6c6f776564207072656465636573736f7220626c6f636b207761736e277460448201526508199bdd5b9960d21b6064820152608490fd5b60405162461bcd60e51b815260206004820152602560248201527f696e76616c69642070726576696f757320636f6d6d697474656420626c6f636b604482015264040d0c2e6d60db1b6064820152608490fd5b61081c838787611e949460208151910120906123c2565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b633ee5aeb560e01b5f5260045ffd5b346101b2575f3660031901126101b257602090600e5f80516020612b008339815191525401548152f35b9181601f840112156101b2578235916001600160401b0383116101b2576020808501948460051b0101116101b257565b600435906001600160a01b03821682036101b257565b35906001600160a01b03821682036101b257565b9181601f840112156101b2578235916001600160401b0383116101b257602083818601950101116101b257565b35906001600160801b03821682036101b257565b9060038210156107f15752565b15611fa157565b60405162461bcd60e51b815260206004820152603860248201527f726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f60448201527f6f6b757047656e657369734861736828296020666972737400000000000000006064820152608490fd5b604081019081106001600160401b03821117611a4e57604052565b606081019081106001600160401b03821117611a4e57604052565b90601f801991011681019081106001600160401b03821117611a4e57604052565b602080612090928195946040519682889351918291018585015e8201908382015203018085520183612042565b565b1561209957565b60405162461bcd60e51b815260206004820152601e60248201527f7369676e61747572657320766572696669636174696f6e206661696c656400006044820152606490fd5b908060209392818452848401375f828201840152601f01601f1916010190565b9395949061212e6001600160801b0393606095859360018060a01b031688526080602089015260808801916120de565b9616604085015216910152565b90604051918281549182825260208201905f5260205f20925f5b81811061216a57505061209092500383612042565b84546001600160a01b0316835260019485019487945060209093019201612155565b6001600160401b038111611a4e5760051b60200190565b919081101561180c5760051b0190565b805182101561180c5760209160051b010190565b604051906121d48261200c565b5f6020838281520152565b356001600160a01b03811681036101b25790565b5f80516020612b0083398151915254600801905f5b8381106122185750505050600190565b61222661099d8286856121a3565b6001600160a01b03165f9081526020849052604090205460ff161561224d57600101612208565b505050505f90565b3580151581036101b25790565b5f1981146104db5760010190565b6001600160a01b031680156122ce575f80516020612ae083398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b3565ffffffffffff811681036101b25790565b903590601e19813603018212156101b257018035906001600160401b0382116101b257602001918160051b360383136101b257565b919081101561180c5760051b8101359060be19813603018212156101b2570190565b903590601e19813603018212156101b257018035906001600160401b0382116101b2576020019181360383136101b257565b9291926001600160401b038211611a4e57604051916123a6601f8201601f191660200184612042565b8294818452818301116101b2578281602093845f960137010152565b9190916123d1600782016128c4565b926040519060208201908152602082526123ec604083612042565b612428603660405180936020820195601960f81b87523060601b60228401525180918484015e81015f838201520301601f198101835282612042565b5190205f9260085f9301925b868110156124af5761246a61246161245b6124548460051b86018661234b565b369161237d565b856129c3565b909291926129fd565b6001600160a01b03165f9081526020859052604090205460ff16612491575b600101612434565b9361249b90612262565b938585036124895750505050505050600190565b505050505050505f90565b5f80516020612ae0833981519152546001600160a01b031633036124da57565b63118cdaa760e01b5f523360045260245ffd5b905f80516020612b00833981519152549261250a84541515611f9a565b825f52600b840160205260ff60405f20541660038110156107f1576002036126fc576001600160801b03166509184e72a000016001600160801b0381116104db5760068401546040516323b872dd60e01b81523360048201523060248201526001600160801b03929092166044830152602090829060649082905f906001600160a01b03165af1908115610dd6575f916126dd575b5015612698576e5af43d82803e903d91602b57fd5bf360058401549160405160208101918583526040820152604081526125da606082612042565b51902091763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f526effffffffffffffffffffffffffffff199060781b1617602052603760095ff5916001600160a01b038316908115612689577f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf191600d602092825f52600c810184528560405f2055016126758154612262565b9055604051908152a2906509184e72a00090565b63b06ebf3d60e01b5f5260045ffd5b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b6126f6915060203d602011611cca57611cbd8183612042565b5f61259f565b60405162461bcd60e51b815260206004820152602e60248201527f636f6465206d7573742062652076616c696461746564206265666f726520707260448201526d37b3b930b69031b932b0ba34b7b760911b6064820152608490fd5b5f6040805161276681612027565b828152826020820152015260405161277d81612027565b5f815263ffffffff4316602082015265ffffffffffff4216604082015290565b9060098201908154612880579091600801905f5b81518110156127f2576001906001600160a01b036127cf82856121b3565b5116828060a01b03165f528360205260405f208260ff19825416179055016127b1565b5080519291506001600160401b038311611a4e57680100000000000000008311611a4e57815483835580841061285a575b50602001905f5260205f205f5b83811061283d5750505050565b82516001600160a01b031681830155602090920191600101612830565b825f528360205f2091820191015b8181106128755750612823565b5f8155600101612868565b606460405162461bcd60e51b815260206004820152602060248201527f72656d6f76652070726576696f75732076616c696461746f72732066697273746044820152fd5b61ffff6002820154915416908181029181830414901517156104db5761270f81018091116104db57612710900490565b905f1943014381116104db57805b61290d575b505f9150565b804083810361291e57506001925050565b156129325780156104db575f190180612902565b612907565b356001600160801b03811681036101b25790565b908160209103126101b2575180151581036101b25790565b903590601e19813603018212156101b257018035906001600160401b0382116101b2576020019160608202360383136101b257565b60ff5f80516020612b208339815191525460401c16156129b457565b631afcd79f60e31b5f5260045ffd5b81519190604183036129f3576129ec9250602082015190606060408401519301515f1a90612a5d565b9192909190565b50505f9160029190565b60048110156107f15780612a0f575050565b60018103612a265763f645eedf60e01b5f5260045ffd5b60028103612a41575063fce698f760e01b5f5260045260245ffd5b600314612a4b5750565b6335e2f38360e21b5f5260045260245ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612ad4579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15610dd6575f516001600160a01b03811615612aca57905f905f90565b505f906001905f90565b5050505f916003919056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a264697066735822122078c1ad60695c1fc31d1d6562e88d3081b77fc44d6dd36e9c0413e682ad9fe35164736f6c634300081a0033","sourceMap":"748:15481:159:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;748:15481:159;;;;;;:::i;:::-;3502:39;-1:-1:-1;;;;;;;;;;;748:15481:159;3502:39;:51;748:15481;;;;;;-1:-1:-1;748:15481:159;;;;;;-1:-1:-1;748:15481:159;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;748:15481:159;;;;;;:::i;:::-;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;;;;;;;748:15481:159;;;;;;4301:16:26;748:15481:159;-1:-1:-1;;;;;748:15481:159;;4726:16:26;;:34;;;;748:15481:159;4805:1:26;4790:16;:50;;;;748:15481:159;4855:13:26;:30;;;;748:15481:159;4851:91:26;;;-1:-1:-1;;748:15481:159;;4805:1:26;748:15481:159;-1:-1:-1;;;;;;;;;;;748:15481:159;6961:1:26;;748:15481:159;4979:67:26;;748:15481:159;6893:76:26;;;:::i;:::-;;;:::i;:::-;6961:1;:::i;:::-;748:15481:159;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:25;;:::i;:::-;748:15481:159;16097:27;;-1:-1:-1;;748:15481:159;;;;;;;;;16078:52;748:15481;16078:52;;748:15481;;;;16078:52;;;;;;:::i;:::-;748:15481;;;;16068:63;;:89;748:15481;;-1:-1:-1;;;;;;;;;;;748:15481:159;1514:17;;:::i;:::-;748:15481;;;;4805:1:26;748:15481:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;1564:53;;748:15481;;;1564:53;748:15481;;1541:20;;748:15481;;-1:-1:-1;;;;;;748:15481:159;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1627:25;;;748:15481;;-1:-1:-1;;748:15481:159;;;;;577:4:161;;;:::i;:::-;748:15481:159;;;;;;;:::i;:::-;577:4:161;;;748:15481:159;577:4:161;;;748:15481:159;577:4:161;;;748:15481:159;;577:4:161;;;;;;;;;;;1725:39:159;;;;;1774:22;1725:39;;;:::i;:::-;748:15481;;:::i;:::-;;674:18:161;748:15481:159;;;;;;:::i;:::-;447:13:161;748:15481:159;;3487:60:161;748:15481:159;1774:22;748:15481;;-1:-1:-1;;;;;;748:15481:159;;;;;5066:101:26;;748:15481:159;5066:101:26;748:15481:159;5142:14:26;748:15481:159;-1:-1:-1;;;748:15481:159;-1:-1:-1;;;;;;;;;;;748:15481:159;;-1:-1:-1;;;;;;;;;;;748:15481:159;;4805:1:26;748:15481:159;;5142:14:26;748:15481:159;577:4:161;748:15481:159;;;;;;:::i;:::-;577:4:161;;;;;;;;748:15481:159;;;;;;;;;;;;4979:67:26;-1:-1:-1;;748:15481:159;;;-1:-1:-1;;;;;;;;;;;748:15481:159;4979:67:26;;;4851:91;6498:23;;;748:15481:159;4908:23:26;748:15481:159;;4908:23:26;4855:30;4872:13;;;4855:30;;;4790:50;4818:4;4810:25;:30;;-1:-1:-1;4790:50:26;;4726:34;;;-1:-1:-1;4726:34:26;;748:15481:159;;;;;;-1:-1:-1;;748:15481:159;;;;2357:1:25;748:15481:159;;:::i;:::-;2303:62:25;;:::i;2357:1::-;748:15481:159;;;;;;;-1:-1:-1;;748:15481:159;;;;;;3650:28;-1:-1:-1;;;;;;;;;;;748:15481:159;3650:28;748:15481;;;;;;;;;;;;;;-1:-1:-1;;748:15481:159;;;;;4071:56;4098:28;-1:-1:-1;;;;;;;;;;;748:15481:159;4098:28;4071:56;:::i;:::-;748:15481;;;;;;;;;;;;-1:-1:-1;;748:15481:159;;;;;3792:43;-1:-1:-1;;;;;;;;;;;748:15481:159;3792:43;748:15481;;;;;;;;;;;;;-1:-1:-1;;748:15481:159;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;;;;;;;748:15481:159;;7940:107;748:15481;;7948:38;;7940:107;:::i;:::-;8276:19;;;;748:15481;;;8152:3;8123:27;;;;;;748:15481;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8276:82;748:15481;;;8464:20;3346::161;8464::159;8854:76;8464:20;;;;;:::i;:::-;;;;748:15481;;;;;;;;;8551:24;748:15481;;;;;;;;8593:39;;;:41;748:15481;;8593:41;:::i;:::-;748:15481;;8460:279;8794:20;;;:::i;:::-;748:15481;;8758:57;748:15481;;;;;;8758:57;3346:20:161;:::i;:::-;748:15481:159;;3310:57:161;748:15481:159;3310:57:161;;748:15481:159;;;;;;;;;;;;3310:57:161;;;;;;:::i;:::-;748:15481:159;3300:68:161;;8854:76:159;;:::i;:::-;8152:3;748:15481;8108:13;;;8460:279;748:15481;;;;;;;;;;;;;;;;8460:279;;748:15481;;;-1:-1:-1;;;748:15481:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;748:15481:159;;;;;;;;;;;;;;;;;;;8123:27;;8972:78;8123:27;;8951:155;8123:27;748:15481;;;;;9004:32;8972:78;;:::i;:::-;8951:155;:::i;748:15481::-;;;;;;-1:-1:-1;;748:15481:159;;;;-1:-1:-1;;;;;;;;;;;748:15481:159;;2786:23;748:15481;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;;;;-1:-1:-1;;748:15481:159;;;;;2669:30;-1:-1:-1;;;;;;;;;;;748:15481:159;2669:30;748:15481;;;;;;;;;;;;;-1:-1:-1;;748:15481:159;;;;4366:22;-1:-1:-1;;;;;;;;;;;748:15481:159;4366:22;748:15481;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;748:15481:159;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;748:15481:159;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;748:15481:159;;;;5239:28;748:15481;5239:28;;5166:129;5186:23;;;;;;748:15481;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;748:15481:159;;;;;;;;;5239:28;748:15481;;;5211:3;5268:15;;;5239:28;5268:15;;;;:::i;:::-;;:::i;:::-;748:15481;;;;;;-1:-1:-1;748:15481:159;;;;;-1:-1:-1;748:15481:159;;5230:54;;;;:::i;:::-;748:15481;;5171:13;;748:15481;;;;;;-1:-1:-1;;748:15481:159;;;;;5400:36;-1:-1:-1;;;;;;;;;;;748:15481:159;5400:36;748:15481;;;;;;;;;;;;;-1:-1:-1;;748:15481:159;;;;;;:::i;:::-;4890:31;-1:-1:-1;;;;;;;;;;;748:15481:159;4890:31;:43;748:15481;;;;;;-1:-1:-1;748:15481:159;;;;;-1:-1:-1;748:15481:159;;;;;;;;;;;;;;-1:-1:-1;;748:15481:159;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;748:15481:159;;;;-1:-1:-1;;;;;;;;;;;748:15481:159;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;;;;-1:-1:-1;;748:15481:159;;;;-1:-1:-1;;;;;;;;;;;748:15481:159;;;;;;5951:26;;;748:15481;;5941:37;5997:25;;;748:15481;;;;;;;-1:-1:-1;;;748:15481:159;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;748:15481:159;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;748:15481:159;;;;-1:-1:-1;;;;;;;;;;;748:15481:159;3021:35;;748:15481;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;;;;-1:-1:-1;;748:15481:159;;;;;;:::i;:::-;;;4238:25;-1:-1:-1;;;;;;;;;;;748:15481:159;4238:25;-1:-1:-1;;;;;748:15481:159;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;748:15481:159;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;748:15481:159;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;748:15481:159;;;;4717:19;748:15481;4717:19;;4647:120;4667:20;;;;;;748:15481;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;4689:3;4743:12;;;;;:::i;:::-;748:15481;;;;;;;;;;;;4708:48;;;;;:::i;:::-;748:15481;;;;;;;;;;;4652:13;;748:15481;;;;;;-1:-1:-1;;748:15481:159;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;6987:52;748:15481;;;;;6987:52;:::i;:::-;-1:-1:-1;;;;;748:15481:159;;;;;;;7050:77;;;;;;748:15481;;;;;;;;;;;;7050:77;;7079:10;748:15481;7050:77;;;:::i;:::-;;;;;;;;;;;;748:15481;7050:77;;;748:15481;;;;;;;;7050:77;748:15481;7050:77;;;:::i;:::-;;;;;748:15481;;;;;;;;;;;;;;;-1:-1:-1;;748:15481:159;;;;2303:62:25;;:::i;:::-;-1:-1:-1;;;;;;;;;;;748:15481:159;;-1:-1:-1;;;;;;748:15481:159;;;;;;;-1:-1:-1;;;;;748:15481:159;3975:40:25;748:15481:159;;3975:40:25;748:15481:159;;;;;;;-1:-1:-1;;748:15481:159;;;;;3937:43;-1:-1:-1;;;;;;;;;;;748:15481:159;3937:43;748:15481;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;-1:-1:-1;748:15481:159;;;;;;;;;;;;;;;;;;;-1:-1:-1;;748:15481:159;;;;2303:62:25;;:::i;:::-;-1:-1:-1;;;;;;;;;;;748:15481:159;;;;;;6431:44:26;;;;748:15481:159;6427:105:26;;-1:-1:-1;;748:15481:159;;;-1:-1:-1;;;;;;;;;;;748:15481:159;-1:-1:-1;;;;;;;;;;;748:15481:159;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:25;;:::i;:::-;748:15481:159;16097:27;;-1:-1:-1;;748:15481:159;;;;;;;;6656:20:26;748:15481:159;2417:25;748:15481;;;;;16078:52;;;;748:15481;;;16078:52;;;;;;;:::i;:::-;748:15481;;;;16068:63;;:89;748:15481;;-1:-1:-1;;;;;;;;;;;748:15481:159;2086:17;;:::i;:::-;748:15481;;;;6593:4:26;748:15481:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;2139:23;;748:15481;2113:23;;748:15481;;;;;;;2243:28;;748:15481;2243:28;;;748:15481;;2243:28;2173;;748:15481;;;;;;;;;2308:70;748:15481;2334:43;;;748:15481;:::i;:::-;2308:70;;:::i;:::-;2417:25;2389;;748:15481;;;;;;;;;-1:-1:-1;;;748:15481:159;-1:-1:-1;;;;;;;;;;;748:15481:159;;-1:-1:-1;;;;;;;;;;;748:15481:159;;1900:1;748:15481;;6656:20:26;748:15481:159;;;-1:-1:-1;;;;;748:15481:159;-1:-1:-1;;;;;748:15481:159;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;-1:-1:-1;;;;;;;748:15481:159;;;;;;;-1:-1:-1;;;;;;;748:15481:159;;;;;;;;;;;;;-1:-1:-1;;;;;;748:15481:159;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6431:44:26;748:15481:159;1900:1;-1:-1:-1;;;;;748:15481:159;;6450:25:26;;6431:44;;748:15481:159;;;;;;-1:-1:-1;;748:15481:159;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;7424:52;;;;;:::i;:::-;748:15481;;;;;;;;;;;7592:32;748:15481;7592:32;;748:15481;;;;;;;;7592:32;;;748:15481;7592:32;;:::i;:::-;748:15481;7582:43;;7539:87;;;;;748:15481;;-1:-1:-1;;;7539:87:159;;-1:-1:-1;;;;;748:15481:159;;;;7539:87;;748:15481;;;;;-1:-1:-1;748:15481:159;;;-1:-1:-1;7539:87:159;;;;;;;;;748:15481;7637:75;;;;;;;748:15481;;;;;;;;;;;;7637:75;;7664:10;748:15481;7637:75;;;:::i;7539:87::-;748:15481;7539:87;;;:::i;:::-;;;;748:15481;;;;;;-1:-1:-1;;748:15481:159;;;;-1:-1:-1;;;;;;;;;;;748:15481:159;2903:35;;748:15481;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;;;;-1:-1:-1;;748:15481:159;;;;;;:::i;:::-;2303:62:25;;:::i;:::-;-1:-1:-1;;;;;;;;;;;748:15481:159;;5669:23;748:15481;;-1:-1:-1;;;;;;748:15481:159;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;;;;;;-1:-1:-1;;748:15481:159;;;;;-1:-1:-1;;;;;;;;;;;748:15481:159;;;;;;;;;;;;;;-1:-1:-1;;748:15481:159;;;;;;;;6240:16;;;;;:36;;748:15481;;;;6494:19;-1:-1:-1;;;;;;;;;;;748:15481:159;6355:107;748:15481;;6363:38;;6355:107;:::i;:::-;6494:19;748:15481;;;;;;;;;;;;;;;;;;;;;6729:45;748:15481;;;;;;;;;;;6679:34;748:15481;;;;;;;;;;;;;;;;;6729:45;748:15481;;;;-1:-1:-1;;;748:15481:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;748:15481:159;;;;;;;;;;-1:-1:-1;;;748:15481:159;;;;;;;;;;;;-1:-1:-1;;;748:15481:159;;;;;;;6240:36;6260:11;748:15481;6260:11;:16;;6240:36;;748:15481;;;;;;-1:-1:-1;;748:15481:159;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;:::i;:::-;7368:53:64;;;516:66:62;7368:53:64;1292:93:62;;7628:52:64;;;1503:4:62;516:66;7628:52:64;-1:-1:-1;;;;;;;;;;;748:15481:159;;9318:107;748:15481;;9326:38;;9318:107;:::i;:::-;748:15481;;;9532:3;9502:28;;;;;;748:15481;;;;;;;;;;;;;;;;;;11280:27;;;748:15481;;;;;11316:39;748:15481;11280:75;748:15481;;11437:58;748:15481;;;;11461:33;748:15481;11437:58;:::i;:::-;748:15481;;;;;;;;;;;11755:26;748:15481;;;;11755:26;;:::i;:::-;748:15481;;;;;;;:::i;:::-;;;;;11708:74;;;;748:15481;11280:27;;;;748:15481;;;;;;;;;;;;;;11839:13;748:15481;11834:273;11895:3;11858:28;748:15481;;;11858:28;;;;;:::i;:::-;11854:39;;;;;;;11962:31;748:15481;11962:28;748:15481;;;11858:28;;;;11962;:::i;:::-;:31;;:::i;:::-;748:15481;-1:-1:-1;;;;;;;;;;;748:15481:159;12648:24;;;:::i;:::-;-1:-1:-1;;;;;748:15481:159;;;;;12619:28;;;748:15481;;;;;;12619:59;748:15481;;12807:32;;748:15481;-1:-1:-1;;;;;748:15481:159;;;-1:-1:-1;;;;;748:15481:159;;12876:24;748:15481;12902:31;748:15481;12876:24;;;:::i;:::-;12902:31;;;:::i;:::-;748:15481;;-1:-1:-1;;;12850:84:159;;-1:-1:-1;;;;;748:15481:159;;;;12850:84;;748:15481;;;;;;;;;;;;;;-1:-1:-1;12850:84:159;;;;;;;;11895:3;-1:-1:-1;;;;;;12975:24:159;;;:::i;:::-;748:15481;;;;;13112:3;13075:28;11858;13075;;;;:::i;:::-;13071:39;;;;;;;13164:28;11858;13075;;13164;;:::i;:::-;748:15481;;;;;;;;;;;;;;;;13252:17;748:15481;13252:17;;;;;;:::i;:::-;13271:11;748:15481;13271:11;;;;;;:::i;:::-;13210:73;;;;;748:15481;;-1:-1:-1;;;13210:73:159;;748:15481;13210:73;;748:15481;;;-1:-1:-1;;;;;748:15481:159;;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;13210:73;;748:15481;;;;13210:73;;;;;;;748:15481;13210:73;;;13112:3;748:15481;;;;;;;;;;;;1503:4:62;748:15481:159;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;5705:65:161;;;748:15481:159;;;;;;;;-1:-1:-1;;748:15481:159;;;;;11858:28;748:15481;-1:-1:-1;;748:15481:159;;;;;;5705:65:161;;;13210:73:159;748:15481;5705:65:161;:::i;:::-;748:15481:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5705:65:161;;748:15481:159;;;;;;:::i;:::-;13112:3;748:15481;13056:13;;;13210:73;748:15481;13210:73;;;:::i;:::-;;;;748:15481;;;;;;;;;;;;13071:39;;;;;;;;;;;;;;;748:15481;13440:13;748:15481;13435:687;13493:3;13459:25;;;;;;:::i;:::-;13455:36;;;;;;;13459:25;;13544:28;13459:25;;;;13544;13459;;13544;;:::i;:28::-;13591:20;11858:28;13591:20;;748:15481;13591:28;;;13587:438;13591:28;;;13675:19;748:15481;13675:19;;;:::i;:::-;13696:15;748:15481;13696:15;;;;:::i;:::-;13713:13;;;748:15481;13713:13;;;:::i;:::-;13639:88;;;;;;748:15481;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;;;13639:88;;748:15481;;13639:88;;748:15481;;;;;;;;;;;11858:28;748:15481;;;;;;;;;:::i;:::-;;;13210:73;748:15481;;;13639:88;;;;;;;;;;13587:438;;;748:15481;;;;;;;;;;;;13459:25;748:15481;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;748:15481:159;;;;13459:25;748:15481;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;748:15481:159;;;;;;;14056:55;748:15481;;;;1503:4:62;748:15481:159;;3677:243:161;748:15481:159;;;;;;11858:28;748:15481;;;;;;3776:15:161;;577:4;;748:15481:159;;;;;;;;;;;;;3677:243:161;;;;;;748:15481:159;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;748:15481:159;;11858:28;748:15481;;;;;;13210:73;748:15481;;;;;;;3677:243:161;;;;;;;;;;:::i;14056:55:159:-;13493:3;748:15481;13440:13;;;748:15481;;;;;;;;;;;;13639:88;748:15481;13639:88;;;:::i;:::-;;;;13587:438;13809:19;748:15481;13809:19;;;:::i;:::-;13850:15;;748:15481;13850:15;;;;:::i;:::-;13887:13;;748:15481;13887:13;;;:::i;:::-;13967:25;13459;13967;;748:15481;;;;;;;;;;;13766:244;;;;;748:15481;;-1:-1:-1;;;13766:244:159;;-1:-1:-1;;;;;748:15481:159;;;;13766:244;;748:15481;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;:::i;:::-;;;;;;;;13210:73;748:15481;;;;;;;13766:244;;;;;;;;;;13587:438;;;;13766:244;748:15481;13766:244;;;:::i;:::-;;;;13455:36;;;;;;;;;;;;;;;;;;;748:15481;14136:26;;748:15481;;;;;;14136:26;;;:::i;:::-;748:15481;14132:123;;13435:687;748:15481;14289:29;;748:15481;14265:54;;;;;;748:15481;;;;;;;;;;;;;14265:54;;;748:15481;14265:54;;748:15481;14265:54;;;;;;;1503:4:62;14265:54:159;12028:68;14265:54;;;13435:687;14375:24;14496:31;748:15481;14456:26;14375:24;;;:::i;:::-;14456:26;;:::i;:::-;12902:31;;14496;:::i;:::-;748:15481;;;;;;14541:27;748:15481;;;;;;14582:25;748:15481;;;4406:101:161;748:15481:159;4406:101:161;;748:15481:159;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;-1:-1:-1;;;;;748:15481:159;;11858:28;748:15481;;;;;;;;;;;;;;;4406:101:161;;;;;;:::i;12028:68:159:-;11895:3;748:15481;11839:13;;;;;;;;;;;14265:54;748:15481;14265:54;;;:::i;:::-;;;;14132:123;14217:26;;;:::i;:::-;14192:52;;;;;748:15481;;-1:-1:-1;;;14192:52:159;;-1:-1:-1;;;;;748:15481:159;;;;14192:52;;748:15481;-1:-1:-1;748:15481:159;;;-1:-1:-1;14192:52:159;;;;;;;;;14132:123;;;;14192:52;748:15481;14192:52;;;:::i;:::-;;;;12850:84;;;748:15481;12850:84;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;748:15481;;;-1:-1:-1;;;748:15481:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;13210:73:159;748:15481;;;;;;11854:39;;;;;;9658:75;11854:39;;;;1503:4:62;11854:39:159;;12122:37;748:15481;;;;;;12122:37;748:15481;12250:26;748:15481;;;;11755:26;12250;:::i;:::-;748:15481;;;;;;12390:28;748:15481;;;2716:98:161;748:15481:159;2716:98:161;;748:15481:159;;;;;;;;;;;;;;;;;;11316:39;748:15481;;;;;;;11461:33;748:15481;;;;;;;;;;2716:98:161;;;;;;:::i;9658:75:159:-;9532:3;748:15481;9487:13;;;;;;;;748:15481;;;-1:-1:-1;;;748:15481:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;13210:73:159;748:15481;;;;;;;;;-1:-1:-1;;;748:15481:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;13210:73:159;748:15481;;;;;;9502:28;9775:79;9502:28;;;9754:156;9502:28;748:15481;;;;;9807:33;9775:79;;:::i;9754:156::-;748:15481;516:66:62;7628:52:64;748:15481:159;1292:93:62;1344:30;;;748:15481:159;1344:30:62;748:15481:159;;1344:30:62;748:15481:159;;;;;;-1:-1:-1;;748:15481:159;;;;;;5527:42;-1:-1:-1;;;;;;;;;;;748:15481:159;5527:42;748:15481;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;748:15481:159;;;;;;:::o;:::-;;;-1:-1:-1;;;;;748:15481:159;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;748:15481:159;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;748:15481:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;:::o;:::-;;;5705:65:161;;748:15481:159;;;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;748:15481:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;748:15481:159;;;;;;;;-1:-1:-1;;748:15481:159;;;;:::o;:::-;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;-1:-1:-1;748:15481:159;;-1:-1:-1;748:15481:159;;-1:-1:-1;748:15481:159;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;-1:-1:-1;748:15481:159;;;;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;748:15481:159;;;;;;;:::o;:::-;;-1:-1:-1;;;;;748:15481:159;;;;;;;:::o;3069:342::-;-1:-1:-1;;;;;;;;;;;748:15481:159;3274:36;;;748:15481;3226:22;;;;;;3393:11;;;;3274:36;3069:342;:::o;3250:3::-;3311:14;;;;;;:::i;:::-;-1:-1:-1;;;;;748:15481:159;-1:-1:-1;748:15481:159;;;;;;;;;;;;;3273:53;3269:104;;3274:36;748:15481;3211:13;;3269:104;3346:12;;;;748:15481;3346:12;:::o;748:15481::-;;;;;;;;;;:::o;:::-;-1:-1:-1;;748:15481:159;;;;;;;:::o;3405:215:25:-;-1:-1:-1;;;;;748:15481:159;3489:22:25;;3485:91;;-1:-1:-1;;;;;;;;;;;748:15481:159;;-1:-1:-1;;;;;;748:15481:159;;;;;;;-1:-1:-1;;;;;748:15481:159;3975:40:25;-1:-1:-1;;3975:40:25;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;748:15481:159;;3509:1:25;3534:31;748:15481:159;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;5705:65:161;748:15481:159;;-1:-1:-1;;748:15481:159;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;748:15481:159;;;;;;:::o;4530:787:161:-;;;;4726:48;4748:25;;;4726:48;:::i;:::-;748:15481:159;;;4849:27:161;;;;748:15481:159;;;4849:27:161;;;;748:15481:159;4849:27:161;;:::i;:::-;2858:45:68;748:15481:159;;;2858:45:68;;4849:27:161;2858:45:68;;748:15481:159;;;;;;4811:4:161;748:15481:159;;;;;;;;;;;;;;;;;;;;2858:45:68;;5705:65:161;;2858:45:68;;;;;;:::i;:::-;748:15481:159;2848:56:68;;748:15481:159;4930:13:161;5109:36;748:15481:159;5109:36:161;;4925:363;4969:3;4945:22;;;;;;3915:8:66;3859:27;748:15481:159;;;;;;;;;:::i;:::-;;;;:::i;:::-;3859:27:66;;:::i;:::-;3915:8;;;;;:::i;:::-;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;;;;;5105:173:161;;4969:3;5109:36;748:15481:159;4930:13:161;;5105:173;5180:17;;;;:::i;:::-;:30;;;;5105:173;5176:88;5234:11;;;;;;;5109:36;5234:11;:::o;4945:22::-;;;;;;;;748:15481:159;4530:787:161;:::o;2658:162:25:-;-1:-1:-1;;;;;;;;;;;748:15481:159;-1:-1:-1;;;;;748:15481:159;966:10:30;2717:23:25;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:25;966:10:30;2763:40:25;748:15481:159;;-1:-1:-1;2763:40:25;9959:1144:159;;-1:-1:-1;;;;;;;;;;;748:15481:159;;10154:107;748:15481;;10162:38;;10154:107;:::i;:::-;748:15481;-1:-1:-1;748:15481:159;10293:19;;;748:15481;;;;-1:-1:-1;748:15481:159;;;;;;;;;10331:24;10293:62;748:15481;;-1:-1:-1;;;;;748:15481:159;10525:18;748:15481;-1:-1:-1;;;;;748:15481:159;;;;14734:32;;;748:15481;;;-1:-1:-1;;;14727:88:159;;14781:10;14734:20;14727:88;;748:15481;14801:4;748:15481;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;;14727:88;;748:15481;;-1:-1:-1;;;;;;;748:15481:159;14727:88;;;;;;;-1:-1:-1;14727:88:159;;;9959:1144;748:15481;;;;3743:569:44;10821:32:159;;;748:15481;;;;;10865:32;;748:15481;;;;;;;;;10865:32;;;748:15481;10865:32;;:::i;:::-;748:15481;10855:43;;3743:569:44;;;;;;;;-1:-1:-1;3743:569:44;;;;;;;;748:15481:159;3743:569:44;;;-1:-1:-1;3743:569:44;748:15481:159;-1:-1:-1;;;;;748:15481:159;;;4325:22:44;;4321:85;;11018:32:159;10910:37;10967:33;748:15481;10910:37;748:15481;-1:-1:-1;748:15481:159;10910:28;;;748:15481;;;;-1:-1:-1;748:15481:159;;10967:33;:35;748:15481;;10967:35;:::i;:::-;748:15481;;;;;;;11018:32;11061:35;10525:18;9959:1144;:::o;4321:85:44:-;4370:25;;;-1:-1:-1;4370:25:44;14734:20:159;-1:-1:-1;4370:25:44;748:15481:159;;;-1:-1:-1;;;748:15481:159;;;14734:20;748:15481;;;;;;;;;;;;;14727:88;;748:15481;14727:88;;;;748:15481;14727:88;748:15481;14727:88;;;;;;;:::i;:::-;;;;748:15481;;;-1:-1:-1;;;748:15481:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;748:15481:159;;;;;;;3943:169:161;-1:-1:-1;748:15481:159;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;748:15481:159;;;4066:12:161;748:15481:159;;4030:75:161;;748:15481:159;;4088:15:161;748:15481:159;;4030:75:161;;748:15481:159;3943:169:161;:::o;14883:424:159:-;;14991:40;;;748:15481;;;;;15096:13;;15158:36;;;15042:1;15139:3;748:15481;;15111:26;;;;;15217:4;;-1:-1:-1;;;;;15195:18:159;748:15481;15195:18;;:::i;:::-;748:15481;;;;;;;;-1:-1:-1;748:15481:159;;;;;-1:-1:-1;748:15481:159;;;;;;;;;;;15096:13;;15111:26;-1:-1:-1;748:15481:159;;;15111:26;-1:-1:-1;;;;;;748:15481:159;;;;;;;;;;;;;;;;;;;15091:141;748:15481;;;;15042:1;748:15481;;15042:1;748:15481;15042:1;748:15481;;;;;;14883:424;;;;:::o;748:15481::-;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;15217:4;748:15481;;;;;15042:1;748:15481;;;15042:1;748:15481;;;;;;;;;;;;;;;;15042:1;748:15481;;15217:4;748:15481;;;;;;;;;;;;;;;;;;;;;;;;;;;;5323:272:161;748:15481:159;5495:23:161;;;748:15481:159;;;;;;;;;;;;;;;;;;;5575:4:161;748:15481:159;;;;;;;5583:5:161;748:15481:159;;5323:272:161;:::o;2837:340::-;;748:15481:159;;2935:12:161;748:15481:159;2935:12:161;748:15481:159;;;;2918:230:161;2953:5;;;2918:230;-1:-1:-1;748:15481:159;;-1:-1:-1;2837:340:161:o;2960:3::-;2993:12;;3023:11;;;;;-1:-1:-1;2950:1:161;;-1:-1:-1;;3054:11:161:o;3019:119::-;3090:8;3086:52;;748:15481:159;;;;-1:-1:-1;;748:15481:159;;2923:28:161;;3086:52;3118:5;;748:15481:159;;-1:-1:-1;;;;;748:15481:159;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;748:15481:159;;;;;;;;;;;;;;;;:::o;7084:141:26:-;748:15481:159;-1:-1:-1;;;;;;;;;;;748:15481:159;;;;7150:18:26;7146:73;;7084:141::o;7146:73::-;7191:17;;;-1:-1:-1;7191:17:26;;-1:-1:-1;7191:17:26;2129:766:66;748:15481:159;;;2129:766:66;2276:2;2256:22;;2276:2;;2739:25;2539:180;;;;;;;;;;;;;;;-1:-1:-1;2539:180:66;2739:25;;:::i;:::-;2732:32;;;;;:::o;2252:637::-;2795:83;;2811:1;2795:83;2815:35;2795:83;;:::o;7196:532::-;748:15481:159;;;;;;7282:29:66;;;7327:7;;:::o;7278:444::-;748:15481:159;7378:38:66;;748:15481:159;;7439:23:66;;;7291:20;7439:23;748:15481:159;7291:20:66;7439:23;7374:348;7492:35;7483:44;;7492:35;;7550:46;;;;7291:20;7550:46;748:15481:159;;;7291:20:66;7550:46;7479:243;7626:30;7617:39;7613:109;;7479:243;7196:532::o;7613:109::-;7679:32;;;7291:20;7679:32;748:15481:159;;;7291:20:66;7679:32;5140:1530;;;6199:66;6186:79;;6182:164;;748:15481:159;;;;;;-1:-1:-1;748:15481:159;;;;;;;;;;;;;;;;;;;6457:24:66;;;;;;;;;-1:-1:-1;6457:24:66;-1:-1:-1;;;;;748:15481:159;;6495:20:66;6491:113;;6614:49;-1:-1:-1;6614:49:66;-1:-1:-1;5140:1530:66;:::o;6491:113::-;6531:62;-1:-1:-1;6531:62:66;6457:24;6531:62;-1:-1:-1;6531:62:66;:::o;6182:164::-;6281:54;;;6297:1;6281:54;6301:30;6281:54;;:::o","linkReferences":{}},"methodIdentifiers":{"areValidators(address[])":"8f381dbe","codeState(bytes32)":"c13911e8","codesStates(bytes32[])":"82bdeaad","commitBlocks((bytes32,uint48,bytes32,bytes32,(address,bytes32,address,uint128,(bytes32,address,uint128)[],(bytes32,address,bytes,uint128,(bytes32,bytes4))[])[])[],bytes[])":"01b1d156","commitCodes((bytes32,bool)[],bytes[])":"e97d3eb3","computeSettings()":"84d22a4f","createProgram(bytes32,bytes32,bytes,uint128)":"8074b455","createProgramWithDecoder(address,bytes32,bytes32,bytes,uint128)":"666d124c","genesisBlockHash()":"28e24b3d","initialize(address,address,address,address,address[])":"f8453e7c","isValidator(address)":"facd743b","latestCommittedBlockHash()":"c9f16a11","lookupGenesisHash()":"8b1edf1e","mirrorImpl()":"e6fabc09","mirrorProxyImpl()":"65ecfea2","owner()":"8da5cb5b","programCodeId(address)":"9067088e","programsCodeIds(address[])":"baaf0201","programsCount()":"96a2ddfa","reinitialize()":"6c2eb350","renounceOwnership()":"715018a6","requestCodeValidation(bytes32,bytes32)":"1c149d8a","setMirror(address)":"3d43b418","signingThresholdPercentage()":"efd81abc","transferOwnership(address)":"f2fde38b","validatedCodesCount()":"007a32e7","validatorsCount()":"ed612f8c","validatorsKeys()":"6e61dd49","validatorsThreshold()":"edc87225","wrappedVara()":"88f50cf0"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"BlockCommitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"CodeGotValidated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blobTxHash\",\"type\":\"bytes32\"}],\"name\":\"CodeValidationRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"threshold\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"wvaraPerSecond\",\"type\":\"uint128\"}],\"name\":\"ComputationSettingsChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"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\":\"actor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"}],\"name\":\"ProgramCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"StorageSlotChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"ValidatorsChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_validators\",\"type\":\"address[]\"}],\"name\":\"areValidators\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_codeId\",\"type\":\"bytes32\"}],\"name\":\"codeState\",\"outputs\":[{\"internalType\":\"enum Gear.CodeState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_codesIds\",\"type\":\"bytes32[]\"}],\"name\":\"codesStates\",\"outputs\":[{\"internalType\":\"enum Gear.CodeState[]\",\"name\":\"\",\"type\":\"uint8[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"uint48\",\"name\":\"timestamp\",\"type\":\"uint48\"},{\"internalType\":\"bytes32\",\"name\":\"previousCommittedBlock\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"predecessorBlock\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"actorId\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"newStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"inheritor\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"valueToReceive\",\"type\":\"uint128\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Gear.ValueClaim[]\",\"name\":\"valueClaims\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"code\",\"type\":\"bytes4\"}],\"internalType\":\"struct Gear.ReplyDetails\",\"name\":\"replyDetails\",\"type\":\"tuple\"}],\"internalType\":\"struct Gear.Message[]\",\"name\":\"messages\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Gear.StateTransition[]\",\"name\":\"transitions\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Gear.BlockCommitment[]\",\"name\":\"_blockCommitments\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_signatures\",\"type\":\"bytes[]\"}],\"name\":\"commitBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"internalType\":\"struct Gear.CodeCommitment[]\",\"name\":\"_codeCommitments\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_signatures\",\"type\":\"bytes[]\"}],\"name\":\"commitCodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeSettings\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"threshold\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"wvaraPerSecond\",\"type\":\"uint128\"}],\"internalType\":\"struct Gear.ComputationSettings\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"createProgram\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_decoderImpl\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"createProgramWithDecoder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirror\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirrorProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wrappedVara\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"_validatorsKeys\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestCommittedBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lookupGenesisHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorImpl\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorProxyImpl\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_programId\",\"type\":\"address\"}],\"name\":\"programCodeId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_programsIds\",\"type\":\"address[]\"}],\"name\":\"programsCodeIds\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"programsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_blobTxHash\",\"type\":\"bytes32\"}],\"name\":\"requestCodeValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newMirror\",\"type\":\"address\"}],\"name\":\"setMirror\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"signingThresholdPercentage\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatedCodesCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsKeys\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wrappedVara\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}]},\"events\":{\"BlockCommitted(bytes32)\":{\"details\":\"This is an *informational* event, signaling that the block outcome has been committed.\",\"params\":{\"hash\":\"The block hash that was \\\"finalized\\\" in relation to the necessary transitions.\"}},\"CodeGotValidated(bytes32,bool)\":{\"details\":\"This is an *informational* event, signaling the results of code validation.\",\"params\":{\"id\":\"The ID of the code that was validated.\",\"valid\":\"The result of the validation: indicates whether the code ID can be used for program creation.\"}},\"CodeValidationRequested(bytes32,bytes32)\":{\"details\":\"This is a *requesting* event, signaling that validators need to download and validate the code from the transaction blob.\",\"params\":{\"blobTxHash\":\"The transaction hash that contains the WASM blob. Set to zero if applied to the current transaction.\",\"id\":\"The expected code ID of the applied WASM blob, represented as a Blake2 hash.\"}},\"ComputationSettingsChanged(uint64,uint128)\":{\"details\":\"This is both an *informational* and *requesting* event, signaling that an authority decided to change the computation settings. Users and program authors may want to adjust their practices, while validators need to apply the changes internally starting from the next block.\",\"params\":{\"threshold\":\"The amount of Gear gas initially allocated for free to allow the program to decide if it wants to process the incoming message.\",\"wvaraPerSecond\":\"The amount of WVara to be charged from the program's execution balance per second of computation.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"ProgramCreated(address,bytes32)\":{\"details\":\"This is both an *informational* and *requesting* event, signaling the creation of a new program and its Ethereum mirror. Validators need to initialize it with a zeroed hash state internally.\",\"params\":{\"actor\":\"ID of the actor that was created. It is accessible inside the co-processor and on Ethereum by this identifier.\",\"codeId\":\"The code ID of the WASM implementation of the created program.\"}},\"StorageSlotChanged()\":{\"details\":\"This is both an *informational* and *requesting* event, signaling that an authority decided to wipe the router state, rendering all previously existing codes and programs ineligible. Validators need to wipe their databases immediately.\"},\"ValidatorsChanged()\":{\"details\":\"This is an *informational* event, signaling that only new validators are now able to pass commitment signing verification.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling 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.\"}},\"version\":1},\"userdoc\":{\"events\":{\"BlockCommitted(bytes32)\":{\"notice\":\"Emitted when all necessary state transitions have been applied and states have changed.\"},\"CodeGotValidated(bytes32,bool)\":{\"notice\":\"Emitted when a code, previously requested for validation, receives validation results, so its CodeStatus changed.\"},\"CodeValidationRequested(bytes32,bytes32)\":{\"notice\":\"Emitted when a new code validation request is submitted.\"},\"ComputationSettingsChanged(uint64,uint128)\":{\"notice\":\"Emitted when the computation settings have been changed.\"},\"ProgramCreated(address,bytes32)\":{\"notice\":\"Emitted when a new program within the co-processor is created and is now available on-chain.\"},\"StorageSlotChanged()\":{\"notice\":\"Emitted when the router's storage slot has been changed.\"},\"ValidatorsChanged()\":{\"notice\":\"Emitted when the election mechanism forces the validator set to be changed.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Router.sol\":\"Router\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":symbiotic-core/=lib/symbiotic-core/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts/contracts/proxy/Clones.sol\":{\"keccak256\":\"0x4cc853b89072428e406c60c6e8d5280b31f9d99d6caf7b041650e649746513a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38a1bbdb89a8f5d1820a2dcc34b5086a6e199c7a8965007345975b5db8997a64\",\"dweb:/ipfs/QmcN6yJBkoserTqAMpue55HmMCMf7dGJYUbGi8p366HqZq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323\",\"dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR\"]},\"lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a\",\"dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3\",\"dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn\"]},\"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x629828db7f6354641b2bc42f6f6742b07bed39959361f92b781224fd33cfb0c9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2654b69b5d9b42ad4c981875add283a06db8bd02e01c614d4f0d498860d0c58\",\"dweb:/ipfs/QmWE3oD4Ti4UKrZTiA4cxAwprkFTpBYsLRrc62w5Lg16Q8\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097\",\"dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6\",\"dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087\",\"dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8\",\"dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da\",\"dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047\",\"dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615\",\"dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5\"]},\"src/IMirror.sol\":{\"keccak256\":\"0x78105f388516b83fcb68f7c006c5d9d685bc8ad7fadcdfa56c0919efa79a6373\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://3a8ab1264895b4f5c8fd3aa18524016c4e88712a50e0a9935f421e13f3e09601\",\"dweb:/ipfs/QmXyVe9k37fDFWmrfjYHisxmqnEynevYo88uVrnRAmYW6L\"]},\"src/IRouter.sol\":{\"keccak256\":\"0xeb107ab461f4c9598bf85ab0ec01a0d34a0a5dd016abed77c3c32f27ca885abe\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://86d38748e5911f3b325957cc8703d023bb7b3f9dd6f60997dd8c1122fcd0e9b9\",\"dweb:/ipfs/QmTo5PQs3cdGT8xr1qNm85kht7vMdYF6dr2iYnL3PLwe5H\"]},\"src/IWrappedVara.sol\":{\"keccak256\":\"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f\",\"dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf\"]},\"src/Router.sol\":{\"keccak256\":\"0xfd852803a525f652e92ea95b9727da97deab9317ad1ac16883fb819a518557c5\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://925f4492b1233262113a2119692b6f42ade30fc3e0bd590648352da44dd1ec26\",\"dweb:/ipfs/Qme6r5jAeUv6uELGMDCb9kY8BLsJuC7gtD52bagzECbd6m\"]},\"src/libraries/Gear.sol\":{\"keccak256\":\"0x726a90f878e03abe4dd98fd91a94d313596b22f9a7cc55da674d663ba9dde90b\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://f3d0eac56e80230b4a6d744be6877625403d19a0e951a07fa80d80ed3f26bc3d\",\"dweb:/ipfs/QmP7DdZ3YoFTqjJ1Jqyoy81LLNosZ7jN6sN3wnUYkVuJ2d\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"ECDSAInvalidSignature"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"ECDSAInvalidSignatureLength"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"type":"error","name":"ECDSAInvalidSignatureS"},{"inputs":[],"type":"error","name":"FailedDeployment"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"InsufficientBalance"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32","indexed":false}],"type":"event","name":"BlockCommitted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"bool","name":"valid","type":"bool","indexed":true}],"type":"event","name":"CodeGotValidated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"bytes32","name":"blobTxHash","type":"bytes32","indexed":false}],"type":"event","name":"CodeValidationRequested","anonymous":false},{"inputs":[{"internalType":"uint64","name":"threshold","type":"uint64","indexed":false},{"internalType":"uint128","name":"wvaraPerSecond","type":"uint128","indexed":false}],"type":"event","name":"ComputationSettingsChanged","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","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":"actor","type":"address","indexed":false},{"internalType":"bytes32","name":"codeId","type":"bytes32","indexed":true}],"type":"event","name":"ProgramCreated","anonymous":false},{"inputs":[],"type":"event","name":"StorageSlotChanged","anonymous":false},{"inputs":[],"type":"event","name":"ValidatorsChanged","anonymous":false},{"inputs":[{"internalType":"address[]","name":"_validators","type":"address[]"}],"stateMutability":"view","type":"function","name":"areValidators","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"_codeId","type":"bytes32"}],"stateMutability":"view","type":"function","name":"codeState","outputs":[{"internalType":"enum Gear.CodeState","name":"","type":"uint8"}]},{"inputs":[{"internalType":"bytes32[]","name":"_codesIds","type":"bytes32[]"}],"stateMutability":"view","type":"function","name":"codesStates","outputs":[{"internalType":"enum Gear.CodeState[]","name":"","type":"uint8[]"}]},{"inputs":[{"internalType":"struct Gear.BlockCommitment[]","name":"_blockCommitments","type":"tuple[]","components":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"uint48","name":"timestamp","type":"uint48"},{"internalType":"bytes32","name":"previousCommittedBlock","type":"bytes32"},{"internalType":"bytes32","name":"predecessorBlock","type":"bytes32"},{"internalType":"struct Gear.StateTransition[]","name":"transitions","type":"tuple[]","components":[{"internalType":"address","name":"actorId","type":"address"},{"internalType":"bytes32","name":"newStateHash","type":"bytes32"},{"internalType":"address","name":"inheritor","type":"address"},{"internalType":"uint128","name":"valueToReceive","type":"uint128"},{"internalType":"struct Gear.ValueClaim[]","name":"valueClaims","type":"tuple[]","components":[{"internalType":"bytes32","name":"messageId","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint128","name":"value","type":"uint128"}]},{"internalType":"struct Gear.Message[]","name":"messages","type":"tuple[]","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"struct Gear.ReplyDetails","name":"replyDetails","type":"tuple","components":[{"internalType":"bytes32","name":"to","type":"bytes32"},{"internalType":"bytes4","name":"code","type":"bytes4"}]}]}]}]},{"internalType":"bytes[]","name":"_signatures","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"commitBlocks"},{"inputs":[{"internalType":"struct Gear.CodeCommitment[]","name":"_codeCommitments","type":"tuple[]","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"bool","name":"valid","type":"bool"}]},{"internalType":"bytes[]","name":"_signatures","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"commitCodes"},{"inputs":[],"stateMutability":"view","type":"function","name":"computeSettings","outputs":[{"internalType":"struct Gear.ComputationSettings","name":"","type":"tuple","components":[{"internalType":"uint64","name":"threshold","type":"uint64"},{"internalType":"uint128","name":"wvaraPerSecond","type":"uint128"}]}]},{"inputs":[{"internalType":"bytes32","name":"_codeId","type":"bytes32"},{"internalType":"bytes32","name":"_salt","type":"bytes32"},{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"createProgram","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_decoderImpl","type":"address"},{"internalType":"bytes32","name":"_codeId","type":"bytes32"},{"internalType":"bytes32","name":"_salt","type":"bytes32"},{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"createProgramWithDecoder","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"genesisBlockHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_mirror","type":"address"},{"internalType":"address","name":"_mirrorProxy","type":"address"},{"internalType":"address","name":"_wrappedVara","type":"address"},{"internalType":"address[]","name":"_validatorsKeys","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"_validator","type":"address"}],"stateMutability":"view","type":"function","name":"isValidator","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"latestCommittedBlockHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"lookupGenesisHash"},{"inputs":[],"stateMutability":"view","type":"function","name":"mirrorImpl","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"mirrorProxyImpl","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_programId","type":"address"}],"stateMutability":"view","type":"function","name":"programCodeId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address[]","name":"_programsIds","type":"address[]"}],"stateMutability":"view","type":"function","name":"programsCodeIds","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"programsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"reinitialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"bytes32","name":"_codeId","type":"bytes32"},{"internalType":"bytes32","name":"_blobTxHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"requestCodeValidation"},{"inputs":[{"internalType":"address","name":"newMirror","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setMirror"},{"inputs":[],"stateMutability":"view","type":"function","name":"signingThresholdPercentage","outputs":[{"internalType":"uint16","name":"","type":"uint16"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"validatedCodesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsKeys","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"wrappedVara","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling 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."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","symbiotic-core/=lib/symbiotic-core/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Router.sol":"Router"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/Clones.sol":{"keccak256":"0x4cc853b89072428e406c60c6e8d5280b31f9d99d6caf7b041650e649746513a6","urls":["bzz-raw://38a1bbdb89a8f5d1820a2dcc34b5086a6e199c7a8965007345975b5db8997a64","dweb:/ipfs/QmcN6yJBkoserTqAMpue55HmMCMf7dGJYUbGi8p366HqZq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28","urls":["bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323","dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179","urls":["bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a","dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a","urls":["bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3","dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol":{"keccak256":"0x629828db7f6354641b2bc42f6f6742b07bed39959361f92b781224fd33cfb0c9","urls":["bzz-raw://a2654b69b5d9b42ad4c981875add283a06db8bd02e01c614d4f0d498860d0c58","dweb:/ipfs/QmWE3oD4Ti4UKrZTiA4cxAwprkFTpBYsLRrc62w5Lg16Q8"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4","urls":["bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097","dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b","urls":["bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6","dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb","urls":["bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087","dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38","urls":["bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8","dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee","urls":["bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da","dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e","urls":["bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047","dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44","urls":["bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615","dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5"],"license":"MIT"},"src/IMirror.sol":{"keccak256":"0x78105f388516b83fcb68f7c006c5d9d685bc8ad7fadcdfa56c0919efa79a6373","urls":["bzz-raw://3a8ab1264895b4f5c8fd3aa18524016c4e88712a50e0a9935f421e13f3e09601","dweb:/ipfs/QmXyVe9k37fDFWmrfjYHisxmqnEynevYo88uVrnRAmYW6L"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0xeb107ab461f4c9598bf85ab0ec01a0d34a0a5dd016abed77c3c32f27ca885abe","urls":["bzz-raw://86d38748e5911f3b325957cc8703d023bb7b3f9dd6f60997dd8c1122fcd0e9b9","dweb:/ipfs/QmTo5PQs3cdGT8xr1qNm85kht7vMdYF6dr2iYnL3PLwe5H"],"license":"UNLICENSED"},"src/IWrappedVara.sol":{"keccak256":"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175","urls":["bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f","dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf"],"license":"UNLICENSED"},"src/Router.sol":{"keccak256":"0xfd852803a525f652e92ea95b9727da97deab9317ad1ac16883fb819a518557c5","urls":["bzz-raw://925f4492b1233262113a2119692b6f42ade30fc3e0bd590648352da44dd1ec26","dweb:/ipfs/Qme6r5jAeUv6uELGMDCb9kY8BLsJuC7gtD52bagzECbd6m"],"license":"UNLICENSED"},"src/libraries/Gear.sol":{"keccak256":"0x726a90f878e03abe4dd98fd91a94d313596b22f9a7cc55da674d663ba9dde90b","urls":["bzz-raw://f3d0eac56e80230b4a6d744be6877625403d19a0e951a07fa80d80ed3f26bc3d","dweb:/ipfs/QmP7DdZ3YoFTqjJ1Jqyoy81LLNosZ7jN6sN3wnUYkVuJ2d"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/Router.sol","id":76828,"exportedSymbols":{"Clones":[41840],"Gear":[77378],"IERC20":[43140],"IERC20Metadata":[43166],"IMirror":[73603],"IRouter":[73896],"IWrappedVara":[73907],"OwnableUpgradeable":[39387],"ReentrancyGuardTransient":[44045],"Router":[76827],"StorageSlot":[44581]},"nodeType":"SourceUnit","src":"39:16191:159","nodes":[{"id":75261,"nodeType":"PragmaDirective","src":"39:24:159","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":75263,"nodeType":"ImportDirective","src":"65:74:159","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol","file":"@openzeppelin/contracts/utils/StorageSlot.sol","nameLocation":"-1:-1:-1","scope":76828,"sourceUnit":44582,"symbolAliases":[{"foreign":{"id":75262,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44581,"src":"73:11:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75265,"nodeType":"ImportDirective","src":"140:101:159","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":76828,"sourceUnit":39388,"symbolAliases":[{"foreign":{"id":75264,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39387,"src":"148:18:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75267,"nodeType":"ImportDirective","src":"242:64:159","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/Clones.sol","file":"@openzeppelin/contracts/proxy/Clones.sol","nameLocation":"-1:-1:-1","scope":76828,"sourceUnit":41841,"symbolAliases":[{"foreign":{"id":75266,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41840,"src":"250:6:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75269,"nodeType":"ImportDirective","src":"307:100:159","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol","file":"@openzeppelin/contracts/utils/ReentrancyGuardTransient.sol","nameLocation":"-1:-1:-1","scope":76828,"sourceUnit":44046,"symbolAliases":[{"foreign":{"id":75268,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44045,"src":"315:24:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75271,"nodeType":"ImportDirective","src":"408:38:159","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":76828,"sourceUnit":73897,"symbolAliases":[{"foreign":{"id":75270,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73896,"src":"416:7:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75273,"nodeType":"ImportDirective","src":"447:38:159","nodes":[],"absolutePath":"src/IMirror.sol","file":"./IMirror.sol","nameLocation":"-1:-1:-1","scope":76828,"sourceUnit":73604,"symbolAliases":[{"foreign":{"id":75272,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73603,"src":"455:7:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75275,"nodeType":"ImportDirective","src":"486:48:159","nodes":[],"absolutePath":"src/IWrappedVara.sol","file":"./IWrappedVara.sol","nameLocation":"-1:-1:-1","scope":76828,"sourceUnit":73908,"symbolAliases":[{"foreign":{"id":75274,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73907,"src":"494:12:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75277,"nodeType":"ImportDirective","src":"535:70:159","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","nameLocation":"-1:-1:-1","scope":76828,"sourceUnit":43141,"symbolAliases":[{"foreign":{"id":75276,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43140,"src":"543:6:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75279,"nodeType":"ImportDirective","src":"606:97:159","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","nameLocation":"-1:-1:-1","scope":76828,"sourceUnit":43167,"symbolAliases":[{"foreign":{"id":75278,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43166,"src":"614:14:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75281,"nodeType":"ImportDirective","src":"704:42:159","nodes":[],"absolutePath":"src/libraries/Gear.sol","file":"./libraries/Gear.sol","nameLocation":"-1:-1:-1","scope":76828,"sourceUnit":77379,"symbolAliases":[{"foreign":{"id":75280,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"712:4:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":76827,"nodeType":"ContractDefinition","src":"748:15481:159","nodes":[{"id":75290,"nodeType":"VariableDeclaration","src":"929:106:159","nodes":[],"constant":true,"mutability":"constant","name":"SLOT_STORAGE","nameLocation":"954:12:159","scope":76827,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75288,"name":"bytes32","nodeType":"ElementaryTypeName","src":"929:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307835633039636131623962383132376134666439663363333834616163353962363631343431653832306531373733333735336666356632653836653165303030","id":75289,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"969:66:159","typeDescriptions":{"typeIdentifier":"t_rational_41630078590300661333111585883568696735413380457407274925697692750148467286016_by_1","typeString":"int_const 4163...(69 digits omitted)...6016"},"value":"0x5c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000"},"visibility":"private"},{"id":75298,"nodeType":"FunctionDefinition","src":"1095:53:159","nodes":[],"body":{"id":75297,"nodeType":"Block","src":"1109:39:159","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75294,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39609,"src":"1119:20:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":75295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1119:22:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75296,"nodeType":"ExpressionStatement","src":"1119:22:159"}]},"documentation":{"id":75291,"nodeType":"StructuredDocumentation","src":"1042:48:159","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":75292,"nodeType":"ParameterList","parameters":[],"src":"1106:2:159"},"returnParameters":{"id":75293,"nodeType":"ParameterList","parameters":[],"src":"1109:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":75370,"nodeType":"FunctionDefinition","src":"1154:685:159","nodes":[],"body":{"id":75369,"nodeType":"Block","src":"1352:487:159","nodes":[],"statements":[{"expression":{"arguments":[{"id":75315,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75300,"src":"1377:6:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75314,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39247,"src":"1362:14:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":75316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1362:22:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75317,"nodeType":"ExpressionStatement","src":"1362:22:159"},{"expression":{"arguments":[{"hexValue":"726f757465722e73746f726167652e526f757465725631","id":75319,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1411:25:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_ebe34d7458caf9bba83b85ded6e7716871c7d6d7b9aa651344a78a4d0d1eb88b","typeString":"literal_string \"router.storage.RouterV1\""},"value":"router.storage.RouterV1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_ebe34d7458caf9bba83b85ded6e7716871c7d6d7b9aa651344a78a4d0d1eb88b","typeString":"literal_string \"router.storage.RouterV1\""}],"id":75318,"name":"_setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76826,"src":"1395:15:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":75320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1395:42:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75321,"nodeType":"ExpressionStatement","src":"1395:42:159"},{"assignments":[75324],"declarations":[{"constant":false,"id":75324,"mutability":"mutable","name":"router","nameLocation":"1463:6:159","nodeType":"VariableDeclaration","scope":75369,"src":"1447:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75323,"nodeType":"UserDefinedTypeName","pathNode":{"id":75322,"name":"Storage","nameLocations":["1447:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"1447:7:159"},"referencedDeclaration":73677,"src":"1447:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75327,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75325,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"1472:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1472:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"1447:34:159"},{"expression":{"id":75334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75328,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75324,"src":"1492:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75330,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1499:12:159","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":73656,"src":"1492:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":75331,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"1514:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":75332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1519:10:159","memberName":"newGenesis","nodeType":"MemberAccess","referencedDeclaration":77223,"src":"1514:15:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_GenesisBlockInfo_$77003_memory_ptr_$","typeString":"function () view returns (struct Gear.GenesisBlockInfo memory)"}},"id":75333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1514:17:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_memory_ptr","typeString":"struct Gear.GenesisBlockInfo memory"}},"src":"1492:39:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":75335,"nodeType":"ExpressionStatement","src":"1492:39:159"},{"expression":{"id":75345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75336,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75324,"src":"1541:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75338,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1548:13:159","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":73664,"src":"1541:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":75341,"name":"_mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75302,"src":"1581:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75342,"name":"_mirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75304,"src":"1590:12:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75343,"name":"_wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75306,"src":"1604:12:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":75339,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"1564:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":75340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1569:11:159","memberName":"AddressBook","nodeType":"MemberAccess","referencedDeclaration":76964,"src":"1564:16:159","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_AddressBook_$76964_storage_ptr_$","typeString":"type(struct Gear.AddressBook storage pointer)"}},"id":75344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1564:53:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_memory_ptr","typeString":"struct Gear.AddressBook memory"}},"src":"1541:76:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":75346,"nodeType":"ExpressionStatement","src":"1541:76:159"},{"expression":{"id":75354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":75347,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75324,"src":"1627:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75350,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1634:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"1627:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":75351,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1653:26:159","memberName":"signingThresholdPercentage","nodeType":"MemberAccess","referencedDeclaration":77053,"src":"1627:52:159","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":75352,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"1682:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":75353,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1687:28:159","memberName":"SIGNING_THRESHOLD_PERCENTAGE","nodeType":"MemberAccess","referencedDeclaration":76954,"src":"1682:33:159","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"1627:88:159","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":75355,"nodeType":"ExpressionStatement","src":"1627:88:159"},{"expression":{"arguments":[{"id":75357,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75324,"src":"1740:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"id":75358,"name":"_validatorsKeys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75309,"src":"1748:15:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}],"id":75356,"name":"_setValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76718,"src":"1725:14:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Storage_$73677_storage_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (struct IRouter.Storage storage pointer,address[] memory)"}},"id":75359,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1725:39:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75360,"nodeType":"ExpressionStatement","src":"1725:39:159"},{"expression":{"id":75367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75361,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75324,"src":"1774:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75363,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1781:15:159","memberName":"computeSettings","nodeType":"MemberAccess","referencedDeclaration":73672,"src":"1774:22:159","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$76996_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":75364,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"1799:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":75365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1804:26:159","memberName":"defaultComputationSettings","nodeType":"MemberAccess","referencedDeclaration":77170,"src":"1799:31:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_ComputationSettings_$76996_memory_ptr_$","typeString":"function () pure returns (struct Gear.ComputationSettings memory)"}},"id":75366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1799:33:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$76996_memory_ptr","typeString":"struct Gear.ComputationSettings memory"}},"src":"1774:58:159","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$76996_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"id":75368,"nodeType":"ExpressionStatement","src":"1774:58:159"}]},"functionSelector":"f8453e7c","implemented":true,"kind":"function","modifiers":[{"id":75312,"kind":"modifierInvocation","modifierName":{"id":75311,"name":"initializer","nameLocations":["1340:11:159"],"nodeType":"IdentifierPath","referencedDeclaration":39495,"src":"1340:11:159"},"nodeType":"ModifierInvocation","src":"1340:11:159"}],"name":"initialize","nameLocation":"1163:10:159","parameters":{"id":75310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75300,"mutability":"mutable","name":"_owner","nameLocation":"1191:6:159","nodeType":"VariableDeclaration","scope":75370,"src":"1183:14:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75299,"name":"address","nodeType":"ElementaryTypeName","src":"1183:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75302,"mutability":"mutable","name":"_mirror","nameLocation":"1215:7:159","nodeType":"VariableDeclaration","scope":75370,"src":"1207:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75301,"name":"address","nodeType":"ElementaryTypeName","src":"1207:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75304,"mutability":"mutable","name":"_mirrorProxy","nameLocation":"1240:12:159","nodeType":"VariableDeclaration","scope":75370,"src":"1232:20:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75303,"name":"address","nodeType":"ElementaryTypeName","src":"1232:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75306,"mutability":"mutable","name":"_wrappedVara","nameLocation":"1270:12:159","nodeType":"VariableDeclaration","scope":75370,"src":"1262:20:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75305,"name":"address","nodeType":"ElementaryTypeName","src":"1262:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75309,"mutability":"mutable","name":"_validatorsKeys","nameLocation":"1311:15:159","nodeType":"VariableDeclaration","scope":75370,"src":"1292:34:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":75307,"name":"address","nodeType":"ElementaryTypeName","src":"1292:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75308,"nodeType":"ArrayTypeName","src":"1292:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1173:159:159"},"returnParameters":{"id":75313,"nodeType":"ParameterList","parameters":[],"src":"1352:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":75434,"nodeType":"FunctionDefinition","src":"1845:604:159","nodes":[],"body":{"id":75433,"nodeType":"Block","src":"1903:546:159","nodes":[],"statements":[{"assignments":[75380],"declarations":[{"constant":false,"id":75380,"mutability":"mutable","name":"oldRouter","nameLocation":"1929:9:159","nodeType":"VariableDeclaration","scope":75433,"src":"1913:25:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75379,"nodeType":"UserDefinedTypeName","pathNode":{"id":75378,"name":"Storage","nameLocations":["1913:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"1913:7:159"},"referencedDeclaration":73677,"src":"1913:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75383,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75381,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"1941:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1941:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"1913:37:159"},{"expression":{"arguments":[{"hexValue":"726f757465722e73746f726167652e526f757465725632","id":75385,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1977:25:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_07554b5a957f065078e703cffe06326f3995e4f57feb37a649312406c8f4f44a","typeString":"literal_string \"router.storage.RouterV2\""},"value":"router.storage.RouterV2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_07554b5a957f065078e703cffe06326f3995e4f57feb37a649312406c8f4f44a","typeString":"literal_string \"router.storage.RouterV2\""}],"id":75384,"name":"_setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76826,"src":"1961:15:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":75386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1961:42:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75387,"nodeType":"ExpressionStatement","src":"1961:42:159"},{"assignments":[75390],"declarations":[{"constant":false,"id":75390,"mutability":"mutable","name":"newRouter","nameLocation":"2029:9:159","nodeType":"VariableDeclaration","scope":75433,"src":"2013:25:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75389,"nodeType":"UserDefinedTypeName","pathNode":{"id":75388,"name":"Storage","nameLocations":["2013:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"2013:7:159"},"referencedDeclaration":73677,"src":"2013:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75393,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75391,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"2041:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2041:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2013:37:159"},{"expression":{"id":75400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75394,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75390,"src":"2061:9:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75396,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2071:12:159","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":73656,"src":"2061:22:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":75397,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"2086:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":75398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2091:10:159","memberName":"newGenesis","nodeType":"MemberAccess","referencedDeclaration":77223,"src":"2086:15:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_GenesisBlockInfo_$77003_memory_ptr_$","typeString":"function () view returns (struct Gear.GenesisBlockInfo memory)"}},"id":75399,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2086:17:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_memory_ptr","typeString":"struct Gear.GenesisBlockInfo memory"}},"src":"2061:42:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":75401,"nodeType":"ExpressionStatement","src":"2061:42:159"},{"expression":{"id":75407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75402,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75390,"src":"2113:9:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75404,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2123:13:159","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":73664,"src":"2113:23:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":75405,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75380,"src":"2139:9:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75406,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2149:13:159","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":73664,"src":"2139:23:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"src":"2113:49:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":75408,"nodeType":"ExpressionStatement","src":"2113:49:159"},{"expression":{"id":75417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":75409,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75390,"src":"2173:9:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75412,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2183:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"2173:28:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":75413,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2202:26:159","memberName":"signingThresholdPercentage","nodeType":"MemberAccess","referencedDeclaration":77053,"src":"2173:55:159","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":75414,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75380,"src":"2243:9:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75415,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2253:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"2243:28:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":75416,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2272:26:159","memberName":"signingThresholdPercentage","nodeType":"MemberAccess","referencedDeclaration":77053,"src":"2243:55:159","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"2173:125:159","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":75418,"nodeType":"ExpressionStatement","src":"2173:125:159"},{"expression":{"arguments":[{"id":75420,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75390,"src":"2323:9:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"expression":{"expression":{"id":75421,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75380,"src":"2334:9:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75422,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2344:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"2334:28:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":75423,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2363:14:159","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":77060,"src":"2334:43:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}],"id":75419,"name":"_setValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76718,"src":"2308:14:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Storage_$73677_storage_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (struct IRouter.Storage storage pointer,address[] memory)"}},"id":75424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2308:70:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75425,"nodeType":"ExpressionStatement","src":"2308:70:159"},{"expression":{"id":75431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75426,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75390,"src":"2389:9:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75428,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2399:15:159","memberName":"computeSettings","nodeType":"MemberAccess","referencedDeclaration":73672,"src":"2389:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$76996_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":75429,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75380,"src":"2417:9:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75430,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2427:15:159","memberName":"computeSettings","nodeType":"MemberAccess","referencedDeclaration":73672,"src":"2417:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$76996_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"src":"2389:53:159","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$76996_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"id":75432,"nodeType":"ExpressionStatement","src":"2389:53:159"}]},"functionSelector":"6c2eb350","implemented":true,"kind":"function","modifiers":[{"id":75373,"kind":"modifierInvocation","modifierName":{"id":75372,"name":"onlyOwner","nameLocations":["1876:9:159"],"nodeType":"IdentifierPath","referencedDeclaration":39282,"src":"1876:9:159"},"nodeType":"ModifierInvocation","src":"1876:9:159"},{"arguments":[{"hexValue":"32","id":75375,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1900:1:159","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"id":75376,"kind":"modifierInvocation","modifierName":{"id":75374,"name":"reinitializer","nameLocations":["1886:13:159"],"nodeType":"IdentifierPath","referencedDeclaration":39542,"src":"1886:13:159"},"nodeType":"ModifierInvocation","src":"1886:16:159"}],"name":"reinitialize","nameLocation":"1854:12:159","parameters":{"id":75371,"nodeType":"ParameterList","parameters":[],"src":"1866:2:159"},"returnParameters":{"id":75377,"nodeType":"ParameterList","parameters":[],"src":"1903:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":75445,"nodeType":"FunctionDefinition","src":"2471:109:159","nodes":[],"body":{"id":75444,"nodeType":"Block","src":"2529:51:159","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75439,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"2546:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2546:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75441,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2556:12:159","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":73656,"src":"2546:22:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":75442,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2569:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76998,"src":"2546:27:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":75438,"id":75443,"nodeType":"Return","src":"2539:34:159"}]},"baseFunctions":[73721],"functionSelector":"28e24b3d","implemented":true,"kind":"function","modifiers":[],"name":"genesisBlockHash","nameLocation":"2480:16:159","parameters":{"id":75435,"nodeType":"ParameterList","parameters":[],"src":"2496:2:159"},"returnParameters":{"id":75438,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75437,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75445,"src":"2520:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75436,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2520:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2519:9:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75456,"nodeType":"FunctionDefinition","src":"2586:125:159","nodes":[],"body":{"id":75455,"nodeType":"Block","src":"2652:59:159","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75450,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"2669:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2669:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75452,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2679:20:159","memberName":"latestCommittedBlock","nodeType":"MemberAccess","referencedDeclaration":73660,"src":"2669:30:159","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBlockInfo_$76991_storage","typeString":"struct Gear.CommittedBlockInfo storage ref"}},"id":75453,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2700:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76988,"src":"2669:35:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":75449,"id":75454,"nodeType":"Return","src":"2662:42:159"}]},"baseFunctions":[73726],"functionSelector":"c9f16a11","implemented":true,"kind":"function","modifiers":[],"name":"latestCommittedBlockHash","nameLocation":"2595:24:159","parameters":{"id":75446,"nodeType":"ParameterList","parameters":[],"src":"2619:2:159"},"returnParameters":{"id":75449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75448,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75456,"src":"2643:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75447,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2643:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2642:9:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75467,"nodeType":"FunctionDefinition","src":"2717:106:159","nodes":[],"body":{"id":75466,"nodeType":"Block","src":"2769:54:159","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75461,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"2786:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2786:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75463,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2796:13:159","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":73664,"src":"2786:23:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":75464,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2810:6:159","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":76959,"src":"2786:30:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75460,"id":75465,"nodeType":"Return","src":"2779:37:159"}]},"baseFunctions":[73731],"functionSelector":"e6fabc09","implemented":true,"kind":"function","modifiers":[],"name":"mirrorImpl","nameLocation":"2726:10:159","parameters":{"id":75457,"nodeType":"ParameterList","parameters":[],"src":"2736:2:159"},"returnParameters":{"id":75460,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75459,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75467,"src":"2760:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75458,"name":"address","nodeType":"ElementaryTypeName","src":"2760:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2759:9:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75478,"nodeType":"FunctionDefinition","src":"2829:116:159","nodes":[],"body":{"id":75477,"nodeType":"Block","src":"2886:59:159","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75472,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"2903:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2903:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75474,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2913:13:159","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":73664,"src":"2903:23:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":75475,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2927:11:159","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":76961,"src":"2903:35:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75471,"id":75476,"nodeType":"Return","src":"2896:42:159"}]},"baseFunctions":[73736],"functionSelector":"65ecfea2","implemented":true,"kind":"function","modifiers":[],"name":"mirrorProxyImpl","nameLocation":"2838:15:159","parameters":{"id":75468,"nodeType":"ParameterList","parameters":[],"src":"2853:2:159"},"returnParameters":{"id":75471,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75470,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75478,"src":"2877:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75469,"name":"address","nodeType":"ElementaryTypeName","src":"2877:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2876:9:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75489,"nodeType":"FunctionDefinition","src":"2951:112:159","nodes":[],"body":{"id":75488,"nodeType":"Block","src":"3004:59:159","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75483,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"3021:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3021:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75485,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3031:13:159","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":73664,"src":"3021:23:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":75486,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3045:11:159","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":76963,"src":"3021:35:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75482,"id":75487,"nodeType":"Return","src":"3014:42:159"}]},"baseFunctions":[73741],"functionSelector":"88f50cf0","implemented":true,"kind":"function","modifiers":[],"name":"wrappedVara","nameLocation":"2960:11:159","parameters":{"id":75479,"nodeType":"ParameterList","parameters":[],"src":"2971:2:159"},"returnParameters":{"id":75482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75481,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75489,"src":"2995:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75480,"name":"address","nodeType":"ElementaryTypeName","src":"2995:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2994:9:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75531,"nodeType":"FunctionDefinition","src":"3069:342:159","nodes":[],"body":{"id":75530,"nodeType":"Block","src":"3151:260:159","nodes":[],"statements":[{"assignments":[75499],"declarations":[{"constant":false,"id":75499,"mutability":"mutable","name":"router","nameLocation":"3177:6:159","nodeType":"VariableDeclaration","scope":75530,"src":"3161:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75498,"nodeType":"UserDefinedTypeName","pathNode":{"id":75497,"name":"Storage","nameLocations":["3161:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"3161:7:159"},"referencedDeclaration":73677,"src":"3161:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75502,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75500,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"3186:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3186:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3161:34:159"},{"body":{"id":75526,"nodeType":"Block","src":"3255:128:159","statements":[{"condition":{"id":75521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3273:53:159","subExpression":{"baseExpression":{"expression":{"expression":{"id":75514,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75499,"src":"3274:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75515,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3281:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"3274:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":75516,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3300:10:159","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":77057,"src":"3274:36:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":75520,"indexExpression":{"baseExpression":{"id":75517,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75492,"src":"3311:11:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":75519,"indexExpression":{"id":75518,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75504,"src":"3323:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3311:14:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3274:52:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75525,"nodeType":"IfStatement","src":"3269:104:159","trueBody":{"id":75524,"nodeType":"Block","src":"3328:45:159","statements":[{"expression":{"hexValue":"66616c7365","id":75522,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3353:5:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":75496,"id":75523,"nodeType":"Return","src":"3346:12:159"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75507,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75504,"src":"3226:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":75508,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75492,"src":"3230:11:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":75509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3242:6:159","memberName":"length","nodeType":"MemberAccess","src":"3230:18:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3226:22:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75527,"initializationExpression":{"assignments":[75504],"declarations":[{"constant":false,"id":75504,"mutability":"mutable","name":"i","nameLocation":"3219:1:159","nodeType":"VariableDeclaration","scope":75527,"src":"3211:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75503,"name":"uint256","nodeType":"ElementaryTypeName","src":"3211:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75506,"initialValue":{"hexValue":"30","id":75505,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3223:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3211:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":75512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3250:3:159","subExpression":{"id":75511,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75504,"src":"3250:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":75513,"nodeType":"ExpressionStatement","src":"3250:3:159"},"nodeType":"ForStatement","src":"3206:177:159"},{"expression":{"hexValue":"74727565","id":75528,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3400:4:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":75496,"id":75529,"nodeType":"Return","src":"3393:11:159"}]},"baseFunctions":[73749],"functionSelector":"8f381dbe","implemented":true,"kind":"function","modifiers":[],"name":"areValidators","nameLocation":"3078:13:159","parameters":{"id":75493,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75492,"mutability":"mutable","name":"_validators","nameLocation":"3111:11:159","nodeType":"VariableDeclaration","scope":75531,"src":"3092:30:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":75490,"name":"address","nodeType":"ElementaryTypeName","src":"3092:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75491,"nodeType":"ArrayTypeName","src":"3092:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3091:32:159"},"returnParameters":{"id":75496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75495,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75531,"src":"3145:4:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75494,"name":"bool","nodeType":"ElementaryTypeName","src":"3145:4:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3144:6:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75546,"nodeType":"FunctionDefinition","src":"3417:143:159","nodes":[],"body":{"id":75545,"nodeType":"Block","src":"3485:75:159","nodes":[],"statements":[{"expression":{"baseExpression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75538,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"3502:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3502:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75540,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3512:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"3502:28:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":75541,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3531:10:159","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":77057,"src":"3502:39:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":75543,"indexExpression":{"id":75542,"name":"_validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75533,"src":"3542:10:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3502:51:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":75537,"id":75544,"nodeType":"Return","src":"3495:58:159"}]},"baseFunctions":[73756],"functionSelector":"facd743b","implemented":true,"kind":"function","modifiers":[],"name":"isValidator","nameLocation":"3426:11:159","parameters":{"id":75534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75533,"mutability":"mutable","name":"_validator","nameLocation":"3446:10:159","nodeType":"VariableDeclaration","scope":75546,"src":"3438:18:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75532,"name":"address","nodeType":"ElementaryTypeName","src":"3438:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3437:20:159"},"returnParameters":{"id":75537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75536,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75546,"src":"3479:4:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75535,"name":"bool","nodeType":"ElementaryTypeName","src":"3479:4:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3478:6:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75557,"nodeType":"FunctionDefinition","src":"3566:146:159","nodes":[],"body":{"id":75556,"nodeType":"Block","src":"3633:79:159","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75551,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"3650:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3650:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75553,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3660:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"3650:28:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":75554,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3679:26:159","memberName":"signingThresholdPercentage","nodeType":"MemberAccess","referencedDeclaration":77053,"src":"3650:55:159","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":75550,"id":75555,"nodeType":"Return","src":"3643:62:159"}]},"baseFunctions":[73761],"functionSelector":"efd81abc","implemented":true,"kind":"function","modifiers":[],"name":"signingThresholdPercentage","nameLocation":"3575:26:159","parameters":{"id":75547,"nodeType":"ParameterList","parameters":[],"src":"3601:2:159"},"returnParameters":{"id":75550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75549,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75557,"src":"3625:6:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":75548,"name":"uint16","nodeType":"ElementaryTypeName","src":"3625:6:159","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"3624:8:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75569,"nodeType":"FunctionDefinition","src":"3718:131:159","nodes":[],"body":{"id":75568,"nodeType":"Block","src":"3775:74:159","nodes":[],"statements":[{"expression":{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75562,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"3792:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3792:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75564,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3802:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"3792:28:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":75565,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3821:14:159","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":77060,"src":"3792:43:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":75566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3836:6:159","memberName":"length","nodeType":"MemberAccess","src":"3792:50:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":75561,"id":75567,"nodeType":"Return","src":"3785:57:159"}]},"baseFunctions":[73766],"functionSelector":"ed612f8c","implemented":true,"kind":"function","modifiers":[],"name":"validatorsCount","nameLocation":"3727:15:159","parameters":{"id":75558,"nodeType":"ParameterList","parameters":[],"src":"3742:2:159"},"returnParameters":{"id":75561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75560,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75569,"src":"3766:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75559,"name":"uint256","nodeType":"ElementaryTypeName","src":"3766:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3765:9:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75581,"nodeType":"FunctionDefinition","src":"3855:132:159","nodes":[],"body":{"id":75580,"nodeType":"Block","src":"3920:67:159","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75575,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"3937:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75576,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3937:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75577,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3947:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"3937:28:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":75578,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3966:14:159","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":77060,"src":"3937:43:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"functionReturnParameters":75574,"id":75579,"nodeType":"Return","src":"3930:50:159"}]},"baseFunctions":[73772],"functionSelector":"6e61dd49","implemented":true,"kind":"function","modifiers":[],"name":"validatorsKeys","nameLocation":"3864:14:159","parameters":{"id":75570,"nodeType":"ParameterList","parameters":[],"src":"3878:2:159"},"returnParameters":{"id":75574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75573,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75581,"src":"3902:16:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":75571,"name":"address","nodeType":"ElementaryTypeName","src":"3902:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75572,"nodeType":"ArrayTypeName","src":"3902:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3901:18:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75594,"nodeType":"FunctionDefinition","src":"3993:141:159","nodes":[],"body":{"id":75593,"nodeType":"Block","src":"4054:80:159","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75588,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"4098:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4098:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75590,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4108:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"4098:28:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}],"expression":{"id":75586,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"4071:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":75587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4076:21:159","memberName":"validatorsThresholdOf","nodeType":"MemberAccess","referencedDeclaration":77358,"src":"4071:26:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ValidationSettings_$77061_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct Gear.ValidationSettings storage pointer) view returns (uint256)"}},"id":75591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4071:56:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":75585,"id":75592,"nodeType":"Return","src":"4064:63:159"}]},"baseFunctions":[73777],"functionSelector":"edc87225","implemented":true,"kind":"function","modifiers":[],"name":"validatorsThreshold","nameLocation":"4002:19:159","parameters":{"id":75582,"nodeType":"ParameterList","parameters":[],"src":"4021:2:159"},"returnParameters":{"id":75585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75584,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75594,"src":"4045:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75583,"name":"uint256","nodeType":"ElementaryTypeName","src":"4045:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4044:9:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75605,"nodeType":"FunctionDefinition","src":"4140:130:159","nodes":[],"body":{"id":75604,"nodeType":"Block","src":"4221:49:159","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75600,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"4238:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4238:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75602,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4248:15:159","memberName":"computeSettings","nodeType":"MemberAccess","referencedDeclaration":73672,"src":"4238:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$76996_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"functionReturnParameters":75599,"id":75603,"nodeType":"Return","src":"4231:32:159"}]},"baseFunctions":[73783],"functionSelector":"84d22a4f","implemented":true,"kind":"function","modifiers":[],"name":"computeSettings","nameLocation":"4149:15:159","parameters":{"id":75595,"nodeType":"ParameterList","parameters":[],"src":"4164:2:159"},"returnParameters":{"id":75599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75598,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75605,"src":"4188:31:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$76996_memory_ptr","typeString":"struct Gear.ComputationSettings"},"typeName":{"id":75597,"nodeType":"UserDefinedTypeName","pathNode":{"id":75596,"name":"Gear.ComputationSettings","nameLocations":["4188:4:159","4193:19:159"],"nodeType":"IdentifierPath","referencedDeclaration":76996,"src":"4188:24:159"},"referencedDeclaration":76996,"src":"4188:24:159","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$76996_storage_ptr","typeString":"struct Gear.ComputationSettings"}},"visibility":"internal"}],"src":"4187:33:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75621,"nodeType":"FunctionDefinition","src":"4276:134:159","nodes":[],"body":{"id":75620,"nodeType":"Block","src":"4349:61:159","nodes":[],"statements":[{"expression":{"baseExpression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75613,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"4366:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4366:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75615,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4376:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"4366:22:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":75616,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4389:5:159","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":77020,"src":"4366:28:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$76986_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":75618,"indexExpression":{"id":75617,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75607,"src":"4395:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4366:37:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"functionReturnParameters":75612,"id":75619,"nodeType":"Return","src":"4359:44:159"}]},"baseFunctions":[73791],"functionSelector":"c13911e8","implemented":true,"kind":"function","modifiers":[],"name":"codeState","nameLocation":"4285:9:159","parameters":{"id":75608,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75607,"mutability":"mutable","name":"_codeId","nameLocation":"4303:7:159","nodeType":"VariableDeclaration","scope":75621,"src":"4295:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75606,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4295:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4294:17:159"},"returnParameters":{"id":75612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75611,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75621,"src":"4333:14:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"},"typeName":{"id":75610,"nodeType":"UserDefinedTypeName","pathNode":{"id":75609,"name":"Gear.CodeState","nameLocations":["4333:4:159","4338:9:159"],"nodeType":"IdentifierPath","referencedDeclaration":76986,"src":"4333:14:159"},"referencedDeclaration":76986,"src":"4333:14:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"visibility":"internal"}],"src":"4332:16:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75679,"nodeType":"FunctionDefinition","src":"4416:378:159","nodes":[],"body":{"id":75678,"nodeType":"Block","src":"4513:281:159","nodes":[],"statements":[{"assignments":[75633],"declarations":[{"constant":false,"id":75633,"mutability":"mutable","name":"router","nameLocation":"4539:6:159","nodeType":"VariableDeclaration","scope":75678,"src":"4523:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75632,"nodeType":"UserDefinedTypeName","pathNode":{"id":75631,"name":"Storage","nameLocations":["4523:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"4523:7:159"},"referencedDeclaration":73677,"src":"4523:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75636,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75634,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"4548:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4548:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4523:34:159"},{"assignments":[75642],"declarations":[{"constant":false,"id":75642,"mutability":"mutable","name":"res","nameLocation":"4592:3:159","nodeType":"VariableDeclaration","scope":75678,"src":"4568:27:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$76986_$dyn_memory_ptr","typeString":"enum Gear.CodeState[]"},"typeName":{"baseType":{"id":75640,"nodeType":"UserDefinedTypeName","pathNode":{"id":75639,"name":"Gear.CodeState","nameLocations":["4568:4:159","4573:9:159"],"nodeType":"IdentifierPath","referencedDeclaration":76986,"src":"4568:14:159"},"referencedDeclaration":76986,"src":"4568:14:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"id":75641,"nodeType":"ArrayTypeName","src":"4568:16:159","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$76986_$dyn_storage_ptr","typeString":"enum Gear.CodeState[]"}},"visibility":"internal"}],"id":75650,"initialValue":{"arguments":[{"expression":{"id":75647,"name":"_codesIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75624,"src":"4619:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},"id":75648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4629:6:159","memberName":"length","nodeType":"MemberAccess","src":"4619:16:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":75646,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"4598:20:159","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_enum$_CodeState_$76986_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (enum Gear.CodeState[] memory)"},"typeName":{"baseType":{"id":75644,"nodeType":"UserDefinedTypeName","pathNode":{"id":75643,"name":"Gear.CodeState","nameLocations":["4602:4:159","4607:9:159"],"nodeType":"IdentifierPath","referencedDeclaration":76986,"src":"4602:14:159"},"referencedDeclaration":76986,"src":"4602:14:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"id":75645,"nodeType":"ArrayTypeName","src":"4602:16:159","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$76986_$dyn_storage_ptr","typeString":"enum Gear.CodeState[]"}}},"id":75649,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4598:38:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$76986_$dyn_memory_ptr","typeString":"enum Gear.CodeState[] memory"}},"nodeType":"VariableDeclarationStatement","src":"4568:68:159"},{"body":{"id":75674,"nodeType":"Block","src":"4694:73:159","statements":[{"expression":{"id":75672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":75662,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75642,"src":"4708:3:159","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$76986_$dyn_memory_ptr","typeString":"enum Gear.CodeState[] memory"}},"id":75664,"indexExpression":{"id":75663,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75652,"src":"4712:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4708:6:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"expression":{"id":75665,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75633,"src":"4717:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75666,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4724:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"4717:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":75667,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4737:5:159","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":77020,"src":"4717:25:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$76986_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":75671,"indexExpression":{"baseExpression":{"id":75668,"name":"_codesIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75624,"src":"4743:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},"id":75670,"indexExpression":{"id":75669,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75652,"src":"4753:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4743:12:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4717:39:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"src":"4708:48:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"id":75673,"nodeType":"ExpressionStatement","src":"4708:48:159"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75655,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75652,"src":"4667:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":75656,"name":"_codesIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75624,"src":"4671:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},"id":75657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4681:6:159","memberName":"length","nodeType":"MemberAccess","src":"4671:16:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4667:20:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75675,"initializationExpression":{"assignments":[75652],"declarations":[{"constant":false,"id":75652,"mutability":"mutable","name":"i","nameLocation":"4660:1:159","nodeType":"VariableDeclaration","scope":75675,"src":"4652:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75651,"name":"uint256","nodeType":"ElementaryTypeName","src":"4652:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75654,"initialValue":{"hexValue":"30","id":75653,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4664:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4652:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":75660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"4689:3:159","subExpression":{"id":75659,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75652,"src":"4689:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":75661,"nodeType":"ExpressionStatement","src":"4689:3:159"},"nodeType":"ForStatement","src":"4647:120:159"},{"expression":{"id":75676,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75642,"src":"4784:3:159","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$76986_$dyn_memory_ptr","typeString":"enum Gear.CodeState[] memory"}},"functionReturnParameters":75630,"id":75677,"nodeType":"Return","src":"4777:10:159"}]},"baseFunctions":[73801],"functionSelector":"82bdeaad","implemented":true,"kind":"function","modifiers":[],"name":"codesStates","nameLocation":"4425:11:159","parameters":{"id":75625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75624,"mutability":"mutable","name":"_codesIds","nameLocation":"4456:9:159","nodeType":"VariableDeclaration","scope":75679,"src":"4437:28:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":75622,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4437:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":75623,"nodeType":"ArrayTypeName","src":"4437:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"4436:30:159"},"returnParameters":{"id":75630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75629,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75679,"src":"4488:23:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$76986_$dyn_memory_ptr","typeString":"enum Gear.CodeState[]"},"typeName":{"baseType":{"id":75627,"nodeType":"UserDefinedTypeName","pathNode":{"id":75626,"name":"Gear.CodeState","nameLocations":["4488:4:159","4493:9:159"],"nodeType":"IdentifierPath","referencedDeclaration":76986,"src":"4488:14:159"},"referencedDeclaration":76986,"src":"4488:14:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"id":75628,"nodeType":"ArrayTypeName","src":"4488:16:159","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$76986_$dyn_storage_ptr","typeString":"enum Gear.CodeState[]"}},"visibility":"internal"}],"src":"4487:25:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75694,"nodeType":"FunctionDefinition","src":"4800:140:159","nodes":[],"body":{"id":75693,"nodeType":"Block","src":"4873:67:159","nodes":[],"statements":[{"expression":{"baseExpression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75686,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"4890:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4890:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75688,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4900:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"4890:22:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":75689,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4913:8:159","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":77024,"src":"4890:31:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":75691,"indexExpression":{"id":75690,"name":"_programId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75681,"src":"4922:10:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4890:43:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":75685,"id":75692,"nodeType":"Return","src":"4883:50:159"}]},"baseFunctions":[73808],"functionSelector":"9067088e","implemented":true,"kind":"function","modifiers":[],"name":"programCodeId","nameLocation":"4809:13:159","parameters":{"id":75682,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75681,"mutability":"mutable","name":"_programId","nameLocation":"4831:10:159","nodeType":"VariableDeclaration","scope":75694,"src":"4823:18:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75680,"name":"address","nodeType":"ElementaryTypeName","src":"4823:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4822:20:159"},"returnParameters":{"id":75685,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75684,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75694,"src":"4864:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75683,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4864:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4863:9:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75749,"nodeType":"FunctionDefinition","src":"4946:376:159","nodes":[],"body":{"id":75748,"nodeType":"Block","src":"5043:279:159","nodes":[],"statements":[{"assignments":[75705],"declarations":[{"constant":false,"id":75705,"mutability":"mutable","name":"router","nameLocation":"5069:6:159","nodeType":"VariableDeclaration","scope":75748,"src":"5053:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75704,"nodeType":"UserDefinedTypeName","pathNode":{"id":75703,"name":"Storage","nameLocations":["5053:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"5053:7:159"},"referencedDeclaration":73677,"src":"5053:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75708,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75706,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"5078:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5078:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5053:34:159"},{"assignments":[75713],"declarations":[{"constant":false,"id":75713,"mutability":"mutable","name":"res","nameLocation":"5115:3:159","nodeType":"VariableDeclaration","scope":75748,"src":"5098:20:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":75711,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5098:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":75712,"nodeType":"ArrayTypeName","src":"5098:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":75720,"initialValue":{"arguments":[{"expression":{"id":75717,"name":"_programsIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75697,"src":"5135:12:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":75718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5148:6:159","memberName":"length","nodeType":"MemberAccess","src":"5135:19:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":75716,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"5121:13:159","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":75714,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5125:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":75715,"nodeType":"ArrayTypeName","src":"5125:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":75719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5121:34:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"5098:57:159"},{"body":{"id":75744,"nodeType":"Block","src":"5216:79:159","statements":[{"expression":{"id":75742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":75732,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75713,"src":"5230:3:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":75734,"indexExpression":{"id":75733,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75722,"src":"5234:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5230:6:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"expression":{"id":75735,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75705,"src":"5239:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75736,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5246:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"5239:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":75737,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5259:8:159","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":77024,"src":"5239:28:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":75741,"indexExpression":{"baseExpression":{"id":75738,"name":"_programsIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75697,"src":"5268:12:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":75740,"indexExpression":{"id":75739,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75722,"src":"5281:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5268:15:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5239:45:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5230:54:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":75743,"nodeType":"ExpressionStatement","src":"5230:54:159"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75725,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75722,"src":"5186:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":75726,"name":"_programsIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75697,"src":"5190:12:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":75727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5203:6:159","memberName":"length","nodeType":"MemberAccess","src":"5190:19:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5186:23:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75745,"initializationExpression":{"assignments":[75722],"declarations":[{"constant":false,"id":75722,"mutability":"mutable","name":"i","nameLocation":"5179:1:159","nodeType":"VariableDeclaration","scope":75745,"src":"5171:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75721,"name":"uint256","nodeType":"ElementaryTypeName","src":"5171:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75724,"initialValue":{"hexValue":"30","id":75723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5183:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5171:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":75730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5211:3:159","subExpression":{"id":75729,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75722,"src":"5211:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":75731,"nodeType":"ExpressionStatement","src":"5211:3:159"},"nodeType":"ForStatement","src":"5166:129:159"},{"expression":{"id":75746,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75713,"src":"5312:3:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":75702,"id":75747,"nodeType":"Return","src":"5305:10:159"}]},"baseFunctions":[73817],"functionSelector":"baaf0201","implemented":true,"kind":"function","modifiers":[],"name":"programsCodeIds","nameLocation":"4955:15:159","parameters":{"id":75698,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75697,"mutability":"mutable","name":"_programsIds","nameLocation":"4990:12:159","nodeType":"VariableDeclaration","scope":75749,"src":"4971:31:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":75695,"name":"address","nodeType":"ElementaryTypeName","src":"4971:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75696,"nodeType":"ArrayTypeName","src":"4971:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"4970:33:159"},"returnParameters":{"id":75702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75701,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75749,"src":"5025:16:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":75699,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5025:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":75700,"nodeType":"ArrayTypeName","src":"5025:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"5024:18:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75760,"nodeType":"FunctionDefinition","src":"5328:115:159","nodes":[],"body":{"id":75759,"nodeType":"Block","src":"5383:60:159","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75754,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"5400:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75755,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5400:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75756,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5410:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"5400:22:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":75757,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5423:13:159","memberName":"programsCount","nodeType":"MemberAccess","referencedDeclaration":77026,"src":"5400:36:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":75753,"id":75758,"nodeType":"Return","src":"5393:43:159"}]},"baseFunctions":[73822],"functionSelector":"96a2ddfa","implemented":true,"kind":"function","modifiers":[],"name":"programsCount","nameLocation":"5337:13:159","parameters":{"id":75750,"nodeType":"ParameterList","parameters":[],"src":"5350:2:159"},"returnParameters":{"id":75753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75752,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75760,"src":"5374:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75751,"name":"uint256","nodeType":"ElementaryTypeName","src":"5374:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5373:9:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75771,"nodeType":"FunctionDefinition","src":"5449:127:159","nodes":[],"body":{"id":75770,"nodeType":"Block","src":"5510:66:159","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75765,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"5527:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75766,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5527:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75767,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5537:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"5527:22:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":75768,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5550:19:159","memberName":"validatedCodesCount","nodeType":"MemberAccess","referencedDeclaration":77028,"src":"5527:42:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":75764,"id":75769,"nodeType":"Return","src":"5520:49:159"}]},"baseFunctions":[73827],"functionSelector":"007a32e7","implemented":true,"kind":"function","modifiers":[],"name":"validatedCodesCount","nameLocation":"5458:19:159","parameters":{"id":75761,"nodeType":"ParameterList","parameters":[],"src":"5477:2:159"},"returnParameters":{"id":75764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75763,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75771,"src":"5501:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75762,"name":"uint256","nodeType":"ElementaryTypeName","src":"5501:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5500:9:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75786,"nodeType":"FunctionDefinition","src":"5602:116:159","nodes":[],"body":{"id":75785,"nodeType":"Block","src":"5659:59:159","nodes":[],"statements":[{"expression":{"id":75783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75778,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"5669:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5669:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75780,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5679:13:159","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":73664,"src":"5669:23:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":75781,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5693:6:159","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":76959,"src":"5669:30:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75782,"name":"newMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75773,"src":"5702:9:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5669:42:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75784,"nodeType":"ExpressionStatement","src":"5669:42:159"}]},"baseFunctions":[73832],"functionSelector":"3d43b418","implemented":true,"kind":"function","modifiers":[{"id":75776,"kind":"modifierInvocation","modifierName":{"id":75775,"name":"onlyOwner","nameLocations":["5649:9:159"],"nodeType":"IdentifierPath","referencedDeclaration":39282,"src":"5649:9:159"},"nodeType":"ModifierInvocation","src":"5649:9:159"}],"name":"setMirror","nameLocation":"5611:9:159","parameters":{"id":75774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75773,"mutability":"mutable","name":"newMirror","nameLocation":"5629:9:159","nodeType":"VariableDeclaration","scope":75786,"src":"5621:17:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75772,"name":"address","nodeType":"ElementaryTypeName","src":"5621:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5620:19:159"},"returnParameters":{"id":75777,"nodeType":"ParameterList","parameters":[],"src":"5659:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75838,"nodeType":"FunctionDefinition","src":"5740:398:159","nodes":[],"body":{"id":75837,"nodeType":"Block","src":"5778:360:159","nodes":[],"statements":[{"assignments":[75791],"declarations":[{"constant":false,"id":75791,"mutability":"mutable","name":"router","nameLocation":"5804:6:159","nodeType":"VariableDeclaration","scope":75837,"src":"5788:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75790,"nodeType":"UserDefinedTypeName","pathNode":{"id":75789,"name":"Storage","nameLocations":["5788:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"5788:7:159"},"referencedDeclaration":73677,"src":"5788:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75794,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75792,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"5813:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75793,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5813:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5788:34:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":75796,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75791,"src":"5841:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75797,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5848:12:159","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":73656,"src":"5841:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":75798,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5861:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76998,"src":"5841:24:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":75801,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5877:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":75800,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5869:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":75799,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5869:7:159","typeDescriptions":{}}},"id":75802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5869:10:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5841:38:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"67656e65736973206861736820616c726561647920736574","id":75804,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5881:26:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_5ec654a5a6e0b043639db348d1557e0acfcdb8bbf2c9de24c4983866c0ccfa21","typeString":"literal_string \"genesis hash already set\""},"value":"genesis hash already set"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5ec654a5a6e0b043639db348d1557e0acfcdb8bbf2c9de24c4983866c0ccfa21","typeString":"literal_string \"genesis hash already set\""}],"id":75795,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"5833:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5833:75:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75806,"nodeType":"ExpressionStatement","src":"5833:75:159"},{"assignments":[75808],"declarations":[{"constant":false,"id":75808,"mutability":"mutable","name":"genesisHash","nameLocation":"5927:11:159","nodeType":"VariableDeclaration","scope":75837,"src":"5919:19:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75807,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5919:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":75814,"initialValue":{"arguments":[{"expression":{"expression":{"id":75810,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75791,"src":"5951:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75811,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5958:12:159","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":73656,"src":"5951:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":75812,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5971:6:159","memberName":"number","nodeType":"MemberAccess","referencedDeclaration":77000,"src":"5951:26:159","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":75809,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"5941:9:159","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":75813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5941:37:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5919:59:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75816,"name":"genesisHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75808,"src":"5997:11:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":75819,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6020:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":75818,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6012:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":75817,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6012:7:159","typeDescriptions":{}}},"id":75820,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6012:10:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5997:25:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"756e61626c6520746f206c6f6f6b75702067656e657369732068617368","id":75822,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6024:31:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_983585e130902c48e8b21c3e7ab53cd0d7f3ffc3109244b201330c039df8ce4e","typeString":"literal_string \"unable to lookup genesis hash\""},"value":"unable to lookup genesis hash"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_983585e130902c48e8b21c3e7ab53cd0d7f3ffc3109244b201330c039df8ce4e","typeString":"literal_string \"unable to lookup genesis hash\""}],"id":75815,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"5989:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5989:67:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75824,"nodeType":"ExpressionStatement","src":"5989:67:159"},{"expression":{"id":75835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":75825,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75791,"src":"6067:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75828,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6074:12:159","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":73656,"src":"6067:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":75829,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6087:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76998,"src":"6067:24:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":75831,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75791,"src":"6104:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75832,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6111:12:159","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":73656,"src":"6104:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":75833,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6124:6:159","memberName":"number","nodeType":"MemberAccess","referencedDeclaration":77000,"src":"6104:26:159","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":75830,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"6094:9:159","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":75834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6094:37:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"6067:64:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":75836,"nodeType":"ExpressionStatement","src":"6067:64:159"}]},"baseFunctions":[73835],"functionSelector":"8b1edf1e","implemented":true,"kind":"function","modifiers":[],"name":"lookupGenesisHash","nameLocation":"5749:17:159","parameters":{"id":75787,"nodeType":"ParameterList","parameters":[],"src":"5766:2:159"},"returnParameters":{"id":75788,"nodeType":"ParameterList","parameters":[],"src":"5778:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75907,"nodeType":"FunctionDefinition","src":"6144:637:159","nodes":[],"body":{"id":75906,"nodeType":"Block","src":"6222:559:159","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75846,"name":"_blobTxHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75842,"src":"6240:11:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":75847,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6255:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6240:16:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"hexValue":"30","id":75850,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6269:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":75849,"name":"blobhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-29,"src":"6260:8:159","typeDescriptions":{"typeIdentifier":"t_function_blobhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":75851,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6260:11:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":75852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6275:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6260:16:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6240:36:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"626c6f622063616e277420626520666f756e64","id":75855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6278:21:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_50f679c075644435e0dfad2beb36f786441d5cb0c0dd08ea9c9aa80169c123d2","typeString":"literal_string \"blob can't be found\""},"value":"blob can't be found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_50f679c075644435e0dfad2beb36f786441d5cb0c0dd08ea9c9aa80169c123d2","typeString":"literal_string \"blob can't be found\""}],"id":75845,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6232:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6232:68:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75857,"nodeType":"ExpressionStatement","src":"6232:68:159"},{"assignments":[75860],"declarations":[{"constant":false,"id":75860,"mutability":"mutable","name":"router","nameLocation":"6327:6:159","nodeType":"VariableDeclaration","scope":75906,"src":"6311:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75859,"nodeType":"UserDefinedTypeName","pathNode":{"id":75858,"name":"Storage","nameLocations":["6311:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"6311:7:159"},"referencedDeclaration":73677,"src":"6311:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75863,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75861,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"6336:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6336:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6311:34:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":75865,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75860,"src":"6363:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75866,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6370:12:159","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":73656,"src":"6363:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":75867,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6383:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76998,"src":"6363:24:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":75870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6399:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":75869,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6391:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":75868,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6391:7:159","typeDescriptions":{}}},"id":75871,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6391:10:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"6363:38:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f6f6b757047656e6573697348617368282960206669727374","id":75873,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6403:58:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""},"value":"router genesis is zero; call `lookupGenesisHash()` first"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""}],"id":75864,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6355:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6355:107:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75875,"nodeType":"ExpressionStatement","src":"6355:107:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"},"id":75885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":75877,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75860,"src":"6494:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75878,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6501:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"6494:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":75879,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6514:5:159","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":77020,"src":"6494:25:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$76986_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":75881,"indexExpression":{"id":75880,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75840,"src":"6520:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6494:34:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":75882,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"6532:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":75883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6537:9:159","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":76986,"src":"6532:14:159","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$76986_$","typeString":"type(enum Gear.CodeState)"}},"id":75884,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6547:7:159","memberName":"Unknown","nodeType":"MemberAccess","referencedDeclaration":76983,"src":"6532:22:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"src":"6494:60:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"676976656e20636f646520696420697320616c7265616479206f6e2076616c69646174696f6e206f722076616c696461746564","id":75886,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6568:53:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_6767c8b133cc7e7263c64dbd155947c93c4fdbe1adf907d9d3428673190ae536","typeString":"literal_string \"given code id is already on validation or validated\""},"value":"given code id is already on validation or validated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6767c8b133cc7e7263c64dbd155947c93c4fdbe1adf907d9d3428673190ae536","typeString":"literal_string \"given code id is already on validation or validated\""}],"id":75876,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6473:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6473:158:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75888,"nodeType":"ExpressionStatement","src":"6473:158:159"},{"expression":{"id":75899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"expression":{"id":75889,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75860,"src":"6642:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75893,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6649:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"6642:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":75894,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6662:5:159","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":77020,"src":"6642:25:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$76986_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":75895,"indexExpression":{"id":75892,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75840,"src":"6668:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6642:34:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":75896,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"6679:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":75897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6684:9:159","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":76986,"src":"6679:14:159","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$76986_$","typeString":"type(enum Gear.CodeState)"}},"id":75898,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6694:19:159","memberName":"ValidationRequested","nodeType":"MemberAccess","referencedDeclaration":76984,"src":"6679:34:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"src":"6642:71:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"id":75900,"nodeType":"ExpressionStatement","src":"6642:71:159"},{"eventCall":{"arguments":[{"id":75902,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75840,"src":"6753:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75903,"name":"_blobTxHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75842,"src":"6762:11:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":75901,"name":"CodeValidationRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73696,"src":"6729:23:159","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (bytes32,bytes32)"}},"id":75904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6729:45:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75905,"nodeType":"EmitStatement","src":"6724:50:159"}]},"baseFunctions":[73843],"functionSelector":"1c149d8a","implemented":true,"kind":"function","modifiers":[],"name":"requestCodeValidation","nameLocation":"6153:21:159","parameters":{"id":75843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75840,"mutability":"mutable","name":"_codeId","nameLocation":"6183:7:159","nodeType":"VariableDeclaration","scope":75907,"src":"6175:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75839,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6175:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":75842,"mutability":"mutable","name":"_blobTxHash","nameLocation":"6200:11:159","nodeType":"VariableDeclaration","scope":75907,"src":"6192:19:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75841,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6192:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6174:38:159"},"returnParameters":{"id":75844,"nodeType":"ParameterList","parameters":[],"src":"6222:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75944,"nodeType":"FunctionDefinition","src":"6787:372:159","nodes":[],"body":{"id":75943,"nodeType":"Block","src":"6930:229:159","nodes":[],"statements":[{"assignments":[75921,75923],"declarations":[{"constant":false,"id":75921,"mutability":"mutable","name":"actorId","nameLocation":"6949:7:159","nodeType":"VariableDeclaration","scope":75943,"src":"6941:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75920,"name":"address","nodeType":"ElementaryTypeName","src":"6941:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75923,"mutability":"mutable","name":"executableBalance","nameLocation":"6966:17:159","nodeType":"VariableDeclaration","scope":75943,"src":"6958:25:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75922,"name":"uint128","nodeType":"ElementaryTypeName","src":"6958:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":75929,"initialValue":{"arguments":[{"id":75925,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75909,"src":"7016:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75926,"name":"_salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75911,"src":"7025:5:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75927,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75915,"src":"7032:6:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75924,"name":"_createProgramWithoutMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76312,"src":"6987:28:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint128_$returns$_t_address_$_t_uint128_$","typeString":"function (bytes32,bytes32,uint128) returns (address,uint128)"}},"id":75928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6987:52:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint128_$","typeString":"tuple(address,uint128)"}},"nodeType":"VariableDeclarationStatement","src":"6940:99:159"},{"expression":{"arguments":[{"expression":{"id":75934,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7079:3:159","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7083:6:159","memberName":"sender","nodeType":"MemberAccess","src":"7079:10:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75936,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75913,"src":"7091:8:159","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":75937,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75915,"src":"7101:6:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":75938,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75923,"src":"7109:17:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"id":75931,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75921,"src":"7058:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75930,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73603,"src":"7050:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$73603_$","typeString":"type(contract IMirror)"}},"id":75932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7050:16:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"id":75933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7067:11:159","memberName":"initMessage","nodeType":"MemberAccess","referencedDeclaration":73602,"src":"7050:28:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (address,bytes memory,uint128,uint128) external"}},"id":75939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7050:77:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75940,"nodeType":"ExpressionStatement","src":"7050:77:159"},{"expression":{"id":75941,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75921,"src":"7145:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75919,"id":75942,"nodeType":"Return","src":"7138:14:159"}]},"baseFunctions":[73857],"functionSelector":"8074b455","implemented":true,"kind":"function","modifiers":[],"name":"createProgram","nameLocation":"6796:13:159","parameters":{"id":75916,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75909,"mutability":"mutable","name":"_codeId","nameLocation":"6818:7:159","nodeType":"VariableDeclaration","scope":75944,"src":"6810:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75908,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6810:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":75911,"mutability":"mutable","name":"_salt","nameLocation":"6835:5:159","nodeType":"VariableDeclaration","scope":75944,"src":"6827:13:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75910,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6827:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":75913,"mutability":"mutable","name":"_payload","nameLocation":"6857:8:159","nodeType":"VariableDeclaration","scope":75944,"src":"6842:23:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":75912,"name":"bytes","nodeType":"ElementaryTypeName","src":"6842:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":75915,"mutability":"mutable","name":"_value","nameLocation":"6875:6:159","nodeType":"VariableDeclaration","scope":75944,"src":"6867:14:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75914,"name":"uint128","nodeType":"ElementaryTypeName","src":"6867:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"6809:73:159"},"returnParameters":{"id":75919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75918,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75944,"src":"6917:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75917,"name":"address","nodeType":"ElementaryTypeName","src":"6917:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6916:9:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":76002,"nodeType":"FunctionDefinition","src":"7165:579:159","nodes":[],"body":{"id":76001,"nodeType":"Block","src":"7367:377:159","nodes":[],"statements":[{"assignments":[75960,75962],"declarations":[{"constant":false,"id":75960,"mutability":"mutable","name":"actorId","nameLocation":"7386:7:159","nodeType":"VariableDeclaration","scope":76001,"src":"7378:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75959,"name":"address","nodeType":"ElementaryTypeName","src":"7378:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75962,"mutability":"mutable","name":"executableBalance","nameLocation":"7403:17:159","nodeType":"VariableDeclaration","scope":76001,"src":"7395:25:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75961,"name":"uint128","nodeType":"ElementaryTypeName","src":"7395:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":75968,"initialValue":{"arguments":[{"id":75964,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75948,"src":"7453:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75965,"name":"_salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75950,"src":"7462:5:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75966,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75954,"src":"7469:6:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75963,"name":"_createProgramWithoutMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76312,"src":"7424:28:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint128_$returns$_t_address_$_t_uint128_$","typeString":"function (bytes32,bytes32,uint128) returns (address,uint128)"}},"id":75967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7424:52:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint128_$","typeString":"tuple(address,uint128)"}},"nodeType":"VariableDeclarationStatement","src":"7377:99:159"},{"assignments":[75971],"declarations":[{"constant":false,"id":75971,"mutability":"mutable","name":"mirrorInstance","nameLocation":"7495:14:159","nodeType":"VariableDeclaration","scope":76001,"src":"7487:22:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"},"typeName":{"id":75970,"nodeType":"UserDefinedTypeName","pathNode":{"id":75969,"name":"IMirror","nameLocations":["7487:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73603,"src":"7487:7:159"},"referencedDeclaration":73603,"src":"7487:7:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"visibility":"internal"}],"id":75975,"initialValue":{"arguments":[{"id":75973,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75960,"src":"7520:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75972,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73603,"src":"7512:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$73603_$","typeString":"type(contract IMirror)"}},"id":75974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7512:16:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"nodeType":"VariableDeclarationStatement","src":"7487:41:159"},{"expression":{"arguments":[{"id":75979,"name":"_decoderImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75946,"src":"7568:12:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":75983,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75948,"src":"7609:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75984,"name":"_salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75950,"src":"7618:5:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":75981,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"7592:3:159","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":75982,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7596:12:159","memberName":"encodePacked","nodeType":"MemberAccess","src":"7592:16:159","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":75985,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7592:32:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":75980,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"7582:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":75986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7582:43:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":75976,"name":"mirrorInstance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75971,"src":"7539:14:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"id":75978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7554:13:159","memberName":"createDecoder","nodeType":"MemberAccess","referencedDeclaration":73591,"src":"7539:28:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes32_$returns$__$","typeString":"function (address,bytes32) external"}},"id":75987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7539:87:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75988,"nodeType":"ExpressionStatement","src":"7539:87:159"},{"expression":{"arguments":[{"expression":{"id":75992,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7664:3:159","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7668:6:159","memberName":"sender","nodeType":"MemberAccess","src":"7664:10:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75994,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75952,"src":"7676:8:159","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":75995,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75954,"src":"7686:6:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":75996,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75962,"src":"7694:17:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":75989,"name":"mirrorInstance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75971,"src":"7637:14:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"id":75991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7652:11:159","memberName":"initMessage","nodeType":"MemberAccess","referencedDeclaration":73602,"src":"7637:26:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (address,bytes memory,uint128,uint128) external"}},"id":75997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7637:75:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75998,"nodeType":"ExpressionStatement","src":"7637:75:159"},{"expression":{"id":75999,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75960,"src":"7730:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75958,"id":76000,"nodeType":"Return","src":"7723:14:159"}]},"baseFunctions":[73873],"functionSelector":"666d124c","implemented":true,"kind":"function","modifiers":[],"name":"createProgramWithDecoder","nameLocation":"7174:24:159","parameters":{"id":75955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75946,"mutability":"mutable","name":"_decoderImpl","nameLocation":"7216:12:159","nodeType":"VariableDeclaration","scope":76002,"src":"7208:20:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75945,"name":"address","nodeType":"ElementaryTypeName","src":"7208:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75948,"mutability":"mutable","name":"_codeId","nameLocation":"7246:7:159","nodeType":"VariableDeclaration","scope":76002,"src":"7238:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75947,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7238:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":75950,"mutability":"mutable","name":"_salt","nameLocation":"7271:5:159","nodeType":"VariableDeclaration","scope":76002,"src":"7263:13:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75949,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7263:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":75952,"mutability":"mutable","name":"_payload","nameLocation":"7301:8:159","nodeType":"VariableDeclaration","scope":76002,"src":"7286:23:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":75951,"name":"bytes","nodeType":"ElementaryTypeName","src":"7286:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":75954,"mutability":"mutable","name":"_value","nameLocation":"7327:6:159","nodeType":"VariableDeclaration","scope":76002,"src":"7319:14:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75953,"name":"uint128","nodeType":"ElementaryTypeName","src":"7319:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"7198:141:159"},"returnParameters":{"id":75958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75957,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76002,"src":"7358:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75956,"name":"address","nodeType":"ElementaryTypeName","src":"7358:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7357:9:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":76134,"nodeType":"FunctionDefinition","src":"7777:1336:159","nodes":[],"body":{"id":76133,"nodeType":"Block","src":"7886:1227:159","nodes":[],"statements":[{"assignments":[76014],"declarations":[{"constant":false,"id":76014,"mutability":"mutable","name":"router","nameLocation":"7912:6:159","nodeType":"VariableDeclaration","scope":76133,"src":"7896:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76013,"nodeType":"UserDefinedTypeName","pathNode":{"id":76012,"name":"Storage","nameLocations":["7896:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"7896:7:159"},"referencedDeclaration":73677,"src":"7896:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":76017,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":76015,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"7921:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":76016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7921:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"7896:34:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":76026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":76019,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76014,"src":"7948:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76020,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7955:12:159","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":73656,"src":"7948:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":76021,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7968:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76998,"src":"7948:24:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":76024,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7984:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":76023,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7976:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":76022,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7976:7:159","typeDescriptions":{}}},"id":76025,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7976:10:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"7948:38:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f6f6b757047656e6573697348617368282960206669727374","id":76027,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7988:58:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""},"value":"router genesis is zero; call `lookupGenesisHash()` first"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""}],"id":76018,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7940:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7940:107:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76029,"nodeType":"ExpressionStatement","src":"7940:107:159"},{"assignments":[76031],"declarations":[{"constant":false,"id":76031,"mutability":"mutable","name":"codeCommitmentsHashes","nameLocation":"8071:21:159","nodeType":"VariableDeclaration","scope":76133,"src":"8058:34:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":76030,"name":"bytes","nodeType":"ElementaryTypeName","src":"8058:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":76032,"nodeType":"VariableDeclarationStatement","src":"8058:34:159"},{"body":{"id":76119,"nodeType":"Block","src":"8157:784:159","statements":[{"assignments":[76048],"declarations":[{"constant":false,"id":76048,"mutability":"mutable","name":"codeCommitment","nameLocation":"8200:14:159","nodeType":"VariableDeclaration","scope":76119,"src":"8171:43:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$76982_calldata_ptr","typeString":"struct Gear.CodeCommitment"},"typeName":{"id":76047,"nodeType":"UserDefinedTypeName","pathNode":{"id":76046,"name":"Gear.CodeCommitment","nameLocations":["8171:4:159","8176:14:159"],"nodeType":"IdentifierPath","referencedDeclaration":76982,"src":"8171:19:159"},"referencedDeclaration":76982,"src":"8171:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$76982_storage_ptr","typeString":"struct Gear.CodeCommitment"}},"visibility":"internal"}],"id":76052,"initialValue":{"baseExpression":{"id":76049,"name":"_codeCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76006,"src":"8217:16:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$76982_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata[] calldata"}},"id":76051,"indexExpression":{"id":76050,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76034,"src":"8234:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8217:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$76982_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"8171:65:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"},"id":76063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":76054,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76014,"src":"8276:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76055,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8283:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"8276:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":76056,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8296:5:159","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":77020,"src":"8276:25:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$76986_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":76059,"indexExpression":{"expression":{"id":76057,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76048,"src":"8302:14:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$76982_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":76058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8317:2:159","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":76979,"src":"8302:17:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8276:44:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":76060,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"8324:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8329:9:159","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":76986,"src":"8324:14:159","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$76986_$","typeString":"type(enum Gear.CodeState)"}},"id":76062,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8339:19:159","memberName":"ValidationRequested","nodeType":"MemberAccess","referencedDeclaration":76984,"src":"8324:34:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"src":"8276:82:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f6465206d7573742062652072657175657374656420666f722076616c69646174696f6e20746f20626520636f6d6d6974746564","id":76064,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8376:55:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_5641fde195ef857639d9de420cb3fc56957be6957a3c8a5e78a2243186a510e8","typeString":"literal_string \"code must be requested for validation to be committed\""},"value":"code must be requested for validation to be committed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5641fde195ef857639d9de420cb3fc56957be6957a3c8a5e78a2243186a510e8","typeString":"literal_string \"code must be requested for validation to be committed\""}],"id":76053,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"8251:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8251:194:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76066,"nodeType":"ExpressionStatement","src":"8251:194:159"},{"condition":{"expression":{"id":76067,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76048,"src":"8464:14:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$76982_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":76068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8479:5:159","memberName":"valid","nodeType":"MemberAccess","referencedDeclaration":76981,"src":"8464:20:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":76098,"nodeType":"Block","src":"8655:84:159","statements":[{"expression":{"id":76096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"8673:51:159","subExpression":{"baseExpression":{"expression":{"expression":{"id":76090,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76014,"src":"8680:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76091,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8687:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"8680:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":76092,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8700:5:159","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":77020,"src":"8680:25:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$76986_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":76095,"indexExpression":{"expression":{"id":76093,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76048,"src":"8706:14:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$76982_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":76094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8721:2:159","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":76979,"src":"8706:17:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8680:44:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76097,"nodeType":"ExpressionStatement","src":"8673:51:159"}]},"id":76099,"nodeType":"IfStatement","src":"8460:279:159","trueBody":{"id":76089,"nodeType":"Block","src":"8486:163:159","statements":[{"expression":{"id":76080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"expression":{"id":76069,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76014,"src":"8504:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76074,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8511:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"8504:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":76075,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8524:5:159","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":77020,"src":"8504:25:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$76986_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":76076,"indexExpression":{"expression":{"id":76072,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76048,"src":"8530:14:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$76982_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":76073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8545:2:159","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":76979,"src":"8530:17:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8504:44:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":76077,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"8551:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8556:9:159","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":76986,"src":"8551:14:159","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$76986_$","typeString":"type(enum Gear.CodeState)"}},"id":76079,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8566:9:159","memberName":"Validated","nodeType":"MemberAccess","referencedDeclaration":76985,"src":"8551:24:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"src":"8504:71:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"id":76081,"nodeType":"ExpressionStatement","src":"8504:71:159"},{"expression":{"id":76087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8593:41:159","subExpression":{"expression":{"expression":{"id":76082,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76014,"src":"8593:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76085,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8600:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"8593:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":76086,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"8613:19:159","memberName":"validatedCodesCount","nodeType":"MemberAccess","referencedDeclaration":77028,"src":"8593:39:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76088,"nodeType":"ExpressionStatement","src":"8593:41:159"}]}},{"eventCall":{"arguments":[{"expression":{"id":76101,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76048,"src":"8775:14:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$76982_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":76102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8790:2:159","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":76979,"src":"8775:17:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76103,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76048,"src":"8794:14:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$76982_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":76104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8809:5:159","memberName":"valid","nodeType":"MemberAccess","referencedDeclaration":76981,"src":"8794:20:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":76100,"name":"CodeGotValidated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73689,"src":"8758:16:159","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bool_$returns$__$","typeString":"function (bytes32,bool)"}},"id":76105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8758:57:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76106,"nodeType":"EmitStatement","src":"8753:62:159"},{"expression":{"id":76117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":76107,"name":"codeCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76031,"src":"8830:21:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":76111,"name":"codeCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76031,"src":"8867:21:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":76114,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76048,"src":"8914:14:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$76982_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_CodeCommitment_$76982_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}],"expression":{"id":76112,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"8890:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8895:18:159","memberName":"codeCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":77158,"src":"8890:23:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_CodeCommitment_$76982_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.CodeCommitment calldata) pure returns (bytes32)"}},"id":76115,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8890:39:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76109,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8854:5:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":76108,"name":"bytes","nodeType":"ElementaryTypeName","src":"8854:5:159","typeDescriptions":{}}},"id":76110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8860:6:159","memberName":"concat","nodeType":"MemberAccess","src":"8854:12:159","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8854:76:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"8830:100:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":76118,"nodeType":"ExpressionStatement","src":"8830:100:159"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76037,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76034,"src":"8123:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":76038,"name":"_codeCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76006,"src":"8127:16:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$76982_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata[] calldata"}},"id":76039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8144:6:159","memberName":"length","nodeType":"MemberAccess","src":"8127:23:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8123:27:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76120,"initializationExpression":{"assignments":[76034],"declarations":[{"constant":false,"id":76034,"mutability":"mutable","name":"i","nameLocation":"8116:1:159","nodeType":"VariableDeclaration","scope":76120,"src":"8108:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76033,"name":"uint256","nodeType":"ElementaryTypeName","src":"8108:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76036,"initialValue":{"hexValue":"30","id":76035,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8120:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8108:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":76042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8152:3:159","subExpression":{"id":76041,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76034,"src":"8152:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76043,"nodeType":"ExpressionStatement","src":"8152:3:159"},"nodeType":"ForStatement","src":"8103:838:159"},{"expression":{"arguments":[{"arguments":[{"id":76124,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76014,"src":"8996:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"arguments":[{"id":76126,"name":"codeCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76031,"src":"9014:21:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76125,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"9004:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9004:32:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":76128,"name":"_signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76009,"src":"9038:11:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}],"expression":{"id":76122,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"8972:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8977:18:159","memberName":"validateSignatures","nodeType":"MemberAccess","referencedDeclaration":77334,"src":"8972:23:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$73677_storage_ptr_$_t_bytes32_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$returns$_t_bool_$","typeString":"function (struct IRouter.Storage storage pointer,bytes32,bytes calldata[] calldata) view returns (bool)"}},"id":76129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8972:78:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7369676e61747572657320766572696669636174696f6e206661696c6564","id":76130,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9064:32:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_42f70f68087ddd2ea90e0adc36eeb88121bbdb06c88480a0c6a87e4a00dde3b2","typeString":"literal_string \"signatures verification failed\""},"value":"signatures verification failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_42f70f68087ddd2ea90e0adc36eeb88121bbdb06c88480a0c6a87e4a00dde3b2","typeString":"literal_string \"signatures verification failed\""}],"id":76121,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"8951:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76131,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8951:155:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76132,"nodeType":"ExpressionStatement","src":"8951:155:159"}]},"baseFunctions":[73884],"functionSelector":"e97d3eb3","implemented":true,"kind":"function","modifiers":[],"name":"commitCodes","nameLocation":"7786:11:159","parameters":{"id":76010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76006,"mutability":"mutable","name":"_codeCommitments","nameLocation":"7829:16:159","nodeType":"VariableDeclaration","scope":76134,"src":"7798:47:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$76982_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.CodeCommitment[]"},"typeName":{"baseType":{"id":76004,"nodeType":"UserDefinedTypeName","pathNode":{"id":76003,"name":"Gear.CodeCommitment","nameLocations":["7798:4:159","7803:14:159"],"nodeType":"IdentifierPath","referencedDeclaration":76982,"src":"7798:19:159"},"referencedDeclaration":76982,"src":"7798:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$76982_storage_ptr","typeString":"struct Gear.CodeCommitment"}},"id":76005,"nodeType":"ArrayTypeName","src":"7798:21:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$76982_storage_$dyn_storage_ptr","typeString":"struct Gear.CodeCommitment[]"}},"visibility":"internal"},{"constant":false,"id":76009,"mutability":"mutable","name":"_signatures","nameLocation":"7864:11:159","nodeType":"VariableDeclaration","scope":76134,"src":"7847:28:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":76007,"name":"bytes","nodeType":"ElementaryTypeName","src":"7847:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":76008,"nodeType":"ArrayTypeName","src":"7847:7:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"7797:79:159"},"returnParameters":{"id":76011,"nodeType":"ParameterList","parameters":[],"src":"7886:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":76214,"nodeType":"FunctionDefinition","src":"9119:798:159","nodes":[],"body":{"id":76213,"nodeType":"Block","src":"9264:653:159","nodes":[],"statements":[{"assignments":[76148],"declarations":[{"constant":false,"id":76148,"mutability":"mutable","name":"router","nameLocation":"9290:6:159","nodeType":"VariableDeclaration","scope":76213,"src":"9274:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76147,"nodeType":"UserDefinedTypeName","pathNode":{"id":76146,"name":"Storage","nameLocations":["9274:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"9274:7:159"},"referencedDeclaration":73677,"src":"9274:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":76151,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":76149,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"9299:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":76150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9299:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"9274:34:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":76160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":76153,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76148,"src":"9326:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76154,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9333:12:159","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":73656,"src":"9326:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":76155,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9346:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76998,"src":"9326:24:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":76158,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9362:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":76157,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9354:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":76156,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9354:7:159","typeDescriptions":{}}},"id":76159,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9354:10:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"9326:38:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f6f6b757047656e6573697348617368282960206669727374","id":76161,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9366:58:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""},"value":"router genesis is zero; call `lookupGenesisHash()` first"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""}],"id":76152,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"9318:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9318:107:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76163,"nodeType":"ExpressionStatement","src":"9318:107:159"},{"assignments":[76165],"declarations":[{"constant":false,"id":76165,"mutability":"mutable","name":"blockCommitmentsHashes","nameLocation":"9449:22:159","nodeType":"VariableDeclaration","scope":76213,"src":"9436:35:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":76164,"name":"bytes","nodeType":"ElementaryTypeName","src":"9436:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":76166,"nodeType":"VariableDeclarationStatement","src":"9436:35:159"},{"body":{"id":76199,"nodeType":"Block","src":"9537:207:159","statements":[{"assignments":[76182],"declarations":[{"constant":false,"id":76182,"mutability":"mutable","name":"blockCommitment","nameLocation":"9581:15:159","nodeType":"VariableDeclaration","scope":76199,"src":"9551:45:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment"},"typeName":{"id":76181,"nodeType":"UserDefinedTypeName","pathNode":{"id":76180,"name":"Gear.BlockCommitment","nameLocations":["9551:4:159","9556:15:159"],"nodeType":"IdentifierPath","referencedDeclaration":76977,"src":"9551:20:159"},"referencedDeclaration":76977,"src":"9551:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_storage_ptr","typeString":"struct Gear.BlockCommitment"}},"visibility":"internal"}],"id":76186,"initialValue":{"baseExpression":{"id":76183,"name":"_blockCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76138,"src":"9599:17:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$76977_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata[] calldata"}},"id":76185,"indexExpression":{"id":76184,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76168,"src":"9617:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9599:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"9551:68:159"},{"expression":{"id":76197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":76187,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76165,"src":"9633:22:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":76191,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76165,"src":"9671:22:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":76193,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76148,"src":"9708:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"id":76194,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76182,"src":"9716:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}],"id":76192,"name":"_commitBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76413,"src":"9695:12:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Storage_$73677_storage_ptr_$_t_struct$_BlockCommitment_$76977_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.Storage storage pointer,struct Gear.BlockCommitment calldata) returns (bytes32)"}},"id":76195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9695:37:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76189,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9658:5:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":76188,"name":"bytes","nodeType":"ElementaryTypeName","src":"9658:5:159","typeDescriptions":{}}},"id":76190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9664:6:159","memberName":"concat","nodeType":"MemberAccess","src":"9658:12:159","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9658:75:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"9633:100:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":76198,"nodeType":"ExpressionStatement","src":"9633:100:159"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76171,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76168,"src":"9502:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":76172,"name":"_blockCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76138,"src":"9506:17:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$76977_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata[] calldata"}},"id":76173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9524:6:159","memberName":"length","nodeType":"MemberAccess","src":"9506:24:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9502:28:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76200,"initializationExpression":{"assignments":[76168],"declarations":[{"constant":false,"id":76168,"mutability":"mutable","name":"i","nameLocation":"9495:1:159","nodeType":"VariableDeclaration","scope":76200,"src":"9487:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76167,"name":"uint256","nodeType":"ElementaryTypeName","src":"9487:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76170,"initialValue":{"hexValue":"30","id":76169,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9499:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9487:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":76176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"9532:3:159","subExpression":{"id":76175,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76168,"src":"9532:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76177,"nodeType":"ExpressionStatement","src":"9532:3:159"},"nodeType":"ForStatement","src":"9482:262:159"},{"expression":{"arguments":[{"arguments":[{"id":76204,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76148,"src":"9799:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"arguments":[{"id":76206,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76165,"src":"9817:22:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76205,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"9807:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9807:33:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":76208,"name":"_signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76141,"src":"9842:11:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}],"expression":{"id":76202,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"9775:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9780:18:159","memberName":"validateSignatures","nodeType":"MemberAccess","referencedDeclaration":77334,"src":"9775:23:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$73677_storage_ptr_$_t_bytes32_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$returns$_t_bool_$","typeString":"function (struct IRouter.Storage storage pointer,bytes32,bytes calldata[] calldata) view returns (bool)"}},"id":76209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9775:79:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7369676e61747572657320766572696669636174696f6e206661696c6564","id":76210,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9868:32:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_42f70f68087ddd2ea90e0adc36eeb88121bbdb06c88480a0c6a87e4a00dde3b2","typeString":"literal_string \"signatures verification failed\""},"value":"signatures verification failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_42f70f68087ddd2ea90e0adc36eeb88121bbdb06c88480a0c6a87e4a00dde3b2","typeString":"literal_string \"signatures verification failed\""}],"id":76201,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"9754:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9754:156:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76212,"nodeType":"ExpressionStatement","src":"9754:156:159"}]},"baseFunctions":[73895],"functionSelector":"01b1d156","implemented":true,"kind":"function","modifiers":[{"id":76144,"kind":"modifierInvocation","modifierName":{"id":76143,"name":"nonReentrant","nameLocations":["9247:12:159"],"nodeType":"IdentifierPath","referencedDeclaration":44000,"src":"9247:12:159"},"nodeType":"ModifierInvocation","src":"9247:12:159"}],"name":"commitBlocks","nameLocation":"9128:12:159","parameters":{"id":76142,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76138,"mutability":"mutable","name":"_blockCommitments","nameLocation":"9173:17:159","nodeType":"VariableDeclaration","scope":76214,"src":"9141:49:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$76977_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.BlockCommitment[]"},"typeName":{"baseType":{"id":76136,"nodeType":"UserDefinedTypeName","pathNode":{"id":76135,"name":"Gear.BlockCommitment","nameLocations":["9141:4:159","9146:15:159"],"nodeType":"IdentifierPath","referencedDeclaration":76977,"src":"9141:20:159"},"referencedDeclaration":76977,"src":"9141:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_storage_ptr","typeString":"struct Gear.BlockCommitment"}},"id":76137,"nodeType":"ArrayTypeName","src":"9141:22:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$76977_storage_$dyn_storage_ptr","typeString":"struct Gear.BlockCommitment[]"}},"visibility":"internal"},{"constant":false,"id":76141,"mutability":"mutable","name":"_signatures","nameLocation":"9209:11:159","nodeType":"VariableDeclaration","scope":76214,"src":"9192:28:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":76139,"name":"bytes","nodeType":"ElementaryTypeName","src":"9192:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":76140,"nodeType":"ArrayTypeName","src":"9192:7:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"9140:81:159"},"returnParameters":{"id":76145,"nodeType":"ParameterList","parameters":[],"src":"9264:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":76312,"nodeType":"FunctionDefinition","src":"9959:1144:159","nodes":[],"body":{"id":76311,"nodeType":"Block","src":"10100:1003:159","nodes":[],"statements":[{"assignments":[76229],"declarations":[{"constant":false,"id":76229,"mutability":"mutable","name":"router","nameLocation":"10126:6:159","nodeType":"VariableDeclaration","scope":76311,"src":"10110:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76228,"nodeType":"UserDefinedTypeName","pathNode":{"id":76227,"name":"Storage","nameLocations":["10110:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"10110:7:159"},"referencedDeclaration":73677,"src":"10110:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":76232,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":76230,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"10135:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":76231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10135:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"10110:34:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":76241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":76234,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76229,"src":"10162:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76235,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10169:12:159","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":73656,"src":"10162:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":76236,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10182:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76998,"src":"10162:24:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":76239,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10198:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":76238,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10190:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":76237,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10190:7:159","typeDescriptions":{}}},"id":76240,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10190:10:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"10162:38:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f6f6b757047656e6573697348617368282960206669727374","id":76242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10202:58:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""},"value":"router genesis is zero; call `lookupGenesisHash()` first"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""}],"id":76233,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"10154:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10154:107:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76244,"nodeType":"ExpressionStatement","src":"10154:107:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"},"id":76254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":76246,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76229,"src":"10293:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76247,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10300:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"10293:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":76248,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10313:5:159","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":77020,"src":"10293:25:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$76986_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":76250,"indexExpression":{"id":76249,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76216,"src":"10319:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10293:34:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":76251,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"10331:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10336:9:159","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":76986,"src":"10331:14:159","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$76986_$","typeString":"type(enum Gear.CodeState)"}},"id":76253,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10346:9:159","memberName":"Validated","nodeType":"MemberAccess","referencedDeclaration":76985,"src":"10331:24:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"src":"10293:62:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f6465206d7573742062652076616c696461746564206265666f72652070726f6772616d206372656174696f6e","id":76255,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10369:48:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_b5148f5f8f63c81848fb75aafb9815f0b7600419fddac60bd483eec7cf08a631","typeString":"literal_string \"code must be validated before program creation\""},"value":"code must be validated before program creation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b5148f5f8f63c81848fb75aafb9815f0b7600419fddac60bd483eec7cf08a631","typeString":"literal_string \"code must be validated before program creation\""}],"id":76245,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"10272:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10272:155:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76257,"nodeType":"ExpressionStatement","src":"10272:155:159"},{"assignments":[76259],"declarations":[{"constant":false,"id":76259,"mutability":"mutable","name":"executableBalance","nameLocation":"10505:17:159","nodeType":"VariableDeclaration","scope":76311,"src":"10497:25:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":76258,"name":"uint128","nodeType":"ElementaryTypeName","src":"10497:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":76261,"initialValue":{"hexValue":"31305f3030305f3030305f3030305f303030","id":76260,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10525:18:159","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000_by_1","typeString":"int_const 10000000000000"},"value":"10_000_000_000_000"},"nodeType":"VariableDeclarationStatement","src":"10497:46:159"},{"expression":{"arguments":[{"id":76263,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76229,"src":"10569:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":76266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76264,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76259,"src":"10577:17:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":76265,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76220,"src":"10597:6:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"10577:26:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":76262,"name":"_retrieveValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76665,"src":"10554:14:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Storage_$73677_storage_ptr_$_t_uint128_$returns$__$","typeString":"function (struct IRouter.Storage storage pointer,uint128)"}},"id":76267,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10554:50:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76268,"nodeType":"ExpressionStatement","src":"10554:50:159"},{"assignments":[76270],"declarations":[{"constant":false,"id":76270,"mutability":"mutable","name":"actorId","nameLocation":"10773:7:159","nodeType":"VariableDeclaration","scope":76311,"src":"10765:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76269,"name":"address","nodeType":"ElementaryTypeName","src":"10765:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":76284,"initialValue":{"arguments":[{"expression":{"expression":{"id":76273,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76229,"src":"10821:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76274,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10828:13:159","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":73664,"src":"10821:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":76275,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10842:11:159","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":76961,"src":"10821:32:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":76279,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76216,"src":"10882:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":76280,"name":"_salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76218,"src":"10891:5:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76277,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"10865:3:159","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":76278,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10869:12:159","memberName":"encodePacked","nodeType":"MemberAccess","src":"10865:16:159","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10865:32:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76276,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"10855:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10855:43:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76271,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41840,"src":"10795:6:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Clones_$41840_$","typeString":"type(library Clones)"}},"id":76272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10802:18:159","memberName":"cloneDeterministic","nodeType":"MemberAccess","referencedDeclaration":41758,"src":"10795:25:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$","typeString":"function (address,bytes32) returns (address)"}},"id":76283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10795:104:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"10765:134:159"},{"expression":{"id":76293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"expression":{"id":76285,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76229,"src":"10910:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76289,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10917:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"10910:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":76290,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10930:8:159","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":77024,"src":"10910:28:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":76291,"indexExpression":{"id":76288,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76270,"src":"10939:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10910:37:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":76292,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76216,"src":"10950:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"10910:47:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":76294,"nodeType":"ExpressionStatement","src":"10910:47:159"},{"expression":{"id":76300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"10967:35:159","subExpression":{"expression":{"expression":{"id":76295,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76229,"src":"10967:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76298,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10974:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"10967:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":76299,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10987:13:159","memberName":"programsCount","nodeType":"MemberAccess","referencedDeclaration":77026,"src":"10967:33:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76301,"nodeType":"ExpressionStatement","src":"10967:35:159"},{"eventCall":{"arguments":[{"id":76303,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76270,"src":"11033:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":76304,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76216,"src":"11042:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":76302,"name":"ProgramCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73710,"src":"11018:14:159","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bytes32_$returns$__$","typeString":"function (address,bytes32)"}},"id":76305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11018:32:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76306,"nodeType":"EmitStatement","src":"11013:37:159"},{"expression":{"components":[{"id":76307,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76270,"src":"11069:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":76308,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76259,"src":"11078:17:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"id":76309,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11068:28:159","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint128_$","typeString":"tuple(address,uint128)"}},"functionReturnParameters":76226,"id":76310,"nodeType":"Return","src":"11061:35:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_createProgramWithoutMessage","nameLocation":"9968:28:159","parameters":{"id":76221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76216,"mutability":"mutable","name":"_codeId","nameLocation":"10005:7:159","nodeType":"VariableDeclaration","scope":76312,"src":"9997:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76215,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9997:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":76218,"mutability":"mutable","name":"_salt","nameLocation":"10022:5:159","nodeType":"VariableDeclaration","scope":76312,"src":"10014:13:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76217,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10014:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":76220,"mutability":"mutable","name":"_value","nameLocation":"10037:6:159","nodeType":"VariableDeclaration","scope":76312,"src":"10029:14:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":76219,"name":"uint128","nodeType":"ElementaryTypeName","src":"10029:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"9996:48:159"},"returnParameters":{"id":76226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76223,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76312,"src":"10078:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76222,"name":"address","nodeType":"ElementaryTypeName","src":"10078:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":76225,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76312,"src":"10087:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":76224,"name":"uint128","nodeType":"ElementaryTypeName","src":"10087:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"10077:18:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76413,"nodeType":"FunctionDefinition","src":"11109:1326:159","nodes":[],"body":{"id":76412,"nodeType":"Block","src":"11249:1186:159","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":76329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":76324,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76315,"src":"11280:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76325,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11287:20:159","memberName":"latestCommittedBlock","nodeType":"MemberAccess","referencedDeclaration":73660,"src":"11280:27:159","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBlockInfo_$76991_storage","typeString":"struct Gear.CommittedBlockInfo storage ref"}},"id":76326,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11308:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76988,"src":"11280:32:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":76327,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76318,"src":"11316:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":76328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11333:22:159","memberName":"previousCommittedBlock","nodeType":"MemberAccess","referencedDeclaration":76970,"src":"11316:39:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11280:75:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e76616c69642070726576696f757320636f6d6d697474656420626c6f636b2068617368","id":76330,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11369:39:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_4a13fb2485de3ac50aa69e9cf88b3994102e3ec72af73005448c8624cb4f1ed7","typeString":"literal_string \"invalid previous committed block hash\""},"value":"invalid previous committed block hash"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4a13fb2485de3ac50aa69e9cf88b3994102e3ec72af73005448c8624cb4f1ed7","typeString":"literal_string \"invalid previous committed block hash\""}],"id":76323,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11259:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11259:159:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76332,"nodeType":"ExpressionStatement","src":"11259:159:159"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":76336,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76318,"src":"11461:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":76337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11478:16:159","memberName":"predecessorBlock","nodeType":"MemberAccess","referencedDeclaration":76972,"src":"11461:33:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76334,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"11437:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11442:18:159","memberName":"blockIsPredecessor","nodeType":"MemberAccess","referencedDeclaration":77139,"src":"11437:23:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32) view returns (bool)"}},"id":76338,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11437:58:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"616c6c6f776564207072656465636573736f7220626c6f636b207761736e277420666f756e64","id":76339,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11497:40:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_b3ebb0be53d5bf46a2d46be11aa5ba444a61071a9171c96feb964b4bc5f6539a","typeString":"literal_string \"allowed predecessor block wasn't found\""},"value":"allowed predecessor block wasn't found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b3ebb0be53d5bf46a2d46be11aa5ba444a61071a9171c96feb964b4bc5f6539a","typeString":"literal_string \"allowed predecessor block wasn't found\""}],"id":76333,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11429:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11429:109:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76341,"nodeType":"ExpressionStatement","src":"11429:109:159"},{"expression":{"id":76352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":76342,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76315,"src":"11678:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76344,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11685:20:159","memberName":"latestCommittedBlock","nodeType":"MemberAccess","referencedDeclaration":73660,"src":"11678:27:159","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBlockInfo_$76991_storage","typeString":"struct Gear.CommittedBlockInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":76347,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76318,"src":"11732:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":76348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11749:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76966,"src":"11732:21:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76349,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76318,"src":"11755:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":76350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11772:9:159","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":76968,"src":"11755:26:159","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"expression":{"id":76345,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"11708:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11713:18:159","memberName":"CommittedBlockInfo","nodeType":"MemberAccess","referencedDeclaration":76991,"src":"11708:23:159","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_CommittedBlockInfo_$76991_storage_ptr_$","typeString":"type(struct Gear.CommittedBlockInfo storage pointer)"}},"id":76351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11708:74:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBlockInfo_$76991_memory_ptr","typeString":"struct Gear.CommittedBlockInfo memory"}},"src":"11678:104:159","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBlockInfo_$76991_storage","typeString":"struct Gear.CommittedBlockInfo storage ref"}},"id":76353,"nodeType":"ExpressionStatement","src":"11678:104:159"},{"assignments":[76355],"declarations":[{"constant":false,"id":76355,"mutability":"mutable","name":"transitionsHashes","nameLocation":"11806:17:159","nodeType":"VariableDeclaration","scope":76412,"src":"11793:30:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":76354,"name":"bytes","nodeType":"ElementaryTypeName","src":"11793:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":76356,"nodeType":"VariableDeclarationStatement","src":"11793:30:159"},{"body":{"id":76390,"nodeType":"Block","src":"11900:207:159","statements":[{"assignments":[76373],"declarations":[{"constant":false,"id":76373,"mutability":"mutable","name":"stateTransition","nameLocation":"11944:15:159","nodeType":"VariableDeclaration","scope":76390,"src":"11914:45:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition"},"typeName":{"id":76372,"nodeType":"UserDefinedTypeName","pathNode":{"id":76371,"name":"Gear.StateTransition","nameLocations":["11914:4:159","11919:15:159"],"nodeType":"IdentifierPath","referencedDeclaration":77051,"src":"11914:20:159"},"referencedDeclaration":77051,"src":"11914:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_storage_ptr","typeString":"struct Gear.StateTransition"}},"visibility":"internal"}],"id":76378,"initialValue":{"baseExpression":{"expression":{"id":76374,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76318,"src":"11962:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":76375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11979:11:159","memberName":"transitions","nodeType":"MemberAccess","referencedDeclaration":76976,"src":"11962:28:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$77051_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.StateTransition calldata[] calldata"}},"id":76377,"indexExpression":{"id":76376,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76358,"src":"11991:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11962:31:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"nodeType":"VariableDeclarationStatement","src":"11914:79:159"},{"expression":{"id":76388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":76379,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76355,"src":"12008:17:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":76383,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76355,"src":"12041:17:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":76385,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76373,"src":"12079:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}],"id":76384,"name":"_doStateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76634,"src":"12060:18:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_StateTransition_$77051_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.StateTransition calldata) returns (bytes32)"}},"id":76386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12060:35:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76381,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12028:5:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":76380,"name":"bytes","nodeType":"ElementaryTypeName","src":"12028:5:159","typeDescriptions":{}}},"id":76382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12034:6:159","memberName":"concat","nodeType":"MemberAccess","src":"12028:12:159","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76387,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12028:68:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"12008:88:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":76389,"nodeType":"ExpressionStatement","src":"12008:88:159"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76361,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76358,"src":"11854:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":76362,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76318,"src":"11858:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":76363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11875:11:159","memberName":"transitions","nodeType":"MemberAccess","referencedDeclaration":76976,"src":"11858:28:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$77051_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.StateTransition calldata[] calldata"}},"id":76364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11887:6:159","memberName":"length","nodeType":"MemberAccess","src":"11858:35:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11854:39:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76391,"initializationExpression":{"assignments":[76358],"declarations":[{"constant":false,"id":76358,"mutability":"mutable","name":"i","nameLocation":"11847:1:159","nodeType":"VariableDeclaration","scope":76391,"src":"11839:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76357,"name":"uint256","nodeType":"ElementaryTypeName","src":"11839:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76360,"initialValue":{"hexValue":"30","id":76359,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11851:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11839:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":76367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"11895:3:159","subExpression":{"id":76366,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76358,"src":"11895:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76368,"nodeType":"ExpressionStatement","src":"11895:3:159"},"nodeType":"ForStatement","src":"11834:273:159"},{"eventCall":{"arguments":[{"expression":{"id":76393,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76318,"src":"12137:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":76394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12154:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76966,"src":"12137:21:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":76392,"name":"BlockCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73682,"src":"12122:14:159","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":76395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12122:37:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76396,"nodeType":"EmitStatement","src":"12117:42:159"},{"expression":{"arguments":[{"expression":{"id":76399,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76318,"src":"12215:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":76400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12232:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76966,"src":"12215:21:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76401,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76318,"src":"12250:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":76402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12267:9:159","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":76968,"src":"12250:26:159","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"expression":{"id":76403,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76318,"src":"12290:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":76404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12307:22:159","memberName":"previousCommittedBlock","nodeType":"MemberAccess","referencedDeclaration":76970,"src":"12290:39:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76405,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76318,"src":"12343:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":76406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12360:16:159","memberName":"predecessorBlock","nodeType":"MemberAccess","referencedDeclaration":76972,"src":"12343:33:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":76408,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76355,"src":"12400:17:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76407,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"12390:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12390:28:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76397,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"12177:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12182:19:159","memberName":"blockCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":77095,"src":"12177:24:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint48_$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint48,bytes32,bytes32,bytes32) pure returns (bytes32)"}},"id":76410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12177:251:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":76322,"id":76411,"nodeType":"Return","src":"12170:258:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_commitBlock","nameLocation":"11118:12:159","parameters":{"id":76319,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76315,"mutability":"mutable","name":"router","nameLocation":"11147:6:159","nodeType":"VariableDeclaration","scope":76413,"src":"11131:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76314,"nodeType":"UserDefinedTypeName","pathNode":{"id":76313,"name":"Storage","nameLocations":["11131:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"11131:7:159"},"referencedDeclaration":73677,"src":"11131:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"},{"constant":false,"id":76318,"mutability":"mutable","name":"_blockCommitment","nameLocation":"11185:16:159","nodeType":"VariableDeclaration","scope":76413,"src":"11155:46:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment"},"typeName":{"id":76317,"nodeType":"UserDefinedTypeName","pathNode":{"id":76316,"name":"Gear.BlockCommitment","nameLocations":["11155:4:159","11160:15:159"],"nodeType":"IdentifierPath","referencedDeclaration":76977,"src":"11155:20:159"},"referencedDeclaration":76977,"src":"11155:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_storage_ptr","typeString":"struct Gear.BlockCommitment"}},"visibility":"internal"}],"src":"11130:72:159"},"returnParameters":{"id":76322,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76321,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76413,"src":"11236:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76320,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11236:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"11235:9:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76634,"nodeType":"FunctionDefinition","src":"12441:2183:159","nodes":[],"body":{"id":76633,"nodeType":"Block","src":"12543:2081:159","nodes":[],"statements":[{"assignments":[76423],"declarations":[{"constant":false,"id":76423,"mutability":"mutable","name":"router","nameLocation":"12569:6:159","nodeType":"VariableDeclaration","scope":76633,"src":"12553:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76422,"nodeType":"UserDefinedTypeName","pathNode":{"id":76421,"name":"Storage","nameLocations":["12553:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"12553:7:159"},"referencedDeclaration":73677,"src":"12553:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":76426,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":76424,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"12578:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":76425,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12578:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"12553:34:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":76435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":76428,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76423,"src":"12619:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76429,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12626:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"12619:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":76430,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12639:8:159","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":77024,"src":"12619:28:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":76433,"indexExpression":{"expression":{"id":76431,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"12648:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12665:7:159","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":77036,"src":"12648:24:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12619:54:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":76434,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12677:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12619:59:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f756c646e277420706572666f726d207472616e736974696f6e20666f7220756e6b6e6f776e2070726f6772616d","id":76436,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12692:49:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_31c5a066db04c91ff8a121d71b24335cd54a57cfe01a7cdd47f234348f1a72d6","typeString":"literal_string \"couldn't perform transition for unknown program\""},"value":"couldn't perform transition for unknown program"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_31c5a066db04c91ff8a121d71b24335cd54a57cfe01a7cdd47f234348f1a72d6","typeString":"literal_string \"couldn't perform transition for unknown program\""}],"id":76427,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"12598:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12598:153:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76438,"nodeType":"ExpressionStatement","src":"12598:153:159"},{"assignments":[76441],"declarations":[{"constant":false,"id":76441,"mutability":"mutable","name":"wrappedVaraActor","nameLocation":"12775:16:159","nodeType":"VariableDeclaration","scope":76633,"src":"12762:29:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"},"typeName":{"id":76440,"nodeType":"UserDefinedTypeName","pathNode":{"id":76439,"name":"IWrappedVara","nameLocations":["12762:12:159"],"nodeType":"IdentifierPath","referencedDeclaration":73907,"src":"12762:12:159"},"referencedDeclaration":73907,"src":"12762:12:159","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"id":76447,"initialValue":{"arguments":[{"expression":{"expression":{"id":76443,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76423,"src":"12807:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76444,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12814:13:159","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":73664,"src":"12807:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":76445,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12828:11:159","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":76963,"src":"12807:32:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":76442,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73907,"src":"12794:12:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$73907_$","typeString":"type(contract IWrappedVara)"}},"id":76446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12794:46:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"}},"nodeType":"VariableDeclarationStatement","src":"12762:78:159"},{"expression":{"arguments":[{"expression":{"id":76451,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"12876:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12893:7:159","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":77036,"src":"12876:24:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76453,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"12902:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12919:14:159","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":77042,"src":"12902:31:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":76448,"name":"wrappedVaraActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76441,"src":"12850:16:159","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"}},"id":76450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12867:8:159","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":43107,"src":"12850:25:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":76455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12850:84:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76456,"nodeType":"ExpressionStatement","src":"12850:84:159"},{"assignments":[76459],"declarations":[{"constant":false,"id":76459,"mutability":"mutable","name":"mirrorActor","nameLocation":"12953:11:159","nodeType":"VariableDeclaration","scope":76633,"src":"12945:19:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"},"typeName":{"id":76458,"nodeType":"UserDefinedTypeName","pathNode":{"id":76457,"name":"IMirror","nameLocations":["12945:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73603,"src":"12945:7:159"},"referencedDeclaration":73603,"src":"12945:7:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"visibility":"internal"}],"id":76464,"initialValue":{"arguments":[{"expression":{"id":76461,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"12975:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12992:7:159","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":77036,"src":"12975:24:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":76460,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73603,"src":"12967:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$73603_$","typeString":"type(contract IMirror)"}},"id":76463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12967:33:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"nodeType":"VariableDeclarationStatement","src":"12945:55:159"},{"assignments":[76466],"declarations":[{"constant":false,"id":76466,"mutability":"mutable","name":"valueClaimsBytes","nameLocation":"13024:16:159","nodeType":"VariableDeclaration","scope":76633,"src":"13011:29:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":76465,"name":"bytes","nodeType":"ElementaryTypeName","src":"13011:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":76467,"nodeType":"VariableDeclarationStatement","src":"13011:29:159"},{"body":{"id":76513,"nodeType":"Block","src":"13117:270:159","statements":[{"assignments":[76484],"declarations":[{"constant":false,"id":76484,"mutability":"mutable","name":"claim","nameLocation":"13156:5:159","nodeType":"VariableDeclaration","scope":76513,"src":"13131:30:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$77068_calldata_ptr","typeString":"struct Gear.ValueClaim"},"typeName":{"id":76483,"nodeType":"UserDefinedTypeName","pathNode":{"id":76482,"name":"Gear.ValueClaim","nameLocations":["13131:4:159","13136:10:159"],"nodeType":"IdentifierPath","referencedDeclaration":77068,"src":"13131:15:159"},"referencedDeclaration":77068,"src":"13131:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$77068_storage_ptr","typeString":"struct Gear.ValueClaim"}},"visibility":"internal"}],"id":76489,"initialValue":{"baseExpression":{"expression":{"id":76485,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"13164:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13181:11:159","memberName":"valueClaims","nodeType":"MemberAccess","referencedDeclaration":77046,"src":"13164:28:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$77068_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValueClaim calldata[] calldata"}},"id":76488,"indexExpression":{"id":76487,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76469,"src":"13193:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13164:31:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$77068_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}},"nodeType":"VariableDeclarationStatement","src":"13131:64:159"},{"expression":{"arguments":[{"expression":{"id":76493,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76484,"src":"13235:5:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$77068_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}},"id":76494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13241:9:159","memberName":"messageId","nodeType":"MemberAccess","referencedDeclaration":77063,"src":"13235:15:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76495,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76484,"src":"13252:5:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$77068_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}},"id":76496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13258:11:159","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":77065,"src":"13252:17:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76497,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76484,"src":"13271:5:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$77068_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}},"id":76498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13277:5:159","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":77067,"src":"13271:11:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":76490,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76459,"src":"13210:11:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"id":76492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13222:12:159","memberName":"valueClaimed","nodeType":"MemberAccess","referencedDeclaration":73584,"src":"13210:24:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,uint128) external"}},"id":76499,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13210:73:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76500,"nodeType":"ExpressionStatement","src":"13210:73:159"},{"expression":{"id":76511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":76501,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76466,"src":"13298:16:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":76505,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76466,"src":"13330:16:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":76508,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76484,"src":"13369:5:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$77068_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ValueClaim_$77068_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}],"expression":{"id":76506,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"13348:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13353:15:159","memberName":"valueClaimBytes","nodeType":"MemberAccess","referencedDeclaration":77377,"src":"13348:20:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ValueClaim_$77068_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (struct Gear.ValueClaim memory) pure returns (bytes memory)"}},"id":76509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13348:27:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":76503,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13317:5:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":76502,"name":"bytes","nodeType":"ElementaryTypeName","src":"13317:5:159","typeDescriptions":{}}},"id":76504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13323:6:159","memberName":"concat","nodeType":"MemberAccess","src":"13317:12:159","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13317:59:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"13298:78:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":76512,"nodeType":"ExpressionStatement","src":"13298:78:159"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76472,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76469,"src":"13071:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":76473,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"13075:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13092:11:159","memberName":"valueClaims","nodeType":"MemberAccess","referencedDeclaration":77046,"src":"13075:28:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$77068_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValueClaim calldata[] calldata"}},"id":76475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13104:6:159","memberName":"length","nodeType":"MemberAccess","src":"13075:35:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13071:39:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76514,"initializationExpression":{"assignments":[76469],"declarations":[{"constant":false,"id":76469,"mutability":"mutable","name":"i","nameLocation":"13064:1:159","nodeType":"VariableDeclaration","scope":76514,"src":"13056:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76468,"name":"uint256","nodeType":"ElementaryTypeName","src":"13056:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76471,"initialValue":{"hexValue":"30","id":76470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13068:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13056:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":76478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"13112:3:159","subExpression":{"id":76477,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76469,"src":"13112:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76479,"nodeType":"ExpressionStatement","src":"13112:3:159"},"nodeType":"ForStatement","src":"13051:336:159"},{"assignments":[76516],"declarations":[{"constant":false,"id":76516,"mutability":"mutable","name":"messagesHashes","nameLocation":"13410:14:159","nodeType":"VariableDeclaration","scope":76633,"src":"13397:27:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":76515,"name":"bytes","nodeType":"ElementaryTypeName","src":"13397:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":76517,"nodeType":"VariableDeclarationStatement","src":"13397:27:159"},{"body":{"id":76590,"nodeType":"Block","src":"13498:624:159","statements":[{"assignments":[76534],"declarations":[{"constant":false,"id":76534,"mutability":"mutable","name":"message","nameLocation":"13534:7:159","nodeType":"VariableDeclaration","scope":76590,"src":"13512:29:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message"},"typeName":{"id":76533,"nodeType":"UserDefinedTypeName","pathNode":{"id":76532,"name":"Gear.Message","nameLocations":["13512:4:159","13517:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":77015,"src":"13512:12:159"},"referencedDeclaration":77015,"src":"13512:12:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_storage_ptr","typeString":"struct Gear.Message"}},"visibility":"internal"}],"id":76539,"initialValue":{"baseExpression":{"expression":{"id":76535,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"13544:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13561:8:159","memberName":"messages","nodeType":"MemberAccess","referencedDeclaration":77050,"src":"13544:25:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Message_$77015_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.Message calldata[] calldata"}},"id":76538,"indexExpression":{"id":76537,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76519,"src":"13570:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13544:28:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}},"nodeType":"VariableDeclarationStatement","src":"13512:60:159"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":76544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":76540,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76534,"src":"13591:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13599:12:159","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":77014,"src":"13591:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$77034_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":76542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13612:2:159","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":77031,"src":"13591:23:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":76543,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13618:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13591:28:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":76576,"nodeType":"Block","src":"13748:277:159","statements":[{"expression":{"arguments":[{"expression":{"id":76562,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76534,"src":"13809:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13817:11:159","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":77007,"src":"13809:19:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76564,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76534,"src":"13850:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13858:7:159","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":77009,"src":"13850:15:159","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":76566,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76534,"src":"13887:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13895:5:159","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":77011,"src":"13887:13:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"expression":{"id":76568,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76534,"src":"13922:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13930:12:159","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":77014,"src":"13922:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$77034_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":76570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13943:2:159","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":77031,"src":"13922:23:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"expression":{"id":76571,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76534,"src":"13967:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13975:12:159","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":77014,"src":"13967:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$77034_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":76573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13988:4:159","memberName":"code","nodeType":"MemberAccess","referencedDeclaration":77033,"src":"13967:25:159","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":76559,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76459,"src":"13766:11:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"id":76561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13778:9:159","memberName":"replySent","nodeType":"MemberAccess","referencedDeclaration":73575,"src":"13766:21:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function (address,bytes memory,uint128,bytes32,bytes4) external"}},"id":76574,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13766:244:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76575,"nodeType":"ExpressionStatement","src":"13766:244:159"}]},"id":76577,"nodeType":"IfStatement","src":"13587:438:159","trueBody":{"id":76558,"nodeType":"Block","src":"13621:121:159","statements":[{"expression":{"arguments":[{"expression":{"id":76548,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76534,"src":"13663:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13671:2:159","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":77005,"src":"13663:10:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76550,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76534,"src":"13675:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13683:11:159","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":77007,"src":"13675:19:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76552,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76534,"src":"13696:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13704:7:159","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":77009,"src":"13696:15:159","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":76554,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76534,"src":"13713:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13721:5:159","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":77011,"src":"13713:13:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":76545,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76459,"src":"13639:11:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"id":76547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13651:11:159","memberName":"messageSent","nodeType":"MemberAccess","referencedDeclaration":73562,"src":"13639:23:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128) external"}},"id":76556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13639:88:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76557,"nodeType":"ExpressionStatement","src":"13639:88:159"}]}},{"expression":{"id":76588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":76578,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76516,"src":"14039:14:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":76582,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76516,"src":"14069:14:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":76585,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76534,"src":"14102:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}],"expression":{"id":76583,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"14085:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14090:11:159","memberName":"messageHash","nodeType":"MemberAccess","referencedDeclaration":77199,"src":"14085:16:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Message_$77015_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.Message memory) pure returns (bytes32)"}},"id":76586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14085:25:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76580,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14056:5:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":76579,"name":"bytes","nodeType":"ElementaryTypeName","src":"14056:5:159","typeDescriptions":{}}},"id":76581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14062:6:159","memberName":"concat","nodeType":"MemberAccess","src":"14056:12:159","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76587,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14056:55:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"14039:72:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":76589,"nodeType":"ExpressionStatement","src":"14039:72:159"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76522,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76519,"src":"13455:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":76523,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"13459:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13476:8:159","memberName":"messages","nodeType":"MemberAccess","referencedDeclaration":77050,"src":"13459:25:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Message_$77015_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.Message calldata[] calldata"}},"id":76525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13485:6:159","memberName":"length","nodeType":"MemberAccess","src":"13459:32:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13455:36:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76591,"initializationExpression":{"assignments":[76519],"declarations":[{"constant":false,"id":76519,"mutability":"mutable","name":"i","nameLocation":"13448:1:159","nodeType":"VariableDeclaration","scope":76591,"src":"13440:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76518,"name":"uint256","nodeType":"ElementaryTypeName","src":"13440:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76521,"initialValue":{"hexValue":"30","id":76520,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13452:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13440:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":76528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"13493:3:159","subExpression":{"id":76527,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76519,"src":"13493:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76529,"nodeType":"ExpressionStatement","src":"13493:3:159"},"nodeType":"ForStatement","src":"13435:687:159"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":76598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":76592,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"14136:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14153:9:159","memberName":"inheritor","nodeType":"MemberAccess","referencedDeclaration":77040,"src":"14136:26:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":76596,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14174:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":76595,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14166:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":76594,"name":"address","nodeType":"ElementaryTypeName","src":"14166:7:159","typeDescriptions":{}}},"id":76597,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14166:10:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14136:40:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76607,"nodeType":"IfStatement","src":"14132:123:159","trueBody":{"id":76606,"nodeType":"Block","src":"14178:77:159","statements":[{"expression":{"arguments":[{"expression":{"id":76602,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"14217:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14234:9:159","memberName":"inheritor","nodeType":"MemberAccess","referencedDeclaration":77040,"src":"14217:26:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":76599,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76459,"src":"14192:11:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"id":76601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14204:12:159","memberName":"setInheritor","nodeType":"MemberAccess","referencedDeclaration":73551,"src":"14192:24:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":76604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14192:52:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76605,"nodeType":"ExpressionStatement","src":"14192:52:159"}]}},{"expression":{"arguments":[{"expression":{"id":76611,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"14289:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14306:12:159","memberName":"newStateHash","nodeType":"MemberAccess","referencedDeclaration":77038,"src":"14289:29:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76608,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76459,"src":"14265:11:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"id":76610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14277:11:159","memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":73546,"src":"14265:23:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32) external"}},"id":76613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14265:54:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76614,"nodeType":"ExpressionStatement","src":"14265:54:159"},{"expression":{"arguments":[{"expression":{"id":76617,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"14375:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14392:7:159","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":77036,"src":"14375:24:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76619,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"14413:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14430:12:159","memberName":"newStateHash","nodeType":"MemberAccess","referencedDeclaration":77038,"src":"14413:29:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76621,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"14456:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14473:9:159","memberName":"inheritor","nodeType":"MemberAccess","referencedDeclaration":77040,"src":"14456:26:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76623,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"14496:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14513:14:159","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":77042,"src":"14496:31:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"arguments":[{"id":76626,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76466,"src":"14551:16:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76625,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"14541:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76627,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14541:27:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":76629,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76516,"src":"14592:14:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76628,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"14582:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14582:25:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76615,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"14337:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14342:19:159","memberName":"stateTransitionHash","nodeType":"MemberAccess","referencedDeclaration":77253,"src":"14337:24:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_bytes32_$_t_address_$_t_uint128_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (address,bytes32,address,uint128,bytes32,bytes32) pure returns (bytes32)"}},"id":76631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14337:280:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":76420,"id":76632,"nodeType":"Return","src":"14330:287:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_doStateTransition","nameLocation":"12450:18:159","parameters":{"id":76417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76416,"mutability":"mutable","name":"_stateTransition","nameLocation":"12499:16:159","nodeType":"VariableDeclaration","scope":76634,"src":"12469:46:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition"},"typeName":{"id":76415,"nodeType":"UserDefinedTypeName","pathNode":{"id":76414,"name":"Gear.StateTransition","nameLocations":["12469:4:159","12474:15:159"],"nodeType":"IdentifierPath","referencedDeclaration":77051,"src":"12469:20:159"},"referencedDeclaration":77051,"src":"12469:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_storage_ptr","typeString":"struct Gear.StateTransition"}},"visibility":"internal"}],"src":"12468:48:159"},"returnParameters":{"id":76420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76419,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76634,"src":"12534:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76418,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12534:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"12533:9:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76665,"nodeType":"FunctionDefinition","src":"14630:247:159","nodes":[],"body":{"id":76664,"nodeType":"Block","src":"14702:175:159","nodes":[],"statements":[{"assignments":[76643],"declarations":[{"constant":false,"id":76643,"mutability":"mutable","name":"success","nameLocation":"14717:7:159","nodeType":"VariableDeclaration","scope":76664,"src":"14712:12:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":76642,"name":"bool","nodeType":"ElementaryTypeName","src":"14712:4:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":76658,"initialValue":{"arguments":[{"expression":{"id":76650,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14781:3:159","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":76651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14785:6:159","memberName":"sender","nodeType":"MemberAccess","src":"14781:10:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":76654,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"14801:4:159","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$76827","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$76827","typeString":"contract Router"}],"id":76653,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14793:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":76652,"name":"address","nodeType":"ElementaryTypeName","src":"14793:7:159","typeDescriptions":{}}},"id":76655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14793:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":76656,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76639,"src":"14808:6:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"expression":{"expression":{"id":76645,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76637,"src":"14734:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76646,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14741:13:159","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":73664,"src":"14734:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":76647,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14755:11:159","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":76963,"src":"14734:32:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":76644,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43140,"src":"14727:6:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$43140_$","typeString":"type(contract IERC20)"}},"id":76648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14727:40:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43140","typeString":"contract IERC20"}},"id":76649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14768:12:159","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":43139,"src":"14727:53:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":76657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14727:88:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"14712:103:159"},{"expression":{"arguments":[{"id":76660,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76643,"src":"14834:7:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207265747269657665205756617261","id":76661,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14843:26:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""},"value":"failed to retrieve WVara"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""}],"id":76659,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"14826:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14826:44:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76663,"nodeType":"ExpressionStatement","src":"14826:44:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_retrieveValue","nameLocation":"14639:14:159","parameters":{"id":76640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76637,"mutability":"mutable","name":"router","nameLocation":"14670:6:159","nodeType":"VariableDeclaration","scope":76665,"src":"14654:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76636,"nodeType":"UserDefinedTypeName","pathNode":{"id":76635,"name":"Storage","nameLocations":["14654:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"14654:7:159"},"referencedDeclaration":73677,"src":"14654:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"},{"constant":false,"id":76639,"mutability":"mutable","name":"_value","nameLocation":"14686:6:159","nodeType":"VariableDeclaration","scope":76665,"src":"14678:14:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":76638,"name":"uint128","nodeType":"ElementaryTypeName","src":"14678:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"14653:40:159"},"returnParameters":{"id":76641,"nodeType":"ParameterList","parameters":[],"src":"14702:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76718,"nodeType":"FunctionDefinition","src":"14883:424:159","nodes":[],"body":{"id":76717,"nodeType":"Block","src":"14973:334:159","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"expression":{"id":76675,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76668,"src":"14991:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76676,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14998:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"14991:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":76677,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15017:14:159","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":77060,"src":"14991:40:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":76678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15032:6:159","memberName":"length","nodeType":"MemberAccess","src":"14991:47:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":76679,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15042:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14991:52:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"72656d6f76652070726576696f75732076616c696461746f7273206669727374","id":76681,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15045:34:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_9f6a03e209138d575bb162b4e280f18514af00259c854f4d737ad74345b1a440","typeString":"literal_string \"remove previous validators first\""},"value":"remove previous validators first"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9f6a03e209138d575bb162b4e280f18514af00259c854f4d737ad74345b1a440","typeString":"literal_string \"remove previous validators first\""}],"id":76674,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"14983:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14983:97:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76683,"nodeType":"ExpressionStatement","src":"14983:97:159"},{"body":{"id":76707,"nodeType":"Block","src":"15144:88:159","statements":[{"expression":{"id":76705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"expression":{"id":76695,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76668,"src":"15158:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76701,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15165:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"15158:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":76702,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15184:10:159","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":77057,"src":"15158:36:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":76703,"indexExpression":{"baseExpression":{"id":76698,"name":"_validatorsKeys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76671,"src":"15195:15:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":76700,"indexExpression":{"id":76699,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76685,"src":"15211:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15195:18:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15158:56:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":76704,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15217:4:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"15158:63:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76706,"nodeType":"ExpressionStatement","src":"15158:63:159"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76688,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76685,"src":"15111:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":76689,"name":"_validatorsKeys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76671,"src":"15115:15:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":76690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15131:6:159","memberName":"length","nodeType":"MemberAccess","src":"15115:22:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15111:26:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76708,"initializationExpression":{"assignments":[76685],"declarations":[{"constant":false,"id":76685,"mutability":"mutable","name":"i","nameLocation":"15104:1:159","nodeType":"VariableDeclaration","scope":76708,"src":"15096:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76684,"name":"uint256","nodeType":"ElementaryTypeName","src":"15096:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76687,"initialValue":{"hexValue":"30","id":76686,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15108:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15096:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":76693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"15139:3:159","subExpression":{"id":76692,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76685,"src":"15139:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76694,"nodeType":"ExpressionStatement","src":"15139:3:159"},"nodeType":"ForStatement","src":"15091:141:159"},{"expression":{"id":76715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":76709,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76668,"src":"15242:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76712,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15249:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"15242:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":76713,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15268:14:159","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":77060,"src":"15242:40:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":76714,"name":"_validatorsKeys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76671,"src":"15285:15:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"15242:58:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":76716,"nodeType":"ExpressionStatement","src":"15242:58:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_setValidators","nameLocation":"14892:14:159","parameters":{"id":76672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76668,"mutability":"mutable","name":"router","nameLocation":"14923:6:159","nodeType":"VariableDeclaration","scope":76718,"src":"14907:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76667,"nodeType":"UserDefinedTypeName","pathNode":{"id":76666,"name":"Storage","nameLocations":["14907:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"14907:7:159"},"referencedDeclaration":73677,"src":"14907:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"},{"constant":false,"id":76671,"mutability":"mutable","name":"_validatorsKeys","nameLocation":"14948:15:159","nodeType":"VariableDeclaration","scope":76718,"src":"14931:32:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":76669,"name":"address","nodeType":"ElementaryTypeName","src":"14931:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":76670,"nodeType":"ArrayTypeName","src":"14931:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"14906:58:159"},"returnParameters":{"id":76673,"nodeType":"ParameterList","parameters":[],"src":"14973:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76756,"nodeType":"FunctionDefinition","src":"15313:324:159","nodes":[],"body":{"id":76755,"nodeType":"Block","src":"15372:265:159","nodes":[],"statements":[{"body":{"id":76748,"nodeType":"Block","src":"15460:113:159","statements":[{"expression":{"id":76746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"15474:88:159","subExpression":{"baseExpression":{"expression":{"expression":{"id":76737,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76721,"src":"15481:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76738,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15488:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"15481:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":76739,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15507:10:159","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":77057,"src":"15481:36:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":76745,"indexExpression":{"baseExpression":{"expression":{"expression":{"id":76740,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76721,"src":"15518:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76741,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15525:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"15518:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":76742,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15544:14:159","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":77060,"src":"15518:40:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":76744,"indexExpression":{"id":76743,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76725,"src":"15559:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15518:43:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15481:81:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76747,"nodeType":"ExpressionStatement","src":"15474:88:159"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76728,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76725,"src":"15402:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"expression":{"id":76729,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76721,"src":"15406:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76730,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15413:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"15406:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":76731,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15432:14:159","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":77060,"src":"15406:40:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":76732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15447:6:159","memberName":"length","nodeType":"MemberAccess","src":"15406:47:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15402:51:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76749,"initializationExpression":{"assignments":[76725],"declarations":[{"constant":false,"id":76725,"mutability":"mutable","name":"i","nameLocation":"15395:1:159","nodeType":"VariableDeclaration","scope":76749,"src":"15387:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76724,"name":"uint256","nodeType":"ElementaryTypeName","src":"15387:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76727,"initialValue":{"hexValue":"30","id":76726,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15399:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15387:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":76735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"15455:3:159","subExpression":{"id":76734,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76725,"src":"15455:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76736,"nodeType":"ExpressionStatement","src":"15455:3:159"},"nodeType":"ForStatement","src":"15382:191:159"},{"expression":{"id":76753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"15583:47:159","subExpression":{"expression":{"expression":{"id":76750,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76721,"src":"15590:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76751,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15597:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"15590:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":76752,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15616:14:159","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":77060,"src":"15590:40:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76754,"nodeType":"ExpressionStatement","src":"15583:47:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_removeValidators","nameLocation":"15322:17:159","parameters":{"id":76722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76721,"mutability":"mutable","name":"router","nameLocation":"15356:6:159","nodeType":"VariableDeclaration","scope":76756,"src":"15340:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76720,"nodeType":"UserDefinedTypeName","pathNode":{"id":76719,"name":"Storage","nameLocations":["15340:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"15340:7:159"},"referencedDeclaration":73677,"src":"15340:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"src":"15339:24:159"},"returnParameters":{"id":76723,"nodeType":"ParameterList","parameters":[],"src":"15372:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76769,"nodeType":"FunctionDefinition","src":"15643:192:159","nodes":[],"body":{"id":76768,"nodeType":"Block","src":"15708:127:159","nodes":[],"statements":[{"assignments":[76763],"declarations":[{"constant":false,"id":76763,"mutability":"mutable","name":"slot","nameLocation":"15726:4:159","nodeType":"VariableDeclaration","scope":76768,"src":"15718:12:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76762,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15718:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":76766,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":76764,"name":"_getStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76781,"src":"15733:15:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":76765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15733:17:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"15718:32:159"},{"AST":{"nativeSrc":"15786:43:159","nodeType":"YulBlock","src":"15786:43:159","statements":[{"nativeSrc":"15800:19:159","nodeType":"YulAssignment","src":"15800:19:159","value":{"name":"slot","nativeSrc":"15815:4:159","nodeType":"YulIdentifier","src":"15815:4:159"},"variableNames":[{"name":"router.slot","nativeSrc":"15800:11:159","nodeType":"YulIdentifier","src":"15800:11:159"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":76760,"isOffset":false,"isSlot":true,"src":"15800:11:159","suffix":"slot","valueSize":1},{"declaration":76763,"isOffset":false,"isSlot":false,"src":"15815:4:159","valueSize":1}],"flags":["memory-safe"],"id":76767,"nodeType":"InlineAssembly","src":"15761:68:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_router","nameLocation":"15652:7:159","parameters":{"id":76757,"nodeType":"ParameterList","parameters":[],"src":"15659:2:159"},"returnParameters":{"id":76761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76760,"mutability":"mutable","name":"router","nameLocation":"15700:6:159","nodeType":"VariableDeclaration","scope":76769,"src":"15684:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76759,"nodeType":"UserDefinedTypeName","pathNode":{"id":76758,"name":"Storage","nameLocations":["15684:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"15684:7:159"},"referencedDeclaration":73677,"src":"15684:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"src":"15683:24:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":76781,"nodeType":"FunctionDefinition","src":"15841:128:159","nodes":[],"body":{"id":76780,"nodeType":"Block","src":"15899:70:159","nodes":[],"statements":[{"expression":{"expression":{"arguments":[{"id":76776,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75290,"src":"15943:12:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76774,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44581,"src":"15916:11:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$44581_$","typeString":"type(library StorageSlot)"}},"id":76775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15928:14:159","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":44319,"src":"15916:26:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$44274_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":76777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15916:40:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$44274_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":76778,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15957:5:159","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":44273,"src":"15916:46:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":76773,"id":76779,"nodeType":"Return","src":"15909:53:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_getStorageSlot","nameLocation":"15850:15:159","parameters":{"id":76770,"nodeType":"ParameterList","parameters":[],"src":"15865:2:159"},"returnParameters":{"id":76773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76772,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76781,"src":"15890:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76771,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15890:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15889:9:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":76826,"nodeType":"FunctionDefinition","src":"15975:252:159","nodes":[],"body":{"id":76825,"nodeType":"Block","src":"16043:184:159","nodes":[],"statements":[{"assignments":[76789],"declarations":[{"constant":false,"id":76789,"mutability":"mutable","name":"slot","nameLocation":"16061:4:159","nodeType":"VariableDeclaration","scope":76825,"src":"16053:12:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76788,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16053:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":76815,"initialValue":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":76814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"id":76798,"name":"namespace","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76783,"src":"16113:9:159","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":76797,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16107:5:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":76796,"name":"bytes","nodeType":"ElementaryTypeName","src":"16107:5:159","typeDescriptions":{}}},"id":76799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16107:16:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76795,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"16097:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16097:27:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":76794,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16089:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":76793,"name":"uint256","nodeType":"ElementaryTypeName","src":"16089:7:159","typeDescriptions":{}}},"id":76801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16089:36:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":76802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16128:1:159","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"16089:40:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":76791,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"16078:3:159","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":76792,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16082:6:159","memberName":"encode","nodeType":"MemberAccess","src":"16078:10:159","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16078:52:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76790,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"16068:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16068:63:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":76813,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"16134:23:159","subExpression":{"arguments":[{"arguments":[{"hexValue":"30786666","id":76810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16151:4:159","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"}],"id":76809,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16143:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":76808,"name":"uint256","nodeType":"ElementaryTypeName","src":"16143:7:159","typeDescriptions":{}}},"id":76811,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16143:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":76807,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16135:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":76806,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16135:7:159","typeDescriptions":{}}},"id":76812,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16135:22:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"16068:89:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"16053:104:159"},{"expression":{"id":76823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":76819,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75290,"src":"16194:12:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76816,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44581,"src":"16167:11:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$44581_$","typeString":"type(library StorageSlot)"}},"id":76818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16179:14:159","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":44319,"src":"16167:26:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$44274_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":76820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16167:40:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$44274_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":76821,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"16208:5:159","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":44273,"src":"16167:46:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":76822,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76789,"src":"16216:4:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"16167:53:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":76824,"nodeType":"ExpressionStatement","src":"16167:53:159"}]},"implemented":true,"kind":"function","modifiers":[{"id":76786,"kind":"modifierInvocation","modifierName":{"id":76785,"name":"onlyOwner","nameLocations":["16033:9:159"],"nodeType":"IdentifierPath","referencedDeclaration":39282,"src":"16033:9:159"},"nodeType":"ModifierInvocation","src":"16033:9:159"}],"name":"_setStorageSlot","nameLocation":"15984:15:159","parameters":{"id":76784,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76783,"mutability":"mutable","name":"namespace","nameLocation":"16014:9:159","nodeType":"VariableDeclaration","scope":76826,"src":"16000:23:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":76782,"name":"string","nodeType":"ElementaryTypeName","src":"16000:6:159","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"15999:25:159"},"returnParameters":{"id":76787,"nodeType":"ParameterList","parameters":[],"src":"16043:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[{"baseName":{"id":75282,"name":"IRouter","nameLocations":["767:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73896,"src":"767:7:159"},"id":75283,"nodeType":"InheritanceSpecifier","src":"767:7:159"},{"baseName":{"id":75284,"name":"OwnableUpgradeable","nameLocations":["776:18:159"],"nodeType":"IdentifierPath","referencedDeclaration":39387,"src":"776:18:159"},"id":75285,"nodeType":"InheritanceSpecifier","src":"776:18:159"},{"baseName":{"id":75286,"name":"ReentrancyGuardTransient","nameLocations":["796:24:159"],"nodeType":"IdentifierPath","referencedDeclaration":44045,"src":"796:24:159"},"id":75287,"nodeType":"InheritanceSpecifier","src":"796:24:159"}],"canonicalName":"Router","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[76827,44045,39387,40535,39641,73896],"name":"Router","nameLocation":"757:6:159","scope":76828,"usedErrors":[39223,39228,39404,39407,43912,43918,43989,44912,44917,44922],"usedEvents":[39234,39412,73682,73689,73696,73703,73710,73713,73716]}],"license":"UNLICENSED"},"id":159} \ No newline at end of file diff --git a/ethexe/ethereum/WrappedVara.json b/ethexe/ethereum/WrappedVara.json index 7871983cba7..33ab1ab1c31 100644 --- a/ethexe/ethereum/WrappedVara.json +++ b/ethexe/ethereum/WrappedVara.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"DOMAIN_SEPARATOR","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"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":"spender","type":"address","internalType":"address"},{"name":"value","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":"burn","inputs":[{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"burnFrom","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"pure"},{"type":"function","name":"eip712Domain","inputs":[],"outputs":[{"name":"fields","type":"bytes1","internalType":"bytes1"},{"name":"name","type":"string","internalType":"string"},{"name":"version","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"verifyingContract","type":"address","internalType":"address"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"extensions","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"initialOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mint","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"nonces","inputs":[{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"permit","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"reinitialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"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":"value","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":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"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":"EIP712DomainChanged","inputs":[],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"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":"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},{"type":"error","name":"ECDSAInvalidSignature","inputs":[]},{"type":"error","name":"ECDSAInvalidSignatureLength","inputs":[{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ECDSAInvalidSignatureS","inputs":[{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"name":"spender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC2612ExpiredSignature","inputs":[{"name":"deadline","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC2612InvalidSigner","inputs":[{"name":"signer","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidAccountNonce","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"currentNonce","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x6080806040523460d0577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c1660c1576002600160401b03196001600160401b03821601605c575b604051611cbe90816100d58239f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80604d565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806306fdde031461120d578063095ea7b3146111e757806318160ddd146111be57806323b872dd14611186578063313ce5671461116b5780633644e5151461114957806340c10f191461110c57806342966c68146110ef5780636c2eb3501461105557806370a0823114611011578063715018a614610faa57806379cc679014610f7a5780637ecebe0014610f2457806384b0196e14610c505780638da5cb5b14610c1c57806395d89b4114610b22578063a9059cbb14610af1578063c4d66de8146102d8578063d505accf14610176578063dd62ed3e1461012f5763f2fde38b14610100575f80fd5b3461012b57602036600319011261012b5761012961011c6112ee565b6101246115b2565b6113ac565b005b5f80fd5b3461012b57604036600319011261012b576101486112ee565b610159610153611304565b91611374565b9060018060a01b03165f52602052602060405f2054604051908152f35b3461012b5760e036600319011261012b5761018f6112ee565b610197611304565b604435906064359260843560ff8116810361012b578442116102c55761028a6102939160018060a01b03841696875f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260405f20908154916001830190556040519060208201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c984528a604084015260018060a01b038916606084015289608084015260a083015260c082015260c0815261025860e082611352565b5190206102636117c0565b906040519161190160f01b83526002830152602282015260c43591604260a4359220611852565b909291926118df565b6001600160a01b03168481036102ae5750610129935061169b565b84906325c0072360e11b5f5260045260245260445ffd5b8463313c898160e11b5f5260045260245ffd5b3461012b57602036600319011261012b576102f16112ee565b5f80516020611c69833981519152549060ff8260401c16159167ffffffffffffffff811680159081610ae9575b6001149081610adf575b159081610ad6575b50610ac75767ffffffffffffffff1981166001175f80516020611c698339815191525582610a9b575b5060405191610369604084611352565b600c83526b57726170706564205661726160a01b602084015260405191610391604084611352565b6005835264575641524160d81b60208401526103ab611827565b6103b3611827565b835167ffffffffffffffff81116107a8576103db5f80516020611b898339815191525461131a565b601f8111610a2c575b50602094601f82116001146109b1579481929394955f926109a6575b50508160011b915f199060031b1c1916175f80516020611b89833981519152555b825167ffffffffffffffff81116107a8576104495f80516020611be98339815191525461131a565b601f8111610937575b506020601f82116001146108bc57819293945f926108b1575b50508160011b915f199060031b1c1916175f80516020611be9833981519152555b610494611827565b61049c611827565b6104a4611827565b6104ad816113ac565b604051916104bc604084611352565b600c83526b57726170706564205661726160a01b60208401526104dd611827565b604051916104ec604084611352565b60018352603160f81b6020840152610502611827565b835167ffffffffffffffff81116107a85761052a5f80516020611bc98339815191525461131a565b601f8111610842575b50602094601f82116001146107c7579481929394955f926107bc575b50508160011b915f199060031b1c1916175f80516020611bc9833981519152555b825167ffffffffffffffff81116107a8576105985f80516020611c498339815191525461131a565b601f8111610739575b506020601f82116001146106be57819293945f926106b3575b50508160011b915f199060031b1c1916175f80516020611c49833981519152555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008190557fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101556001600160a01b038116156106a057670de0b6b3a7640000610643916116fe565b61064957005b68ff0000000000000000195f80516020611c6983398151915254165f80516020611c69833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b63ec442f0560e01b5f525f60045260245ffd5b0151905084806105ba565b601f198216905f80516020611c498339815191525f52805f20915f5b81811061072157509583600195969710610709575b505050811b015f80516020611c49833981519152556105db565b01515f1960f88460031b161c191690558480806106ef565b9192602060018192868b0151815501940192016106da565b5f80516020611c498339815191525f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f830160051c8101916020841061079e575b601f0160051c01905b81811061079357506105a1565b5f8155600101610786565b909150819061077d565b634e487b7160e01b5f52604160045260245ffd5b01519050858061054f565b601f198216955f80516020611bc98339815191525f52805f20915f5b88811061082a57508360019596979810610812575b505050811b015f80516020611bc983398151915255610570565b01515f1960f88460031b161c191690558580806107f8565b919260206001819286850151815501940192016107e3565b5f80516020611bc98339815191525f527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f830160051c810191602084106108a7575b601f0160051c01905b81811061089c5750610533565b5f815560010161088f565b9091508190610886565b01519050848061046b565b601f198216905f80516020611be98339815191525f52805f20915f5b81811061091f57509583600195969710610907575b505050811b015f80516020611be98339815191525561048c565b01515f1960f88460031b161c191690558480806108ed565b9192602060018192868b0151815501940192016108d8565b5f80516020611be98339815191525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f830160051c8101916020841061099c575b601f0160051c01905b8181106109915750610452565b5f8155600101610984565b909150819061097b565b015190508580610400565b601f198216955f80516020611b898339815191525f52805f20915f5b888110610a14575083600195969798106109fc575b505050811b015f80516020611b8983398151915255610421565b01515f1960f88460031b161c191690558580806109e2565b919260206001819286850151815501940192016109cd565b5f80516020611b898339815191525f527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f830160051c81019160208410610a91575b601f0160051c01905b818110610a8657506103e4565b5f8155600101610a79565b9091508190610a70565b68ffffffffffffffffff191668010000000000000001175f80516020611c698339815191525582610359565b63f92ee8a960e01b5f5260045ffd5b90501584610330565b303b159150610328565b84915061031e565b3461012b57604036600319011261012b57610b17610b0d6112ee565b60243590336114e1565b602060405160018152f35b3461012b575f36600319011261012b576040515f5f80516020611be983398151915254610b4e8161131a565b8084529060018116908115610bf85750600114610b8e575b610b8a83610b7681850382611352565b6040519182916020835260208301906112ca565b0390f35b5f80516020611be98339815191525f9081527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b808210610bde57509091508101602001610b76610b66565b919260018160209254838588010152019101909291610bc6565b60ff191660208086019190915291151560051b84019091019150610b769050610b66565b3461012b575f36600319011261012b575f80516020611c09833981519152546040516001600160a01b039091168152602090f35b3461012b575f36600319011261012b577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580610efb575b15610ebe576040515f80516020611bc983398151915254815f610cab8361131a565b8083529260018116908115610e9f5750600114610e34575b610ccf92500382611352565b6040515f80516020611c4983398151915254815f610cec8361131a565b8083529260018116908115610e155750600114610daa575b610d1791925092610d4e94930382611352565b6020610d5c60405192610d2a8385611352565b5f84525f368137604051958695600f60f81b875260e08588015260e08701906112ca565b9085820360408701526112ca565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b828110610d9357505050500390f35b835185528695509381019392810192600101610d84565b505f80516020611c498339815191525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310610df9575050906020610d1792820101610d04565b6020919350806001915483858801015201910190918392610de1565b60209250610d1794915060ff191682840152151560051b820101610d04565b505f80516020611bc98339815191525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310610e83575050906020610ccf92820101610cc3565b6020919350806001915483858801015201910190918392610e6b565b60209250610ccf94915060ff191682840152151560051b820101610cc3565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610c89565b3461012b57602036600319011261012b57610f3d6112ee565b60018060a01b03165f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052602060405f2054604051908152f35b3461012b57604036600319011261012b57610129610f966112ee565b60243590610fa582338361141d565b6115e5565b3461012b575f36600319011261012b57610fc26115b2565b5f80516020611c0983398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461012b57602036600319011261012b576001600160a01b036110326112ee565b165f525f80516020611ba9833981519152602052602060405f2054604051908152f35b3461012b575f36600319011261012b5761106d6115b2565b5f80516020611c698339815191525460ff8160401c1680156110da575b610ac75760029068ffffffffffffffffff1916175f80516020611c69833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160028152a1005b50600267ffffffffffffffff8216101561108a565b3461012b57602036600319011261012b57610129600435336115e5565b3461012b57604036600319011261012b576111256112ee565b61112d6115b2565b6001600160a01b038116156106a05761012990602435906116fe565b3461012b575f36600319011261012b5760206111636117c0565b604051908152f35b3461012b575f36600319011261012b576020604051600c8152f35b3461012b57606036600319011261012b57610b176111a26112ee565b6111aa611304565b604435916111b983338361141d565b6114e1565b3461012b575f36600319011261012b5760205f80516020611c2983398151915254604051908152f35b3461012b57604036600319011261012b57610b176112036112ee565b602435903361169b565b3461012b575f36600319011261012b576040515f5f80516020611b89833981519152546112398161131a565b8084529060018116908115610bf8575060011461126057610b8a83610b7681850382611352565b5f80516020611b898339815191525f9081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b8082106112b057509091508101602001610b76610b66565b919260018160209254838588010152019101909291611298565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361012b57565b602435906001600160a01b038216820361012b57565b90600182811c92168015611348575b602083101461133457565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611329565b90601f8019910116810190811067ffffffffffffffff8211176107a857604052565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b6001600160a01b0316801561140a575f80516020611c0983398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b919061142883611374565b60018060a01b0382165f5260205260405f2054925f19840361144b575b50505050565b8284106114be576001600160a01b038116156114ab576001600160a01b038216156114985761147990611374565b9060018060a01b03165f5260205260405f20910390555f808080611445565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b508290637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b6001600160a01b031690811561159f576001600160a01b03169182156106a057815f525f80516020611ba983398151915260205260405f205481811061158657817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f80516020611ba983398151915284520360405f2055845f525f80516020611ba9833981519152825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b5f80516020611c09833981519152546001600160a01b031633036115d257565b63118cdaa760e01b5f523360045260245ffd5b9091906001600160a01b0316801561159f57805f525f80516020611ba983398151915260205260405f2054838110611681576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587525f80516020611ba98339815191528452036040862055805f80516020611c2983398151915254035f80516020611c2983398151915255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffd5b916001600160a01b0383169182156114ab576001600160a01b0316928315611498577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925916116ea602092611374565b855f5282528060405f2055604051908152a3565b5f80516020611c2983398151915254908282018092116117ac575f80516020611c29833981519152919091556001600160a01b0316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020908461178a57805f80516020611c2983398151915254035f80516020611c29833981519152555b604051908152a3565b8484525f80516020611ba9833981519152825260408420818154019055611781565b634e487b7160e01b5f52601160045260245ffd5b6117c8611953565b6117d0611a80565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261182160c082611352565b51902090565b60ff5f80516020611c698339815191525460401c161561184357565b631afcd79f60e31b5f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116118d4579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156118c9575f516001600160a01b038116156118bf57905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b600481101561193f57806118f1575050565b600181036119085763f645eedf60e01b5f5260045ffd5b60028103611923575063fce698f760e01b5f5260045260245ffd5b60031461192d5750565b6335e2f38360e21b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b6040515f80516020611bc983398151915254905f816119718461131a565b9182825260208201946001811690815f14611a6457506001146119f9575b61199b92500382611352565b519081156119a7572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156119d45790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b505f80516020611bc98339815191525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310611a4857505090602061199b9282010161198f565b6020919350806001915483858801015201910190918392611a30565b60ff191686525061199b92151560051b8201602001905061198f565b6040515f80516020611c4983398151915254905f81611a9e8461131a565b9182825260208201946001811690815f14611b6c5750600114611b01575b611ac892500382611352565b51908115611ad4572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156119d45790565b505f80516020611c498339815191525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310611b50575050906020611ac892820101611abc565b6020919350806001915483858801015201910190918392611b38565b60ff1916865250611ac892151560051b82016020019050611abc56fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10252c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace049016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220876fa3b8d0ec6917757682c3a8181195f1246da17e840283e4106a851ed888ff64736f6c634300081a0033","sourceMap":"632:990:160:-:0;;;;;;;8837:64:26;632:990:160;;;;;;7896:76:26;;-1:-1:-1;;;;;;;;;;;632:990:160;;7985:34:26;7981:146;;-1:-1:-1;632:990:160;;;;;;;;;7981:146:26;-1:-1:-1;;;;;;632:990:160;-1:-1:-1;;;;;632:990:160;;;8837:64:26;632:990:160;;;8087:29:26;;632:990:160;;8087:29:26;7981:146;;;;7896:76;7938:23;;;-1:-1:-1;7938:23:26;;-1:-1:-1;7938:23:26;632:990:160;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c806306fdde031461120d578063095ea7b3146111e757806318160ddd146111be57806323b872dd14611186578063313ce5671461116b5780633644e5151461114957806340c10f191461110c57806342966c68146110ef5780636c2eb3501461105557806370a0823114611011578063715018a614610faa57806379cc679014610f7a5780637ecebe0014610f2457806384b0196e14610c505780638da5cb5b14610c1c57806395d89b4114610b22578063a9059cbb14610af1578063c4d66de8146102d8578063d505accf14610176578063dd62ed3e1461012f5763f2fde38b14610100575f80fd5b3461012b57602036600319011261012b5761012961011c6112ee565b6101246115b2565b6113ac565b005b5f80fd5b3461012b57604036600319011261012b576101486112ee565b610159610153611304565b91611374565b9060018060a01b03165f52602052602060405f2054604051908152f35b3461012b5760e036600319011261012b5761018f6112ee565b610197611304565b604435906064359260843560ff8116810361012b578442116102c55761028a6102939160018060a01b03841696875f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260405f20908154916001830190556040519060208201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c984528a604084015260018060a01b038916606084015289608084015260a083015260c082015260c0815261025860e082611352565b5190206102636117c0565b906040519161190160f01b83526002830152602282015260c43591604260a4359220611852565b909291926118df565b6001600160a01b03168481036102ae5750610129935061169b565b84906325c0072360e11b5f5260045260245260445ffd5b8463313c898160e11b5f5260045260245ffd5b3461012b57602036600319011261012b576102f16112ee565b5f80516020611c69833981519152549060ff8260401c16159167ffffffffffffffff811680159081610ae9575b6001149081610adf575b159081610ad6575b50610ac75767ffffffffffffffff1981166001175f80516020611c698339815191525582610a9b575b5060405191610369604084611352565b600c83526b57726170706564205661726160a01b602084015260405191610391604084611352565b6005835264575641524160d81b60208401526103ab611827565b6103b3611827565b835167ffffffffffffffff81116107a8576103db5f80516020611b898339815191525461131a565b601f8111610a2c575b50602094601f82116001146109b1579481929394955f926109a6575b50508160011b915f199060031b1c1916175f80516020611b89833981519152555b825167ffffffffffffffff81116107a8576104495f80516020611be98339815191525461131a565b601f8111610937575b506020601f82116001146108bc57819293945f926108b1575b50508160011b915f199060031b1c1916175f80516020611be9833981519152555b610494611827565b61049c611827565b6104a4611827565b6104ad816113ac565b604051916104bc604084611352565b600c83526b57726170706564205661726160a01b60208401526104dd611827565b604051916104ec604084611352565b60018352603160f81b6020840152610502611827565b835167ffffffffffffffff81116107a85761052a5f80516020611bc98339815191525461131a565b601f8111610842575b50602094601f82116001146107c7579481929394955f926107bc575b50508160011b915f199060031b1c1916175f80516020611bc9833981519152555b825167ffffffffffffffff81116107a8576105985f80516020611c498339815191525461131a565b601f8111610739575b506020601f82116001146106be57819293945f926106b3575b50508160011b915f199060031b1c1916175f80516020611c49833981519152555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008190557fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101556001600160a01b038116156106a057670de0b6b3a7640000610643916116fe565b61064957005b68ff0000000000000000195f80516020611c6983398151915254165f80516020611c69833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b63ec442f0560e01b5f525f60045260245ffd5b0151905084806105ba565b601f198216905f80516020611c498339815191525f52805f20915f5b81811061072157509583600195969710610709575b505050811b015f80516020611c49833981519152556105db565b01515f1960f88460031b161c191690558480806106ef565b9192602060018192868b0151815501940192016106da565b5f80516020611c498339815191525f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f830160051c8101916020841061079e575b601f0160051c01905b81811061079357506105a1565b5f8155600101610786565b909150819061077d565b634e487b7160e01b5f52604160045260245ffd5b01519050858061054f565b601f198216955f80516020611bc98339815191525f52805f20915f5b88811061082a57508360019596979810610812575b505050811b015f80516020611bc983398151915255610570565b01515f1960f88460031b161c191690558580806107f8565b919260206001819286850151815501940192016107e3565b5f80516020611bc98339815191525f527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f830160051c810191602084106108a7575b601f0160051c01905b81811061089c5750610533565b5f815560010161088f565b9091508190610886565b01519050848061046b565b601f198216905f80516020611be98339815191525f52805f20915f5b81811061091f57509583600195969710610907575b505050811b015f80516020611be98339815191525561048c565b01515f1960f88460031b161c191690558480806108ed565b9192602060018192868b0151815501940192016108d8565b5f80516020611be98339815191525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f830160051c8101916020841061099c575b601f0160051c01905b8181106109915750610452565b5f8155600101610984565b909150819061097b565b015190508580610400565b601f198216955f80516020611b898339815191525f52805f20915f5b888110610a14575083600195969798106109fc575b505050811b015f80516020611b8983398151915255610421565b01515f1960f88460031b161c191690558580806109e2565b919260206001819286850151815501940192016109cd565b5f80516020611b898339815191525f527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f830160051c81019160208410610a91575b601f0160051c01905b818110610a8657506103e4565b5f8155600101610a79565b9091508190610a70565b68ffffffffffffffffff191668010000000000000001175f80516020611c698339815191525582610359565b63f92ee8a960e01b5f5260045ffd5b90501584610330565b303b159150610328565b84915061031e565b3461012b57604036600319011261012b57610b17610b0d6112ee565b60243590336114e1565b602060405160018152f35b3461012b575f36600319011261012b576040515f5f80516020611be983398151915254610b4e8161131a565b8084529060018116908115610bf85750600114610b8e575b610b8a83610b7681850382611352565b6040519182916020835260208301906112ca565b0390f35b5f80516020611be98339815191525f9081527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b808210610bde57509091508101602001610b76610b66565b919260018160209254838588010152019101909291610bc6565b60ff191660208086019190915291151560051b84019091019150610b769050610b66565b3461012b575f36600319011261012b575f80516020611c09833981519152546040516001600160a01b039091168152602090f35b3461012b575f36600319011261012b577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580610efb575b15610ebe576040515f80516020611bc983398151915254815f610cab8361131a565b8083529260018116908115610e9f5750600114610e34575b610ccf92500382611352565b6040515f80516020611c4983398151915254815f610cec8361131a565b8083529260018116908115610e155750600114610daa575b610d1791925092610d4e94930382611352565b6020610d5c60405192610d2a8385611352565b5f84525f368137604051958695600f60f81b875260e08588015260e08701906112ca565b9085820360408701526112ca565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b828110610d9357505050500390f35b835185528695509381019392810192600101610d84565b505f80516020611c498339815191525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310610df9575050906020610d1792820101610d04565b6020919350806001915483858801015201910190918392610de1565b60209250610d1794915060ff191682840152151560051b820101610d04565b505f80516020611bc98339815191525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310610e83575050906020610ccf92820101610cc3565b6020919350806001915483858801015201910190918392610e6b565b60209250610ccf94915060ff191682840152151560051b820101610cc3565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610c89565b3461012b57602036600319011261012b57610f3d6112ee565b60018060a01b03165f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052602060405f2054604051908152f35b3461012b57604036600319011261012b57610129610f966112ee565b60243590610fa582338361141d565b6115e5565b3461012b575f36600319011261012b57610fc26115b2565b5f80516020611c0983398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461012b57602036600319011261012b576001600160a01b036110326112ee565b165f525f80516020611ba9833981519152602052602060405f2054604051908152f35b3461012b575f36600319011261012b5761106d6115b2565b5f80516020611c698339815191525460ff8160401c1680156110da575b610ac75760029068ffffffffffffffffff1916175f80516020611c69833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160028152a1005b50600267ffffffffffffffff8216101561108a565b3461012b57602036600319011261012b57610129600435336115e5565b3461012b57604036600319011261012b576111256112ee565b61112d6115b2565b6001600160a01b038116156106a05761012990602435906116fe565b3461012b575f36600319011261012b5760206111636117c0565b604051908152f35b3461012b575f36600319011261012b576020604051600c8152f35b3461012b57606036600319011261012b57610b176111a26112ee565b6111aa611304565b604435916111b983338361141d565b6114e1565b3461012b575f36600319011261012b5760205f80516020611c2983398151915254604051908152f35b3461012b57604036600319011261012b57610b176112036112ee565b602435903361169b565b3461012b575f36600319011261012b576040515f5f80516020611b89833981519152546112398161131a565b8084529060018116908115610bf8575060011461126057610b8a83610b7681850382611352565b5f80516020611b898339815191525f9081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b8082106112b057509091508101602001610b76610b66565b919260018160209254838588010152019101909291611298565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361012b57565b602435906001600160a01b038216820361012b57565b90600182811c92168015611348575b602083101461133457565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611329565b90601f8019910116810190811067ffffffffffffffff8211176107a857604052565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b6001600160a01b0316801561140a575f80516020611c0983398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b919061142883611374565b60018060a01b0382165f5260205260405f2054925f19840361144b575b50505050565b8284106114be576001600160a01b038116156114ab576001600160a01b038216156114985761147990611374565b9060018060a01b03165f5260205260405f20910390555f808080611445565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b508290637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b6001600160a01b031690811561159f576001600160a01b03169182156106a057815f525f80516020611ba983398151915260205260405f205481811061158657817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f80516020611ba983398151915284520360405f2055845f525f80516020611ba9833981519152825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b5f80516020611c09833981519152546001600160a01b031633036115d257565b63118cdaa760e01b5f523360045260245ffd5b9091906001600160a01b0316801561159f57805f525f80516020611ba983398151915260205260405f2054838110611681576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587525f80516020611ba98339815191528452036040862055805f80516020611c2983398151915254035f80516020611c2983398151915255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffd5b916001600160a01b0383169182156114ab576001600160a01b0316928315611498577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925916116ea602092611374565b855f5282528060405f2055604051908152a3565b5f80516020611c2983398151915254908282018092116117ac575f80516020611c29833981519152919091556001600160a01b0316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020908461178a57805f80516020611c2983398151915254035f80516020611c29833981519152555b604051908152a3565b8484525f80516020611ba9833981519152825260408420818154019055611781565b634e487b7160e01b5f52601160045260245ffd5b6117c8611953565b6117d0611a80565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261182160c082611352565b51902090565b60ff5f80516020611c698339815191525460401c161561184357565b631afcd79f60e31b5f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116118d4579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156118c9575f516001600160a01b038116156118bf57905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b600481101561193f57806118f1575050565b600181036119085763f645eedf60e01b5f5260045ffd5b60028103611923575063fce698f760e01b5f5260045260245ffd5b60031461192d5750565b6335e2f38360e21b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b6040515f80516020611bc983398151915254905f816119718461131a565b9182825260208201946001811690815f14611a6457506001146119f9575b61199b92500382611352565b519081156119a7572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156119d45790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b505f80516020611bc98339815191525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310611a4857505090602061199b9282010161198f565b6020919350806001915483858801015201910190918392611a30565b60ff191686525061199b92151560051b8201602001905061198f565b6040515f80516020611c4983398151915254905f81611a9e8461131a565b9182825260208201946001811690815f14611b6c5750600114611b01575b611ac892500382611352565b51908115611ad4572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156119d45790565b505f80516020611c498339815191525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310611b50575050906020611ac892820101611abc565b6020919350806001915483858801015201910190918392611b38565b60ff1916865250611ac892151560051b82016020019050611abc56fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10252c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace049016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220876fa3b8d0ec6917757682c3a8181195f1246da17e840283e4106a851ed888ff64736f6c634300081a0033","sourceMap":"632:990:160:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;2357:1:25;632:990:160;;:::i;:::-;2303:62:25;;:::i;:::-;2357:1;:::i;:::-;632:990:160;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;;;:::i;:::-;4867:20:27;632:990:160;;:::i;:::-;4867:20:27;;:::i;:::-;:29;632:990:160;;;;;;-1:-1:-1;632:990:160;;;;;-1:-1:-1;632:990:160;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;2301:15:29;;:26;2297:97;;6967:25:66;7021:8;632:990:160;;;;;;;;;;;;972:64:31;632:990:160;;;;;;;;;;;;;;;;2435:78:29;632:990:160;2435:78:29;;632:990:160;1279:95:29;632:990:160;;1279:95:29;632:990:160;1279:95:29;;632:990:160;;;;;;;;;1279:95:29;;632:990:160;1279:95:29;632:990:160;1279:95:29;;632:990:160;;1279:95:29;;632:990:160;;1279:95:29;;632:990:160;;2435:78:29;;;632:990:160;2435:78:29;;:::i;:::-;632:990:160;2425:89:29;;4094:23:33;;:::i;:::-;3515:233:68;632:990:160;3515:233:68;;-1:-1:-1;;;3515:233:68;;;;;;;;;;632:990:160;;;3515:233:68;632:990:160;;3515:233:68;;6967:25:66;:::i;:::-;7021:8;;;;;:::i;:::-;-1:-1:-1;;;;;632:990:160;2638:15:29;;;2634:88;;10117:4:27;;;;;:::i;2634:88:29:-;2676:35;;;;;632:990:160;2676:35:29;632:990:160;;;;;;2676:35:29;2297:97;2350:33;;;;632:990:160;2350:33:29;632:990:160;;;;2350:33:29;632:990:160;;;;;;-1:-1:-1;;632:990:160;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;4301:16:26;632:990:160;;;;4726:16:26;;:34;;;;632:990:160;4805:1:26;4790:16;:50;;;;632:990:160;4855:13:26;:30;;;;632:990:160;4851:91:26;;;-1:-1:-1;;632:990:160;;4805:1:26;632:990:160;-1:-1:-1;;;;;;;;;;;632:990:160;;4979:67:26;;632:990:160;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;632:990:160;;;;;;;;;;;:::i;:::-;821:14;632:990;;-1:-1:-1;;;632:990:160;821:14;;;6893:76:26;;:::i;:::-;;;:::i;:::-;632:990:160;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;2600:7:27;632:990:160;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;2600:7:27;632:990:160;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;6893:76:26;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;6961:1;;;:::i;:::-;632:990:160;;;;;;;:::i;:::-;;;;-1:-1:-1;;;632:990:160;;;;6893:76:26;;:::i;:::-;632:990:160;;;;;;;:::i;:::-;4805:1:26;632:990:160;;-1:-1:-1;;;632:990:160;;;;6893:76:26;;:::i;:::-;632:990:160;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;2600:7:27;632:990:160;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;2600:7:27;632:990:160;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;2806:64:33;632:990:160;;;3902:16:33;632:990:160;-1:-1:-1;;;;;632:990:160;;8803:21:27;8799:91;;941:9:160;8928:5:27;;;:::i;:::-;5066:101:26;;632:990:160;5066:101:26;632:990:160;;-1:-1:-1;;;;;;;;;;;632:990:160;;-1:-1:-1;;;;;;;;;;;632:990:160;5142:14:26;632:990:160;;;4805:1:26;632:990:160;;5142:14:26;632:990:160;8799:91:27;8847:32;;;632:990:160;8847:32:27;632:990:160;;;;;8847:32:27;632:990:160;;;;-1:-1:-1;632:990:160;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;2600:7:27;632:990:160;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;821:14;632:990;;;;;;;;;;;;821:14;632:990;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;-1:-1:-1;632:990:160;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:990:160;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;2600:7:27;632:990:160;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;821:14;632:990;;;;;;;;;;;;821:14;632:990;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;-1:-1:-1;632:990:160;;;;;;;;-1:-1:-1;632:990:160;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;2600:7:27;632:990:160;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;821:14;632:990;;;;;;;;;;;;821:14;632:990;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;-1:-1:-1;632:990:160;;;;;;;;-1:-1:-1;632:990:160;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;2600:7:27;632:990:160;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;821:14;632:990;;;;;;;;;;;;821:14;632:990;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;-1:-1:-1;632:990:160;;;;4979:67:26;-1:-1:-1;;632:990:160;;;-1:-1:-1;;;;;;;;;;;632:990:160;4979:67:26;;;4851:91;6498:23;;;632:990:160;4908:23:26;632:990:160;;4908:23:26;4855:30;4872:13;;;4855:30;;;4790:50;4818:4;4810:25;:30;;-1:-1:-1;4790:50:26;;4726:34;;;-1:-1:-1;4726:34:26;;632:990:160;;;;;;-1:-1:-1;;632:990:160;;;;4616:5:27;632:990:160;;:::i;:::-;;;966:10:30;;4616:5:27;:::i;:::-;632:990:160;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;-1:-1:-1;632:990:160;;;;;;;-1:-1:-1;632:990:160;;-1:-1:-1;632:990:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:990:160;;-1:-1:-1;632:990:160;;;;;;;;-1:-1:-1;;632:990:160;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;-1:-1:-1;;;;;632:990:160;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;2806:64:33;632:990:160;5777:18:33;:43;;;632:990:160;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;5965:13:33;632:990:160;;;;6000:4:33;632:990:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:990:160;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;632:990:160;;;;;;;;;;;;-1:-1:-1;;;632:990:160;;;;;;;5777:43:33;632:990:160;5799:16:33;632:990:160;5799:21:33;5777:43;;632:990:160;;;;;;-1:-1:-1;;632:990:160;;;;;;:::i;:::-;;;;;;;;;972:64:31;632:990:160;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;1479:5:28;632:990:160;;:::i;:::-;;;966:10:30;1448:5:28;966:10:30;;1448:5:28;;:::i;:::-;1479;:::i;632:990:160:-;;;;;;-1:-1:-1;;632:990:160;;;;2303:62:25;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:990:160;;-1:-1:-1;;;;;;632:990:160;;;;;;;-1:-1:-1;;;;;632:990:160;3975:40:25;632:990:160;;3975:40:25;632:990:160;;;;;;;-1:-1:-1;;632:990:160;;;;-1:-1:-1;;;;;632:990:160;;:::i;:::-;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;2303:62:25;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;6431:44:26;;;;632:990:160;6427:105:26;;1427:1:160;632:990;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;6656:20:26;632:990:160;;;1427:1;632:990;;6656:20:26;632:990:160;6431:44:26;632:990:160;1427:1;632:990;;;6450:25:26;;6431:44;;632:990:160;;;;;;-1:-1:-1;;632:990:160;;;;1005:5:28;632:990:160;;966:10:30;1005:5:28;:::i;632:990:160:-;;;;;;-1:-1:-1;;632:990:160;;;;;;:::i;:::-;2303:62:25;;:::i;:::-;-1:-1:-1;;;;;632:990:160;;8803:21:27;8799:91;;8928:5;632:990:160;;;8928:5:27;;:::i;632:990:160:-;;;;;;-1:-1:-1;;632:990:160;;;;;4094:23:33;;:::i;:::-;632:990:160;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;;;;1512:2;632:990;;;;;;;;;-1:-1:-1;;632:990:160;;;;6198:5:27;632:990:160;;:::i;:::-;;;:::i;:::-;;;966:10:30;6162:5:27;966:10:30;;6162:5:27;;:::i;:::-;6198;:::i;632:990:160:-;;;;;;-1:-1:-1;;632:990:160;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;10117:4:27;632:990:160;;:::i;:::-;;;966:10:30;;10117:4:27;:::i;632:990:160:-;;;;;;-1:-1:-1;;632:990:160;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;-1:-1:-1;632:990:160;;;;;;;-1:-1:-1;632:990:160;;-1:-1:-1;632:990:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:990:160;;;;;;;;-1:-1:-1;;632:990:160;;;;:::o;:::-;;;;-1:-1:-1;;;;;632:990:160;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;632:990:160;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;;;632:990:160;;;;;4867:13:27;632:990:160;;;;;;:::o;3405:215:25:-;-1:-1:-1;;;;;632:990:160;3489:22:25;;3485:91;;-1:-1:-1;;;;;;;;;;;632:990:160;;-1:-1:-1;;;;;;632:990:160;;;;;;;-1:-1:-1;;;;;632:990:160;3975:40:25;-1:-1:-1;;3975:40:25;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;632:990:160;;3509:1:25;3534:31;11745:477:27;;;4867:20;;;:::i;:::-;632:990:160;;;;;;;-1:-1:-1;632:990:160;;;;-1:-1:-1;632:990:160;;;;;11910:37:27;;11906:310;;11745:477;;;;;:::o;11906:310::-;11967:24;;;11963:130;;-1:-1:-1;;;;;632:990:160;;11141:19:27;11137:89;;-1:-1:-1;;;;;632:990:160;;11239:21:27;11235:90;;11334:20;;;:::i;:::-;:29;632:990:160;;;;;;-1:-1:-1;632:990:160;;;;-1:-1:-1;632:990:160;;;;;11906:310:27;;;;;;11235:90;11283:31;;;-1:-1:-1;11283:31:27;-1:-1:-1;11283:31:27;632:990:160;;-1:-1:-1;11283:31:27;11137:89;11183:32;;;-1:-1:-1;11183:32:27;-1:-1:-1;11183:32:27;632:990:160;;-1:-1:-1;11183:32:27;11963:130;12018:60;;;;;;-1:-1:-1;12018:60:27;632:990:160;;;;;;12018:60:27;632:990:160;;;;;;-1:-1:-1;12018:60:27;6605:300;-1:-1:-1;;;;;632:990:160;;6688:18:27;;6684:86;;-1:-1:-1;;;;;632:990:160;;6783:16:27;;6779:86;;632:990:160;6704:1:27;632:990:160;-1:-1:-1;;;;;;;;;;;632:990:160;;;6704:1:27;632:990:160;;7609:19:27;;;7605:115;;632:990:160;8358:25:27;632:990:160;;;;6704:1:27;632:990:160;-1:-1:-1;;;;;;;;;;;632:990:160;;;;6704:1:27;632:990:160;;;6704:1:27;632:990:160;-1:-1:-1;;;;;;;;;;;632:990:160;;;6704:1:27;632:990:160;;;;;;;;;;;;8358:25:27;6605:300::o;7605:115::-;7655:50;;;;6704:1;7655:50;;632:990:160;;;;;;6704:1:27;7655:50;6684:86;6729:30;;;6704:1;6729:30;6704:1;6729:30;632:990:160;;6704:1:27;6729:30;2658:162:25;-1:-1:-1;;;;;;;;;;;632:990:160;-1:-1:-1;;;;;632:990:160;966:10:30;2717:23:25;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:25;966:10:30;2763:40:25;632:990:160;;-1:-1:-1;2763:40:25;9259:206:27;;;;-1:-1:-1;;;;;632:990:160;9329:21:27;;9325:89;;632:990:160;9348:1:27;632:990:160;-1:-1:-1;;;;;;;;;;;632:990:160;;;9348:1:27;632:990:160;;7609:19:27;;;7605:115;;632:990:160;;9348:1:27;632:990:160;;8358:25:27;632:990:160;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;8358:25:27;9259:206::o;7605:115::-;7655:50;;;;;9348:1;7655:50;;632:990:160;;;;;;9348:1:27;7655:50;10976:487;;-1:-1:-1;;;;;632:990:160;;;11141:19:27;;11137:89;;-1:-1:-1;;;;;632:990:160;;11239:21:27;;11235:90;;11415:31;11334:20;;632:990:160;11334:20:27;;:::i;:::-;632:990:160;-1:-1:-1;632:990:160;;;;;-1:-1:-1;632:990:160;;;;;;;11415:31:27;10976:487::o;7220:1170::-;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;-1:-1:-1;;;;;632:990:160;;;;8358:25:27;;632:990:160;;7918:16:27;632:990:160;;;-1:-1:-1;;;;;;;;;;;632:990:160;;-1:-1:-1;;;;;;;;;;;632:990:160;7914:429:27;632:990:160;;;;;8358:25:27;7220:1170::o;7914:429::-;632:990:160;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;;7914:429:27;;632:990:160;;;;;941:9;;;;;632:990;941:9;4130:191:33;4243:17;;:::i;:::-;4262:20;;:::i;:::-;632:990:160;;4221:92:33;;;;632:990:160;2073:95:33;632:990:160;;;2073:95:33;;632:990:160;2073:95:33;;;632:990:160;4284:13:33;2073:95;;;632:990:160;4307:4:33;2073:95;;;632:990:160;2073:95:33;4221:92;;;;;;:::i;:::-;632:990:160;4211:103:33;;4130:191;:::o;7084:141:26:-;632:990:160;-1:-1:-1;;;;;;;;;;;632:990:160;;;;7150:18:26;7146:73;;7084:141::o;7146:73::-;7191:17;;;-1:-1:-1;7191:17:26;;-1:-1:-1;7191:17:26;5140:1530:66;;;6199:66;6186:79;;6182:164;;632:990:160;;;;;;-1:-1:-1;632:990:160;;;;;;;;;;;;;;;;;;;6457:24:66;;;;;;;;;-1:-1:-1;6457:24:66;-1:-1:-1;;;;;632:990:160;;6495:20:66;6491:113;;6614:49;-1:-1:-1;6614:49:66;-1:-1:-1;5140:1530:66;:::o;6491:113::-;6531:62;-1:-1:-1;6531:62:66;6457:24;6531:62;-1:-1:-1;6531:62:66;:::o;6457:24::-;632:990:160;;;-1:-1:-1;632:990:160;;;;;6182:164:66;6281:54;;;6297:1;6281:54;6301:30;6281:54;;:::o;7196:532::-;632:990:160;;;;;;7282:29:66;;;7327:7;;:::o;7278:444::-;632:990:160;7378:38:66;;632:990:160;;7439:23:66;;;7291:20;7439:23;632:990:160;7291:20:66;7439:23;7374:348;7492:35;7483:44;;7492:35;;7550:46;;;;7291:20;7550:46;632:990:160;;;7291:20:66;7550:46;7479:243;7626:30;7617:39;7613:109;;7479:243;7196:532::o;7613:109::-;7679:32;;;7291:20;7679:32;632:990:160;;;7291:20:66;7679:32;632:990:160;;;;7291:20:66;632:990:160;;;;;7291:20:66;632:990:160;7058:687:33;632:990:160;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;7230:22:33;;;;7275;7268:29;:::o;7226:513::-;-1:-1:-1;;2806:64:33;632:990:160;7603:15:33;;;;7638:17;:::o;7599:130::-;7694:20;7701:13;7694:20;:::o;632:990:160:-;-1:-1:-1;;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;-1:-1:-1;632:990:160;;;;;;;;;;;-1:-1:-1;632:990:160;;7966:723:33;632:990:160;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;8147:25:33;;;;8195;8188:32;:::o;8143:540::-;-1:-1:-1;;8507:16:33;632:990:160;8541:18:33;;;;8579:20;:::o;632:990:160:-;-1:-1:-1;;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;-1:-1:-1;632:990:160;;;;;;;;;;;-1:-1:-1;632:990:160;","linkReferences":{}},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(uint256)":"42966c68","burnFrom(address,uint256)":"79cc6790","decimals()":"313ce567","eip712Domain()":"84b0196e","initialize(address)":"c4d66de8","mint(address,uint256)":"40c10f19","name()":"06fdde03","nonces(address)":"7ecebe00","owner()":"8da5cb5b","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","reinitialize()":"6c2eb350","renounceOwnership()":"715018a6","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOwnership(address)":"f2fde38b"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"ERC2612ExpiredSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC2612InvalidSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"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\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC2612ExpiredSignature(uint256)\":[{\"details\":\"Permit deadline has expired.\"}],\"ERC2612InvalidSigner(address,address)\":[{\"details\":\"Mismatched signature.\"}],\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"burn(uint256)\":{\"details\":\"Destroys a `value` amount of tokens from the caller. See {ERC20-_burn}.\"},\"burnFrom(address,uint256)\":{\"details\":\"Destroys a `value` amount of tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `value`.\"},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/WrappedVara.sol\":\"WrappedVara\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":symbiotic-core/=lib/symbiotic-core/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x5a5f22721ffb66d3e1ecc568c0d37c91f91223d8663c8a5e78396e780b849c72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bdd108133c98ea251513424bf17905090c8a7e0755562a6d12a81b8bccbd6152\",\"dweb:/ipfs/QmahpnB63Up9aVx4jDqxEgry5BRN5itHRvy9rwBvMT2yqL\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"keccak256\":\"0xe74dd150d031e8ecf9755893a2aae02dec954158140424f11c28ff689a48492f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://554e0934aecff6725e10d4aeb2e70ff214384b68782b1ba9f9322a0d16105a2f\",\"dweb:/ipfs/QmVvmHc7xPftEkWvJRNAqv7mXihKLEAVXpiebG7RT5rhMW\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol\":{\"keccak256\":\"0x6ff1ff6f25ebee2f778775b26d81610a04e37993bc06a7f54e0c768330ef1506\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f1fa246b88750fe26a30495db812eb2788dba8e5191a11f9dedb37bd6f4d883\",\"dweb:/ipfs/QmZUcDXW1a9xEAfQwqUG6NXQ6AwCs5gfv89NkwzTCeDify\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/NoncesUpgradeable.sol\":{\"keccak256\":\"0x778f4a1546a1c6c726ecc8e2348a2789690fb8f26e12bd9d89537669167b79a4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://851d3dfe724e918ff0a064b206e1ef46b27ab0df2aa2c8af976973a22ef59827\",\"dweb:/ipfs/Qmd4wb7zX8ueYhMVBy5PJjfsANK3Ra3pKPN7qQkNsdwGHn\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/EIP712Upgradeable.sol\":{\"keccak256\":\"0x06d93977f6018359ef432d3b649b7c92efb0326d3ddbbeaf08648105bdcacbbf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c8574fdb7ffb0e8e9841ba6394432d3e31b496a0953baa6f64837062fb29b02e\",\"dweb:/ipfs/QmdjZNdnBUVzzWXMYXsFmHdvh2KL5Lnc1uBfvbuqPNU9X3\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x9cac1f97ecc92043dd19235d6677e40cf6bac382886a94f7a80a957846b24229\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1e0c924e0edfdfd4abceeb552d99f1cd95c0d387b38ccb1f67c583607e3d155\",\"dweb:/ipfs/QmZAi6qKa66zuS3jyEhsQR9bBNnZe1wSognYqw9nvseyUz\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323\",\"dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0xe9d36d0c892aea68546d53f21e02223f7f542295c10110a0764336f9ffeab6d1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://34d4d72a89193f4d5223763e6d871443fb32a22d6024566843f4ee42eed68bdd\",\"dweb:/ipfs/Qmbsc6kJJNhrkNXP7g7KeqzRETQEvzSXg3ZmJmVLhaEahB\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3\",\"dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6\",\"dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087\",\"dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8\",\"dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da\",\"dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047\",\"dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615\",\"dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5\"]},\"src/WrappedVara.sol\":{\"keccak256\":\"0x3e0983635bf88ee5284c4385c01431135b7eec294e2f1c0d22bc2dddc16790dd\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://0302725cd5b1bd6afacebd0d30d445bb1c86152745b6de42dc1a66a570b42718\",\"dweb:/ipfs/QmVCurygXE5PV65uvC12ybtXYpL292PMmEUPnbRtGbAY1V\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"ECDSAInvalidSignature"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"ECDSAInvalidSignatureLength"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"type":"error","name":"ECDSAInvalidSignatureS"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientAllowance"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientBalance"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC20InvalidApprover"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC20InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC20InvalidSender"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"type":"error","name":"ERC20InvalidSpender"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"type":"error","name":"ERC2612ExpiredSignature"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC2612InvalidSigner"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"type":"error","name":"InvalidAccountNonce"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"spender","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Approval","anonymous":false},{"inputs":[],"type":"event","name":"EIP712DomainChanged","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","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":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"stateMutability":"view","type":"function","name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burn"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burnFrom"},{"inputs":[],"stateMutability":"pure","type":"function","name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}]},{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"mint"},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function","name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"permit"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"reinitialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"}],"devdoc":{"kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"burn(uint256)":{"details":"Destroys a `value` amount of tokens from the caller. See {ERC20-_burn}."},"burnFrom(address,uint256)":{"details":"Destroys a `value` amount of tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `value`."},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"eip712Domain()":{"details":"See {IERC-5267}."},"name()":{"details":"Returns the name of the token."},"nonces(address)":{"details":"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times."},"owner()":{"details":"Returns the address of the current owner."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","symbiotic-core/=lib/symbiotic-core/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/WrappedVara.sol":"WrappedVara"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0x5a5f22721ffb66d3e1ecc568c0d37c91f91223d8663c8a5e78396e780b849c72","urls":["bzz-raw://bdd108133c98ea251513424bf17905090c8a7e0755562a6d12a81b8bccbd6152","dweb:/ipfs/QmahpnB63Up9aVx4jDqxEgry5BRN5itHRvy9rwBvMT2yqL"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol":{"keccak256":"0xe74dd150d031e8ecf9755893a2aae02dec954158140424f11c28ff689a48492f","urls":["bzz-raw://554e0934aecff6725e10d4aeb2e70ff214384b68782b1ba9f9322a0d16105a2f","dweb:/ipfs/QmVvmHc7xPftEkWvJRNAqv7mXihKLEAVXpiebG7RT5rhMW"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol":{"keccak256":"0x6ff1ff6f25ebee2f778775b26d81610a04e37993bc06a7f54e0c768330ef1506","urls":["bzz-raw://6f1fa246b88750fe26a30495db812eb2788dba8e5191a11f9dedb37bd6f4d883","dweb:/ipfs/QmZUcDXW1a9xEAfQwqUG6NXQ6AwCs5gfv89NkwzTCeDify"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/NoncesUpgradeable.sol":{"keccak256":"0x778f4a1546a1c6c726ecc8e2348a2789690fb8f26e12bd9d89537669167b79a4","urls":["bzz-raw://851d3dfe724e918ff0a064b206e1ef46b27ab0df2aa2c8af976973a22ef59827","dweb:/ipfs/Qmd4wb7zX8ueYhMVBy5PJjfsANK3Ra3pKPN7qQkNsdwGHn"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/EIP712Upgradeable.sol":{"keccak256":"0x06d93977f6018359ef432d3b649b7c92efb0326d3ddbbeaf08648105bdcacbbf","urls":["bzz-raw://c8574fdb7ffb0e8e9841ba6394432d3e31b496a0953baa6f64837062fb29b02e","dweb:/ipfs/QmdjZNdnBUVzzWXMYXsFmHdvh2KL5Lnc1uBfvbuqPNU9X3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol":{"keccak256":"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92","urls":["bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a","dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x9cac1f97ecc92043dd19235d6677e40cf6bac382886a94f7a80a957846b24229","urls":["bzz-raw://a1e0c924e0edfdfd4abceeb552d99f1cd95c0d387b38ccb1f67c583607e3d155","dweb:/ipfs/QmZAi6qKa66zuS3jyEhsQR9bBNnZe1wSognYqw9nvseyUz"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28","urls":["bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323","dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0xe9d36d0c892aea68546d53f21e02223f7f542295c10110a0764336f9ffeab6d1","urls":["bzz-raw://34d4d72a89193f4d5223763e6d871443fb32a22d6024566843f4ee42eed68bdd","dweb:/ipfs/Qmbsc6kJJNhrkNXP7g7KeqzRETQEvzSXg3ZmJmVLhaEahB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a","urls":["bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3","dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b","urls":["bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6","dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb","urls":["bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087","dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38","urls":["bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8","dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee","urls":["bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da","dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e","urls":["bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047","dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44","urls":["bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615","dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5"],"license":"MIT"},"src/WrappedVara.sol":{"keccak256":"0x3e0983635bf88ee5284c4385c01431135b7eec294e2f1c0d22bc2dddc16790dd","urls":["bzz-raw://0302725cd5b1bd6afacebd0d30d445bb1c86152745b6de42dc1a66a570b42718","dweb:/ipfs/QmVCurygXE5PV65uvC12ybtXYpL292PMmEUPnbRtGbAY1V"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/WrappedVara.sol","id":77016,"exportedSymbols":{"ERC20BurnableUpgradeable":[40320],"ERC20PermitUpgradeable":[40489],"ERC20Upgradeable":[40258],"Initializable":[39641],"OwnableUpgradeable":[39387],"WrappedVara":[77015]},"nodeType":"SourceUnit","src":"39:1584:160","nodes":[{"id":76910,"nodeType":"PragmaDirective","src":"39:24:160","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":76912,"nodeType":"ImportDirective","src":"65:96:160","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":77016,"sourceUnit":39642,"symbolAliases":[{"foreign":{"id":76911,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39641,"src":"73:13:160","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":76914,"nodeType":"ImportDirective","src":"162:102:160","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol","nameLocation":"-1:-1:-1","scope":77016,"sourceUnit":40259,"symbolAliases":[{"foreign":{"id":76913,"name":"ERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40258,"src":"170:16:160","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":76916,"nodeType":"ImportDirective","src":"265:133:160","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":77016,"sourceUnit":40321,"symbolAliases":[{"foreign":{"id":76915,"name":"ERC20BurnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40320,"src":"273:24:160","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":76918,"nodeType":"ImportDirective","src":"399:101:160","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":77016,"sourceUnit":39388,"symbolAliases":[{"foreign":{"id":76917,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39387,"src":"407:18:160","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":76920,"nodeType":"ImportDirective","src":"501:129:160","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20PermitUpgradeable.sol","nameLocation":"-1:-1:-1","scope":77016,"sourceUnit":40490,"symbolAliases":[{"foreign":{"id":76919,"name":"ERC20PermitUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40489,"src":"509:22:160","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77015,"nodeType":"ContractDefinition","src":"632:990:160","nodes":[{"id":76933,"nodeType":"VariableDeclaration","src":"784:51:160","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_NAME","nameLocation":"808:10:160","scope":77015,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":76931,"name":"string","nodeType":"ElementaryTypeName","src":"784:6:160","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"577261707065642056617261","id":76932,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"821:14:160","typeDescriptions":{"typeIdentifier":"t_stringliteral_985e2e9885ca23de2896caee5fad5adf116e2558361aa44c502ff8b2c1b2a41b","typeString":"literal_string \"Wrapped Vara\""},"value":"Wrapped Vara"},"visibility":"private"},{"id":76936,"nodeType":"VariableDeclaration","src":"841:46:160","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_SYMBOL","nameLocation":"865:12:160","scope":77015,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":76934,"name":"string","nodeType":"ElementaryTypeName","src":"841:6:160","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"5756415241","id":76935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"880:7:160","typeDescriptions":{"typeIdentifier":"t_stringliteral_203a7c23d1b412674989fae6808de72f52c6953d49ac548796ba3c05451693a4","typeString":"literal_string \"WVARA\""},"value":"WVARA"},"visibility":"private"},{"id":76939,"nodeType":"VariableDeclaration","src":"893:57:160","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_INITIAL_SUPPLY","nameLocation":"918:20:160","scope":77015,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76937,"name":"uint256","nodeType":"ElementaryTypeName","src":"893:7:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"315f3030305f303030","id":76938,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"941:9:160","typeDescriptions":{"typeIdentifier":"t_rational_1000000_by_1","typeString":"int_const 1000000"},"value":"1_000_000"},"visibility":"private"},{"id":76947,"nodeType":"FunctionDefinition","src":"1010:53:160","nodes":[],"body":{"id":76946,"nodeType":"Block","src":"1024:39:160","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":76943,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39609,"src":"1034:20:160","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":76944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1034:22:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76945,"nodeType":"ExpressionStatement","src":"1034:22:160"}]},"documentation":{"id":76940,"nodeType":"StructuredDocumentation","src":"957:48:160","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":76941,"nodeType":"ParameterList","parameters":[],"src":"1021:2:160"},"returnParameters":{"id":76942,"nodeType":"ParameterList","parameters":[],"src":"1024:0:160"},"scope":77015,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":76981,"nodeType":"FunctionDefinition","src":"1069:297:160","nodes":[],"body":{"id":76980,"nodeType":"Block","src":"1130:236:160","nodes":[],"statements":[{"expression":{"arguments":[{"id":76955,"name":"TOKEN_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76933,"src":"1153:10:160","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":76956,"name":"TOKEN_SYMBOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76936,"src":"1165:12:160","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":76954,"name":"__ERC20_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39709,"src":"1140:12:160","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":76957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1140:38:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76958,"nodeType":"ExpressionStatement","src":"1140:38:160"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":76959,"name":"__ERC20Burnable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40279,"src":"1188:20:160","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":76960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1188:22:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76961,"nodeType":"ExpressionStatement","src":"1188:22:160"},{"expression":{"arguments":[{"id":76963,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76949,"src":"1235:12:160","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":76962,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39247,"src":"1220:14:160","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":76964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1220:28:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76965,"nodeType":"ExpressionStatement","src":"1220:28:160"},{"expression":{"arguments":[{"id":76967,"name":"TOKEN_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76933,"src":"1277:10:160","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":76966,"name":"__ERC20Permit_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40376,"src":"1258:18:160","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":76968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1258:30:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76969,"nodeType":"ExpressionStatement","src":"1258:30:160"},{"expression":{"arguments":[{"id":76971,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76949,"src":"1305:12:160","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76972,"name":"TOKEN_INITIAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76939,"src":"1319:20:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":76973,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1342:2:160","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":76974,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[76999],"referencedDeclaration":76999,"src":"1348:8:160","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_uint8_$","typeString":"function () pure returns (uint8)"}},"id":76975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1348:10:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"1342:16:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1319:39:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":76970,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40090,"src":"1299:5:160","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":76978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1299:60:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76979,"nodeType":"ExpressionStatement","src":"1299:60:160"}]},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":76952,"kind":"modifierInvocation","modifierName":{"id":76951,"name":"initializer","nameLocations":["1118:11:160"],"nodeType":"IdentifierPath","referencedDeclaration":39495,"src":"1118:11:160"},"nodeType":"ModifierInvocation","src":"1118:11:160"}],"name":"initialize","nameLocation":"1078:10:160","parameters":{"id":76950,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76949,"mutability":"mutable","name":"initialOwner","nameLocation":"1097:12:160","nodeType":"VariableDeclaration","scope":76981,"src":"1089:20:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76948,"name":"address","nodeType":"ElementaryTypeName","src":"1089:7:160","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1088:22:160"},"returnParameters":{"id":76953,"nodeType":"ParameterList","parameters":[],"src":"1130:0:160"},"scope":77015,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":76990,"nodeType":"FunctionDefinition","src":"1372:60:160","nodes":[],"body":{"id":76989,"nodeType":"Block","src":"1430:2:160","nodes":[],"statements":[]},"functionSelector":"6c2eb350","implemented":true,"kind":"function","modifiers":[{"id":76984,"kind":"modifierInvocation","modifierName":{"id":76983,"name":"onlyOwner","nameLocations":["1403:9:160"],"nodeType":"IdentifierPath","referencedDeclaration":39282,"src":"1403:9:160"},"nodeType":"ModifierInvocation","src":"1403:9:160"},{"arguments":[{"hexValue":"32","id":76986,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1427:1:160","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"id":76987,"kind":"modifierInvocation","modifierName":{"id":76985,"name":"reinitializer","nameLocations":["1413:13:160"],"nodeType":"IdentifierPath","referencedDeclaration":39542,"src":"1413:13:160"},"nodeType":"ModifierInvocation","src":"1413:16:160"}],"name":"reinitialize","nameLocation":"1381:12:160","parameters":{"id":76982,"nodeType":"ParameterList","parameters":[],"src":"1393:2:160"},"returnParameters":{"id":76988,"nodeType":"ParameterList","parameters":[],"src":"1430:0:160"},"scope":77015,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":76999,"nodeType":"FunctionDefinition","src":"1438:83:160","nodes":[],"body":{"id":76998,"nodeType":"Block","src":"1495:26:160","nodes":[],"statements":[{"expression":{"hexValue":"3132","id":76996,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1512:2:160","typeDescriptions":{"typeIdentifier":"t_rational_12_by_1","typeString":"int_const 12"},"value":"12"},"functionReturnParameters":76995,"id":76997,"nodeType":"Return","src":"1505:9:160"}]},"baseFunctions":[39778],"functionSelector":"313ce567","implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"1447:8:160","overrides":{"id":76992,"nodeType":"OverrideSpecifier","overrides":[],"src":"1470:8:160"},"parameters":{"id":76991,"nodeType":"ParameterList","parameters":[],"src":"1455:2:160"},"returnParameters":{"id":76995,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76994,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76999,"src":"1488:5:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":76993,"name":"uint8","nodeType":"ElementaryTypeName","src":"1488:5:160","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1487:7:160"},"scope":77015,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":77014,"nodeType":"FunctionDefinition","src":"1527:93:160","nodes":[],"body":{"id":77013,"nodeType":"Block","src":"1586:34:160","nodes":[],"statements":[{"expression":{"arguments":[{"id":77009,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77001,"src":"1602:2:160","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":77010,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77003,"src":"1606:6:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":77008,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40090,"src":"1596:5:160","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":77011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1596:17:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77012,"nodeType":"ExpressionStatement","src":"1596:17:160"}]},"functionSelector":"40c10f19","implemented":true,"kind":"function","modifiers":[{"id":77006,"kind":"modifierInvocation","modifierName":{"id":77005,"name":"onlyOwner","nameLocations":["1576:9:160"],"nodeType":"IdentifierPath","referencedDeclaration":39282,"src":"1576:9:160"},"nodeType":"ModifierInvocation","src":"1576:9:160"}],"name":"mint","nameLocation":"1536:4:160","parameters":{"id":77004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77001,"mutability":"mutable","name":"to","nameLocation":"1549:2:160","nodeType":"VariableDeclaration","scope":77014,"src":"1541:10:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":77000,"name":"address","nodeType":"ElementaryTypeName","src":"1541:7:160","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":77003,"mutability":"mutable","name":"amount","nameLocation":"1561:6:160","nodeType":"VariableDeclaration","scope":77014,"src":"1553:14:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":77002,"name":"uint256","nodeType":"ElementaryTypeName","src":"1553:7:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1540:28:160"},"returnParameters":{"id":77007,"nodeType":"ParameterList","parameters":[],"src":"1586:0:160"},"scope":77015,"stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":76921,"name":"Initializable","nameLocations":["660:13:160"],"nodeType":"IdentifierPath","referencedDeclaration":39641,"src":"660:13:160"},"id":76922,"nodeType":"InheritanceSpecifier","src":"660:13:160"},{"baseName":{"id":76923,"name":"ERC20Upgradeable","nameLocations":["679:16:160"],"nodeType":"IdentifierPath","referencedDeclaration":40258,"src":"679:16:160"},"id":76924,"nodeType":"InheritanceSpecifier","src":"679:16:160"},{"baseName":{"id":76925,"name":"ERC20BurnableUpgradeable","nameLocations":["701:24:160"],"nodeType":"IdentifierPath","referencedDeclaration":40320,"src":"701:24:160"},"id":76926,"nodeType":"InheritanceSpecifier","src":"701:24:160"},{"baseName":{"id":76927,"name":"OwnableUpgradeable","nameLocations":["731:18:160"],"nodeType":"IdentifierPath","referencedDeclaration":39387,"src":"731:18:160"},"id":76928,"nodeType":"InheritanceSpecifier","src":"731:18:160"},{"baseName":{"id":76929,"name":"ERC20PermitUpgradeable","nameLocations":["755:22:160"],"nodeType":"IdentifierPath","referencedDeclaration":40489,"src":"755:22:160"},"id":76930,"nodeType":"InheritanceSpecifier","src":"755:22:160"}],"canonicalName":"WrappedVara","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[77015,40489,40646,41119,41540,43202,39387,40320,40258,41582,43166,43140,40535,39641],"name":"WrappedVara","nameLocation":"641:11:160","scope":77016,"usedErrors":[39223,39228,39404,39407,40355,40362,40549,41552,41557,41562,41571,41576,41581,44912,44917,44922],"usedEvents":[39234,39412,41520,43074,43083]}],"license":"UNLICENSED"},"id":160} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"DOMAIN_SEPARATOR","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"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":"spender","type":"address","internalType":"address"},{"name":"value","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":"burn","inputs":[{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"burnFrom","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"pure"},{"type":"function","name":"eip712Domain","inputs":[],"outputs":[{"name":"fields","type":"bytes1","internalType":"bytes1"},{"name":"name","type":"string","internalType":"string"},{"name":"version","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"verifyingContract","type":"address","internalType":"address"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"extensions","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"initialOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mint","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"nonces","inputs":[{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"permit","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"reinitialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"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":"value","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":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"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":"EIP712DomainChanged","inputs":[],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"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":"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},{"type":"error","name":"ECDSAInvalidSignature","inputs":[]},{"type":"error","name":"ECDSAInvalidSignatureLength","inputs":[{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ECDSAInvalidSignatureS","inputs":[{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"name":"spender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC2612ExpiredSignature","inputs":[{"name":"deadline","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC2612InvalidSigner","inputs":[{"name":"signer","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidAccountNonce","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"currentNonce","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x6080806040523460d0577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c1660c1576002600160401b03196001600160401b03821601605c575b604051611cbe90816100d58239f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80604d565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806306fdde031461120d578063095ea7b3146111e757806318160ddd146111be57806323b872dd14611186578063313ce5671461116b5780633644e5151461114957806340c10f191461110c57806342966c68146110ef5780636c2eb3501461105557806370a0823114611011578063715018a614610faa57806379cc679014610f7a5780637ecebe0014610f2457806384b0196e14610c505780638da5cb5b14610c1c57806395d89b4114610b22578063a9059cbb14610af1578063c4d66de8146102d8578063d505accf14610176578063dd62ed3e1461012f5763f2fde38b14610100575f80fd5b3461012b57602036600319011261012b5761012961011c6112ee565b6101246115b2565b6113ac565b005b5f80fd5b3461012b57604036600319011261012b576101486112ee565b610159610153611304565b91611374565b9060018060a01b03165f52602052602060405f2054604051908152f35b3461012b5760e036600319011261012b5761018f6112ee565b610197611304565b604435906064359260843560ff8116810361012b578442116102c55761028a6102939160018060a01b03841696875f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260405f20908154916001830190556040519060208201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c984528a604084015260018060a01b038916606084015289608084015260a083015260c082015260c0815261025860e082611352565b5190206102636117c0565b906040519161190160f01b83526002830152602282015260c43591604260a4359220611852565b909291926118df565b6001600160a01b03168481036102ae5750610129935061169b565b84906325c0072360e11b5f5260045260245260445ffd5b8463313c898160e11b5f5260045260245ffd5b3461012b57602036600319011261012b576102f16112ee565b5f80516020611c69833981519152549060ff8260401c16159167ffffffffffffffff811680159081610ae9575b6001149081610adf575b159081610ad6575b50610ac75767ffffffffffffffff1981166001175f80516020611c698339815191525582610a9b575b5060405191610369604084611352565b600c83526b57726170706564205661726160a01b602084015260405191610391604084611352565b6005835264575641524160d81b60208401526103ab611827565b6103b3611827565b835167ffffffffffffffff81116107a8576103db5f80516020611b898339815191525461131a565b601f8111610a2c575b50602094601f82116001146109b1579481929394955f926109a6575b50508160011b915f199060031b1c1916175f80516020611b89833981519152555b825167ffffffffffffffff81116107a8576104495f80516020611be98339815191525461131a565b601f8111610937575b506020601f82116001146108bc57819293945f926108b1575b50508160011b915f199060031b1c1916175f80516020611be9833981519152555b610494611827565b61049c611827565b6104a4611827565b6104ad816113ac565b604051916104bc604084611352565b600c83526b57726170706564205661726160a01b60208401526104dd611827565b604051916104ec604084611352565b60018352603160f81b6020840152610502611827565b835167ffffffffffffffff81116107a85761052a5f80516020611bc98339815191525461131a565b601f8111610842575b50602094601f82116001146107c7579481929394955f926107bc575b50508160011b915f199060031b1c1916175f80516020611bc9833981519152555b825167ffffffffffffffff81116107a8576105985f80516020611c498339815191525461131a565b601f8111610739575b506020601f82116001146106be57819293945f926106b3575b50508160011b915f199060031b1c1916175f80516020611c49833981519152555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008190557fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101556001600160a01b038116156106a057670de0b6b3a7640000610643916116fe565b61064957005b68ff0000000000000000195f80516020611c6983398151915254165f80516020611c69833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b63ec442f0560e01b5f525f60045260245ffd5b0151905084806105ba565b601f198216905f80516020611c498339815191525f52805f20915f5b81811061072157509583600195969710610709575b505050811b015f80516020611c49833981519152556105db565b01515f1960f88460031b161c191690558480806106ef565b9192602060018192868b0151815501940192016106da565b5f80516020611c498339815191525f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f830160051c8101916020841061079e575b601f0160051c01905b81811061079357506105a1565b5f8155600101610786565b909150819061077d565b634e487b7160e01b5f52604160045260245ffd5b01519050858061054f565b601f198216955f80516020611bc98339815191525f52805f20915f5b88811061082a57508360019596979810610812575b505050811b015f80516020611bc983398151915255610570565b01515f1960f88460031b161c191690558580806107f8565b919260206001819286850151815501940192016107e3565b5f80516020611bc98339815191525f527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f830160051c810191602084106108a7575b601f0160051c01905b81811061089c5750610533565b5f815560010161088f565b9091508190610886565b01519050848061046b565b601f198216905f80516020611be98339815191525f52805f20915f5b81811061091f57509583600195969710610907575b505050811b015f80516020611be98339815191525561048c565b01515f1960f88460031b161c191690558480806108ed565b9192602060018192868b0151815501940192016108d8565b5f80516020611be98339815191525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f830160051c8101916020841061099c575b601f0160051c01905b8181106109915750610452565b5f8155600101610984565b909150819061097b565b015190508580610400565b601f198216955f80516020611b898339815191525f52805f20915f5b888110610a14575083600195969798106109fc575b505050811b015f80516020611b8983398151915255610421565b01515f1960f88460031b161c191690558580806109e2565b919260206001819286850151815501940192016109cd565b5f80516020611b898339815191525f527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f830160051c81019160208410610a91575b601f0160051c01905b818110610a8657506103e4565b5f8155600101610a79565b9091508190610a70565b68ffffffffffffffffff191668010000000000000001175f80516020611c698339815191525582610359565b63f92ee8a960e01b5f5260045ffd5b90501584610330565b303b159150610328565b84915061031e565b3461012b57604036600319011261012b57610b17610b0d6112ee565b60243590336114e1565b602060405160018152f35b3461012b575f36600319011261012b576040515f5f80516020611be983398151915254610b4e8161131a565b8084529060018116908115610bf85750600114610b8e575b610b8a83610b7681850382611352565b6040519182916020835260208301906112ca565b0390f35b5f80516020611be98339815191525f9081527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b808210610bde57509091508101602001610b76610b66565b919260018160209254838588010152019101909291610bc6565b60ff191660208086019190915291151560051b84019091019150610b769050610b66565b3461012b575f36600319011261012b575f80516020611c09833981519152546040516001600160a01b039091168152602090f35b3461012b575f36600319011261012b577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580610efb575b15610ebe576040515f80516020611bc983398151915254815f610cab8361131a565b8083529260018116908115610e9f5750600114610e34575b610ccf92500382611352565b6040515f80516020611c4983398151915254815f610cec8361131a565b8083529260018116908115610e155750600114610daa575b610d1791925092610d4e94930382611352565b6020610d5c60405192610d2a8385611352565b5f84525f368137604051958695600f60f81b875260e08588015260e08701906112ca565b9085820360408701526112ca565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b828110610d9357505050500390f35b835185528695509381019392810192600101610d84565b505f80516020611c498339815191525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310610df9575050906020610d1792820101610d04565b6020919350806001915483858801015201910190918392610de1565b60209250610d1794915060ff191682840152151560051b820101610d04565b505f80516020611bc98339815191525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310610e83575050906020610ccf92820101610cc3565b6020919350806001915483858801015201910190918392610e6b565b60209250610ccf94915060ff191682840152151560051b820101610cc3565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610c89565b3461012b57602036600319011261012b57610f3d6112ee565b60018060a01b03165f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052602060405f2054604051908152f35b3461012b57604036600319011261012b57610129610f966112ee565b60243590610fa582338361141d565b6115e5565b3461012b575f36600319011261012b57610fc26115b2565b5f80516020611c0983398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461012b57602036600319011261012b576001600160a01b036110326112ee565b165f525f80516020611ba9833981519152602052602060405f2054604051908152f35b3461012b575f36600319011261012b5761106d6115b2565b5f80516020611c698339815191525460ff8160401c1680156110da575b610ac75760029068ffffffffffffffffff1916175f80516020611c69833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160028152a1005b50600267ffffffffffffffff8216101561108a565b3461012b57602036600319011261012b57610129600435336115e5565b3461012b57604036600319011261012b576111256112ee565b61112d6115b2565b6001600160a01b038116156106a05761012990602435906116fe565b3461012b575f36600319011261012b5760206111636117c0565b604051908152f35b3461012b575f36600319011261012b576020604051600c8152f35b3461012b57606036600319011261012b57610b176111a26112ee565b6111aa611304565b604435916111b983338361141d565b6114e1565b3461012b575f36600319011261012b5760205f80516020611c2983398151915254604051908152f35b3461012b57604036600319011261012b57610b176112036112ee565b602435903361169b565b3461012b575f36600319011261012b576040515f5f80516020611b89833981519152546112398161131a565b8084529060018116908115610bf8575060011461126057610b8a83610b7681850382611352565b5f80516020611b898339815191525f9081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b8082106112b057509091508101602001610b76610b66565b919260018160209254838588010152019101909291611298565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361012b57565b602435906001600160a01b038216820361012b57565b90600182811c92168015611348575b602083101461133457565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611329565b90601f8019910116810190811067ffffffffffffffff8211176107a857604052565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b6001600160a01b0316801561140a575f80516020611c0983398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b919061142883611374565b60018060a01b0382165f5260205260405f2054925f19840361144b575b50505050565b8284106114be576001600160a01b038116156114ab576001600160a01b038216156114985761147990611374565b9060018060a01b03165f5260205260405f20910390555f808080611445565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b508290637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b6001600160a01b031690811561159f576001600160a01b03169182156106a057815f525f80516020611ba983398151915260205260405f205481811061158657817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f80516020611ba983398151915284520360405f2055845f525f80516020611ba9833981519152825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b5f80516020611c09833981519152546001600160a01b031633036115d257565b63118cdaa760e01b5f523360045260245ffd5b9091906001600160a01b0316801561159f57805f525f80516020611ba983398151915260205260405f2054838110611681576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587525f80516020611ba98339815191528452036040862055805f80516020611c2983398151915254035f80516020611c2983398151915255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffd5b916001600160a01b0383169182156114ab576001600160a01b0316928315611498577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925916116ea602092611374565b855f5282528060405f2055604051908152a3565b5f80516020611c2983398151915254908282018092116117ac575f80516020611c29833981519152919091556001600160a01b0316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020908461178a57805f80516020611c2983398151915254035f80516020611c29833981519152555b604051908152a3565b8484525f80516020611ba9833981519152825260408420818154019055611781565b634e487b7160e01b5f52601160045260245ffd5b6117c8611953565b6117d0611a80565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261182160c082611352565b51902090565b60ff5f80516020611c698339815191525460401c161561184357565b631afcd79f60e31b5f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116118d4579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156118c9575f516001600160a01b038116156118bf57905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b600481101561193f57806118f1575050565b600181036119085763f645eedf60e01b5f5260045ffd5b60028103611923575063fce698f760e01b5f5260045260245ffd5b60031461192d5750565b6335e2f38360e21b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b6040515f80516020611bc983398151915254905f816119718461131a565b9182825260208201946001811690815f14611a6457506001146119f9575b61199b92500382611352565b519081156119a7572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156119d45790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b505f80516020611bc98339815191525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310611a4857505090602061199b9282010161198f565b6020919350806001915483858801015201910190918392611a30565b60ff191686525061199b92151560051b8201602001905061198f565b6040515f80516020611c4983398151915254905f81611a9e8461131a565b9182825260208201946001811690815f14611b6c5750600114611b01575b611ac892500382611352565b51908115611ad4572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156119d45790565b505f80516020611c498339815191525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310611b50575050906020611ac892820101611abc565b6020919350806001915483858801015201910190918392611b38565b60ff1916865250611ac892151560051b82016020019050611abc56fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10252c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace049016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220876fa3b8d0ec6917757682c3a8181195f1246da17e840283e4106a851ed888ff64736f6c634300081a0033","sourceMap":"632:990:160:-:0;;;;;;;8837:64:26;632:990:160;;;;;;7896:76:26;;-1:-1:-1;;;;;;;;;;;632:990:160;;7985:34:26;7981:146;;-1:-1:-1;632:990:160;;;;;;;;;7981:146:26;-1:-1:-1;;;;;;632:990:160;-1:-1:-1;;;;;632:990:160;;;8837:64:26;632:990:160;;;8087:29:26;;632:990:160;;8087:29:26;7981:146;;;;7896:76;7938:23;;;-1:-1:-1;7938:23:26;;-1:-1:-1;7938:23:26;632:990:160;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c806306fdde031461120d578063095ea7b3146111e757806318160ddd146111be57806323b872dd14611186578063313ce5671461116b5780633644e5151461114957806340c10f191461110c57806342966c68146110ef5780636c2eb3501461105557806370a0823114611011578063715018a614610faa57806379cc679014610f7a5780637ecebe0014610f2457806384b0196e14610c505780638da5cb5b14610c1c57806395d89b4114610b22578063a9059cbb14610af1578063c4d66de8146102d8578063d505accf14610176578063dd62ed3e1461012f5763f2fde38b14610100575f80fd5b3461012b57602036600319011261012b5761012961011c6112ee565b6101246115b2565b6113ac565b005b5f80fd5b3461012b57604036600319011261012b576101486112ee565b610159610153611304565b91611374565b9060018060a01b03165f52602052602060405f2054604051908152f35b3461012b5760e036600319011261012b5761018f6112ee565b610197611304565b604435906064359260843560ff8116810361012b578442116102c55761028a6102939160018060a01b03841696875f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260405f20908154916001830190556040519060208201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c984528a604084015260018060a01b038916606084015289608084015260a083015260c082015260c0815261025860e082611352565b5190206102636117c0565b906040519161190160f01b83526002830152602282015260c43591604260a4359220611852565b909291926118df565b6001600160a01b03168481036102ae5750610129935061169b565b84906325c0072360e11b5f5260045260245260445ffd5b8463313c898160e11b5f5260045260245ffd5b3461012b57602036600319011261012b576102f16112ee565b5f80516020611c69833981519152549060ff8260401c16159167ffffffffffffffff811680159081610ae9575b6001149081610adf575b159081610ad6575b50610ac75767ffffffffffffffff1981166001175f80516020611c698339815191525582610a9b575b5060405191610369604084611352565b600c83526b57726170706564205661726160a01b602084015260405191610391604084611352565b6005835264575641524160d81b60208401526103ab611827565b6103b3611827565b835167ffffffffffffffff81116107a8576103db5f80516020611b898339815191525461131a565b601f8111610a2c575b50602094601f82116001146109b1579481929394955f926109a6575b50508160011b915f199060031b1c1916175f80516020611b89833981519152555b825167ffffffffffffffff81116107a8576104495f80516020611be98339815191525461131a565b601f8111610937575b506020601f82116001146108bc57819293945f926108b1575b50508160011b915f199060031b1c1916175f80516020611be9833981519152555b610494611827565b61049c611827565b6104a4611827565b6104ad816113ac565b604051916104bc604084611352565b600c83526b57726170706564205661726160a01b60208401526104dd611827565b604051916104ec604084611352565b60018352603160f81b6020840152610502611827565b835167ffffffffffffffff81116107a85761052a5f80516020611bc98339815191525461131a565b601f8111610842575b50602094601f82116001146107c7579481929394955f926107bc575b50508160011b915f199060031b1c1916175f80516020611bc9833981519152555b825167ffffffffffffffff81116107a8576105985f80516020611c498339815191525461131a565b601f8111610739575b506020601f82116001146106be57819293945f926106b3575b50508160011b915f199060031b1c1916175f80516020611c49833981519152555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008190557fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101556001600160a01b038116156106a057670de0b6b3a7640000610643916116fe565b61064957005b68ff0000000000000000195f80516020611c6983398151915254165f80516020611c69833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b63ec442f0560e01b5f525f60045260245ffd5b0151905084806105ba565b601f198216905f80516020611c498339815191525f52805f20915f5b81811061072157509583600195969710610709575b505050811b015f80516020611c49833981519152556105db565b01515f1960f88460031b161c191690558480806106ef565b9192602060018192868b0151815501940192016106da565b5f80516020611c498339815191525f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f830160051c8101916020841061079e575b601f0160051c01905b81811061079357506105a1565b5f8155600101610786565b909150819061077d565b634e487b7160e01b5f52604160045260245ffd5b01519050858061054f565b601f198216955f80516020611bc98339815191525f52805f20915f5b88811061082a57508360019596979810610812575b505050811b015f80516020611bc983398151915255610570565b01515f1960f88460031b161c191690558580806107f8565b919260206001819286850151815501940192016107e3565b5f80516020611bc98339815191525f527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f830160051c810191602084106108a7575b601f0160051c01905b81811061089c5750610533565b5f815560010161088f565b9091508190610886565b01519050848061046b565b601f198216905f80516020611be98339815191525f52805f20915f5b81811061091f57509583600195969710610907575b505050811b015f80516020611be98339815191525561048c565b01515f1960f88460031b161c191690558480806108ed565b9192602060018192868b0151815501940192016108d8565b5f80516020611be98339815191525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f830160051c8101916020841061099c575b601f0160051c01905b8181106109915750610452565b5f8155600101610984565b909150819061097b565b015190508580610400565b601f198216955f80516020611b898339815191525f52805f20915f5b888110610a14575083600195969798106109fc575b505050811b015f80516020611b8983398151915255610421565b01515f1960f88460031b161c191690558580806109e2565b919260206001819286850151815501940192016109cd565b5f80516020611b898339815191525f527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f830160051c81019160208410610a91575b601f0160051c01905b818110610a8657506103e4565b5f8155600101610a79565b9091508190610a70565b68ffffffffffffffffff191668010000000000000001175f80516020611c698339815191525582610359565b63f92ee8a960e01b5f5260045ffd5b90501584610330565b303b159150610328565b84915061031e565b3461012b57604036600319011261012b57610b17610b0d6112ee565b60243590336114e1565b602060405160018152f35b3461012b575f36600319011261012b576040515f5f80516020611be983398151915254610b4e8161131a565b8084529060018116908115610bf85750600114610b8e575b610b8a83610b7681850382611352565b6040519182916020835260208301906112ca565b0390f35b5f80516020611be98339815191525f9081527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b808210610bde57509091508101602001610b76610b66565b919260018160209254838588010152019101909291610bc6565b60ff191660208086019190915291151560051b84019091019150610b769050610b66565b3461012b575f36600319011261012b575f80516020611c09833981519152546040516001600160a01b039091168152602090f35b3461012b575f36600319011261012b577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580610efb575b15610ebe576040515f80516020611bc983398151915254815f610cab8361131a565b8083529260018116908115610e9f5750600114610e34575b610ccf92500382611352565b6040515f80516020611c4983398151915254815f610cec8361131a565b8083529260018116908115610e155750600114610daa575b610d1791925092610d4e94930382611352565b6020610d5c60405192610d2a8385611352565b5f84525f368137604051958695600f60f81b875260e08588015260e08701906112ca565b9085820360408701526112ca565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b828110610d9357505050500390f35b835185528695509381019392810192600101610d84565b505f80516020611c498339815191525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310610df9575050906020610d1792820101610d04565b6020919350806001915483858801015201910190918392610de1565b60209250610d1794915060ff191682840152151560051b820101610d04565b505f80516020611bc98339815191525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310610e83575050906020610ccf92820101610cc3565b6020919350806001915483858801015201910190918392610e6b565b60209250610ccf94915060ff191682840152151560051b820101610cc3565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610c89565b3461012b57602036600319011261012b57610f3d6112ee565b60018060a01b03165f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052602060405f2054604051908152f35b3461012b57604036600319011261012b57610129610f966112ee565b60243590610fa582338361141d565b6115e5565b3461012b575f36600319011261012b57610fc26115b2565b5f80516020611c0983398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461012b57602036600319011261012b576001600160a01b036110326112ee565b165f525f80516020611ba9833981519152602052602060405f2054604051908152f35b3461012b575f36600319011261012b5761106d6115b2565b5f80516020611c698339815191525460ff8160401c1680156110da575b610ac75760029068ffffffffffffffffff1916175f80516020611c69833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160028152a1005b50600267ffffffffffffffff8216101561108a565b3461012b57602036600319011261012b57610129600435336115e5565b3461012b57604036600319011261012b576111256112ee565b61112d6115b2565b6001600160a01b038116156106a05761012990602435906116fe565b3461012b575f36600319011261012b5760206111636117c0565b604051908152f35b3461012b575f36600319011261012b576020604051600c8152f35b3461012b57606036600319011261012b57610b176111a26112ee565b6111aa611304565b604435916111b983338361141d565b6114e1565b3461012b575f36600319011261012b5760205f80516020611c2983398151915254604051908152f35b3461012b57604036600319011261012b57610b176112036112ee565b602435903361169b565b3461012b575f36600319011261012b576040515f5f80516020611b89833981519152546112398161131a565b8084529060018116908115610bf8575060011461126057610b8a83610b7681850382611352565b5f80516020611b898339815191525f9081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b8082106112b057509091508101602001610b76610b66565b919260018160209254838588010152019101909291611298565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361012b57565b602435906001600160a01b038216820361012b57565b90600182811c92168015611348575b602083101461133457565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611329565b90601f8019910116810190811067ffffffffffffffff8211176107a857604052565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b6001600160a01b0316801561140a575f80516020611c0983398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b919061142883611374565b60018060a01b0382165f5260205260405f2054925f19840361144b575b50505050565b8284106114be576001600160a01b038116156114ab576001600160a01b038216156114985761147990611374565b9060018060a01b03165f5260205260405f20910390555f808080611445565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b508290637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b6001600160a01b031690811561159f576001600160a01b03169182156106a057815f525f80516020611ba983398151915260205260405f205481811061158657817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f80516020611ba983398151915284520360405f2055845f525f80516020611ba9833981519152825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b5f80516020611c09833981519152546001600160a01b031633036115d257565b63118cdaa760e01b5f523360045260245ffd5b9091906001600160a01b0316801561159f57805f525f80516020611ba983398151915260205260405f2054838110611681576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587525f80516020611ba98339815191528452036040862055805f80516020611c2983398151915254035f80516020611c2983398151915255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffd5b916001600160a01b0383169182156114ab576001600160a01b0316928315611498577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925916116ea602092611374565b855f5282528060405f2055604051908152a3565b5f80516020611c2983398151915254908282018092116117ac575f80516020611c29833981519152919091556001600160a01b0316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020908461178a57805f80516020611c2983398151915254035f80516020611c29833981519152555b604051908152a3565b8484525f80516020611ba9833981519152825260408420818154019055611781565b634e487b7160e01b5f52601160045260245ffd5b6117c8611953565b6117d0611a80565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261182160c082611352565b51902090565b60ff5f80516020611c698339815191525460401c161561184357565b631afcd79f60e31b5f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116118d4579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156118c9575f516001600160a01b038116156118bf57905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b600481101561193f57806118f1575050565b600181036119085763f645eedf60e01b5f5260045ffd5b60028103611923575063fce698f760e01b5f5260045260245ffd5b60031461192d5750565b6335e2f38360e21b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b6040515f80516020611bc983398151915254905f816119718461131a565b9182825260208201946001811690815f14611a6457506001146119f9575b61199b92500382611352565b519081156119a7572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156119d45790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b505f80516020611bc98339815191525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310611a4857505090602061199b9282010161198f565b6020919350806001915483858801015201910190918392611a30565b60ff191686525061199b92151560051b8201602001905061198f565b6040515f80516020611c4983398151915254905f81611a9e8461131a565b9182825260208201946001811690815f14611b6c5750600114611b01575b611ac892500382611352565b51908115611ad4572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156119d45790565b505f80516020611c498339815191525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310611b50575050906020611ac892820101611abc565b6020919350806001915483858801015201910190918392611b38565b60ff1916865250611ac892151560051b82016020019050611abc56fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10252c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace049016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220876fa3b8d0ec6917757682c3a8181195f1246da17e840283e4106a851ed888ff64736f6c634300081a0033","sourceMap":"632:990:160:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;2357:1:25;632:990:160;;:::i;:::-;2303:62:25;;:::i;:::-;2357:1;:::i;:::-;632:990:160;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;;;:::i;:::-;4867:20:27;632:990:160;;:::i;:::-;4867:20:27;;:::i;:::-;:29;632:990:160;;;;;;-1:-1:-1;632:990:160;;;;;-1:-1:-1;632:990:160;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;2301:15:29;;:26;2297:97;;6967:25:66;7021:8;632:990:160;;;;;;;;;;;;972:64:31;632:990:160;;;;;;;;;;;;;;;;2435:78:29;632:990:160;2435:78:29;;632:990:160;1279:95:29;632:990:160;;1279:95:29;632:990:160;1279:95:29;;632:990:160;;;;;;;;;1279:95:29;;632:990:160;1279:95:29;632:990:160;1279:95:29;;632:990:160;;1279:95:29;;632:990:160;;1279:95:29;;632:990:160;;2435:78:29;;;632:990:160;2435:78:29;;:::i;:::-;632:990:160;2425:89:29;;4094:23:33;;:::i;:::-;3515:233:68;632:990:160;3515:233:68;;-1:-1:-1;;;3515:233:68;;;;;;;;;;632:990:160;;;3515:233:68;632:990:160;;3515:233:68;;6967:25:66;:::i;:::-;7021:8;;;;;:::i;:::-;-1:-1:-1;;;;;632:990:160;2638:15:29;;;2634:88;;10117:4:27;;;;;:::i;2634:88:29:-;2676:35;;;;;632:990:160;2676:35:29;632:990:160;;;;;;2676:35:29;2297:97;2350:33;;;;632:990:160;2350:33:29;632:990:160;;;;2350:33:29;632:990:160;;;;;;-1:-1:-1;;632:990:160;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;4301:16:26;632:990:160;;;;4726:16:26;;:34;;;;632:990:160;4805:1:26;4790:16;:50;;;;632:990:160;4855:13:26;:30;;;;632:990:160;4851:91:26;;;-1:-1:-1;;632:990:160;;4805:1:26;632:990:160;-1:-1:-1;;;;;;;;;;;632:990:160;;4979:67:26;;632:990:160;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;632:990:160;;;;;;;;;;;:::i;:::-;821:14;632:990;;-1:-1:-1;;;632:990:160;821:14;;;6893:76:26;;:::i;:::-;;;:::i;:::-;632:990:160;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;2600:7:27;632:990:160;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;2600:7:27;632:990:160;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;6893:76:26;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;6961:1;;;:::i;:::-;632:990:160;;;;;;;:::i;:::-;;;;-1:-1:-1;;;632:990:160;;;;6893:76:26;;:::i;:::-;632:990:160;;;;;;;:::i;:::-;4805:1:26;632:990:160;;-1:-1:-1;;;632:990:160;;;;6893:76:26;;:::i;:::-;632:990:160;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;2600:7:27;632:990:160;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;2600:7:27;632:990:160;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;2806:64:33;632:990:160;;;3902:16:33;632:990:160;-1:-1:-1;;;;;632:990:160;;8803:21:27;8799:91;;941:9:160;8928:5:27;;;:::i;:::-;5066:101:26;;632:990:160;5066:101:26;632:990:160;;-1:-1:-1;;;;;;;;;;;632:990:160;;-1:-1:-1;;;;;;;;;;;632:990:160;5142:14:26;632:990:160;;;4805:1:26;632:990:160;;5142:14:26;632:990:160;8799:91:27;8847:32;;;632:990:160;8847:32:27;632:990:160;;;;;8847:32:27;632:990:160;;;;-1:-1:-1;632:990:160;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;2600:7:27;632:990:160;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;821:14;632:990;;;;;;;;;;;;821:14;632:990;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;-1:-1:-1;632:990:160;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:990:160;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;2600:7:27;632:990:160;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;821:14;632:990;;;;;;;;;;;;821:14;632:990;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;-1:-1:-1;632:990:160;;;;;;;;-1:-1:-1;632:990:160;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;2600:7:27;632:990:160;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;821:14;632:990;;;;;;;;;;;;821:14;632:990;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;-1:-1:-1;632:990:160;;;;;;;;-1:-1:-1;632:990:160;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;2600:7:27;632:990:160;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;821:14;632:990;;;;;;;;;;;;821:14;632:990;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;-1:-1:-1;632:990:160;;;;4979:67:26;-1:-1:-1;;632:990:160;;;-1:-1:-1;;;;;;;;;;;632:990:160;4979:67:26;;;4851:91;6498:23;;;632:990:160;4908:23:26;632:990:160;;4908:23:26;4855:30;4872:13;;;4855:30;;;4790:50;4818:4;4810:25;:30;;-1:-1:-1;4790:50:26;;4726:34;;;-1:-1:-1;4726:34:26;;632:990:160;;;;;;-1:-1:-1;;632:990:160;;;;4616:5:27;632:990:160;;:::i;:::-;;;966:10:30;;4616:5:27;:::i;:::-;632:990:160;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;-1:-1:-1;632:990:160;;;;;;;-1:-1:-1;632:990:160;;-1:-1:-1;632:990:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:990:160;;-1:-1:-1;632:990:160;;;;;;;;-1:-1:-1;;632:990:160;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;-1:-1:-1;;;;;632:990:160;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;2806:64:33;632:990:160;5777:18:33;:43;;;632:990:160;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;5965:13:33;632:990:160;;;;6000:4:33;632:990:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:990:160;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;632:990:160;;;;;;;;;;;;-1:-1:-1;;;632:990:160;;;;;;;5777:43:33;632:990:160;5799:16:33;632:990:160;5799:21:33;5777:43;;632:990:160;;;;;;-1:-1:-1;;632:990:160;;;;;;:::i;:::-;;;;;;;;;972:64:31;632:990:160;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;1479:5:28;632:990:160;;:::i;:::-;;;966:10:30;1448:5:28;966:10:30;;1448:5:28;;:::i;:::-;1479;:::i;632:990:160:-;;;;;;-1:-1:-1;;632:990:160;;;;2303:62:25;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:990:160;;-1:-1:-1;;;;;;632:990:160;;;;;;;-1:-1:-1;;;;;632:990:160;3975:40:25;632:990:160;;3975:40:25;632:990:160;;;;;;;-1:-1:-1;;632:990:160;;;;-1:-1:-1;;;;;632:990:160;;:::i;:::-;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;2303:62:25;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;6431:44:26;;;;632:990:160;6427:105:26;;1427:1:160;632:990;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;6656:20:26;632:990:160;;;1427:1;632:990;;6656:20:26;632:990:160;6431:44:26;632:990:160;1427:1;632:990;;;6450:25:26;;6431:44;;632:990:160;;;;;;-1:-1:-1;;632:990:160;;;;1005:5:28;632:990:160;;966:10:30;1005:5:28;:::i;632:990:160:-;;;;;;-1:-1:-1;;632:990:160;;;;;;:::i;:::-;2303:62:25;;:::i;:::-;-1:-1:-1;;;;;632:990:160;;8803:21:27;8799:91;;8928:5;632:990:160;;;8928:5:27;;:::i;632:990:160:-;;;;;;-1:-1:-1;;632:990:160;;;;;4094:23:33;;:::i;:::-;632:990:160;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;;;;1512:2;632:990;;;;;;;;;-1:-1:-1;;632:990:160;;;;6198:5:27;632:990:160;;:::i;:::-;;;:::i;:::-;;;966:10:30;6162:5:27;966:10:30;;6162:5:27;;:::i;:::-;6198;:::i;632:990:160:-;;;;;;-1:-1:-1;;632:990:160;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;10117:4:27;632:990:160;;:::i;:::-;;;966:10:30;;10117:4:27;:::i;632:990:160:-;;;;;;-1:-1:-1;;632:990:160;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;-1:-1:-1;632:990:160;;;;;;;-1:-1:-1;632:990:160;;-1:-1:-1;632:990:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:990:160;;;;;;;;-1:-1:-1;;632:990:160;;;;:::o;:::-;;;;-1:-1:-1;;;;;632:990:160;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;632:990:160;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;;;632:990:160;;;;;4867:13:27;632:990:160;;;;;;:::o;3405:215:25:-;-1:-1:-1;;;;;632:990:160;3489:22:25;;3485:91;;-1:-1:-1;;;;;;;;;;;632:990:160;;-1:-1:-1;;;;;;632:990:160;;;;;;;-1:-1:-1;;;;;632:990:160;3975:40:25;-1:-1:-1;;3975:40:25;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;632:990:160;;3509:1:25;3534:31;11745:477:27;;;4867:20;;;:::i;:::-;632:990:160;;;;;;;-1:-1:-1;632:990:160;;;;-1:-1:-1;632:990:160;;;;;11910:37:27;;11906:310;;11745:477;;;;;:::o;11906:310::-;11967:24;;;11963:130;;-1:-1:-1;;;;;632:990:160;;11141:19:27;11137:89;;-1:-1:-1;;;;;632:990:160;;11239:21:27;11235:90;;11334:20;;;:::i;:::-;:29;632:990:160;;;;;;-1:-1:-1;632:990:160;;;;-1:-1:-1;632:990:160;;;;;11906:310:27;;;;;;11235:90;11283:31;;;-1:-1:-1;11283:31:27;-1:-1:-1;11283:31:27;632:990:160;;-1:-1:-1;11283:31:27;11137:89;11183:32;;;-1:-1:-1;11183:32:27;-1:-1:-1;11183:32:27;632:990:160;;-1:-1:-1;11183:32:27;11963:130;12018:60;;;;;;-1:-1:-1;12018:60:27;632:990:160;;;;;;12018:60:27;632:990:160;;;;;;-1:-1:-1;12018:60:27;6605:300;-1:-1:-1;;;;;632:990:160;;6688:18:27;;6684:86;;-1:-1:-1;;;;;632:990:160;;6783:16:27;;6779:86;;632:990:160;6704:1:27;632:990:160;-1:-1:-1;;;;;;;;;;;632:990:160;;;6704:1:27;632:990:160;;7609:19:27;;;7605:115;;632:990:160;8358:25:27;632:990:160;;;;6704:1:27;632:990:160;-1:-1:-1;;;;;;;;;;;632:990:160;;;;6704:1:27;632:990:160;;;6704:1:27;632:990:160;-1:-1:-1;;;;;;;;;;;632:990:160;;;6704:1:27;632:990:160;;;;;;;;;;;;8358:25:27;6605:300::o;7605:115::-;7655:50;;;;6704:1;7655:50;;632:990:160;;;;;;6704:1:27;7655:50;6684:86;6729:30;;;6704:1;6729:30;6704:1;6729:30;632:990:160;;6704:1:27;6729:30;2658:162:25;-1:-1:-1;;;;;;;;;;;632:990:160;-1:-1:-1;;;;;632:990:160;966:10:30;2717:23:25;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:25;966:10:30;2763:40:25;632:990:160;;-1:-1:-1;2763:40:25;9259:206:27;;;;-1:-1:-1;;;;;632:990:160;9329:21:27;;9325:89;;632:990:160;9348:1:27;632:990:160;-1:-1:-1;;;;;;;;;;;632:990:160;;;9348:1:27;632:990:160;;7609:19:27;;;7605:115;;632:990:160;;9348:1:27;632:990:160;;8358:25:27;632:990:160;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;8358:25:27;9259:206::o;7605:115::-;7655:50;;;;;9348:1;7655:50;;632:990:160;;;;;;9348:1:27;7655:50;10976:487;;-1:-1:-1;;;;;632:990:160;;;11141:19:27;;11137:89;;-1:-1:-1;;;;;632:990:160;;11239:21:27;;11235:90;;11415:31;11334:20;;632:990:160;11334:20:27;;:::i;:::-;632:990:160;-1:-1:-1;632:990:160;;;;;-1:-1:-1;632:990:160;;;;;;;11415:31:27;10976:487::o;7220:1170::-;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;-1:-1:-1;;;;;632:990:160;;;;8358:25:27;;632:990:160;;7918:16:27;632:990:160;;;-1:-1:-1;;;;;;;;;;;632:990:160;;-1:-1:-1;;;;;;;;;;;632:990:160;7914:429:27;632:990:160;;;;;8358:25:27;7220:1170::o;7914:429::-;632:990:160;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;;7914:429:27;;632:990:160;;;;;941:9;;;;;632:990;941:9;4130:191:33;4243:17;;:::i;:::-;4262:20;;:::i;:::-;632:990:160;;4221:92:33;;;;632:990:160;2073:95:33;632:990:160;;;2073:95:33;;632:990:160;2073:95:33;;;632:990:160;4284:13:33;2073:95;;;632:990:160;4307:4:33;2073:95;;;632:990:160;2073:95:33;4221:92;;;;;;:::i;:::-;632:990:160;4211:103:33;;4130:191;:::o;7084:141:26:-;632:990:160;-1:-1:-1;;;;;;;;;;;632:990:160;;;;7150:18:26;7146:73;;7084:141::o;7146:73::-;7191:17;;;-1:-1:-1;7191:17:26;;-1:-1:-1;7191:17:26;5140:1530:66;;;6199:66;6186:79;;6182:164;;632:990:160;;;;;;-1:-1:-1;632:990:160;;;;;;;;;;;;;;;;;;;6457:24:66;;;;;;;;;-1:-1:-1;6457:24:66;-1:-1:-1;;;;;632:990:160;;6495:20:66;6491:113;;6614:49;-1:-1:-1;6614:49:66;-1:-1:-1;5140:1530:66;:::o;6491:113::-;6531:62;-1:-1:-1;6531:62:66;6457:24;6531:62;-1:-1:-1;6531:62:66;:::o;6457:24::-;632:990:160;;;-1:-1:-1;632:990:160;;;;;6182:164:66;6281:54;;;6297:1;6281:54;6301:30;6281:54;;:::o;7196:532::-;632:990:160;;;;;;7282:29:66;;;7327:7;;:::o;7278:444::-;632:990:160;7378:38:66;;632:990:160;;7439:23:66;;;7291:20;7439:23;632:990:160;7291:20:66;7439:23;7374:348;7492:35;7483:44;;7492:35;;7550:46;;;;7291:20;7550:46;632:990:160;;;7291:20:66;7550:46;7479:243;7626:30;7617:39;7613:109;;7479:243;7196:532::o;7613:109::-;7679:32;;;7291:20;7679:32;632:990:160;;;7291:20:66;7679:32;632:990:160;;;;7291:20:66;632:990:160;;;;;7291:20:66;632:990:160;7058:687:33;632:990:160;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;7230:22:33;;;;7275;7268:29;:::o;7226:513::-;-1:-1:-1;;2806:64:33;632:990:160;7603:15:33;;;;7638:17;:::o;7599:130::-;7694:20;7701:13;7694:20;:::o;632:990:160:-;-1:-1:-1;;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;-1:-1:-1;632:990:160;;;;;;;;;;;-1:-1:-1;632:990:160;;7966:723:33;632:990:160;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;8147:25:33;;;;8195;8188:32;:::o;8143:540::-;-1:-1:-1;;8507:16:33;632:990:160;8541:18:33;;;;8579:20;:::o;632:990:160:-;-1:-1:-1;;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;-1:-1:-1;632:990:160;;;;;;;;;;;-1:-1:-1;632:990:160;","linkReferences":{}},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(uint256)":"42966c68","burnFrom(address,uint256)":"79cc6790","decimals()":"313ce567","eip712Domain()":"84b0196e","initialize(address)":"c4d66de8","mint(address,uint256)":"40c10f19","name()":"06fdde03","nonces(address)":"7ecebe00","owner()":"8da5cb5b","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","reinitialize()":"6c2eb350","renounceOwnership()":"715018a6","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOwnership(address)":"f2fde38b"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"ERC2612ExpiredSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC2612InvalidSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"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\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC2612ExpiredSignature(uint256)\":[{\"details\":\"Permit deadline has expired.\"}],\"ERC2612InvalidSigner(address,address)\":[{\"details\":\"Mismatched signature.\"}],\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"burn(uint256)\":{\"details\":\"Destroys a `value` amount of tokens from the caller. See {ERC20-_burn}.\"},\"burnFrom(address,uint256)\":{\"details\":\"Destroys a `value` amount of tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `value`.\"},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/WrappedVara.sol\":\"WrappedVara\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":symbiotic-core/=lib/symbiotic-core/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x5a5f22721ffb66d3e1ecc568c0d37c91f91223d8663c8a5e78396e780b849c72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bdd108133c98ea251513424bf17905090c8a7e0755562a6d12a81b8bccbd6152\",\"dweb:/ipfs/QmahpnB63Up9aVx4jDqxEgry5BRN5itHRvy9rwBvMT2yqL\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"keccak256\":\"0xe74dd150d031e8ecf9755893a2aae02dec954158140424f11c28ff689a48492f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://554e0934aecff6725e10d4aeb2e70ff214384b68782b1ba9f9322a0d16105a2f\",\"dweb:/ipfs/QmVvmHc7xPftEkWvJRNAqv7mXihKLEAVXpiebG7RT5rhMW\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol\":{\"keccak256\":\"0x6ff1ff6f25ebee2f778775b26d81610a04e37993bc06a7f54e0c768330ef1506\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f1fa246b88750fe26a30495db812eb2788dba8e5191a11f9dedb37bd6f4d883\",\"dweb:/ipfs/QmZUcDXW1a9xEAfQwqUG6NXQ6AwCs5gfv89NkwzTCeDify\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/NoncesUpgradeable.sol\":{\"keccak256\":\"0x778f4a1546a1c6c726ecc8e2348a2789690fb8f26e12bd9d89537669167b79a4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://851d3dfe724e918ff0a064b206e1ef46b27ab0df2aa2c8af976973a22ef59827\",\"dweb:/ipfs/Qmd4wb7zX8ueYhMVBy5PJjfsANK3Ra3pKPN7qQkNsdwGHn\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/EIP712Upgradeable.sol\":{\"keccak256\":\"0x06d93977f6018359ef432d3b649b7c92efb0326d3ddbbeaf08648105bdcacbbf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c8574fdb7ffb0e8e9841ba6394432d3e31b496a0953baa6f64837062fb29b02e\",\"dweb:/ipfs/QmdjZNdnBUVzzWXMYXsFmHdvh2KL5Lnc1uBfvbuqPNU9X3\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x9cac1f97ecc92043dd19235d6677e40cf6bac382886a94f7a80a957846b24229\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1e0c924e0edfdfd4abceeb552d99f1cd95c0d387b38ccb1f67c583607e3d155\",\"dweb:/ipfs/QmZAi6qKa66zuS3jyEhsQR9bBNnZe1wSognYqw9nvseyUz\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323\",\"dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0xe9d36d0c892aea68546d53f21e02223f7f542295c10110a0764336f9ffeab6d1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://34d4d72a89193f4d5223763e6d871443fb32a22d6024566843f4ee42eed68bdd\",\"dweb:/ipfs/Qmbsc6kJJNhrkNXP7g7KeqzRETQEvzSXg3ZmJmVLhaEahB\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3\",\"dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6\",\"dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087\",\"dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8\",\"dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da\",\"dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047\",\"dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615\",\"dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5\"]},\"src/WrappedVara.sol\":{\"keccak256\":\"0x3e0983635bf88ee5284c4385c01431135b7eec294e2f1c0d22bc2dddc16790dd\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://0302725cd5b1bd6afacebd0d30d445bb1c86152745b6de42dc1a66a570b42718\",\"dweb:/ipfs/QmVCurygXE5PV65uvC12ybtXYpL292PMmEUPnbRtGbAY1V\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"ECDSAInvalidSignature"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"ECDSAInvalidSignatureLength"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"type":"error","name":"ECDSAInvalidSignatureS"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientAllowance"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientBalance"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC20InvalidApprover"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC20InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC20InvalidSender"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"type":"error","name":"ERC20InvalidSpender"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"type":"error","name":"ERC2612ExpiredSignature"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC2612InvalidSigner"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"type":"error","name":"InvalidAccountNonce"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"spender","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Approval","anonymous":false},{"inputs":[],"type":"event","name":"EIP712DomainChanged","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","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":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"stateMutability":"view","type":"function","name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burn"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burnFrom"},{"inputs":[],"stateMutability":"pure","type":"function","name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}]},{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"mint"},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function","name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"permit"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"reinitialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"}],"devdoc":{"kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"burn(uint256)":{"details":"Destroys a `value` amount of tokens from the caller. See {ERC20-_burn}."},"burnFrom(address,uint256)":{"details":"Destroys a `value` amount of tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `value`."},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"eip712Domain()":{"details":"See {IERC-5267}."},"name()":{"details":"Returns the name of the token."},"nonces(address)":{"details":"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times."},"owner()":{"details":"Returns the address of the current owner."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","symbiotic-core/=lib/symbiotic-core/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/WrappedVara.sol":"WrappedVara"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0x5a5f22721ffb66d3e1ecc568c0d37c91f91223d8663c8a5e78396e780b849c72","urls":["bzz-raw://bdd108133c98ea251513424bf17905090c8a7e0755562a6d12a81b8bccbd6152","dweb:/ipfs/QmahpnB63Up9aVx4jDqxEgry5BRN5itHRvy9rwBvMT2yqL"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol":{"keccak256":"0xe74dd150d031e8ecf9755893a2aae02dec954158140424f11c28ff689a48492f","urls":["bzz-raw://554e0934aecff6725e10d4aeb2e70ff214384b68782b1ba9f9322a0d16105a2f","dweb:/ipfs/QmVvmHc7xPftEkWvJRNAqv7mXihKLEAVXpiebG7RT5rhMW"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol":{"keccak256":"0x6ff1ff6f25ebee2f778775b26d81610a04e37993bc06a7f54e0c768330ef1506","urls":["bzz-raw://6f1fa246b88750fe26a30495db812eb2788dba8e5191a11f9dedb37bd6f4d883","dweb:/ipfs/QmZUcDXW1a9xEAfQwqUG6NXQ6AwCs5gfv89NkwzTCeDify"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/NoncesUpgradeable.sol":{"keccak256":"0x778f4a1546a1c6c726ecc8e2348a2789690fb8f26e12bd9d89537669167b79a4","urls":["bzz-raw://851d3dfe724e918ff0a064b206e1ef46b27ab0df2aa2c8af976973a22ef59827","dweb:/ipfs/Qmd4wb7zX8ueYhMVBy5PJjfsANK3Ra3pKPN7qQkNsdwGHn"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/EIP712Upgradeable.sol":{"keccak256":"0x06d93977f6018359ef432d3b649b7c92efb0326d3ddbbeaf08648105bdcacbbf","urls":["bzz-raw://c8574fdb7ffb0e8e9841ba6394432d3e31b496a0953baa6f64837062fb29b02e","dweb:/ipfs/QmdjZNdnBUVzzWXMYXsFmHdvh2KL5Lnc1uBfvbuqPNU9X3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol":{"keccak256":"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92","urls":["bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a","dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x9cac1f97ecc92043dd19235d6677e40cf6bac382886a94f7a80a957846b24229","urls":["bzz-raw://a1e0c924e0edfdfd4abceeb552d99f1cd95c0d387b38ccb1f67c583607e3d155","dweb:/ipfs/QmZAi6qKa66zuS3jyEhsQR9bBNnZe1wSognYqw9nvseyUz"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28","urls":["bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323","dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0xe9d36d0c892aea68546d53f21e02223f7f542295c10110a0764336f9ffeab6d1","urls":["bzz-raw://34d4d72a89193f4d5223763e6d871443fb32a22d6024566843f4ee42eed68bdd","dweb:/ipfs/Qmbsc6kJJNhrkNXP7g7KeqzRETQEvzSXg3ZmJmVLhaEahB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a","urls":["bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3","dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b","urls":["bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6","dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb","urls":["bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087","dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38","urls":["bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8","dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee","urls":["bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da","dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e","urls":["bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047","dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44","urls":["bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615","dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5"],"license":"MIT"},"src/WrappedVara.sol":{"keccak256":"0x3e0983635bf88ee5284c4385c01431135b7eec294e2f1c0d22bc2dddc16790dd","urls":["bzz-raw://0302725cd5b1bd6afacebd0d30d445bb1c86152745b6de42dc1a66a570b42718","dweb:/ipfs/QmVCurygXE5PV65uvC12ybtXYpL292PMmEUPnbRtGbAY1V"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/WrappedVara.sol","id":76935,"exportedSymbols":{"ERC20BurnableUpgradeable":[40320],"ERC20PermitUpgradeable":[40489],"ERC20Upgradeable":[40258],"Initializable":[39641],"OwnableUpgradeable":[39387],"WrappedVara":[76934]},"nodeType":"SourceUnit","src":"39:1584:160","nodes":[{"id":76829,"nodeType":"PragmaDirective","src":"39:24:160","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":76831,"nodeType":"ImportDirective","src":"65:96:160","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":76935,"sourceUnit":39642,"symbolAliases":[{"foreign":{"id":76830,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39641,"src":"73:13:160","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":76833,"nodeType":"ImportDirective","src":"162:102:160","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol","nameLocation":"-1:-1:-1","scope":76935,"sourceUnit":40259,"symbolAliases":[{"foreign":{"id":76832,"name":"ERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40258,"src":"170:16:160","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":76835,"nodeType":"ImportDirective","src":"265:133:160","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":76935,"sourceUnit":40321,"symbolAliases":[{"foreign":{"id":76834,"name":"ERC20BurnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40320,"src":"273:24:160","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":76837,"nodeType":"ImportDirective","src":"399:101:160","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":76935,"sourceUnit":39388,"symbolAliases":[{"foreign":{"id":76836,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39387,"src":"407:18:160","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":76839,"nodeType":"ImportDirective","src":"501:129:160","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20PermitUpgradeable.sol","nameLocation":"-1:-1:-1","scope":76935,"sourceUnit":40490,"symbolAliases":[{"foreign":{"id":76838,"name":"ERC20PermitUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40489,"src":"509:22:160","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":76934,"nodeType":"ContractDefinition","src":"632:990:160","nodes":[{"id":76852,"nodeType":"VariableDeclaration","src":"784:51:160","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_NAME","nameLocation":"808:10:160","scope":76934,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":76850,"name":"string","nodeType":"ElementaryTypeName","src":"784:6:160","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"577261707065642056617261","id":76851,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"821:14:160","typeDescriptions":{"typeIdentifier":"t_stringliteral_985e2e9885ca23de2896caee5fad5adf116e2558361aa44c502ff8b2c1b2a41b","typeString":"literal_string \"Wrapped Vara\""},"value":"Wrapped Vara"},"visibility":"private"},{"id":76855,"nodeType":"VariableDeclaration","src":"841:46:160","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_SYMBOL","nameLocation":"865:12:160","scope":76934,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":76853,"name":"string","nodeType":"ElementaryTypeName","src":"841:6:160","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"5756415241","id":76854,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"880:7:160","typeDescriptions":{"typeIdentifier":"t_stringliteral_203a7c23d1b412674989fae6808de72f52c6953d49ac548796ba3c05451693a4","typeString":"literal_string \"WVARA\""},"value":"WVARA"},"visibility":"private"},{"id":76858,"nodeType":"VariableDeclaration","src":"893:57:160","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_INITIAL_SUPPLY","nameLocation":"918:20:160","scope":76934,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76856,"name":"uint256","nodeType":"ElementaryTypeName","src":"893:7:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"315f3030305f303030","id":76857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"941:9:160","typeDescriptions":{"typeIdentifier":"t_rational_1000000_by_1","typeString":"int_const 1000000"},"value":"1_000_000"},"visibility":"private"},{"id":76866,"nodeType":"FunctionDefinition","src":"1010:53:160","nodes":[],"body":{"id":76865,"nodeType":"Block","src":"1024:39:160","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":76862,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39609,"src":"1034:20:160","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":76863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1034:22:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76864,"nodeType":"ExpressionStatement","src":"1034:22:160"}]},"documentation":{"id":76859,"nodeType":"StructuredDocumentation","src":"957:48:160","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":76860,"nodeType":"ParameterList","parameters":[],"src":"1021:2:160"},"returnParameters":{"id":76861,"nodeType":"ParameterList","parameters":[],"src":"1024:0:160"},"scope":76934,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":76900,"nodeType":"FunctionDefinition","src":"1069:297:160","nodes":[],"body":{"id":76899,"nodeType":"Block","src":"1130:236:160","nodes":[],"statements":[{"expression":{"arguments":[{"id":76874,"name":"TOKEN_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76852,"src":"1153:10:160","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":76875,"name":"TOKEN_SYMBOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76855,"src":"1165:12:160","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":76873,"name":"__ERC20_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39709,"src":"1140:12:160","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":76876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1140:38:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76877,"nodeType":"ExpressionStatement","src":"1140:38:160"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":76878,"name":"__ERC20Burnable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40279,"src":"1188:20:160","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":76879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1188:22:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76880,"nodeType":"ExpressionStatement","src":"1188:22:160"},{"expression":{"arguments":[{"id":76882,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76868,"src":"1235:12:160","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":76881,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39247,"src":"1220:14:160","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":76883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1220:28:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76884,"nodeType":"ExpressionStatement","src":"1220:28:160"},{"expression":{"arguments":[{"id":76886,"name":"TOKEN_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76852,"src":"1277:10:160","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":76885,"name":"__ERC20Permit_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40376,"src":"1258:18:160","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":76887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1258:30:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76888,"nodeType":"ExpressionStatement","src":"1258:30:160"},{"expression":{"arguments":[{"id":76890,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76868,"src":"1305:12:160","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76891,"name":"TOKEN_INITIAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76858,"src":"1319:20:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":76892,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1342:2:160","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":76893,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[76918],"referencedDeclaration":76918,"src":"1348:8:160","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_uint8_$","typeString":"function () pure returns (uint8)"}},"id":76894,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1348:10:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"1342:16:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1319:39:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":76889,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40090,"src":"1299:5:160","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":76897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1299:60:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76898,"nodeType":"ExpressionStatement","src":"1299:60:160"}]},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":76871,"kind":"modifierInvocation","modifierName":{"id":76870,"name":"initializer","nameLocations":["1118:11:160"],"nodeType":"IdentifierPath","referencedDeclaration":39495,"src":"1118:11:160"},"nodeType":"ModifierInvocation","src":"1118:11:160"}],"name":"initialize","nameLocation":"1078:10:160","parameters":{"id":76869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76868,"mutability":"mutable","name":"initialOwner","nameLocation":"1097:12:160","nodeType":"VariableDeclaration","scope":76900,"src":"1089:20:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76867,"name":"address","nodeType":"ElementaryTypeName","src":"1089:7:160","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1088:22:160"},"returnParameters":{"id":76872,"nodeType":"ParameterList","parameters":[],"src":"1130:0:160"},"scope":76934,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":76909,"nodeType":"FunctionDefinition","src":"1372:60:160","nodes":[],"body":{"id":76908,"nodeType":"Block","src":"1430:2:160","nodes":[],"statements":[]},"functionSelector":"6c2eb350","implemented":true,"kind":"function","modifiers":[{"id":76903,"kind":"modifierInvocation","modifierName":{"id":76902,"name":"onlyOwner","nameLocations":["1403:9:160"],"nodeType":"IdentifierPath","referencedDeclaration":39282,"src":"1403:9:160"},"nodeType":"ModifierInvocation","src":"1403:9:160"},{"arguments":[{"hexValue":"32","id":76905,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1427:1:160","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"id":76906,"kind":"modifierInvocation","modifierName":{"id":76904,"name":"reinitializer","nameLocations":["1413:13:160"],"nodeType":"IdentifierPath","referencedDeclaration":39542,"src":"1413:13:160"},"nodeType":"ModifierInvocation","src":"1413:16:160"}],"name":"reinitialize","nameLocation":"1381:12:160","parameters":{"id":76901,"nodeType":"ParameterList","parameters":[],"src":"1393:2:160"},"returnParameters":{"id":76907,"nodeType":"ParameterList","parameters":[],"src":"1430:0:160"},"scope":76934,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":76918,"nodeType":"FunctionDefinition","src":"1438:83:160","nodes":[],"body":{"id":76917,"nodeType":"Block","src":"1495:26:160","nodes":[],"statements":[{"expression":{"hexValue":"3132","id":76915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1512:2:160","typeDescriptions":{"typeIdentifier":"t_rational_12_by_1","typeString":"int_const 12"},"value":"12"},"functionReturnParameters":76914,"id":76916,"nodeType":"Return","src":"1505:9:160"}]},"baseFunctions":[39778],"functionSelector":"313ce567","implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"1447:8:160","overrides":{"id":76911,"nodeType":"OverrideSpecifier","overrides":[],"src":"1470:8:160"},"parameters":{"id":76910,"nodeType":"ParameterList","parameters":[],"src":"1455:2:160"},"returnParameters":{"id":76914,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76913,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76918,"src":"1488:5:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":76912,"name":"uint8","nodeType":"ElementaryTypeName","src":"1488:5:160","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1487:7:160"},"scope":76934,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":76933,"nodeType":"FunctionDefinition","src":"1527:93:160","nodes":[],"body":{"id":76932,"nodeType":"Block","src":"1586:34:160","nodes":[],"statements":[{"expression":{"arguments":[{"id":76928,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76920,"src":"1602:2:160","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":76929,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76922,"src":"1606:6:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":76927,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40090,"src":"1596:5:160","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":76930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1596:17:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76931,"nodeType":"ExpressionStatement","src":"1596:17:160"}]},"functionSelector":"40c10f19","implemented":true,"kind":"function","modifiers":[{"id":76925,"kind":"modifierInvocation","modifierName":{"id":76924,"name":"onlyOwner","nameLocations":["1576:9:160"],"nodeType":"IdentifierPath","referencedDeclaration":39282,"src":"1576:9:160"},"nodeType":"ModifierInvocation","src":"1576:9:160"}],"name":"mint","nameLocation":"1536:4:160","parameters":{"id":76923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76920,"mutability":"mutable","name":"to","nameLocation":"1549:2:160","nodeType":"VariableDeclaration","scope":76933,"src":"1541:10:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76919,"name":"address","nodeType":"ElementaryTypeName","src":"1541:7:160","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":76922,"mutability":"mutable","name":"amount","nameLocation":"1561:6:160","nodeType":"VariableDeclaration","scope":76933,"src":"1553:14:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76921,"name":"uint256","nodeType":"ElementaryTypeName","src":"1553:7:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1540:28:160"},"returnParameters":{"id":76926,"nodeType":"ParameterList","parameters":[],"src":"1586:0:160"},"scope":76934,"stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":76840,"name":"Initializable","nameLocations":["660:13:160"],"nodeType":"IdentifierPath","referencedDeclaration":39641,"src":"660:13:160"},"id":76841,"nodeType":"InheritanceSpecifier","src":"660:13:160"},{"baseName":{"id":76842,"name":"ERC20Upgradeable","nameLocations":["679:16:160"],"nodeType":"IdentifierPath","referencedDeclaration":40258,"src":"679:16:160"},"id":76843,"nodeType":"InheritanceSpecifier","src":"679:16:160"},{"baseName":{"id":76844,"name":"ERC20BurnableUpgradeable","nameLocations":["701:24:160"],"nodeType":"IdentifierPath","referencedDeclaration":40320,"src":"701:24:160"},"id":76845,"nodeType":"InheritanceSpecifier","src":"701:24:160"},{"baseName":{"id":76846,"name":"OwnableUpgradeable","nameLocations":["731:18:160"],"nodeType":"IdentifierPath","referencedDeclaration":39387,"src":"731:18:160"},"id":76847,"nodeType":"InheritanceSpecifier","src":"731:18:160"},{"baseName":{"id":76848,"name":"ERC20PermitUpgradeable","nameLocations":["755:22:160"],"nodeType":"IdentifierPath","referencedDeclaration":40489,"src":"755:22:160"},"id":76849,"nodeType":"InheritanceSpecifier","src":"755:22:160"}],"canonicalName":"WrappedVara","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[76934,40489,40646,41119,41540,43202,39387,40320,40258,41582,43166,43140,40535,39641],"name":"WrappedVara","nameLocation":"641:11:160","scope":76935,"usedErrors":[39223,39228,39404,39407,40355,40362,40549,41552,41557,41562,41571,41576,41581,44912,44917,44922],"usedEvents":[39234,39412,41520,43074,43083]}],"license":"UNLICENSED"},"id":160} \ No newline at end of file From 5f2b0d92538aed5a4429584212a03eb41141d653 Mon Sep 17 00:00:00 2001 From: Dmitry Novikov Date: Tue, 19 Nov 2024 20:00:21 +0400 Subject: [PATCH 28/43] patch 'ethexe-common' --- ethexe/common/src/db.rs | 3 +- ethexe/common/src/{ => events}/mirror.rs | 2 - ethexe/common/src/events/mod.rs | 97 +++++++++++++ ethexe/common/src/events/router.rs | 90 ++++++++++++ ethexe/common/src/{ => events}/wvara.rs | 2 - ethexe/common/src/gear.rs | 127 +++++++++++++++++ ethexe/common/src/lib.rs | 65 +-------- ethexe/common/src/router.rs | 168 ----------------------- ethexe/ethereum/src/router/events.rs | 15 +- 9 files changed, 324 insertions(+), 245 deletions(-) rename ethexe/common/src/{ => events}/mirror.rs (99%) create mode 100644 ethexe/common/src/events/mod.rs create mode 100644 ethexe/common/src/events/router.rs rename ethexe/common/src/{ => events}/wvara.rs (98%) create mode 100644 ethexe/common/src/gear.rs delete mode 100644 ethexe/common/src/router.rs diff --git a/ethexe/common/src/db.rs b/ethexe/common/src/db.rs index 3d1c2c2e95e..19e68662b7c 100644 --- a/ethexe/common/src/db.rs +++ b/ethexe/common/src/db.rs @@ -18,7 +18,7 @@ //! ethexe common db types and traits. -use crate::{router::StateTransition, BlockRequestEvent}; +use crate::{events::BlockRequestEvent, gear::StateTransition}; use alloc::{ collections::{BTreeMap, BTreeSet, VecDeque}, vec::Vec, @@ -70,6 +70,7 @@ pub struct CodeUploadInfo { pub type Schedule = BTreeMap>; +// TODO (breathx): WITHIN THE BLOCK pub trait BlockMetaStorage: Send + Sync { fn block_header(&self, block_hash: H256) -> Option; fn set_block_header(&self, block_hash: H256, header: BlockHeader); diff --git a/ethexe/common/src/mirror.rs b/ethexe/common/src/events/mirror.rs similarity index 99% rename from ethexe/common/src/mirror.rs rename to ethexe/common/src/events/mirror.rs index 0b1f60f0b0b..eb9156d630e 100644 --- a/ethexe/common/src/mirror.rs +++ b/ethexe/common/src/events/mirror.rs @@ -22,8 +22,6 @@ use gprimitives::{ActorId, MessageId, H256}; use parity_scale_codec::{Decode, Encode}; use serde::{Deserialize, Serialize}; -/* Events section */ - #[derive(Clone, Debug, Encode, Decode)] pub enum Event { ExecutableBalanceTopUpRequested { diff --git a/ethexe/common/src/events/mod.rs b/ethexe/common/src/events/mod.rs new file mode 100644 index 00000000000..3aa08991998 --- /dev/null +++ b/ethexe/common/src/events/mod.rs @@ -0,0 +1,97 @@ +// This file is part of Gear. +// +// Copyright (C) 2024 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use gprimitives::ActorId; +use parity_scale_codec::{Decode, Encode}; +use serde::{Deserialize, Serialize}; + +mod mirror; +mod router; +mod wvara; + +pub use mirror::{Event as MirrorEvent, RequestEvent as MirrorRequestEvent}; +pub use router::{Event as RouterEvent, RequestEvent as RouterRequestEvent}; +pub use wvara::{Event as WVaraEvent, RequestEvent as WVaraRequestEvent}; + +#[derive(Clone, Debug, Encode, Decode)] +pub enum BlockEvent { + Mirror { + address: ActorId, + event: MirrorEvent, + }, + Router(RouterEvent), + WVara(WVaraEvent), +} + +impl BlockEvent { + pub fn mirror(address: ActorId, event: MirrorEvent) -> Self { + Self::Mirror { address, event } + } +} + +impl From<(ActorId, MirrorEvent)> for BlockEvent { + fn from((address, event): (ActorId, MirrorEvent)) -> Self { + Self::mirror(address, event) + } +} + +impl From for BlockEvent { + fn from(value: RouterEvent) -> Self { + Self::Router(value) + } +} + +impl From for BlockEvent { + fn from(value: WVaraEvent) -> Self { + Self::WVara(value) + } +} + +#[derive(Clone, Debug, Encode, Decode, Serialize, Deserialize)] +pub enum BlockRequestEvent { + Router(RouterRequestEvent), + Mirror { + address: ActorId, + event: MirrorRequestEvent, + }, + WVara(WVaraRequestEvent), +} + +impl BlockRequestEvent { + pub fn mirror(address: ActorId, event: MirrorRequestEvent) -> Self { + Self::Mirror { address, event } + } +} + +impl From<(ActorId, MirrorRequestEvent)> for BlockRequestEvent { + fn from((address, event): (ActorId, MirrorRequestEvent)) -> Self { + Self::mirror(address, event) + } +} + +impl From for BlockRequestEvent { + fn from(value: RouterRequestEvent) -> Self { + Self::Router(value) + } +} + +impl From for BlockRequestEvent { + fn from(value: WVaraRequestEvent) -> Self { + Self::WVara(value) + } +} diff --git a/ethexe/common/src/events/router.rs b/ethexe/common/src/events/router.rs new file mode 100644 index 00000000000..e2db0bdc117 --- /dev/null +++ b/ethexe/common/src/events/router.rs @@ -0,0 +1,90 @@ +// This file is part of Gear. +// +// Copyright (C) 2024 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use gprimitives::{ActorId, CodeId, H256}; +use parity_scale_codec::{Decode, Encode}; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq)] +pub enum Event { + BlockCommitted { + hash: H256, + }, + CodeGotValidated { + id: CodeId, + valid: bool, + }, + CodeValidationRequested { + id: CodeId, + /// This field is replaced with tx hash in case of zero. + blob_tx_hash: H256, + }, + ComputationSettingsChanged { + threshold: u64, + wvara_per_second: u128, + }, + ProgramCreated { + actor: ActorId, + code_id: CodeId, + }, + StorageSlotChanged, + ValidatorsChanged, +} + +impl Event { + pub fn as_request(self) -> Option { + Some(match self { + Self::CodeValidationRequested { id, blob_tx_hash } => { + RequestEvent::CodeValidationRequested { id, blob_tx_hash } + } + Self::ComputationSettingsChanged { + threshold, + wvara_per_second, + } => RequestEvent::ComputationSettingsChanged { + threshold, + wvara_per_second, + }, + Self::ProgramCreated { actor, code_id } => { + RequestEvent::ProgramCreated { actor, code_id } + } + Self::StorageSlotChanged => RequestEvent::StorageSlotChanged, + Self::ValidatorsChanged => RequestEvent::ValidatorsChanged, + Self::BlockCommitted { .. } | Self::CodeGotValidated { .. } => return None, + }) + } +} + +#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq, Serialize, Deserialize)] +pub enum RequestEvent { + CodeValidationRequested { + id: CodeId, + // TODO (breathx): replace with `code: Vec` + /// This field is replaced with tx hash in case of zero. + blob_tx_hash: H256, + }, + ComputationSettingsChanged { + threshold: u64, + wvara_per_second: u128, + }, + ProgramCreated { + actor: ActorId, + code_id: CodeId, + }, + StorageSlotChanged, + ValidatorsChanged, +} diff --git a/ethexe/common/src/wvara.rs b/ethexe/common/src/events/wvara.rs similarity index 98% rename from ethexe/common/src/wvara.rs rename to ethexe/common/src/events/wvara.rs index 2f6881e78fd..3286b66b051 100644 --- a/ethexe/common/src/wvara.rs +++ b/ethexe/common/src/events/wvara.rs @@ -20,8 +20,6 @@ use gprimitives::{ActorId, U256}; use parity_scale_codec::{Decode, Encode}; use serde::{Deserialize, Serialize}; -/* Events section */ - #[derive(Clone, Debug, Encode, Decode)] pub enum Event { Transfer { diff --git a/ethexe/common/src/gear.rs b/ethexe/common/src/gear.rs new file mode 100644 index 00000000000..e6fb1d25be4 --- /dev/null +++ b/ethexe/common/src/gear.rs @@ -0,0 +1,127 @@ +// This file is part of Gear. +// +// Copyright (C) 2024 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! This is supposed to be an exact copy of Gear.sol library. + +use alloc::vec::Vec; +use gear_core::message::{ReplyDetails, StoredMessage}; +use gprimitives::{ActorId, CodeId, MessageId, H256, U256}; +use parity_scale_codec::{Decode, Encode}; + +// TODO: support query from router. +pub const COMPUTATION_THRESHOLD: u64 = 2_500_000_000; +pub const SIGNING_THRESHOLD_PERCENTAGE: u16 = 6666; +pub const WVARA_PER_SECOND: u128 = 10_000_000_000_000; + +#[derive(Clone, Debug, Default, Encode, Decode, PartialEq, Eq)] +pub struct AddressBook { + pub mirror: ActorId, + pub mirror_proxy: ActorId, + pub wrapped_vara: ActorId, +} + +#[derive(Clone, Debug, Default, Encode, Decode, PartialEq, Eq)] +pub struct BlockCommitment { + pub hash: H256, + /// represented as u48 in router contract. + pub timestamp: u64, + pub previous_committed_block: H256, + pub predecessor_block: H256, + pub transitions: Vec, +} + +#[derive(Clone, Debug, Default, Encode, Decode, PartialEq, Eq)] +pub struct CodeCommitment { + pub id: CodeId, + pub valid: bool, +} + +#[derive(Clone, Debug, Default, Encode, Decode, PartialEq, Eq)] +pub enum CodeState { + #[default] + Unknown, + ValidationRequested, + Validated, +} + +#[derive(Clone, Debug, Default, Encode, Decode, PartialEq, Eq)] +pub struct CommittedBlockInfo { + pub hash: H256, + /// represented as u48 in router contract. + pub timestamp: u64, +} + +#[derive(Clone, Debug, Default, Encode, Decode, PartialEq, Eq)] +pub struct ComputationSettings { + pub threshold: u64, + pub wvara_per_second: u128, +} + +#[derive(Clone, Debug, Default, Encode, Decode, PartialEq, Eq)] +pub struct Message { + pub id: MessageId, + pub destination: ActorId, + pub payload: Vec, + pub value: u128, + pub reply_details: Option, +} + +impl From for Message { + fn from(value: StoredMessage) -> Self { + let (id, _source, destination, payload, value, details) = value.into_parts(); + Self { + id, + destination, + payload: payload.into_vec(), + value, + reply_details: details.and_then(|v| v.to_reply_details()), + } + } +} + +#[derive(Clone, Debug, Default, Encode, Decode, PartialEq, Eq)] +pub struct ProtocolData { + // flatten mapping of codes CodeId => CodeState + // flatten mapping of program to codes ActorId => CodeId + pub programs_count: U256, + pub validated_codes_count: U256, +} + +#[derive(Clone, Debug, Default, Encode, Decode, PartialEq, Eq)] +pub struct StateTransition { + pub actor_id: ActorId, + pub new_state_hash: H256, + pub inheritor: ActorId, + pub value_to_receive: u128, + pub value_claims: Vec, + pub messages: Vec, +} + +#[derive(Clone, Debug, Default, Encode, Decode, PartialEq, Eq)] +pub struct ValidationSettings { + pub signing_threshold_percentage: u16, + // flatten mapping of validators ActorId => bool + pub validators_keys: Vec, +} + +#[derive(Clone, Debug, Default, Encode, Decode, PartialEq, Eq)] +pub struct ValueClaim { + pub message_id: MessageId, + pub destination: ActorId, + pub value: u128, +} diff --git a/ethexe/common/src/lib.rs b/ethexe/common/src/lib.rs index 01a8689b3a2..c70780b10cf 100644 --- a/ethexe/common/src/lib.rs +++ b/ethexe/common/src/lib.rs @@ -23,73 +23,12 @@ extern crate alloc; pub mod db; -pub mod mirror; -pub mod router; -pub mod wvara; +pub mod events; +pub mod gear; pub use gear_core; pub use gprimitives; -use gprimitives::ActorId; -use parity_scale_codec::{Decode, Encode}; -use serde::{Deserialize, Serialize}; - -#[derive(Clone, Debug, Encode, Decode)] -pub enum BlockEvent { - Router(router::Event), - Mirror { - address: ActorId, - event: mirror::Event, - }, - WVara(wvara::Event), -} - -impl BlockEvent { - pub fn mirror(address: ActorId, event: mirror::Event) -> Self { - Self::Mirror { address, event } - } -} - -impl From for BlockEvent { - fn from(value: router::Event) -> Self { - Self::Router(value) - } -} - -impl From for BlockEvent { - fn from(value: wvara::Event) -> Self { - Self::WVara(value) - } -} - -#[derive(Clone, Debug, Encode, Decode, Serialize, Deserialize)] -pub enum BlockRequestEvent { - Router(router::RequestEvent), - Mirror { - address: ActorId, - event: mirror::RequestEvent, - }, - WVara(wvara::RequestEvent), -} - -impl BlockRequestEvent { - pub fn mirror(address: ActorId, event: mirror::RequestEvent) -> Self { - Self::Mirror { address, event } - } -} - -impl From for BlockRequestEvent { - fn from(value: router::RequestEvent) -> Self { - Self::Router(value) - } -} - -impl From for BlockRequestEvent { - fn from(value: wvara::RequestEvent) -> Self { - Self::WVara(value) - } -} - pub const fn u64_into_uint48_be_bytes_lossy(val: u64) -> [u8; 6] { let [_, _, b1, b2, b3, b4, b5, b6] = val.to_be_bytes(); diff --git a/ethexe/common/src/router.rs b/ethexe/common/src/router.rs deleted file mode 100644 index e2da27f735f..00000000000 --- a/ethexe/common/src/router.rs +++ /dev/null @@ -1,168 +0,0 @@ -// This file is part of Gear. -// -// Copyright (C) 2024 Gear Technologies Inc. -// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -use alloc::vec::Vec; -use gear_core::message::{ReplyDetails, StoredMessage}; -use gprimitives::{ActorId, CodeId, MessageId, H256}; -use parity_scale_codec::{Decode, Encode}; -use serde::{Deserialize, Serialize}; - -/* Storage related structures */ - -#[derive(Clone, Debug, Default, Encode, Decode, PartialEq, Eq)] -pub enum CodeState { - #[default] - Unknown, - ValidationRequested, - Validated, -} - -/* Commitment related structures */ - -#[derive(Clone, Debug, Default, Encode, Decode, PartialEq, Eq)] -pub struct CodeCommitment { - pub id: CodeId, - pub valid: bool, -} - -#[derive(Clone, Debug, Default, Encode, Decode, PartialEq, Eq)] -pub struct BlockCommitment { - pub block_hash: H256, - /// represented as u48 in router contract - pub block_timestamp: u64, - pub prev_commitment_hash: H256, - pub pred_block_hash: H256, - pub transitions: Vec, -} - -#[derive(Clone, Debug, Default, Encode, Decode, PartialEq, Eq)] -pub struct StateTransition { - pub actor_id: ActorId, - pub new_state_hash: H256, - pub inheritor: ActorId, - pub value_to_receive: u128, - pub value_claims: Vec, - pub messages: Vec, -} - -#[derive(Clone, Debug, Default, Encode, Decode, PartialEq, Eq)] -pub struct ValueClaim { - pub message_id: MessageId, - pub destination: ActorId, - pub value: u128, -} - -#[derive(Clone, Debug, Default, Encode, Decode, PartialEq, Eq)] -pub struct OutgoingMessage { - pub id: MessageId, - pub destination: ActorId, - pub payload: Vec, - pub value: u128, - pub reply_details: Option, -} - -impl From for OutgoingMessage { - fn from(value: StoredMessage) -> Self { - let (id, _source, destination, payload, value, details) = value.into_parts(); - Self { - id, - destination, - payload: payload.into_vec(), - value, - reply_details: details.and_then(|v| v.to_reply_details()), - } - } -} - -/* Events section */ - -#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq)] -pub enum Event { - BaseWeightChanged { - base_weight: u64, - }, - BlockCommitted { - block_hash: H256, - }, - CodeGotValidated { - id: CodeId, - valid: bool, - }, - CodeValidationRequested { - code_id: CodeId, - /// This field is replaced with tx hash in case of zero. - blob_tx_hash: H256, - }, - ProgramCreated { - actor_id: ActorId, - code_id: CodeId, - }, - StorageSlotChanged, - ValidatorsSetChanged, - ValuePerWeightChanged { - value_per_weight: u128, - }, -} - -impl Event { - pub fn as_request(self) -> Option { - Some(match self { - Self::BaseWeightChanged { base_weight } => { - RequestEvent::BaseWeightChanged { base_weight } - } - Self::CodeValidationRequested { - code_id, - blob_tx_hash, - } => RequestEvent::CodeValidationRequested { - code_id, - blob_tx_hash, - }, - Self::ProgramCreated { actor_id, code_id } => { - RequestEvent::ProgramCreated { actor_id, code_id } - } - Self::StorageSlotChanged => RequestEvent::StorageSlotChanged, - Self::ValidatorsSetChanged => RequestEvent::ValidatorsSetChanged, - Self::ValuePerWeightChanged { value_per_weight } => { - RequestEvent::ValuePerWeightChanged { value_per_weight } - } - Self::BlockCommitted { .. } | Self::CodeGotValidated { .. } => return None, - }) - } -} - -#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq, Serialize, Deserialize)] -pub enum RequestEvent { - BaseWeightChanged { - base_weight: u64, - }, - CodeValidationRequested { - code_id: CodeId, - // TODO (breathx): replace with `code: Vec` - /// This field is replaced with tx hash in case of zero. - blob_tx_hash: H256, - }, - ProgramCreated { - actor_id: ActorId, - code_id: CodeId, - }, - StorageSlotChanged, - ValidatorsSetChanged, - ValuePerWeightChanged { - value_per_weight: u128, - }, -} diff --git a/ethexe/ethereum/src/router/events.rs b/ethexe/ethereum/src/router/events.rs index 5dea9c8f4e2..557df893d4e 100644 --- a/ethexe/ethereum/src/router/events.rs +++ b/ethexe/ethereum/src/router/events.rs @@ -19,7 +19,7 @@ use crate::{decode_log, IRouter}; use alloy::{primitives::B256, rpc::types::eth::Log, sol_types::SolEvent}; use anyhow::{anyhow, Result}; -use ethexe_common::router; +use ethexe_common::events::{RouterEvent, RouterRequestEvent}; use signatures::*; pub mod signatures { @@ -27,33 +27,30 @@ pub mod signatures { crate::signatures_consts! { IRouter; - BASE_WEIGHT_CHANGED: BaseWeightChanged, BLOCK_COMMITTED: BlockCommitted, CODE_GOT_VALIDATED: CodeGotValidated, CODE_VALIDATION_REQUESTED: CodeValidationRequested, + COMPUTATION_SETTINGS_CHANGED: ComputationSettingsChanged, PROGRAM_CREATED: ProgramCreated, STORAGE_SLOT_CHANGED: StorageSlotChanged, VALIDATORS_SET_CHANGED: ValidatorsSetChanged, - VALUE_PER_WEIGHT_CHANGED: ValuePerWeightChanged, } pub const REQUESTS: &[B256] = &[ - BASE_WEIGHT_CHANGED, CODE_VALIDATION_REQUESTED, + COMPUTATION_SETTINGS_CHANGED, PROGRAM_CREATED, STORAGE_SLOT_CHANGED, VALIDATORS_SET_CHANGED, - VALUE_PER_WEIGHT_CHANGED, ]; } -pub fn try_extract_event(log: &Log) -> Result> { +pub fn try_extract_event(log: &Log) -> Result> { let Some(topic0) = log.topic0().filter(|&v| ALL.contains(v)) else { return Ok(None); }; let event = match *topic0 { - BASE_WEIGHT_CHANGED => decode_log::(log)?.into(), BLOCK_COMMITTED => decode_log::(log)?.into(), CODE_GOT_VALIDATED => decode_log::(log)?.into(), CODE_VALIDATION_REQUESTED => { @@ -69,17 +66,17 @@ pub fn try_extract_event(log: &Log) -> Result> { event.into() } + COMPUTATION_SETTINGS_CHANGED => decode_log::(log)?.into(), PROGRAM_CREATED => decode_log::(log)?.into(), STORAGE_SLOT_CHANGED => decode_log::(log)?.into(), VALIDATORS_SET_CHANGED => decode_log::(log)?.into(), - VALUE_PER_WEIGHT_CHANGED => decode_log::(log)?.into(), _ => unreachable!("filtered above"), }; Ok(Some(event)) } -pub fn try_extract_request_event(log: &Log) -> Result> { +pub fn try_extract_request_event(log: &Log) -> Result> { if log.topic0().filter(|&v| REQUESTS.contains(v)).is_none() { return Ok(None); } From fde7b1c9892c87164af9e33e2e5e2361a53b3928 Mon Sep 17 00:00:00 2001 From: Dmitry Novikov Date: Tue, 19 Nov 2024 21:56:30 +0400 Subject: [PATCH 29/43] patch everything else --- ethexe/cli/src/args.rs | 35 +-- ethexe/cli/src/service.rs | 35 ++- ethexe/cli/src/tests.rs | 7 +- ethexe/common/src/db.rs | 2 +- ethexe/contracts/test/Router.t.sol | 2 +- ethexe/db/src/database.rs | 4 +- ethexe/ethereum/src/abi.rs | 366 ----------------------- ethexe/ethereum/src/abi/events/mirror.rs | 94 ++++++ ethexe/ethereum/src/abi/events/mod.rs | 21 ++ ethexe/ethereum/src/abi/events/router.rs | 76 +++++ ethexe/ethereum/src/abi/events/wvara.rs | 41 +++ ethexe/ethereum/src/abi/gear.rs | 98 ++++++ ethexe/ethereum/src/abi/mod.rs | 136 +++++++++ ethexe/ethereum/src/lib.rs | 9 +- ethexe/ethereum/src/mirror/events.rs | 6 +- ethexe/ethereum/src/router/events.rs | 10 +- ethexe/ethereum/src/router/mod.rs | 26 +- ethexe/ethereum/src/wvara/events.rs | 10 +- ethexe/ethereum/src/wvara/mod.rs | 4 +- ethexe/observer/src/blobs.rs | 18 ++ ethexe/observer/src/event.rs | 20 +- ethexe/observer/src/observer.rs | 13 +- ethexe/observer/src/query.rs | 5 +- ethexe/processor/src/common.rs | 2 +- ethexe/processor/src/handling/events.rs | 38 ++- ethexe/processor/src/lib.rs | 4 +- ethexe/processor/src/tests.rs | 54 ++-- ethexe/rpc/src/apis/block.rs | 2 +- ethexe/runtime/common/src/journal.rs | 2 +- ethexe/runtime/common/src/schedule.rs | 4 +- ethexe/runtime/common/src/state.rs | 6 +- ethexe/runtime/common/src/transitions.rs | 6 +- ethexe/sequencer/src/lib.rs | 43 ++- ethexe/signer/src/digest.rs | 32 +- ethexe/validator/src/lib.rs | 78 ++--- 35 files changed, 703 insertions(+), 606 deletions(-) delete mode 100644 ethexe/ethereum/src/abi.rs create mode 100644 ethexe/ethereum/src/abi/events/mirror.rs create mode 100644 ethexe/ethereum/src/abi/events/mod.rs create mode 100644 ethexe/ethereum/src/abi/events/router.rs create mode 100644 ethexe/ethereum/src/abi/events/wvara.rs create mode 100644 ethexe/ethereum/src/abi/gear.rs create mode 100644 ethexe/ethereum/src/abi/mod.rs diff --git a/ethexe/cli/src/args.rs b/ethexe/cli/src/args.rs index ede80f875ad..8ec865259e9 100644 --- a/ethexe/cli/src/args.rs +++ b/ethexe/cli/src/args.rs @@ -22,7 +22,7 @@ use crate::{ config, params::{NetworkParams, PrometheusParams, RpcParams}, }; -use anyhow::{anyhow, bail, Result}; +use anyhow::{anyhow, bail}; use clap::{Parser, Subcommand}; use ethexe_ethereum::Ethereum; use ethexe_signer::Address; @@ -145,7 +145,6 @@ pub enum ExtraCommands { ClearKeys, InsertKey(InsertKeyArgs), Sign(SigningArgs), - UpdateValidators(UpdateValidatorsArgs), UploadCode(UploadCodeArgs), CreateProgram(CreateProgramArgs), } @@ -160,11 +159,6 @@ pub struct InsertKeyArgs { key_uri: String, } -#[derive(Clone, Debug, Deserialize, Parser)] -pub struct UpdateValidatorsArgs { - validators: Vec, -} - #[derive(Clone, Debug, Deserialize, Parser)] pub struct UploadCodeArgs { path: PathBuf, @@ -258,33 +252,6 @@ impl ExtraCommands { println!("Ethereum address: {}", pub_key.to_address()); } - ExtraCommands::UpdateValidators(ref update_validators_args) => { - let validator_addresses = update_validators_args - .validators - .iter() - .map(|validator| validator.parse::
()) - .collect::>>()?; - - let validators = validator_addresses - .into_iter() - .map(|address| address.0.into()) - .collect(); - - let Some((sender_address, ethexe_ethereum)) = - maybe_sender_address.zip(maybe_ethereum) - else { - bail!("please provide signer address"); - }; - - println!("Updating validators for Router from {sender_address}..."); - - let tx = ethexe_ethereum - .router() - .update_validators(validators) - .await?; - println!("Completed in transaction {tx:?}"); - } - ExtraCommands::UploadCode(ref upload_code_args) => { let path = &upload_code_args.path; diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index 245806ffa71..ac780368f6b 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -22,12 +22,10 @@ use crate::{ config::{Config, ConfigPublicKey, PrometheusConfig}, metrics::MetricsService, }; -use anyhow::{anyhow, Result}; +use anyhow::{anyhow, bail, Result}; use ethexe_common::{ - router::{ - BlockCommitment, CodeCommitment, RequestEvent as RouterRequestEvent, StateTransition, - }, - BlockRequestEvent, + events::{BlockRequestEvent, RouterRequestEvent}, + gear::{BlockCommitment, CodeCommitment, StateTransition}, }; use ethexe_db::{BlockMetaStorage, CodesStorage, Database}; use ethexe_ethereum::{primitives::U256, router::RouterQuery}; @@ -108,9 +106,18 @@ impl Service { let router_query = RouterQuery::new(&config.ethereum_rpc, ethereum_router_address).await?; let genesis_block_hash = router_query.genesis_block_hash().await?; - log::info!("👶 Genesis block hash: {genesis_block_hash:?}"); - let validators = router_query.validators().await?; + if genesis_block_hash.is_zero() { + log::error!( + "👶 Genesis block hash wasn't found. Call router.lookupGenesisHash() first" + ); + + bail!("Failed to query valid genesis hash"); + } else { + log::info!("👶 Genesis block hash: {genesis_block_hash:?}"); + } + + let validators = router_query.validators_keys().await?; log::info!("👥 Validators set: {validators:?}"); let threshold = router_query.threshold().await?; @@ -267,7 +274,7 @@ impl Service { for event in events { match event { BlockRequestEvent::Router(RouterRequestEvent::CodeValidationRequested { - code_id, + id: code_id, blob_tx_hash, }) => { db.set_code_blob_tx(code_id, blob_tx_hash); @@ -373,12 +380,12 @@ impl Service { .ok_or_else(|| anyhow!("header not found, but most exist"))?; commitments.push(BlockCommitment { - block_hash, - block_timestamp: header.timestamp, - pred_block_hash: block_data.hash, - prev_commitment_hash: db + hash: block_hash, + timestamp: header.timestamp, + previous_committed_block: db .block_prev_commitment(block_hash) .ok_or_else(|| anyhow!("Prev commitment not found"))?, + predecessor_block: block_data.hash, transitions, }); } @@ -925,7 +932,7 @@ mod tests { node_name: "test".to_string(), ethereum_rpc: "ws://54.67.75.1:8546".into(), ethereum_beacon_rpc: "http://localhost:5052".into(), - ethereum_router_address: "0xa9e7B594e18e28b1Cc0FA4000D92ded887CB356F" + ethereum_router_address: "0x520ecEe5Eb8fE561290DE0A987a295f9634f8aa3" .parse() .expect("infallible"), max_commitment_depth: 1000, @@ -954,7 +961,7 @@ mod tests { node_name: "test".to_string(), ethereum_rpc: "wss://ethereum-holesky-rpc.publicnode.com".into(), ethereum_beacon_rpc: "http://localhost:5052".into(), - ethereum_router_address: "0xa9e7B594e18e28b1Cc0FA4000D92ded887CB356F" + ethereum_router_address: "0x520ecEe5Eb8fE561290DE0A987a295f9634f8aa3" .parse() .expect("infallible"), max_commitment_depth: 1000, diff --git a/ethexe/cli/src/tests.rs b/ethexe/cli/src/tests.rs index 8618be28953..f424721a5fb 100644 --- a/ethexe/cli/src/tests.rs +++ b/ethexe/cli/src/tests.rs @@ -26,7 +26,8 @@ use alloy::{ }; use anyhow::Result; use ethexe_common::{ - db::CodesStorage, mirror::Event as MirrorEvent, router::Event as RouterEvent, BlockEvent, + db::CodesStorage, + events::{BlockEvent, MirrorEvent, RouterEvent}, }; use ethexe_db::{BlockMetaStorage, Database, MemDb, ScheduledTask}; use ethexe_ethereum::{router::RouterQuery, Ethereum}; @@ -1442,8 +1443,8 @@ mod utils { self.listener .apply_until_block_event(|event| { match event { - BlockEvent::Router(RouterEvent::ProgramCreated { actor_id, code_id }) - if actor_id == self.program_id => + BlockEvent::Router(RouterEvent::ProgramCreated { actor, code_id }) + if actor == self.program_id => { code_id_info = Some(code_id); } diff --git a/ethexe/common/src/db.rs b/ethexe/common/src/db.rs index 19e68662b7c..531b302ee5c 100644 --- a/ethexe/common/src/db.rs +++ b/ethexe/common/src/db.rs @@ -70,7 +70,7 @@ pub struct CodeUploadInfo { pub type Schedule = BTreeMap>; -// TODO (breathx): WITHIN THE BLOCK +// TODO (breathx): WITHIN THE PR pub trait BlockMetaStorage: Send + Sync { fn block_header(&self, block_hash: H256) -> Option; fn set_block_header(&self, block_hash: H256, header: BlockHeader); diff --git a/ethexe/contracts/test/Router.t.sol b/ethexe/contracts/test/Router.t.sol index 16399e24763..778c06f9537 100644 --- a/ethexe/contracts/test/Router.t.sol +++ b/ethexe/contracts/test/Router.t.sol @@ -121,7 +121,7 @@ contract RouterTest is Test { actorId, // actor id bytes32(uint256(42)), // new state hash address(0), // inheritor - uint128(0), // value to recieve + uint128(0), // value to receive new Gear.ValueClaim[](0), // value claims messages // messages ); diff --git a/ethexe/db/src/database.rs b/ethexe/db/src/database.rs index 87ee5631588..2cfddff71da 100644 --- a/ethexe/db/src/database.rs +++ b/ethexe/db/src/database.rs @@ -24,8 +24,8 @@ use crate::{ }; use ethexe_common::{ db::{BlockHeader, BlockMetaStorage, CodesStorage, Schedule}, - router::StateTransition, - BlockRequestEvent, + events::BlockRequestEvent, + gear::StateTransition, }; use ethexe_runtime_common::state::{ Allocations, DispatchStash, HashOf, Mailbox, MemoryPages, MessageQueue, ProgramState, Storage, diff --git a/ethexe/ethereum/src/abi.rs b/ethexe/ethereum/src/abi.rs deleted file mode 100644 index 199370236c6..00000000000 --- a/ethexe/ethereum/src/abi.rs +++ /dev/null @@ -1,366 +0,0 @@ -// This file is part of Gear. -// -// Copyright (C) 2024 Gear Technologies Inc. -// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -use alloy::{primitives::Uint, sol}; -use ethexe_common::{mirror, router, wvara}; -use gear_core::message::ReplyDetails; -use gear_core_errors::ReplyCode; -use gprimitives::U256; - -pub(crate) type Uint256 = Uint<256, 4>; -pub(crate) type Uint48 = Uint<48, 1>; - -sol!( - #[sol(rpc)] - IMirror, - "Mirror.json" -); - -sol!( - #[sol(rpc)] - IMirrorProxy, - "MirrorProxy.json" -); - -sol!( - #[sol(rpc)] - IRouter, - "Router.json" -); - -sol!( - #[sol(rpc)] - ITransparentUpgradeableProxy, - "TransparentUpgradeableProxy.json" -); - -sol!( - #[allow(clippy::too_many_arguments)] - #[sol(rpc)] - IWrappedVara, - "WrappedVara.json" -); - -pub(crate) fn uint256_to_u128_lossy(value: Uint256) -> u128 { - let [low, high, ..] = value.into_limbs(); - - ((high as u128) << 64) | (low as u128) -} - -pub(crate) fn u64_to_uint48_lossy(value: u64) -> Uint48 { - Uint48::try_from(value).unwrap_or(Uint48::MAX) -} - -/* From common types to alloy */ - -impl From for IRouter::CodeCommitment { - fn from(router::CodeCommitment { id, valid }: router::CodeCommitment) -> Self { - Self { - id: id.into_bytes().into(), - valid, - } - } -} - -impl From for IRouter::BlockCommitment { - fn from( - router::BlockCommitment { - block_hash, - block_timestamp, - prev_commitment_hash, - pred_block_hash, - transitions, - }: router::BlockCommitment, - ) -> Self { - Self { - blockHash: block_hash.to_fixed_bytes().into(), - blockTimestamp: u64_to_uint48_lossy(block_timestamp), - prevCommitmentHash: prev_commitment_hash.to_fixed_bytes().into(), - predBlockHash: pred_block_hash.to_fixed_bytes().into(), - transitions: transitions.into_iter().map(Into::into).collect(), - } - } -} - -impl From for IRouter::StateTransition { - fn from( - router::StateTransition { - actor_id, - new_state_hash, - inheritor, - value_to_receive, - value_claims, - messages, - }: router::StateTransition, - ) -> Self { - Self { - actorId: actor_id.to_address_lossy().to_fixed_bytes().into(), - newStateHash: new_state_hash.to_fixed_bytes().into(), - inheritor: inheritor.to_address_lossy().to_fixed_bytes().into(), - valueToReceive: value_to_receive, - valueClaims: value_claims.into_iter().map(Into::into).collect(), - messages: messages.into_iter().map(Into::into).collect(), - } - } -} - -impl From for IRouter::ValueClaim { - fn from( - router::ValueClaim { - message_id, - destination, - value, - }: router::ValueClaim, - ) -> Self { - Self { - messageId: message_id.into_bytes().into(), - destination: destination.to_address_lossy().to_fixed_bytes().into(), - value, - } - } -} - -impl From for IRouter::OutgoingMessage { - fn from( - router::OutgoingMessage { - id, - destination, - payload, - value, - reply_details, - }: router::OutgoingMessage, - ) -> Self { - Self { - id: id.into_bytes().into(), - destination: destination.to_address_lossy().to_fixed_bytes().into(), - payload: payload.into(), - value, - replyDetails: reply_details.into(), - } - } -} - -impl From for IRouter::ReplyDetails { - fn from(value: ReplyDetails) -> Self { - let (to, code) = value.into_parts(); - - Self { - to: to.into_bytes().into(), - code: code.to_bytes().into(), - } - } -} - -impl From> for IRouter::ReplyDetails { - fn from(value: Option) -> Self { - value.unwrap_or_default().into() - } -} - -/* From alloy types to common */ - -impl From for router::Event { - fn from(event: IRouter::BaseWeightChanged) -> Self { - router::Event::BaseWeightChanged { - base_weight: event.baseWeight, - } - } -} - -impl From for router::Event { - fn from(event: IRouter::BlockCommitted) -> Self { - router::Event::BlockCommitted { - block_hash: (*event.blockHash).into(), - } - } -} - -impl From for router::Event { - fn from(event: IRouter::CodeGotValidated) -> Self { - router::Event::CodeGotValidated { - id: (*event.id).into(), - valid: event.valid, - } - } -} - -impl From for router::Event { - fn from(event: IRouter::CodeValidationRequested) -> Self { - router::Event::CodeValidationRequested { - code_id: (*event.codeId).into(), - blob_tx_hash: (*event.blobTxHash).into(), - } - } -} - -impl From for router::Event { - fn from(event: IRouter::ProgramCreated) -> Self { - router::Event::ProgramCreated { - actor_id: (*event.actorId.into_word()).into(), - code_id: (*event.codeId).into(), - } - } -} - -impl From for router::Event { - fn from(_: IRouter::StorageSlotChanged) -> Self { - router::Event::StorageSlotChanged - } -} - -impl From for router::Event { - fn from(_: IRouter::ValidatorsSetChanged) -> Self { - router::Event::ValidatorsSetChanged - } -} - -impl From for router::Event { - fn from(event: IRouter::ValuePerWeightChanged) -> Self { - router::Event::ValuePerWeightChanged { - value_per_weight: event.valuePerWeight, - } - } -} - -impl From for mirror::Event { - fn from(event: IMirror::ExecutableBalanceTopUpRequested) -> Self { - mirror::Event::ExecutableBalanceTopUpRequested { value: event.value } - } -} - -impl From for mirror::Event { - fn from(event: IMirror::Message) -> Self { - mirror::Event::Message { - id: (*event.id).into(), - destination: (*event.destination.into_word()).into(), - payload: event.payload.to_vec(), - value: event.value, - } - } -} - -impl From for mirror::Event { - fn from(event: IMirror::MessageQueueingRequested) -> Self { - mirror::Event::MessageQueueingRequested { - id: (*event.id).into(), - source: (*event.source.into_word()).into(), - payload: event.payload.to_vec(), - value: event.value, - } - } -} - -impl From for mirror::Event { - fn from(event: IMirror::Reply) -> Self { - mirror::Event::Reply { - payload: event.payload.to_vec(), - value: event.value, - reply_to: (*event.replyTo).into(), - reply_code: ReplyCode::from_bytes(*event.replyCode), - } - } -} - -impl From for mirror::Event { - fn from(event: IMirror::ReplyQueueingRequested) -> Self { - mirror::Event::ReplyQueueingRequested { - replied_to: (*event.repliedTo).into(), - source: (*event.source.into_word()).into(), - payload: event.payload.to_vec(), - value: event.value, - } - } -} - -impl From for mirror::Event { - fn from(event: IMirror::StateChanged) -> Self { - mirror::Event::StateChanged { - state_hash: (*event.stateHash).into(), - } - } -} - -impl From for mirror::Event { - fn from(event: IMirror::ValueClaimed) -> Self { - mirror::Event::ValueClaimed { - claimed_id: (*event.claimedId).into(), - value: event.value, - } - } -} - -impl From for mirror::Event { - fn from(event: IMirror::ValueClaimingRequested) -> Self { - mirror::Event::ValueClaimingRequested { - claimed_id: (*event.claimedId).into(), - source: (*event.source.into_word()).into(), - } - } -} - -impl From for wvara::Event { - fn from(event: IWrappedVara::Transfer) -> Self { - wvara::Event::Transfer { - from: (*event.from.into_word()).into(), - to: (*event.to.into_word()).into(), - value: uint256_to_u128_lossy(event.value), - } - } -} - -impl From for wvara::Event { - fn from(event: IWrappedVara::Approval) -> Self { - wvara::Event::Approval { - owner: (*event.owner.into_word()).into(), - spender: (*event.spender.into_word()).into(), - value: U256(event.value.into_limbs()), - } - } -} - -#[test] -fn cast_is_correct() { - use rand::Rng; - - let mut rng = rand::thread_rng(); - - // uint256 -> u128 - assert_eq!(uint256_to_u128_lossy(Uint256::MAX), u128::MAX); - - for _ in 0..10 { - let val: u128 = rng.gen(); - let uint256 = Uint256::from(val); - - assert_eq!(uint256_to_u128_lossy(uint256), val); - } - - // u64 -> uint48 - assert_eq!(u64_to_uint48_lossy(u64::MAX), Uint48::MAX); - - for _ in 0..10 { - let val = rng.gen_range(0..=Uint48::MAX.into_limbs()[0]); - let uint48 = Uint48::from(val); - - assert_eq!(u64_to_uint48_lossy(val), uint48); - - assert_eq!( - ethexe_common::u64_into_uint48_be_bytes_lossy(val), - uint48.to_be_bytes() - ); - } -} diff --git a/ethexe/ethereum/src/abi/events/mirror.rs b/ethexe/ethereum/src/abi/events/mirror.rs new file mode 100644 index 00000000000..8cb3ea45e4b --- /dev/null +++ b/ethexe/ethereum/src/abi/events/mirror.rs @@ -0,0 +1,94 @@ +// This file is part of Gear. +// +// Copyright (C) 2024 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use crate::abi::{utils::*, IMirror}; +use ethexe_common::events::MirrorEvent; +use gear_core_errors::ReplyCode; + +impl From for MirrorEvent { + fn from(value: IMirror::StateChanged) -> Self { + Self::StateChanged { + state_hash: bytes32_to_h256(value.stateHash), + } + } +} + +impl From for MirrorEvent { + fn from(value: IMirror::MessageQueueingRequested) -> Self { + Self::MessageQueueingRequested { + id: bytes32_to_message_id(value.id), + source: address_to_actor_id(value.source), + payload: value.payload.into(), + value: value.value, + } + } +} +impl From for MirrorEvent { + fn from(value: IMirror::ReplyQueueingRequested) -> Self { + Self::ReplyQueueingRequested { + replied_to: bytes32_to_message_id(value.repliedTo), + source: address_to_actor_id(value.source), + payload: value.payload.into(), + value: value.value, + } + } +} +impl From for MirrorEvent { + fn from(value: IMirror::ValueClaimingRequested) -> Self { + Self::ValueClaimingRequested { + claimed_id: bytes32_to_message_id(value.claimedId), + source: address_to_actor_id(value.source), + } + } +} + +impl From for MirrorEvent { + fn from(value: IMirror::ExecutableBalanceTopUpRequested) -> Self { + Self::ExecutableBalanceTopUpRequested { value: value.value } + } +} + +impl From for MirrorEvent { + fn from(value: IMirror::Message) -> Self { + Self::Message { + id: bytes32_to_message_id(value.id), + destination: address_to_actor_id(value.destination), + payload: value.payload.into(), + value: value.value, + } + } +} + +impl From for MirrorEvent { + fn from(value: IMirror::Reply) -> Self { + Self::Reply { + payload: value.payload.into(), + value: value.value, + reply_to: bytes32_to_message_id(value.replyTo), + reply_code: ReplyCode::from_bytes(*value.replyCode), + } + } +} +impl From for MirrorEvent { + fn from(value: IMirror::ValueClaimed) -> Self { + Self::ValueClaimed { + claimed_id: bytes32_to_message_id(value.claimedId), + value: value.value, + } + } +} diff --git a/ethexe/ethereum/src/abi/events/mod.rs b/ethexe/ethereum/src/abi/events/mod.rs new file mode 100644 index 00000000000..a4c2bfd281e --- /dev/null +++ b/ethexe/ethereum/src/abi/events/mod.rs @@ -0,0 +1,21 @@ +// This file is part of Gear. +// +// Copyright (C) 2024 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +mod mirror; +mod router; +mod wvara; diff --git a/ethexe/ethereum/src/abi/events/router.rs b/ethexe/ethereum/src/abi/events/router.rs new file mode 100644 index 00000000000..102e1084e52 --- /dev/null +++ b/ethexe/ethereum/src/abi/events/router.rs @@ -0,0 +1,76 @@ +// This file is part of Gear. +// +// Copyright (C) 2024 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use crate::abi::{utils::*, IRouter}; +use ethexe_common::events::RouterEvent; + +impl From for RouterEvent { + fn from(value: IRouter::BlockCommitted) -> Self { + Self::BlockCommitted { + hash: bytes32_to_h256(value.hash), + } + } +} + +impl From for RouterEvent { + fn from(value: IRouter::CodeGotValidated) -> Self { + Self::CodeGotValidated { + id: bytes32_to_code_id(value.id), + valid: value.valid, + } + } +} + +impl From for RouterEvent { + fn from(value: IRouter::CodeValidationRequested) -> Self { + Self::CodeValidationRequested { + id: bytes32_to_code_id(value.id), + blob_tx_hash: bytes32_to_h256(value.blobTxHash), + } + } +} + +impl From for RouterEvent { + fn from(value: IRouter::ComputationSettingsChanged) -> Self { + Self::ComputationSettingsChanged { + threshold: value.threshold, + wvara_per_second: value.wvaraPerSecond, + } + } +} + +impl From for RouterEvent { + fn from(value: IRouter::ProgramCreated) -> Self { + Self::ProgramCreated { + actor: address_to_actor_id(value.actor), + code_id: bytes32_to_code_id(value.codeId), + } + } +} + +impl From for RouterEvent { + fn from(_value: IRouter::StorageSlotChanged) -> Self { + Self::StorageSlotChanged + } +} + +impl From for RouterEvent { + fn from(_value: IRouter::ValidatorsChanged) -> Self { + Self::ValidatorsChanged + } +} diff --git a/ethexe/ethereum/src/abi/events/wvara.rs b/ethexe/ethereum/src/abi/events/wvara.rs new file mode 100644 index 00000000000..9e549abd05f --- /dev/null +++ b/ethexe/ethereum/src/abi/events/wvara.rs @@ -0,0 +1,41 @@ +// This file is part of Gear. +// +// Copyright (C) 2024 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use crate::abi::{utils::*, IWrappedVara}; +use ethexe_common::events::WVaraEvent; +use gprimitives::U256; + +impl From for WVaraEvent { + fn from(value: IWrappedVara::Approval) -> Self { + Self::Approval { + owner: address_to_actor_id(value.owner), + spender: address_to_actor_id(value.spender), + value: U256(value.value.into_limbs()), + } + } +} + +impl From for WVaraEvent { + fn from(value: IWrappedVara::Transfer) -> Self { + Self::Transfer { + from: address_to_actor_id(value.from), + to: address_to_actor_id(value.to), + value: uint256_to_u128_lossy(value.value), + } + } +} diff --git a/ethexe/ethereum/src/abi/gear.rs b/ethexe/ethereum/src/abi/gear.rs new file mode 100644 index 00000000000..8e0b6543eeb --- /dev/null +++ b/ethexe/ethereum/src/abi/gear.rs @@ -0,0 +1,98 @@ +// This file is part of Gear. +// +// Copyright (C) 2024 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use crate::abi::{utils::*, Gear}; +use ethexe_common::gear::*; +use gear_core::message::ReplyDetails; + +// // +// From Rust types to alloy // +// // + +impl From for Gear::BlockCommitment { + fn from(value: BlockCommitment) -> Self { + Self { + hash: h256_to_bytes32(value.hash), + timestamp: u64_to_uint48_lossy(value.timestamp), + previousCommittedBlock: h256_to_bytes32(value.previous_committed_block), + predecessorBlock: h256_to_bytes32(value.predecessor_block), + transitions: value.transitions.into_iter().map(Into::into).collect(), + } + } +} + +impl From for Gear::CodeCommitment { + fn from(value: CodeCommitment) -> Self { + Self { + id: code_id_to_bytes32(value.id), + valid: value.valid, + } + } +} + +impl From for Gear::Message { + fn from(value: Message) -> Self { + Self { + id: message_id_to_bytes32(value.id), + destination: actor_id_to_address_lossy(value.destination), + payload: value.payload.into(), + value: value.value, + replyDetails: value.reply_details.into(), + } + } +} + +impl From> for Gear::ReplyDetails { + fn from(value: Option) -> Self { + value.unwrap_or_default().into() + } +} + +impl From for Gear::ReplyDetails { + fn from(value: ReplyDetails) -> Self { + let (to, code) = value.into_parts(); + + Self { + to: message_id_to_bytes32(to), + code: code.to_bytes().into(), + } + } +} + +impl From for Gear::StateTransition { + fn from(value: StateTransition) -> Self { + Self { + actorId: actor_id_to_address_lossy(value.actor_id), + newStateHash: h256_to_bytes32(value.new_state_hash), + inheritor: actor_id_to_address_lossy(value.actor_id), + valueToReceive: value.value_to_receive, + valueClaims: value.value_claims.into_iter().map(Into::into).collect(), + messages: value.messages.into_iter().map(Into::into).collect(), + } + } +} + +impl From for Gear::ValueClaim { + fn from(value: ValueClaim) -> Self { + Self { + messageId: message_id_to_bytes32(value.message_id), + destination: actor_id_to_address_lossy(value.destination), + value: value.value, + } + } +} diff --git a/ethexe/ethereum/src/abi/mod.rs b/ethexe/ethereum/src/abi/mod.rs new file mode 100644 index 00000000000..54e53e6123a --- /dev/null +++ b/ethexe/ethereum/src/abi/mod.rs @@ -0,0 +1,136 @@ +// This file is part of Gear. +// +// Copyright (C) 2024 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use alloy::sol; + +mod events; +mod gear; + +sol!( + #[sol(rpc)] + IMirror, + "Mirror.json" +); + +sol!( + #[sol(rpc)] + IMirrorProxy, + "MirrorProxy.json" +); + +sol!( + #[sol(rpc)] + IRouter, + "Router.json" +); + +sol!( + #[sol(rpc)] + ITransparentUpgradeableProxy, + "TransparentUpgradeableProxy.json" +); + +sol!( + #[allow(clippy::too_many_arguments)] + #[sol(rpc)] + IWrappedVara, + "WrappedVara.json" +); + +pub(crate) mod utils { + use alloy::primitives::{FixedBytes, Uint}; + use gprimitives::{ActorId, CodeId, MessageId, H256}; + + pub type Bytes32 = FixedBytes<32>; + pub type Uint256 = Uint<256, 4>; + pub type Uint48 = Uint<48, 1>; + + pub fn actor_id_to_address_lossy(actor_id: ActorId) -> alloy::primitives::Address { + actor_id.to_address_lossy().to_fixed_bytes().into() + } + + pub fn address_to_actor_id(address: alloy::primitives::Address) -> ActorId { + (*address.into_word()).into() + } + + pub fn bytes32_to_code_id(bytes: Bytes32) -> CodeId { + bytes.0.into() + } + + pub fn bytes32_to_h256(bytes: Bytes32) -> H256 { + bytes.0.into() + } + + pub fn bytes32_to_message_id(bytes: Bytes32) -> MessageId { + bytes.0.into() + } + + pub fn code_id_to_bytes32(code_id: CodeId) -> Bytes32 { + code_id.into_bytes().into() + } + + pub fn message_id_to_bytes32(message_id: MessageId) -> Bytes32 { + message_id.into_bytes().into() + } + + pub fn h256_to_bytes32(h256: H256) -> Bytes32 { + h256.0.into() + } + + pub fn u64_to_uint48_lossy(value: u64) -> Uint48 { + Uint48::try_from(value).unwrap_or(Uint48::MAX) + } + + pub fn uint256_to_u128_lossy(value: Uint256) -> u128 { + let [low, high, ..] = value.into_limbs(); + + ((high as u128) << 64) | (low as u128) + } + + #[test] + fn casts_are_correct() { + use rand::Rng; + + let mut rng = rand::thread_rng(); + + // uint256 -> u128 + assert_eq!(uint256_to_u128_lossy(Uint256::MAX), u128::MAX); + + for _ in 0..10 { + let val: u128 = rng.gen(); + let uint256 = Uint256::from(val); + + assert_eq!(uint256_to_u128_lossy(uint256), val); + } + + // u64 -> uint48 + assert_eq!(u64_to_uint48_lossy(u64::MAX), Uint48::MAX); + + for _ in 0..10 { + let val = rng.gen_range(0..=Uint48::MAX.into_limbs()[0]); + let uint48 = Uint48::from(val); + + assert_eq!(u64_to_uint48_lossy(val), uint48); + + assert_eq!( + ethexe_common::u64_into_uint48_be_bytes_lossy(val), + uint48.to_be_bytes() + ); + } + } +} diff --git a/ethexe/ethereum/src/lib.rs b/ethexe/ethereum/src/lib.rs index 190fb01934e..1f1eb514542 100644 --- a/ethexe/ethereum/src/lib.rs +++ b/ethexe/ethereum/src/lib.rs @@ -150,7 +150,7 @@ impl Ethereum { deployer_address, Bytes::copy_from_slice( &RouterInitializeCall { - initialOwner: deployer_address, + _owner: deployer_address, _mirror: mirror_address, _mirrorProxy: mirror_proxy_address, _wrappedVara: wvara_address, @@ -169,12 +169,15 @@ impl Ethereum { let builder = wrapped_vara.approve(router_address, U256::MAX); builder.send().await?.try_get_receipt().await?; - assert_eq!(router.mirror().call().await?._0, *mirror.address()); + assert_eq!(router.mirrorImpl().call().await?._0, *mirror.address()); assert_eq!( - router.mirrorProxy().call().await?._0, + router.mirrorProxyImpl().call().await?._0, *mirror_proxy.address() ); + let builder = router.lookupGenesisHash(); + builder.send().await?.try_get_receipt().await?; + Ok(Self { router_address, wvara_address, diff --git a/ethexe/ethereum/src/mirror/events.rs b/ethexe/ethereum/src/mirror/events.rs index 2a9c6dcc0fb..f8f225411da 100644 --- a/ethexe/ethereum/src/mirror/events.rs +++ b/ethexe/ethereum/src/mirror/events.rs @@ -19,7 +19,7 @@ use crate::{decode_log, IMirror}; use alloy::{primitives::B256, rpc::types::eth::Log, sol_types::SolEvent}; use anyhow::Result; -use ethexe_common::mirror; +use ethexe_common::events::{MirrorEvent, MirrorRequestEvent}; use signatures::*; pub mod signatures { @@ -45,7 +45,7 @@ pub mod signatures { ]; } -pub fn try_extract_event(log: &Log) -> Result> { +pub fn try_extract_event(log: &Log) -> Result> { let Some(topic0) = log.topic0().filter(|&v| ALL.contains(v)) else { return Ok(None); }; @@ -67,7 +67,7 @@ pub fn try_extract_event(log: &Log) -> Result> { Ok(Some(event)) } -pub fn try_extract_request_event(log: &Log) -> Result> { +pub fn try_extract_request_event(log: &Log) -> Result> { if log.topic0().filter(|&v| REQUESTS.contains(v)).is_none() { return Ok(None); } diff --git a/ethexe/ethereum/src/router/events.rs b/ethexe/ethereum/src/router/events.rs index 557df893d4e..ce67e48d491 100644 --- a/ethexe/ethereum/src/router/events.rs +++ b/ethexe/ethereum/src/router/events.rs @@ -33,7 +33,7 @@ pub mod signatures { COMPUTATION_SETTINGS_CHANGED: ComputationSettingsChanged, PROGRAM_CREATED: ProgramCreated, STORAGE_SLOT_CHANGED: StorageSlotChanged, - VALIDATORS_SET_CHANGED: ValidatorsSetChanged, + VALIDATORS_CHANGED: ValidatorsChanged, } pub const REQUESTS: &[B256] = &[ @@ -41,7 +41,7 @@ pub mod signatures { COMPUTATION_SETTINGS_CHANGED, PROGRAM_CREATED, STORAGE_SLOT_CHANGED, - VALIDATORS_SET_CHANGED, + VALIDATORS_CHANGED, ]; } @@ -66,10 +66,12 @@ pub fn try_extract_event(log: &Log) -> Result> { event.into() } - COMPUTATION_SETTINGS_CHANGED => decode_log::(log)?.into(), + COMPUTATION_SETTINGS_CHANGED => { + decode_log::(log)?.into() + } PROGRAM_CREATED => decode_log::(log)?.into(), STORAGE_SLOT_CHANGED => decode_log::(log)?.into(), - VALIDATORS_SET_CHANGED => decode_log::(log)?.into(), + VALIDATORS_CHANGED => decode_log::(log)?.into(), _ => unreachable!("filtered above"), }; diff --git a/ethexe/ethereum/src/router/mod.rs b/ethexe/ethereum/src/router/mod.rs index f80e189bc92..7696ca40f73 100644 --- a/ethexe/ethereum/src/router/mod.rs +++ b/ethexe/ethereum/src/router/mod.rs @@ -25,12 +25,12 @@ use alloy::{ transports::BoxTransport, }; use anyhow::{anyhow, Result}; -use ethexe_common::router::{BlockCommitment, CodeCommitment}; +use ethexe_common::gear::{BlockCommitment, CodeCommitment}; use ethexe_signer::{Address as LocalAddress, Signature as LocalSignature}; use events::signatures; use futures::StreamExt; use gear_core::ids::{prelude::CodeIdExt as _, ProgramId}; -use gprimitives::{ActorId, CodeId, H160, H256}; +use gprimitives::{ActorId, CodeId, H256}; use std::sync::Arc; pub mod events; @@ -74,18 +74,6 @@ impl Router { WVara::new(self.wvara_address, self.instance.provider().clone()) } - pub async fn update_validators(&self, validators: Vec) -> Result { - let validators = validators - .into_iter() - .map(|v| v.to_fixed_bytes().into()) - .collect(); - - let builder = self.instance.updateValidators(validators); - let receipt = builder.send().await?.try_get_receipt().await?; - - Ok((*receipt.transaction_hash).into()) - } - pub async fn request_code_validation( &self, code_id: CodeId, @@ -161,7 +149,7 @@ impl Router { if log.topic0().cloned() == Some(signatures::PROGRAM_CREATED) { let event = crate::decode_log::(log)?; - actor_id = Some((*event.actorId.into_word()).into()); + actor_id = Some((*event.actor.into_word()).into()); break; } @@ -240,9 +228,9 @@ impl RouterQuery { .map_err(Into::into) } - pub async fn last_commitment_block_hash(&self) -> Result { + pub async fn latest_committed_block_hash(&self) -> Result { self.instance - .lastBlockCommitmentHash() + .latestCommittedBlockHash() .call() .await .map(|res| H256(*res._0)) @@ -258,9 +246,9 @@ impl RouterQuery { .map_err(Into::into) } - pub async fn validators(&self) -> Result> { + pub async fn validators_keys(&self) -> Result> { self.instance - .validators() + .validatorsKeys() .call() .await .map(|res| res._0.into_iter().map(|v| LocalAddress(v.into())).collect()) diff --git a/ethexe/ethereum/src/wvara/events.rs b/ethexe/ethereum/src/wvara/events.rs index e73db0a2689..4d2ebf004b2 100644 --- a/ethexe/ethereum/src/wvara/events.rs +++ b/ethexe/ethereum/src/wvara/events.rs @@ -16,12 +16,10 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -#![allow(unused)] - use crate::{decode_log, IWrappedVara}; use alloy::{primitives::B256, rpc::types::eth::Log, sol_types::SolEvent}; -use anyhow::{anyhow, Result}; -use ethexe_common::wvara; +use anyhow::Result; +use ethexe_common::events::{WVaraEvent, WVaraRequestEvent}; use signatures::*; pub mod signatures { @@ -36,7 +34,7 @@ pub mod signatures { pub const REQUESTS: &[B256] = &[TRANSFER]; } -pub fn try_extract_event(log: &Log) -> Result> { +pub fn try_extract_event(log: &Log) -> Result> { let Some(topic0) = log.topic0().filter(|&v| ALL.contains(v)) else { return Ok(None); }; @@ -50,7 +48,7 @@ pub fn try_extract_event(log: &Log) -> Result> { Ok(Some(event)) } -pub fn try_extract_request_event(log: &Log) -> Result> { +pub fn try_extract_request_event(log: &Log) -> Result> { if log.topic0().filter(|&v| REQUESTS.contains(v)).is_none() { return Ok(None); } diff --git a/ethexe/ethereum/src/wvara/mod.rs b/ethexe/ethereum/src/wvara/mod.rs index 04c43a464f7..ac7072f4d9a 100644 --- a/ethexe/ethereum/src/wvara/mod.rs +++ b/ethexe/ethereum/src/wvara/mod.rs @@ -118,7 +118,7 @@ impl WVaraQuery { .totalSupply() .call() .await - .map(|res| abi::uint256_to_u128_lossy(res._0)) + .map(|res| abi::utils::uint256_to_u128_lossy(res._0)) .map_err(Into::into) } @@ -127,7 +127,7 @@ impl WVaraQuery { .balanceOf(address) .call() .await - .map(|res| abi::uint256_to_u128_lossy(res._0)) + .map(|res| abi::utils::uint256_to_u128_lossy(res._0)) .map_err(Into::into) } diff --git a/ethexe/observer/src/blobs.rs b/ethexe/observer/src/blobs.rs index b9ff6d5d93f..85553e79572 100644 --- a/ethexe/observer/src/blobs.rs +++ b/ethexe/observer/src/blobs.rs @@ -1,3 +1,21 @@ +// This file is part of Gear. +// +// Copyright (C) 2024 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + use crate::observer::ObserverProvider; use alloy::{ consensus::{SidecarCoder, SimpleCoder}, diff --git a/ethexe/observer/src/event.rs b/ethexe/observer/src/event.rs index 9080d11e4a0..79bb37e66cd 100644 --- a/ethexe/observer/src/event.rs +++ b/ethexe/observer/src/event.rs @@ -1,4 +1,22 @@ -use ethexe_common::{BlockEvent, BlockRequestEvent}; +// This file is part of Gear. +// +// Copyright (C) 2024 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use ethexe_common::events::{BlockEvent, BlockRequestEvent}; use ethexe_db::BlockHeader; use gprimitives::{CodeId, H256}; use parity_scale_codec::{Decode, Encode}; diff --git a/ethexe/observer/src/observer.rs b/ethexe/observer/src/observer.rs index f4070aef6fb..a807c8e5c20 100644 --- a/ethexe/observer/src/observer.rs +++ b/ethexe/observer/src/observer.rs @@ -9,10 +9,7 @@ use alloy::{ transports::BoxTransport, }; use anyhow::{anyhow, Result}; -use ethexe_common::{ - router::{Event as RouterEvent, RequestEvent as RouterRequestEvent}, - BlockEvent, BlockRequestEvent, -}; +use ethexe_common::events::{BlockEvent, BlockRequestEvent, RouterEvent, RouterRequestEvent}; use ethexe_db::BlockHeader; use ethexe_ethereum::{ mirror, @@ -115,12 +112,12 @@ impl Observer { // Create futures to load codes for event in events.iter() { - if let BlockEvent::Router(RouterEvent::CodeValidationRequested { code_id, blob_tx_hash }) = event { + if let BlockEvent::Router(RouterEvent::CodeValidationRequested { id, blob_tx_hash }) = event { codes_len += 1; let blob_reader = self.blob_reader.clone(); - let code_id = *code_id; + let code_id = *id; let blob_tx_hash = *blob_tx_hash; futures.push(async move { @@ -206,12 +203,12 @@ impl Observer { // Create futures to load codes // TODO (breathx): remove me from here mb for event in events.iter() { - if let BlockRequestEvent::Router(RouterRequestEvent::CodeValidationRequested { code_id, blob_tx_hash }) = event { + if let BlockRequestEvent::Router(RouterRequestEvent::CodeValidationRequested { id, blob_tx_hash }) = event { codes_len += 1; let blob_reader = self.blob_reader.clone(); - let code_id = *code_id; + let code_id = *id; let blob_tx_hash = *blob_tx_hash; futures.push(async move { diff --git a/ethexe/observer/src/query.rs b/ethexe/observer/src/query.rs index f492ad0c6bc..3ed9e1c45bc 100644 --- a/ethexe/observer/src/query.rs +++ b/ethexe/observer/src/query.rs @@ -19,8 +19,7 @@ use alloy::{ use anyhow::{anyhow, Result}; use ethexe_common::{ db::{BlockHeader, BlockMetaStorage}, - router::Event as RouterEvent, - BlockEvent, BlockRequestEvent, + events::{BlockEvent, BlockRequestEvent, RouterEvent}, }; use ethexe_signer::Address; use gprimitives::{CodeId, H256}; @@ -89,7 +88,7 @@ impl Query { .await? .into_iter() .filter_map(|event| match event { - BlockEvent::Router(RouterEvent::BlockCommitted { block_hash }) => Some(block_hash), + BlockEvent::Router(RouterEvent::BlockCommitted { hash }) => Some(hash), _ => None, }) .collect()) diff --git a/ethexe/processor/src/common.rs b/ethexe/processor/src/common.rs index 1d1463edb91..8104947737b 100644 --- a/ethexe/processor/src/common.rs +++ b/ethexe/processor/src/common.rs @@ -16,7 +16,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use ethexe_common::router::StateTransition; +use ethexe_common::gear::StateTransition; use gprimitives::CodeId; use parity_scale_codec::{Decode, Encode}; diff --git a/ethexe/processor/src/handling/events.rs b/ethexe/processor/src/handling/events.rs index 3223c43d3d4..fa728e41a90 100644 --- a/ethexe/processor/src/handling/events.rs +++ b/ethexe/processor/src/handling/events.rs @@ -19,37 +19,35 @@ use super::ProcessingHandler; use anyhow::{ensure, Result}; use ethexe_common::{ - mirror::RequestEvent as MirrorEvent, - router::{RequestEvent as RouterEvent, ValueClaim}, - wvara::RequestEvent as WVaraEvent, + events::{MirrorRequestEvent, RouterRequestEvent, WVaraRequestEvent}, + gear::ValueClaim, }; use ethexe_db::{CodesStorage, ScheduledTask}; use ethexe_runtime_common::state::{Dispatch, PayloadLookup, ValueWithExpiry}; use gear_core::{ids::ProgramId, message::SuccessReplyReason}; impl ProcessingHandler { - pub(crate) fn handle_router_event(&mut self, event: RouterEvent) -> Result<()> { + pub(crate) fn handle_router_event(&mut self, event: RouterRequestEvent) -> Result<()> { match event { - RouterEvent::ProgramCreated { actor_id, code_id } => { + RouterRequestEvent::ProgramCreated { actor, code_id } => { ensure!( self.db.original_code(code_id).is_some(), "db corrupted: missing code [OR] code existence wasn't checked on Eth" ); ensure!( - self.db.program_code_id(actor_id).is_none(), + self.db.program_code_id(actor).is_none(), "db corrupted: unrecognized program [OR] program duplicates wasn't checked on Eth" ); - self.db.set_program_code_id(actor_id, code_id); + self.db.set_program_code_id(actor, code_id); - self.transitions.register_new(actor_id); + self.transitions.register_new(actor); } - RouterEvent::CodeValidationRequested { .. } - | RouterEvent::BaseWeightChanged { .. } - | RouterEvent::StorageSlotChanged - | RouterEvent::ValidatorsSetChanged - | RouterEvent::ValuePerWeightChanged { .. } => { + RouterRequestEvent::CodeValidationRequested { .. } + | RouterRequestEvent::ComputationSettingsChanged { .. } + | RouterRequestEvent::StorageSlotChanged + | RouterRequestEvent::ValidatorsChanged => { log::debug!("Handler not yet implemented: {event:?}"); } }; @@ -60,7 +58,7 @@ impl ProcessingHandler { pub(crate) fn handle_mirror_event( &mut self, actor_id: ProgramId, - event: MirrorEvent, + event: MirrorRequestEvent, ) -> Result<()> { if !self.transitions.is_program(&actor_id) { log::debug!("Received event from unrecognized mirror ({actor_id}): {event:?}"); @@ -69,12 +67,12 @@ impl ProcessingHandler { } match event { - MirrorEvent::ExecutableBalanceTopUpRequested { value } => { + MirrorRequestEvent::ExecutableBalanceTopUpRequested { value } => { self.update_state(actor_id, |state, _, _| { state.executable_balance += value; }); } - MirrorEvent::MessageQueueingRequested { + MirrorRequestEvent::MessageQueueingRequested { id, source, payload, @@ -92,7 +90,7 @@ impl ProcessingHandler { Ok(()) })?; } - MirrorEvent::ReplyQueueingRequested { + MirrorRequestEvent::ReplyQueueingRequested { replied_to, source, payload, @@ -131,7 +129,7 @@ impl ProcessingHandler { Ok(()) })?; } - MirrorEvent::ValueClaimingRequested { claimed_id, source } => { + MirrorRequestEvent::ValueClaimingRequested { claimed_id, source } => { self.update_state(actor_id, |state, storage, transitions| -> Result<()> { let Some(ValueWithExpiry { value, expiry }) = state .mailbox_hash @@ -172,9 +170,9 @@ impl ProcessingHandler { Ok(()) } - pub(crate) fn handle_wvara_event(&mut self, event: WVaraEvent) { + pub(crate) fn handle_wvara_event(&mut self, event: WVaraRequestEvent) { match event { - WVaraEvent::Transfer { from, to, value } => { + WVaraRequestEvent::Transfer { from, to, value } => { if self.transitions.is_program(&to) && !self.transitions.is_program(&from) { self.update_state(to, |state, _, _| state.balance += value); } diff --git a/ethexe/processor/src/lib.rs b/ethexe/processor/src/lib.rs index 2421bf22c1c..ba0694aba7e 100644 --- a/ethexe/processor/src/lib.rs +++ b/ethexe/processor/src/lib.rs @@ -19,7 +19,7 @@ //! Program's execution service for eGPU. use anyhow::{anyhow, ensure, Result}; -use ethexe_common::{mirror::RequestEvent as MirrorEvent, BlockRequestEvent}; +use ethexe_common::events::{BlockRequestEvent, MirrorRequestEvent}; use ethexe_db::{BlockMetaStorage, CodesStorage, Database}; use ethexe_runtime_common::state::Storage; use gear_core::{ids::prelude::CodeIdExt, message::ReplyInfo}; @@ -184,7 +184,7 @@ impl OverlaidProcessor { handler.handle_mirror_event( program_id, - MirrorEvent::MessageQueueingRequested { + MirrorRequestEvent::MessageQueueingRequested { id: MessageId::zero(), source, payload, diff --git a/ethexe/processor/src/tests.rs b/ethexe/processor/src/tests.rs index 721df5b5b6e..53f373d0eec 100644 --- a/ethexe/processor/src/tests.rs +++ b/ethexe/processor/src/tests.rs @@ -17,9 +17,7 @@ // along with this program. If not, see . use crate::*; -use ethexe_common::{ - mirror::RequestEvent as MirrorEvent, router::RequestEvent as RouterEvent, BlockRequestEvent, -}; +use ethexe_common::events::{BlockRequestEvent, MirrorRequestEvent, RouterRequestEvent}; use ethexe_db::{BlockHeader, BlockMetaStorage, CodesStorage, MemDb, ScheduledTask}; use ethexe_runtime_common::state::ValueWithExpiry; use gear_core::ids::{prelude::CodeIdExt, ProgramId}; @@ -118,16 +116,19 @@ fn process_observer_event() { let actor_id = ActorId::from(42); let create_program_events = vec![ - BlockRequestEvent::Router(RouterEvent::ProgramCreated { actor_id, code_id }), + BlockRequestEvent::Router(RouterRequestEvent::ProgramCreated { + actor: actor_id, + code_id, + }), BlockRequestEvent::mirror( actor_id, - MirrorEvent::ExecutableBalanceTopUpRequested { + MirrorRequestEvent::ExecutableBalanceTopUpRequested { value: 10_000_000_000, }, ), BlockRequestEvent::mirror( actor_id, - MirrorEvent::MessageQueueingRequested { + MirrorRequestEvent::MessageQueueingRequested { id: H256::random().0.into(), source: H256::random().0.into(), payload: b"PING".to_vec(), @@ -146,7 +147,7 @@ fn process_observer_event() { let send_message_event = BlockRequestEvent::mirror( actor_id, - MirrorEvent::MessageQueueingRequested { + MirrorRequestEvent::MessageQueueingRequested { id: H256::random().0.into(), source: H256::random().0.into(), payload: b"PING".to_vec(), @@ -255,13 +256,16 @@ fn ping_pong() { let mut handler = processor.handler(ch0).unwrap(); handler - .handle_router_event(RouterEvent::ProgramCreated { actor_id, code_id }) + .handle_router_event(RouterRequestEvent::ProgramCreated { + actor: actor_id, + code_id, + }) .expect("failed to create new program"); handler .handle_mirror_event( actor_id, - MirrorEvent::ExecutableBalanceTopUpRequested { + MirrorRequestEvent::ExecutableBalanceTopUpRequested { value: 10_000_000_000, }, ) @@ -270,7 +274,7 @@ fn ping_pong() { handler .handle_mirror_event( actor_id, - MirrorEvent::MessageQueueingRequested { + MirrorRequestEvent::MessageQueueingRequested { id: MessageId::from(1), source: user_id, payload: b"PING".to_vec(), @@ -282,7 +286,7 @@ fn ping_pong() { handler .handle_mirror_event( actor_id, - MirrorEvent::MessageQueueingRequested { + MirrorRequestEvent::MessageQueueingRequested { id: MessageId::from(2), source: user_id, payload: b"PING".to_vec(), @@ -338,8 +342,8 @@ fn async_and_ping() { let mut handler = processor.handler(ch0).unwrap(); handler - .handle_router_event(RouterEvent::ProgramCreated { - actor_id: ping_id, + .handle_router_event(RouterRequestEvent::ProgramCreated { + actor: ping_id, code_id: ping_code_id, }) .expect("failed to create new program"); @@ -347,7 +351,7 @@ fn async_and_ping() { handler .handle_mirror_event( ping_id, - MirrorEvent::ExecutableBalanceTopUpRequested { + MirrorRequestEvent::ExecutableBalanceTopUpRequested { value: 10_000_000_000, }, ) @@ -356,7 +360,7 @@ fn async_and_ping() { handler .handle_mirror_event( ping_id, - MirrorEvent::MessageQueueingRequested { + MirrorRequestEvent::MessageQueueingRequested { id: get_next_message_id(), source: user_id, payload: b"PING".to_vec(), @@ -366,8 +370,8 @@ fn async_and_ping() { .expect("failed to send message"); handler - .handle_router_event(RouterEvent::ProgramCreated { - actor_id: async_id, + .handle_router_event(RouterRequestEvent::ProgramCreated { + actor: async_id, code_id: upload_code_id, }) .expect("failed to create new program"); @@ -375,7 +379,7 @@ fn async_and_ping() { handler .handle_mirror_event( async_id, - MirrorEvent::ExecutableBalanceTopUpRequested { + MirrorRequestEvent::ExecutableBalanceTopUpRequested { value: 10_000_000_000, }, ) @@ -384,7 +388,7 @@ fn async_and_ping() { handler .handle_mirror_event( async_id, - MirrorEvent::MessageQueueingRequested { + MirrorRequestEvent::MessageQueueingRequested { id: get_next_message_id(), source: user_id, payload: ping_id.encode(), @@ -398,7 +402,7 @@ fn async_and_ping() { handler .handle_mirror_event( async_id, - MirrorEvent::MessageQueueingRequested { + MirrorRequestEvent::MessageQueueingRequested { id: wait_for_reply_to, source: user_id, payload: demo_async::Command::Common.encode(), @@ -478,8 +482,8 @@ fn many_waits() { let program_id = ProgramId::from(i); handler - .handle_router_event(RouterEvent::ProgramCreated { - actor_id: program_id, + .handle_router_event(RouterRequestEvent::ProgramCreated { + actor: program_id, code_id, }) .expect("failed to create new program"); @@ -487,7 +491,7 @@ fn many_waits() { handler .handle_mirror_event( program_id, - MirrorEvent::ExecutableBalanceTopUpRequested { + MirrorRequestEvent::ExecutableBalanceTopUpRequested { value: 10_000_000_000, }, ) @@ -496,7 +500,7 @@ fn many_waits() { handler .handle_mirror_event( program_id, - MirrorEvent::MessageQueueingRequested { + MirrorRequestEvent::MessageQueueingRequested { id: H256::random().0.into(), source: H256::random().0.into(), payload: Default::default(), @@ -518,7 +522,7 @@ fn many_waits() { handler .handle_mirror_event( pid, - MirrorEvent::MessageQueueingRequested { + MirrorRequestEvent::MessageQueueingRequested { id: H256::random().0.into(), source: H256::random().0.into(), payload: Default::default(), diff --git a/ethexe/rpc/src/apis/block.rs b/ethexe/rpc/src/apis/block.rs index 06f5a6b0453..d9bb83a1f01 100644 --- a/ethexe/rpc/src/apis/block.rs +++ b/ethexe/rpc/src/apis/block.rs @@ -17,7 +17,7 @@ // along with this program. If not, see . use crate::{common::block_header_at_or_latest, errors}; -use ethexe_common::BlockRequestEvent; +use ethexe_common::events::BlockRequestEvent; use ethexe_db::{BlockHeader, BlockMetaStorage, Database}; use gprimitives::H256; use jsonrpsee::{ diff --git a/ethexe/runtime/common/src/journal.rs b/ethexe/runtime/common/src/journal.rs index 4888a23f6a4..99bbf56f7a6 100644 --- a/ethexe/runtime/common/src/journal.rs +++ b/ethexe/runtime/common/src/journal.rs @@ -12,7 +12,7 @@ use core_processor::{ common::{DispatchOutcome, JournalHandler}, configs::BlockInfo, }; -use ethexe_common::{db::ScheduledTask, router::OutgoingMessage}; +use ethexe_common::db::ScheduledTask; use gear_core::{ ids::ProgramId, memory::PageBuf, diff --git a/ethexe/runtime/common/src/schedule.rs b/ethexe/runtime/common/src/schedule.rs index 4ef2aae498a..e8e4d854900 100644 --- a/ethexe/runtime/common/src/schedule.rs +++ b/ethexe/runtime/common/src/schedule.rs @@ -9,7 +9,7 @@ use alloc::vec; use anyhow::{anyhow, Result}; use ethexe_common::{ db::{Rfm, ScheduledTask, Sd, Sum}, - router::{OutgoingMessage, ValueClaim}, + gear::{Message, ValueClaim}, }; use gear_core::{ids::ProgramId, message::ReplyMessage, tasks::TaskHandler}; use gear_core_errors::SuccessReplyReason; @@ -90,7 +90,7 @@ impl<'a, S: Storage> TaskHandler for Handler<'a, S> { transitions.modify_transition(program_id, |transition| { transition .messages - .push(dispatch.into_outgoing(storage, user_id)) + .push(dispatch.into_message(storage, user_id)) }) }); diff --git a/ethexe/runtime/common/src/state.rs b/ethexe/runtime/common/src/state.rs index ef49911db1e..7faea2b6172 100644 --- a/ethexe/runtime/common/src/state.rs +++ b/ethexe/runtime/common/src/state.rs @@ -32,7 +32,7 @@ use core::{ num::NonZero, ops::{Deref, DerefMut}, }; -use ethexe_common::router::OutgoingMessage; +use ethexe_common::gear::Message; use gear_core::{ code::InstrumentedCode, ids::{prelude::MessageIdExt as _, ProgramId}, @@ -609,7 +609,7 @@ impl Dispatch { } } - pub fn into_outgoing(self, storage: &S, destination: ActorId) -> OutgoingMessage { + pub fn into_message(self, storage: &S, destination: ActorId) -> Message { let Self { id, payload, @@ -620,7 +620,7 @@ impl Dispatch { let payload = payload.query(storage).expect("must be found").into_vec(); - OutgoingMessage { + Message { id, destination, payload, diff --git a/ethexe/runtime/common/src/transitions.rs b/ethexe/runtime/common/src/transitions.rs index 9673781fa9f..36589164fde 100644 --- a/ethexe/runtime/common/src/transitions.rs +++ b/ethexe/runtime/common/src/transitions.rs @@ -24,7 +24,7 @@ use anyhow::{anyhow, Result}; use core::num::NonZero; use ethexe_common::{ db::{BlockHeader, Schedule, ScheduledTask}, - router::{OutgoingMessage, StateTransition, ValueClaim}, + gear::{Message, StateTransition, ValueClaim}, }; use gprimitives::{ActorId, CodeId, H256}; use parity_scale_codec::{Decode, Encode}; @@ -71,7 +71,7 @@ impl InBlockTransitions { self.states.keys().cloned().collect() } - pub fn current_messages(&self) -> Vec<(ActorId, OutgoingMessage)> { + pub fn current_messages(&self) -> Vec<(ActorId, Message)> { self.modifications .iter() .flat_map(|(id, trans)| trans.messages.iter().map(|message| (*id, message.clone()))) @@ -191,7 +191,7 @@ pub struct NonFinalTransition { pub inheritor: ActorId, pub value_to_receive: u128, pub claims: Vec, - pub messages: Vec, + pub messages: Vec, } impl NonFinalTransition { diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index db21eb3bb12..57e07866813 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -22,7 +22,7 @@ pub mod agro; use agro::{AggregatedCommitments, MultisignedCommitmentDigests, MultisignedCommitments}; use anyhow::{anyhow, Result}; -use ethexe_common::router::{BlockCommitment, CodeCommitment}; +use ethexe_common::gear::{BlockCommitment, CodeCommitment}; use ethexe_ethereum::Ethereum; use ethexe_observer::{RequestBlockData, RequestEvent}; use ethexe_signer::{Address, Digest, PublicKey, Signature, Signer, ToDigest}; @@ -281,7 +281,7 @@ impl Sequencer { .iter() .filter_map(|(digest, c)| { (c.origins.len() as u64 >= threshold) - .then_some((c.commitment.block_hash, (digest, &c.commitment))) + .then_some((c.commitment.hash, (digest, &c.commitment))) }) .collect(); @@ -294,7 +294,7 @@ impl Sequencer { candidate.push_front(**digest); - block_hash = commitment.prev_commitment_hash; + block_hash = commitment.previous_committed_block; } if candidate.is_empty() { @@ -682,31 +682,31 @@ mod tests { let mut commitments = BTreeMap::new(); let commitment1 = BlockCommitment { - block_hash: H256::random(), - block_timestamp: rand::random(), - prev_commitment_hash: H256::random(), - pred_block_hash: H256::random(), + hash: H256::random(), + timestamp: rand::random(), + previous_committed_block: H256::random(), + predecessor_block: H256::random(), transitions: Default::default(), }; let commitment2 = BlockCommitment { - block_hash: H256::random(), - block_timestamp: rand::random(), - prev_commitment_hash: commitment1.block_hash, - pred_block_hash: H256::random(), + hash: H256::random(), + timestamp: rand::random(), + previous_committed_block: commitment1.hash, + predecessor_block: H256::random(), transitions: Default::default(), }; let commitment3 = BlockCommitment { - block_hash: H256::random(), - block_timestamp: rand::random(), - prev_commitment_hash: commitment1.block_hash, - pred_block_hash: H256::random(), + hash: H256::random(), + timestamp: rand::random(), + previous_committed_block: commitment1.hash, + predecessor_block: H256::random(), transitions: Default::default(), }; let mut expected_digests = IndexSet::new(); let candidate = - Sequencer::block_commitments_candidate(&commitments, commitment1.block_hash, threshold); + Sequencer::block_commitments_candidate(&commitments, commitment1.hash, threshold); assert!(candidate.is_none()); commitments.insert( @@ -720,9 +720,8 @@ mod tests { Sequencer::block_commitments_candidate(&commitments, H256::random(), threshold); assert!(candidate.is_none()); - let candidate = - Sequencer::block_commitments_candidate(&commitments, commitment1.block_hash, 0) - .expect("Must have candidate"); + let candidate = Sequencer::block_commitments_candidate(&commitments, commitment1.hash, 0) + .expect("Must have candidate"); expected_digests.insert(commitment1.to_digest()); assert_eq!(candidate.digests(), &expected_digests); @@ -747,18 +746,18 @@ mod tests { ); let candidate = - Sequencer::block_commitments_candidate(&commitments, commitment1.block_hash, threshold) + Sequencer::block_commitments_candidate(&commitments, commitment1.hash, threshold) .expect("Must have candidate"); assert_eq!(candidate.digests(), &expected_digests); let candidate = - Sequencer::block_commitments_candidate(&commitments, commitment2.block_hash, threshold) + Sequencer::block_commitments_candidate(&commitments, commitment2.hash, threshold) .expect("Must have candidate"); expected_digests.insert(commitment2.to_digest()); assert_eq!(candidate.digests(), &expected_digests); let candidate = - Sequencer::block_commitments_candidate(&commitments, commitment3.block_hash, threshold) + Sequencer::block_commitments_candidate(&commitments, commitment3.hash, threshold) .expect("Must have candidate"); expected_digests.pop(); expected_digests.insert(commitment3.to_digest()); diff --git a/ethexe/signer/src/digest.rs b/ethexe/signer/src/digest.rs index 902377bcd46..53adb896713 100644 --- a/ethexe/signer/src/digest.rs +++ b/ethexe/signer/src/digest.rs @@ -19,9 +19,7 @@ //! Keccak256 digest type. Implements AsDigest hashing for ethexe common types. use core::fmt; -use ethexe_common::router::{ - BlockCommitment, CodeCommitment, OutgoingMessage, StateTransition, ValueClaim, -}; +use ethexe_common::gear::{BlockCommitment, CodeCommitment, Message, StateTransition, ValueClaim}; use parity_scale_codec::{Decode, Encode}; use sha3::Digest as _; @@ -152,7 +150,7 @@ impl ToDigest for StateTransition { } } -impl ToDigest for OutgoingMessage { +impl ToDigest for Message { fn update_hasher(&self, hasher: &mut sha3::Keccak256) { // To avoid missing incorrect hashing while developing. let Self { @@ -178,17 +176,17 @@ impl ToDigest for BlockCommitment { fn update_hasher(&self, hasher: &mut sha3::Keccak256) { // To avoid missing incorrect hashing while developing. let Self { - block_hash, - block_timestamp, - prev_commitment_hash, - pred_block_hash, + hash, + timestamp, + previous_committed_block, + predecessor_block, transitions, } = self; - hasher.update(block_hash.as_bytes()); - hasher.update(ethexe_common::u64_into_uint48_be_bytes_lossy(*block_timestamp).as_slice()); - hasher.update(prev_commitment_hash.as_bytes()); - hasher.update(pred_block_hash.as_bytes()); + hasher.update(hash.as_bytes()); + hasher.update(ethexe_common::u64_into_uint48_be_bytes_lossy(*timestamp).as_slice()); + hasher.update(previous_committed_block.as_bytes()); + hasher.update(predecessor_block.as_bytes()); hasher.update(transitions.to_digest().as_ref()); } } @@ -213,7 +211,7 @@ mod tests { inheritor: ActorId::from(0), value_to_receive: 0, value_claims: vec![], - messages: vec![OutgoingMessage { + messages: vec![Message { id: MessageId::from(0), destination: ActorId::from(0), payload: b"Hello, World!".to_vec(), @@ -226,10 +224,10 @@ mod tests { let transitions = vec![state_transition.clone(), state_transition]; let block_commitment = BlockCommitment { - block_hash: H256::from([0; 32]), - block_timestamp: 0, - pred_block_hash: H256::from([1; 32]), - prev_commitment_hash: H256::from([2; 32]), + hash: H256::from([0; 32]), + timestamp: 0, + previous_committed_block: H256::from([2; 32]), + predecessor_block: H256::from([1; 32]), transitions: transitions.clone(), }; let _digest = block_commitment.to_digest(); diff --git a/ethexe/validator/src/lib.rs b/ethexe/validator/src/lib.rs index dda37fd1254..f4a602858a7 100644 --- a/ethexe/validator/src/lib.rs +++ b/ethexe/validator/src/lib.rs @@ -19,7 +19,7 @@ use anyhow::{anyhow, ensure, Result}; use ethexe_common::{ db::{BlockMetaStorage, CodesStorage}, - router::{BlockCommitment, CodeCommitment}, + gear::{BlockCommitment, CodeCommitment}, }; use ethexe_sequencer::agro::{self, AggregatedCommitments}; use ethexe_signer::{ @@ -44,8 +44,8 @@ pub struct Config { pub struct BlockCommitmentValidationRequest { pub block_hash: H256, pub block_timestamp: u64, - pub prev_commitment_hash: H256, - pub pred_block_hash: H256, + pub previous_committed_block: H256, + pub predecessor_block: H256, pub transitions_digest: Digest, } @@ -53,18 +53,18 @@ impl From<&BlockCommitment> for BlockCommitmentValidationRequest { fn from(commitment: &BlockCommitment) -> Self { // To avoid missing incorrect hashing while developing. let BlockCommitment { - block_hash, - block_timestamp, - prev_commitment_hash, - pred_block_hash, + hash, + timestamp, + previous_committed_block, + predecessor_block, transitions, } = commitment; Self { - block_hash: *block_hash, - block_timestamp: *block_timestamp, - prev_commitment_hash: *prev_commitment_hash, - pred_block_hash: *pred_block_hash, + block_hash: *hash, + block_timestamp: *timestamp, + previous_committed_block: *previous_committed_block, + predecessor_block: *predecessor_block, transitions_digest: transitions.to_digest(), } } @@ -76,15 +76,15 @@ impl ToDigest for BlockCommitmentValidationRequest { let Self { block_hash, block_timestamp, - prev_commitment_hash, - pred_block_hash, + previous_committed_block, + predecessor_block, transitions_digest, } = self; hasher.update(block_hash.as_bytes()); hasher.update(ethexe_common::u64_into_uint48_be_bytes_lossy(*block_timestamp).as_slice()); - hasher.update(prev_commitment_hash.as_bytes()); - hasher.update(pred_block_hash.as_bytes()); + hasher.update(previous_committed_block.as_bytes()); + hasher.update(predecessor_block.as_bytes()); hasher.update(transitions_digest.as_ref()); } } @@ -180,8 +180,8 @@ impl Validator { let BlockCommitmentValidationRequest { block_hash, block_timestamp, - pred_block_hash: allowed_pred_block_hash, - prev_commitment_hash: allowed_prev_commitment_hash, + previous_committed_block: allowed_previous_committed_block, + predecessor_block: allowed_predecessor_block, transitions_digest, } = request; @@ -209,16 +209,16 @@ impl Validator { if db.block_prev_commitment(block_hash).ok_or_else(|| { anyhow!("Cannot get from db previous commitment for block {block_hash}") - })? != allowed_prev_commitment_hash + })? != allowed_previous_committed_block { return Err(anyhow!( "Requested and local previous commitment block hash mismatch" )); } - if !Self::verify_is_predecessor(db, allowed_pred_block_hash, block_hash, None)? { + if !Self::verify_is_predecessor(db, allowed_predecessor_block, block_hash, None)? { return Err(anyhow!( - "{block_hash} is not a predecessor of {allowed_pred_block_hash}" + "{block_hash} is not a predecessor of {allowed_predecessor_block}" )); } @@ -272,7 +272,7 @@ impl Validator { #[cfg(test)] mod tests { use super::*; - use ethexe_common::router::StateTransition; + use ethexe_common::gear::StateTransition; use ethexe_db::BlockHeader; use gprimitives::CodeId; @@ -288,10 +288,10 @@ mod tests { }; let commitment = BlockCommitment { - block_hash: H256::random(), - block_timestamp: rand::random(), - prev_commitment_hash: H256::random(), - pred_block_hash: H256::random(), + hash: H256::random(), + timestamp: rand::random(), + previous_committed_block: H256::random(), + predecessor_block: H256::random(), transitions: vec![transition.clone(), transition], }; @@ -343,13 +343,13 @@ mod tests { let block_hash = H256::random(); let block_timestamp = rand::random::() as u64; let pred_block_hash = H256::random(); - let prev_commitment_hash = H256::random(); + let previous_committed_block = H256::random(); let transitions = vec![]; let transitions_digest = transitions.to_digest(); db.set_block_end_state_is_valid(block_hash, true); db.set_block_outcome(block_hash, transitions); - db.set_block_prev_commitment(block_hash, prev_commitment_hash); + db.set_block_prev_commitment(block_hash, previous_committed_block); db.set_block_header( block_hash, BlockHeader { @@ -364,8 +364,8 @@ mod tests { BlockCommitmentValidationRequest { block_hash, block_timestamp, - pred_block_hash: block_hash, - prev_commitment_hash, + previous_committed_block, + predecessor_block: block_hash, transitions_digest, }, ) @@ -376,8 +376,8 @@ mod tests { BlockCommitmentValidationRequest { block_hash, block_timestamp: block_timestamp + 1, - pred_block_hash: block_hash, - prev_commitment_hash, + previous_committed_block, + predecessor_block: block_hash, transitions_digest, }, ) @@ -388,8 +388,8 @@ mod tests { BlockCommitmentValidationRequest { block_hash, block_timestamp, - pred_block_hash: H256::random(), - prev_commitment_hash, + previous_committed_block, + predecessor_block: H256::random(), transitions_digest, }, ) @@ -400,8 +400,8 @@ mod tests { BlockCommitmentValidationRequest { block_hash, block_timestamp, - pred_block_hash: block_hash, - prev_commitment_hash: H256::random(), + previous_committed_block: H256::random(), + predecessor_block: block_hash, transitions_digest, }, ) @@ -412,8 +412,8 @@ mod tests { BlockCommitmentValidationRequest { block_hash, block_timestamp, - pred_block_hash: block_hash, - prev_commitment_hash, + previous_committed_block, + predecessor_block: block_hash, transitions_digest: Digest::from([2; 32]), }, ) @@ -424,8 +424,8 @@ mod tests { BlockCommitmentValidationRequest { block_hash: H256::random(), block_timestamp, - pred_block_hash: block_hash, - prev_commitment_hash, + previous_committed_block, + predecessor_block: block_hash, transitions_digest, }, ) From df8646bacaf4c28c4f0fe0f235a594233b9937a9 Mon Sep 17 00:00:00 2001 From: Dmitry Novikov Date: Wed, 20 Nov 2024 17:09:44 +0400 Subject: [PATCH 30/43] fix tests --- ethexe/ethereum/src/abi/gear.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethexe/ethereum/src/abi/gear.rs b/ethexe/ethereum/src/abi/gear.rs index 8e0b6543eeb..c17c29ee506 100644 --- a/ethexe/ethereum/src/abi/gear.rs +++ b/ethexe/ethereum/src/abi/gear.rs @@ -79,7 +79,7 @@ impl From for Gear::StateTransition { Self { actorId: actor_id_to_address_lossy(value.actor_id), newStateHash: h256_to_bytes32(value.new_state_hash), - inheritor: actor_id_to_address_lossy(value.actor_id), + inheritor: actor_id_to_address_lossy(value.inheritor), valueToReceive: value.value_to_receive, valueClaims: value.value_claims.into_iter().map(Into::into).collect(), messages: value.messages.into_iter().map(Into::into).collect(), From d31cec432046e71908db80a337adc09bd83b2b63 Mon Sep 17 00:00:00 2001 From: Dmitry Novikov Date: Wed, 20 Nov 2024 17:46:41 +0400 Subject: [PATCH 31/43] rename meta storage fn item --- ethexe/cli/src/service.rs | 4 ++-- ethexe/common/src/db.rs | 5 ++--- ethexe/db/src/database.rs | 4 ++-- ethexe/observer/src/query.rs | 10 ++++++---- ethexe/validator/src/lib.rs | 4 ++-- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index ac780368f6b..a3db465da4e 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -383,7 +383,7 @@ impl Service { hash: block_hash, timestamp: header.timestamp, previous_committed_block: db - .block_prev_commitment(block_hash) + .previous_committed_block(block_hash) .ok_or_else(|| anyhow!("Prev commitment not found"))?, predecessor_block: block_data.hash, transitions, @@ -682,7 +682,7 @@ impl Service { }; let last_not_empty_block = match block_is_empty { - true => match db.block_prev_commitment(chain_head) { + true => match db.previous_committed_block(chain_head) { Some(prev_commitment) => prev_commitment, None => { log::warn!("Failed to get previous commitment for {chain_head}"); diff --git a/ethexe/common/src/db.rs b/ethexe/common/src/db.rs index 531b302ee5c..2d3a0fcb153 100644 --- a/ethexe/common/src/db.rs +++ b/ethexe/common/src/db.rs @@ -70,7 +70,6 @@ pub struct CodeUploadInfo { pub type Schedule = BTreeMap>; -// TODO (breathx): WITHIN THE PR pub trait BlockMetaStorage: Send + Sync { fn block_header(&self, block_hash: H256) -> Option; fn set_block_header(&self, block_hash: H256, header: BlockHeader); @@ -84,8 +83,8 @@ pub trait BlockMetaStorage: Send + Sync { fn block_commitment_queue(&self, block_hash: H256) -> Option>; fn set_block_commitment_queue(&self, block_hash: H256, queue: VecDeque); - fn block_prev_commitment(&self, block_hash: H256) -> Option; - fn set_block_prev_commitment(&self, block_hash: H256, prev_commitment: H256); + fn previous_committed_block(&self, block_hash: H256) -> Option; + fn set_previous_committed_block(&self, block_hash: H256, prev_commitment: H256); fn block_start_program_states(&self, block_hash: H256) -> Option>; fn set_block_start_program_states(&self, block_hash: H256, map: BTreeMap); diff --git a/ethexe/db/src/database.rs b/ethexe/db/src/database.rs index 2cfddff71da..11e7bff7756 100644 --- a/ethexe/db/src/database.rs +++ b/ethexe/db/src/database.rs @@ -177,12 +177,12 @@ impl BlockMetaStorage for Database { ); } - fn block_prev_commitment(&self, block_hash: H256) -> Option { + fn previous_committed_block(&self, block_hash: H256) -> Option { self.block_small_meta(block_hash) .and_then(|meta| meta.prev_commitment) } - fn set_block_prev_commitment(&self, block_hash: H256, prev_commitment: H256) { + fn set_previous_committed_block(&self, block_hash: H256, prev_commitment: H256) { log::trace!(target: LOG_TARGET, "For block {block_hash} set prev commitment: {prev_commitment}"); let meta = self.block_small_meta(block_hash).unwrap_or_default(); self.set_block_small_meta( diff --git a/ethexe/observer/src/query.rs b/ethexe/observer/src/query.rs index 3ed9e1c45bc..0f7221bacd8 100644 --- a/ethexe/observer/src/query.rs +++ b/ethexe/observer/src/query.rs @@ -64,7 +64,8 @@ impl Query { let hash = self.genesis_block_hash; self.database .set_block_commitment_queue(hash, Default::default()); - self.database.set_block_prev_commitment(hash, H256::zero()); + self.database + .set_previous_committed_block(hash, H256::zero()); self.database.set_block_end_state_is_valid(hash, true); self.database.set_block_is_empty(hash, true); self.database @@ -304,12 +305,13 @@ impl Query { { let parent_prev_commitment = self .database - .block_prev_commitment(parent) + .previous_committed_block(parent) .ok_or_else(|| anyhow!("parent block prev commitment not found"))?; self.database - .set_block_prev_commitment(block_hash, parent_prev_commitment); + .set_previous_committed_block(block_hash, parent_prev_commitment); } else { - self.database.set_block_prev_commitment(block_hash, parent); + self.database + .set_previous_committed_block(block_hash, parent); } Ok(()) diff --git a/ethexe/validator/src/lib.rs b/ethexe/validator/src/lib.rs index f4a602858a7..227b14183c4 100644 --- a/ethexe/validator/src/lib.rs +++ b/ethexe/validator/src/lib.rs @@ -207,7 +207,7 @@ impl Validator { return Err(anyhow!("Requested and local transitions digest mismatch")); } - if db.block_prev_commitment(block_hash).ok_or_else(|| { + if db.previous_committed_block(block_hash).ok_or_else(|| { anyhow!("Cannot get from db previous commitment for block {block_hash}") })? != allowed_previous_committed_block { @@ -349,7 +349,7 @@ mod tests { db.set_block_end_state_is_valid(block_hash, true); db.set_block_outcome(block_hash, transitions); - db.set_block_prev_commitment(block_hash, previous_committed_block); + db.set_previous_committed_block(block_hash, previous_committed_block); db.set_block_header( block_hash, BlockHeader { From f88abf96c0b5aaf3cb9b28cd0acaa01aaf410a26 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Tue, 26 Nov 2024 16:56:33 +0100 Subject: [PATCH 32/43] fix after merge --- ethexe/cli/src/service.rs | 14 ++------------ ethexe/cli/src/tests.rs | 4 ++-- ethexe/ethereum/src/router/mod.rs | 6 +++--- ethexe/observer/src/observer.rs | 8 ++++---- 4 files changed, 11 insertions(+), 21 deletions(-) diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index b9fd7993698..0d5846bd410 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -117,17 +117,7 @@ impl Service { log::info!("👶 Genesis block hash: {genesis_block_hash:?}"); } - if genesis_block_hash.is_zero() { - log::error!( - "👶 Genesis block hash wasn't found. Call router.lookupGenesisHash() first" - ); - - bail!("Failed to query valid genesis hash"); - } else { - log::info!("👶 Genesis block hash: {genesis_block_hash:?}"); - } - - let validators = router_query.validators_keys().await?; + let validators = router_query.validators().await?; log::info!("👥 Validators set: {validators:?}"); let threshold = router_query.threshold().await?; @@ -284,7 +274,7 @@ impl Service { for event in events { match event { BlockRequestEvent::Router(RouterRequestEvent::CodeValidationRequested { - id: code_id, + code_id, blob_tx_hash, }) => { db.set_code_blob_tx(code_id, blob_tx_hash); diff --git a/ethexe/cli/src/tests.rs b/ethexe/cli/src/tests.rs index 6715aedfc02..57cb4f312a2 100644 --- a/ethexe/cli/src/tests.rs +++ b/ethexe/cli/src/tests.rs @@ -1443,8 +1443,8 @@ mod utils { self.listener .apply_until_block_event(|event| { match event { - BlockEvent::Router(RouterEvent::ProgramCreated { actor, code_id }) - if actor == self.program_id => + BlockEvent::Router(RouterEvent::ProgramCreated { actor_id, code_id }) + if actor_id == self.program_id => { code_id_info = Some(code_id); } diff --git a/ethexe/ethereum/src/router/mod.rs b/ethexe/ethereum/src/router/mod.rs index d4b9013df84..1eada8df03f 100644 --- a/ethexe/ethereum/src/router/mod.rs +++ b/ethexe/ethereum/src/router/mod.rs @@ -149,7 +149,7 @@ impl Router { if log.topic0().cloned() == Some(signatures::PROGRAM_CREATED) { let event = crate::decode_log::(log)?; - actor_id = Some((*event.actor.into_word()).into()); + actor_id = Some((*event.actorId.into_word()).into()); break; } @@ -246,9 +246,9 @@ impl RouterQuery { .map_err(Into::into) } - pub async fn validators_keys(&self) -> Result> { + pub async fn validators(&self) -> Result> { self.instance - .validatorsKeys() + .validators() .call() .await .map(|res| res._0.into_iter().map(|v| LocalAddress(v.into())).collect()) diff --git a/ethexe/observer/src/observer.rs b/ethexe/observer/src/observer.rs index a807c8e5c20..910d068fcd0 100644 --- a/ethexe/observer/src/observer.rs +++ b/ethexe/observer/src/observer.rs @@ -112,12 +112,12 @@ impl Observer { // Create futures to load codes for event in events.iter() { - if let BlockEvent::Router(RouterEvent::CodeValidationRequested { id, blob_tx_hash }) = event { + if let BlockEvent::Router(RouterEvent::CodeValidationRequested { code_id, blob_tx_hash }) = event { codes_len += 1; let blob_reader = self.blob_reader.clone(); - let code_id = *id; + let code_id = *code_id; let blob_tx_hash = *blob_tx_hash; futures.push(async move { @@ -203,12 +203,12 @@ impl Observer { // Create futures to load codes // TODO (breathx): remove me from here mb for event in events.iter() { - if let BlockRequestEvent::Router(RouterRequestEvent::CodeValidationRequested { id, blob_tx_hash }) = event { + if let BlockRequestEvent::Router(RouterRequestEvent::CodeValidationRequested { code_id, blob_tx_hash }) = event { codes_len += 1; let blob_reader = self.blob_reader.clone(); - let code_id = *id; + let code_id = *code_id; let blob_tx_hash = *blob_tx_hash; futures.push(async move { From 709bd7e6c9fd72cd8b782f59eaddeb2d86d96b5a Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Tue, 26 Nov 2024 17:36:28 +0100 Subject: [PATCH 33/43] review fixes --- ethexe/contracts/src/Middleware.sol | 14 +++++++------- ethexe/contracts/test/Middleware.t.sol | 8 ++++---- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index 9adcf67d49b..4670943efe9 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -313,21 +313,21 @@ contract Middleware { function requestSlash(SlashData[] calldata data) external _onlyRole(roleSlashRequester) { for (uint256 i; i < data.length; ++i) { - SlashData calldata slash_data = data[i]; - if (!operators.contains(slash_data.operator)) { + SlashData calldata slashData = data[i]; + if (!operators.contains(slashData.operator)) { revert NotRegistredOperator(); } - for (uint256 j; j < slash_data.vaults.length; ++j) { - VaultSlashData calldata vault_data = slash_data.vaults[j]; + for (uint256 j; j < slashData.vaults.length; ++j) { + VaultSlashData calldata vaultData = slashData.vaults[j]; - if (!vaults.contains(vault_data.vault)) { + if (!vaults.contains(vaultData.vault)) { revert NotRegistredVault(); } - address slasher = IVault(vault_data.vault).slasher(); + address slasher = IVault(vaultData.vault).slasher(); IVetoSlasher(slasher).requestSlash( - subnetwork, slash_data.operator, vault_data.amount, slash_data.ts, new bytes(0) + subnetwork, slashData.operator, vaultData.amount, slashData.ts, new bytes(0) ); } } diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index 0ceb489adf8..d78afb42fc0 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -6,7 +6,7 @@ import {Time} from "@openzeppelin/contracts/utils/types/Time.sol"; import {MessageHashUtils} from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; import {Upgrades} from "openzeppelin-foundry-upgrades/Upgrades.sol"; import {Test, console} from "forge-std/Test.sol"; -import "forge-std/Vm.sol"; +import {Vm} from "forge-std/Vm.sol"; import {NetworkRegistry} from "symbiotic-core/src/contracts/NetworkRegistry.sol"; import {POCBaseTest} from "symbiotic-core/test/POCBase.t.sol"; @@ -21,12 +21,12 @@ import {Middleware} from "../src/Middleware.sol"; import {WrappedVara} from "../src/WrappedVara.sol"; import {MapWithTimeData} from "../src/libraries/MapWithTimeData.sol"; -bytes32 constant REQUEST_SLASH_EVENT_SIGNATURE = - keccak256("RequestSlash(uint256,bytes32,address,uint256,uint48,uint48)"); - contract MiddlewareTest is Test { using MessageHashUtils for address; + bytes32 public constant REQUEST_SLASH_EVENT_SIGNATURE = + keccak256("RequestSlash(uint256,bytes32,address,uint256,uint48,uint48)"); + uint48 eraDuration = 1000; address public owner; POCBaseTest public sym; From 9dbee2fc1fc8c5177441762446308cf156c3e975 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 27 Nov 2024 13:45:11 +0100 Subject: [PATCH 34/43] use event selector --- ethexe/contracts/test/Middleware.t.sol | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index d78afb42fc0..196fc04e7c0 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -24,9 +24,6 @@ import {MapWithTimeData} from "../src/libraries/MapWithTimeData.sol"; contract MiddlewareTest is Test { using MessageHashUtils for address; - bytes32 public constant REQUEST_SLASH_EVENT_SIGNATURE = - keccak256("RequestSlash(uint256,bytes32,address,uint256,uint48,uint48)"); - uint48 eraDuration = 1000; address public owner; POCBaseTest public sym; @@ -514,7 +511,7 @@ contract MiddlewareTest is Test { for (uint256 i = 0; i < logs.length; i++) { Vm.Log memory log = logs[i]; bytes32 eventSignature = log.topics[0]; - if (eventSignature == REQUEST_SLASH_EVENT_SIGNATURE) { + if (eventSignature == IVetoSlasher.RequestSlash.selector) { slashIndexes[k++] = uint256(log.topics[1]); } } From d3ace8856a8e9e716168a085eb4d7d1bb870cfb0 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Mon, 2 Dec 2024 17:51:08 +0100 Subject: [PATCH 35/43] review fixes --- ethexe/contracts/test/Middleware.t.sol | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index 196fc04e7c0..a8852b1c080 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -71,7 +71,7 @@ contract MiddlewareTest is Test { // TODO: sync with the latest version of the middleware function test_constructor() public view { - sym.networkRegistry().isEntity(address(middleware)); + assertTrue(sym.networkRegistry().isEntity(address(middleware))); assertEq(sym.networkMiddlewareService().middleware(address(middleware)), address(middleware)); } @@ -210,11 +210,11 @@ contract MiddlewareTest is Test { assertEq(middleware.getOperatorStakeAt(operator2, ts), stake2); // Check active operators - (address[] memory active_operators, uint256[] memory stakes) = middleware.getActiveOperatorsStakeAt(ts); - assertEq(active_operators.length, 2); + (address[] memory activeOperators, uint256[] memory stakes) = middleware.getActiveOperatorsStakeAt(ts); + assertEq(activeOperators.length, 2); assertEq(stakes.length, 2); - assertEq(active_operators[0], operator1); - assertEq(active_operators[1], operator2); + assertEq(activeOperators[0], operator1); + assertEq(activeOperators[1], operator2); assertEq(stakes[0], stake1); assertEq(stakes[1], stake2); } From eea2c8a92a6f6cd4668037eb40b91b7b6ce4e88a Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 27 Nov 2024 08:56:37 +0100 Subject: [PATCH 36/43] impl election/ test election / update libraries --- ethexe/contracts/.vscode/settings.json | 2 +- ethexe/contracts/foundry.toml | 2 + ethexe/contracts/lib/forge-std | 2 +- ethexe/contracts/lib/openzeppelin-contracts | 2 +- .../lib/openzeppelin-contracts-upgradeable | 2 +- .../lib/openzeppelin-foundry-upgrades | 2 +- ethexe/contracts/lib/symbiotic-core | 2 +- ethexe/contracts/src/Middleware.sol | 69 ++++++++++-- ethexe/contracts/test/Middleware.t.sol | 102 +++++++++++++++--- 9 files changed, 155 insertions(+), 30 deletions(-) diff --git a/ethexe/contracts/.vscode/settings.json b/ethexe/contracts/.vscode/settings.json index 92ff8ef79c7..7f62fe68c32 100644 --- a/ethexe/contracts/.vscode/settings.json +++ b/ethexe/contracts/.vscode/settings.json @@ -6,5 +6,5 @@ "editor.defaultFormatter": "JuanBlanco.solidity" }, "solidity.formatter": "forge", - "solidity.compileUsingRemoteVersion": "v0.8.25" + "solidity.compileUsingRemoteVersion": "v0.8.26" } diff --git a/ethexe/contracts/foundry.toml b/ethexe/contracts/foundry.toml index f5cdbadb256..18325d2be28 100644 --- a/ethexe/contracts/foundry.toml +++ b/ethexe/contracts/foundry.toml @@ -1,4 +1,5 @@ [profile.default] +solc_version = "0.8.26" src = "src" out = "out" libs = ["lib"] @@ -16,6 +17,7 @@ ignored_warnings_from = [ ] # Enable new EVM codegen via_ir = true +fs_permissions = [{access = "read-write", path = "out"}, { access = "read", path = "lib"}] [rpc_endpoints] sepolia = "${SEPOLIA_RPC_URL}" diff --git a/ethexe/contracts/lib/forge-std b/ethexe/contracts/lib/forge-std index 07263d193d6..83c5d212a01 160000 --- a/ethexe/contracts/lib/forge-std +++ b/ethexe/contracts/lib/forge-std @@ -1 +1 @@ -Subproject commit 07263d193d621c4b2b0ce8b4d54af58f6957d97d +Subproject commit 83c5d212a01f8950727da4095cdfe2654baccb5b diff --git a/ethexe/contracts/lib/openzeppelin-contracts b/ethexe/contracts/lib/openzeppelin-contracts index 4b33d326fa8..0df841d2d75 160000 --- a/ethexe/contracts/lib/openzeppelin-contracts +++ b/ethexe/contracts/lib/openzeppelin-contracts @@ -1 +1 @@ -Subproject commit 4b33d326fa818082649830b2dc8dab84419852d6 +Subproject commit 0df841d2d75352786532e9e26f400efdef78d86e diff --git a/ethexe/contracts/lib/openzeppelin-contracts-upgradeable b/ethexe/contracts/lib/openzeppelin-contracts-upgradeable index 2bb98f7ae31..569efd6fd99 160000 --- a/ethexe/contracts/lib/openzeppelin-contracts-upgradeable +++ b/ethexe/contracts/lib/openzeppelin-contracts-upgradeable @@ -1 +1 @@ -Subproject commit 2bb98f7ae310af7bc2554de59f8ed164f11c383e +Subproject commit 569efd6fd9906356fb0430f747a38a27e1865b10 diff --git a/ethexe/contracts/lib/openzeppelin-foundry-upgrades b/ethexe/contracts/lib/openzeppelin-foundry-upgrades index 4cd15fc50b1..8e754fde23b 160000 --- a/ethexe/contracts/lib/openzeppelin-foundry-upgrades +++ b/ethexe/contracts/lib/openzeppelin-foundry-upgrades @@ -1 +1 @@ -Subproject commit 4cd15fc50b141c77d8cc9ff8efb44d00e841a299 +Subproject commit 8e754fde23b2b030a35bb47cd84b77dd42a44437 diff --git a/ethexe/contracts/lib/symbiotic-core b/ethexe/contracts/lib/symbiotic-core index 9cfc73f74b5..f71d470159b 160000 --- a/ethexe/contracts/lib/symbiotic-core +++ b/ethexe/contracts/lib/symbiotic-core @@ -1 +1 @@ -Subproject commit 9cfc73f74b568ad367284407d9b4dbca82a981eb +Subproject commit f71d470159b2466cfb8299d8e7b093717918f67d diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index 4670943efe9..b6a3190d625 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -18,11 +18,11 @@ import {IMigratableEntity} from "symbiotic-core/src/interfaces/common/IMigratabl import {MapWithTimeData} from "./libraries/MapWithTimeData.sol"; -// TODO: document all functions and variables -// TODO: implement election logic +// TODO (asap): document all functions and variables +// TODO (asap): implement rewards distribution +// TODO (asap): add vaidators commission // TODO: implement forced operators removal // TODO: implement forced vaults removal -// TODO: implement rewards distribution // TODO: use hints for simbiotic calls contract Middleware { using EnumerableMap for EnumerableMap.AddressToUintMap; @@ -107,11 +107,12 @@ contract Middleware { address public immutable networkOptIn; address public immutable middlewareService; address public immutable collateral; - address public immutable roleSlashRequester; - address public immutable roleSlashExecutor; address public immutable vetoResolver; bytes32 public immutable subnetwork; + address public roleSlashRequester; + address public roleSlashExecutor; + EnumerableMap.AddressToUintMap private operators; EnumerableMap.AddressToUintMap private vaults; @@ -144,6 +145,14 @@ contract Middleware { INetworkMiddlewareService(middlewareService).setMiddleware(address(this)); } + function changeSlashRequester(address newRole) external _onlyRole(roleSlashRequester) { + roleSlashRequester = newRole; + } + + function changeSlashExecutor(address newRole) external _onlyRole(roleSlashExecutor) { + roleSlashExecutor = newRole; + } + // TODO: Check that total stake is big enough function registerOperator() external { if (!IRegistry(operatorRegistry).isEntity(msg.sender)) { @@ -267,12 +276,50 @@ contract Middleware { vaults.remove(vault); } - function getOperatorStakeAt(address operator, uint48 ts) - external - view - _validTimestamp(ts) - returns (uint256 stake) - { + function makeElectionAt(uint48 ts, uint256 maxValidators) public view returns (address[] memory) { + require(maxValidators > 0, "Max validators must be greater than zero"); + + (address[] memory activeOperators, uint256[] memory stakes) = getActiveOperatorsStakeAt(ts); + + if (activeOperators.length <= maxValidators) { + return activeOperators; + } + + // Bubble sort descending + uint256 n = activeOperators.length; + for (uint256 i = 0; i < n; i++) { + for (uint256 j = 0; j < n - 1 - i; j++) { + if (stakes[j] < stakes[j + 1]) { + (stakes[j], stakes[j + 1]) = (stakes[j + 1], stakes[j]); + (activeOperators[j], activeOperators[j + 1]) = (activeOperators[j + 1], activeOperators[j]); + } + } + } + + // Choose between validators with the same stake + uint256 sameStakeCount = 1; + uint256 lastStake = stakes[maxValidators - 1]; + for (uint256 i = maxValidators; i < activeOperators.length; i++) { + if (stakes[i] != lastStake) { + break; + } + sameStakeCount += 1; + } + + if (sameStakeCount > 1) { + // If there are multiple validators with the same stake, choose one randomly + uint256 randomIndex = uint256(keccak256(abi.encodePacked(ts))) % sameStakeCount; + activeOperators[maxValidators - 1] = activeOperators[maxValidators + randomIndex - 1]; + } + + assembly { + mstore(activeOperators, maxValidators) + } + + return activeOperators; + } + + function getOperatorStakeAt(address operator, uint48 ts) public view _validTimestamp(ts) returns (uint256 stake) { (uint48 enabledTime, uint48 disabledTime) = operators.getTimes(operator); if (!_wasActiveAt(enabledTime, disabledTime, ts)) { return 0; diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index a8852b1c080..e922b663eb2 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -21,26 +21,29 @@ import {Middleware} from "../src/Middleware.sol"; import {WrappedVara} from "../src/WrappedVara.sol"; import {MapWithTimeData} from "../src/libraries/MapWithTimeData.sol"; -contract MiddlewareTest is Test { +contract MiddlewareTest is Test, POCBaseTest { using MessageHashUtils for address; uint48 eraDuration = 1000; - address public owner; POCBaseTest public sym; Middleware public middleware; WrappedVara public wrappedVara; - function setUp() public { - // For correct simbiotic work with time artitmeticks + function setUp() public override { + // For correct symbiotic work with time artitmeticks vm.warp(eraDuration * 100); - sym = new POCBaseTest(); - sym.setUp(); + // set up the symbiotic ecosystem + SYMBIOTIC_CORE_PROJECT_ROOT = "lib/symbiotic-core/"; + super.setUp(); - owner = address(this); + // For understanding where symbiotic ecosystem is using + sym = POCBaseTest(address(this)); wrappedVara = WrappedVara( - Upgrades.deployTransparentProxy("WrappedVara.sol", owner, abi.encodeCall(WrappedVara.initialize, (owner))) + Upgrades.deployTransparentProxy( + "WrappedVara.sol", address(0xdead), abi.encodeCall(WrappedVara.initialize, (owner)) + ) ); wrappedVara.mint(owner, 1_000_000); @@ -54,7 +57,7 @@ contract MiddlewareTest is Test { minSlashExecutionDelay: eraDuration / 3, maxResolverSetEpochsDelay: type(uint256).max, vaultRegistry: address(sym.vaultFactory()), - allowedVaultImplVersion: sym.vaultFactory().lastVersion(), + allowedVaultImplVersion: 1, vetoSlasherImplType: 1, operatorRegistry: address(sym.operatorRegistry()), networkRegistry: address(sym.networkRegistry()), @@ -75,6 +78,79 @@ contract MiddlewareTest is Test { assertEq(sym.networkMiddlewareService().middleware(address(middleware)), address(middleware)); } + function test_election() public { + address[] memory operators = new address[](5); + address[] memory vaults = new address[](operators.length); + + for (uint256 i = 0; i < operators.length; i++) { + operators[i] = address(uint160(i) + 0x1000); + _createOperator(operators[i]); + vaults[i] = _createVaultForOperator(operators[i]); + } + + _depositFromInVault(owner, vaults[0], 1_000); + _depositFromInVault(owner, vaults[1], 2_000); + _depositFromInVault(owner, vaults[2], 1_000); + _depositFromInVault(owner, vaults[3], 5_000); + _depositFromInVault(owner, vaults[4], 1_000); + + vm.warp(vm.getBlockTimestamp() + 1000); + + vm.expectRevert(abi.encodeWithSelector(Middleware.IncorrectTimestamp.selector)); + middleware.makeElectionAt(uint48(vm.getBlockTimestamp()), 10); + + vm.expectRevert(); + middleware.makeElectionAt(uint48(vm.getBlockTimestamp()) - 1, 0); + + { + address[] memory res = middleware.makeElectionAt(uint48(vm.getBlockTimestamp() - 1), 1); + assertEq(res.length, 1); + assertEq(res[0], operators[3]); + } + + { + address[] memory res = middleware.makeElectionAt(uint48(vm.getBlockTimestamp() - 1), 2); + assertEq(res.length, 2); + assertEq(res[0], operators[3]); + assertEq(res[1], operators[1]); + } + + { + address[] memory res = middleware.makeElectionAt(uint48(vm.getBlockTimestamp() - 1), 3); + assertEq(res.length, 3); + assertEq(res[0], operators[3]); + assertEq(res[1], operators[1]); + assert(res[2] == operators[0] || res[2] == operators[2] || res[2] == operators[4]); + } + + { + address[] memory res = middleware.makeElectionAt(uint48(vm.getBlockTimestamp() - 1), 4); + assertEq(res.length, 4); + assertEq(res[0], operators[3]); + assertEq(res[1], operators[1]); + assert(res[2] == operators[0] || res[2] == operators[2] || res[2] == operators[4]); + assert((res[3] == operators[3] || res[3] == operators[2] || res[3] == operators[4]) && res[3] != res[2]); + } + + { + address[] memory res = middleware.makeElectionAt(uint48(vm.getBlockTimestamp() - 1), 5); + assertEq(res.length, operators.length); + // In that case not sorted by stake + for (uint256 i; i < operators.length; i++) { + assertEq(res[i], operators[i]); + } + } + + { + address[] memory res = middleware.makeElectionAt(uint48(vm.getBlockTimestamp() - 1), 6); + assertEq(res.length, operators.length); + // In that case not sorted by stake + for (uint256 i; i < operators.length; i++) { + assertEq(res[i], operators[i]); + } + } + } + // TODO: split to multiple tests function test_registerOperator() public { // Register operator @@ -452,8 +528,8 @@ contract MiddlewareTest is Test { operator1 = address(0x1); operator2 = address(0x2); - _registerOperator(operator1); - _registerOperator(operator2); + _createOperator(operator1); + _createOperator(operator2); vault1 = _createVaultForOperator(operator1); vault2 = _createVaultForOperator(operator2); @@ -536,7 +612,7 @@ contract MiddlewareTest is Test { vm.stopPrank(); } - function _registerOperator(address operator) private { + function _createOperator(address operator) internal { vm.startPrank(operator); sym.operatorRegistry().registerOperator(); sym.operatorNetworkOptInService().optIn(address(middleware)); @@ -571,7 +647,7 @@ contract MiddlewareTest is Test { (vault,,) = sym.vaultConfigurator().create( IVaultConfigurator.InitParams({ - version: sym.vaultFactory().lastVersion(), + version: 1, owner: operator, vaultParams: abi.encode( IVault.InitParams({ From 9cb9b7105bfea5f7c91e23af2e80416299ff5c5d Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 27 Nov 2024 15:10:23 +0100 Subject: [PATCH 37/43] fix versions --- .gitmodules | 7 +++++-- ethexe/contracts/.vscode/settings.json | 4 ++-- ethexe/contracts/lib/openzeppelin-contracts | 2 +- ethexe/contracts/lib/openzeppelin-contracts-upgradeable | 2 +- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/.gitmodules b/.gitmodules index a2dd5d9bf4d..c9d9e6723e1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -3,13 +3,16 @@ url = https://github.com/foundry-rs/forge-std [submodule "ethexe/contracts/lib/openzeppelin-contracts"] path = ethexe/contracts/lib/openzeppelin-contracts - url = https://github.com/OpenZeppelin/openzeppelin-contracts + url = https://github.com/OpenZeppelin/openzeppelin-contracts + tag = "v5.1.0" [submodule "ethexe/contracts/lib/openzeppelin-foundry-upgrades"] path = ethexe/contracts/lib/openzeppelin-foundry-upgrades - url = https://github.com/OpenZeppelin/openzeppelin-foundry-upgrades + url = https://github.com/OpenZeppelin/openzeppelin-foundry-upgrades + tag = "v5.1.0" [submodule "ethexe/contracts/lib/openzeppelin-contracts-upgradeable"] path = ethexe/contracts/lib/openzeppelin-contracts-upgradeable url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable + tag = "v0.3.6" [submodule "ethexe/contracts/lib/symbiotic-core"] path = ethexe/contracts/lib/symbiotic-core url = https://github.com/grishasobol/symbiotic-core diff --git a/ethexe/contracts/.vscode/settings.json b/ethexe/contracts/.vscode/settings.json index 7f62fe68c32..544c20a4fc3 100644 --- a/ethexe/contracts/.vscode/settings.json +++ b/ethexe/contracts/.vscode/settings.json @@ -6,5 +6,5 @@ "editor.defaultFormatter": "JuanBlanco.solidity" }, "solidity.formatter": "forge", - "solidity.compileUsingRemoteVersion": "v0.8.26" -} + "solidity.compileUsingRemoteVersion": "v0.8.28" +} \ No newline at end of file diff --git a/ethexe/contracts/lib/openzeppelin-contracts b/ethexe/contracts/lib/openzeppelin-contracts index 0df841d2d75..fdf7012d3b1 160000 --- a/ethexe/contracts/lib/openzeppelin-contracts +++ b/ethexe/contracts/lib/openzeppelin-contracts @@ -1 +1 @@ -Subproject commit 0df841d2d75352786532e9e26f400efdef78d86e +Subproject commit fdf7012d3b1559f4a149e150b0dec5142279026c diff --git a/ethexe/contracts/lib/openzeppelin-contracts-upgradeable b/ethexe/contracts/lib/openzeppelin-contracts-upgradeable index 569efd6fd99..9a38ce77f25 160000 --- a/ethexe/contracts/lib/openzeppelin-contracts-upgradeable +++ b/ethexe/contracts/lib/openzeppelin-contracts-upgradeable @@ -1 +1 @@ -Subproject commit 569efd6fd9906356fb0430f747a38a27e1865b10 +Subproject commit 9a38ce77f257a49344b8463db293e17ce44d30a6 From 962d8adf048a4c37b0ba69db01897928695938aa Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 27 Nov 2024 15:12:54 +0100 Subject: [PATCH 38/43] topup version solc in toml --- ethexe/contracts/foundry.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethexe/contracts/foundry.toml b/ethexe/contracts/foundry.toml index 18325d2be28..9bce0665b24 100644 --- a/ethexe/contracts/foundry.toml +++ b/ethexe/contracts/foundry.toml @@ -1,5 +1,5 @@ [profile.default] -solc_version = "0.8.26" +solc_version = "0.8.28" src = "src" out = "out" libs = ["lib"] From 03a8e63b6645bc40142079f75ebfc852cc59b46d Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 27 Nov 2024 15:14:42 +0100 Subject: [PATCH 39/43] fix tabs --- .gitmodules | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.gitmodules b/.gitmodules index c9d9e6723e1..fb6a6f011ae 100644 --- a/.gitmodules +++ b/.gitmodules @@ -3,16 +3,16 @@ url = https://github.com/foundry-rs/forge-std [submodule "ethexe/contracts/lib/openzeppelin-contracts"] path = ethexe/contracts/lib/openzeppelin-contracts - url = https://github.com/OpenZeppelin/openzeppelin-contracts - tag = "v5.1.0" + url = https://github.com/OpenZeppelin/openzeppelin-contracts + tag = "v5.1.0" [submodule "ethexe/contracts/lib/openzeppelin-foundry-upgrades"] path = ethexe/contracts/lib/openzeppelin-foundry-upgrades - url = https://github.com/OpenZeppelin/openzeppelin-foundry-upgrades - tag = "v5.1.0" + url = https://github.com/OpenZeppelin/openzeppelin-foundry-upgrades + tag = "v5.1.0" [submodule "ethexe/contracts/lib/openzeppelin-contracts-upgradeable"] path = ethexe/contracts/lib/openzeppelin-contracts-upgradeable url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable - tag = "v0.3.6" + tag = "v0.3.6" [submodule "ethexe/contracts/lib/symbiotic-core"] path = ethexe/contracts/lib/symbiotic-core url = https://github.com/grishasobol/symbiotic-core From 55938e32a764c16473fb90d5765d5ca96f300ebd Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 27 Nov 2024 16:10:34 +0100 Subject: [PATCH 40/43] add tag for forge-std --- .gitmodules | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitmodules b/.gitmodules index fb6a6f011ae..b11ed6e8e0b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,7 @@ [submodule "ethexe/contracts/lib/forge-std"] path = ethexe/contracts/lib/forge-std url = https://github.com/foundry-rs/forge-std + tag = "v1.9.4" [submodule "ethexe/contracts/lib/openzeppelin-contracts"] path = ethexe/contracts/lib/openzeppelin-contracts url = https://github.com/OpenZeppelin/openzeppelin-contracts From adc230f337b7789b13fca8cfd1996adeba0cfd01 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 27 Nov 2024 16:33:20 +0100 Subject: [PATCH 41/43] tag -> branch in submodules --- .gitmodules | 8 ++++---- ethexe/contracts/lib/forge-std | 2 +- ethexe/contracts/lib/openzeppelin-contracts | 2 +- ethexe/contracts/lib/openzeppelin-contracts-upgradeable | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.gitmodules b/.gitmodules index b11ed6e8e0b..bf4ed3aba63 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,19 +1,19 @@ [submodule "ethexe/contracts/lib/forge-std"] path = ethexe/contracts/lib/forge-std url = https://github.com/foundry-rs/forge-std - tag = "v1.9.4" + branch = "v1" [submodule "ethexe/contracts/lib/openzeppelin-contracts"] path = ethexe/contracts/lib/openzeppelin-contracts url = https://github.com/OpenZeppelin/openzeppelin-contracts - tag = "v5.1.0" + branch = "release-v5.1" [submodule "ethexe/contracts/lib/openzeppelin-foundry-upgrades"] path = ethexe/contracts/lib/openzeppelin-foundry-upgrades url = https://github.com/OpenZeppelin/openzeppelin-foundry-upgrades - tag = "v5.1.0" + branch = "main" [submodule "ethexe/contracts/lib/openzeppelin-contracts-upgradeable"] path = ethexe/contracts/lib/openzeppelin-contracts-upgradeable url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable - tag = "v0.3.6" + branch = "release-v5.1" [submodule "ethexe/contracts/lib/symbiotic-core"] path = ethexe/contracts/lib/symbiotic-core url = https://github.com/grishasobol/symbiotic-core diff --git a/ethexe/contracts/lib/forge-std b/ethexe/contracts/lib/forge-std index 83c5d212a01..1eea5bae12a 160000 --- a/ethexe/contracts/lib/forge-std +++ b/ethexe/contracts/lib/forge-std @@ -1 +1 @@ -Subproject commit 83c5d212a01f8950727da4095cdfe2654baccb5b +Subproject commit 1eea5bae12ae557d589f9f0f0edae2faa47cb262 diff --git a/ethexe/contracts/lib/openzeppelin-contracts b/ethexe/contracts/lib/openzeppelin-contracts index fdf7012d3b1..69c8def5f22 160000 --- a/ethexe/contracts/lib/openzeppelin-contracts +++ b/ethexe/contracts/lib/openzeppelin-contracts @@ -1 +1 @@ -Subproject commit fdf7012d3b1559f4a149e150b0dec5142279026c +Subproject commit 69c8def5f222ff96f2b5beff05dfba996368aa79 diff --git a/ethexe/contracts/lib/openzeppelin-contracts-upgradeable b/ethexe/contracts/lib/openzeppelin-contracts-upgradeable index 9a38ce77f25..fa525310e45 160000 --- a/ethexe/contracts/lib/openzeppelin-contracts-upgradeable +++ b/ethexe/contracts/lib/openzeppelin-contracts-upgradeable @@ -1 +1 @@ -Subproject commit 9a38ce77f257a49344b8463db293e17ce44d30a6 +Subproject commit fa525310e45f91eb20a6d3baa2644be8e0adba31 From a5a456af3b352b884ef7a54249490e874031206b Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 27 Nov 2024 17:00:53 +0100 Subject: [PATCH 42/43] fix grammatic --- ethexe/contracts/src/Middleware.sol | 34 +++++++++++++------------- ethexe/contracts/test/Middleware.t.sol | 16 ++++++------ 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index b6a3190d625..ee2fd915733 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -20,10 +20,10 @@ import {MapWithTimeData} from "./libraries/MapWithTimeData.sol"; // TODO (asap): document all functions and variables // TODO (asap): implement rewards distribution -// TODO (asap): add vaidators commission +// TODO (asap): add validators commission // TODO: implement forced operators removal // TODO: implement forced vaults removal -// TODO: use hints for simbiotic calls +// TODO: use hints for symbiotic calls contract Middleware { using EnumerableMap for EnumerableMap.AddressToUintMap; using MapWithTimeData for EnumerableMap.AddressToUintMap; @@ -47,8 +47,8 @@ contract Middleware { error VetoDurationTooShort(); error VetoDurationTooLong(); error IncompatibleVaultVersion(); - error NotRegistredVault(); - error NotRegistredOperator(); + error NotRegisteredVault(); + error NotRegisteredOperator(); error RoleMismatch(); error ResolverMismatch(); error ResolverSetDelayTooLong(); @@ -72,7 +72,7 @@ contract Middleware { struct Config { uint48 eraDuration; uint48 minVaultEpochDuration; - uint48 operatoraGracePeriod; + uint48 operatorGracePeriod; uint48 vaultGracePeriod; uint48 minVetoDuration; uint48 minSlashExecutionDelay; @@ -94,7 +94,7 @@ contract Middleware { uint48 public immutable eraDuration; uint48 public immutable minVaultEpochDuration; - uint48 public immutable operatoraGracePeriod; + uint48 public immutable operatorGracePeriod; uint48 public immutable vaultGracePeriod; uint48 public immutable minVetoDuration; uint48 public immutable minSlashExecutionDelay; @@ -121,7 +121,7 @@ contract Middleware { eraDuration = cfg.eraDuration; minVaultEpochDuration = cfg.minVaultEpochDuration; - operatoraGracePeriod = cfg.operatoraGracePeriod; + operatorGracePeriod = cfg.operatorGracePeriod; vaultGracePeriod = cfg.vaultGracePeriod; minVetoDuration = cfg.minVetoDuration; minSlashExecutionDelay = cfg.minSlashExecutionDelay; @@ -175,7 +175,7 @@ contract Middleware { function unregisterOperator(address operator) external { (, uint48 disabledTime) = operators.getTimes(operator); - if (disabledTime == 0 || Time.timestamp() < disabledTime + operatoraGracePeriod) { + if (disabledTime == 0 || Time.timestamp() < disabledTime + operatorGracePeriod) { revert OperatorGracePeriodNotPassed(); } @@ -328,7 +328,7 @@ contract Middleware { stake = _collectOperatorStakeFromVaultsAt(operator, ts); } - // TODO: change return siggnature + // TODO: change return signature function getActiveOperatorsStakeAt(uint48 ts) public view @@ -362,14 +362,14 @@ contract Middleware { for (uint256 i; i < data.length; ++i) { SlashData calldata slashData = data[i]; if (!operators.contains(slashData.operator)) { - revert NotRegistredOperator(); + revert NotRegisteredOperator(); } for (uint256 j; j < slashData.vaults.length; ++j) { VaultSlashData calldata vaultData = slashData.vaults[j]; if (!vaults.contains(vaultData.vault)) { - revert NotRegistredVault(); + revert NotRegisteredVault(); } address slasher = IVault(vaultData.vault).slasher(); @@ -385,7 +385,7 @@ contract Middleware { SlashIdentifier calldata slash = slashes[i]; if (!vaults.contains(slash.vault)) { - revert NotRegistredVault(); + revert NotRegisteredVault(); } IVetoSlasher(IVault(slash.vault).slasher()).executeSlash(slash.index, new bytes(0)); @@ -435,7 +435,7 @@ contract Middleware { // Operator grace period cannot be smaller than minimum vaults epoch duration. // Otherwise, it would be impossible to do slash in the next era sometimes. require( - cfg.operatoraGracePeriod >= cfg.minVaultEpochDuration, + cfg.operatorGracePeriod >= cfg.minVaultEpochDuration, "Operator grace period must be bigger than min vaults epoch duration" ); @@ -449,8 +449,8 @@ contract Middleware { // Give some time for the resolvers to veto slashes. require(cfg.minVetoDuration > 0, "Veto duration cannot be zero"); - // Simbiotic guarantees that any veto slasher has veto duration less than vault epoch duration. - // But we also want to guaratie that there is some time to execute the slash. + // Symbiotic guarantees that any veto slasher has veto duration less than vault epoch duration. + // But we also want to guarantee that there is some time to execute the slash. require(cfg.minSlashExecutionDelay > 0, "Min slash execution delay cannot be zero"); require( cfg.minVetoDuration + cfg.minSlashExecutionDelay <= cfg.minVaultEpochDuration, @@ -458,7 +458,7 @@ contract Middleware { ); // In order to be able to change resolver, we need to limit max delay in epochs. - // `3` - is minimal number of epochs, which is simbiotic veto slasher impl restrictions. + // `3` - is minimal number of epochs, which is symbiotic veto slasher impl restrictions. require(cfg.maxResolverSetEpochsDelay >= 3, "Resolver set epochs delay must be at least 3"); } @@ -469,7 +469,7 @@ contract Middleware { revert IncorrectTimestamp(); } - uint48 gracePeriod = operatoraGracePeriod < vaultGracePeriod ? operatoraGracePeriod : vaultGracePeriod; + uint48 gracePeriod = operatorGracePeriod < vaultGracePeriod ? operatorGracePeriod : vaultGracePeriod; if (ts + gracePeriod <= Time.timestamp()) { revert IncorrectTimestamp(); } diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index e922b663eb2..75b0a9d6959 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -30,7 +30,7 @@ contract MiddlewareTest is Test, POCBaseTest { WrappedVara public wrappedVara; function setUp() public override { - // For correct symbiotic work with time artitmeticks + // For correct symbiotic work with time arithmetics vm.warp(eraDuration * 100); // set up the symbiotic ecosystem @@ -51,7 +51,7 @@ contract MiddlewareTest is Test, POCBaseTest { Middleware.Config memory cfg = Middleware.Config({ eraDuration: eraDuration, minVaultEpochDuration: eraDuration * 2, - operatoraGracePeriod: eraDuration * 2, + operatorGracePeriod: eraDuration * 2, vaultGracePeriod: eraDuration * 2, minVetoDuration: eraDuration / 3, minSlashExecutionDelay: eraDuration / 3, @@ -163,7 +163,7 @@ contract MiddlewareTest is Test, POCBaseTest { vm.expectRevert(abi.encodeWithSelector(MapWithTimeData.AlreadyAdded.selector)); middleware.registerOperator(); - // Try to register abother operator without registering it in symbiotic + // Try to register another operator without registering it in symbiotic vm.startPrank(address(0x2)); vm.expectRevert(abi.encodeWithSelector(Middleware.OperatorDoesNotExist.selector)); middleware.registerOperator(); @@ -397,7 +397,7 @@ contract MiddlewareTest is Test, POCBaseTest { // Try to request slash from unknown operator vm.warp(vm.getBlockTimestamp() + 1); _requestSlash( - address(0xdead), uint48(vm.getBlockTimestamp() - 1), vault1, 100, Middleware.NotRegistredOperator.selector + address(0xdead), uint48(vm.getBlockTimestamp() - 1), vault1, 100, Middleware.NotRegisteredOperator.selector ); } @@ -406,7 +406,7 @@ contract MiddlewareTest is Test, POCBaseTest { // Try to request slash from unknown vault _requestSlash( - operator1, uint48(vm.getBlockTimestamp() - 1), address(0xdead), 100, Middleware.NotRegistredVault.selector + operator1, uint48(vm.getBlockTimestamp() - 1), address(0xdead), 100, Middleware.NotRegisteredVault.selector ); } @@ -459,7 +459,7 @@ contract MiddlewareTest is Test, POCBaseTest { function test_slashTwoOperatorsTwoVaults() external { (address operator1, address operator2, address vault1, address vault2,,) = _prepareTwoOperators(); - // Request slases for 2 operators with corresponding vaults + // Request slashes for 2 operators with corresponding vaults Middleware.VaultSlashData[] memory operator1_vaults = new Middleware.VaultSlashData[](1); operator1_vaults[0] = Middleware.VaultSlashData({vault: vault1, amount: 10}); @@ -504,14 +504,14 @@ contract MiddlewareTest is Test, POCBaseTest { IVetoSlasher(slasher).vetoSlash(slashIndex, new bytes(0)); } - function test_slashExecutionUnregistredVault() external { + function test_slashExecutionUnregisteredVault() external { (address operator1,, address vault1,,,) = _prepareTwoOperators(); // Make slash request for operator1 in vault1 uint256 slashIndex = _requestSlash(operator1, uint48(vm.getBlockTimestamp() - 1), vault1, 100, 0); // Try to execute slash for unknown vault - vm.expectRevert(Middleware.NotRegistredVault.selector); + vm.expectRevert(Middleware.NotRegisteredVault.selector); _executeSlash(address(0xdead), slashIndex); } From a40ddddf4b50625aee7cdef40980a6137108337d Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Mon, 2 Dec 2024 18:07:04 +0100 Subject: [PATCH 43/43] assert -> assertTrue --- ethexe/contracts/test/Middleware.t.sol | 6 +++--- ethexe/contracts/test/Router.t.sol | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index 75b0a9d6959..ad0a4b152ee 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -120,7 +120,7 @@ contract MiddlewareTest is Test, POCBaseTest { assertEq(res.length, 3); assertEq(res[0], operators[3]); assertEq(res[1], operators[1]); - assert(res[2] == operators[0] || res[2] == operators[2] || res[2] == operators[4]); + assertTrue(res[2] == operators[0] || res[2] == operators[2] || res[2] == operators[4]); } { @@ -128,8 +128,8 @@ contract MiddlewareTest is Test, POCBaseTest { assertEq(res.length, 4); assertEq(res[0], operators[3]); assertEq(res[1], operators[1]); - assert(res[2] == operators[0] || res[2] == operators[2] || res[2] == operators[4]); - assert((res[3] == operators[3] || res[3] == operators[2] || res[3] == operators[4]) && res[3] != res[2]); + assertTrue(res[2] == operators[0] || res[2] == operators[2] || res[2] == operators[4]); + assertTrue((res[3] == operators[3] || res[3] == operators[2] || res[3] == operators[4]) && res[3] != res[2]); } { diff --git a/ethexe/contracts/test/Router.t.sol b/ethexe/contracts/test/Router.t.sol index 9e685766a37..ece9a2e8b0e 100644 --- a/ethexe/contracts/test/Router.t.sol +++ b/ethexe/contracts/test/Router.t.sol @@ -75,7 +75,7 @@ contract RouterTest is Test { assertEq(router.validators(), validators); assertEq(router.signingThresholdPercentage(), 6666); - assert(router.areValidators(validators)); + assertTrue(router.areValidators(validators)); } function test_ping() public {