From 5a6ed042feef6973177e3b1b093c5a6e64039de4 Mon Sep 17 00:00:00 2001 From: Shahul Hameed <10547529+shahthepro@users.noreply.github.com> Date: Mon, 27 Nov 2023 20:13:24 +0530 Subject: [PATCH] Rebrand OGV contracts and tweak Governance parameters (#406) --- .github/workflows/main.yaml | 3 + brownie-config.yaml | 1 + ...140d8D1815f6f92FD58DF0dacB758276fFFDB.json | 1 + ...e7DAcC16c3807E66FEdD4F7c65f26B1fEE558.json | 1 + build/deployments/map.json | 10 +-- common.py | 67 +++++++++++++---- contracts/GovernanceToken.sol | 4 ++ contracts/OgvStaking.sol | 2 +- scripts/deploy_005_rebranding.py | 72 +++++++++++++++++++ tests/test_token.py | 23 +++--- 10 files changed, 151 insertions(+), 33 deletions(-) create mode 100644 build/deployments/1/0x190140d8D1815f6f92FD58DF0dacB758276fFFDB.json create mode 100644 build/deployments/1/0xFd8e7DAcC16c3807E66FEdD4F7c65f26B1fEE558.json create mode 100644 scripts/deploy_005_rebranding.py diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 0f3a265e..fc5063fb 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -78,6 +78,9 @@ jobs: - name: Install Requirements run: pip install -r requirements.txt + + - name: Create .env + run: touch .env - name: Run tests run: brownie test --network hardhat diff --git a/brownie-config.yaml b/brownie-config.yaml index 3dc6496a..82f7f3be 100644 --- a/brownie-config.yaml +++ b/brownie-config.yaml @@ -1,3 +1,4 @@ +dotenv: .env dependencies: - OpenZeppelin/openzeppelin-contracts@4.6.0 - OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0 diff --git a/build/deployments/1/0x190140d8D1815f6f92FD58DF0dacB758276fFFDB.json b/build/deployments/1/0x190140d8D1815f6f92FD58DF0dacB758276fFFDB.json new file mode 100644 index 00000000..241885df --- /dev/null +++ b/build/deployments/1/0x190140d8D1815f6f92FD58DF0dacB758276fFFDB.json @@ -0,0 +1 @@ +{"abi": [{"inputs": [], "stateMutability": "nonpayable", "type": "constructor", "name": "constructor"}, {"anonymous": false, "inputs": [{"indexed": false, "internalType": "address", "name": "previousAdmin", "type": "address"}, {"indexed": false, "internalType": "address", "name": "newAdmin", "type": "address"}], "name": "AdminChanged", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "address", "name": "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": [{"indexed": true, "internalType": "address", "name": "beacon", "type": "address"}], "name": "BeaconUpgraded", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": false, "internalType": "uint8", "name": "version", "type": "uint8"}], "name": "Initialized", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "address", "name": "previousOwner", "type": "address"}, {"indexed": true, "internalType": "address", "name": "newOwner", "type": "address"}], "name": "OwnershipTransferred", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32"}, {"indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32"}, {"indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32"}], "name": "RoleAdminChanged", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32"}, {"indexed": true, "internalType": "address", "name": "account", "type": "address"}, {"indexed": true, "internalType": "address", "name": "sender", "type": "address"}], "name": "RoleGranted", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32"}, {"indexed": true, "internalType": "address", "name": "account", "type": "address"}, {"indexed": true, "internalType": "address", "name": "sender", "type": "address"}], "name": "RoleRevoked", "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"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "address", "name": "implementation", "type": "address"}], "name": "Upgraded", "type": "event"}, {"inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "MINTER_ROLE", "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": "amount", "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": "amount", "type": "uint256"}], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "account", "type": "address"}, {"internalType": "uint256", "name": "amount", "type": "uint256"}], "name": "burnFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [], "name": "decimals", "outputs": [{"internalType": "uint8", "name": "", "type": "uint8"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "spender", "type": "address"}, {"internalType": "uint256", "name": "subtractedValue", "type": "uint256"}], "name": "decreaseAllowance", "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "bytes32", "name": "role", "type": "bytes32"}], "name": "getRoleAdmin", "outputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "_account", "type": "address"}], "name": "grantAdminRole", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "_account", "type": "address"}], "name": "grantMinterRole", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "bytes32", "name": "role", "type": "bytes32"}, {"internalType": "address", "name": "account", "type": "address"}], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "bytes32", "name": "role", "type": "bytes32"}, {"internalType": "address", "name": "account", "type": "address"}], "name": "hasRole", "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "spender", "type": "address"}, {"internalType": "uint256", "name": "addedValue", "type": "uint256"}], "name": "increaseAllowance", "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [], "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": [], "name": "owner", "outputs": [{"internalType": "address", "name": "", "type": "address"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "proxiableUUID", "outputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "bytes32", "name": "role", "type": "bytes32"}, {"internalType": "address", "name": "account", "type": "address"}], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "bytes32", "name": "role", "type": "bytes32"}, {"internalType": "address", "name": "account", "type": "address"}], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "bytes4", "name": "interfaceId", "type": "bytes4"}], "name": "supportsInterface", "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], "stateMutability": "view", "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": "amount", "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": "amount", "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"}, {"inputs": [{"internalType": "address", "name": "newImplementation", "type": "address"}], "name": "upgradeTo", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "newImplementation", "type": "address"}, {"internalType": "bytes", "name": "data", "type": "bytes"}], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function"}], "allSourcePaths": {"0": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/access/AccessControlUpgradeable.sol", "1": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/access/IAccessControlUpgradeable.sol", "11": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol", "13": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/utils/ContextUpgradeable.sol", "16": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/utils/introspection/ERC165Upgradeable.sol", "17": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/utils/introspection/IERC165Upgradeable.sol", "2": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/access/OwnableUpgradeable.sol", "21": "contracts/GovernanceToken.sol", "3": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/interfaces/draft-IERC1822Upgradeable.sol", "4": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol", "6": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/proxy/utils/Initializable.sol", "7": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/proxy/utils/UUPSUpgradeable.sol", "8": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/token/ERC20/ERC20Upgradeable.sol", "9": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/token/ERC20/IERC20Upgradeable.sol"}, "ast": {"absolutePath": "contracts/GovernanceToken.sol", "exportedSymbols": {"AccessControlUpgradeable": [796], "AddressUpgradeable": [2613], "ContextUpgradeable": [2123], "ERC165Upgradeable": [2370], "ERC1967UpgradeUpgradeable": [2992], "ERC20Upgradeable": [1809], "IAccessControlUpgradeable": [2081], "IBeaconUpgradeable": [3352], "IERC165Upgradeable": [3342], "IERC1822ProxiableUpgradeable": [2623], "IERC20MetadataUpgradeable": [3095], "IERC20Upgradeable": [3070], "Initializable": [1062], "OriginDollarGovernance": [150], "OwnableUpgradeable": [920], "StorageSlotUpgradeable": [3412], "StringsUpgradeable": [2326], "UUPSUpgradeable": [1198]}, "id": 151, "license": "MIT", "nodeType": "SourceUnit", "nodes": [{"id": 1, "literals": ["solidity", "^", "0.8", ".4"], "nodeType": "PragmaDirective", "src": "32:23:21"}, {"absolutePath": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/token/ERC20/ERC20Upgradeable.sol", "file": "OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/token/ERC20/ERC20Upgradeable.sol", "id": 2, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", "scope": 151, "sourceUnit": 1810, "src": "57:106:21", "symbolAliases": [], "unitAlias": ""}, {"absolutePath": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/access/OwnableUpgradeable.sol", "file": "OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/access/OwnableUpgradeable.sol", "id": 3, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", "scope": 151, "sourceUnit": 921, "src": "164:103:21", "symbolAliases": [], "unitAlias": ""}, {"absolutePath": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/access/AccessControlUpgradeable.sol", "file": "OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/access/AccessControlUpgradeable.sol", "id": 4, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", "scope": 151, "sourceUnit": 797, "src": "268:109:21", "symbolAliases": [], "unitAlias": ""}, {"absolutePath": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/proxy/utils/Initializable.sol", "file": "OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/proxy/utils/Initializable.sol", "id": 5, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", "scope": 151, "sourceUnit": 1063, "src": "378:103:21", "symbolAliases": [], "unitAlias": ""}, {"absolutePath": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/proxy/utils/UUPSUpgradeable.sol", "file": "OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/proxy/utils/UUPSUpgradeable.sol", "id": 6, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", "scope": 151, "sourceUnit": 1199, "src": "482:105:21", "symbolAliases": [], "unitAlias": ""}, {"abstract": false, "baseContracts": [{"baseName": {"id": 8, "name": "Initializable", "nameLocations": ["685:13:21"], "nodeType": "IdentifierPath", "referencedDeclaration": 1062, "src": "685:13:21"}, "id": 9, "nodeType": "InheritanceSpecifier", "src": "685:13:21"}, {"baseName": {"id": 10, "name": "ERC20Upgradeable", "nameLocations": ["704:16:21"], "nodeType": "IdentifierPath", "referencedDeclaration": 1809, "src": "704:16:21"}, "id": 11, "nodeType": "InheritanceSpecifier", "src": "704:16:21"}, {"baseName": {"id": 12, "name": "OwnableUpgradeable", "nameLocations": ["726:18:21"], "nodeType": "IdentifierPath", "referencedDeclaration": 920, "src": "726:18:21"}, "id": 13, "nodeType": "InheritanceSpecifier", "src": "726:18:21"}, {"baseName": {"id": 14, "name": "UUPSUpgradeable", "nameLocations": ["750:15:21"], "nodeType": "IdentifierPath", "referencedDeclaration": 1198, "src": "750:15:21"}, "id": 15, "nodeType": "InheritanceSpecifier", "src": "750:15:21"}, {"baseName": {"id": 16, "name": "AccessControlUpgradeable", "nameLocations": ["771:24:21"], "nodeType": "IdentifierPath", "referencedDeclaration": 796, "src": "771:24:21"}, "id": 17, "nodeType": "InheritanceSpecifier", "src": "771:24:21"}], "canonicalName": "OriginDollarGovernance", "contractDependencies": [], "contractKind": "contract", "documentation": {"id": 7, "nodeType": "StructuredDocumentation", "src": "589:57:21", "text": "@custom:security-contact security@originprotocol.com"}, "fullyImplemented": true, "id": 150, "linearizedBaseContracts": [150, 796, 2370, 3342, 2081, 1198, 2992, 2623, 920, 1809, 3095, 3070, 2123, 1062], "name": "OriginDollarGovernance", "nameLocation": "655:22:21", "nodeType": "ContractDefinition", "nodes": [{"constant": true, "functionSelector": "d5391393", "id": 22, "mutability": "constant", "name": "MINTER_ROLE", "nameLocation": "826:11:21", "nodeType": "VariableDeclaration", "scope": 150, "src": "802:62:21", "stateVariable": true, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_bytes32", "typeString": "bytes32"}, "typeName": {"id": 18, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "802:7:21", "typeDescriptions": {"typeIdentifier": "t_bytes32", "typeString": "bytes32"}}, "value": {"arguments": [{"hexValue": "4d494e5445525f524f4c45", "id": 20, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "850:13:21", "typeDescriptions": {"typeIdentifier": "t_stringliteral_9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6", "typeString": "literal_string \"MINTER_ROLE\""}, "value": "MINTER_ROLE"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_stringliteral_9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6", "typeString": "literal_string \"MINTER_ROLE\""}], "id": 19, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -8, "src": "840:9:21", "typeDescriptions": {"typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)"}}, "id": 21, "isConstant": false, "isLValue": false, "isPure": true, "kind": "functionCall", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "840:24:21", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_bytes32", "typeString": "bytes32"}}, "visibility": "public"}, {"body": {"id": 28, "nodeType": "Block", "src": "950:2:21", "statements": []}, "documentation": {"id": 23, "nodeType": "StructuredDocumentation", "src": "871:48:21", "text": "@custom:oz-upgrades-unsafe-allow constructor"}, "id": 29, "implemented": true, "kind": "constructor", "modifiers": [{"id": 26, "kind": "modifierInvocation", "modifierName": {"id": 25, "name": "initializer", "nameLocations": ["938:11:21"], "nodeType": "IdentifierPath", "referencedDeclaration": 964, "src": "938:11:21"}, "nodeType": "ModifierInvocation", "src": "938:11:21"}], "name": "", "nameLocation": "-1:-1:-1", "nodeType": "FunctionDefinition", "parameters": {"id": 24, "nodeType": "ParameterList", "parameters": [], "src": "935:2:21"}, "returnParameters": {"id": 27, "nodeType": "ParameterList", "parameters": [], "src": "950:0:21"}, "scope": 150, "src": "924:28:21", "stateMutability": "nonpayable", "virtual": false, "visibility": "public"}, {"body": {"id": 56, "nodeType": "Block", "src": "999:181:21", "statements": [{"expression": {"arguments": [{"hexValue": "4f726967696e20446f6c6c617220476f7665726e616e6365", "id": 35, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "1022:26:21", "typeDescriptions": {"typeIdentifier": "t_stringliteral_51f794512daf582e9de48f647c004f3e933449045398c64f605d5420cfe102ee", "typeString": "literal_string \"Origin Dollar Governance\""}, "value": "Origin Dollar Governance"}, {"hexValue": "4f4756", "id": 36, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "1050:5:21", "typeDescriptions": {"typeIdentifier": "t_stringliteral_449fc9560ae893119c61ddc9123486b6850f56987dce8f0fdd58b908b88495e7", "typeString": "literal_string \"OGV\""}, "value": "OGV"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_stringliteral_51f794512daf582e9de48f647c004f3e933449045398c64f605d5420cfe102ee", "typeString": "literal_string \"Origin Dollar Governance\""}, {"typeIdentifier": "t_stringliteral_449fc9560ae893119c61ddc9123486b6850f56987dce8f0fdd58b908b88495e7", "typeString": "literal_string \"OGV\""}], "id": 34, "name": "__ERC20_init", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1245, "src": "1009:12:21", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$", "typeString": "function (string memory,string memory)"}}, "id": 37, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "1009:47:21", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 38, "nodeType": "ExpressionStatement", "src": "1009:47:21"}, {"expression": {"arguments": [], "expression": {"argumentTypes": [], "id": 39, "name": "__Ownable_init", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 823, "src": "1066:14:21", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", "typeString": "function ()"}}, "id": 40, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "1066:16:21", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 41, "nodeType": "ExpressionStatement", "src": "1066:16:21"}, {"expression": {"arguments": [], "expression": {"argumentTypes": [], "id": 42, "name": "__UUPSUpgradeable_init", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1080, "src": "1092:22:21", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", "typeString": "function ()"}}, "id": 43, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "1092:24:21", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 44, "nodeType": "ExpressionStatement", "src": "1092:24:21"}, {"expression": {"arguments": [{"expression": {"id": 46, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "1133:3:21", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 47, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberLocation": "1137:6:21", "memberName": "sender", "nodeType": "MemberAccess", "src": "1133:10:21", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 53, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"hexValue": "31303030303030303030", "id": 48, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1145:10:21", "typeDescriptions": {"typeIdentifier": "t_rational_1000000000_by_1", "typeString": "int_const 1000000000"}, "value": "1000000000"}, "nodeType": "BinaryOperation", "operator": "*", "rightExpression": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 52, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"hexValue": "3130", "id": 49, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1158:2:21", "typeDescriptions": {"typeIdentifier": "t_rational_10_by_1", "typeString": "int_const 10"}, "value": "10"}, "nodeType": "BinaryOperation", "operator": "**", "rightExpression": {"arguments": [], "expression": {"argumentTypes": [], "id": 50, "name": "decimals", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1293, "src": "1162:8:21", "typeDescriptions": {"typeIdentifier": "t_function_internal_view$__$returns$_t_uint8_$", "typeString": "function () view returns (uint8)"}}, "id": 51, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "1162:10:21", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint8", "typeString": "uint8"}}, "src": "1158:14:21", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "1145:27:21", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 45, "name": "_mint", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1621, "src": "1127:5:21", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)"}}, "id": 54, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "1127:46:21", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 55, "nodeType": "ExpressionStatement", "src": "1127:46:21"}]}, "functionSelector": "8129fc1c", "id": 57, "implemented": true, "kind": "function", "modifiers": [{"id": 32, "kind": "modifierInvocation", "modifierName": {"id": 31, "name": "initializer", "nameLocations": ["987:11:21"], "nodeType": "IdentifierPath", "referencedDeclaration": 964, "src": "987:11:21"}, "nodeType": "ModifierInvocation", "src": "987:11:21"}], "name": "initialize", "nameLocation": "967:10:21", "nodeType": "FunctionDefinition", "parameters": {"id": 30, "nodeType": "ParameterList", "parameters": [], "src": "977:2:21"}, "returnParameters": {"id": 33, "nodeType": "ParameterList", "parameters": [], "src": "999:0:21"}, "scope": 150, "src": "958:222:21", "stateMutability": "nonpayable", "virtual": false, "visibility": "public"}, {"body": {"id": 72, "nodeType": "Block", "src": "1257:34:21", "statements": [{"expression": {"arguments": [{"id": 68, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 59, "src": "1273:2:21", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 69, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 61, "src": "1277:6:21", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 67, "name": "_mint", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1621, "src": "1267:5:21", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)"}}, "id": 70, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "1267:17:21", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 71, "nodeType": "ExpressionStatement", "src": "1267:17:21"}]}, "functionSelector": "40c10f19", "id": 73, "implemented": true, "kind": "function", "modifiers": [{"arguments": [{"id": 64, "name": "MINTER_ROLE", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22, "src": "1244:11:21", "typeDescriptions": {"typeIdentifier": "t_bytes32", "typeString": "bytes32"}}], "id": 65, "kind": "modifierInvocation", "modifierName": {"id": 63, "name": "onlyRole", "nameLocations": ["1235:8:21"], "nodeType": "IdentifierPath", "referencedDeclaration": 510, "src": "1235:8:21"}, "nodeType": "ModifierInvocation", "src": "1235:21:21"}], "name": "mint", "nameLocation": "1195:4:21", "nodeType": "FunctionDefinition", "parameters": {"id": 62, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 59, "mutability": "mutable", "name": "to", "nameLocation": "1208:2:21", "nodeType": "VariableDeclaration", "scope": 73, "src": "1200:10:21", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 58, "name": "address", "nodeType": "ElementaryTypeName", "src": "1200:7:21", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}, {"constant": false, "id": 61, "mutability": "mutable", "name": "amount", "nameLocation": "1220:6:21", "nodeType": "VariableDeclaration", "scope": 73, "src": "1212:14:21", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 60, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1212:7:21", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "1199:28:21"}, "returnParameters": {"id": 66, "nodeType": "ParameterList", "parameters": [], "src": "1257:0:21"}, "scope": 150, "src": "1186:105:21", "stateMutability": "nonpayable", "virtual": false, "visibility": "public"}, {"body": {"id": 84, "nodeType": "Block", "src": "1342:44:21", "statements": [{"expression": {"arguments": [{"arguments": [], "expression": {"argumentTypes": [], "id": 79, "name": "_msgSender", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2108, "src": "1358:10:21", "typeDescriptions": {"typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", "typeString": "function () view returns (address)"}}, "id": 80, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "1358:12:21", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 81, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 75, "src": "1372:6:21", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 78, "name": "_burn", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1693, "src": "1352:5:21", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)"}}, "id": 82, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "1352:27:21", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 83, "nodeType": "ExpressionStatement", "src": "1352:27:21"}]}, "functionSelector": "42966c68", "id": 85, "implemented": true, "kind": "function", "modifiers": [], "name": "burn", "nameLocation": "1306:4:21", "nodeType": "FunctionDefinition", "parameters": {"id": 76, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 75, "mutability": "mutable", "name": "amount", "nameLocation": "1319:6:21", "nodeType": "VariableDeclaration", "scope": 85, "src": "1311:14:21", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 74, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1311:7:21", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "1310:16:21"}, "returnParameters": {"id": 77, "nodeType": "ParameterList", "parameters": [], "src": "1342:0:21"}, "scope": 150, "src": "1297:89:21", "stateMutability": "nonpayable", "virtual": true, "visibility": "public"}, {"body": {"id": 104, "nodeType": "Block", "src": "1458:95:21", "statements": [{"expression": {"arguments": [{"id": 93, "name": "account", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 87, "src": "1484:7:21", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"arguments": [], "expression": {"argumentTypes": [], "id": 94, "name": "_msgSender", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2108, "src": "1493:10:21", "typeDescriptions": {"typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", "typeString": "function () view returns (address)"}}, "id": 95, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "1493:12:21", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 96, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 89, "src": "1507:6:21", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 92, "name": "_spendAllowance", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1781, "src": "1468:15:21", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,address,uint256)"}}, "id": 97, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "1468:46:21", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 98, "nodeType": "ExpressionStatement", "src": "1468:46:21"}, {"expression": {"arguments": [{"id": 100, "name": "account", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 87, "src": "1530:7:21", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 101, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 89, "src": "1539:6:21", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 99, "name": "_burn", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1693, "src": "1524:5:21", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)"}}, "id": 102, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "1524:22:21", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 103, "nodeType": "ExpressionStatement", "src": "1524:22:21"}]}, "functionSelector": "79cc6790", "id": 105, "implemented": true, "kind": "function", "modifiers": [], "name": "burnFrom", "nameLocation": "1401:8:21", "nodeType": "FunctionDefinition", "parameters": {"id": 90, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 87, "mutability": "mutable", "name": "account", "nameLocation": "1418:7:21", "nodeType": "VariableDeclaration", "scope": 105, "src": "1410:15:21", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 86, "name": "address", "nodeType": "ElementaryTypeName", "src": "1410:7:21", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}, {"constant": false, "id": 89, "mutability": "mutable", "name": "amount", "nameLocation": "1435:6:21", "nodeType": "VariableDeclaration", "scope": 105, "src": "1427:14:21", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 88, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1427:7:21", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "1409:33:21"}, "returnParameters": {"id": 91, "nodeType": "ParameterList", "parameters": [], "src": "1458:0:21"}, "scope": 150, "src": "1392:161:21", "stateMutability": "nonpayable", "virtual": true, "visibility": "public"}, {"body": {"id": 117, "nodeType": "Block", "src": "1619:50:21", "statements": [{"expression": {"arguments": [{"id": 113, "name": "MINTER_ROLE", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22, "src": "1640:11:21", "typeDescriptions": {"typeIdentifier": "t_bytes32", "typeString": "bytes32"}}, {"id": 114, "name": "_account", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 107, "src": "1653:8:21", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_bytes32", "typeString": "bytes32"}, {"typeIdentifier": "t_address", "typeString": "address"}], "id": 112, "name": "_grantRole", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 759, "src": "1629:10:21", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", "typeString": "function (bytes32,address)"}}, "id": 115, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "1629:33:21", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 116, "nodeType": "ExpressionStatement", "src": "1629:33:21"}]}, "functionSelector": "3dd1eb61", "id": 118, "implemented": true, "kind": "function", "modifiers": [{"id": 110, "kind": "modifierInvocation", "modifierName": {"id": 109, "name": "onlyOwner", "nameLocations": ["1609:9:21"], "nodeType": "IdentifierPath", "referencedDeclaration": 857, "src": "1609:9:21"}, "nodeType": "ModifierInvocation", "src": "1609:9:21"}], "name": "grantMinterRole", "nameLocation": "1568:15:21", "nodeType": "FunctionDefinition", "parameters": {"id": 108, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 107, "mutability": "mutable", "name": "_account", "nameLocation": "1592:8:21", "nodeType": "VariableDeclaration", "scope": 118, "src": "1584:16:21", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 106, "name": "address", "nodeType": "ElementaryTypeName", "src": "1584:7:21", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}], "src": "1583:18:21"}, "returnParameters": {"id": 111, "nodeType": "ParameterList", "parameters": [], "src": "1619:0:21"}, "scope": 150, "src": "1559:110:21", "stateMutability": "nonpayable", "virtual": false, "visibility": "public"}, {"body": {"id": 130, "nodeType": "Block", "src": "1734:57:21", "statements": [{"expression": {"arguments": [{"id": 126, "name": "DEFAULT_ADMIN_ROLE", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 499, "src": "1755:18:21", "typeDescriptions": {"typeIdentifier": "t_bytes32", "typeString": "bytes32"}}, {"id": 127, "name": "_account", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 120, "src": "1775:8:21", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_bytes32", "typeString": "bytes32"}, {"typeIdentifier": "t_address", "typeString": "address"}], "id": 125, "name": "_grantRole", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 759, "src": "1744:10:21", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", "typeString": "function (bytes32,address)"}}, "id": 128, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "1744:40:21", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 129, "nodeType": "ExpressionStatement", "src": "1744:40:21"}]}, "functionSelector": "c634b78e", "id": 131, "implemented": true, "kind": "function", "modifiers": [{"id": 123, "kind": "modifierInvocation", "modifierName": {"id": 122, "name": "onlyOwner", "nameLocations": ["1724:9:21"], "nodeType": "IdentifierPath", "referencedDeclaration": 857, "src": "1724:9:21"}, "nodeType": "ModifierInvocation", "src": "1724:9:21"}], "name": "grantAdminRole", "nameLocation": "1684:14:21", "nodeType": "FunctionDefinition", "parameters": {"id": 121, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 120, "mutability": "mutable", "name": "_account", "nameLocation": "1707:8:21", "nodeType": "VariableDeclaration", "scope": 131, "src": "1699:16:21", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 119, "name": "address", "nodeType": "ElementaryTypeName", "src": "1699:7:21", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}], "src": "1698:18:21"}, "returnParameters": {"id": 124, "nodeType": "ParameterList", "parameters": [], "src": "1734:0:21"}, "scope": 150, "src": "1675:116:21", "stateMutability": "nonpayable", "virtual": false, "visibility": "public"}, {"baseFunctions": [1192], "body": {"id": 139, "nodeType": "Block", "src": "1907:2:21", "statements": []}, "id": 140, "implemented": true, "kind": "function", "modifiers": [{"id": 137, "kind": "modifierInvocation", "modifierName": {"id": 136, "name": "onlyOwner", "nameLocations": ["1893:9:21"], "nodeType": "IdentifierPath", "referencedDeclaration": 857, "src": "1893:9:21"}, "nodeType": "ModifierInvocation", "src": "1893:9:21"}], "name": "_authorizeUpgrade", "nameLocation": "1806:17:21", "nodeType": "FunctionDefinition", "overrides": {"id": 135, "nodeType": "OverrideSpecifier", "overrides": [], "src": "1876:8:21"}, "parameters": {"id": 134, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 133, "mutability": "mutable", "name": "newImplementation", "nameLocation": "1832:17:21", "nodeType": "VariableDeclaration", "scope": 140, "src": "1824:25:21", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 132, "name": "address", "nodeType": "ElementaryTypeName", "src": "1824:7:21", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}], "src": "1823:27:21"}, "returnParameters": {"id": 138, "nodeType": "ParameterList", "parameters": [], "src": "1907:0:21"}, "scope": 150, "src": "1797:112:21", "stateMutability": "nonpayable", "virtual": false, "visibility": "internal"}, {"baseFunctions": [1273], "body": {"id": 148, "nodeType": "Block", "src": "1984:48:21", "statements": [{"expression": {"hexValue": "4f726967696e204465466920476f7665726e616e6365", "id": 146, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "2001:24:21", "typeDescriptions": {"typeIdentifier": "t_stringliteral_b58780cdd90049fbafb361970c84d0d720f0749c856a37a65b5c4c8a436fdafc", "typeString": "literal_string \"Origin DeFi Governance\""}, "value": "Origin DeFi Governance"}, "functionReturnParameters": 145, "id": 147, "nodeType": "Return", "src": "1994:31:21"}]}, "functionSelector": "06fdde03", "id": 149, "implemented": true, "kind": "function", "modifiers": [], "name": "name", "nameLocation": "1924:4:21", "nodeType": "FunctionDefinition", "overrides": {"id": 142, "nodeType": "OverrideSpecifier", "overrides": [], "src": "1951:8:21"}, "parameters": {"id": 141, "nodeType": "ParameterList", "parameters": [], "src": "1928:2:21"}, "returnParameters": {"id": 145, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 144, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 149, "src": "1969:13:21", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": {"typeIdentifier": "t_string_memory_ptr", "typeString": "string"}, "typeName": {"id": 143, "name": "string", "nodeType": "ElementaryTypeName", "src": "1969:6:21", "typeDescriptions": {"typeIdentifier": "t_string_storage_ptr", "typeString": "string"}}, "visibility": "internal"}], "src": "1968:15:21"}, "scope": 150, "src": "1915:117:21", "stateMutability": "view", "virtual": true, "visibility": "public"}], "scope": 151, "src": "646:1388:21", "usedErrors": []}], "src": "32:2003:21"}, "bytecode": "60a0604052306080523480156200001557600080fd5b5060006200002460016200008b565b905080156200003d576000805461ff0019166101001790555b801562000084576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50620001ac565b60008054610100900460ff161562000124578160ff166001148015620000c45750620000c2306200019d60201b62000ddf1760201c565b155b6200011c5760405162461bcd60e51b815260206004820152602e6024820152600080516020620025ad83398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b506000919050565b60005460ff808416911610620001835760405162461bcd60e51b815260206004820152602e6024820152600080516020620025ad83398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000113565b506000805460ff191660ff92909216919091179055600190565b6001600160a01b03163b151590565b6080516123c9620001e46000396000818161072301528181610763015281816108b6015281816108f6015261098501526123c96000f3fe6080604052600436106101d85760003560e01c806352d1902d11610102578063a217fddf11610095578063d539139311610064578063d539139314610562578063d547741f14610596578063dd62ed3e146105b6578063f2fde38b146105d657600080fd5b8063a217fddf146104ed578063a457c2d714610502578063a9059cbb14610522578063c634b78e1461054257600080fd5b80638129fc1c116100d15780638129fc1c1461047b5780638da5cb5b1461049057806391d14854146104b857806395d89b41146104d857600080fd5b806352d1902d146103fb57806370a0823114610410578063715018a61461044657806379cc67901461045b57600080fd5b8063313ce5671161017a5780633dd1eb61116101495780633dd1eb611461038857806340c10f19146103a857806342966c68146103c85780634f1ef286146103e857600080fd5b8063313ce5671461030c57806336568abe146103285780633659cfe614610348578063395093511461036857600080fd5b806318160ddd116101b657806318160ddd1461027a57806323b872dd14610299578063248a9ca3146102b95780632f2ff15d146102ea57600080fd5b806301ffc9a7146101dd57806306fdde0314610212578063095ea7b31461025a575b600080fd5b3480156101e957600080fd5b506101fd6101f8366004611c19565b6105f6565b60405190151581526020015b60405180910390f35b34801561021e57600080fd5b506040805180820190915260168152754f726967696e204465466920476f7665726e616e636560501b60208201525b6040516102099190611c67565b34801561026657600080fd5b506101fd610275366004611cb1565b61062d565b34801561028657600080fd5b506035545b604051908152602001610209565b3480156102a557600080fd5b506101fd6102b4366004611cdb565b610645565b3480156102c557600080fd5b5061028b6102d4366004611d17565b600090815261012d602052604090206001015490565b3480156102f657600080fd5b5061030a610305366004611d30565b61066b565b005b34801561031857600080fd5b5060405160128152602001610209565b34801561033457600080fd5b5061030a610343366004611d30565b610696565b34801561035457600080fd5b5061030a610363366004611d5c565b610719565b34801561037457600080fd5b506101fd610383366004611cb1565b6107f8565b34801561039457600080fd5b5061030a6103a3366004611d5c565b61081a565b3480156103b457600080fd5b5061030a6103c3366004611cb1565b61086e565b3480156103d457600080fd5b5061030a6103e3366004611d17565b6108a2565b61030a6103f6366004611d8d565b6108ac565b34801561040757600080fd5b5061028b610978565b34801561041c57600080fd5b5061028b61042b366004611d5c565b6001600160a01b031660009081526033602052604090205490565b34801561045257600080fd5b5061030a610a2b565b34801561046757600080fd5b5061030a610476366004611cb1565b610a61565b34801561048757600080fd5b5061030a610a76565b34801561049c57600080fd5b506065546040516001600160a01b039091168152602001610209565b3480156104c457600080fd5b506101fd6104d3366004611d30565b610b6f565b3480156104e457600080fd5b5061024d610b9b565b3480156104f957600080fd5b5061028b600081565b34801561050e57600080fd5b506101fd61051d366004611cb1565b610c2d565b34801561052e57600080fd5b506101fd61053d366004611cb1565b610cb3565b34801561054e57600080fd5b5061030a61055d366004611d5c565b610cc1565b34801561056e57600080fd5b5061028b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b3480156105a257600080fd5b5061030a6105b1366004611d30565b610cf6565b3480156105c257600080fd5b5061028b6105d1366004611e4f565b610d1c565b3480156105e257600080fd5b5061030a6105f1366004611d5c565b610d47565b60006001600160e01b03198216637965db0b60e01b148061062757506301ffc9a760e01b6001600160e01b03198316145b92915050565b60003361063b818585610dee565b5060019392505050565b600033610653858285610f12565b61065e858585610f8c565b60019150505b9392505050565b600082815261012d60205260409020600101546106878161115a565b6106918383611164565b505050565b6001600160a01b038116331461070b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61071582826111eb565b5050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107615760405162461bcd60e51b815260040161070290611e79565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166107aa60008051602061234d833981519152546001600160a01b031690565b6001600160a01b0316146107d05760405162461bcd60e51b815260040161070290611ec5565b6107d981611253565b604080516000808252602082019092526107f59183919061127d565b50565b60003361063b81858561080b8383610d1c565b6108159190611f27565b610dee565b6065546001600160a01b031633146108445760405162461bcd60e51b815260040161070290611f3a565b6107f57f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a682611164565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66108988161115a565b61069183836113e8565b6107f533826114c7565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036108f45760405162461bcd60e51b815260040161070290611e79565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661093d60008051602061234d833981519152546001600160a01b031690565b6001600160a01b0316146109635760405162461bcd60e51b815260040161070290611ec5565b61096c82611253565b6107158282600161127d565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a185760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610702565b5060008051602061234d83398151915290565b6065546001600160a01b03163314610a555760405162461bcd60e51b815260040161070290611f3a565b610a5f6000611615565b565b610a6c823383610f12565b61071582826114c7565b6000610a826001611667565b90508015610a9a576000805461ff0019166101001790555b610af46040518060400160405280601881526020017f4f726967696e20446f6c6c617220476f7665726e616e636500000000000000008152506040518060400160405280600381526020016227a3ab60e91b8152506116f4565b610afc611725565b610b04611754565b610b2733610b146012600a612053565b610b2290633b9aca00612062565b6113e8565b80156107f5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b600091825261012d602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060378054610baa90612081565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd690612081565b8015610c235780601f10610bf857610100808354040283529160200191610c23565b820191906000526020600020905b815481529060010190602001808311610c0657829003601f168201915b5050505050905090565b60003381610c3b8286610d1c565b905083811015610c9b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610702565b610ca88286868403610dee565b506001949350505050565b60003361063b818585610f8c565b6065546001600160a01b03163314610ceb5760405162461bcd60e51b815260040161070290611f3a565b6107f5600082611164565b600082815261012d6020526040902060010154610d128161115a565b61069183836111eb565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6065546001600160a01b03163314610d715760405162461bcd60e51b815260040161070290611f3a565b6001600160a01b038116610dd65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610702565b6107f581611615565b6001600160a01b03163b151590565b6001600160a01b038316610e505760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610702565b6001600160a01b038216610eb15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610702565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610f1e8484610d1c565b90506000198114610f865781811015610f795760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610702565b610f868484848403610dee565b50505050565b6001600160a01b038316610ff05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610702565b6001600160a01b0382166110525760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610702565b6001600160a01b038316600090815260336020526040902054818110156110ca5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610702565b6001600160a01b03808516600090815260336020526040808220858503905591851681529081208054849290611101908490611f27565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161114d91815260200190565b60405180910390a3610f86565b6107f5813361177b565b61116e8282610b6f565b61071557600082815261012d602090815260408083206001600160a01b03851684529091529020805460ff191660011790556111a73390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6111f58282610b6f565b1561071557600082815261012d602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6065546001600160a01b031633146107f55760405162461bcd60e51b815260040161070290611f3a565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156112b057610691836117df565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561130a575060408051601f3d908101601f19168201909252611307918101906120bb565b60015b61136d5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610702565b60008051602061234d83398151915281146113dc5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610702565b5061069183838361187b565b6001600160a01b03821661143e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610702565b80603560008282546114509190611f27565b90915550506001600160a01b0382166000908152603360205260408120805483929061147d908490611f27565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166115275760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610702565b6001600160a01b0382166000908152603360205260409020548181101561159b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610702565b6001600160a01b03831660009081526033602052604081208383039055603580548492906115ca9084906120d4565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008054610100900460ff16156116ae578160ff16600114801561168a5750303b155b6116a65760405162461bcd60e51b8152600401610702906120e7565b506000919050565b60005460ff8084169116106116d55760405162461bcd60e51b8152600401610702906120e7565b506000805460ff191660ff92909216919091179055600190565b919050565b600054610100900460ff1661171b5760405162461bcd60e51b815260040161070290612135565b61071582826118a0565b600054610100900460ff1661174c5760405162461bcd60e51b815260040161070290612135565b610a5f6118e0565b600054610100900460ff16610a5f5760405162461bcd60e51b815260040161070290612135565b6117858282610b6f565b6107155761179d816001600160a01b03166014611910565b6117a8836020611910565b6040516020016117b9929190612180565b60408051601f198184030181529082905262461bcd60e51b825261070291600401611c67565b6001600160a01b0381163b61184c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610702565b60008051602061234d83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61188483611aac565b6000825111806118915750805b1561069157610f868383611aec565b600054610100900460ff166118c75760405162461bcd60e51b815260040161070290612135565b60366118d38382612243565b5060376106918282612243565b600054610100900460ff166119075760405162461bcd60e51b815260040161070290612135565b610a5f33611615565b6060600061191f836002612062565b61192a906002611f27565b67ffffffffffffffff81111561194257611942611d77565b6040519080825280601f01601f19166020018201604052801561196c576020820181803683370190505b509050600360fc1b8160008151811061198757611987612303565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106119b6576119b6612303565b60200101906001600160f81b031916908160001a90535060006119da846002612062565b6119e5906001611f27565b90505b6001811115611a5d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a1957611a19612303565b1a60f81b828281518110611a2f57611a2f612303565b60200101906001600160f81b031916908160001a90535060049490941c93611a5681612319565b90506119e8565b5083156106645760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610702565b611ab5816117df565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b611b545760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610702565b600080846001600160a01b031684604051611b6f9190612330565b600060405180830381855af49150503d8060008114611baa576040519150601f19603f3d011682016040523d82523d6000602084013e611baf565b606091505b5091509150611bd7828260405180606001604052806027815260200161236d60279139611be0565b95945050505050565b60608315611bef575081610664565b825115611bff5782518084602001fd5b8160405162461bcd60e51b81526004016107029190611c67565b600060208284031215611c2b57600080fd5b81356001600160e01b03198116811461066457600080fd5b60005b83811015611c5e578181015183820152602001611c46565b50506000910152565b6020815260008251806020840152611c86816040850160208701611c43565b601f01601f19169190910160400192915050565b80356001600160a01b03811681146116ef57600080fd5b60008060408385031215611cc457600080fd5b611ccd83611c9a565b946020939093013593505050565b600080600060608486031215611cf057600080fd5b611cf984611c9a565b9250611d0760208501611c9a565b9150604084013590509250925092565b600060208284031215611d2957600080fd5b5035919050565b60008060408385031215611d4357600080fd5b82359150611d5360208401611c9a565b90509250929050565b600060208284031215611d6e57600080fd5b61066482611c9a565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215611da057600080fd5b611da983611c9a565b9150602083013567ffffffffffffffff80821115611dc657600080fd5b818501915085601f830112611dda57600080fd5b813581811115611dec57611dec611d77565b604051601f8201601f19908116603f01168101908382118183101715611e1457611e14611d77565b81604052828152886020848701011115611e2d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60008060408385031215611e6257600080fd5b611e6b83611c9a565b9150611d5360208401611c9a565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561062757610627611f11565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181815b80851115611faa578160001904821115611f9057611f90611f11565b80851615611f9d57918102915b93841c9390800290611f74565b509250929050565b600082611fc157506001610627565b81611fce57506000610627565b8160018114611fe45760028114611fee5761200a565b6001915050610627565b60ff841115611fff57611fff611f11565b50506001821b610627565b5060208310610133831016604e8410600b841016171561202d575081810a610627565b6120378383611f6f565b806000190482111561204b5761204b611f11565b029392505050565b600061066460ff841683611fb2565b600081600019048311821515161561207c5761207c611f11565b500290565b600181811c9082168061209557607f821691505b6020821081036120b557634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156120cd57600080fd5b5051919050565b8181038181111561062757610627611f11565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516121b8816017850160208801611c43565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516121e9816028840160208801611c43565b01602801949350505050565b601f82111561069157600081815260208120601f850160051c8101602086101561221c5750805b601f850160051c820191505b8181101561223b57828155600101612228565b505050505050565b815167ffffffffffffffff81111561225d5761225d611d77565b6122718161226b8454612081565b846121f5565b602080601f8311600181146122a6576000841561228e5750858301515b600019600386901b1c1916600185901b17855561223b565b600085815260208120601f198616915b828110156122d5578886015182559484019460019091019084016122b6565b50858210156122f35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b60008161232857612328611f11565b506000190190565b60008251612342818460208701611c43565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122097b3e3a1159723d7ba51fd2aa2054bea0fc4f868d239b5fde6b61c904018c70b64736f6c63430008100033496e697469616c697a61626c653a20636f6e747261637420697320616c726561", "bytecodeSha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "compiler": {"evm_version": "istanbul", "optimizer": {"enabled": true, "runs": 200}, "version": "0.8.16+commit.07a7930e"}, "contractName": "OriginDollarGovernance", "coverageMap": {"branches": {"0": {"AccessControlUpgradeable._checkRole": {"98": [4114, 4136, false]}, "AccessControlUpgradeable._grantRole": {"96": [7657, 7679, false]}, "AccessControlUpgradeable._revokeRole": {"97": [8015, 8037, false]}, "AccessControlUpgradeable.renounceRole": {"95": [6212, 6235, true]}}, "1": {}, "11": {}, "13": {}, "16": {}, "17": {}, "2": {"OwnableUpgradeable.transferOwnership": {"118": [2246, 2268, true]}}, "21": {}, "3": {}, "4": {"ERC1967UpgradeUpgradeable._upgradeToAndCall": {"101": [2659, 2674, true], "102": [2678, 2687, false]}, "ERC1967UpgradeUpgradeable._upgradeToAndCallUUPS": {"99": [3384, 3443, false], "100": [3644, 3672, true]}}, "6": {"Initializable._setInitializedVersion": {"114": [5684, 5697, false], "115": [5738, 5750, false], "116": [5944, 5966, true]}, "OwnableUpgradeable.__Ownable_init_unchained": {"117": [4698, 4711, true]}}, "7": {"ERC1967UpgradeUpgradeable._getImplementation": {"119": [1971, 2001, true]}, "UUPSUpgradeable.proxiableUUID": {"120": [2316, 2339, true]}}, "8": {"ERC20Upgradeable._approve": {"104": [10587, 10606, true], "105": [10665, 10686, true]}, "ERC20Upgradeable._burn": {"112": [9540, 9561, true], "113": [9731, 9755, true]}, "ERC20Upgradeable._mint": {"111": [8831, 8852, true]}, "ERC20Upgradeable._spendAllowance": {"106": [11303, 11340, false], "107": [11364, 11390, true]}, "ERC20Upgradeable._transfer": {"108": [7947, 7965, true], "109": [8025, 8041, true], "110": [8196, 8217, true]}, "ERC20Upgradeable.decreaseAllowance": {"103": [7148, 7183, true]}}, "9": {}}, "statements": {"0": {"AccessControlUpgradeable._checkRole": {"57": [3708, 3738], "83": [4152, 4523]}, "AccessControlUpgradeable._grantRole": {"58": [7695, 7731], "59": [7745, 7790]}, "AccessControlUpgradeable._revokeRole": {"60": [8053, 8090], "61": [8104, 8149]}, "AccessControlUpgradeable.getRoleAdmin": {"2": [4814, 4843]}, "AccessControlUpgradeable.grantRole": {"14": [5213, 5238]}, "AccessControlUpgradeable.hasRole": {"33": [3305, 3341]}, "AccessControlUpgradeable.renounceRole": {"15": [6204, 6287], "16": [6298, 6324]}, "AccessControlUpgradeable.revokeRole": {"40": [5593, 5619]}, "AccessControlUpgradeable.supportsInterface": {"6": [3004, 3109]}}, "1": {}, "11": {}, "13": {"ContextUpgradeable._msgSender": {"8": [922, 939]}}, "16": {"ERC165Upgradeable.supportsInterface": {"7": [1161, 1219]}}, "17": {}, "2": {"OwnableUpgradeable.__Ownable_init": {"82": [1050, 1076]}, "OwnableUpgradeable.__Ownable_init_unchained": {"90": [1161, 1193]}, "OwnableUpgradeable._transferOwnership": {"75": [2618, 2635], "76": [2645, 2690]}, "OwnableUpgradeable.owner": {"5": [1341, 1354]}, "OwnableUpgradeable.renounceOwnership": {"26": [1972, 2002]}, "OwnableUpgradeable.transferOwnership": {"42": [2238, 2311], "43": [2321, 2349]}}, "21": {"OriginDollarGovernance.burn": {"23": [1352, 1379]}, "OriginDollarGovernance.burnFrom": {"27": [1468, 1514], "28": [1524, 1546]}, "OriginDollarGovernance.grantAdminRole": {"39": [1744, 1784]}, "OriginDollarGovernance.grantMinterRole": {"21": [1629, 1662]}, "OriginDollarGovernance.initialize": {"29": [1009, 1056], "30": [1066, 1082], "31": [1092, 1116], "32": [1127, 1173]}, "OriginDollarGovernance.mint": {"22": [1267, 1284]}, "OriginDollarGovernance.name": {"0": [1994, 2025]}}, "3": {}, "4": {"ERC1967UpgradeUpgradeable._functionDelegateCall": {"93": [7195, 7283], "94": [7430, 7536]}, "ERC1967UpgradeUpgradeable._getImplementation": {"17": [1635, 1707]}, "ERC1967UpgradeUpgradeable._setImplementation": {"84": [1878, 1984], "85": [1994, 2079]}, "ERC1967UpgradeUpgradeable._upgradeTo": {"91": [2258, 2295], "92": [2305, 2337]}, "ERC1967UpgradeUpgradeable._upgradeToAndCall": {"86": [2616, 2645], "87": [2703, 2749]}, "ERC1967UpgradeUpgradeable._upgradeToAndCallUUPS": {"62": [3459, 3496], "63": [3758, 3814], "64": [3636, 3718], "65": [3842, 3895]}}, "6": {"Initializable._setInitializedVersion": {"77": [5713, 5879], "78": [5893, 5905], "79": [5936, 6017], "80": [6031, 6053]}}, "7": {"UUPSUpgradeable.upgradeTo": {"18": [3398, 3434], "19": [3444, 3505]}, "UUPSUpgradeable.upgradeToAndCall": {"24": [3878, 3914], "25": [3924, 3976]}}, "8": {"ERC20Upgradeable.__ERC20_init": {"81": [2218, 2256]}, "ERC20Upgradeable.__ERC20_init_unchained": {"88": [2381, 2394], "89": [2404, 2421]}, "ERC20Upgradeable._approve": {"44": [10579, 10647], "45": [10657, 10725], "46": [10736, 10772], "47": [10782, 10819]}, "ERC20Upgradeable._burn": {"70": [9532, 9599], "71": [9723, 9794], "72": [9828, 9872], "73": [9892, 9914], "74": [9925, 9967]}, "ERC20Upgradeable._mint": {"66": [8823, 8888], "67": [8959, 8981], "68": [8991, 9019], "69": [9029, 9071]}, "ERC20Upgradeable._spendAllowance": {"48": [11356, 11424], "49": [11466, 11517]}, "ERC20Upgradeable._transfer": {"50": [7939, 8007], "51": [8017, 8081], "52": [8188, 8260], "53": [8294, 8332], "54": [8352, 8375], "55": [8386, 8417], "56": [8428, 8465]}, "ERC20Upgradeable.allowance": {"41": [4421, 4455]}, "ERC20Upgradeable.approve": {"9": [4907, 4939], "10": [4949, 4960]}, "ERC20Upgradeable.balanceOf": {"4": [3838, 3863]}, "ERC20Upgradeable.decimals": {"3": [3505, 3514]}, "ERC20Upgradeable.decreaseAllowance": {"35": [7140, 7225], "36": [7259, 7319], "37": [7340, 7351]}, "ERC20Upgradeable.increaseAllowance": {"20": [6352, 6416]}, "ERC20Upgradeable.symbol": {"34": [2785, 2799]}, "ERC20Upgradeable.totalSupply": {"1": [3661, 3680]}, "ERC20Upgradeable.transfer": {"38": [4199, 4227]}, "ERC20Upgradeable.transferFrom": {"11": [5712, 5750], "12": [5760, 5787], "13": [5797, 5808]}}, "9": {}}}, "dependencies": ["OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/AccessControlUpgradeable", "OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/ContextUpgradeable", "OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/ERC165Upgradeable", "OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/ERC1967UpgradeUpgradeable", "OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/ERC20Upgradeable", "OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/IAccessControlUpgradeable", "OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/IERC165Upgradeable", "OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/IERC1822ProxiableUpgradeable", "OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/IERC20MetadataUpgradeable", "OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/IERC20Upgradeable", "OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/Initializable", "OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/OwnableUpgradeable", "OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/UUPSUpgradeable"], "deployedBytecode": "6080604052600436106101d85760003560e01c806352d1902d11610102578063a217fddf11610095578063d539139311610064578063d539139314610562578063d547741f14610596578063dd62ed3e146105b6578063f2fde38b146105d657600080fd5b8063a217fddf146104ed578063a457c2d714610502578063a9059cbb14610522578063c634b78e1461054257600080fd5b80638129fc1c116100d15780638129fc1c1461047b5780638da5cb5b1461049057806391d14854146104b857806395d89b41146104d857600080fd5b806352d1902d146103fb57806370a0823114610410578063715018a61461044657806379cc67901461045b57600080fd5b8063313ce5671161017a5780633dd1eb61116101495780633dd1eb611461038857806340c10f19146103a857806342966c68146103c85780634f1ef286146103e857600080fd5b8063313ce5671461030c57806336568abe146103285780633659cfe614610348578063395093511461036857600080fd5b806318160ddd116101b657806318160ddd1461027a57806323b872dd14610299578063248a9ca3146102b95780632f2ff15d146102ea57600080fd5b806301ffc9a7146101dd57806306fdde0314610212578063095ea7b31461025a575b600080fd5b3480156101e957600080fd5b506101fd6101f8366004611c19565b6105f6565b60405190151581526020015b60405180910390f35b34801561021e57600080fd5b506040805180820190915260168152754f726967696e204465466920476f7665726e616e636560501b60208201525b6040516102099190611c67565b34801561026657600080fd5b506101fd610275366004611cb1565b61062d565b34801561028657600080fd5b506035545b604051908152602001610209565b3480156102a557600080fd5b506101fd6102b4366004611cdb565b610645565b3480156102c557600080fd5b5061028b6102d4366004611d17565b600090815261012d602052604090206001015490565b3480156102f657600080fd5b5061030a610305366004611d30565b61066b565b005b34801561031857600080fd5b5060405160128152602001610209565b34801561033457600080fd5b5061030a610343366004611d30565b610696565b34801561035457600080fd5b5061030a610363366004611d5c565b610719565b34801561037457600080fd5b506101fd610383366004611cb1565b6107f8565b34801561039457600080fd5b5061030a6103a3366004611d5c565b61081a565b3480156103b457600080fd5b5061030a6103c3366004611cb1565b61086e565b3480156103d457600080fd5b5061030a6103e3366004611d17565b6108a2565b61030a6103f6366004611d8d565b6108ac565b34801561040757600080fd5b5061028b610978565b34801561041c57600080fd5b5061028b61042b366004611d5c565b6001600160a01b031660009081526033602052604090205490565b34801561045257600080fd5b5061030a610a2b565b34801561046757600080fd5b5061030a610476366004611cb1565b610a61565b34801561048757600080fd5b5061030a610a76565b34801561049c57600080fd5b506065546040516001600160a01b039091168152602001610209565b3480156104c457600080fd5b506101fd6104d3366004611d30565b610b6f565b3480156104e457600080fd5b5061024d610b9b565b3480156104f957600080fd5b5061028b600081565b34801561050e57600080fd5b506101fd61051d366004611cb1565b610c2d565b34801561052e57600080fd5b506101fd61053d366004611cb1565b610cb3565b34801561054e57600080fd5b5061030a61055d366004611d5c565b610cc1565b34801561056e57600080fd5b5061028b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b3480156105a257600080fd5b5061030a6105b1366004611d30565b610cf6565b3480156105c257600080fd5b5061028b6105d1366004611e4f565b610d1c565b3480156105e257600080fd5b5061030a6105f1366004611d5c565b610d47565b60006001600160e01b03198216637965db0b60e01b148061062757506301ffc9a760e01b6001600160e01b03198316145b92915050565b60003361063b818585610dee565b5060019392505050565b600033610653858285610f12565b61065e858585610f8c565b60019150505b9392505050565b600082815261012d60205260409020600101546106878161115a565b6106918383611164565b505050565b6001600160a01b038116331461070b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61071582826111eb565b5050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107615760405162461bcd60e51b815260040161070290611e79565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166107aa60008051602061234d833981519152546001600160a01b031690565b6001600160a01b0316146107d05760405162461bcd60e51b815260040161070290611ec5565b6107d981611253565b604080516000808252602082019092526107f59183919061127d565b50565b60003361063b81858561080b8383610d1c565b6108159190611f27565b610dee565b6065546001600160a01b031633146108445760405162461bcd60e51b815260040161070290611f3a565b6107f57f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a682611164565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66108988161115a565b61069183836113e8565b6107f533826114c7565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036108f45760405162461bcd60e51b815260040161070290611e79565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661093d60008051602061234d833981519152546001600160a01b031690565b6001600160a01b0316146109635760405162461bcd60e51b815260040161070290611ec5565b61096c82611253565b6107158282600161127d565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a185760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610702565b5060008051602061234d83398151915290565b6065546001600160a01b03163314610a555760405162461bcd60e51b815260040161070290611f3a565b610a5f6000611615565b565b610a6c823383610f12565b61071582826114c7565b6000610a826001611667565b90508015610a9a576000805461ff0019166101001790555b610af46040518060400160405280601881526020017f4f726967696e20446f6c6c617220476f7665726e616e636500000000000000008152506040518060400160405280600381526020016227a3ab60e91b8152506116f4565b610afc611725565b610b04611754565b610b2733610b146012600a612053565b610b2290633b9aca00612062565b6113e8565b80156107f5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b600091825261012d602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060378054610baa90612081565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd690612081565b8015610c235780601f10610bf857610100808354040283529160200191610c23565b820191906000526020600020905b815481529060010190602001808311610c0657829003601f168201915b5050505050905090565b60003381610c3b8286610d1c565b905083811015610c9b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610702565b610ca88286868403610dee565b506001949350505050565b60003361063b818585610f8c565b6065546001600160a01b03163314610ceb5760405162461bcd60e51b815260040161070290611f3a565b6107f5600082611164565b600082815261012d6020526040902060010154610d128161115a565b61069183836111eb565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6065546001600160a01b03163314610d715760405162461bcd60e51b815260040161070290611f3a565b6001600160a01b038116610dd65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610702565b6107f581611615565b6001600160a01b03163b151590565b6001600160a01b038316610e505760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610702565b6001600160a01b038216610eb15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610702565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610f1e8484610d1c565b90506000198114610f865781811015610f795760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610702565b610f868484848403610dee565b50505050565b6001600160a01b038316610ff05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610702565b6001600160a01b0382166110525760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610702565b6001600160a01b038316600090815260336020526040902054818110156110ca5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610702565b6001600160a01b03808516600090815260336020526040808220858503905591851681529081208054849290611101908490611f27565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161114d91815260200190565b60405180910390a3610f86565b6107f5813361177b565b61116e8282610b6f565b61071557600082815261012d602090815260408083206001600160a01b03851684529091529020805460ff191660011790556111a73390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6111f58282610b6f565b1561071557600082815261012d602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6065546001600160a01b031633146107f55760405162461bcd60e51b815260040161070290611f3a565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156112b057610691836117df565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561130a575060408051601f3d908101601f19168201909252611307918101906120bb565b60015b61136d5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610702565b60008051602061234d83398151915281146113dc5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610702565b5061069183838361187b565b6001600160a01b03821661143e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610702565b80603560008282546114509190611f27565b90915550506001600160a01b0382166000908152603360205260408120805483929061147d908490611f27565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166115275760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610702565b6001600160a01b0382166000908152603360205260409020548181101561159b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610702565b6001600160a01b03831660009081526033602052604081208383039055603580548492906115ca9084906120d4565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008054610100900460ff16156116ae578160ff16600114801561168a5750303b155b6116a65760405162461bcd60e51b8152600401610702906120e7565b506000919050565b60005460ff8084169116106116d55760405162461bcd60e51b8152600401610702906120e7565b506000805460ff191660ff92909216919091179055600190565b919050565b600054610100900460ff1661171b5760405162461bcd60e51b815260040161070290612135565b61071582826118a0565b600054610100900460ff1661174c5760405162461bcd60e51b815260040161070290612135565b610a5f6118e0565b600054610100900460ff16610a5f5760405162461bcd60e51b815260040161070290612135565b6117858282610b6f565b6107155761179d816001600160a01b03166014611910565b6117a8836020611910565b6040516020016117b9929190612180565b60408051601f198184030181529082905262461bcd60e51b825261070291600401611c67565b6001600160a01b0381163b61184c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610702565b60008051602061234d83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61188483611aac565b6000825111806118915750805b1561069157610f868383611aec565b600054610100900460ff166118c75760405162461bcd60e51b815260040161070290612135565b60366118d38382612243565b5060376106918282612243565b600054610100900460ff166119075760405162461bcd60e51b815260040161070290612135565b610a5f33611615565b6060600061191f836002612062565b61192a906002611f27565b67ffffffffffffffff81111561194257611942611d77565b6040519080825280601f01601f19166020018201604052801561196c576020820181803683370190505b509050600360fc1b8160008151811061198757611987612303565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106119b6576119b6612303565b60200101906001600160f81b031916908160001a90535060006119da846002612062565b6119e5906001611f27565b90505b6001811115611a5d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a1957611a19612303565b1a60f81b828281518110611a2f57611a2f612303565b60200101906001600160f81b031916908160001a90535060049490941c93611a5681612319565b90506119e8565b5083156106645760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610702565b611ab5816117df565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b611b545760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610702565b600080846001600160a01b031684604051611b6f9190612330565b600060405180830381855af49150503d8060008114611baa576040519150601f19603f3d011682016040523d82523d6000602084013e611baf565b606091505b5091509150611bd7828260405180606001604052806027815260200161236d60279139611be0565b95945050505050565b60608315611bef575081610664565b825115611bff5782518084602001fd5b8160405162461bcd60e51b81526004016107029190611c67565b600060208284031215611c2b57600080fd5b81356001600160e01b03198116811461066457600080fd5b60005b83811015611c5e578181015183820152602001611c46565b50506000910152565b6020815260008251806020840152611c86816040850160208701611c43565b601f01601f19169190910160400192915050565b80356001600160a01b03811681146116ef57600080fd5b60008060408385031215611cc457600080fd5b611ccd83611c9a565b946020939093013593505050565b600080600060608486031215611cf057600080fd5b611cf984611c9a565b9250611d0760208501611c9a565b9150604084013590509250925092565b600060208284031215611d2957600080fd5b5035919050565b60008060408385031215611d4357600080fd5b82359150611d5360208401611c9a565b90509250929050565b600060208284031215611d6e57600080fd5b61066482611c9a565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215611da057600080fd5b611da983611c9a565b9150602083013567ffffffffffffffff80821115611dc657600080fd5b818501915085601f830112611dda57600080fd5b813581811115611dec57611dec611d77565b604051601f8201601f19908116603f01168101908382118183101715611e1457611e14611d77565b81604052828152886020848701011115611e2d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60008060408385031215611e6257600080fd5b611e6b83611c9a565b9150611d5360208401611c9a565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561062757610627611f11565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181815b80851115611faa578160001904821115611f9057611f90611f11565b80851615611f9d57918102915b93841c9390800290611f74565b509250929050565b600082611fc157506001610627565b81611fce57506000610627565b8160018114611fe45760028114611fee5761200a565b6001915050610627565b60ff841115611fff57611fff611f11565b50506001821b610627565b5060208310610133831016604e8410600b841016171561202d575081810a610627565b6120378383611f6f565b806000190482111561204b5761204b611f11565b029392505050565b600061066460ff841683611fb2565b600081600019048311821515161561207c5761207c611f11565b500290565b600181811c9082168061209557607f821691505b6020821081036120b557634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156120cd57600080fd5b5051919050565b8181038181111561062757610627611f11565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516121b8816017850160208801611c43565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516121e9816028840160208801611c43565b01602801949350505050565b601f82111561069157600081815260208120601f850160051c8101602086101561221c5750805b601f850160051c820191505b8181101561223b57828155600101612228565b505050505050565b815167ffffffffffffffff81111561225d5761225d611d77565b6122718161226b8454612081565b846121f5565b602080601f8311600181146122a6576000841561228e5750858301515b600019600386901b1c1916600185901b17855561223b565b600085815260208120601f198616915b828110156122d5578886015182559484019460019091019084016122b6565b50858210156122f35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b60008161232857612328611f11565b506000190190565b60008251612342818460208701611c43565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122097b3e3a1159723d7ba51fd2aa2054bea0fc4f868d239b5fde6b61c904018c70b64736f6c63430008100033", "deployedSourceMap": "646:1388:21:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2903:213:0;;;;;;;;;;-1:-1:-1;2903:213:0;;;;;:::i;:::-;;:::i;:::-;;;470:14:25;;463:22;445:41;;433:2;418:18;2903:213:0;;;;;;;;1915:117:21;;;;;;;;;;-1:-1:-1;1994:31:21;;;;;;;;;;;;-1:-1:-1;;;1994:31:21;;;;1915:117;;;;;;;:::i;4770:197:8:-;;;;;;;;;;-1:-1:-1;4770:197:8;;;;;:::i;:::-;;:::i;3581:106::-;;;;;;;;;;-1:-1:-1;3668:12:8;;3581:106;;;1736:25:25;;;1724:2;1709:18;3581:106:8;1590:177:25;5529:286:8;;;;;;;;;;-1:-1:-1;5529:286:8;;;;;:::i;:::-;;:::i;4721:129:0:-;;;;;;;;;;-1:-1:-1;4721:129:0;;;;;:::i;:::-;4795:7;4821:12;;;:6;:12;;;;;:22;;;;4721:129;5100:145;;;;;;;;;;-1:-1:-1;5100:145:0;;;;;:::i;:::-;;:::i;:::-;;3430:91:8;;;;;;;;;;-1:-1:-1;3430:91:8;;3512:2;2873:36:25;;2861:2;2846:18;3430:91:8;2731:184:25;6117:214:0;;;;;;;;;;-1:-1:-1;6117:214:0;;;;;:::i;:::-;;:::i;3315:197:7:-;;;;;;;;;;-1:-1:-1;3315:197:7;;;;;:::i;:::-;;:::i;6210:234:8:-;;;;;;;;;;-1:-1:-1;6210:234:8;;;;;:::i;:::-;;:::i;1559:110:21:-;;;;;;;;;;-1:-1:-1;1559:110:21;;;;;:::i;:::-;;:::i;1186:105::-;;;;;;;;;;-1:-1:-1;1186:105:21;;;;;:::i;:::-;;:::i;1297:89::-;;;;;;;;;;-1:-1:-1;1297:89:21;;;;;:::i;:::-;;:::i;3761:222:7:-;;;;;;:::i;:::-;;:::i;3004:131::-;;;;;;;;;;;;;:::i;3745:125:8:-;;;;;;;;;;-1:-1:-1;3745:125:8;;;;;:::i;:::-;-1:-1:-1;;;;;3845:18:8;3819:7;3845:18;;;:9;:18;;;;;;;3745:125;1908:101:2;;;;;;;;;;;;;:::i;1392:161:21:-;;;;;;;;;;-1:-1:-1;1392:161:21;;;;;:::i;:::-;;:::i;958:222::-;;;;;;;;;;;;;:::i;1276:85:2:-;;;;;;;;;;-1:-1:-1;1348:6:2;;1276:85;;-1:-1:-1;;;;;1348:6:2;;;4574:51:25;;4562:2;4547:18;1276:85:2;4428:203:25;3203:145:0;;;;;;;;;;-1:-1:-1;3203:145:0;;;;;:::i;:::-;;:::i;2704:102:8:-;;;;;;;;;;;;;:::i;2324:49:0:-;;;;;;;;;;-1:-1:-1;2324:49:0;2369:4;2324:49;;6931:427:8;;;;;;;;;;-1:-1:-1;6931:427:8;;;;;:::i;:::-;;:::i;4066:189::-;;;;;;;;;;-1:-1:-1;4066:189:8;;;;;:::i;:::-;;:::i;1675:116:21:-;;;;;;;;;;-1:-1:-1;1675:116:21;;;;;:::i;:::-;;:::i;802:62::-;;;;;;;;;;;;840:24;802:62;;5479:147:0;;;;;;;;;;-1:-1:-1;5479:147:0;;;;;:::i;:::-;;:::i;4313:149:8:-;;;;;;;;;;-1:-1:-1;4313:149:8;;;;;:::i;:::-;;:::i;2158:198:2:-;;;;;;;;;;-1:-1:-1;2158:198:2;;;;;:::i;:::-;;:::i;2903:213:0:-;2988:4;-1:-1:-1;;;;;;3011:58:0;;-1:-1:-1;;;3011:58:0;;:98;;-1:-1:-1;;;;;;;;;;1168:51:16;;;3073:36:0;3004:105;2903:213;-1:-1:-1;;2903:213:0:o;4770:197:8:-;4853:4;929:10:13;4907:32:8;929:10:13;4923:7:8;4932:6;4907:8;:32::i;:::-;-1:-1:-1;4956:4:8;;4770:197;-1:-1:-1;;;4770:197:8:o;5529:286::-;5656:4;929:10:13;5712:38:8;5728:4;929:10:13;5743:6:8;5712:15;:38::i;:::-;5760:27;5770:4;5776:2;5780:6;5760:9;:27::i;:::-;5804:4;5797:11;;;5529:286;;;;;;:::o;5100:145:0:-;4795:7;4821:12;;;:6;:12;;;;;:22;;;2802:16;2813:4;2802:10;:16::i;:::-;5213:25:::1;5224:4;5230:7;5213:10;:25::i;:::-;5100:145:::0;;;:::o;6117:214::-;-1:-1:-1;;;;;6212:23:0;;929:10:13;6212:23:0;6204:83;;;;-1:-1:-1;;;6204:83:0;;5103:2:25;6204:83:0;;;5085:21:25;5142:2;5122:18;;;5115:30;5181:34;5161:18;;;5154:62;-1:-1:-1;;;5232:18:25;;;5225:45;5287:19;;6204:83:0;;;;;;;;;6298:26;6310:4;6316:7;6298:11;:26::i;:::-;6117:214;;:::o;3315:197:7:-;-1:-1:-1;;;;;1898:6:7;1881:23;1889:4;1881:23;1873:80;;;;-1:-1:-1;;;1873:80:7;;;;;;;:::i;:::-;1995:6;-1:-1:-1;;;;;1971:30:7;:20;-1:-1:-1;;;;;;;;;;;1642:65:4;-1:-1:-1;;;;;1642:65:4;;1563:151;1971:20:7;-1:-1:-1;;;;;1971:30:7;;1963:87;;;;-1:-1:-1;;;1963:87:7;;;;;;;:::i;:::-;3398:36:::1;3416:17;3398;:36::i;:::-;3485:12;::::0;;3495:1:::1;3485:12:::0;;;::::1;::::0;::::1;::::0;;;3444:61:::1;::::0;3466:17;;3485:12;3444:21:::1;:61::i;:::-;3315:197:::0;:::o;6210:234:8:-;6298:4;929:10:13;6352:64:8;929:10:13;6368:7:8;6405:10;6377:25;929:10:13;6368:7:8;6377:9;:25::i;:::-;:38;;;;:::i;:::-;6352:8;:64::i;1559:110:21:-;1348:6:2;;-1:-1:-1;;;;;1348:6:2;929:10:13;1488:23:2;1480:68;;;;-1:-1:-1;;;1480:68:2;;;;;;;:::i;:::-;1629:33:21::1;840:24;1653:8;1629:10;:33::i;1186:105::-:0;840:24;2802:16:0;2813:4;2802:10;:16::i;:::-;1267:17:21::1;1273:2;1277:6;1267:5;:17::i;1297:89::-:0;1352:27;929:10:13;1372:6:21;1352:5;:27::i;3761:222:7:-;-1:-1:-1;;;;;1898:6:7;1881:23;1889:4;1881:23;1873:80;;;;-1:-1:-1;;;1873:80:7;;;;;;;:::i;:::-;1995:6;-1:-1:-1;;;;;1971:30:7;:20;-1:-1:-1;;;;;;;;;;;1642:65:4;-1:-1:-1;;;;;1642:65:4;;1563:151;1971:20:7;-1:-1:-1;;;;;1971:30:7;;1963:87;;;;-1:-1:-1;;;1963:87:7;;;;;;;:::i;:::-;3878:36:::1;3896:17;3878;:36::i;:::-;3924:52;3946:17;3965:4;3971;3924:21;:52::i;3004:131::-:0;3082:7;2324:4;-1:-1:-1;;;;;2333:6:7;2316:23;;2308:92;;;;-1:-1:-1;;;2308:92:7;;6968:2:25;2308:92:7;;;6950:21:25;7007:2;6987:18;;;6980:30;7046:34;7026:18;;;7019:62;7117:26;7097:18;;;7090:54;7161:19;;2308:92:7;6766:420:25;2308:92:7;-1:-1:-1;;;;;;;;;;;;3004:131:7;:::o;1908:101:2:-;1348:6;;-1:-1:-1;;;;;1348:6:2;929:10:13;1488:23:2;1480:68;;;;-1:-1:-1;;;1480:68:2;;;;;;;:::i;:::-;1972:30:::1;1999:1;1972:18;:30::i;:::-;1908:101::o:0;1392:161:21:-;1468:46;1484:7;929:10:13;1507:6:21;1468:15;:46::i;:::-;1524:22;1530:7;1539:6;1524:5;:22::i;958:222::-;3111:19:6;3133:25;3156:1;3133:22;:25::i;:::-;3111:47;;3172:14;3168:65;;;3202:13;:20;;-1:-1:-1;;3202:20:6;;;;;3168:65;1009:47:21::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;;;1009:47:21::1;;::::0;:12:::1;:47::i;:::-;1066:16;:14;:16::i;:::-;1092:24;:22;:24::i;:::-;1127:46;1133:10;1158:14;3512:2:8::0;1158::21::1;:14;:::i;:::-;1145:27;::::0;:10:::1;:27;:::i;:::-;1127:5;:46::i;:::-;3257:14:6::0;3253:99;;;3303:5;3287:21;;-1:-1:-1;;3287:21:6;;;3327:14;;-1:-1:-1;2873:36:25;;3327:14:6;;2861:2:25;2846:18;3327:14:6;;;;;;;3101:257;958:222:21:o;3203:145:0:-;3289:4;3312:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;3312:29:0;;;;;;;;;;;;;;;3203:145::o;2704:102:8:-;2760:13;2792:7;2785:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2704:102;:::o;6931:427::-;7024:4;929:10:13;7024:4:8;7105:25;929:10:13;7122:7:8;7105:9;:25::i;:::-;7078:52;;7168:15;7148:16;:35;;7140:85;;;;-1:-1:-1;;;7140:85:8;;9533:2:25;7140:85:8;;;9515:21:25;9572:2;9552:18;;;9545:30;9611:34;9591:18;;;9584:62;-1:-1:-1;;;9662:18:25;;;9655:35;9707:19;;7140:85:8;9331:401:25;7140:85:8;7259:60;7268:5;7275:7;7303:15;7284:16;:34;7259:8;:60::i;:::-;-1:-1:-1;7347:4:8;;6931:427;-1:-1:-1;;;;6931:427:8:o;4066:189::-;4145:4;929:10:13;4199:28:8;929:10:13;4216:2:8;4220:6;4199:9;:28::i;1675:116:21:-;1348:6:2;;-1:-1:-1;;;;;1348:6:2;929:10:13;1488:23:2;1480:68;;;;-1:-1:-1;;;1480:68:2;;;;;;;:::i;:::-;1744:40:21::1;2369:4:0;1775:8:21::0;1744:10:::1;:40::i;5479:147:0:-:0;4795:7;4821:12;;;:6;:12;;;;;:22;;;2802:16;2813:4;2802:10;:16::i;:::-;5593:26:::1;5605:4;5611:7;5593:11;:26::i;4313:149:8:-:0;-1:-1:-1;;;;;4428:18:8;;;4402:7;4428:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4313:149::o;2158:198:2:-;1348:6;;-1:-1:-1;;;;;1348:6:2;929:10:13;1488:23:2;1480:68;;;;-1:-1:-1;;;1480:68:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;2246:22:2;::::1;2238:73;;;::::0;-1:-1:-1;;;2238:73:2;;9939:2:25;2238:73:2::1;::::0;::::1;9921:21:25::0;9978:2;9958:18;;;9951:30;10017:34;9997:18;;;9990:62;-1:-1:-1;;;10068:18:25;;;10061:36;10114:19;;2238:73:2::1;9737:402:25::0;2238:73:2::1;2321:28;2340:8;2321:18;:28::i;1186:320:12:-:0;-1:-1:-1;;;;;1476:19:12;;:23;;;1186:320::o;10456:370:8:-;-1:-1:-1;;;;;10587:19:8;;10579:68;;;;-1:-1:-1;;;10579:68:8;;10346:2:25;10579:68:8;;;10328:21:25;10385:2;10365:18;;;10358:30;10424:34;10404:18;;;10397:62;-1:-1:-1;;;10475:18:25;;;10468:34;10519:19;;10579:68:8;10144:400:25;10579:68:8;-1:-1:-1;;;;;10665:21:8;;10657:68;;;;-1:-1:-1;;;10657:68:8;;10751:2:25;10657:68:8;;;10733:21:25;10790:2;10770:18;;;10763:30;10829:34;10809:18;;;10802:62;-1:-1:-1;;;10880:18:25;;;10873:32;10922:19;;10657:68:8;10549:398:25;10657:68:8;-1:-1:-1;;;;;10736:18:8;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10787:32;;1736:25:25;;;10787:32:8;;1709:18:25;10787:32:8;;;;;;;10456:370;;;:::o;11107:441::-;11237:24;11264:25;11274:5;11281:7;11264:9;:25::i;:::-;11237:52;;-1:-1:-1;;11303:16:8;:37;11299:243;;11384:6;11364:16;:26;;11356:68;;;;-1:-1:-1;;;11356:68:8;;11154:2:25;11356:68:8;;;11136:21:25;11193:2;11173:18;;;11166:30;11232:31;11212:18;;;11205:59;11281:18;;11356:68:8;10952:353:25;11356:68:8;11466:51;11475:5;11482:7;11510:6;11491:16;:25;11466:8;:51::i;:::-;11227:321;11107:441;;;:::o;7821:651::-;-1:-1:-1;;;;;7947:18:8;;7939:68;;;;-1:-1:-1;;;7939:68:8;;11512:2:25;7939:68:8;;;11494:21:25;11551:2;11531:18;;;11524:30;11590:34;11570:18;;;11563:62;-1:-1:-1;;;11641:18:25;;;11634:35;11686:19;;7939:68:8;11310:401:25;7939:68:8;-1:-1:-1;;;;;8025:16:8;;8017:64;;;;-1:-1:-1;;;8017:64:8;;11918:2:25;8017:64:8;;;11900:21:25;11957:2;11937:18;;;11930:30;11996:34;11976:18;;;11969:62;-1:-1:-1;;;12047:18:25;;;12040:33;12090:19;;8017:64:8;11716:399:25;8017:64:8;-1:-1:-1;;;;;8163:15:8;;8141:19;8163:15;;;:9;:15;;;;;;8196:21;;;;8188:72;;;;-1:-1:-1;;;8188:72:8;;12322:2:25;8188:72:8;;;12304:21:25;12361:2;12341:18;;;12334:30;12400:34;12380:18;;;12373:62;-1:-1:-1;;;12451:18:25;;;12444:36;12497:19;;8188:72:8;12120:402:25;8188:72:8;-1:-1:-1;;;;;8294:15:8;;;;;;;:9;:15;;;;;;8312:20;;;8294:38;;8352:13;;;;;;;;:23;;8326:6;;8294:15;8352:23;;8326:6;;8352:23;:::i;:::-;;;;;;;;8406:2;-1:-1:-1;;;;;8391:26:8;8400:4;-1:-1:-1;;;;;8391:26:8;;8410:6;8391:26;;;;1736:25:25;;1724:2;1709:18;;1590:177;8391:26:8;;;;;;;;8428:37;5100:145:0;3642:103;3708:30;3719:4;929:10:13;3708::0;:30::i;7574:233::-;7657:22;7665:4;7671:7;7657;:22::i;:::-;7652:149;;7695:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;7695:29:0;;;;;;;;;:36;;-1:-1:-1;;7695:36:0;7727:4;7695:36;;;7777:12;929:10:13;;850:96;7777:12:0;-1:-1:-1;;;;;7750:40:0;7768:7;-1:-1:-1;;;;;7750:40:0;7762:4;7750:40;;;;;;;;;;7574:233;;:::o;7932:234::-;8015:22;8023:4;8029:7;8015;:22::i;:::-;8011:149;;;8085:5;8053:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;8053:29:0;;;;;;;;;;:37;;-1:-1:-1;;8053:37:0;;;8109:40;929:10:13;;8053:12:0;;8109:40;;8085:5;8109:40;7932:234;;:::o;1797:112:21:-;1348:6:2;;-1:-1:-1;;;;;1348:6:2;929:10:13;1488:23:2;1480:68;;;;-1:-1:-1;;;1480:68:2;;;;;;;:::i;2938:974:4:-;951:66;3384:59;;;3380:526;;;3459:37;3478:17;3459:18;:37::i;3380:526::-;3560:17;-1:-1:-1;;;;;3531:61:4;;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3531:63:4;;;;;;;;-1:-1:-1;;3531:63:4;;;;;;;;;;;;:::i;:::-;;;3527:302;;3758:56;;-1:-1:-1;;;3758:56:4;;12918:2:25;3758:56:4;;;12900:21:25;12957:2;12937:18;;;12930:30;12996:34;12976:18;;;12969:62;-1:-1:-1;;;13047:18:25;;;13040:44;13101:19;;3758:56:4;12716:410:25;3527:302:4;-1:-1:-1;;;;;;;;;;;3644:28:4;;3636:82;;;;-1:-1:-1;;;3636:82:4;;13333:2:25;3636:82:4;;;13315:21:25;13372:2;13352:18;;;13345:30;13411:34;13391:18;;;13384:62;-1:-1:-1;;;13462:18:25;;;13455:39;13511:19;;3636:82:4;13131:405:25;3636:82:4;3595:138;3842:53;3860:17;3879:4;3885:9;3842:17;:53::i;8748:389:8:-;-1:-1:-1;;;;;8831:21:8;;8823:65;;;;-1:-1:-1;;;8823:65:8;;13743:2:25;8823:65:8;;;13725:21:25;13782:2;13762:18;;;13755:30;13821:33;13801:18;;;13794:61;13872:18;;8823:65:8;13541:355:25;8823:65:8;8975:6;8959:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;8991:18:8;;;;;;:9;:18;;;;;:28;;9013:6;;8991:18;:28;;9013:6;;8991:28;:::i;:::-;;;;-1:-1:-1;;9034:37:8;;1736:25:25;;;-1:-1:-1;;;;;9034:37:8;;;9051:1;;9034:37;;1724:2:25;1709:18;9034:37:8;;;;;;;6117:214:0;;:::o;9457:576:8:-;-1:-1:-1;;;;;9540:21:8;;9532:67;;;;-1:-1:-1;;;9532:67:8;;14103:2:25;9532:67:8;;;14085:21:25;14142:2;14122:18;;;14115:30;14181:34;14161:18;;;14154:62;-1:-1:-1;;;14232:18:25;;;14225:31;14273:19;;9532:67:8;13901:397:25;9532:67:8;-1:-1:-1;;;;;9695:18:8;;9670:22;9695:18;;;:9;:18;;;;;;9731:24;;;;9723:71;;;;-1:-1:-1;;;9723:71:8;;14505:2:25;9723:71:8;;;14487:21:25;14544:2;14524:18;;;14517:30;14583:34;14563:18;;;14556:62;-1:-1:-1;;;14634:18:25;;;14627:32;14676:19;;9723:71:8;14303:398:25;9723:71:8;-1:-1:-1;;;;;9828:18:8;;;;;;:9;:18;;;;;9849:23;;;9828:44;;9892:12;:22;;9866:6;;9828:18;9892:22;;9866:6;;9892:22;:::i;:::-;;;;-1:-1:-1;;9930:37:8;;1736:25:25;;;9956:1:8;;-1:-1:-1;;;;;9930:37:8;;;;;1724:2:25;1709:18;9930:37:8;;;;;;;5100:145:0;;;:::o;2510:187:2:-;2602:6;;;-1:-1:-1;;;;;2618:17:2;;;-1:-1:-1;;;;;;2618:17:2;;;;;;;2650:40;;2602:6;;;2618:17;2602:6;;2650:40;;2583:16;;2650:40;2573:124;2510:187;:::o;5287:808:6:-;5351:4;5684:13;;;;;;;5680:409;;;5738:7;:12;;5749:1;5738:12;:61;;;;-1:-1:-1;5793:4:6;1476:19:12;:23;5738:61:6;5713:166;;;;-1:-1:-1;;;5713:166:6;;;;;;;:::i;:::-;-1:-1:-1;5900:5:6;;5287:808;-1:-1:-1;5287:808:6:o;5680:409::-;5944:12;;:22;;;;:12;;:22;5936:81;;;;-1:-1:-1;;;5936:81:6;;;;;;;:::i;:::-;-1:-1:-1;6031:12:6;:22;;-1:-1:-1;;6031:22:6;;;;;;;;;;;;-1:-1:-1;;5287:808:6:o;5680:409::-;5287:808;;;:::o;2116:147:8:-;4698:13:6;;;;;;;4690:69;;;;-1:-1:-1;;;4690:69:6;;;;;;;:::i;:::-;2218:38:8::1;2241:5;2248:7;2218:22;:38::i;988:95:2:-:0;4698:13:6;;;;;;;4690:69;;;;-1:-1:-1;;;4690:69:6;;;;;;;:::i;:::-;1050:26:2::1;:24;:26::i;1042:67:7:-:0;4698:13:6;;;;;;;4690:69;;;;-1:-1:-1;;;4690:69:6;;;;;;;:::i;4026:514:0:-;4114:22;4122:4;4128:7;4114;:22::i;:::-;4109:425;;4297:52;4336:7;-1:-1:-1;;;;;4297:52:0;4346:2;4297:30;:52::i;:::-;4420:49;4459:4;4466:2;4420:30;:49::i;:::-;4204:287;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;4204:287:0;;;;;;;;;;-1:-1:-1;;;4152:371:0;;;;;;;:::i;1805:281:4:-;-1:-1:-1;;;;;1476:19:12;;;1878:106:4;;;;-1:-1:-1;;;1878:106:4;;16685:2:25;1878:106:4;;;16667:21:25;16724:2;16704:18;;;16697:30;16763:34;16743:18;;;16736:62;-1:-1:-1;;;16814:18:25;;;16807:43;16867:19;;1878:106:4;16483:409:25;1878:106:4;-1:-1:-1;;;;;;;;;;;1994:85:4;;-1:-1:-1;;;;;;1994:85:4;-1:-1:-1;;;;;1994:85:4;;;;;;;;;;1805:281::o;2478:288::-;2616:29;2627:17;2616:10;:29::i;:::-;2673:1;2659:4;:11;:15;:28;;;;2678:9;2659:28;2655:105;;;2703:46;2725:17;2744:4;2703:21;:46::i;2269:159:8:-;4698:13:6;;;;;;;4690:69;;;;-1:-1:-1;;;4690:69:6;;;;;;;:::i;:::-;2381:5:8::1;:13;2389:5:::0;2381;:13:::1;:::i;:::-;-1:-1:-1::0;2404:7:8::1;:17;2414:7:::0;2404;:17:::1;:::i;1089:111:2:-:0;4698:13:6;;;;;;;4690:69;;;;-1:-1:-1;;;4690:69:6;;;;;;;:::i;:::-;1161:32:2::1;929:10:13::0;1161:18:2::1;:32::i;1599:441:15:-:0;1674:13;1699:19;1731:10;1735:6;1731:1;:10;:::i;:::-;:14;;1744:1;1731:14;:::i;:::-;1721:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1721:25:15;;1699:47;;-1:-1:-1;;;1756:6:15;1763:1;1756:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;1756:15:15;;;;;;;;;-1:-1:-1;;;1781:6:15;1788:1;1781:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;1781:15:15;;;;;;;;-1:-1:-1;1811:9:15;1823:10;1827:6;1823:1;:10;:::i;:::-;:14;;1836:1;1823:14;:::i;:::-;1811:26;;1806:132;1843:1;1839;:5;1806:132;;;-1:-1:-1;;;1890:5:15;1898:3;1890:11;1877:25;;;;;;;:::i;:::-;;;;1865:6;1872:1;1865:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;1865:37:15;;;;;;;;-1:-1:-1;1926:1:15;1916:11;;;;;1846:3;;;:::i;:::-;;;1806:132;;;-1:-1:-1;1955:10:15;;1947:55;;;;-1:-1:-1;;;1947:55:15;;19576:2:25;1947:55:15;;;19558:21:25;;;19595:18;;;19588:30;19654:34;19634:18;;;19627:62;19706:18;;1947:55:15;19374:356:25;2192:152:4;2258:37;2277:17;2258:18;:37::i;:::-;2310:27;;-1:-1:-1;;;;;2310:27:4;;;;;;;;2192:152;:::o;7088:455::-;7171:12;-1:-1:-1;;;;;1476:19:12;;;7195:88:4;;;;-1:-1:-1;;;7195:88:4;;19937:2:25;7195:88:4;;;19919:21:25;19976:2;19956:18;;;19949:30;20015:34;19995:18;;;19988:62;-1:-1:-1;;;20066:18:25;;;20059:36;20112:19;;7195:88:4;19735:402:25;7195:88:4;7354:12;7368:23;7395:6;-1:-1:-1;;;;;7395:19:4;7415:4;7395:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7353:67;;;;7437:99;7473:7;7482:10;7437:99;;;;;;;;;;;;;;;;;:35;:99::i;:::-;7430:106;7088:455;-1:-1:-1;;;;;7088:455:4:o;6622:692:12:-;6768:12;6796:7;6792:516;;;-1:-1:-1;6826:10:12;6819:17;;6792:516;6937:17;;:21;6933:365;;7131:10;7125:17;7191:15;7178:10;7174:2;7170:19;7163:44;6933:365;7270:12;7263:20;;-1:-1:-1;;;7263:20:12;;;;;;;;:::i;14:286:25:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:25;;209:43;;199:71;;266:1;263;256:12;497:250;582:1;592:113;606:6;603:1;600:13;592:113;;;682:11;;;676:18;663:11;;;656:39;628:2;621:10;592:113;;;-1:-1:-1;;739:1:25;721:16;;714:27;497:250::o;752:396::-;901:2;890:9;883:21;864:4;933:6;927:13;976:6;971:2;960:9;956:18;949:34;992:79;1064:6;1059:2;1048:9;1044:18;1039:2;1031:6;1027:15;992:79;:::i;:::-;1132:2;1111:15;-1:-1:-1;;1107:29:25;1092:45;;;;1139:2;1088:54;;752:396;-1:-1:-1;;752:396:25:o;1153:173::-;1221:20;;-1:-1:-1;;;;;1270:31:25;;1260:42;;1250:70;;1316:1;1313;1306:12;1331:254;1399:6;1407;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;1499:29;1518:9;1499:29;:::i;:::-;1489:39;1575:2;1560:18;;;;1547:32;;-1:-1:-1;;;1331:254:25:o;1772:328::-;1849:6;1857;1865;1918:2;1906:9;1897:7;1893:23;1889:32;1886:52;;;1934:1;1931;1924:12;1886:52;1957:29;1976:9;1957:29;:::i;:::-;1947:39;;2005:38;2039:2;2028:9;2024:18;2005:38;:::i;:::-;1995:48;;2090:2;2079:9;2075:18;2062:32;2052:42;;1772:328;;;;;:::o;2105:180::-;2164:6;2217:2;2205:9;2196:7;2192:23;2188:32;2185:52;;;2233:1;2230;2223:12;2185:52;-1:-1:-1;2256:23:25;;2105:180;-1:-1:-1;2105:180:25:o;2472:254::-;2540:6;2548;2601:2;2589:9;2580:7;2576:23;2572:32;2569:52;;;2617:1;2614;2607:12;2569:52;2653:9;2640:23;2630:33;;2682:38;2716:2;2705:9;2701:18;2682:38;:::i;:::-;2672:48;;2472:254;;;;;:::o;2920:186::-;2979:6;3032:2;3020:9;3011:7;3007:23;3003:32;3000:52;;;3048:1;3045;3038:12;3000:52;3071:29;3090:9;3071:29;:::i;3296:127::-;3357:10;3352:3;3348:20;3345:1;3338:31;3388:4;3385:1;3378:15;3412:4;3409:1;3402:15;3428:995;3505:6;3513;3566:2;3554:9;3545:7;3541:23;3537:32;3534:52;;;3582:1;3579;3572:12;3534:52;3605:29;3624:9;3605:29;:::i;:::-;3595:39;;3685:2;3674:9;3670:18;3657:32;3708:18;3749:2;3741:6;3738:14;3735:34;;;3765:1;3762;3755:12;3735:34;3803:6;3792:9;3788:22;3778:32;;3848:7;3841:4;3837:2;3833:13;3829:27;3819:55;;3870:1;3867;3860:12;3819:55;3906:2;3893:16;3928:2;3924;3921:10;3918:36;;;3934:18;;:::i;:::-;4009:2;4003:9;3977:2;4063:13;;-1:-1:-1;;4059:22:25;;;4083:2;4055:31;4051:40;4039:53;;;4107:18;;;4127:22;;;4104:46;4101:72;;;4153:18;;:::i;:::-;4193:10;4189:2;4182:22;4228:2;4220:6;4213:18;4268:7;4263:2;4258;4254;4250:11;4246:20;4243:33;4240:53;;;4289:1;4286;4279:12;4240:53;4345:2;4340;4336;4332:11;4327:2;4319:6;4315:15;4302:46;4390:1;4385:2;4380;4372:6;4368:15;4364:24;4357:35;4411:6;4401:16;;;;;;;3428:995;;;;;:::o;4636:260::-;4704:6;4712;4765:2;4753:9;4744:7;4740:23;4736:32;4733:52;;;4781:1;4778;4771:12;4733:52;4804:29;4823:9;4804:29;:::i;:::-;4794:39;;4852:38;4886:2;4875:9;4871:18;4852:38;:::i;5317:408::-;5519:2;5501:21;;;5558:2;5538:18;;;5531:30;5597:34;5592:2;5577:18;;5570:62;-1:-1:-1;;;5663:2:25;5648:18;;5641:42;5715:3;5700:19;;5317:408::o;5730:::-;5932:2;5914:21;;;5971:2;5951:18;;;5944:30;6010:34;6005:2;5990:18;;5983:62;-1:-1:-1;;;6076:2:25;6061:18;;6054:42;6128:3;6113:19;;5730:408::o;6143:127::-;6204:10;6199:3;6195:20;6192:1;6185:31;6235:4;6232:1;6225:15;6259:4;6256:1;6249:15;6275:125;6340:9;;;6361:10;;;6358:36;;;6374:18;;:::i;6405:356::-;6607:2;6589:21;;;6626:18;;;6619:30;6685:34;6680:2;6665:18;;6658:62;6752:2;6737:18;;6405:356::o;7191:422::-;7280:1;7323:5;7280:1;7337:270;7358:7;7348:8;7345:21;7337:270;;;7417:4;7413:1;7409:6;7405:17;7399:4;7396:27;7393:53;;;7426:18;;:::i;:::-;7476:7;7466:8;7462:22;7459:55;;;7496:16;;;;7459:55;7575:22;;;;7535:15;;;;7337:270;;;7341:3;7191:422;;;;;:::o;7618:806::-;7667:5;7697:8;7687:80;;-1:-1:-1;7738:1:25;7752:5;;7687:80;7786:4;7776:76;;-1:-1:-1;7823:1:25;7837:5;;7776:76;7868:4;7886:1;7881:59;;;;7954:1;7949:130;;;;7861:218;;7881:59;7911:1;7902:10;;7925:5;;;7949:130;7986:3;7976:8;7973:17;7970:43;;;7993:18;;:::i;:::-;-1:-1:-1;;8049:1:25;8035:16;;8064:5;;7861:218;;8163:2;8153:8;8150:16;8144:3;8138:4;8135:13;8131:36;8125:2;8115:8;8112:16;8107:2;8101:4;8098:12;8094:35;8091:77;8088:159;;;-1:-1:-1;8200:19:25;;;8232:5;;8088:159;8279:34;8304:8;8298:4;8279:34;:::i;:::-;8349:6;8345:1;8341:6;8337:19;8328:7;8325:32;8322:58;;;8360:18;;:::i;:::-;8398:20;;7618:806;-1:-1:-1;;;7618:806:25:o;8429:140::-;8487:5;8516:47;8557:4;8547:8;8543:19;8537:4;8516:47;:::i;8574:168::-;8614:7;8680:1;8676;8672:6;8668:14;8665:1;8662:21;8657:1;8650:9;8643:17;8639:45;8636:71;;;8687:18;;:::i;:::-;-1:-1:-1;8727:9:25;;8574:168::o;8946:380::-;9025:1;9021:12;;;;9068;;;9089:61;;9143:4;9135:6;9131:17;9121:27;;9089:61;9196:2;9188:6;9185:14;9165:18;9162:38;9159:161;;9242:10;9237:3;9233:20;9230:1;9223:31;9277:4;9274:1;9267:15;9305:4;9302:1;9295:15;9159:161;;8946:380;;;:::o;12527:184::-;12597:6;12650:2;12638:9;12629:7;12625:23;12621:32;12618:52;;;12666:1;12663;12656:12;12618:52;-1:-1:-1;12689:16:25;;12527:184;-1:-1:-1;12527:184:25:o;14706:128::-;14773:9;;;14794:11;;;14791:37;;;14808:18;;:::i;14839:410::-;15041:2;15023:21;;;15080:2;15060:18;;;15053:30;15119:34;15114:2;15099:18;;15092:62;-1:-1:-1;;;15185:2:25;15170:18;;15163:44;15239:3;15224:19;;14839:410::o;15254:407::-;15456:2;15438:21;;;15495:2;15475:18;;;15468:30;15534:34;15529:2;15514:18;;15507:62;-1:-1:-1;;;15600:2:25;15585:18;;15578:41;15651:3;15636:19;;15254:407::o;15666:812::-;16077:25;16072:3;16065:38;16047:3;16132:6;16126:13;16148:75;16216:6;16211:2;16206:3;16202:12;16195:4;16187:6;16183:17;16148:75;:::i;:::-;-1:-1:-1;;;16282:2:25;16242:16;;;16274:11;;;16267:40;16332:13;;16354:76;16332:13;16416:2;16408:11;;16401:4;16389:17;;16354:76;:::i;:::-;16450:17;16469:2;16446:26;;15666:812;-1:-1:-1;;;;15666:812:25:o;17023:545::-;17125:2;17120:3;17117:11;17114:448;;;17161:1;17186:5;17182:2;17175:17;17231:4;17227:2;17217:19;17301:2;17289:10;17285:19;17282:1;17278:27;17272:4;17268:38;17337:4;17325:10;17322:20;17319:47;;;-1:-1:-1;17360:4:25;17319:47;17415:2;17410:3;17406:12;17403:1;17399:20;17393:4;17389:31;17379:41;;17470:82;17488:2;17481:5;17478:13;17470:82;;;17533:17;;;17514:1;17503:13;17470:82;;;17474:3;;;17023:545;;;:::o;17744:1352::-;17870:3;17864:10;17897:18;17889:6;17886:30;17883:56;;;17919:18;;:::i;:::-;17948:97;18038:6;17998:38;18030:4;18024:11;17998:38;:::i;:::-;17992:4;17948:97;:::i;:::-;18100:4;;18164:2;18153:14;;18181:1;18176:663;;;;18883:1;18900:6;18897:89;;;-1:-1:-1;18952:19:25;;;18946:26;18897:89;-1:-1:-1;;17701:1:25;17697:11;;;17693:24;17689:29;17679:40;17725:1;17721:11;;;17676:57;18999:81;;18146:944;;18176:663;16970:1;16963:14;;;17007:4;16994:18;;-1:-1:-1;;18212:20:25;;;18330:236;18344:7;18341:1;18338:14;18330:236;;;18433:19;;;18427:26;18412:42;;18525:27;;;;18493:1;18481:14;;;;18360:19;;18330:236;;;18334:3;18594:6;18585:7;18582:19;18579:201;;;18655:19;;;18649:26;-1:-1:-1;;18738:1:25;18734:14;;;18750:3;18730:24;18726:37;18722:42;18707:58;18692:74;;18579:201;-1:-1:-1;;;;;18826:1:25;18810:14;;;18806:22;18793:36;;-1:-1:-1;17744:1352:25:o;19101:127::-;19162:10;19157:3;19153:20;19150:1;19143:31;19193:4;19190:1;19183:15;19217:4;19214:1;19207:15;19233:136;19272:3;19300:5;19290:39;;19309:18;;:::i;:::-;-1:-1:-1;;;19345:18:25;;19233:136::o;20142:287::-;20271:3;20309:6;20303:13;20325:66;20384:6;20379:3;20372:4;20364:6;20360:17;20325:66;:::i;:::-;20407:16;;;;;20142:287;-1:-1:-1;;20142:287:25:o", "language": "Solidity", "natspec": {"custom:security-contact": "security@originprotocol.com", "kind": "dev", "methods": {"allowance(address,address)": {"details": "See {IERC20-allowance}."}, "approve(address,uint256)": {"details": "See {IERC20-approve}. NOTE: If `amount` 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}."}, "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 value {ERC20} uses, unless this function is 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}."}, "decreaseAllowance(address,uint256)": {"details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."}, "getRoleAdmin(bytes32)": {"details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."}, "grantRole(bytes32,address)": {"details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role."}, "hasRole(bytes32,address)": {"details": "Returns `true` if `account` has been granted `role`."}, "increaseAllowance(address,uint256)": {"details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."}, "name()": {"details": "Returns the name of the token."}, "owner()": {"details": "Returns the address of the current owner."}, "proxiableUUID()": {"details": "Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate that the this implementation remains valid after an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."}, "renounceOwnership()": {"details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."}, "renounceRole(bytes32,address)": {"details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`."}, "revokeRole(bytes32,address)": {"details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role."}, "supportsInterface(bytes4)": {"details": "See {IERC165-supportsInterface}."}, "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 `amount`."}, "transferFrom(address,address,uint256)": {"details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. 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 `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`."}, "transferOwnership(address)": {"details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}, "upgradeTo(address)": {"details": "Upgrade the implementation of the proxy to `newImplementation`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}, "upgradeToAndCall(address,bytes)": {"details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}}, "version": 1}, "offset": [646, 2034], "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1D8 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x52D1902D GT PUSH2 0x102 JUMPI DUP1 PUSH4 0xA217FDDF GT PUSH2 0x95 JUMPI DUP1 PUSH4 0xD5391393 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xD5391393 EQ PUSH2 0x562 JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0x596 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x5B6 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x5D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA217FDDF EQ PUSH2 0x4ED JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x502 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x522 JUMPI DUP1 PUSH4 0xC634B78E EQ PUSH2 0x542 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8129FC1C GT PUSH2 0xD1 JUMPI DUP1 PUSH4 0x8129FC1C EQ PUSH2 0x47B JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x490 JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x4B8 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x4D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52D1902D EQ PUSH2 0x3FB JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x410 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x446 JUMPI DUP1 PUSH4 0x79CC6790 EQ PUSH2 0x45B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0x17A JUMPI DUP1 PUSH4 0x3DD1EB61 GT PUSH2 0x149 JUMPI DUP1 PUSH4 0x3DD1EB61 EQ PUSH2 0x388 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x3A8 JUMPI DUP1 PUSH4 0x42966C68 EQ PUSH2 0x3C8 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 EQ PUSH2 0x30C JUMPI DUP1 PUSH4 0x36568ABE EQ PUSH2 0x328 JUMPI DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x348 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0x1B6 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x27A JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x299 JUMPI DUP1 PUSH4 0x248A9CA3 EQ PUSH2 0x2B9 JUMPI DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x2EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x1DD JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x25A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x1F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C19 JUMP JUMPDEST PUSH2 0x5F6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x16 DUP2 MSTORE PUSH22 0x4F726967696E204465466920476F7665726E616E6365 PUSH1 0x50 SHL PUSH1 0x20 DUP3 ADD MSTORE JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x209 SWAP2 SWAP1 PUSH2 0x1C67 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x266 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x275 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CB1 JUMP JUMPDEST PUSH2 0x62D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x286 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x35 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x209 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x2B4 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CDB JUMP JUMPDEST PUSH2 0x645 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28B PUSH2 0x2D4 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D17 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x12D PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x30A PUSH2 0x305 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D30 JUMP JUMPDEST PUSH2 0x66B JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x318 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x12 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x209 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x334 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x30A PUSH2 0x343 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D30 JUMP JUMPDEST PUSH2 0x696 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x354 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x30A PUSH2 0x363 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D5C JUMP JUMPDEST PUSH2 0x719 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x374 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x383 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CB1 JUMP JUMPDEST PUSH2 0x7F8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x394 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x30A PUSH2 0x3A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D5C JUMP JUMPDEST PUSH2 0x81A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x30A PUSH2 0x3C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CB1 JUMP JUMPDEST PUSH2 0x86E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x30A PUSH2 0x3E3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D17 JUMP JUMPDEST PUSH2 0x8A2 JUMP JUMPDEST PUSH2 0x30A PUSH2 0x3F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D8D JUMP JUMPDEST PUSH2 0x8AC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x407 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28B PUSH2 0x978 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x41C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28B PUSH2 0x42B CALLDATASIZE PUSH1 0x4 PUSH2 0x1D5C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x452 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x30A PUSH2 0xA2B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x467 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x30A PUSH2 0x476 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CB1 JUMP JUMPDEST PUSH2 0xA61 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x487 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x30A PUSH2 0xA76 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x49C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x65 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x209 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x4D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D30 JUMP JUMPDEST PUSH2 0xB6F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x24D PUSH2 0xB9B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28B PUSH1 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x50E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x51D CALLDATASIZE PUSH1 0x4 PUSH2 0x1CB1 JUMP JUMPDEST PUSH2 0xC2D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x52E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x53D CALLDATASIZE PUSH1 0x4 PUSH2 0x1CB1 JUMP JUMPDEST PUSH2 0xCB3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x54E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x30A PUSH2 0x55D CALLDATASIZE PUSH1 0x4 PUSH2 0x1D5C JUMP JUMPDEST PUSH2 0xCC1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x56E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28B PUSH32 0x9F2DF0FED2C77648DE5860A4CC508CD0818C85B8B8A1AB4CEEEF8D981C8956A6 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x30A PUSH2 0x5B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D30 JUMP JUMPDEST PUSH2 0xCF6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28B PUSH2 0x5D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E4F JUMP JUMPDEST PUSH2 0xD1C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x30A PUSH2 0x5F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D5C JUMP JUMPDEST PUSH2 0xD47 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x7965DB0B PUSH1 0xE0 SHL EQ DUP1 PUSH2 0x627 JUMPI POP PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP4 AND EQ JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x63B DUP2 DUP6 DUP6 PUSH2 0xDEE JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x653 DUP6 DUP3 DUP6 PUSH2 0xF12 JUMP JUMPDEST PUSH2 0x65E DUP6 DUP6 DUP6 PUSH2 0xF8C JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH2 0x12D PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH2 0x687 DUP2 PUSH2 0x115A JUMP JUMPDEST PUSH2 0x691 DUP4 DUP4 PUSH2 0x1164 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND CALLER EQ PUSH2 0x70B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416363657373436F6E74726F6C3A2063616E206F6E6C792072656E6F756E6365 PUSH1 0x44 DUP3 ADD MSTORE PUSH15 0x103937B632B9903337B91039B2B633 PUSH1 0x89 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x715 DUP3 DUP3 PUSH2 0x11EB JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND ADDRESS SUB PUSH2 0x761 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x702 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7AA PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x234D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x7D0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x702 SWAP1 PUSH2 0x1EC5 JUMP JUMPDEST PUSH2 0x7D9 DUP2 PUSH2 0x1253 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x7F5 SWAP2 DUP4 SWAP2 SWAP1 PUSH2 0x127D JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x63B DUP2 DUP6 DUP6 PUSH2 0x80B DUP4 DUP4 PUSH2 0xD1C JUMP JUMPDEST PUSH2 0x815 SWAP2 SWAP1 PUSH2 0x1F27 JUMP JUMPDEST PUSH2 0xDEE JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x844 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x702 SWAP1 PUSH2 0x1F3A JUMP JUMPDEST PUSH2 0x7F5 PUSH32 0x9F2DF0FED2C77648DE5860A4CC508CD0818C85B8B8A1AB4CEEEF8D981C8956A6 DUP3 PUSH2 0x1164 JUMP JUMPDEST PUSH32 0x9F2DF0FED2C77648DE5860A4CC508CD0818C85B8B8A1AB4CEEEF8D981C8956A6 PUSH2 0x898 DUP2 PUSH2 0x115A JUMP JUMPDEST PUSH2 0x691 DUP4 DUP4 PUSH2 0x13E8 JUMP JUMPDEST PUSH2 0x7F5 CALLER DUP3 PUSH2 0x14C7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND ADDRESS SUB PUSH2 0x8F4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x702 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x93D PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x234D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x963 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x702 SWAP1 PUSH2 0x1EC5 JUMP JUMPDEST PUSH2 0x96C DUP3 PUSH2 0x1253 JUMP JUMPDEST PUSH2 0x715 DUP3 DUP3 PUSH1 0x1 PUSH2 0x127D JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xA18 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x38 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x555550535570677261646561626C653A206D757374206E6F742062652063616C PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6C6564207468726F7567682064656C656761746563616C6C0000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x702 JUMP JUMPDEST POP PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x234D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA55 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x702 SWAP1 PUSH2 0x1F3A JUMP JUMPDEST PUSH2 0xA5F PUSH1 0x0 PUSH2 0x1615 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0xA6C DUP3 CALLER DUP4 PUSH2 0xF12 JUMP JUMPDEST PUSH2 0x715 DUP3 DUP3 PUSH2 0x14C7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA82 PUSH1 0x1 PUSH2 0x1667 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0xA9A JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0xAF4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4F726967696E20446F6C6C617220476F7665726E616E63650000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x27A3AB PUSH1 0xE9 SHL DUP2 MSTORE POP PUSH2 0x16F4 JUMP JUMPDEST PUSH2 0xAFC PUSH2 0x1725 JUMP JUMPDEST PUSH2 0xB04 PUSH2 0x1754 JUMP JUMPDEST PUSH2 0xB27 CALLER PUSH2 0xB14 PUSH1 0x12 PUSH1 0xA PUSH2 0x2053 JUMP JUMPDEST PUSH2 0xB22 SWAP1 PUSH4 0x3B9ACA00 PUSH2 0x2062 JUMP JUMPDEST PUSH2 0x13E8 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x7F5 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH2 0x12D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0xBAA SWAP1 PUSH2 0x2081 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xBD6 SWAP1 PUSH2 0x2081 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xC23 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xBF8 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xC23 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xC06 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER DUP2 PUSH2 0xC3B DUP3 DUP7 PUSH2 0xD1C JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0xC9B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x702 JUMP JUMPDEST PUSH2 0xCA8 DUP3 DUP7 DUP7 DUP5 SUB PUSH2 0xDEE JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x63B DUP2 DUP6 DUP6 PUSH2 0xF8C JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xCEB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x702 SWAP1 PUSH2 0x1F3A JUMP JUMPDEST PUSH2 0x7F5 PUSH1 0x0 DUP3 PUSH2 0x1164 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH2 0x12D PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH2 0xD12 DUP2 PUSH2 0x115A JUMP JUMPDEST PUSH2 0x691 DUP4 DUP4 PUSH2 0x11EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD71 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x702 SWAP1 PUSH2 0x1F3A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xDD6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x702 JUMP JUMPDEST PUSH2 0x7F5 DUP2 PUSH2 0x1615 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xE50 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x702 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xEB1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x702 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF1E DUP5 DUP5 PUSH2 0xD1C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 NOT DUP2 EQ PUSH2 0xF86 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0xF79 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x702 JUMP JUMPDEST PUSH2 0xF86 DUP5 DUP5 DUP5 DUP5 SUB PUSH2 0xDEE JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xFF0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x702 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1052 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x702 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x10CA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x702 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP6 DUP6 SUB SWAP1 SSTORE SWAP2 DUP6 AND DUP2 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x1101 SWAP1 DUP5 SWAP1 PUSH2 0x1F27 JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD PUSH2 0x114D SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0xF86 JUMP JUMPDEST PUSH2 0x7F5 DUP2 CALLER PUSH2 0x177B JUMP JUMPDEST PUSH2 0x116E DUP3 DUP3 PUSH2 0xB6F JUMP JUMPDEST PUSH2 0x715 JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH2 0x12D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x11A7 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH2 0x11F5 DUP3 DUP3 PUSH2 0xB6F JUMP JUMPDEST ISZERO PUSH2 0x715 JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH2 0x12D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD CALLER SWAP3 DUP6 SWAP2 PUSH32 0xF6391F5C32D9C69D2A47EA670B442974B53935D1EDC7FD64EB21E047A839171B SWAP2 SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x7F5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x702 SWAP1 PUSH2 0x1F3A JUMP JUMPDEST PUSH32 0x4910FDFA16FED3260ED0E7147F7CC6DA11A60208B5B9406D12A635614FFD9143 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x12B0 JUMPI PUSH2 0x691 DUP4 PUSH2 0x17DF JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x52D1902D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x130A JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x1307 SWAP2 DUP2 ADD SWAP1 PUSH2 0x20BB JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x136D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524331393637557067726164653A206E657720696D706C656D656E74617469 PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x6F6E206973206E6F742055555053 PUSH1 0x90 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x702 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x234D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 EQ PUSH2 0x13DC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524331393637557067726164653A20756E737570706F727465642070726F78 PUSH1 0x44 DUP3 ADD MSTORE PUSH9 0x1A58589B1955555251 PUSH1 0xBA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x702 JUMP JUMPDEST POP PUSH2 0x691 DUP4 DUP4 DUP4 PUSH2 0x187B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x143E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x702 JUMP JUMPDEST DUP1 PUSH1 0x35 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x1450 SWAP2 SWAP1 PUSH2 0x1F27 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x147D SWAP1 DUP5 SWAP1 PUSH2 0x1F27 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1527 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E2066726F6D20746865207A65726F20616464726573 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x73 PUSH1 0xF8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x702 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x159B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E20616D6F756E7420657863656564732062616C616E PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x6365 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x702 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP4 DUP4 SUB SWAP1 SSTORE PUSH1 0x35 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x15CA SWAP1 DUP5 SWAP1 PUSH2 0x20D4 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x16AE JUMPI DUP2 PUSH1 0xFF AND PUSH1 0x1 EQ DUP1 ISZERO PUSH2 0x168A JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST PUSH2 0x16A6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x702 SWAP1 PUSH2 0x20E7 JUMP JUMPDEST POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF DUP1 DUP5 AND SWAP2 AND LT PUSH2 0x16D5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x702 SWAP1 PUSH2 0x20E7 JUMP JUMPDEST POP PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x171B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x702 SWAP1 PUSH2 0x2135 JUMP JUMPDEST PUSH2 0x715 DUP3 DUP3 PUSH2 0x18A0 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x174C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x702 SWAP1 PUSH2 0x2135 JUMP JUMPDEST PUSH2 0xA5F PUSH2 0x18E0 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xA5F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x702 SWAP1 PUSH2 0x2135 JUMP JUMPDEST PUSH2 0x1785 DUP3 DUP3 PUSH2 0xB6F JUMP JUMPDEST PUSH2 0x715 JUMPI PUSH2 0x179D DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x14 PUSH2 0x1910 JUMP JUMPDEST PUSH2 0x17A8 DUP4 PUSH1 0x20 PUSH2 0x1910 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x17B9 SWAP3 SWAP2 SWAP1 PUSH2 0x2180 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE PUSH3 0x461BCD PUSH1 0xE5 SHL DUP3 MSTORE PUSH2 0x702 SWAP2 PUSH1 0x4 ADD PUSH2 0x1C67 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0x184C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E PUSH1 0x44 DUP3 ADD MSTORE PUSH13 0x1BDD08184818DBDB9D1C9858DD PUSH1 0x9A SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x702 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x234D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x1884 DUP4 PUSH2 0x1AAC JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0x1891 JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0x691 JUMPI PUSH2 0xF86 DUP4 DUP4 PUSH2 0x1AEC JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x18C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x702 SWAP1 PUSH2 0x2135 JUMP JUMPDEST PUSH1 0x36 PUSH2 0x18D3 DUP4 DUP3 PUSH2 0x2243 JUMP JUMPDEST POP PUSH1 0x37 PUSH2 0x691 DUP3 DUP3 PUSH2 0x2243 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1907 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x702 SWAP1 PUSH2 0x2135 JUMP JUMPDEST PUSH2 0xA5F CALLER PUSH2 0x1615 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x191F DUP4 PUSH1 0x2 PUSH2 0x2062 JUMP JUMPDEST PUSH2 0x192A SWAP1 PUSH1 0x2 PUSH2 0x1F27 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1942 JUMPI PUSH2 0x1942 PUSH2 0x1D77 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x196C JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x3 PUSH1 0xFC SHL DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1987 JUMPI PUSH2 0x1987 PUSH2 0x2303 JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0xF PUSH1 0xFB SHL DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x19B6 JUMPI PUSH2 0x19B6 PUSH2 0x2303 JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x0 PUSH2 0x19DA DUP5 PUSH1 0x2 PUSH2 0x2062 JUMP JUMPDEST PUSH2 0x19E5 SWAP1 PUSH1 0x1 PUSH2 0x1F27 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x1A5D JUMPI PUSH16 0x181899199A1A9B1B9C1CB0B131B232B3 PUSH1 0x81 SHL DUP6 PUSH1 0xF AND PUSH1 0x10 DUP2 LT PUSH2 0x1A19 JUMPI PUSH2 0x1A19 PUSH2 0x2303 JUMP JUMPDEST BYTE PUSH1 0xF8 SHL DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1A2F JUMPI PUSH2 0x1A2F PUSH2 0x2303 JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x4 SWAP5 SWAP1 SWAP5 SHR SWAP4 PUSH2 0x1A56 DUP2 PUSH2 0x2319 JUMP JUMPDEST SWAP1 POP PUSH2 0x19E8 JUMP JUMPDEST POP DUP4 ISZERO PUSH2 0x664 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537472696E67733A20686578206C656E67746820696E73756666696369656E74 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x702 JUMP JUMPDEST PUSH2 0x1AB5 DUP2 PUSH2 0x17DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EXTCODESIZE PUSH2 0x1B54 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1B9D1C9858DD PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x702 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x1B6F SWAP2 SWAP1 PUSH2 0x2330 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1BAA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1BAF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x1BD7 DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x236D PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x1BE0 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x1BEF JUMPI POP DUP2 PUSH2 0x664 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x1BFF JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x702 SWAP2 SWAP1 PUSH2 0x1C67 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1C2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND DUP2 EQ PUSH2 0x664 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1C5E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1C46 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x1C86 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x1C43 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x16EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1CC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1CCD DUP4 PUSH2 0x1C9A JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1CF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1CF9 DUP5 PUSH2 0x1C9A JUMP JUMPDEST SWAP3 POP PUSH2 0x1D07 PUSH1 0x20 DUP6 ADD PUSH2 0x1C9A JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1D29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1D43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0x1D53 PUSH1 0x20 DUP5 ADD PUSH2 0x1C9A JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1D6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x664 DUP3 PUSH2 0x1C9A JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1DA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1DA9 DUP4 PUSH2 0x1C9A JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1DC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1DDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x1DEC JUMPI PUSH2 0x1DEC PUSH2 0x1D77 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x1E14 JUMPI PUSH2 0x1E14 PUSH2 0x1D77 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x1E2D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1E62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E6B DUP4 PUSH2 0x1C9A JUMP JUMPDEST SWAP2 POP PUSH2 0x1D53 PUSH1 0x20 DUP5 ADD PUSH2 0x1C9A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2C SWAP1 DUP3 ADD MSTORE PUSH32 0x46756E6374696F6E206D7573742062652063616C6C6564207468726F75676820 PUSH1 0x40 DUP3 ADD MSTORE PUSH12 0x19195B1959D85D1958D85B1B PUSH1 0xA2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2C SWAP1 DUP3 ADD MSTORE PUSH32 0x46756E6374696F6E206D7573742062652063616C6C6564207468726F75676820 PUSH1 0x40 DUP3 ADD MSTORE PUSH12 0x6163746976652070726F7879 PUSH1 0xA0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x627 JUMPI PUSH2 0x627 PUSH2 0x1F11 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x1FAA JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x1F90 JUMPI PUSH2 0x1F90 PUSH2 0x1F11 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x1F9D JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x1F74 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1FC1 JUMPI POP PUSH1 0x1 PUSH2 0x627 JUMP JUMPDEST DUP2 PUSH2 0x1FCE JUMPI POP PUSH1 0x0 PUSH2 0x627 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x1FE4 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x1FEE JUMPI PUSH2 0x200A JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x627 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x1FFF JUMPI PUSH2 0x1FFF PUSH2 0x1F11 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x627 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x202D JUMPI POP DUP2 DUP2 EXP PUSH2 0x627 JUMP JUMPDEST PUSH2 0x2037 DUP4 DUP4 PUSH2 0x1F6F JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x204B JUMPI PUSH2 0x204B PUSH2 0x1F11 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x664 PUSH1 0xFF DUP5 AND DUP4 PUSH2 0x1FB2 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x207C JUMPI PUSH2 0x207C PUSH2 0x1F11 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x2095 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x20B5 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x20CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x627 JUMPI PUSH2 0x627 PUSH2 0x1F11 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2E SWAP1 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 PUSH1 0x40 DUP3 ADD MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2B SWAP1 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 PUSH1 0x40 DUP3 ADD MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH32 0x416363657373436F6E74726F6C3A206163636F756E7420000000000000000000 DUP2 MSTORE PUSH1 0x0 DUP4 MLOAD PUSH2 0x21B8 DUP2 PUSH1 0x17 DUP6 ADD PUSH1 0x20 DUP9 ADD PUSH2 0x1C43 JUMP JUMPDEST PUSH17 0x1034B99036B4B9B9B4B733903937B6329 PUSH1 0x7D SHL PUSH1 0x17 SWAP2 DUP5 ADD SWAP2 DUP3 ADD MSTORE DUP4 MLOAD PUSH2 0x21E9 DUP2 PUSH1 0x28 DUP5 ADD PUSH1 0x20 DUP9 ADD PUSH2 0x1C43 JUMP JUMPDEST ADD PUSH1 0x28 ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x691 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH2 0x221C JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x223B JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2228 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x225D JUMPI PUSH2 0x225D PUSH2 0x1D77 JUMP JUMPDEST PUSH2 0x2271 DUP2 PUSH2 0x226B DUP5 SLOAD PUSH2 0x2081 JUMP JUMPDEST DUP5 PUSH2 0x21F5 JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH2 0x22A6 JUMPI PUSH1 0x0 DUP5 ISZERO PUSH2 0x228E JUMPI POP DUP6 DUP4 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP7 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP6 SWAP1 SHL OR DUP6 SSTORE PUSH2 0x223B JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x22D5 JUMPI DUP9 DUP7 ADD MLOAD DUP3 SSTORE SWAP5 DUP5 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 DUP5 ADD PUSH2 0x22B6 JUMP JUMPDEST POP DUP6 DUP3 LT ISZERO PUSH2 0x22F3 JUMPI DUP8 DUP6 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP9 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x2328 JUMPI PUSH2 0x2328 PUSH2 0x1F11 JUMP JUMPDEST POP PUSH1 0x0 NOT ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x2342 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1C43 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID CALLDATASIZE ADDMOD SWAP5 LOG1 EXTCODESIZE LOG1 LOG3 0x21 MOD PUSH8 0xC828492DB98DCA3E KECCAK256 PUSH23 0xCC3735A920A3CA505D382BBC416464726573733A206C6F PUSH24 0x2D6C6576656C2064656C65676174652063616C6C20666169 PUSH13 0x6564A264697066735822122097 0xB3 0xE3 LOG1 ISZERO SWAP8 0x23 0xD7 0xBA MLOAD REVERT 0x2A LOG2 SDIV 0x4B 0xEA 0xF 0xC4 0xF8 PUSH9 0xD239B5FDE6B61C9040 XOR 0xC7 SIGNEXTEND PUSH5 0x736F6C6343 STOP ADDMOD LT STOP CALLER ", "sha1": "32c1e2372219a912d5dbb50a2007570eeb674415", "source": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\nimport \"OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/token/ERC20/ERC20Upgradeable.sol\";\nimport \"OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/access/OwnableUpgradeable.sol\";\nimport \"OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/access/AccessControlUpgradeable.sol\";\nimport \"OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/proxy/utils/Initializable.sol\";\nimport \"OpenZeppelin/openzeppelin-contracts-upgradeable@4.6.0/contracts/proxy/utils/UUPSUpgradeable.sol\";\n\n/// @custom:security-contact security@originprotocol.com\ncontract OriginDollarGovernance is\n Initializable,\n ERC20Upgradeable,\n OwnableUpgradeable,\n UUPSUpgradeable,\n AccessControlUpgradeable\n{\n bytes32 public constant MINTER_ROLE = keccak256(\"MINTER_ROLE\");\n\n /// @custom:oz-upgrades-unsafe-allow constructor\n constructor() initializer {}\n\n function initialize() public initializer {\n __ERC20_init(\"Origin Dollar Governance\", \"OGV\");\n __Ownable_init();\n __UUPSUpgradeable_init();\n\n _mint(msg.sender, 1000000000 * 10**decimals());\n }\n\n function mint(address to, uint256 amount) public onlyRole(MINTER_ROLE) {\n _mint(to, amount);\n }\n\n function burn(uint256 amount) public virtual {\n _burn(_msgSender(), amount);\n }\n\n function burnFrom(address account, uint256 amount) public virtual {\n _spendAllowance(account, _msgSender(), amount);\n _burn(account, amount);\n }\n\n function grantMinterRole(address _account) public onlyOwner {\n _grantRole(MINTER_ROLE, _account);\n }\n\n function grantAdminRole(address _account) public onlyOwner {\n _grantRole(DEFAULT_ADMIN_ROLE, _account);\n }\n\n function _authorizeUpgrade(address newImplementation)\n internal\n override\n onlyOwner\n {}\n\n function name() public view virtual override returns (string memory) {\n return \"Origin DeFi Governance\";\n }\n}\n", "sourceMap": "646:1388:21:-:0;;;1332:4:7;1289:48;;924:28:21;;;;;;;;;-1:-1:-1;3111:19:6;3133:25;3156:1;3133:22;:25::i;:::-;3111:47;;3172:14;3168:65;;;3202:13;:20;;-1:-1:-1;;3202:20:6;;;;;3168:65;3257:14;3253:99;;;3303:5;3287:21;;-1:-1:-1;;3287:21:6;;;3327:14;;-1:-1:-1;166:36:25;;3327:14:6;;154:2:25;139:18;3327:14:6;;;;;;;3253:99;3101:257;646:1388:21;;5287:808:6;5351:4;5684:13;;;;;;;5680:409;;;5738:7;:12;;5749:1;5738:12;:61;;;;;5755:44;5793:4;5755:29;;;;;:44;;:::i;:::-;5754:45;5738:61;5713:166;;;;-1:-1:-1;;;5713:166:6;;415:2:25;5713:166:6;;;397:21:25;454:2;434:18;;;427:30;-1:-1:-1;;;;;;;;;;;473:18:25;;;466:62;-1:-1:-1;;;544:18:25;;;537:44;598:19;;5713:166:6;;;;;;;;;-1:-1:-1;5900:5:6;;5287:808;-1:-1:-1;5287:808:6:o;5680:409::-;5944:12;;:22;;;;:12;;:22;5936:81;;;;-1:-1:-1;;;5936:81:6;;415:2:25;5936:81:6;;;397:21:25;454:2;434:18;;;427:30;-1:-1:-1;;;;;;;;;;;473:18:25;;;466:62;-1:-1:-1;;;544:18:25;;;537:44;598:19;;5936:81:6;213:410:25;5936:81:6;-1:-1:-1;6031:12:6;:22;;-1:-1:-1;;6031:22:6;;;;;;;;;;;;-1:-1:-1;;5287:808:6:o;1186:320:12:-;-1:-1:-1;;;;;1476:19:12;;:23;;;1186:320::o;213:410:25:-;646:1388:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", "sourcePath": "contracts/GovernanceToken.sol", "type": "contract", "deployment": {"address": "0x190140d8D1815f6f92FD58DF0dacB758276fFFDB", "chainid": "1", "blockHeight": 18627534}} \ No newline at end of file diff --git a/build/deployments/1/0xFd8e7DAcC16c3807E66FEdD4F7c65f26B1fEE558.json b/build/deployments/1/0xFd8e7DAcC16c3807E66FEdD4F7c65f26B1fEE558.json new file mode 100644 index 00000000..6b99b114 --- /dev/null +++ b/build/deployments/1/0xFd8e7DAcC16c3807E66FEdD4F7c65f26B1fEE558.json @@ -0,0 +1 @@ +{"abi": [{"inputs": [{"internalType": "address", "name": "ogv_", "type": "address"}, {"internalType": "uint256", "name": "epoch_", "type": "uint256"}, {"internalType": "uint256", "name": "minStakeDuration_", "type": "uint256"}, {"internalType": "address", "name": "rewardsSource_", "type": "address"}], "stateMutability": "nonpayable", "type": "constructor", "name": "constructor"}, {"inputs": [{"internalType": "uint256", "name": "x", "type": "uint256"}], "name": "PRBMathUD60x18__Exp2InputTooBig", "type": "error"}, {"inputs": [{"internalType": "uint256", "name": "x", "type": "uint256"}], "name": "PRBMathUD60x18__LogInputTooSmall", "type": "error"}, {"inputs": [{"internalType": "uint256", "name": "prod1", "type": "uint256"}], "name": "PRBMath__MulDivFixedPointOverflow", "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": [{"indexed": true, "internalType": "address", "name": "delegator", "type": "address"}, {"indexed": true, "internalType": "address", "name": "fromDelegate", "type": "address"}, {"indexed": true, "internalType": "address", "name": "toDelegate", "type": "address"}], "name": "DelegateChanged", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "address", "name": "delegate", "type": "address"}, {"indexed": false, "internalType": "uint256", "name": "previousBalance", "type": "uint256"}, {"indexed": false, "internalType": "uint256", "name": "newBalance", "type": "uint256"}], "name": "DelegateVotesChanged", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "address", "name": "user", "type": "address"}, {"indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256"}], "name": "Reward", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "address", "name": "user", "type": "address"}, {"indexed": false, "internalType": "uint256", "name": "lockupId", "type": "uint256"}, {"indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256"}, {"indexed": false, "internalType": "uint256", "name": "end", "type": "uint256"}, {"indexed": false, "internalType": "uint256", "name": "points", "type": "uint256"}], "name": "Stake", "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"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "address", "name": "user", "type": "address"}, {"indexed": false, "internalType": "uint256", "name": "lockupId", "type": "uint256"}, {"indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256"}, {"indexed": false, "internalType": "uint256", "name": "end", "type": "uint256"}, {"indexed": false, "internalType": "uint256", "name": "points", "type": "uint256"}], "name": "Unstake", "type": "event"}, {"inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "accRewardPerShare", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "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": "amount", "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": "address", "name": "account", "type": "address"}, {"internalType": "uint32", "name": "pos", "type": "uint32"}], "name": "checkpoints", "outputs": [{"components": [{"internalType": "uint32", "name": "fromBlock", "type": "uint32"}, {"internalType": "uint224", "name": "votes", "type": "uint224"}], "internalType": "struct ERC20Votes.Checkpoint", "name": "", "type": "tuple"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "collectRewards", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [], "name": "decimals", "outputs": [{"internalType": "uint8", "name": "", "type": "uint8"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "spender", "type": "address"}, {"internalType": "uint256", "name": "subtractedValue", "type": "uint256"}], "name": "decreaseAllowance", "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "delegatee", "type": "address"}], "name": "delegate", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "delegatee", "type": "address"}, {"internalType": "uint256", "name": "nonce", "type": "uint256"}, {"internalType": "uint256", "name": "expiry", "type": "uint256"}, {"internalType": "uint8", "name": "v", "type": "uint8"}, {"internalType": "bytes32", "name": "r", "type": "bytes32"}, {"internalType": "bytes32", "name": "s", "type": "bytes32"}], "name": "delegateBySig", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "account", "type": "address"}], "name": "delegates", "outputs": [{"internalType": "address", "name": "", "type": "address"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "epoch", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "lockupId", "type": "uint256"}, {"internalType": "uint256", "name": "duration", "type": "uint256"}], "name": "extend", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "blockNumber", "type": "uint256"}], "name": "getPastTotalSupply", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "account", "type": "address"}, {"internalType": "uint256", "name": "blockNumber", "type": "uint256"}], "name": "getPastVotes", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "account", "type": "address"}], "name": "getVotes", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "", "type": "address"}], "name": "hasDelegationSet", "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "spender", "type": "address"}, {"internalType": "uint256", "name": "addedValue", "type": "uint256"}], "name": "increaseAllowance", "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "", "type": "address"}, {"internalType": "uint256", "name": "", "type": "uint256"}], "name": "lockups", "outputs": [{"internalType": "uint128", "name": "amount", "type": "uint128"}, {"internalType": "uint128", "name": "end", "type": "uint128"}, {"internalType": "uint256", "name": "points", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "minStakeDuration", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "name", "outputs": [{"internalType": "string", "name": "", "type": "string"}], "stateMutability": "pure", "type": "function"}, {"inputs": [{"internalType": "address", "name": "owner", "type": "address"}], "name": "nonces", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "account", "type": "address"}], "name": "numCheckpoints", "outputs": [{"internalType": "uint32", "name": "", "type": "uint32"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "ogv", "outputs": [{"internalType": "contract ERC20", "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": [{"internalType": "uint256", "name": "amount", "type": "uint256"}, {"internalType": "uint256", "name": "duration", "type": "uint256"}], "name": "previewPoints", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}, {"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "user", "type": "address"}], "name": "previewRewards", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "", "type": "address"}], "name": "rewardDebtPerShare", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "rewardsSource", "outputs": [{"internalType": "contract RewardsSource", "name": "", "type": "address"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "amount", "type": "uint256"}, {"internalType": "uint256", "name": "duration", "type": "uint256"}, {"internalType": "address", "name": "to", "type": "address"}], "name": "stake", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "amount", "type": "uint256"}, {"internalType": "uint256", "name": "duration", "type": "uint256"}], "name": "stake", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [], "name": "symbol", "outputs": [{"internalType": "string", "name": "", "type": "string"}], "stateMutability": "pure", "type": "function"}, {"inputs": [], "name": "totalSupply", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "", "type": "address"}, {"internalType": "uint256", "name": "", "type": "uint256"}], "name": "transfer", "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "", "type": "address"}, {"internalType": "address", "name": "", "type": "address"}, {"internalType": "uint256", "name": "", "type": "uint256"}], "name": "transferFrom", "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "lockupId", "type": "uint256"}], "name": "unstake", "outputs": [], "stateMutability": "nonpayable", "type": "function"}], "allSourcePaths": {"0": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/governance/utils/IVotes.sol", "1": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/ERC20.sol", "11": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/utils/cryptography/draft-EIP712.sol", "14": "/Users/shah/.brownie/packages/paulrberg/prb-math@2.5.0/contracts/PRBMath.sol", "15": "/Users/shah/.brownie/packages/paulrberg/prb-math@2.5.0/contracts/PRBMathUD60x18.sol", "17": "contracts/OgvStaking.sol", "18": "contracts/RewardsSource.sol", "2": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/IERC20.sol", "3": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/extensions/ERC20Votes.sol", "4": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/extensions/IERC20Metadata.sol", "5": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/extensions/draft-ERC20Permit.sol", "6": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/extensions/draft-IERC20Permit.sol", "7": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/utils/Context.sol"}, "ast": {"absolutePath": "contracts/OgvStaking.sol", "exportedSymbols": {"ERC20": [1392], "ERC20Permit": [2201], "ERC20Votes": [2029], "OgvStaking": [806], "PRBMathUD60x18": [2811], "RewardsSource": [3325]}, "id": 807, "license": "MIT", "nodeType": "SourceUnit", "nodes": [{"id": 1, "literals": ["solidity", "0.8", ".10"], "nodeType": "PragmaDirective", "src": "32:23:17"}, {"absolutePath": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/extensions/ERC20Votes.sol", "file": "OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/extensions/ERC20Votes.sol", "id": 3, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", "scope": 807, "sourceUnit": 2030, "src": "56:117:17", "symbolAliases": [{"foreign": {"id": 2, "name": "ERC20Votes", "nodeType": "Identifier", "overloadedDeclarations": [], "src": "64:10:17", "typeDescriptions": {}}, "nameLocation": "-1:-1:-1"}], "unitAlias": ""}, {"absolutePath": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/extensions/draft-ERC20Permit.sol", "file": "OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/extensions/draft-ERC20Permit.sol", "id": 5, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", "scope": 807, "sourceUnit": 2202, "src": "174:125:17", "symbolAliases": [{"foreign": {"id": 4, "name": "ERC20Permit", "nodeType": "Identifier", "overloadedDeclarations": [], "src": "182:11:17", "typeDescriptions": {}}, "nameLocation": "-1:-1:-1"}], "unitAlias": ""}, {"absolutePath": "/Users/shah/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/ERC20.sol", "file": "OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/ERC20.sol", "id": 7, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", "scope": 807, "sourceUnit": 1393, "src": "300:96:17", "symbolAliases": [{"foreign": {"id": 6, "name": "ERC20", "nodeType": "Identifier", "overloadedDeclarations": [], "src": "308:5:17", "typeDescriptions": {}}, "nameLocation": "-1:-1:-1"}], "unitAlias": ""}, {"absolutePath": "/Users/shah/.brownie/packages/paulrberg/prb-math@2.5.0/contracts/PRBMathUD60x18.sol", "file": "paulrberg/prb-math@2.5.0/contracts/PRBMathUD60x18.sol", "id": 9, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", "scope": 807, "sourceUnit": 2812, "src": "397:85:17", "symbolAliases": [{"foreign": {"id": 8, "name": "PRBMathUD60x18", "nodeType": "Identifier", "overloadedDeclarations": [], "src": "405:14:17", "typeDescriptions": {}}, "nameLocation": "-1:-1:-1"}], "unitAlias": ""}, {"absolutePath": "contracts/RewardsSource.sol", "file": "./RewardsSource.sol", "id": 11, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", "scope": 807, "sourceUnit": 3326, "src": "483:50:17", "symbolAliases": [{"foreign": {"id": 10, "name": "RewardsSource", "nodeType": "Identifier", "overloadedDeclarations": [], "src": "491:13:17", "typeDescriptions": {}}, "nameLocation": "-1:-1:-1"}], "unitAlias": ""}, {"abstract": false, "baseContracts": [{"baseName": {"id": 13, "name": "ERC20Votes", "nodeType": "IdentifierPath", "referencedDeclaration": 2029, "src": "860:10:17"}, "id": 14, "nodeType": "InheritanceSpecifier", "src": "860:10:17"}], "canonicalName": "OgvStaking", "contractDependencies": [], "contractKind": "contract", "documentation": {"id": 12, "nodeType": "StructuredDocumentation", "src": "535:302:17", "text": "@title OGV Staking\n @author Daniel Von Fange\n @notice Provides staking, vote power history, vote delegation, and rewards\n distribution.\n The balance received for staking (and thus the voting power and rewards\n distribution) goes up exponentially by the end of the staked period."}, "fullyImplemented": true, "id": 806, "linearizedBaseContracts": [806, 2029, 2201, 4680, 4452, 1392, 3428, 3403, 3450, 3528], "name": "OgvStaking", "nameLocation": "846:10:17", "nodeType": "ContractDefinition", "nodes": [{"constant": false, "functionSelector": "900cf0cf", "id": 16, "mutability": "immutable", "name": "epoch", "nameLocation": "925:5:17", "nodeType": "VariableDeclaration", "scope": 806, "src": "900:30:17", "stateVariable": true, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 15, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "900:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "public"}, {"constant": false, "functionSelector": "5fec5c64", "id": 18, "mutability": "immutable", "name": "minStakeDuration", "nameLocation": "974:16:17", "nodeType": "VariableDeclaration", "scope": 806, "src": "949:41:17", "stateVariable": true, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 17, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "949:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "public"}, {"constant": true, "id": 21, "mutability": "constant", "name": "YEAR_BASE", "nameLocation": "1065:9:17", "nodeType": "VariableDeclaration", "scope": 806, "src": "1048:34:17", "stateVariable": true, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 19, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1048:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "value": {"hexValue": "3138653137", "id": 20, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1077:5:17", "typeDescriptions": {"typeIdentifier": "t_rational_1800000000000000000_by_1", "typeString": "int_const 1800000000000000000"}, "value": "18e17"}, "visibility": "internal"}, {"canonicalName": "OgvStaking.Lockup", "id": 28, "members": [{"constant": false, "id": 23, "mutability": "mutable", "name": "amount", "nameLocation": "1120:6:17", "nodeType": "VariableDeclaration", "scope": 28, "src": "1112:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}, "typeName": {"id": 22, "name": "uint128", "nodeType": "ElementaryTypeName", "src": "1112:7:17", "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, "visibility": "internal"}, {"constant": false, "id": 25, "mutability": "mutable", "name": "end", "nameLocation": "1144:3:17", "nodeType": "VariableDeclaration", "scope": 28, "src": "1136:11:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}, "typeName": {"id": 24, "name": "uint128", "nodeType": "ElementaryTypeName", "src": "1136:7:17", "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, "visibility": "internal"}, {"constant": false, "id": 27, "mutability": "mutable", "name": "points", "nameLocation": "1165:6:17", "nodeType": "VariableDeclaration", "scope": 28, "src": "1157:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 26, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1157:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "name": "Lockup", "nameLocation": "1095:6:17", "nodeType": "StructDefinition", "scope": 806, "src": "1088:90:17", "visibility": "public"}, {"constant": false, "functionSelector": "c93d0b1e", "id": 34, "mutability": "mutable", "name": "lockups", "nameLocation": "1219:7:17", "nodeType": "VariableDeclaration", "scope": 806, "src": "1183:43:17", "stateVariable": true, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Lockup_$28_storage_$dyn_storage_$", "typeString": "mapping(address => struct OgvStaking.Lockup[])"}, "typeName": {"id": 33, "keyType": {"id": 29, "name": "address", "nodeType": "ElementaryTypeName", "src": "1191:7:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "nodeType": "Mapping", "src": "1183:28:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Lockup_$28_storage_$dyn_storage_$", "typeString": "mapping(address => struct OgvStaking.Lockup[])"}, "valueType": {"baseType": {"id": 31, "nodeType": "UserDefinedTypeName", "pathNode": {"id": 30, "name": "Lockup", "nodeType": "IdentifierPath", "referencedDeclaration": 28, "src": "1202:6:17"}, "referencedDeclaration": 28, "src": "1202:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_storage_ptr", "typeString": "struct OgvStaking.Lockup"}}, "id": 32, "nodeType": "ArrayTypeName", "src": "1202:8:17", "typeDescriptions": {"typeIdentifier": "t_array$_t_struct$_Lockup_$28_storage_$dyn_storage_ptr", "typeString": "struct OgvStaking.Lockup[]"}}}, "visibility": "public"}, {"constant": false, "functionSelector": "142561cf", "id": 37, "mutability": "immutable", "name": "ogv", "nameLocation": "1281:3:17", "nodeType": "VariableDeclaration", "scope": 806, "src": "1258:26:17", "stateVariable": true, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_contract$_ERC20_$1392", "typeString": "contract ERC20"}, "typeName": {"id": 36, "nodeType": "UserDefinedTypeName", "pathNode": {"id": 35, "name": "ERC20", "nodeType": "IdentifierPath", "referencedDeclaration": 1392, "src": "1258:5:17"}, "referencedDeclaration": 1392, "src": "1258:5:17", "typeDescriptions": {"typeIdentifier": "t_contract$_ERC20_$1392", "typeString": "contract ERC20"}}, "visibility": "public"}, {"constant": false, "functionSelector": "f7240d2f", "id": 40, "mutability": "immutable", "name": "rewardsSource", "nameLocation": "1350:13:17", "nodeType": "VariableDeclaration", "scope": 806, "src": "1319:44:17", "stateVariable": true, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_contract$_RewardsSource_$3325", "typeString": "contract RewardsSource"}, "typeName": {"id": 39, "nodeType": "UserDefinedTypeName", "pathNode": {"id": 38, "name": "RewardsSource", "nodeType": "IdentifierPath", "referencedDeclaration": 3325, "src": "1319:13:17"}, "referencedDeclaration": 3325, "src": "1319:13:17", "typeDescriptions": {"typeIdentifier": "t_contract$_RewardsSource_$3325", "typeString": "contract RewardsSource"}}, "visibility": "public"}, {"constant": false, "functionSelector": "4423bf57", "id": 44, "mutability": "mutable", "name": "rewardDebtPerShare", "nameLocation": "1404:18:17", "nodeType": "VariableDeclaration", "scope": 806, "src": "1369:53:17", "stateVariable": true, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)"}, "typeName": {"id": 43, "keyType": {"id": 41, "name": "address", "nodeType": "ElementaryTypeName", "src": "1377:7:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "nodeType": "Mapping", "src": "1369:27:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)"}, "valueType": {"id": 42, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1388:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}}, "visibility": "public"}, {"constant": false, "functionSelector": "939d6237", "id": 46, "mutability": "mutable", "name": "accRewardPerShare", "nameLocation": "1443:17:17", "nodeType": "VariableDeclaration", "scope": 806, "src": "1428:32:17", "stateVariable": true, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 45, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1428:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "public"}, {"constant": false, "functionSelector": "0348dbf1", "id": 50, "mutability": "mutable", "name": "hasDelegationSet", "nameLocation": "1860:16:17", "nodeType": "VariableDeclaration", "scope": 806, "src": "1828:48:17", "stateVariable": true, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_bool_$", "typeString": "mapping(address => bool)"}, "typeName": {"id": 49, "keyType": {"id": 47, "name": "address", "nodeType": "ElementaryTypeName", "src": "1836:7:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "nodeType": "Mapping", "src": "1828:24:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_bool_$", "typeString": "mapping(address => bool)"}, "valueType": {"id": 48, "name": "bool", "nodeType": "ElementaryTypeName", "src": "1847:4:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}}, "visibility": "public"}, {"anonymous": false, "id": 62, "name": "Stake", "nameLocation": "1903:5:17", "nodeType": "EventDefinition", "parameters": {"id": 61, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 52, "indexed": true, "mutability": "mutable", "name": "user", "nameLocation": "1934:4:17", "nodeType": "VariableDeclaration", "scope": 62, "src": "1918:20:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 51, "name": "address", "nodeType": "ElementaryTypeName", "src": "1918:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}, {"constant": false, "id": 54, "indexed": false, "mutability": "mutable", "name": "lockupId", "nameLocation": "1956:8:17", "nodeType": "VariableDeclaration", "scope": 62, "src": "1948:16:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 53, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1948:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 56, "indexed": false, "mutability": "mutable", "name": "amount", "nameLocation": "1982:6:17", "nodeType": "VariableDeclaration", "scope": 62, "src": "1974:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 55, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1974:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 58, "indexed": false, "mutability": "mutable", "name": "end", "nameLocation": "2006:3:17", "nodeType": "VariableDeclaration", "scope": 62, "src": "1998:11:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 57, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1998:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 60, "indexed": false, "mutability": "mutable", "name": "points", "nameLocation": "2027:6:17", "nodeType": "VariableDeclaration", "scope": 62, "src": "2019:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 59, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "2019:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "1908:131:17"}, "src": "1897:143:17"}, {"anonymous": false, "id": 74, "name": "Unstake", "nameLocation": "2051:7:17", "nodeType": "EventDefinition", "parameters": {"id": 73, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 64, "indexed": true, "mutability": "mutable", "name": "user", "nameLocation": "2084:4:17", "nodeType": "VariableDeclaration", "scope": 74, "src": "2068:20:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 63, "name": "address", "nodeType": "ElementaryTypeName", "src": "2068:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}, {"constant": false, "id": 66, "indexed": false, "mutability": "mutable", "name": "lockupId", "nameLocation": "2106:8:17", "nodeType": "VariableDeclaration", "scope": 74, "src": "2098:16:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 65, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "2098:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 68, "indexed": false, "mutability": "mutable", "name": "amount", "nameLocation": "2132:6:17", "nodeType": "VariableDeclaration", "scope": 74, "src": "2124:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 67, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "2124:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 70, "indexed": false, "mutability": "mutable", "name": "end", "nameLocation": "2156:3:17", "nodeType": "VariableDeclaration", "scope": 74, "src": "2148:11:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 69, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "2148:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 72, "indexed": false, "mutability": "mutable", "name": "points", "nameLocation": "2177:6:17", "nodeType": "VariableDeclaration", "scope": 74, "src": "2169:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 71, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "2169:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "2058:131:17"}, "src": "2045:145:17"}, {"anonymous": false, "id": 80, "name": "Reward", "nameLocation": "2201:6:17", "nodeType": "EventDefinition", "parameters": {"id": 79, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 76, "indexed": true, "mutability": "mutable", "name": "user", "nameLocation": "2224:4:17", "nodeType": "VariableDeclaration", "scope": 80, "src": "2208:20:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 75, "name": "address", "nodeType": "ElementaryTypeName", "src": "2208:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}, {"constant": false, "id": 78, "indexed": false, "mutability": "mutable", "name": "amount", "nameLocation": "2238:6:17", "nodeType": "VariableDeclaration", "scope": 80, "src": "2230:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 77, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "2230:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "2207:38:17"}, "src": "2195:51:17"}, {"body": {"id": 118, "nodeType": "Block", "src": "2444:159:17", "statements": [{"expression": {"id": 102, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": {"id": 98, "name": "ogv", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 37, "src": "2454:3:17", "typeDescriptions": {"typeIdentifier": "t_contract$_ERC20_$1392", "typeString": "contract ERC20"}}, "nodeType": "Assignment", "operator": "=", "rightHandSide": {"arguments": [{"id": 100, "name": "ogv_", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 82, "src": "2466:4:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "id": 99, "name": "ERC20", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1392, "src": "2460:5:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_contract$_ERC20_$1392_$", "typeString": "type(contract ERC20)"}}, "id": 101, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2460:11:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_contract$_ERC20_$1392", "typeString": "contract ERC20"}}, "src": "2454:17:17", "typeDescriptions": {"typeIdentifier": "t_contract$_ERC20_$1392", "typeString": "contract ERC20"}}, "id": 103, "nodeType": "ExpressionStatement", "src": "2454:17:17"}, {"expression": {"id": 106, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": {"id": 104, "name": "epoch", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 16, "src": "2481:5:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "Assignment", "operator": "=", "rightHandSide": {"id": 105, "name": "epoch_", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 84, "src": "2489:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "2481:14:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "id": 107, "nodeType": "ExpressionStatement", "src": "2481:14:17"}, {"expression": {"id": 110, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": {"id": 108, "name": "minStakeDuration", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 18, "src": "2505:16:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "Assignment", "operator": "=", "rightHandSide": {"id": 109, "name": "minStakeDuration_", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 86, "src": "2524:17:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "2505:36:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "id": 111, "nodeType": "ExpressionStatement", "src": "2505:36:17"}, {"expression": {"id": 116, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": {"id": 112, "name": "rewardsSource", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 40, "src": "2551:13:17", "typeDescriptions": {"typeIdentifier": "t_contract$_RewardsSource_$3325", "typeString": "contract RewardsSource"}}, "nodeType": "Assignment", "operator": "=", "rightHandSide": {"arguments": [{"id": 114, "name": "rewardsSource_", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 88, "src": "2581:14:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "id": 113, "name": "RewardsSource", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3325, "src": "2567:13:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_contract$_RewardsSource_$3325_$", "typeString": "type(contract RewardsSource)"}}, "id": 115, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2567:29:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_contract$_RewardsSource_$3325", "typeString": "contract RewardsSource"}}, "src": "2551:45:17", "typeDescriptions": {"typeIdentifier": "t_contract$_RewardsSource_$3325", "typeString": "contract RewardsSource"}}, "id": 117, "nodeType": "ExpressionStatement", "src": "2551:45:17"}]}, "id": 119, "implemented": true, "kind": "constructor", "modifiers": [{"arguments": [{"hexValue": "", "id": 91, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "2415:2:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "typeString": "literal_string \"\""}, "value": ""}, {"hexValue": "", "id": 92, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "2419:2:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "typeString": "literal_string \"\""}, "value": ""}], "id": 93, "kind": "baseConstructorSpecifier", "modifierName": {"id": 90, "name": "ERC20", "nodeType": "IdentifierPath", "referencedDeclaration": 1392, "src": "2409:5:17"}, "nodeType": "ModifierInvocation", "src": "2409:13:17"}, {"arguments": [{"hexValue": "76654f4756", "id": 95, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "2435:7:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_4b159c4a905f2022b9e1f6b831656ce74997c155de726499d27a28637823c6fe", "typeString": "literal_string \"veOGV\""}, "value": "veOGV"}], "id": 96, "kind": "baseConstructorSpecifier", "modifierName": {"id": 94, "name": "ERC20Permit", "nodeType": "IdentifierPath", "referencedDeclaration": 2201, "src": "2423:11:17"}, "nodeType": "ModifierInvocation", "src": "2423:20:17"}], "name": "", "nameLocation": "-1:-1:-1", "nodeType": "FunctionDefinition", "parameters": {"id": 89, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 82, "mutability": "mutable", "name": "ogv_", "nameLocation": "2307:4:17", "nodeType": "VariableDeclaration", "scope": 119, "src": "2299:12:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 81, "name": "address", "nodeType": "ElementaryTypeName", "src": "2299:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}, {"constant": false, "id": 84, "mutability": "mutable", "name": "epoch_", "nameLocation": "2329:6:17", "nodeType": "VariableDeclaration", "scope": 119, "src": "2321:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 83, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "2321:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 86, "mutability": "mutable", "name": "minStakeDuration_", "nameLocation": "2353:17:17", "nodeType": "VariableDeclaration", "scope": 119, "src": "2345:25:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 85, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "2345:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 88, "mutability": "mutable", "name": "rewardsSource_", "nameLocation": "2388:14:17", "nodeType": "VariableDeclaration", "scope": 119, "src": "2380:22:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 87, "name": "address", "nodeType": "ElementaryTypeName", "src": "2380:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}], "src": "2289:119:17"}, "returnParameters": {"id": 97, "nodeType": "ParameterList", "parameters": [], "src": "2444:0:17"}, "scope": 806, "src": "2278:325:17", "stateMutability": "nonpayable", "virtual": false, "visibility": "public"}, {"baseFunctions": [861], "body": {"id": 127, "nodeType": "Block", "src": "2670:62:17", "statements": [{"expression": {"hexValue": "566f746520457363726f776564204f726967696e204465466920476f7665726e616e6365", "id": 125, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "2687:38:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_9ed8612c298e0ed973579dfc9f5159a5f739c7210939fb6eb37774d46e7014b1", "typeString": "literal_string \"Vote Escrowed Origin DeFi Governance\""}, "value": "Vote Escrowed Origin DeFi Governance"}, "functionReturnParameters": 124, "id": 126, "nodeType": "Return", "src": "2680:45:17"}]}, "functionSelector": "06fdde03", "id": 128, "implemented": true, "kind": "function", "modifiers": [], "name": "name", "nameLocation": "2618:4:17", "nodeType": "FunctionDefinition", "overrides": {"id": 121, "nodeType": "OverrideSpecifier", "overrides": [], "src": "2637:8:17"}, "parameters": {"id": 120, "nodeType": "ParameterList", "parameters": [], "src": "2622:2:17"}, "returnParameters": {"id": 124, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 123, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 128, "src": "2655:13:17", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": {"typeIdentifier": "t_string_memory_ptr", "typeString": "string"}, "typeName": {"id": 122, "name": "string", "nodeType": "ElementaryTypeName", "src": "2655:6:17", "typeDescriptions": {"typeIdentifier": "t_string_storage_ptr", "typeString": "string"}}, "visibility": "internal"}], "src": "2654:15:17"}, "scope": 806, "src": "2609:123:17", "stateMutability": "pure", "virtual": false, "visibility": "public"}, {"baseFunctions": [871], "body": {"id": 136, "nodeType": "Block", "src": "2801:31:17", "statements": [{"expression": {"hexValue": "76654f4756", "id": 134, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "2818:7:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_4b159c4a905f2022b9e1f6b831656ce74997c155de726499d27a28637823c6fe", "typeString": "literal_string \"veOGV\""}, "value": "veOGV"}, "functionReturnParameters": 133, "id": 135, "nodeType": "Return", "src": "2811:14:17"}]}, "functionSelector": "95d89b41", "id": 137, "implemented": true, "kind": "function", "modifiers": [], "name": "symbol", "nameLocation": "2747:6:17", "nodeType": "FunctionDefinition", "overrides": {"id": 130, "nodeType": "OverrideSpecifier", "overrides": [], "src": "2768:8:17"}, "parameters": {"id": 129, "nodeType": "ParameterList", "parameters": [], "src": "2753:2:17"}, "returnParameters": {"id": 133, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 132, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 137, "src": "2786:13:17", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": {"typeIdentifier": "t_string_memory_ptr", "typeString": "string"}, "typeName": {"id": 131, "name": "string", "nodeType": "ElementaryTypeName", "src": "2786:6:17", "typeDescriptions": {"typeIdentifier": "t_string_storage_ptr", "typeString": "string"}}, "visibility": "internal"}], "src": "2785:15:17"}, "scope": 806, "src": "2738:94:17", "stateMutability": "pure", "virtual": false, "visibility": "public"}, {"baseFunctions": [930], "body": {"id": 151, "nodeType": "Block", "src": "2905:54:17", "statements": [{"expression": {"arguments": [{"hexValue": "5374616b696e673a205472616e73666572732064697361626c6564", "id": 148, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "2922:29:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_273700fd328f15da228f1d74942920aea785e0b73aa9dee61942ef8c96ed037f", "typeString": "literal_string \"Staking: Transfers disabled\""}, "value": "Staking: Transfers disabled"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_stringliteral_273700fd328f15da228f1d74942920aea785e0b73aa9dee61942ef8c96ed037f", "typeString": "literal_string \"Staking: Transfers disabled\""}], "id": 147, "name": "revert", "nodeType": "Identifier", "overloadedDeclarations": [-19, -19], "referencedDeclaration": -19, "src": "2915:6:17", "typeDescriptions": {"typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", "typeString": "function (string memory) pure"}}, "id": 149, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2915:37:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 150, "nodeType": "ExpressionStatement", "src": "2915:37:17"}]}, "functionSelector": "a9059cbb", "id": 152, "implemented": true, "kind": "function", "modifiers": [], "name": "transfer", "nameLocation": "2847:8:17", "nodeType": "FunctionDefinition", "overrides": {"id": 143, "nodeType": "OverrideSpecifier", "overrides": [], "src": "2881:8:17"}, "parameters": {"id": 142, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 139, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 152, "src": "2856:7:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 138, "name": "address", "nodeType": "ElementaryTypeName", "src": "2856:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}, {"constant": false, "id": 141, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 152, "src": "2865:7:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 140, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "2865:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "2855:18:17"}, "returnParameters": {"id": 146, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 145, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 152, "src": "2899:4:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}, "typeName": {"id": 144, "name": "bool", "nodeType": "ElementaryTypeName", "src": "2899:4:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "visibility": "internal"}], "src": "2898:6:17"}, "scope": 806, "src": "2838:121:17", "stateMutability": "nonpayable", "virtual": false, "visibility": "public"}, {"baseFunctions": [1006], "body": {"id": 168, "nodeType": "Block", "src": "3075:54:17", "statements": [{"expression": {"arguments": [{"hexValue": "5374616b696e673a205472616e73666572732064697361626c6564", "id": 165, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "3092:29:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_273700fd328f15da228f1d74942920aea785e0b73aa9dee61942ef8c96ed037f", "typeString": "literal_string \"Staking: Transfers disabled\""}, "value": "Staking: Transfers disabled"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_stringliteral_273700fd328f15da228f1d74942920aea785e0b73aa9dee61942ef8c96ed037f", "typeString": "literal_string \"Staking: Transfers disabled\""}], "id": 164, "name": "revert", "nodeType": "Identifier", "overloadedDeclarations": [-19, -19], "referencedDeclaration": -19, "src": "3085:6:17", "typeDescriptions": {"typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", "typeString": "function (string memory) pure"}}, "id": 166, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "3085:37:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 167, "nodeType": "ExpressionStatement", "src": "3085:37:17"}]}, "functionSelector": "23b872dd", "id": 169, "implemented": true, "kind": "function", "modifiers": [], "name": "transferFrom", "nameLocation": "2974:12:17", "nodeType": "FunctionDefinition", "overrides": {"id": 160, "nodeType": "OverrideSpecifier", "overrides": [], "src": "3051:8:17"}, "parameters": {"id": 159, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 154, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 169, "src": "2996:7:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 153, "name": "address", "nodeType": "ElementaryTypeName", "src": "2996:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}, {"constant": false, "id": 156, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 169, "src": "3013:7:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 155, "name": "address", "nodeType": "ElementaryTypeName", "src": "3013:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}, {"constant": false, "id": 158, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 169, "src": "3030:7:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 157, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "3030:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "2986:57:17"}, "returnParameters": {"id": 163, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 162, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 169, "src": "3069:4:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}, "typeName": {"id": 161, "name": "bool", "nodeType": "ElementaryTypeName", "src": "3069:4:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "visibility": "internal"}], "src": "3068:6:17"}, "scope": 806, "src": "2965:164:17", "stateMutability": "nonpayable", "virtual": false, "visibility": "public"}, {"body": {"id": 185, "nodeType": "Block", "src": "3845:45:17", "statements": [{"expression": {"arguments": [{"id": 180, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 172, "src": "3862:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 181, "name": "duration", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 174, "src": "3870:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 182, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 176, "src": "3880:2:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_address", "typeString": "address"}], "id": 179, "name": "_stake", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 335, "src": "3855:6:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_address_$returns$__$", "typeString": "function (uint256,uint256,address)"}}, "id": 183, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "3855:28:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 184, "nodeType": "ExpressionStatement", "src": "3855:28:17"}]}, "documentation": {"id": 170, "nodeType": "StructuredDocumentation", "src": "3175:565:17", "text": "@notice Stake OGV to an address that may not be the same as the\n sender of the funds. This can be used to give staked funds to someone\n else.\n If staking before the start of staking (epoch), then the lockup start\n and end dates are shifted forward so that the lockup starts at the\n epoch.\n Any rewards previously earned will be paid out.\n @param amount OGV to lockup in the stake\n @param duration in seconds for the stake\n @param to address to receive ownership of the stake"}, "functionSelector": "7628a37d", "id": 186, "implemented": true, "kind": "function", "modifiers": [], "name": "stake", "nameLocation": "3754:5:17", "nodeType": "FunctionDefinition", "parameters": {"id": 177, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 172, "mutability": "mutable", "name": "amount", "nameLocation": "3777:6:17", "nodeType": "VariableDeclaration", "scope": 186, "src": "3769:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 171, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "3769:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 174, "mutability": "mutable", "name": "duration", "nameLocation": "3801:8:17", "nodeType": "VariableDeclaration", "scope": 186, "src": "3793:16:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 173, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "3793:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 176, "mutability": "mutable", "name": "to", "nameLocation": "3827:2:17", "nodeType": "VariableDeclaration", "scope": 186, "src": "3819:10:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 175, "name": "address", "nodeType": "ElementaryTypeName", "src": "3819:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}], "src": "3759:76:17"}, "returnParameters": {"id": 178, "nodeType": "ParameterList", "parameters": [], "src": "3845:0:17"}, "scope": 806, "src": "3745:145:17", "stateMutability": "nonpayable", "virtual": false, "visibility": "external"}, {"body": {"id": 201, "nodeType": "Block", "src": "4364:53:17", "statements": [{"expression": {"arguments": [{"id": 195, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 189, "src": "4381:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 196, "name": "duration", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 191, "src": "4389:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"expression": {"id": 197, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "4399:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 198, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "4399:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_address", "typeString": "address"}], "id": 194, "name": "_stake", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 335, "src": "4374:6:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_address_$returns$__$", "typeString": "function (uint256,uint256,address)"}}, "id": 199, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4374:36:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 200, "nodeType": "ExpressionStatement", "src": "4374:36:17"}]}, "documentation": {"id": 187, "nodeType": "StructuredDocumentation", "src": "3896:405:17", "text": "@notice Stake OGV\n If staking before the start of staking (epoch), then the lockup start\n and end dates are shifted forward so that the lockup starts at the\n epoch.\n Any rewards previously earned will be paid out.\n @notice Stake OGV for myself.\n @param amount OGV to lockup in the stake\n @param duration in seconds for the stake"}, "functionSelector": "7b0472f0", "id": 202, "implemented": true, "kind": "function", "modifiers": [], "name": "stake", "nameLocation": "4315:5:17", "nodeType": "FunctionDefinition", "parameters": {"id": 192, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 189, "mutability": "mutable", "name": "amount", "nameLocation": "4329:6:17", "nodeType": "VariableDeclaration", "scope": 202, "src": "4321:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 188, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "4321:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 191, "mutability": "mutable", "name": "duration", "nameLocation": "4345:8:17", "nodeType": "VariableDeclaration", "scope": 202, "src": "4337:16:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 190, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "4337:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "4320:34:17"}, "returnParameters": {"id": 193, "nodeType": "ParameterList", "parameters": [], "src": "4364:0:17"}, "scope": 806, "src": "4306:111:17", "stateMutability": "nonpayable", "virtual": false, "visibility": "external"}, {"body": {"id": 334, "nodeType": "Block", "src": "4735:1053:17", "statements": [{"expression": {"arguments": [{"commonType": {"typeIdentifier": "t_address", "typeString": "address"}, "id": 218, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 213, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 209, "src": "4753:2:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "nodeType": "BinaryOperation", "operator": "!=", "rightExpression": {"arguments": [{"hexValue": "30", "id": 216, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "4767:1:17", "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": 215, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "4759:7:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)"}, "typeName": {"id": 214, "name": "address", "nodeType": "ElementaryTypeName", "src": "4759:7:17", "typeDescriptions": {}}}, "id": 217, "isConstant": false, "isLValue": false, "isPure": true, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4759:10:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "src": "4753:16:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, {"hexValue": "5374616b696e673a20546f20746865207a65726f2061646472657373", "id": 219, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "4771:30:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_3722f569c9d712bdfa9855535a99e24879d58f8c46ac4bec4b08f4dafde64f70", "typeString": "literal_string \"Staking: To the zero address\""}, "value": "Staking: To the zero address"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_bool", "typeString": "bool"}, {"typeIdentifier": "t_stringliteral_3722f569c9d712bdfa9855535a99e24879d58f8c46ac4bec4b08f4dafde64f70", "typeString": "literal_string \"Staking: To the zero address\""}], "id": 212, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [-18, -18], "referencedDeclaration": -18, "src": "4745:7:17", "typeDescriptions": {"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure"}}, "id": 220, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4745:57:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 221, "nodeType": "ExpressionStatement", "src": "4745:57:17"}, {"expression": {"arguments": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 229, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 223, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 205, "src": "4820:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "<=", "rightExpression": {"expression": {"arguments": [{"id": 226, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "4835:7:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_uint128_$", "typeString": "type(uint128)"}, "typeName": {"id": 225, "name": "uint128", "nodeType": "ElementaryTypeName", "src": "4835:7:17", "typeDescriptions": {}}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_type$_t_uint128_$", "typeString": "type(uint128)"}], "id": 224, "name": "type", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -27, "src": "4830:4:17", "typeDescriptions": {"typeIdentifier": "t_function_metatype_pure$__$returns$__$", "typeString": "function () pure"}}, "id": 227, "isConstant": false, "isLValue": false, "isPure": true, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4830:13:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_magic_meta_type_t_uint128", "typeString": "type(uint128)"}}, "id": 228, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "max", "nodeType": "MemberAccess", "src": "4830:17:17", "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, "src": "4820:27:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, {"hexValue": "5374616b696e673a20546f6f206d756368", "id": 230, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "4849:19:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_fd107e9166f5f2d80f8937d89e1acb9b493c8f956a7362bf3c829b67a4332250", "typeString": "literal_string \"Staking: Too much\""}, "value": "Staking: Too much"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_bool", "typeString": "bool"}, {"typeIdentifier": "t_stringliteral_fd107e9166f5f2d80f8937d89e1acb9b493c8f956a7362bf3c829b67a4332250", "typeString": "literal_string \"Staking: Too much\""}], "id": 222, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [-18, -18], "referencedDeclaration": -18, "src": "4812:7:17", "typeDescriptions": {"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure"}}, "id": 231, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4812:57:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 232, "nodeType": "ExpressionStatement", "src": "4812:57:17"}, {"expression": {"arguments": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 236, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 234, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 205, "src": "4887:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": ">", "rightExpression": {"hexValue": "30", "id": 235, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "4896:1:17", "typeDescriptions": {"typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0"}, "value": "0"}, "src": "4887:10:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, {"hexValue": "5374616b696e673a204e6f7420656e6f756768", "id": 237, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "4899:21:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_08892562ded77aa8ef18a86a8de0fa9e3c2f47710d6852b40351db2eb3ecffa8", "typeString": "literal_string \"Staking: Not enough\""}, "value": "Staking: Not enough"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_bool", "typeString": "bool"}, {"typeIdentifier": "t_stringliteral_08892562ded77aa8ef18a86a8de0fa9e3c2f47710d6852b40351db2eb3ecffa8", "typeString": "literal_string \"Staking: Not enough\""}], "id": 233, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [-18, -18], "referencedDeclaration": -18, "src": "4879:7:17", "typeDescriptions": {"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure"}}, "id": 238, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4879:42:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 239, "nodeType": "ExpressionStatement", "src": "4879:42:17"}, {"assignments": [241, 243], "declarations": [{"constant": false, "id": 241, "mutability": "mutable", "name": "points", "nameLocation": "4990:6:17", "nodeType": "VariableDeclaration", "scope": 334, "src": "4982:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 240, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "4982:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 243, "mutability": "mutable", "name": "end", "nameLocation": "5006:3:17", "nodeType": "VariableDeclaration", "scope": 334, "src": "4998:11:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 242, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "4998:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 248, "initialValue": {"arguments": [{"id": 245, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 205, "src": "5027:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 246, "name": "duration", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 207, "src": "5035:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 244, "name": "previewPoints", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 620, "src": "5013:13:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$", "typeString": "function (uint256,uint256) view returns (uint256,uint256)"}}, "id": 247, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5013:31:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", "typeString": "tuple(uint256,uint256)"}}, "nodeType": "VariableDeclarationStatement", "src": "4981:63:17"}, {"expression": {"arguments": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 259, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 253, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 250, "name": "points", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 241, "src": "5075:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "+", "rightExpression": {"arguments": [], "expression": {"argumentTypes": [], "id": 251, "name": "totalSupply", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 891, "src": "5084:11:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", "typeString": "function () view returns (uint256)"}}, "id": 252, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5084:13:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "5075:22:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "<=", "rightExpression": {"expression": {"arguments": [{"id": 256, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "5106:7:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_uint192_$", "typeString": "type(uint192)"}, "typeName": {"id": 255, "name": "uint192", "nodeType": "ElementaryTypeName", "src": "5106:7:17", "typeDescriptions": {}}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_type$_t_uint192_$", "typeString": "type(uint192)"}], "id": 254, "name": "type", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -27, "src": "5101:4:17", "typeDescriptions": {"typeIdentifier": "t_function_metatype_pure$__$returns$__$", "typeString": "function () pure"}}, "id": 257, "isConstant": false, "isLValue": false, "isPure": true, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5101:13:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_magic_meta_type_t_uint192", "typeString": "type(uint192)"}}, "id": 258, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "max", "nodeType": "MemberAccess", "src": "5101:17:17", "typeDescriptions": {"typeIdentifier": "t_uint192", "typeString": "uint192"}}, "src": "5075:43:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, {"hexValue": "5374616b696e673a204d617820706f696e7473206578636565646564", "id": 260, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "5132:30:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_e194468b410d451dc6103feb88d157bdf439ade8f710d2ec12445d5007de7928", "typeString": "literal_string \"Staking: Max points exceeded\""}, "value": "Staking: Max points exceeded"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_bool", "typeString": "bool"}, {"typeIdentifier": "t_stringliteral_e194468b410d451dc6103feb88d157bdf439ade8f710d2ec12445d5007de7928", "typeString": "literal_string \"Staking: Max points exceeded\""}], "id": 249, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [-18, -18], "referencedDeclaration": -18, "src": "5054:7:17", "typeDescriptions": {"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure"}}, "id": 261, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5054:118:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 262, "nodeType": "ExpressionStatement", "src": "5054:118:17"}, {"expression": {"arguments": [{"id": 264, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 209, "src": "5198:2:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "id": 263, "name": "_collectRewards", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 782, "src": "5182:15:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", "typeString": "function (address)"}}, "id": 265, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5182:19:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 266, "nodeType": "ExpressionStatement", "src": "5182:19:17"}, {"expression": {"arguments": [{"arguments": [{"arguments": [{"id": 274, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 205, "src": "5282:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 273, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "5274:7:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_uint128_$", "typeString": "type(uint128)"}, "typeName": {"id": 272, "name": "uint128", "nodeType": "ElementaryTypeName", "src": "5274:7:17", "typeDescriptions": {}}}, "id": 275, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5274:15:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, {"arguments": [{"id": 278, "name": "end", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 243, "src": "5352:3:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 277, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "5344:7:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_uint128_$", "typeString": "type(uint128)"}, "typeName": {"id": 276, "name": "uint128", "nodeType": "ElementaryTypeName", "src": "5344:7:17", "typeDescriptions": {}}}, "id": 279, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5344:12:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, {"id": 280, "name": "points", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 241, "src": "5382:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_uint128", "typeString": "uint128"}, {"typeIdentifier": "t_uint128", "typeString": "uint128"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 271, "name": "Lockup", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 28, "src": "5241:6:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_struct$_Lockup_$28_storage_ptr_$", "typeString": "type(struct OgvStaking.Lockup storage pointer)"}}, "id": 281, "isConstant": false, "isLValue": false, "isPure": false, "kind": "structConstructorCall", "lValueRequested": false, "names": ["amount", "end", "points"], "nodeType": "FunctionCall", "src": "5241:162:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup memory"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup memory"}], "expression": {"baseExpression": {"id": 267, "name": "lockups", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 34, "src": "5211:7:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Lockup_$28_storage_$dyn_storage_$", "typeString": "mapping(address => struct OgvStaking.Lockup storage ref[] storage ref)"}}, "id": 269, "indexExpression": {"id": 268, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 209, "src": "5219:2:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "5211:11:17", "typeDescriptions": {"typeIdentifier": "t_array$_t_struct$_Lockup_$28_storage_$dyn_storage", "typeString": "struct OgvStaking.Lockup storage ref[] storage ref"}}, "id": 270, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "push", "nodeType": "MemberAccess", "src": "5211:16:17", "typeDescriptions": {"typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_struct$_Lockup_$28_storage_$dyn_storage_ptr_$_t_struct$_Lockup_$28_storage_$returns$__$bound_to$_t_array$_t_struct$_Lockup_$28_storage_$dyn_storage_ptr_$", "typeString": "function (struct OgvStaking.Lockup storage ref[] storage pointer,struct OgvStaking.Lockup storage ref)"}}, "id": 282, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5211:202:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 283, "nodeType": "ExpressionStatement", "src": "5211:202:17"}, {"expression": {"arguments": [{"id": 285, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 209, "src": "5429:2:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 286, "name": "points", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 241, "src": "5433:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 284, "name": "_mint", "nodeType": "Identifier", "overloadedDeclarations": [1743], "referencedDeclaration": 1743, "src": "5423:5:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)"}}, "id": 287, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5423:17:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 288, "nodeType": "ExpressionStatement", "src": "5423:17:17"}, {"expression": {"arguments": [{"expression": {"id": 292, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "5467:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 293, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "5467:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"arguments": [{"id": 296, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -28, "src": "5487:4:17", "typeDescriptions": {"typeIdentifier": "t_contract$_OgvStaking_$806", "typeString": "contract OgvStaking"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_contract$_OgvStaking_$806", "typeString": "contract OgvStaking"}], "id": 295, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "5479:7:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)"}, "typeName": {"id": 294, "name": "address", "nodeType": "ElementaryTypeName", "src": "5479:7:17", "typeDescriptions": {}}}, "id": 297, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5479:13:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 298, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 205, "src": "5494:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "expression": {"id": 289, "name": "ogv", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 37, "src": "5450:3:17", "typeDescriptions": {"typeIdentifier": "t_contract$_ERC20_$1392", "typeString": "contract ERC20"}}, "id": 291, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "transferFrom", "nodeType": "MemberAccess", "referencedDeclaration": 1006, "src": "5450:16:17", "typeDescriptions": {"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,address,uint256) external returns (bool)"}}, "id": 299, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5450:51:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "id": 300, "nodeType": "ExpressionStatement", "src": "5450:51:17"}, {"condition": {"commonType": {"typeIdentifier": "t_bool", "typeString": "bool"}, "id": 313, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 304, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "UnaryOperation", "operator": "!", "prefix": true, "src": "5546:21:17", "subExpression": {"baseExpression": {"id": 301, "name": "hasDelegationSet", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 50, "src": "5547:16:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_bool_$", "typeString": "mapping(address => bool)"}}, "id": 303, "indexExpression": {"id": 302, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 209, "src": "5564:2:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "5547:20:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "nodeType": "BinaryOperation", "operator": "&&", "rightExpression": {"commonType": {"typeIdentifier": "t_address", "typeString": "address"}, "id": 312, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"arguments": [{"id": 306, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 209, "src": "5581:2:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "id": 305, "name": "delegates", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1477, "src": "5571:9:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$", "typeString": "function (address) view returns (address)"}}, "id": 307, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5571:13:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": {"arguments": [{"hexValue": "30", "id": 310, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "5596:1:17", "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": 309, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "5588:7:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)"}, "typeName": {"id": 308, "name": "address", "nodeType": "ElementaryTypeName", "src": "5588:7:17", "typeDescriptions": {}}}, "id": 311, "isConstant": false, "isLValue": false, "isPure": true, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5588:10:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "src": "5571:27:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "src": "5546:52:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "id": 320, "nodeType": "IfStatement", "src": "5542:170:17", "trueBody": {"id": 319, "nodeType": "Block", "src": "5600:112:17", "statements": [{"expression": {"arguments": [{"id": 315, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 209, "src": "5694:2:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 316, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 209, "src": "5698:2:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_address", "typeString": "address"}], "id": 314, "name": "_delegate", "nodeType": "Identifier", "overloadedDeclarations": [805], "referencedDeclaration": 805, "src": "5684:9:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$", "typeString": "function (address,address)"}}, "id": 317, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5684:17:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 318, "nodeType": "ExpressionStatement", "src": "5684:17:17"}]}}, {"eventCall": {"arguments": [{"id": 322, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 209, "src": "5733:2:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 328, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"expression": {"baseExpression": {"id": 323, "name": "lockups", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 34, "src": "5737:7:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Lockup_$28_storage_$dyn_storage_$", "typeString": "mapping(address => struct OgvStaking.Lockup storage ref[] storage ref)"}}, "id": 325, "indexExpression": {"id": 324, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 209, "src": "5745:2:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "5737:11:17", "typeDescriptions": {"typeIdentifier": "t_array$_t_struct$_Lockup_$28_storage_$dyn_storage", "typeString": "struct OgvStaking.Lockup storage ref[] storage ref"}}, "id": 326, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "length", "nodeType": "MemberAccess", "src": "5737:18:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "-", "rightExpression": {"hexValue": "31", "id": 327, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "5758:1:17", "typeDescriptions": {"typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1"}, "value": "1"}, "src": "5737:22:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 329, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 205, "src": "5761:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 330, "name": "end", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 243, "src": "5769:3:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 331, "name": "points", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 241, "src": "5774:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 321, "name": "Stake", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 62, "src": "5727:5:17", "typeDescriptions": {"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", "typeString": "function (address,uint256,uint256,uint256,uint256)"}}, "id": 332, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5727:54:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 333, "nodeType": "EmitStatement", "src": "5722:59:17"}]}, "documentation": {"id": 203, "nodeType": "StructuredDocumentation", "src": "4423:206:17", "text": "@dev Internal method used for public staking\n @param amount OGV to lockup in the stake\n @param duration in seconds for the stake\n @param to address to receive ownership of the stake"}, "id": 335, "implemented": true, "kind": "function", "modifiers": [], "name": "_stake", "nameLocation": "4643:6:17", "nodeType": "FunctionDefinition", "parameters": {"id": 210, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 205, "mutability": "mutable", "name": "amount", "nameLocation": "4667:6:17", "nodeType": "VariableDeclaration", "scope": 335, "src": "4659:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 204, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "4659:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 207, "mutability": "mutable", "name": "duration", "nameLocation": "4691:8:17", "nodeType": "VariableDeclaration", "scope": 335, "src": "4683:16:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 206, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "4683:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 209, "mutability": "mutable", "name": "to", "nameLocation": "4717:2:17", "nodeType": "VariableDeclaration", "scope": 335, "src": "4709:10:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 208, "name": "address", "nodeType": "ElementaryTypeName", "src": "4709:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}], "src": "4649:76:17"}, "returnParameters": {"id": 211, "nodeType": "ParameterList", "parameters": [], "src": "4735:0:17"}, "scope": 806, "src": "4634:1154:17", "stateMutability": "nonpayable", "virtual": false, "visibility": "internal"}, {"body": {"id": 417, "nodeType": "Block", "src": "5966:602:17", "statements": [{"assignments": [343], "declarations": [{"constant": false, "id": 343, "mutability": "mutable", "name": "lockup", "nameLocation": "5990:6:17", "nodeType": "VariableDeclaration", "scope": 417, "src": "5976:20:17", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup"}, "typeName": {"id": 342, "nodeType": "UserDefinedTypeName", "pathNode": {"id": 341, "name": "Lockup", "nodeType": "IdentifierPath", "referencedDeclaration": 28, "src": "5976:6:17"}, "referencedDeclaration": 28, "src": "5976:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_storage_ptr", "typeString": "struct OgvStaking.Lockup"}}, "visibility": "internal"}], "id": 350, "initialValue": {"baseExpression": {"baseExpression": {"id": 344, "name": "lockups", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 34, "src": "5999:7:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Lockup_$28_storage_$dyn_storage_$", "typeString": "mapping(address => struct OgvStaking.Lockup storage ref[] storage ref)"}}, "id": 347, "indexExpression": {"expression": {"id": 345, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "6007:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 346, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "6007:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "5999:19:17", "typeDescriptions": {"typeIdentifier": "t_array$_t_struct$_Lockup_$28_storage_$dyn_storage", "typeString": "struct OgvStaking.Lockup storage ref[] storage ref"}}, "id": 349, "indexExpression": {"id": 348, "name": "lockupId", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 338, "src": "6019:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "5999:29:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_storage", "typeString": "struct OgvStaking.Lockup storage ref"}}, "nodeType": "VariableDeclarationStatement", "src": "5976:52:17"}, {"assignments": [352], "declarations": [{"constant": false, "id": 352, "mutability": "mutable", "name": "amount", "nameLocation": "6046:6:17", "nodeType": "VariableDeclaration", "scope": 417, "src": "6038:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 351, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "6038:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 355, "initialValue": {"expression": {"id": 353, "name": "lockup", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 343, "src": "6055:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup memory"}}, "id": 354, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "amount", "nodeType": "MemberAccess", "referencedDeclaration": 23, "src": "6055:13:17", "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, "nodeType": "VariableDeclarationStatement", "src": "6038:30:17"}, {"assignments": [357], "declarations": [{"constant": false, "id": 357, "mutability": "mutable", "name": "end", "nameLocation": "6086:3:17", "nodeType": "VariableDeclaration", "scope": 417, "src": "6078:11:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 356, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "6078:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 360, "initialValue": {"expression": {"id": 358, "name": "lockup", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 343, "src": "6092:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup memory"}}, "id": 359, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "end", "nodeType": "MemberAccess", "referencedDeclaration": 25, "src": "6092:10:17", "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, "nodeType": "VariableDeclarationStatement", "src": "6078:24:17"}, {"assignments": [362], "declarations": [{"constant": false, "id": 362, "mutability": "mutable", "name": "points", "nameLocation": "6120:6:17", "nodeType": "VariableDeclaration", "scope": 417, "src": "6112:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 361, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "6112:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 365, "initialValue": {"expression": {"id": 363, "name": "lockup", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 343, "src": "6129:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup memory"}}, "id": 364, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "points", "nodeType": "MemberAccess", "referencedDeclaration": 27, "src": "6129:13:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "6112:30:17"}, {"expression": {"arguments": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 370, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"expression": {"id": 367, "name": "block", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -4, "src": "6160:5:17", "typeDescriptions": {"typeIdentifier": "t_magic_block", "typeString": "block"}}, "id": 368, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "timestamp", "nodeType": "MemberAccess", "src": "6160:15:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": ">=", "rightExpression": {"id": 369, "name": "end", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 357, "src": "6179:3:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "6160:22:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, {"hexValue": "5374616b696e673a20456e64206f66206c6f636b7570206e6f742072656163686564", "id": 371, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "6184:36:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_0d3769af651e026174c0d257a3236a0a34f7f86e6f859f0cb2560d42d70963a5", "typeString": "literal_string \"Staking: End of lockup not reached\""}, "value": "Staking: End of lockup not reached"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_bool", "typeString": "bool"}, {"typeIdentifier": "t_stringliteral_0d3769af651e026174c0d257a3236a0a34f7f86e6f859f0cb2560d42d70963a5", "typeString": "literal_string \"Staking: End of lockup not reached\""}], "id": 366, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [-18, -18], "referencedDeclaration": -18, "src": "6152:7:17", "typeDescriptions": {"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure"}}, "id": 372, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "6152:69:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 373, "nodeType": "ExpressionStatement", "src": "6152:69:17"}, {"expression": {"arguments": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 377, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 375, "name": "end", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 357, "src": "6239:3:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "!=", "rightExpression": {"hexValue": "30", "id": 376, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "6246:1:17", "typeDescriptions": {"typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0"}, "value": "0"}, "src": "6239:8:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, {"hexValue": "5374616b696e673a20416c726561647920756e7374616b65642074686973206c6f636b7570", "id": 378, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "6249:39:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_7b6a7597b3901c8ecbc7ed06f0b2e89e96023c5d0ae17a3d605a26de7cb7a8a9", "typeString": "literal_string \"Staking: Already unstaked this lockup\""}, "value": "Staking: Already unstaked this lockup"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_bool", "typeString": "bool"}, {"typeIdentifier": "t_stringliteral_7b6a7597b3901c8ecbc7ed06f0b2e89e96023c5d0ae17a3d605a26de7cb7a8a9", "typeString": "literal_string \"Staking: Already unstaked this lockup\""}], "id": 374, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [-18, -18], "referencedDeclaration": -18, "src": "6231:7:17", "typeDescriptions": {"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure"}}, "id": 379, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "6231:58:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 380, "nodeType": "ExpressionStatement", "src": "6231:58:17"}, {"expression": {"arguments": [{"expression": {"id": 382, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "6315:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 383, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "6315:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "id": 381, "name": "_collectRewards", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 782, "src": "6299:15:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", "typeString": "function (address)"}}, "id": 384, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "6299:27:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 385, "nodeType": "ExpressionStatement", "src": "6299:27:17"}, {"expression": {"id": 392, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "UnaryOperation", "operator": "delete", "prefix": true, "src": "6336:36:17", "subExpression": {"baseExpression": {"baseExpression": {"id": 386, "name": "lockups", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 34, "src": "6343:7:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Lockup_$28_storage_$dyn_storage_$", "typeString": "mapping(address => struct OgvStaking.Lockup storage ref[] storage ref)"}}, "id": 389, "indexExpression": {"expression": {"id": 387, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "6351:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 388, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "6351:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "6343:19:17", "typeDescriptions": {"typeIdentifier": "t_array$_t_struct$_Lockup_$28_storage_$dyn_storage", "typeString": "struct OgvStaking.Lockup storage ref[] storage ref"}}, "id": 391, "indexExpression": {"id": 390, "name": "lockupId", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 338, "src": "6363:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", "src": "6343:29:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_storage", "typeString": "struct OgvStaking.Lockup storage ref"}}, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 393, "nodeType": "ExpressionStatement", "src": "6336:36:17"}, {"expression": {"arguments": [{"expression": {"id": 395, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "6435:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 396, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "6435:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 397, "name": "points", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 362, "src": "6447:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 394, "name": "_burn", "nodeType": "Identifier", "overloadedDeclarations": [1766], "referencedDeclaration": 1766, "src": "6429:5:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)"}}, "id": 398, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "6429:25:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 399, "nodeType": "ExpressionStatement", "src": "6429:25:17"}, {"expression": {"arguments": [{"expression": {"id": 403, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "6477:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 404, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "6477:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 405, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 352, "src": "6489:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "expression": {"id": 400, "name": "ogv", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 37, "src": "6464:3:17", "typeDescriptions": {"typeIdentifier": "t_contract$_ERC20_$1392", "typeString": "contract ERC20"}}, "id": 402, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "transfer", "nodeType": "MemberAccess", "referencedDeclaration": 930, "src": "6464:12:17", "typeDescriptions": {"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) external returns (bool)"}}, "id": 406, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "6464:32:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "id": 407, "nodeType": "ExpressionStatement", "src": "6464:32:17"}, {"eventCall": {"arguments": [{"expression": {"id": 409, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "6519:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 410, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "6519:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 411, "name": "lockupId", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 338, "src": "6531:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 412, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 352, "src": "6541:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 413, "name": "end", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 357, "src": "6549:3:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 414, "name": "points", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 362, "src": "6554:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 408, "name": "Unstake", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 74, "src": "6511:7:17", "typeDescriptions": {"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", "typeString": "function (address,uint256,uint256,uint256,uint256)"}}, "id": 415, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "6511:50:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 416, "nodeType": "EmitStatement", "src": "6506:55:17"}]}, "documentation": {"id": 336, "nodeType": "StructuredDocumentation", "src": "5794:123:17", "text": "@notice Collect staked OGV for a lockup and any earned rewards.\n @param lockupId the id of the lockup to unstake"}, "functionSelector": "2e17de78", "id": 418, "implemented": true, "kind": "function", "modifiers": [], "name": "unstake", "nameLocation": "5931:7:17", "nodeType": "FunctionDefinition", "parameters": {"id": 339, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 338, "mutability": "mutable", "name": "lockupId", "nameLocation": "5947:8:17", "nodeType": "VariableDeclaration", "scope": 418, "src": "5939:16:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 337, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "5939:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "5938:18:17"}, "returnParameters": {"id": 340, "nodeType": "ParameterList", "parameters": [], "src": "5966:0:17"}, "scope": 806, "src": "5922:646:17", "stateMutability": "nonpayable", "virtual": false, "visibility": "external"}, {"body": {"id": 546, "nodeType": "Block", "src": "7281:994:17", "statements": [{"expression": {"arguments": [{"expression": {"id": 427, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "7356:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 428, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "7356:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "id": 426, "name": "_collectRewards", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 782, "src": "7340:15:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", "typeString": "function (address)"}}, "id": 429, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "7340:27:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 430, "nodeType": "ExpressionStatement", "src": "7340:27:17"}, {"assignments": [433], "declarations": [{"constant": false, "id": 433, "mutability": "mutable", "name": "lockup", "nameLocation": "7391:6:17", "nodeType": "VariableDeclaration", "scope": 546, "src": "7377:20:17", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup"}, "typeName": {"id": 432, "nodeType": "UserDefinedTypeName", "pathNode": {"id": 431, "name": "Lockup", "nodeType": "IdentifierPath", "referencedDeclaration": 28, "src": "7377:6:17"}, "referencedDeclaration": 28, "src": "7377:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_storage_ptr", "typeString": "struct OgvStaking.Lockup"}}, "visibility": "internal"}], "id": 440, "initialValue": {"baseExpression": {"baseExpression": {"id": 434, "name": "lockups", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 34, "src": "7400:7:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Lockup_$28_storage_$dyn_storage_$", "typeString": "mapping(address => struct OgvStaking.Lockup storage ref[] storage ref)"}}, "id": 437, "indexExpression": {"expression": {"id": 435, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "7408:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 436, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "7408:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "7400:19:17", "typeDescriptions": {"typeIdentifier": "t_array$_t_struct$_Lockup_$28_storage_$dyn_storage", "typeString": "struct OgvStaking.Lockup storage ref[] storage ref"}}, "id": 439, "indexExpression": {"id": 438, "name": "lockupId", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 421, "src": "7420:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "7400:29:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_storage", "typeString": "struct OgvStaking.Lockup storage ref"}}, "nodeType": "VariableDeclarationStatement", "src": "7377:52:17"}, {"assignments": [442], "declarations": [{"constant": false, "id": 442, "mutability": "mutable", "name": "oldAmount", "nameLocation": "7447:9:17", "nodeType": "VariableDeclaration", "scope": 546, "src": "7439:17:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 441, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "7439:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 445, "initialValue": {"expression": {"id": 443, "name": "lockup", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 433, "src": "7459:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup memory"}}, "id": 444, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "amount", "nodeType": "MemberAccess", "referencedDeclaration": 23, "src": "7459:13:17", "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, "nodeType": "VariableDeclarationStatement", "src": "7439:33:17"}, {"assignments": [447], "declarations": [{"constant": false, "id": 447, "mutability": "mutable", "name": "oldEnd", "nameLocation": "7490:6:17", "nodeType": "VariableDeclaration", "scope": 546, "src": "7482:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 446, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "7482:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 450, "initialValue": {"expression": {"id": 448, "name": "lockup", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 433, "src": "7499:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup memory"}}, "id": 449, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "end", "nodeType": "MemberAccess", "referencedDeclaration": 25, "src": "7499:10:17", "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, "nodeType": "VariableDeclarationStatement", "src": "7482:27:17"}, {"assignments": [452], "declarations": [{"constant": false, "id": 452, "mutability": "mutable", "name": "oldPoints", "nameLocation": "7527:9:17", "nodeType": "VariableDeclaration", "scope": 546, "src": "7519:17:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 451, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "7519:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 455, "initialValue": {"expression": {"id": 453, "name": "lockup", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 433, "src": "7539:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup memory"}}, "id": 454, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "points", "nodeType": "MemberAccess", "referencedDeclaration": 27, "src": "7539:13:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "7519:33:17"}, {"assignments": [457, 459], "declarations": [{"constant": false, "id": 457, "mutability": "mutable", "name": "newPoints", "nameLocation": "7571:9:17", "nodeType": "VariableDeclaration", "scope": 546, "src": "7563:17:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 456, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "7563:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 459, "mutability": "mutable", "name": "newEnd", "nameLocation": "7590:6:17", "nodeType": "VariableDeclaration", "scope": 546, "src": "7582:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 458, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "7582:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 464, "initialValue": {"arguments": [{"id": 461, "name": "oldAmount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 442, "src": "7627:9:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 462, "name": "duration", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 423, "src": "7650:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 460, "name": "previewPoints", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 620, "src": "7600:13:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$", "typeString": "function (uint256,uint256) view returns (uint256,uint256)"}}, "id": 463, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "7600:68:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", "typeString": "tuple(uint256,uint256)"}}, "nodeType": "VariableDeclarationStatement", "src": "7562:106:17"}, {"expression": {"arguments": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 468, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 466, "name": "newEnd", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 459, "src": "7686:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": ">", "rightExpression": {"id": 467, "name": "oldEnd", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 447, "src": "7695:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "7686:15:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, {"hexValue": "5374616b696e673a204e6577206c6f636b7570206d757374206265206c6f6e676572", "id": 469, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "7703:36:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_70c051efd901941ca607823cb4b1c13317dff0c9ec5cf600ecce8566fa99a2ac", "typeString": "literal_string \"Staking: New lockup must be longer\""}, "value": "Staking: New lockup must be longer"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_bool", "typeString": "bool"}, {"typeIdentifier": "t_stringliteral_70c051efd901941ca607823cb4b1c13317dff0c9ec5cf600ecce8566fa99a2ac", "typeString": "literal_string \"Staking: New lockup must be longer\""}], "id": 465, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [-18, -18], "referencedDeclaration": -18, "src": "7678:7:17", "typeDescriptions": {"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure"}}, "id": 470, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "7678:62:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 471, "nodeType": "ExpressionStatement", "src": "7678:62:17"}, {"expression": {"id": 479, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": {"expression": {"id": 472, "name": "lockup", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 433, "src": "7750:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup memory"}}, "id": 474, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "memberName": "end", "nodeType": "MemberAccess", "referencedDeclaration": 25, "src": "7750:10:17", "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, "nodeType": "Assignment", "operator": "=", "rightHandSide": {"arguments": [{"id": 477, "name": "newEnd", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 459, "src": "7771:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 476, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "7763:7:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_uint128_$", "typeString": "type(uint128)"}, "typeName": {"id": 475, "name": "uint128", "nodeType": "ElementaryTypeName", "src": "7763:7:17", "typeDescriptions": {}}}, "id": 478, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "7763:15:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, "src": "7750:28:17", "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, "id": 480, "nodeType": "ExpressionStatement", "src": "7750:28:17"}, {"expression": {"id": 485, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": {"expression": {"id": 481, "name": "lockup", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 433, "src": "7788:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup memory"}}, "id": 483, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "memberName": "points", "nodeType": "MemberAccess", "referencedDeclaration": 27, "src": "7788:13:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "Assignment", "operator": "=", "rightHandSide": {"id": 484, "name": "newPoints", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 457, "src": "7804:9:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "7788:25:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "id": 486, "nodeType": "ExpressionStatement", "src": "7788:25:17"}, {"expression": {"id": 494, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": {"baseExpression": {"baseExpression": {"id": 487, "name": "lockups", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 34, "src": "7823:7:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Lockup_$28_storage_$dyn_storage_$", "typeString": "mapping(address => struct OgvStaking.Lockup storage ref[] storage ref)"}}, "id": 491, "indexExpression": {"expression": {"id": 488, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "7831:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 489, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "7831:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "7823:19:17", "typeDescriptions": {"typeIdentifier": "t_array$_t_struct$_Lockup_$28_storage_$dyn_storage", "typeString": "struct OgvStaking.Lockup storage ref[] storage ref"}}, "id": 492, "indexExpression": {"id": 490, "name": "lockupId", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 421, "src": "7843:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", "src": "7823:29:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_storage", "typeString": "struct OgvStaking.Lockup storage ref"}}, "nodeType": "Assignment", "operator": "=", "rightHandSide": {"id": 493, "name": "lockup", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 433, "src": "7855:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup memory"}}, "src": "7823:38:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_storage", "typeString": "struct OgvStaking.Lockup storage ref"}}, "id": 495, "nodeType": "ExpressionStatement", "src": "7823:38:17"}, {"expression": {"arguments": [{"expression": {"id": 497, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "7877:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 498, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "7877:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 501, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 499, "name": "newPoints", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 457, "src": "7889:9:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "-", "rightExpression": {"id": 500, "name": "oldPoints", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 452, "src": "7901:9:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "7889:21:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 496, "name": "_mint", "nodeType": "Identifier", "overloadedDeclarations": [1743], "referencedDeclaration": 1743, "src": "7871:5:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)"}}, "id": 502, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "7871:40:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 503, "nodeType": "ExpressionStatement", "src": "7871:40:17"}, {"condition": {"commonType": {"typeIdentifier": "t_bool", "typeString": "bool"}, "id": 518, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 508, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "UnaryOperation", "operator": "!", "prefix": true, "src": "7925:29:17", "subExpression": {"baseExpression": {"id": 504, "name": "hasDelegationSet", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 50, "src": "7926:16:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_bool_$", "typeString": "mapping(address => bool)"}}, "id": 507, "indexExpression": {"expression": {"id": 505, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "7943:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 506, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "7943:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "7926:28:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "nodeType": "BinaryOperation", "operator": "&&", "rightExpression": {"commonType": {"typeIdentifier": "t_address", "typeString": "address"}, "id": 517, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"arguments": [{"expression": {"id": 510, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "7968:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 511, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "7968:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "id": 509, "name": "delegates", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1477, "src": "7958:9:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$", "typeString": "function (address) view returns (address)"}}, "id": 512, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "7958:21:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": {"arguments": [{"hexValue": "30", "id": 515, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "7991:1:17", "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": 514, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "7983:7:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)"}, "typeName": {"id": 513, "name": "address", "nodeType": "ElementaryTypeName", "src": "7983:7:17", "typeDescriptions": {}}}, "id": 516, "isConstant": false, "isLValue": false, "isPure": true, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "7983:10:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "src": "7958:35:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "src": "7925:68:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "id": 527, "nodeType": "IfStatement", "src": "7921:202:17", "trueBody": {"id": 526, "nodeType": "Block", "src": "7995:128:17", "statements": [{"expression": {"arguments": [{"expression": {"id": 520, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "8089:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 521, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "8089:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"expression": {"id": 522, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "8101:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 523, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "8101:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_address", "typeString": "address"}], "id": 519, "name": "_delegate", "nodeType": "Identifier", "overloadedDeclarations": [805], "referencedDeclaration": 805, "src": "8079:9:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$", "typeString": "function (address,address)"}}, "id": 524, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "8079:33:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 525, "nodeType": "ExpressionStatement", "src": "8079:33:17"}]}}, {"eventCall": {"arguments": [{"expression": {"id": 529, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "8145:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 530, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "8145:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 531, "name": "lockupId", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 421, "src": "8157:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 532, "name": "oldAmount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 442, "src": "8167:9:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 533, "name": "oldEnd", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 447, "src": "8178:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 534, "name": "oldPoints", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 452, "src": "8186:9:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 528, "name": "Unstake", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 74, "src": "8137:7:17", "typeDescriptions": {"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", "typeString": "function (address,uint256,uint256,uint256,uint256)"}}, "id": 535, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "8137:59:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 536, "nodeType": "EmitStatement", "src": "8132:64:17"}, {"eventCall": {"arguments": [{"expression": {"id": 538, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "8217:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 539, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "8217:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 540, "name": "lockupId", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 421, "src": "8229:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 541, "name": "oldAmount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 442, "src": "8239:9:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 542, "name": "newEnd", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 459, "src": "8250:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 543, "name": "newPoints", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 457, "src": "8258:9:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 537, "name": "Stake", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 62, "src": "8211:5:17", "typeDescriptions": {"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", "typeString": "function (address,uint256,uint256,uint256,uint256)"}}, "id": 544, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "8211:57:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 545, "nodeType": "EmitStatement", "src": "8206:62:17"}]}, "documentation": {"id": 419, "nodeType": "StructuredDocumentation", "src": "6574:641:17", "text": "@notice Extend a stake lockup for additional points.\n The stake end time is computed from the current time + duration, just\n like it is for new stakes. So a new stake for seven days duration and\n an old stake extended with a seven days duration would have the same\n end.\n If an extend is made before the start of staking, the start time for\n the new stake is shifted forwards to the start of staking, which also\n shifts forward the end date.\n @param lockupId the id of the old lockup to extend\n @param duration number of seconds from now to stake for"}, "functionSelector": "c89258db", "id": 547, "implemented": true, "kind": "function", "modifiers": [], "name": "extend", "nameLocation": "7229:6:17", "nodeType": "FunctionDefinition", "parameters": {"id": 424, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 421, "mutability": "mutable", "name": "lockupId", "nameLocation": "7244:8:17", "nodeType": "VariableDeclaration", "scope": 547, "src": "7236:16:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 420, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "7236:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 423, "mutability": "mutable", "name": "duration", "nameLocation": "7262:8:17", "nodeType": "VariableDeclaration", "scope": 547, "src": "7254:16:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 422, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "7254:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "7235:36:17"}, "returnParameters": {"id": 425, "nodeType": "ParameterList", "parameters": [], "src": "7281:0:17"}, "scope": 806, "src": "7220:1055:17", "stateMutability": "nonpayable", "virtual": false, "visibility": "external"}, {"body": {"id": 619, "nodeType": "Block", "src": "8723:440:17", "statements": [{"expression": {"arguments": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 562, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 560, "name": "duration", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 552, "src": "8741:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": ">=", "rightExpression": {"id": 561, "name": "minStakeDuration", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 18, "src": "8753:16:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "8741:28:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, {"hexValue": "5374616b696e673a20546f6f2073686f7274", "id": 563, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "8771:20:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_38e1c554f41a064a892f10b1178a72e1abb4177a0010e35038e96ebec4ad94aa", "typeString": "literal_string \"Staking: Too short\""}, "value": "Staking: Too short"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_bool", "typeString": "bool"}, {"typeIdentifier": "t_stringliteral_38e1c554f41a064a892f10b1178a72e1abb4177a0010e35038e96ebec4ad94aa", "typeString": "literal_string \"Staking: Too short\""}], "id": 559, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [-18, -18], "referencedDeclaration": -18, "src": "8733:7:17", "typeDescriptions": {"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure"}}, "id": 564, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "8733:59:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 565, "nodeType": "ExpressionStatement", "src": "8733:59:17"}, {"expression": {"arguments": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 569, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 567, "name": "duration", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 552, "src": "8810:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "<=", "rightExpression": {"hexValue": "31343631", "id": 568, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "8822:9:17", "subdenomination": "days", "typeDescriptions": {"typeIdentifier": "t_rational_126230400_by_1", "typeString": "int_const 126230400"}, "value": "1461"}, "src": "8810:21:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, {"hexValue": "5374616b696e673a20546f6f206c6f6e67", "id": 570, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "8833:19:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_ed7b53d9950697bcde3253b7494f5c32f212ed9ae4b86a74f2c4e5078aa9541d", "typeString": "literal_string \"Staking: Too long\""}, "value": "Staking: Too long"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_bool", "typeString": "bool"}, {"typeIdentifier": "t_stringliteral_ed7b53d9950697bcde3253b7494f5c32f212ed9ae4b86a74f2c4e5078aa9541d", "typeString": "literal_string \"Staking: Too long\""}], "id": 566, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [-18, -18], "referencedDeclaration": -18, "src": "8802:7:17", "typeDescriptions": {"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure"}}, "id": 571, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "8802:51:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 572, "nodeType": "ExpressionStatement", "src": "8802:51:17"}, {"assignments": [574], "declarations": [{"constant": false, "id": 574, "mutability": "mutable", "name": "start", "nameLocation": "8871:5:17", "nodeType": "VariableDeclaration", "scope": 619, "src": "8863:13:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 573, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "8863:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 583, "initialValue": {"condition": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 578, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"expression": {"id": 575, "name": "block", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -4, "src": "8879:5:17", "typeDescriptions": {"typeIdentifier": "t_magic_block", "typeString": "block"}}, "id": 576, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "timestamp", "nodeType": "MemberAccess", "src": "8879:15:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": ">", "rightExpression": {"id": 577, "name": "epoch", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 16, "src": "8897:5:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "8879:23:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "falseExpression": {"id": 581, "name": "epoch", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 16, "src": "8923:5:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "id": 582, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "Conditional", "src": "8879:49:17", "trueExpression": {"expression": {"id": 579, "name": "block", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -4, "src": "8905:5:17", "typeDescriptions": {"typeIdentifier": "t_magic_block", "typeString": "block"}}, "id": 580, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "timestamp", "nodeType": "MemberAccess", "src": "8905:15:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "8863:65:17"}, {"assignments": [585], "declarations": [{"constant": false, "id": 585, "mutability": "mutable", "name": "end", "nameLocation": "8946:3:17", "nodeType": "VariableDeclaration", "scope": 619, "src": "8938:11:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 584, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "8938:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 589, "initialValue": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 588, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 586, "name": "start", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 574, "src": "8952:5:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "+", "rightExpression": {"id": 587, "name": "duration", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 552, "src": "8960:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "8952:16:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "8938:30:17"}, {"assignments": [591], "declarations": [{"constant": false, "id": 591, "mutability": "mutable", "name": "endYearpoc", "nameLocation": "8986:10:17", "nodeType": "VariableDeclaration", "scope": 619, "src": "8978:18:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 590, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "8978:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 601, "initialValue": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 600, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"components": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 597, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"components": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 594, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 592, "name": "end", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 585, "src": "9001:3:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "-", "rightExpression": {"id": 593, "name": "epoch", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 16, "src": "9007:5:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "9001:11:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "id": 595, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "9000:13:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "*", "rightExpression": {"hexValue": "31653138", "id": 596, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "9016:4:17", "typeDescriptions": {"typeIdentifier": "t_rational_1000000000000000000_by_1", "typeString": "int_const 1000000000000000000"}, "value": "1e18"}, "src": "9000:20:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "id": 598, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "8999:22:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "/", "rightExpression": {"hexValue": "333635", "id": 599, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "9024:8:17", "subdenomination": "days", "typeDescriptions": {"typeIdentifier": "t_rational_31536000_by_1", "typeString": "int_const 31536000"}, "value": "365"}, "src": "8999:33:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "8978:54:17"}, {"assignments": [603], "declarations": [{"constant": false, "id": 603, "mutability": "mutable", "name": "multiplier", "nameLocation": "9050:10:17", "nodeType": "VariableDeclaration", "scope": 619, "src": "9042:18:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 602, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "9042:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 609, "initialValue": {"arguments": [{"id": 606, "name": "YEAR_BASE", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 21, "src": "9082:9:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 607, "name": "endYearpoc", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 591, "src": "9093:10:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "expression": {"id": 604, "name": "PRBMathUD60x18", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2811, "src": "9063:14:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_contract$_PRBMathUD60x18_$2811_$", "typeString": "type(library PRBMathUD60x18)"}}, "id": 605, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "pow", "nodeType": "MemberAccess", "referencedDeclaration": 2695, "src": "9063:18:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)"}}, "id": 608, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "9063:41:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "9042:62:17"}, {"expression": {"components": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 615, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"components": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 612, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 610, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 550, "src": "9123:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "*", "rightExpression": {"id": 611, "name": "multiplier", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 603, "src": "9132:10:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "9123:19:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "id": 613, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "9122:21:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "/", "rightExpression": {"hexValue": "31653138", "id": 614, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "9146:4:17", "typeDescriptions": {"typeIdentifier": "t_rational_1000000000000000000_by_1", "typeString": "int_const 1000000000000000000"}, "value": "1e18"}, "src": "9122:28:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 616, "name": "end", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 585, "src": "9152:3:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "id": 617, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "9121:35:17", "typeDescriptions": {"typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", "typeString": "tuple(uint256,uint256)"}}, "functionReturnParameters": 558, "id": 618, "nodeType": "Return", "src": "9114:42:17"}]}, "documentation": {"id": 548, "nodeType": "StructuredDocumentation", "src": "8281:313:17", "text": "@notice Preview the number of points that would be returned for the\n given amount and duration.\n @param amount OGV to be staked\n @param duration number of seconds to stake for\n @return points staking points that would be returned\n @return end staking period end date"}, "functionSelector": "4fd0e648", "id": 620, "implemented": true, "kind": "function", "modifiers": [], "name": "previewPoints", "nameLocation": "8608:13:17", "nodeType": "FunctionDefinition", "parameters": {"id": 553, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 550, "mutability": "mutable", "name": "amount", "nameLocation": "8630:6:17", "nodeType": "VariableDeclaration", "scope": 620, "src": "8622:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 549, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "8622:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 552, "mutability": "mutable", "name": "duration", "nameLocation": "8646:8:17", "nodeType": "VariableDeclaration", "scope": 620, "src": "8638:16:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 551, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "8638:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "8621:34:17"}, "returnParameters": {"id": 558, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 555, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 620, "src": "8701:7:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 554, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "8701:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 557, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 620, "src": "8710:7:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 556, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "8710:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "8700:18:17"}, "scope": 806, "src": "8599:564:17", "stateMutability": "view", "virtual": false, "visibility": "public"}, {"body": {"id": 629, "nodeType": "Block", "src": "9280:44:17", "statements": [{"expression": {"arguments": [{"expression": {"id": 625, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "9306:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 626, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "9306:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "id": 624, "name": "_collectRewards", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 782, "src": "9290:15:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", "typeString": "function (address)"}}, "id": 627, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "9290:27:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 628, "nodeType": "ExpressionStatement", "src": "9290:27:17"}]}, "documentation": {"id": 621, "nodeType": "StructuredDocumentation", "src": "9197:43:17", "text": "@notice Collect all earned OGV rewards."}, "functionSelector": "70bb45b3", "id": 630, "implemented": true, "kind": "function", "modifiers": [], "name": "collectRewards", "nameLocation": "9254:14:17", "nodeType": "FunctionDefinition", "parameters": {"id": 622, "nodeType": "ParameterList", "parameters": [], "src": "9268:2:17"}, "returnParameters": {"id": 623, "nodeType": "ParameterList", "parameters": [], "src": "9280:0:17"}, "scope": 806, "src": "9245:79:17", "stateMutability": "nonpayable", "virtual": false, "visibility": "external"}, {"body": {"id": 682, "nodeType": "Block", "src": "9595:445:17", "statements": [{"assignments": [639], "declarations": [{"constant": false, "id": 639, "mutability": "mutable", "name": "supply", "nameLocation": "9613:6:17", "nodeType": "VariableDeclaration", "scope": 682, "src": "9605:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 638, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "9605:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 642, "initialValue": {"arguments": [], "expression": {"argumentTypes": [], "id": 640, "name": "totalSupply", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 891, "src": "9622:11:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", "typeString": "function () view returns (uint256)"}}, "id": 641, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "9622:13:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "9605:30:17"}, {"condition": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 645, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 643, "name": "supply", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 639, "src": "9649:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": {"hexValue": "30", "id": 644, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "9659:1:17", "typeDescriptions": {"typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0"}, "value": "0"}, "src": "9649:11:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "id": 649, "nodeType": "IfStatement", "src": "9645:95:17", "trueBody": {"id": 648, "nodeType": "Block", "src": "9662:78:17", "statements": [{"expression": {"hexValue": "30", "id": 646, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "9683:1:17", "typeDescriptions": {"typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0"}, "value": "0"}, "functionReturnParameters": 637, "id": 647, "nodeType": "Return", "src": "9676:8:17"}]}}, {"assignments": [651], "declarations": [{"constant": false, "id": 651, "mutability": "mutable", "name": "_accRewardPerShare", "nameLocation": "9757:18:17", "nodeType": "VariableDeclaration", "scope": 682, "src": "9749:26:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 650, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "9749:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 653, "initialValue": {"id": 652, "name": "accRewardPerShare", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 46, "src": "9778:17:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "9749:46:17"}, {"expression": {"id": 663, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": {"id": 654, "name": "_accRewardPerShare", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 651, "src": "9805:18:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "Assignment", "operator": "+=", "rightHandSide": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 662, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"components": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 659, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"arguments": [], "expression": {"argumentTypes": [], "expression": {"id": 655, "name": "rewardsSource", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 40, "src": "9828:13:17", "typeDescriptions": {"typeIdentifier": "t_contract$_RewardsSource_$3325", "typeString": "contract RewardsSource"}}, "id": 656, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "previewRewards", "nodeType": "MemberAccess", "referencedDeclaration": 3020, "src": "9828:28:17", "typeDescriptions": {"typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", "typeString": "function () view external returns (uint256)"}}, "id": 657, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "9828:30:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "*", "rightExpression": {"hexValue": "31653132", "id": 658, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "9861:4:17", "typeDescriptions": {"typeIdentifier": "t_rational_1000000000000_by_1", "typeString": "int_const 1000000000000"}, "value": "1e12"}, "src": "9828:37:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "id": 660, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "9827:39:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "/", "rightExpression": {"id": 661, "name": "supply", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 639, "src": "9869:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "9827:48:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "9805:70:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "id": 664, "nodeType": "ExpressionStatement", "src": "9805:70:17"}, {"assignments": [666], "declarations": [{"constant": false, "id": 666, "mutability": "mutable", "name": "netRewardsPerShare", "nameLocation": "9893:18:17", "nodeType": "VariableDeclaration", "scope": 682, "src": "9885:26:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 665, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "9885:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 672, "initialValue": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 671, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 667, "name": "_accRewardPerShare", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 651, "src": "9914:18:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "-", "rightExpression": {"baseExpression": {"id": 668, "name": "rewardDebtPerShare", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 44, "src": "9947:18:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)"}}, "id": 670, "indexExpression": {"id": 669, "name": "user", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 633, "src": "9966:4:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "9947:24:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "9914:57:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "9885:86:17"}, {"expression": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 680, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"components": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 677, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"arguments": [{"id": 674, "name": "user", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 633, "src": "9999:4:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "id": 673, "name": "balanceOf", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 905, "src": "9989:9:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$", "typeString": "function (address) view returns (uint256)"}}, "id": 675, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "9989:15:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "*", "rightExpression": {"id": 676, "name": "netRewardsPerShare", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 666, "src": "10007:18:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "9989:36:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "id": 678, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "9988:38:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "/", "rightExpression": {"hexValue": "31653132", "id": 679, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "10029:4:17", "typeDescriptions": {"typeIdentifier": "t_rational_1000000000000_by_1", "typeString": "int_const 1000000000000"}, "value": "1e12"}, "src": "9988:45:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "functionReturnParameters": 637, "id": 681, "nodeType": "Return", "src": "9981:52:17"}]}, "documentation": {"id": 631, "nodeType": "StructuredDocumentation", "src": "9330:190:17", "text": "@notice Shows the amount of OGV a user would receive if they collected\n rewards at this time.\n @param user to preview rewards for\n @return OGV rewards amount"}, "functionSelector": "f166e920", "id": 683, "implemented": true, "kind": "function", "modifiers": [], "name": "previewRewards", "nameLocation": "9534:14:17", "nodeType": "FunctionDefinition", "parameters": {"id": 634, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 633, "mutability": "mutable", "name": "user", "nameLocation": "9557:4:17", "nodeType": "VariableDeclaration", "scope": 683, "src": "9549:12:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 632, "name": "address", "nodeType": "ElementaryTypeName", "src": "9549:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}], "src": "9548:14:17"}, "returnParameters": {"id": 637, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 636, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 683, "src": "9586:7:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 635, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "9586:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "9585:9:17"}, "scope": 806, "src": "9525:515:17", "stateMutability": "view", "virtual": false, "visibility": "external"}, {"body": {"id": 781, "nodeType": "Block", "src": "10580:796:17", "statements": [{"assignments": [690], "declarations": [{"constant": false, "id": 690, "mutability": "mutable", "name": "supply", "nameLocation": "10598:6:17", "nodeType": "VariableDeclaration", "scope": 781, "src": "10590:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 689, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "10590:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 693, "initialValue": {"arguments": [], "expression": {"argumentTypes": [], "id": 691, "name": "totalSupply", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 891, "src": "10607:11:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", "typeString": "function () view returns (uint256)"}}, "id": 692, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10607:13:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "10590:30:17"}, {"condition": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 696, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 694, "name": "supply", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 690, "src": "10634:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": ">", "rightExpression": {"hexValue": "30", "id": 695, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "10643:1:17", "typeDescriptions": {"typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0"}, "value": "0"}, "src": "10634:10:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "id": 737, "nodeType": "IfStatement", "src": "10630:375:17", "trueBody": {"id": 736, "nodeType": "Block", "src": "10646:359:17", "statements": [{"assignments": [698], "declarations": [{"constant": false, "id": 698, "mutability": "mutable", "name": "preBalance", "nameLocation": "10668:10:17", "nodeType": "VariableDeclaration", "scope": 736, "src": "10660:18:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 697, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "10660:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 706, "initialValue": {"arguments": [{"arguments": [{"id": 703, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -28, "src": "10703:4:17", "typeDescriptions": {"typeIdentifier": "t_contract$_OgvStaking_$806", "typeString": "contract OgvStaking"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_contract$_OgvStaking_$806", "typeString": "contract OgvStaking"}], "id": 702, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "10695:7:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)"}, "typeName": {"id": 701, "name": "address", "nodeType": "ElementaryTypeName", "src": "10695:7:17", "typeDescriptions": {}}}, "id": 704, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10695:13:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "expression": {"id": 699, "name": "ogv", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 37, "src": "10681:3:17", "typeDescriptions": {"typeIdentifier": "t_contract$_ERC20_$1392", "typeString": "contract ERC20"}}, "id": 700, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "balanceOf", "nodeType": "MemberAccess", "referencedDeclaration": 905, "src": "10681:13:17", "typeDescriptions": {"typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", "typeString": "function (address) view external returns (uint256)"}}, "id": 705, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10681:28:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "10660:49:17"}, {"clauses": [{"block": {"id": 710, "nodeType": "Block", "src": "10758:2:17", "statements": []}, "errorName": "", "id": 711, "nodeType": "TryCatchClause", "src": "10758:2:17"}, {"block": {"id": 712, "nodeType": "Block", "src": "10767:91:17", "statements": []}, "errorName": "", "id": 713, "nodeType": "TryCatchClause", "src": "10761:97:17"}], "externalCall": {"arguments": [], "expression": {"argumentTypes": [], "expression": {"id": 707, "name": "rewardsSource", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 40, "src": "10727:13:17", "typeDescriptions": {"typeIdentifier": "t_contract$_RewardsSource_$3325", "typeString": "contract RewardsSource"}}, "id": 708, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "collectRewards", "nodeType": "MemberAccess", "referencedDeclaration": 2994, "src": "10727:28:17", "typeDescriptions": {"typeIdentifier": "t_function_external_nonpayable$__$returns$_t_uint256_$", "typeString": "function () external returns (uint256)"}}, "id": 709, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10727:30:17", "tryCall": true, "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "id": 714, "nodeType": "TryStatement", "src": "10723:135:17"}, {"assignments": [716], "declarations": [{"constant": false, "id": 716, "mutability": "mutable", "name": "collected", "nameLocation": "10879:9:17", "nodeType": "VariableDeclaration", "scope": 736, "src": "10871:17:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 715, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "10871:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 726, "initialValue": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 725, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"arguments": [{"arguments": [{"id": 721, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -28, "src": "10913:4:17", "typeDescriptions": {"typeIdentifier": "t_contract$_OgvStaking_$806", "typeString": "contract OgvStaking"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_contract$_OgvStaking_$806", "typeString": "contract OgvStaking"}], "id": 720, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "10905:7:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)"}, "typeName": {"id": 719, "name": "address", "nodeType": "ElementaryTypeName", "src": "10905:7:17", "typeDescriptions": {}}}, "id": 722, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10905:13:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "expression": {"id": 717, "name": "ogv", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 37, "src": "10891:3:17", "typeDescriptions": {"typeIdentifier": "t_contract$_ERC20_$1392", "typeString": "contract ERC20"}}, "id": 718, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "balanceOf", "nodeType": "MemberAccess", "referencedDeclaration": 905, "src": "10891:13:17", "typeDescriptions": {"typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", "typeString": "function (address) view external returns (uint256)"}}, "id": 723, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10891:28:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "-", "rightExpression": {"id": 724, "name": "preBalance", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 698, "src": "10922:10:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "10891:41:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "10871:61:17"}, {"expression": {"id": 734, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": {"id": 727, "name": "accRewardPerShare", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 46, "src": "10946:17:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "Assignment", "operator": "+=", "rightHandSide": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 733, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"components": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 730, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 728, "name": "collected", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 716, "src": "10968:9:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "*", "rightExpression": {"hexValue": "31653132", "id": 729, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "10980:4:17", "typeDescriptions": {"typeIdentifier": "t_rational_1000000000000_by_1", "typeString": "int_const 1000000000000"}, "value": "1e12"}, "src": "10968:16:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "id": 731, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "10967:18:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "/", "rightExpression": {"id": 732, "name": "supply", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 690, "src": "10988:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "10967:27:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "10946:48:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "id": 735, "nodeType": "ExpressionStatement", "src": "10946:48:17"}]}}, {"assignments": [739], "declarations": [{"constant": false, "id": 739, "mutability": "mutable", "name": "netRewardsPerShare", "nameLocation": "11022:18:17", "nodeType": "VariableDeclaration", "scope": 781, "src": "11014:26:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 738, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "11014:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 745, "initialValue": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 744, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 740, "name": "accRewardPerShare", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 46, "src": "11043:17:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "-", "rightExpression": {"baseExpression": {"id": 741, "name": "rewardDebtPerShare", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 44, "src": "11075:18:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)"}}, "id": 743, "indexExpression": {"id": 742, "name": "user", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 686, "src": "11094:4:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "11075:24:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "11043:56:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "11014:85:17"}, {"assignments": [747], "declarations": [{"constant": false, "id": 747, "mutability": "mutable", "name": "netRewards", "nameLocation": "11117:10:17", "nodeType": "VariableDeclaration", "scope": 781, "src": "11109:18:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 746, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "11109:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 756, "initialValue": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 755, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"components": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 752, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"arguments": [{"id": 749, "name": "user", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 686, "src": "11141:4:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "id": 748, "name": "balanceOf", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 905, "src": "11131:9:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$", "typeString": "function (address) view returns (uint256)"}}, "id": 750, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "11131:15:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "*", "rightExpression": {"id": 751, "name": "netRewardsPerShare", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 739, "src": "11149:18:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "11131:36:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "id": 753, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "11130:38:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "/", "rightExpression": {"hexValue": "31653132", "id": 754, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "11171:4:17", "typeDescriptions": {"typeIdentifier": "t_rational_1000000000000_by_1", "typeString": "int_const 1000000000000"}, "value": "1e12"}, "src": "11130:45:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "11109:66:17"}, {"expression": {"id": 761, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": {"baseExpression": {"id": 757, "name": "rewardDebtPerShare", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 44, "src": "11185:18:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)"}}, "id": 759, "indexExpression": {"id": 758, "name": "user", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 686, "src": "11204:4:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", "src": "11185:24:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "Assignment", "operator": "=", "rightHandSide": {"id": 760, "name": "accRewardPerShare", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 46, "src": "11212:17:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "11185:44:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "id": 762, "nodeType": "ExpressionStatement", "src": "11185:44:17"}, {"condition": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 765, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 763, "name": "netRewards", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 747, "src": "11243:10:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": {"hexValue": "30", "id": 764, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "11257:1:17", "typeDescriptions": {"typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0"}, "value": "0"}, "src": "11243:15:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "id": 768, "nodeType": "IfStatement", "src": "11239:52:17", "trueBody": {"id": 767, "nodeType": "Block", "src": "11260:31:17", "statements": [{"functionReturnParameters": 688, "id": 766, "nodeType": "Return", "src": "11274:7:17"}]}}, {"expression": {"arguments": [{"id": 772, "name": "user", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 686, "src": "11313:4:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 773, "name": "netRewards", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 747, "src": "11319:10:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "expression": {"id": 769, "name": "ogv", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 37, "src": "11300:3:17", "typeDescriptions": {"typeIdentifier": "t_contract$_ERC20_$1392", "typeString": "contract ERC20"}}, "id": 771, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "transfer", "nodeType": "MemberAccess", "referencedDeclaration": 930, "src": "11300:12:17", "typeDescriptions": {"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) external returns (bool)"}}, "id": 774, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "11300:30:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "id": 775, "nodeType": "ExpressionStatement", "src": "11300:30:17"}, {"eventCall": {"arguments": [{"id": 777, "name": "user", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 686, "src": "11352:4:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 778, "name": "netRewards", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 747, "src": "11358:10:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 776, "name": "Reward", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 80, "src": "11345:6:17", "typeDescriptions": {"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)"}}, "id": 779, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "11345:24:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 780, "nodeType": "EmitStatement", "src": "11340:29:17"}]}, "documentation": {"id": 684, "nodeType": "StructuredDocumentation", "src": "10046:481:17", "text": "@dev Internal function to handle rewards accounting.\n 1. Collect new rewards for everyone\n 2. Calculate this user's rewards and accounting\n 3. Distribute this user's rewards\n This function *must* be called before any user balance changes.\n This will always update the user's rewardDebtPerShare to match\n accRewardPerShare, which is essential to the accounting.\n @param user to collect rewards for"}, "id": 782, "implemented": true, "kind": "function", "modifiers": [], "name": "_collectRewards", "nameLocation": "10541:15:17", "nodeType": "FunctionDefinition", "parameters": {"id": 687, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 686, "mutability": "mutable", "name": "user", "nameLocation": "10565:4:17", "nodeType": "VariableDeclaration", "scope": 782, "src": "10557:12:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 685, "name": "address", "nodeType": "ElementaryTypeName", "src": "10557:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}], "src": "10556:14:17"}, "returnParameters": {"id": 688, "nodeType": "ParameterList", "parameters": [], "src": "10580:0:17"}, "scope": 806, "src": "10532:844:17", "stateMutability": "nonpayable", "virtual": false, "visibility": "internal"}, {"baseFunctions": [1835], "body": {"id": 804, "nodeType": "Block", "src": "11608:98:17", "statements": [{"expression": {"id": 795, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": {"baseExpression": {"id": 791, "name": "hasDelegationSet", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 50, "src": "11618:16:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_bool_$", "typeString": "mapping(address => bool)"}}, "id": 793, "indexExpression": {"id": 792, "name": "delegator", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 785, "src": "11635:9:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", "src": "11618:27:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "nodeType": "Assignment", "operator": "=", "rightHandSide": {"hexValue": "74727565", "id": 794, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "11648:4:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}, "value": "true"}, "src": "11618:34:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "id": 796, "nodeType": "ExpressionStatement", "src": "11618:34:17"}, {"expression": {"arguments": [{"id": 800, "name": "delegator", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 785, "src": "11678:9:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 801, "name": "delegatee", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 787, "src": "11689:9:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_address", "typeString": "address"}], "expression": {"id": 797, "name": "super", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -25, "src": "11662:5:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_super$_OgvStaking_$806_$", "typeString": "type(contract super OgvStaking)"}}, "id": 799, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "_delegate", "nodeType": "MemberAccess", "referencedDeclaration": 1835, "src": "11662:15:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$", "typeString": "function (address,address)"}}, "id": 802, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "11662:37:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 803, "nodeType": "ExpressionStatement", "src": "11662:37:17"}]}, "documentation": {"id": 783, "nodeType": "StructuredDocumentation", "src": "11382:146:17", "text": " @dev Change delegation for `delegator` to `delegatee`.\n Emits events {DelegateChanged} and {DelegateVotesChanged}."}, "id": 805, "implemented": true, "kind": "function", "modifiers": [], "name": "_delegate", "nameLocation": "11542:9:17", "nodeType": "FunctionDefinition", "overrides": {"id": 789, "nodeType": "OverrideSpecifier", "overrides": [], "src": "11599:8:17"}, "parameters": {"id": 788, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 785, "mutability": "mutable", "name": "delegator", "nameLocation": "11560:9:17", "nodeType": "VariableDeclaration", "scope": 805, "src": "11552:17:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 784, "name": "address", "nodeType": "ElementaryTypeName", "src": "11552:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}, {"constant": false, "id": 787, "mutability": "mutable", "name": "delegatee", "nameLocation": "11579:9:17", "nodeType": "VariableDeclaration", "scope": 805, "src": "11571:17:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 786, "name": "address", "nodeType": "ElementaryTypeName", "src": "11571:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}], "src": "11551:38:17"}, "returnParameters": {"id": 790, "nodeType": "ParameterList", "parameters": [], "src": "11608:0:17"}, "scope": 806, "src": "11533:173:17", "stateMutability": "nonpayable", "virtual": false, "visibility": "internal"}], "scope": 807, "src": "837:10871:17", "usedErrors": [4687, 4807, 4824]}], "src": "32:11677:17"}, "bytecode": "6101c06040523480156200001257600080fd5b50604051620039f4380380620039f4833981016040819052620000359162000239565b604051806040016040528060058152602001643b32a7a3ab60d91b81525080604051806040016040528060018152602001603160f81b81525060405180602001604052806000815250604051806020016040528060008152508160039080519060200190620000a692919062000176565b508051620000bc90600490602084019062000176565b5050825160208085019190912083518483012060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81880181905281830187905260608201869052608082019490945230818401528151808203909301835260c0019052805194019390932091935091906080523060c05261012052505050506001600160a01b0394851661018052506101409290925261016052166101a052620002c1565b828054620001849062000284565b90600052602060002090601f016020900481019282620001a85760008555620001f3565b82601f10620001c357805160ff1916838001178555620001f3565b82800160010185558215620001f3579182015b82811115620001f3578251825591602001919060010190620001d6565b506200020192915062000205565b5090565b5b8082111562000201576000815560010162000206565b80516001600160a01b03811681146200023457600080fd5b919050565b600080600080608085870312156200025057600080fd5b6200025b856200021c565b9350602085015192506040850151915062000279606086016200021c565b905092959194509250565b600181811c908216806200029957607f821691505b60208210811415620002bb57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a05161366a6200038a600039600081816105db0152818161136d015261164201526000818161029101528181610812015281816115cb015281816116e9015281816118460152611ddb0152600081816103b5015261098a01526000818161048101528181610a3901528181610a600152610aa2015260006119a5015260006119f4015260006119cf01526000611928015260006119520152600061197c015261366a6000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c806370bb45b311610130578063a457c2d7116100b8578063d505accf1161007c578063d505accf14610560578063dd62ed3e14610573578063f1127ed814610586578063f166e920146105c3578063f7240d2f146105d657600080fd5b8063a457c2d7146104e0578063a9059cbb146104f3578063c3cda52014610501578063c89258db14610514578063c93d0b1e1461052757600080fd5b80638e539e8c116100ff5780638e539e8c14610469578063900cf0cf1461047c578063939d6237146104a357806395d89b41146104ac5780639ab24eb0146104cd57600080fd5b806370bb45b3146104285780637628a37d146104305780637b0472f0146104435780637ecebe001461045657600080fd5b806339509351116101b3578063587cde1e11610182578063587cde1e1461038a5780635c19a95c1461039d5780635fec5c64146103b05780636fcfff45146103d757806370a08231146103ff57600080fd5b8063395093511461031c5780633a46b1a81461032f5780634423bf57146103425780634fd0e6481461036257600080fd5b806318160ddd116101fa57806318160ddd146102cb57806323b872dd146102dd5780632e17de78146102f0578063313ce567146103055780633644e5151461031457600080fd5b80630348dbf11461022c57806306fdde0314610264578063095ea7b314610279578063142561cf1461028c575b600080fd5b61024f61023a366004613297565b600d6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61026c6105fd565b60405161025b91906132b2565b61024f610287366004613307565b61061d565b6102b37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161025b565b6002545b60405190815260200161025b565b61024f6102eb366004613331565b610637565b6103036102fe36600461336d565b610687565b005b6040516012815260200161025b565b6102cf6108da565b61024f61032a366004613307565b6108e9565b6102cf61033d366004613307565b61090b565b6102cf610350366004613297565b600b6020526000908152604090205481565b610375610370366004613386565b610985565b6040805192835260208301919091520161025b565b6102b3610398366004613297565b610b26565b6103036103ab366004613297565b610b44565b6102cf7f000000000000000000000000000000000000000000000000000000000000000081565b6103ea6103e5366004613297565b610b51565b60405163ffffffff909116815260200161025b565b6102cf61040d366004613297565b6001600160a01b031660009081526020819052604090205490565b610303610b73565b61030361043e3660046133a8565b610b7e565b610303610451366004613386565b610b8e565b6102cf610464366004613297565b610b9d565b6102cf61047736600461336d565b610bbb565b6102cf7f000000000000000000000000000000000000000000000000000000000000000081565b6102cf600c5481565b6040805180820190915260058152643b32a7a3ab60d91b602082015261026c565b6102cf6104db366004613297565b610c17565b61024f6104ee366004613307565b610c9d565b61024f6102eb366004613307565b61030361050f3660046133ee565b610d23565b610303610522366004613386565b610e77565b61053a610535366004613307565b6110c6565b604080516001600160801b0394851681529390921660208401529082015260600161025b565b61030361056e366004613446565b611117565b6102cf6105813660046134b0565b611299565b6105996105943660046134e3565b6112c4565b60408051825163ffffffff1681526020928301516001600160e01b0316928101929092520161025b565b6102cf6105d1366004613297565b611347565b6102b37f000000000000000000000000000000000000000000000000000000000000000081565b606060405180606001604052806024815260200161361160249139905090565b60003361062b81858561147c565b60019150505b92915050565b60405162461bcd60e51b815260206004820152601b60248201527f5374616b696e673a205472616e73666572732064697361626c6564000000000060448201526000906064015b60405180910390fd5b336000908152600a602052604081208054839081106106a8576106a8613523565b600091825260209182902060408051606081018252600290930290910180546001600160801b03808216808652600160801b90920416948401859052600190910154918301829052919350909190428211156107515760405162461bcd60e51b815260206004820152602260248201527f5374616b696e673a20456e64206f66206c6f636b7570206e6f74207265616368604482015261195960f21b606482015260840161067e565b816107ac5760405162461bcd60e51b815260206004820152602560248201527f5374616b696e673a20416c726561647920756e7374616b65642074686973206c60448201526406f636b75760dc1b606482015260840161067e565b6107b5336115a0565b336000908152600a602052604090208054869081106107d6576107d6613523565b600091825260208220600290910201818155600101556107f633826118fd565b60405163a9059cbb60e01b8152336004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015610863573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108879190613539565b5060408051868152602081018590529081018390526060810182905233907f05b744e3e9358bc00ba3cc0c6606a4d6536134dba00b2d2ee4b5de169acd6427906080015b60405180910390a25050505050565b60006108e461191b565b905090565b60003361062b8185856108fc8383611299565b6109069190613571565b61147c565b600043821061095c5760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e656400604482015260640161067e565b6001600160a01b038316600090815260086020526040902061097e9083611a42565b9392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000008310156109ed5760405162461bcd60e51b815260206004820152601260248201527114dd185ada5b99ce88151bdbc81cda1bdc9d60721b604482015260640161067e565b6307861f80831115610a355760405162461bcd60e51b81526020600482015260116024820152705374616b696e673a20546f6f206c6f6e6760781b604482015260640161067e565b60007f00000000000000000000000000000000000000000000000000000000000000004211610a84577f0000000000000000000000000000000000000000000000000000000000000000610a86565b425b90506000610a948583613571565b905060006301e13380610ac77f000000000000000000000000000000000000000000000000000000000000000084613589565b610ad990670de0b6b3a76400006135a0565b610ae391906135bf565b90506000610af96718fae27693b4000083611afe565b9050670de0b6b3a7640000610b0e828a6135a0565b610b1891906135bf565b989297509195505050505050565b6001600160a01b039081166000908152600760205260409020541690565b610b4e3382611b3d565b50565b6001600160a01b03811660009081526008602052604081205461063190611b6a565b610b7c336115a0565b565b610b89838383611bd3565b505050565b610b99828233611bd3565b5050565b6001600160a01b038116600090815260056020526040812054610631565b6000438210610c0c5760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e656400604482015260640161067e565b610631600983611a42565b6001600160a01b0381166000908152600860205260408120548015610c8a576001600160a01b0383166000908152600860205260409020610c59600183613589565b81548110610c6957610c69613523565b600091825260209091200154600160201b90046001600160e01b0316610c8d565b60005b6001600160e01b03169392505050565b60003381610cab8286611299565b905083811015610d0b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161067e565b610d18828686840361147c565b506001949350505050565b83421115610d735760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e61747572652065787069726564000000604482015260640161067e565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610ded90610de59060a00160405160208183030381529060405280519060200120611f03565b858585611f51565b9050610e16816001600160a01b0316600090815260056020526040902080546001810190915590565b8614610e645760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e636500000000000000604482015260640161067e565b610e6e8188611b3d565b50505050505050565b610e80336115a0565b336000908152600a60205260408120805484908110610ea157610ea1613523565b6000918252602080832060408051606081018252600290940290910180546001600160801b03808216808752600160801b90920416938501849052600190910154918401829052929450919290919080610efb8588610985565b91509150838111610f595760405162461bcd60e51b815260206004820152602260248201527f5374616b696e673a204e6577206c6f636b7570206d757374206265206c6f6e6760448201526132b960f11b606482015260840161067e565b6001600160801b0381166020808801919091526040808801849052336000908152600a909252902080548791908a908110610f9657610f96613523565b60009182526020918290208351928401516001600160801b03908116600160801b029316929092176002909102909101908155604090910151600190910155610fe833610fe38585613589565b611f79565b336000908152600d602052604090205460ff161580156110195750600061100e33610b26565b6001600160a01b0316145b15611028576110283333611b3d565b60408051898152602081018790529081018590526060810184905233907f05b744e3e9358bc00ba3cc0c6606a4d6536134dba00b2d2ee4b5de169acd64279060800160405180910390a260408051898152602081018790529081018290526060810183905233907f2720efa4b2dd4f3f8a347da3cbd290a522e9432da9072c5b8e6300496fdde2829060800160405180910390a25050505050505050565b600a60205281600052604060002081815481106110e257600080fd5b6000918252602090912060029091020180546001909101546001600160801b038083169450600160801b909204909116915083565b834211156111675760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015260640161067e565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886111b48c6001600160a01b0316600090815260056020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061120f82611f03565b9050600061121f82878787611f51565b9050896001600160a01b0316816001600160a01b0316146112825760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015260640161067e565b61128d8a8a8a61147c565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60408051808201909152600080825260208201526001600160a01b0383166000908152600860205260409020805463ffffffff841690811061130857611308613523565b60009182526020918290206040805180820190915291015463ffffffff81168252600160201b90046001600160e01b0316918101919091529392505050565b60008061135360025490565b9050806113635750600092915050565b6000600c549050817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e0d801dd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ed91906135e1565b6113fc9064e8d4a510006135a0565b61140691906135bf565b6114109082613571565b6001600160a01b0385166000908152600b6020526040812054919250906114379083613589565b905064e8d4a510008161145f876001600160a01b031660009081526020819052604090205490565b61146991906135a0565b61147391906135bf565b95945050505050565b6001600160a01b0383166114de5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161067e565b6001600160a01b03821661153f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161067e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006115ab60025490565b90508015611793576040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561161a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163e91906135e1565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370bb45b36040518163ffffffff1660e01b81526004016020604051808303816000875af19250505080156116bc575060408051601f3d908101601f191682019092526116b9918101906135e1565b60015b6116c5576116c7565b505b6040516370a0823160e01b815230600482015260009082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611730573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175491906135e1565b61175e9190613589565b9050826117708264e8d4a510006135a0565b61177a91906135bf565b600c600082825461178b9190613571565b909155505050505b6001600160a01b0382166000908152600b6020526040812054600c546117b99190613589565b9050600064e8d4a51000826117e3866001600160a01b031660009081526020819052604090205490565b6117ed91906135a0565b6117f791906135bf565b600c546001600160a01b0386166000908152600b60205260409020559050806118205750505050565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af115801561188f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b39190613539565b50836001600160a01b03167f619caafabdd75649b302ba8419e48cccf64f37f1983ac4727cfb38b57703ffc9826040516118ef91815260200190565b60405180910390a250505050565b6119078282612003565b611915600961215883612164565b50505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561197457507f000000000000000000000000000000000000000000000000000000000000000046145b1561199e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b8154600090815b81811015611aa6576000611a5d82846122db565b905084868281548110611a7257611a72613523565b60009182526020909120015463ffffffff161115611a9257809250611aa0565b611a9d816001613571565b91505b50611a49565b8115611ae95784611ab8600184613589565b81548110611ac857611ac8613523565b600091825260209091200154600160201b90046001600160e01b0316611aec565b60005b6001600160e01b031695945050505050565b600082611b23578115611b12576000611b1c565b670de0b6b3a76400005b9050610631565b61097e611b38611b32856122f6565b846123a6565b6123b2565b6001600160a01b0382166000908152600d60205260409020805460ff19166001179055610b9982826123f8565b600063ffffffff821115611bcf5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b606482015260840161067e565b5090565b6001600160a01b038116611c295760405162461bcd60e51b815260206004820152601c60248201527f5374616b696e673a20546f20746865207a65726f206164647265737300000000604482015260640161067e565b6001600160801b03831115611c745760405162461bcd60e51b81526020600482015260116024820152700a6e8c2d6d2dcce7440a8dede40daeac6d607b1b604482015260640161067e565b60008311611cba5760405162461bcd60e51b81526020600482015260136024820152720a6e8c2d6d2dcce74409cdee840cadcdeeaced606b1b604482015260640161067e565b600080611cc78585610985565b90925090506001600160c01b03611cdd60025490565b611ce79084613571565b1115611d355760405162461bcd60e51b815260206004820152601c60248201527f5374616b696e673a204d617820706f696e747320657863656564656400000000604482015260640161067e565b611d3e836115a0565b6001600160a01b0383166000908152600a6020908152604080832081516060810183526001600160801b03808b16825286811682860190815293820188815283546001818101865594885295909620915193518116600160801b0293169290921760029093029091019182559151910155611db98383611f79565b6040516323b872dd60e01b8152336004820152306024820152604481018690527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015611e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e509190613539565b506001600160a01b0383166000908152600d602052604090205460ff16158015611e8b57506000611e8084610b26565b6001600160a01b0316145b15611e9a57611e9a8384611b3d565b6001600160a01b0383166000818152600a60205260409020547f2720efa4b2dd4f3f8a347da3cbd290a522e9432da9072c5b8e6300496fdde28290611ee190600190613589565b60408051918252602082018990528101849052606081018590526080016108cb565b6000610631611f1061191b565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611f628787878761248e565b91509150611f6f8161257b565b5095945050505050565b611f838282612736565b6002546001600160e01b031015611ff55760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b606482015260840161067e565b611915600961281d83612164565b6001600160a01b0382166120635760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161067e565b6001600160a01b038216600090815260208190526040902054818110156120d75760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161067e565b6001600160a01b0383166000908152602081905260408120838303905560028054849290612106908490613589565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610b8983600084612829565b600061097e8284613589565b8254600090819080156121ae578561217d600183613589565b8154811061218d5761218d613523565b600091825260209091200154600160201b90046001600160e01b03166121b1565b60005b6001600160e01b031692506121ca83858763ffffffff16565b9150600081118015612208575043866121e4600184613589565b815481106121f4576121f4613523565b60009182526020909120015463ffffffff16145b156122685761221682612844565b86612222600184613589565b8154811061223257612232613523565b9060005260206000200160000160046101000a8154816001600160e01b0302191690836001600160e01b031602179055506122d2565b85604051806040016040528061227d43611b6a565b63ffffffff16815260200161229185612844565b6001600160e01b039081169091528254600181018455600093845260209384902083519490930151909116600160201b0263ffffffff909316929092179101555b50935093915050565b60006122ea60028484186135bf565b61097e90848416613571565b6000670de0b6b3a764000082101561232457604051633621413760e21b81526004810183905260240161067e565b6000612339670de0b6b3a764000084046128ad565b670de0b6b3a7640000808202935090915083821c9081141561235c575050919050565b6706f05b59d3b200005b801561239e57670de0b6b3a7640000828002049150671bc16d674ec800008210612396579283019260019190911c905b60011c612366565b505050919050565b600061097e8383612995565b6000680a688906bd8b00000082106123e057604051634a4f26f160e01b81526004810183905260240161067e565b670de0b6b3a7640000604083901b0461097e81612a57565b600061240383610b26565b90506000612426846001600160a01b031660009081526020819052604090205490565b6001600160a01b0385811660008181526007602052604080822080546001600160a01b031916898616908117909155905194955093928616927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611915828483613152565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156124c55750600090506003612572565b8460ff16601b141580156124dd57508460ff16601c14155b156124ee5750600090506004612572565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612542573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661256b57600060019250925050612572565b9150600090505b94509492505050565b600081600481111561258f5761258f6135fa565b14156125985750565b60018160048111156125ac576125ac6135fa565b14156125fa5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161067e565b600281600481111561260e5761260e6135fa565b141561265c5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161067e565b6003816004811115612670576126706135fa565b14156126c95760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161067e565b60048160048111156126dd576126dd6135fa565b1415610b4e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161067e565b6001600160a01b03821661278c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161067e565b806002600082825461279e9190613571565b90915550506001600160a01b038216600090815260208190526040812080548392906127cb908490613571565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610b9960008383612829565b600061097e8284613571565b610b8961283584610b26565b61283e84610b26565b83613152565b60006001600160e01b03821115611bcf5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b606482015260840161067e565b6000600160801b82106128cd57608091821c916128ca9082613571565b90505b6801000000000000000082106128f057604091821c916128ed9082613571565b90505b600160201b821061290e57602091821c9161290b9082613571565b90505b62010000821061292b57601091821c916129289082613571565b90505b610100821061294757600891821c916129449082613571565b90505b6010821061296257600491821c9161295f9082613571565b90505b6004821061297d57600291821c9161297a9082613571565b90505b6002821061299057610631600182613571565b919050565b60008080600019848609848602925082811083820303915050670de0b6b3a764000081106129d95760405163698d9a0160e11b81526004810182905260240161067e565b600080670de0b6b3a76400008688099150506706f05b59d3b1ffff811182612a135780670de0b6b3a7640000850401945050505050610631565b620400008285030493909111909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690201905092915050565b600160bf1b678000000000000000821615612a7b5768016a09e667f3bcc9090260401c5b674000000000000000821615612a9a576801306fe0a31b7152df0260401c5b672000000000000000821615612ab9576801172b83c7d517adce0260401c5b671000000000000000821615612ad85768010b5586cf9890f62a0260401c5b670800000000000000821615612af7576801059b0d31585743ae0260401c5b670400000000000000821615612b1657680102c9a3e778060ee70260401c5b670200000000000000821615612b355768010163da9fb33356d80260401c5b670100000000000000821615612b5457680100b1afa5abcbed610260401c5b6680000000000000821615612b725768010058c86da1c09ea20260401c5b6640000000000000821615612b90576801002c605e2e8cec500260401c5b6620000000000000821615612bae57680100162f3904051fa10260401c5b6610000000000000821615612bcc576801000b175effdc76ba0260401c5b6608000000000000821615612bea57680100058ba01fb9f96d0260401c5b6604000000000000821615612c085768010002c5cc37da94920260401c5b6602000000000000821615612c26576801000162e525ee05470260401c5b6601000000000000821615612c445768010000b17255775c040260401c5b65800000000000821615612c61576801000058b91b5bc9ae0260401c5b65400000000000821615612c7e57680100002c5c89d5ec6d0260401c5b65200000000000821615612c9b5768010000162e43f4f8310260401c5b65100000000000821615612cb857680100000b1721bcfc9a0260401c5b65080000000000821615612cd55768010000058b90cf1e6e0260401c5b65040000000000821615612cf2576801000002c5c863b73f0260401c5b65020000000000821615612d0f57680100000162e430e5a20260401c5b65010000000000821615612d2c576801000000b1721835510260401c5b648000000000821615612d4857680100000058b90c0b490260401c5b644000000000821615612d645768010000002c5c8601cc0260401c5b642000000000821615612d80576801000000162e42fff00260401c5b641000000000821615612d9c5768010000000b17217fbb0260401c5b640800000000821615612db8576801000000058b90bfce0260401c5b640400000000821615612dd457680100000002c5c85fe30260401c5b640200000000821615612df05768010000000162e42ff10260401c5b600160201b821615612e0b57680100000000b17217f80260401c5b6380000000821615612e265768010000000058b90bfc0260401c5b6340000000821615612e41576801000000002c5c85fe0260401c5b6320000000821615612e5c57680100000000162e42ff0260401c5b6310000000821615612e77576801000000000b17217f0260401c5b6308000000821615612e9257680100000000058b90c00260401c5b6304000000821615612ead5768010000000002c5c8600260401c5b6302000000821615612ec8576801000000000162e4300260401c5b6301000000821615612ee35768010000000000b172180260401c5b62800000821615612efd576801000000000058b90c0260401c5b62400000821615612f1757680100000000002c5c860260401c5b62200000821615612f315768010000000000162e430260401c5b62100000821615612f4b57680100000000000b17210260401c5b62080000821615612f655768010000000000058b910260401c5b62040000821615612f7f576801000000000002c5c80260401c5b62020000821615612f9957680100000000000162e40260401c5b62010000821615612fb3576801000000000000b1720260401c5b618000821615612fcc57680100000000000058b90260401c5b614000821615612fe55768010000000000002c5d0260401c5b612000821615612ffe576801000000000000162e0260401c5b6110008216156130175768010000000000000b170260401c5b610800821615613030576801000000000000058c0260401c5b61040082161561304957680100000000000002c60260401c5b61020082161561306257680100000000000001630260401c5b61010082161561307b57680100000000000000b10260401c5b608082161561309357680100000000000000590260401c5b60408216156130ab576801000000000000002c0260401c5b60208216156130c357680100000000000000160260401c5b60108216156130db576801000000000000000b0260401c5b60088216156130f357680100000000000000060260401c5b600482161561310b57680100000000000000030260401c5b600282161561312357680100000000000000010260401c5b600182161561313b57680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b816001600160a01b0316836001600160a01b0316141580156131745750600081115b15610b89576001600160a01b03831615613202576001600160a01b038316600090815260086020526040812081906131af9061215885612164565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516131f7929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610b89576001600160a01b038216600090815260086020526040812081906132389061281d85612164565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516108cb929190918252602082015260400190565b80356001600160a01b038116811461299057600080fd5b6000602082840312156132a957600080fd5b61097e82613280565b600060208083528351808285015260005b818110156132df578581018301518582016040015282016132c3565b818111156132f1576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561331a57600080fd5b61332383613280565b946020939093013593505050565b60008060006060848603121561334657600080fd5b61334f84613280565b925061335d60208501613280565b9150604084013590509250925092565b60006020828403121561337f57600080fd5b5035919050565b6000806040838503121561339957600080fd5b50508035926020909101359150565b6000806000606084860312156133bd57600080fd5b83359250602084013591506133d460408501613280565b90509250925092565b803560ff8116811461299057600080fd5b60008060008060008060c0878903121561340757600080fd5b61341087613280565b9550602087013594506040870135935061342c606088016133dd565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561346157600080fd5b61346a88613280565b965061347860208901613280565b95506040880135945060608801359350613494608089016133dd565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156134c357600080fd5b6134cc83613280565b91506134da60208401613280565b90509250929050565b600080604083850312156134f657600080fd5b6134ff83613280565b9150602083013563ffffffff8116811461351857600080fd5b809150509250929050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561354b57600080fd5b8151801515811461097e57600080fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156135845761358461355b565b500190565b60008282101561359b5761359b61355b565b500390565b60008160001904831182151516156135ba576135ba61355b565b500290565b6000826135dc57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156135f357600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fdfe566f746520457363726f776564204f726967696e204465466920476f7665726e616e6365a264697066735822122052e0036d25753bd4e3f0803f1b01360a091a09793150fd8dabb2ce5802dbbf7b64736f6c634300080a0033", "bytecodeSha1": "b48172d98761c880b84733812d76aac02cb2ce23", "compiler": {"evm_version": "istanbul", "optimizer": {"enabled": true, "runs": 200}, "version": "0.8.10+commit.fc410830"}, "contractName": "OgvStaking", "coverageMap": {"branches": {"0": {}, "1": {"ERC20._approve": {"228": [10250, 10269, true], "229": [10328, 10349, true]}, "ERC20._burn": {"230": [9203, 9224, true], "231": [9394, 9418, true]}, "ERC20._mint": {"232": [8494, 8515, true]}, "ERC20.decreaseAllowance": {"227": [6811, 6846, true]}}, "11": {"EIP712._domainSeparatorV4": {"225": [3219, 3248, false], "226": [3252, 3285, false]}}, "14": {"PRBMath.exp2": {"260": [5351, 5377, false], "261": [5474, 5500, false], "262": [5597, 5623, false], "263": [5720, 5746, false], "264": [5843, 5868, false], "265": [5965, 5990, false], "266": [6087, 6112, false], "267": [6209, 6234, false], "268": [6331, 6355, false], "269": [6452, 6476, false], "270": [6573, 6597, false], "271": [6694, 6718, false], "272": [6815, 6838, false], "273": [6935, 6958, false], "274": [7055, 7078, false], "275": [7175, 7198, false], "276": [7295, 7317, false], "277": [7414, 7436, false], "278": [7533, 7555, false], "279": [7652, 7674, false], "280": [7771, 7792, false], "281": [7889, 7910, false], "282": [8007, 8028, false], "283": [8125, 8146, false], "284": [8243, 8263, false], "285": [8360, 8380, false], "286": [8477, 8497, false], "287": [8594, 8614, false], "288": [8711, 8730, false], "289": [8827, 8846, false], "290": [8943, 8962, false], "291": [9059, 9078, false], "292": [9175, 9193, false], "293": [9290, 9308, false], "294": [9405, 9423, false], "295": [9520, 9538, false], "296": [9635, 9652, false], "297": [9749, 9766, false], "298": [9863, 9880, false], "299": [9977, 9994, false], "300": [10091, 10107, false], "301": [10204, 10220, false], "302": [10317, 10333, false], "303": [10430, 10446, false], "304": [10543, 10558, false], "305": [10655, 10670, false], "306": [10767, 10782, false], "307": [10879, 10894, false], "308": [10991, 11005, false], "309": [11102, 11116, false], "310": [11213, 11227, false], "311": [11324, 11338, false], "312": [11435, 11448, false], "313": [11545, 11558, false], "314": [11655, 11668, false], "315": [11765, 11778, false], "316": [11875, 11887, false], "317": [11984, 11996, false], "318": [12093, 12105, false], "319": [12202, 12214, false], "320": [12311, 12322, false], "321": [12419, 12430, false], "322": [12527, 12538, false], "323": [12635, 12646, false]}, "PRBMath.mostSignificantBit": {"250": [13836, 13847, false], "251": [13920, 13930, false], "252": [14001, 14011, false], "253": [14082, 14092, false], "254": [14163, 14172, false], "255": [14241, 14250, false], "256": [14319, 14328, false], "257": [14397, 14406, false]}, "PRBMath.mulDivFixedPoint": {"258": [20498, 20512, false], "259": [20792, 20802, false]}}, "15": {"PRBMathUD60x18.exp2": {"329": [5744, 5755, false]}, "PRBMathUD60x18.log2": {"326": [19466, 19475, false], "327": [20112, 20122, false], "328": [20534, 20548, false]}, "PRBMathUD60x18.pow": {"324": [22253, 22259, false], "325": [22284, 22290, true]}}, "17": {"OgvStaking._collectRewards": {"217": [10634, 10644, false], "218": [11243, 11258, false]}, "OgvStaking._stake": {"219": [4753, 4769, true], "220": [4820, 4847, true], "221": [4887, 4897, true], "222": [5075, 5118, true], "223": [5547, 5567, false], "224": [5571, 5598, false]}, "OgvStaking.extend": {"213": [7686, 7701, true], "214": [7926, 7954, false], "215": [7958, 7993, false]}, "OgvStaking.previewPoints": {"210": [8741, 8769, true], "211": [8810, 8831, true], "212": [8879, 8902, true]}, "OgvStaking.previewRewards": {"216": [9649, 9660, false]}, "OgvStaking.unstake": {"208": [6160, 6182, true], "209": [6239, 6247, true]}}, "18": {}, "2": {}, "3": {"ERC20Votes._checkpointsLookup": {"240": [4965, 4999, false], "241": [5123, 5132, true]}, "ERC20Votes._mint": {"242": [6435, 6464, true]}, "ERC20Votes._moveVotingPower": {"246": [7919, 7929, false], "247": [7933, 7943, false], "248": [7963, 7980, false], "249": [8198, 8215, false]}, "ERC20Votes._writeCheckpoint": {"243": [8698, 8706, true], "244": [8790, 8797, false], "245": [8801, 8841, false]}, "ERC20Votes.delegateBySig": {"238": [5637, 5662, true], "239": [5910, 5936, true]}, "ERC20Votes.getPastTotalSupply": {"236": [3483, 3509, true]}, "ERC20Votes.getPastVotes": {"235": [2950, 2976, true]}, "ERC20Votes.getVotes": {"237": [2574, 2582, true]}}, "4": {}, "5": {"ERC20Permit.permit": {"233": [2164, 2191, true], "234": [2475, 2490, true]}}, "6": {}, "7": {}}, "statements": {"0": {}, "1": {"ERC20._approve": {"56": [10242, 10310], "57": [10320, 10388], "58": [10399, 10435], "59": [10445, 10482]}, "ERC20._burn": {"91": [9195, 9262], "92": [9386, 9457], "93": [9491, 9535], "94": [9555, 9577], "95": [9588, 9630], "96": [9641, 9689]}, "ERC20._mint": {"115": [8486, 8551], "116": [8622, 8644], "117": [8654, 8682], "118": [8692, 8734], "119": [8745, 8793]}, "ERC20.allowance": {"51": [4084, 4118]}, "ERC20.approve": {"6": [4570, 4602], "7": [4612, 4623]}, "ERC20.balanceOf": {"2": [3501, 3526]}, "ERC20.decimals": {"1": [3168, 3177]}, "ERC20.decreaseAllowance": {"33": [6803, 6888], "34": [6922, 6982], "35": [7003, 7014]}, "ERC20.increaseAllowance": {"17": [6015, 6079]}, "ERC20.totalSupply": {"0": [3324, 3343]}}, "11": {"EIP712._buildDomainSeparator": {"68": [3616, 3707]}, "EIP712._domainSeparatorV4": {"67": [3301, 3332], "69": [3363, 3434]}, "EIP712._hashTypedDataV4": {"87": [4435, 4497]}}, "14": {"PRBMath.exp2": {"140": [5397, 5442], "141": [5520, 5565], "142": [5643, 5688], "143": [5766, 5811], "144": [5888, 5933], "145": [6010, 6055], "146": [6132, 6177], "147": [6254, 6299], "148": [6375, 6420], "149": [6496, 6541], "150": [6617, 6662], "151": [6738, 6783], "152": [6858, 6903], "153": [6978, 7023], "154": [7098, 7143], "155": [7218, 7263], "156": [7337, 7382], "157": [7456, 7501], "158": [7575, 7620], "159": [7694, 7739], "160": [7812, 7857], "161": [7930, 7975], "162": [8048, 8093], "163": [8166, 8211], "164": [8283, 8328], "165": [8400, 8445], "166": [8517, 8562], "167": [8634, 8679], "168": [8750, 8795], "169": [8866, 8911], "170": [8982, 9027], "171": [9098, 9143], "172": [9213, 9258], "173": [9328, 9373], "174": [9443, 9488], "175": [9558, 9603], "176": [9672, 9717], "177": [9786, 9831], "178": [9900, 9945], "179": [10014, 10059], "180": [10127, 10172], "181": [10240, 10285], "182": [10353, 10398], "183": [10466, 10511], "184": [10578, 10623], "185": [10690, 10735], "186": [10802, 10847], "187": [10914, 10959], "188": [11025, 11070], "189": [11136, 11181], "190": [11247, 11292], "191": [11358, 11403], "192": [11468, 11513], "193": [11578, 11623], "194": [11688, 11733], "195": [11798, 11843], "196": [11907, 11952], "197": [12016, 12061], "198": [12125, 12170], "199": [12234, 12279], "200": [12342, 12387], "201": [12450, 12495], "202": [12558, 12603], "203": [12666, 12711], "204": [13286, 13301], "205": [13315, 13343]}, "PRBMath.mostSignificantBit": {"122": [13863, 13872], "123": [13886, 13896], "124": [13946, 13954], "125": [13968, 13977], "126": [14027, 14035], "127": [14049, 14058], "128": [14108, 14116], "129": [14130, 14139], "130": [14188, 14195], "131": [14209, 14217], "132": [14266, 14273], "133": [14287, 14295], "134": [14344, 14351], "135": [14365, 14373], "136": [14466, 14474]}, "PRBMath.mulDivFixedPoint": {"137": [20494, 20586], "138": [20846, 20884], "139": [20902, 20915]}}, "15": {"PRBMathUD60x18.exp2": {"110": [5740, 5823], "111": [6083, 6113]}, "PRBMathUD60x18.log2": {"102": [19462, 19544], "103": [19949, 19967], "104": [20142, 20155], "105": [20435, 20454], "106": [20635, 20650], "107": [20729, 20736], "108": [20404, 20415]}, "PRBMathUD60x18.mul": {"109": [21354, 21393]}, "PRBMathUD60x18.pow": {"73": [22275, 22311], "74": [22342, 22372]}}, "17": {"OgvStaking._collectRewards": {"60": [10946, 10994], "61": [11185, 11229], "62": [11274, 11281], "63": [11300, 11330], "64": [11340, 11369]}, "OgvStaking._delegate": {"75": [11618, 11652], "76": [11662, 11699]}, "OgvStaking._stake": {"77": [4745, 4802], "78": [4812, 4869], "79": [4879, 4921], "80": [5054, 5172], "81": [5182, 5201], "82": [5211, 5413], "83": [5423, 5440], "84": [5450, 5501], "85": [5684, 5701], "86": [5722, 5781]}, "OgvStaking.collectRewards": {"26": [9290, 9317]}, "OgvStaking.extend": {"39": [7340, 7367], "40": [7678, 7740], "41": [7750, 7778], "42": [7788, 7813], "43": [7823, 7861], "44": [7871, 7911], "45": [8079, 8112], "46": [8132, 8196], "47": [8206, 8268]}, "OgvStaking.name": {"4": [2680, 2725]}, "OgvStaking.previewPoints": {"20": [8733, 8792], "21": [8802, 8853], "22": [9114, 9156]}, "OgvStaking.previewRewards": {"53": [9676, 9684], "54": [9805, 9875], "55": [9981, 10033]}, "OgvStaking.stake": {"27": [3855, 3883], "28": [4374, 4410]}, "OgvStaking.symbol": {"3": [2811, 2825]}, "OgvStaking.transferFrom": {"8": [3085, 3122]}, "OgvStaking.unstake": {"9": [6152, 6221], "10": [6231, 6289], "11": [6299, 6326], "12": [6336, 6372], "13": [6429, 6454], "14": [6464, 6496], "15": [6506, 6561]}}, "18": {}, "2": {}, "3": {"ERC20Votes._add": {"120": [9146, 9158]}, "ERC20Votes._afterTokenTransfer": {"121": [7193, 7249]}, "ERC20Votes._burn": {"65": [6763, 6791], "66": [6802, 6862]}, "ERC20Votes._checkpointsLookup": {"70": [5019, 5029], "71": [5068, 5081], "72": [5116, 5160]}, "ERC20Votes._delegate": {"112": [7610, 7643], "113": [7654, 7713], "114": [7724, 7786]}, "ERC20Votes._mint": {"88": [6389, 6417], "89": [6427, 6517], "90": [6528, 6583]}, "ERC20Votes._moveVotingPower": {"206": [8113, 8165], "207": [8343, 8395]}, "ERC20Votes._subtract": {"97": [9253, 9265]}, "ERC20Votes._writeCheckpoint": {"98": [8686, 8733], "99": [8743, 8775], "100": [8857, 8909], "101": [8940, 9046]}, "ERC20Votes.checkpoints": {"52": [1866, 1899]}, "ERC20Votes.delegate": {"24": [5319, 5353]}, "ERC20Votes.delegateBySig": {"36": [5629, 5696], "37": [5902, 5966], "38": [5976, 6004]}, "ERC20Votes.delegates": {"23": [2311, 2337]}, "ERC20Votes.getPastTotalSupply": {"30": [3475, 3545], "31": [3555, 3618]}, "ERC20Votes.getPastVotes": {"18": [2942, 3012], "19": [3022, 3083]}, "ERC20Votes.getVotes": {"32": [2567, 2625]}, "ERC20Votes.numCheckpoints": {"25": [2069, 2123]}}, "4": {}, "5": {"ERC20Permit.DOMAIN_SEPARATOR": {"16": [2964, 2991]}, "ERC20Permit.nonces": {"29": [2723, 2754]}, "ERC20Permit.permit": {"48": [2156, 2225], "49": [2467, 2525], "50": [2536, 2567]}}, "6": {}, "7": {"Context._msgSender": {"5": [712, 729]}}}}, "dependencies": ["OpenZeppelin/openzeppelin-contracts@4.6.0/Context", "OpenZeppelin/openzeppelin-contracts@4.6.0/EIP712", "OpenZeppelin/openzeppelin-contracts@4.6.0/ERC20", "OpenZeppelin/openzeppelin-contracts@4.6.0/ERC20Permit", "OpenZeppelin/openzeppelin-contracts@4.6.0/ERC20Votes", "OpenZeppelin/openzeppelin-contracts@4.6.0/IERC20", "OpenZeppelin/openzeppelin-contracts@4.6.0/IERC20Metadata", "OpenZeppelin/openzeppelin-contracts@4.6.0/IERC20Permit", "OpenZeppelin/openzeppelin-contracts@4.6.0/IVotes", "Mintable", "paulrberg/prb-math@2.5.0/PRBMath", "paulrberg/prb-math@2.5.0/PRBMathUD60x18", "RewardsSource"], "deployedBytecode": "608060405234801561001057600080fd5b50600436106102275760003560e01c806370bb45b311610130578063a457c2d7116100b8578063d505accf1161007c578063d505accf14610560578063dd62ed3e14610573578063f1127ed814610586578063f166e920146105c3578063f7240d2f146105d657600080fd5b8063a457c2d7146104e0578063a9059cbb146104f3578063c3cda52014610501578063c89258db14610514578063c93d0b1e1461052757600080fd5b80638e539e8c116100ff5780638e539e8c14610469578063900cf0cf1461047c578063939d6237146104a357806395d89b41146104ac5780639ab24eb0146104cd57600080fd5b806370bb45b3146104285780637628a37d146104305780637b0472f0146104435780637ecebe001461045657600080fd5b806339509351116101b3578063587cde1e11610182578063587cde1e1461038a5780635c19a95c1461039d5780635fec5c64146103b05780636fcfff45146103d757806370a08231146103ff57600080fd5b8063395093511461031c5780633a46b1a81461032f5780634423bf57146103425780634fd0e6481461036257600080fd5b806318160ddd116101fa57806318160ddd146102cb57806323b872dd146102dd5780632e17de78146102f0578063313ce567146103055780633644e5151461031457600080fd5b80630348dbf11461022c57806306fdde0314610264578063095ea7b314610279578063142561cf1461028c575b600080fd5b61024f61023a366004613297565b600d6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61026c6105fd565b60405161025b91906132b2565b61024f610287366004613307565b61061d565b6102b37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161025b565b6002545b60405190815260200161025b565b61024f6102eb366004613331565b610637565b6103036102fe36600461336d565b610687565b005b6040516012815260200161025b565b6102cf6108da565b61024f61032a366004613307565b6108e9565b6102cf61033d366004613307565b61090b565b6102cf610350366004613297565b600b6020526000908152604090205481565b610375610370366004613386565b610985565b6040805192835260208301919091520161025b565b6102b3610398366004613297565b610b26565b6103036103ab366004613297565b610b44565b6102cf7f000000000000000000000000000000000000000000000000000000000000000081565b6103ea6103e5366004613297565b610b51565b60405163ffffffff909116815260200161025b565b6102cf61040d366004613297565b6001600160a01b031660009081526020819052604090205490565b610303610b73565b61030361043e3660046133a8565b610b7e565b610303610451366004613386565b610b8e565b6102cf610464366004613297565b610b9d565b6102cf61047736600461336d565b610bbb565b6102cf7f000000000000000000000000000000000000000000000000000000000000000081565b6102cf600c5481565b6040805180820190915260058152643b32a7a3ab60d91b602082015261026c565b6102cf6104db366004613297565b610c17565b61024f6104ee366004613307565b610c9d565b61024f6102eb366004613307565b61030361050f3660046133ee565b610d23565b610303610522366004613386565b610e77565b61053a610535366004613307565b6110c6565b604080516001600160801b0394851681529390921660208401529082015260600161025b565b61030361056e366004613446565b611117565b6102cf6105813660046134b0565b611299565b6105996105943660046134e3565b6112c4565b60408051825163ffffffff1681526020928301516001600160e01b0316928101929092520161025b565b6102cf6105d1366004613297565b611347565b6102b37f000000000000000000000000000000000000000000000000000000000000000081565b606060405180606001604052806024815260200161361160249139905090565b60003361062b81858561147c565b60019150505b92915050565b60405162461bcd60e51b815260206004820152601b60248201527f5374616b696e673a205472616e73666572732064697361626c6564000000000060448201526000906064015b60405180910390fd5b336000908152600a602052604081208054839081106106a8576106a8613523565b600091825260209182902060408051606081018252600290930290910180546001600160801b03808216808652600160801b90920416948401859052600190910154918301829052919350909190428211156107515760405162461bcd60e51b815260206004820152602260248201527f5374616b696e673a20456e64206f66206c6f636b7570206e6f74207265616368604482015261195960f21b606482015260840161067e565b816107ac5760405162461bcd60e51b815260206004820152602560248201527f5374616b696e673a20416c726561647920756e7374616b65642074686973206c60448201526406f636b75760dc1b606482015260840161067e565b6107b5336115a0565b336000908152600a602052604090208054869081106107d6576107d6613523565b600091825260208220600290910201818155600101556107f633826118fd565b60405163a9059cbb60e01b8152336004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015610863573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108879190613539565b5060408051868152602081018590529081018390526060810182905233907f05b744e3e9358bc00ba3cc0c6606a4d6536134dba00b2d2ee4b5de169acd6427906080015b60405180910390a25050505050565b60006108e461191b565b905090565b60003361062b8185856108fc8383611299565b6109069190613571565b61147c565b600043821061095c5760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e656400604482015260640161067e565b6001600160a01b038316600090815260086020526040902061097e9083611a42565b9392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000008310156109ed5760405162461bcd60e51b815260206004820152601260248201527114dd185ada5b99ce88151bdbc81cda1bdc9d60721b604482015260640161067e565b6307861f80831115610a355760405162461bcd60e51b81526020600482015260116024820152705374616b696e673a20546f6f206c6f6e6760781b604482015260640161067e565b60007f00000000000000000000000000000000000000000000000000000000000000004211610a84577f0000000000000000000000000000000000000000000000000000000000000000610a86565b425b90506000610a948583613571565b905060006301e13380610ac77f000000000000000000000000000000000000000000000000000000000000000084613589565b610ad990670de0b6b3a76400006135a0565b610ae391906135bf565b90506000610af96718fae27693b4000083611afe565b9050670de0b6b3a7640000610b0e828a6135a0565b610b1891906135bf565b989297509195505050505050565b6001600160a01b039081166000908152600760205260409020541690565b610b4e3382611b3d565b50565b6001600160a01b03811660009081526008602052604081205461063190611b6a565b610b7c336115a0565b565b610b89838383611bd3565b505050565b610b99828233611bd3565b5050565b6001600160a01b038116600090815260056020526040812054610631565b6000438210610c0c5760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e656400604482015260640161067e565b610631600983611a42565b6001600160a01b0381166000908152600860205260408120548015610c8a576001600160a01b0383166000908152600860205260409020610c59600183613589565b81548110610c6957610c69613523565b600091825260209091200154600160201b90046001600160e01b0316610c8d565b60005b6001600160e01b03169392505050565b60003381610cab8286611299565b905083811015610d0b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161067e565b610d18828686840361147c565b506001949350505050565b83421115610d735760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e61747572652065787069726564000000604482015260640161067e565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610ded90610de59060a00160405160208183030381529060405280519060200120611f03565b858585611f51565b9050610e16816001600160a01b0316600090815260056020526040902080546001810190915590565b8614610e645760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e636500000000000000604482015260640161067e565b610e6e8188611b3d565b50505050505050565b610e80336115a0565b336000908152600a60205260408120805484908110610ea157610ea1613523565b6000918252602080832060408051606081018252600290940290910180546001600160801b03808216808752600160801b90920416938501849052600190910154918401829052929450919290919080610efb8588610985565b91509150838111610f595760405162461bcd60e51b815260206004820152602260248201527f5374616b696e673a204e6577206c6f636b7570206d757374206265206c6f6e6760448201526132b960f11b606482015260840161067e565b6001600160801b0381166020808801919091526040808801849052336000908152600a909252902080548791908a908110610f9657610f96613523565b60009182526020918290208351928401516001600160801b03908116600160801b029316929092176002909102909101908155604090910151600190910155610fe833610fe38585613589565b611f79565b336000908152600d602052604090205460ff161580156110195750600061100e33610b26565b6001600160a01b0316145b15611028576110283333611b3d565b60408051898152602081018790529081018590526060810184905233907f05b744e3e9358bc00ba3cc0c6606a4d6536134dba00b2d2ee4b5de169acd64279060800160405180910390a260408051898152602081018790529081018290526060810183905233907f2720efa4b2dd4f3f8a347da3cbd290a522e9432da9072c5b8e6300496fdde2829060800160405180910390a25050505050505050565b600a60205281600052604060002081815481106110e257600080fd5b6000918252602090912060029091020180546001909101546001600160801b038083169450600160801b909204909116915083565b834211156111675760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015260640161067e565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886111b48c6001600160a01b0316600090815260056020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061120f82611f03565b9050600061121f82878787611f51565b9050896001600160a01b0316816001600160a01b0316146112825760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015260640161067e565b61128d8a8a8a61147c565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60408051808201909152600080825260208201526001600160a01b0383166000908152600860205260409020805463ffffffff841690811061130857611308613523565b60009182526020918290206040805180820190915291015463ffffffff81168252600160201b90046001600160e01b0316918101919091529392505050565b60008061135360025490565b9050806113635750600092915050565b6000600c549050817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e0d801dd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ed91906135e1565b6113fc9064e8d4a510006135a0565b61140691906135bf565b6114109082613571565b6001600160a01b0385166000908152600b6020526040812054919250906114379083613589565b905064e8d4a510008161145f876001600160a01b031660009081526020819052604090205490565b61146991906135a0565b61147391906135bf565b95945050505050565b6001600160a01b0383166114de5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161067e565b6001600160a01b03821661153f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161067e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006115ab60025490565b90508015611793576040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561161a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163e91906135e1565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370bb45b36040518163ffffffff1660e01b81526004016020604051808303816000875af19250505080156116bc575060408051601f3d908101601f191682019092526116b9918101906135e1565b60015b6116c5576116c7565b505b6040516370a0823160e01b815230600482015260009082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611730573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175491906135e1565b61175e9190613589565b9050826117708264e8d4a510006135a0565b61177a91906135bf565b600c600082825461178b9190613571565b909155505050505b6001600160a01b0382166000908152600b6020526040812054600c546117b99190613589565b9050600064e8d4a51000826117e3866001600160a01b031660009081526020819052604090205490565b6117ed91906135a0565b6117f791906135bf565b600c546001600160a01b0386166000908152600b60205260409020559050806118205750505050565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af115801561188f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b39190613539565b50836001600160a01b03167f619caafabdd75649b302ba8419e48cccf64f37f1983ac4727cfb38b57703ffc9826040516118ef91815260200190565b60405180910390a250505050565b6119078282612003565b611915600961215883612164565b50505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561197457507f000000000000000000000000000000000000000000000000000000000000000046145b1561199e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b8154600090815b81811015611aa6576000611a5d82846122db565b905084868281548110611a7257611a72613523565b60009182526020909120015463ffffffff161115611a9257809250611aa0565b611a9d816001613571565b91505b50611a49565b8115611ae95784611ab8600184613589565b81548110611ac857611ac8613523565b600091825260209091200154600160201b90046001600160e01b0316611aec565b60005b6001600160e01b031695945050505050565b600082611b23578115611b12576000611b1c565b670de0b6b3a76400005b9050610631565b61097e611b38611b32856122f6565b846123a6565b6123b2565b6001600160a01b0382166000908152600d60205260409020805460ff19166001179055610b9982826123f8565b600063ffffffff821115611bcf5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b606482015260840161067e565b5090565b6001600160a01b038116611c295760405162461bcd60e51b815260206004820152601c60248201527f5374616b696e673a20546f20746865207a65726f206164647265737300000000604482015260640161067e565b6001600160801b03831115611c745760405162461bcd60e51b81526020600482015260116024820152700a6e8c2d6d2dcce7440a8dede40daeac6d607b1b604482015260640161067e565b60008311611cba5760405162461bcd60e51b81526020600482015260136024820152720a6e8c2d6d2dcce74409cdee840cadcdeeaced606b1b604482015260640161067e565b600080611cc78585610985565b90925090506001600160c01b03611cdd60025490565b611ce79084613571565b1115611d355760405162461bcd60e51b815260206004820152601c60248201527f5374616b696e673a204d617820706f696e747320657863656564656400000000604482015260640161067e565b611d3e836115a0565b6001600160a01b0383166000908152600a6020908152604080832081516060810183526001600160801b03808b16825286811682860190815293820188815283546001818101865594885295909620915193518116600160801b0293169290921760029093029091019182559151910155611db98383611f79565b6040516323b872dd60e01b8152336004820152306024820152604481018690527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015611e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e509190613539565b506001600160a01b0383166000908152600d602052604090205460ff16158015611e8b57506000611e8084610b26565b6001600160a01b0316145b15611e9a57611e9a8384611b3d565b6001600160a01b0383166000818152600a60205260409020547f2720efa4b2dd4f3f8a347da3cbd290a522e9432da9072c5b8e6300496fdde28290611ee190600190613589565b60408051918252602082018990528101849052606081018590526080016108cb565b6000610631611f1061191b565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611f628787878761248e565b91509150611f6f8161257b565b5095945050505050565b611f838282612736565b6002546001600160e01b031015611ff55760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b606482015260840161067e565b611915600961281d83612164565b6001600160a01b0382166120635760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161067e565b6001600160a01b038216600090815260208190526040902054818110156120d75760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161067e565b6001600160a01b0383166000908152602081905260408120838303905560028054849290612106908490613589565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610b8983600084612829565b600061097e8284613589565b8254600090819080156121ae578561217d600183613589565b8154811061218d5761218d613523565b600091825260209091200154600160201b90046001600160e01b03166121b1565b60005b6001600160e01b031692506121ca83858763ffffffff16565b9150600081118015612208575043866121e4600184613589565b815481106121f4576121f4613523565b60009182526020909120015463ffffffff16145b156122685761221682612844565b86612222600184613589565b8154811061223257612232613523565b9060005260206000200160000160046101000a8154816001600160e01b0302191690836001600160e01b031602179055506122d2565b85604051806040016040528061227d43611b6a565b63ffffffff16815260200161229185612844565b6001600160e01b039081169091528254600181018455600093845260209384902083519490930151909116600160201b0263ffffffff909316929092179101555b50935093915050565b60006122ea60028484186135bf565b61097e90848416613571565b6000670de0b6b3a764000082101561232457604051633621413760e21b81526004810183905260240161067e565b6000612339670de0b6b3a764000084046128ad565b670de0b6b3a7640000808202935090915083821c9081141561235c575050919050565b6706f05b59d3b200005b801561239e57670de0b6b3a7640000828002049150671bc16d674ec800008210612396579283019260019190911c905b60011c612366565b505050919050565b600061097e8383612995565b6000680a688906bd8b00000082106123e057604051634a4f26f160e01b81526004810183905260240161067e565b670de0b6b3a7640000604083901b0461097e81612a57565b600061240383610b26565b90506000612426846001600160a01b031660009081526020819052604090205490565b6001600160a01b0385811660008181526007602052604080822080546001600160a01b031916898616908117909155905194955093928616927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611915828483613152565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156124c55750600090506003612572565b8460ff16601b141580156124dd57508460ff16601c14155b156124ee5750600090506004612572565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612542573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661256b57600060019250925050612572565b9150600090505b94509492505050565b600081600481111561258f5761258f6135fa565b14156125985750565b60018160048111156125ac576125ac6135fa565b14156125fa5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161067e565b600281600481111561260e5761260e6135fa565b141561265c5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161067e565b6003816004811115612670576126706135fa565b14156126c95760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161067e565b60048160048111156126dd576126dd6135fa565b1415610b4e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161067e565b6001600160a01b03821661278c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161067e565b806002600082825461279e9190613571565b90915550506001600160a01b038216600090815260208190526040812080548392906127cb908490613571565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610b9960008383612829565b600061097e8284613571565b610b8961283584610b26565b61283e84610b26565b83613152565b60006001600160e01b03821115611bcf5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b606482015260840161067e565b6000600160801b82106128cd57608091821c916128ca9082613571565b90505b6801000000000000000082106128f057604091821c916128ed9082613571565b90505b600160201b821061290e57602091821c9161290b9082613571565b90505b62010000821061292b57601091821c916129289082613571565b90505b610100821061294757600891821c916129449082613571565b90505b6010821061296257600491821c9161295f9082613571565b90505b6004821061297d57600291821c9161297a9082613571565b90505b6002821061299057610631600182613571565b919050565b60008080600019848609848602925082811083820303915050670de0b6b3a764000081106129d95760405163698d9a0160e11b81526004810182905260240161067e565b600080670de0b6b3a76400008688099150506706f05b59d3b1ffff811182612a135780670de0b6b3a7640000850401945050505050610631565b620400008285030493909111909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690201905092915050565b600160bf1b678000000000000000821615612a7b5768016a09e667f3bcc9090260401c5b674000000000000000821615612a9a576801306fe0a31b7152df0260401c5b672000000000000000821615612ab9576801172b83c7d517adce0260401c5b671000000000000000821615612ad85768010b5586cf9890f62a0260401c5b670800000000000000821615612af7576801059b0d31585743ae0260401c5b670400000000000000821615612b1657680102c9a3e778060ee70260401c5b670200000000000000821615612b355768010163da9fb33356d80260401c5b670100000000000000821615612b5457680100b1afa5abcbed610260401c5b6680000000000000821615612b725768010058c86da1c09ea20260401c5b6640000000000000821615612b90576801002c605e2e8cec500260401c5b6620000000000000821615612bae57680100162f3904051fa10260401c5b6610000000000000821615612bcc576801000b175effdc76ba0260401c5b6608000000000000821615612bea57680100058ba01fb9f96d0260401c5b6604000000000000821615612c085768010002c5cc37da94920260401c5b6602000000000000821615612c26576801000162e525ee05470260401c5b6601000000000000821615612c445768010000b17255775c040260401c5b65800000000000821615612c61576801000058b91b5bc9ae0260401c5b65400000000000821615612c7e57680100002c5c89d5ec6d0260401c5b65200000000000821615612c9b5768010000162e43f4f8310260401c5b65100000000000821615612cb857680100000b1721bcfc9a0260401c5b65080000000000821615612cd55768010000058b90cf1e6e0260401c5b65040000000000821615612cf2576801000002c5c863b73f0260401c5b65020000000000821615612d0f57680100000162e430e5a20260401c5b65010000000000821615612d2c576801000000b1721835510260401c5b648000000000821615612d4857680100000058b90c0b490260401c5b644000000000821615612d645768010000002c5c8601cc0260401c5b642000000000821615612d80576801000000162e42fff00260401c5b641000000000821615612d9c5768010000000b17217fbb0260401c5b640800000000821615612db8576801000000058b90bfce0260401c5b640400000000821615612dd457680100000002c5c85fe30260401c5b640200000000821615612df05768010000000162e42ff10260401c5b600160201b821615612e0b57680100000000b17217f80260401c5b6380000000821615612e265768010000000058b90bfc0260401c5b6340000000821615612e41576801000000002c5c85fe0260401c5b6320000000821615612e5c57680100000000162e42ff0260401c5b6310000000821615612e77576801000000000b17217f0260401c5b6308000000821615612e9257680100000000058b90c00260401c5b6304000000821615612ead5768010000000002c5c8600260401c5b6302000000821615612ec8576801000000000162e4300260401c5b6301000000821615612ee35768010000000000b172180260401c5b62800000821615612efd576801000000000058b90c0260401c5b62400000821615612f1757680100000000002c5c860260401c5b62200000821615612f315768010000000000162e430260401c5b62100000821615612f4b57680100000000000b17210260401c5b62080000821615612f655768010000000000058b910260401c5b62040000821615612f7f576801000000000002c5c80260401c5b62020000821615612f9957680100000000000162e40260401c5b62010000821615612fb3576801000000000000b1720260401c5b618000821615612fcc57680100000000000058b90260401c5b614000821615612fe55768010000000000002c5d0260401c5b612000821615612ffe576801000000000000162e0260401c5b6110008216156130175768010000000000000b170260401c5b610800821615613030576801000000000000058c0260401c5b61040082161561304957680100000000000002c60260401c5b61020082161561306257680100000000000001630260401c5b61010082161561307b57680100000000000000b10260401c5b608082161561309357680100000000000000590260401c5b60408216156130ab576801000000000000002c0260401c5b60208216156130c357680100000000000000160260401c5b60108216156130db576801000000000000000b0260401c5b60088216156130f357680100000000000000060260401c5b600482161561310b57680100000000000000030260401c5b600282161561312357680100000000000000010260401c5b600182161561313b57680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b816001600160a01b0316836001600160a01b0316141580156131745750600081115b15610b89576001600160a01b03831615613202576001600160a01b038316600090815260086020526040812081906131af9061215885612164565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516131f7929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610b89576001600160a01b038216600090815260086020526040812081906132389061281d85612164565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516108cb929190918252602082015260400190565b80356001600160a01b038116811461299057600080fd5b6000602082840312156132a957600080fd5b61097e82613280565b600060208083528351808285015260005b818110156132df578581018301518582016040015282016132c3565b818111156132f1576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561331a57600080fd5b61332383613280565b946020939093013593505050565b60008060006060848603121561334657600080fd5b61334f84613280565b925061335d60208501613280565b9150604084013590509250925092565b60006020828403121561337f57600080fd5b5035919050565b6000806040838503121561339957600080fd5b50508035926020909101359150565b6000806000606084860312156133bd57600080fd5b83359250602084013591506133d460408501613280565b90509250925092565b803560ff8116811461299057600080fd5b60008060008060008060c0878903121561340757600080fd5b61341087613280565b9550602087013594506040870135935061342c606088016133dd565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561346157600080fd5b61346a88613280565b965061347860208901613280565b95506040880135945060608801359350613494608089016133dd565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156134c357600080fd5b6134cc83613280565b91506134da60208401613280565b90509250929050565b600080604083850312156134f657600080fd5b6134ff83613280565b9150602083013563ffffffff8116811461351857600080fd5b809150509250929050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561354b57600080fd5b8151801515811461097e57600080fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156135845761358461355b565b500190565b60008282101561359b5761359b61355b565b500390565b60008160001904831182151516156135ba576135ba61355b565b500290565b6000826135dc57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156135f357600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fdfe566f746520457363726f776564204f726967696e204465466920476f7665726e616e6365a264697066735822122052e0036d25753bd4e3f0803f1b01360a091a09793150fd8dabb2ce5802dbbf7b64736f6c634300080a0033", "deployedSourceMap": "837:10871:17:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1828:48;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;548:14:19;;541:22;523:41;;511:2;496:18;1828:48:17;;;;;;;;2609:123;;;:::i;:::-;;;;;;;:::i;4433:197:1:-;;;;;;:::i;:::-;;:::i;1258:26:17:-;;;;;;;;-1:-1:-1;;;;;1614:32:19;;;1596:51;;1584:2;1569:18;1258:26:17;1436:217:19;3244:106:1;3331:12;;3244:106;;;1804:25:19;;;1792:2;1777:18;3244:106:1;1658:177:19;2965:164:17;;;;;;:::i;:::-;;:::i;5922:646::-;;;;;;:::i;:::-;;:::i;:::-;;3093:91:1;;;3175:2;2500:36:19;;2488:2;2473:18;3093:91:1;2358:184:19;2885:113:5;;;:::i;5873:234:1:-;;;;;;:::i;:::-;;:::i;2825:265:3:-;;;;;;:::i;:::-;;:::i;1369:53:17:-;;;;;;:::i;:::-;;;;;;;;;;;;;;8599:564;;;;;;:::i;:::-;;:::i;:::-;;;;3156:25:19;;;3212:2;3197:18;;3190:34;;;;3129:18;8599:564:17;2982:248:19;2218:126:3;;;;;;:::i;:::-;;:::i;5248:112::-;;;;;;:::i;:::-;;:::i;949:41:17:-;;;;;1981:149:3;;;;;;:::i;:::-;;:::i;:::-;;;3617:10:19;3605:23;;;3587:42;;3575:2;3560:18;1981:149:3;3443:192:19;3408:125:1;;;;;;:::i;:::-;-1:-1:-1;;;;;3508:18:1;3482:7;3508:18;;;;;;;;;;;;3408:125;9245:79:17;;;:::i;3745:145::-;;;;;;:::i;:::-;;:::i;4306:111::-;;;;;;:::i;:::-;;:::i;2635:126:5:-;;;;;;:::i;:::-;;:::i;3369:256:3:-;;;;;;:::i;:::-;;:::i;900:30:17:-;;;;;1428:32;;;;;;2738:94;2811:14;;;;;;;;;;;;-1:-1:-1;;;2811:14:17;;;;2738:94;;2423:209:3;;;;;;:::i;:::-;;:::i;6594:427:1:-;;;;;;:::i;:::-;;:::i;2838:121:17:-;;;;;;:::i;5437:574:3:-;;;;;;:::i;:::-;;:::i;7220:1055:17:-;;;;;;:::i;:::-;;:::i;1183:43::-;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;4937:15:19;;;4919:34;;4989:15;;;;4984:2;4969:18;;4962:43;5021:18;;;5014:34;4854:2;4839:18;1183:43:17;4664:390:19;1948:626:5;;;;;;:::i;:::-;;:::i;3976:149:1:-;;;;;;:::i;:::-;;:::i;1758:148:3:-;;;;;;:::i;:::-;;:::i;:::-;;;;6514:13:19;;6529:10;6510:30;6492:49;;6601:4;6589:17;;;6583:24;-1:-1:-1;;;;;6579:50:19;6557:20;;;6550:80;;;;6465:18;1758:148:3;6290:346:19;9525:515:17;;;;;;:::i;:::-;;:::i;1319:44::-;;;;;2609:123;2655:13;2680:45;;;;;;;;;;;;;;;;;;;2609:123;:::o;4433:197:1:-;4516:4;719:10:7;4570:32:1;719:10:7;4586:7:1;4595:6;4570:8;:32::i;:::-;4619:4;4612:11;;;4433:197;;;;;:::o;2965:164:17:-;3085:37;;-1:-1:-1;;;3085:37:17;;7073:2:19;3085:37:17;;;7055:21:19;7112:2;7092:18;;;7085:30;7151:29;7131:18;;;7124:57;3069:4:17;;7198:18:19;;3085:37:17;;;;;;;;5922:646;6007:10;5976:20;5999:19;;;:7;:19;;;;;:29;;6019:8;;5999:29;;;;;;:::i;:::-;;;;;;;;;;5976:52;;;;;;;;5999:29;;;;;;;5976:52;;-1:-1:-1;;;;;5976:52:17;;;;;;-1:-1:-1;;;5976:52:17;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5976:52:17;;;6160:15;:22;-1:-1:-1;6160:22:17;6152:69;;;;-1:-1:-1;;;6152:69:17;;7561:2:19;6152:69:17;;;7543:21:19;7600:2;7580:18;;;7573:30;7639:34;7619:18;;;7612:62;-1:-1:-1;;;7690:18:19;;;7683:32;7732:19;;6152:69:17;7359:398:19;6152:69:17;6239:8;6231:58;;;;-1:-1:-1;;;6231:58:17;;7964:2:19;6231:58:17;;;7946:21:19;8003:2;7983:18;;;7976:30;8042:34;8022:18;;;8015:62;-1:-1:-1;;;8093:18:19;;;8086:35;8138:19;;6231:58:17;7762:401:19;6231:58:17;6299:27;6315:10;6299:15;:27::i;:::-;6351:10;6343:19;;;;:7;:19;;;;;:29;;6363:8;;6343:29;;;;;;:::i;:::-;;;;;;;;;;;;;6336:36;;;;;;6429:25;6435:10;6447:6;6429:5;:25::i;:::-;6464:32;;-1:-1:-1;;;6464:32:17;;6477:10;6464:32;;;8342:51:19;8409:18;;;8402:34;;;6464:3:17;-1:-1:-1;;;;;6464:12:17;;;;8315:18:19;;6464:32:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;6511:50:17;;;8960:25:19;;;9016:2;9001:18;;8994:34;;;9044:18;;;9037:34;;;9102:2;9087:18;;9080:34;;;6519:10:17;;6511:50;;8947:3:19;8932:19;6511:50:17;;;;;;;;5966:602;;;;5922:646;:::o;2885:113:5:-;2945:7;2971:20;:18;:20::i;:::-;2964:27;;2885:113;:::o;5873:234:1:-;5961:4;719:10:7;6015:64:1;719:10:7;6031:7:1;6068:10;6040:25;719:10:7;6031:7:1;6040:9;:25::i;:::-;:38;;;;:::i;:::-;6015:8;:64::i;2825:265:3:-;2923:7;2964:12;2950:11;:26;2942:70;;;;-1:-1:-1;;;2942:70:3;;9592:2:19;2942:70:3;;;9574:21:19;9631:2;9611:18;;;9604:30;9670:33;9650:18;;;9643:61;9721:18;;2942:70:3;9390:355:19;2942:70:3;-1:-1:-1;;;;;3048:21:3;;;;;;:12;:21;;;;;3029:54;;3071:11;3029:18;:54::i;:::-;3022:61;2825:265;-1:-1:-1;;;2825:265:3:o;8599:564:17:-;8701:7;8710;8753:16;8741:8;:28;;8733:59;;;;-1:-1:-1;;;8733:59:17;;9952:2:19;8733:59:17;;;9934:21:19;9991:2;9971:18;;;9964:30;-1:-1:-1;;;10010:18:19;;;10003:48;10068:18;;8733:59:17;9750:342:19;8733:59:17;8822:9;8810:8;:21;;8802:51;;;;-1:-1:-1;;;8802:51:17;;10299:2:19;8802:51:17;;;10281:21:19;10338:2;10318:18;;;10311:30;-1:-1:-1;;;10357:18:19;;;10350:47;10414:18;;8802:51:17;10097:341:19;8802:51:17;8863:13;8897:5;8879:15;:23;:49;;8923:5;8879:49;;;8905:15;8879:49;8863:65;-1:-1:-1;8938:11:17;8952:16;8960:8;8863:65;8952:16;:::i;:::-;8938:30;-1:-1:-1;8978:18:17;9024:8;9001:11;9007:5;8938:30;9001:11;:::i;:::-;9000:20;;9016:4;9000:20;:::i;:::-;8999:33;;;;:::i;:::-;8978:54;;9042:18;9063:41;1077:5;9093:10;9063:18;:41::i;:::-;9042:62;-1:-1:-1;9146:4:17;9123:19;9042:62;9123:6;:19;:::i;:::-;9122:28;;;;:::i;:::-;9114:42;9152:3;;-1:-1:-1;8599:564:17;;-1:-1:-1;;;;;;8599:564:17:o;2218:126:3:-;-1:-1:-1;;;;;2318:19:3;;;2292:7;2318:19;;;:10;:19;;;;;;;;2218:126::o;5248:112::-;5319:34;719:10:7;5343:9:3;5319;:34::i;:::-;5248:112;:::o;1981:149::-;-1:-1:-1;;;;;2094:21:3;;2051:6;2094:21;;;:12;:21;;;;;:28;2076:47;;:17;:47::i;9245:79:17:-;9290:27;9306:10;9290:15;:27::i;:::-;9245:79::o;3745:145::-;3855:28;3862:6;3870:8;3880:2;3855:6;:28::i;:::-;3745:145;;;:::o;4306:111::-;4374:36;4381:6;4389:8;4399:10;4374:6;:36::i;:::-;4306:111;;:::o;2635:126:5:-;-1:-1:-1;;;;;2730:14:5;;2704:7;2730:14;;;:7;:14;;;;;918::8;2730:24:5;827:112:8;3369:256:3;3456:7;3497:12;3483:11;:26;3475:70;;;;-1:-1:-1;;;3475:70:3;;9592:2:19;3475:70:3;;;9574:21:19;9631:2;9611:18;;;9604:30;9670:33;9650:18;;;9643:61;9721:18;;3475:70:3;9390:355:19;3475:70:3;3562:56;3581:23;3606:11;3562:18;:56::i;2423:209::-;-1:-1:-1;;;;;2529:21:3;;2496:7;2529:21;;;:12;:21;;;;;:28;2574:8;;:51;;-1:-1:-1;;;;;2589:21:3;;;;;;:12;:21;;;;;2611:7;2617:1;2611:3;:7;:::i;:::-;2589:30;;;;;;;;:::i;:::-;;;;;;;;;;:36;-1:-1:-1;;;2589:36:3;;-1:-1:-1;;;;;2589:36:3;2574:51;;;2585:1;2574:51;-1:-1:-1;;;;;2567:58:3;;2423:209;-1:-1:-1;;;2423:209:3:o;6594:427:1:-;6687:4;719:10:7;6687:4:1;6768:25;719:10:7;6785:7:1;6768:9;:25::i;:::-;6741:52;;6831:15;6811:16;:35;;6803:85;;;;-1:-1:-1;;;6803:85:1;;11302:2:19;6803:85:1;;;11284:21:19;11341:2;11321:18;;;11314:30;11380:34;11360:18;;;11353:62;-1:-1:-1;;;11431:18:19;;;11424:35;11476:19;;6803:85:1;11100:401:19;6803:85:1;6922:60;6931:5;6938:7;6966:15;6947:16;:34;6922:8;:60::i;:::-;-1:-1:-1;7010:4:1;;6594:427;-1:-1:-1;;;;6594:427:1:o;5437:574:3:-;5656:6;5637:15;:25;;5629:67;;;;-1:-1:-1;;;5629:67:3;;11708:2:19;5629:67:3;;;11690:21:19;11747:2;11727:18;;;11720:30;11786:31;11766:18;;;11759:59;11835:18;;5629:67:3;11506:353:19;5629:67:3;5777:58;;;1447:71;5777:58;;;12095:25:19;-1:-1:-1;;;;;12156:32:19;;12136:18;;;12129:60;;;;12205:18;;;12198:34;;;12248:18;;;12241:34;;;5706:14:3;;5723:169;;5750:87;;12067:19:19;;5777:58:3;;;;;;;;;;;;5767:69;;;;;;5750:16;:87::i;:::-;5851:1;5866;5881;5723:13;:169::i;:::-;5706:186;;5919:17;5929:6;-1:-1:-1;;;;;3249:14:5;3189:15;3249:14;;;:7;:14;;;;;918::8;;1050:1;1032:19;;;;;918:14;3129:203:5;5919:17:3;5910:5;:26;5902:64;;;;-1:-1:-1;;;5902:64:3;;12488:2:19;5902:64:3;;;12470:21:19;12527:2;12507:18;;;12500:30;12566:27;12546:18;;;12539:55;12611:18;;5902:64:3;12286:349:19;5902:64:3;5976:28;5986:6;5994:9;5976;:28::i;:::-;5619:392;5437:574;;;;;;:::o;7220:1055:17:-;7340:27;7356:10;7340:15;:27::i;:::-;7408:10;7377:20;7400:19;;;:7;:19;;;;;:29;;7420:8;;7400:29;;;;;;:::i;:::-;;;;;;;;;7377:52;;;;;;;;7400:29;;;;;;;7377:52;;-1:-1:-1;;;;;7377:52:17;;;;;;-1:-1:-1;;;7377:52:17;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7377:52:17;;;;;7400:29;7600:68;7377:52;7650:8;7600:13;:68::i;:::-;7562:106;;;;7695:6;7686;:15;7678:62;;;;-1:-1:-1;;;7678:62:17;;12842:2:19;7678:62:17;;;12824:21:19;12881:2;12861:18;;;12854:30;12920:34;12900:18;;;12893:62;-1:-1:-1;;;12971:18:19;;;12964:32;13013:19;;7678:62:17;12640:398:19;7678:62:17;-1:-1:-1;;;;;7750:28:17;;:10;;;;:28;;;;7788:13;;;;:25;;;7831:10;-1:-1:-1;7823:19:17;;;:7;:19;;;;;:29;;7750:6;;7823:19;7843:8;;7823:29;;;;;;:::i;:::-;;;;;;;;;;:38;;;;;;-1:-1:-1;;;;;7823:38:17;;;-1:-1:-1;;;7823:38:17;;;;;;;:29;;;;;;;:38;;;;;;;;;;;;;7871:40;7877:10;7889:21;7901:9;7889;:21;:::i;:::-;7871:5;:40::i;:::-;7943:10;7926:28;;;;:16;:28;;;;;;;;7925:29;:68;;;;-1:-1:-1;7991:1:17;7958:21;7968:10;7958:9;:21::i;:::-;-1:-1:-1;;;;;7958:35:17;;7925:68;7921:202;;;8079:33;8089:10;8101;8079:9;:33::i;:::-;8137:59;;;8960:25:19;;;9016:2;9001:18;;8994:34;;;9044:18;;;9037:34;;;9102:2;9087:18;;9080:34;;;8145:10:17;;8137:59;;8947:3:19;8932:19;8137:59:17;;;;;;;8211:57;;;8960:25:19;;;9016:2;9001:18;;8994:34;;;9044:18;;;9037:34;;;9102:2;9087:18;;9080:34;;;8217:10:17;;8211:57;;8947:3:19;8932:19;8211:57:17;;;;;;;7281:994;;;;;;7220:1055;;:::o;1183:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1183:43:17;;;;-1:-1:-1;;;;1183:43:17;;;;;;;-1:-1:-1;1183:43:17;:::o;1948:626:5:-;2183:8;2164:15;:27;;2156:69;;;;-1:-1:-1;;;2156:69:5;;13245:2:19;2156:69:5;;;13227:21:19;13284:2;13264:18;;;13257:30;13323:31;13303:18;;;13296:59;13372:18;;2156:69:5;13043:353:19;2156:69:5;2236:18;1143:95;2296:5;2303:7;2312:5;2319:16;2329:5;-1:-1:-1;;;;;3249:14:5;3189:15;3249:14;;;:7;:14;;;;;918::8;;1050:1;1032:19;;;;;918:14;3129:203:5;2319:16;2267:79;;;;;;13688:25:19;;;;-1:-1:-1;;;;;13787:15:19;;;13767:18;;;13760:43;13839:15;;;;13819:18;;;13812:43;13871:18;;;13864:34;13914:19;;;13907:35;13958:19;;;13951:35;;;13660:19;;2267:79:5;;;;;;;;;;;;2257:90;;;;;;2236:111;;2358:12;2373:28;2390:10;2373:16;:28::i;:::-;2358:43;;2412:14;2429:28;2443:4;2449:1;2452;2455;2429:13;:28::i;:::-;2412:45;;2485:5;-1:-1:-1;;;;;2475:15:5;:6;-1:-1:-1;;;;;2475:15:5;;2467:58;;;;-1:-1:-1;;;2467:58:5;;14199:2:19;2467:58:5;;;14181:21:19;14238:2;14218:18;;;14211:30;14277:32;14257:18;;;14250:60;14327:18;;2467:58:5;13997:354:19;2467:58:5;2536:31;2545:5;2552:7;2561:5;2536:8;:31::i;:::-;2146:428;;;1948:626;;;;;;;:::o;3976:149:1:-;-1:-1:-1;;;;;4091:18:1;;;4065:7;4091:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3976:149::o;1758:148:3:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;1873:21:3;;;;;;:12;:21;;;;;:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1866:33;;;;;;;;;1873:26;;1866:33;;;;;;-1:-1:-1;;;1866:33:3;;-1:-1:-1;;;;;1866:33:3;;;;;;;;;1758:148;-1:-1:-1;;;1758:148:3:o;9525:515:17:-;9586:7;9605:14;9622:13;3331:12:1;;;3244:106;9622:13:17;9605:30;-1:-1:-1;9649:11:17;9645:95;;-1:-1:-1;9683:1:17;;9525:515;-1:-1:-1;;9525:515:17:o;9645:95::-;9749:26;9778:17;;9749:46;;9869:6;9828:13;-1:-1:-1;;;;;9828:28:17;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;;9861:4;9828:37;:::i;:::-;9827:48;;;;:::i;:::-;9805:70;;;;:::i;:::-;-1:-1:-1;;;;;9947:24:17;;9885:26;9947:24;;;:18;:24;;;;;;9805:70;;-1:-1:-1;9885:26:17;9914:57;;9805:70;9914:57;:::i;:::-;9885:86;;10029:4;10007:18;9989:15;9999:4;-1:-1:-1;;;;;3508:18:1;3482:7;3508:18;;;;;;;;;;;;3408:125;9989:15:17;:36;;;;:::i;:::-;9988:45;;;;:::i;:::-;9981:52;9525:515;-1:-1:-1;;;;;9525:515:17:o;10119:370:1:-;-1:-1:-1;;;;;10250:19:1;;10242:68;;;;-1:-1:-1;;;10242:68:1;;14747:2:19;10242:68:1;;;14729:21:19;14786:2;14766:18;;;14759:30;14825:34;14805:18;;;14798:62;-1:-1:-1;;;14876:18:19;;;14869:34;14920:19;;10242:68:1;14545:400:19;10242:68:1;-1:-1:-1;;;;;10328:21:1;;10320:68;;;;-1:-1:-1;;;10320:68:1;;15152:2:19;10320:68:1;;;15134:21:19;15191:2;15171:18;;;15164:30;15230:34;15210:18;;;15203:62;-1:-1:-1;;;15281:18:19;;;15274:32;15323:19;;10320:68:1;14950:398:19;10320:68:1;-1:-1:-1;;;;;10399:18:1;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10450:32;;1804:25:19;;;10450:32:1;;1777:18:19;10450:32:1;;;;;;;10119:370;;;:::o;10532:844:17:-;10590:14;10607:13;3331:12:1;;;3244:106;10607:13:17;10590:30;-1:-1:-1;10634:10:17;;10630:375;;10681:28;;-1:-1:-1;;;10681:28:17;;10703:4;10681:28;;;1596:51:19;10660:18:17;;10681:3;-1:-1:-1;;;;;10681:13:17;;;;1569:18:19;;10681:28:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10660:49;;10727:13;-1:-1:-1;;;;;10727:28:17;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10727:30:17;;;;;;;;-1:-1:-1;;10727:30:17;;;;;;;;;;;;:::i;:::-;;;10723:135;;;;;;;10891:28;;-1:-1:-1;;;10891:28:17;;10913:4;10891:28;;;1596:51:19;10871:17:17;;10922:10;;-1:-1:-1;;;;;10891:3:17;:13;;;;1569:18:19;;10891:28:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;;;:::i;:::-;10871:61;-1:-1:-1;10988:6:17;10968:16;10871:61;10980:4;10968:16;:::i;:::-;10967:27;;;;:::i;:::-;10946:17;;:48;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;10630:375:17;-1:-1:-1;;;;;11075:24:17;;11014:26;11075:24;;;:18;:24;;;;;;11043:17;;:56;;11075:24;11043:56;:::i;:::-;11014:85;;11109:18;11171:4;11149:18;11131:15;11141:4;-1:-1:-1;;;;;3508:18:1;3482:7;3508:18;;;;;;;;;;;;3408:125;11131:15:17;:36;;;;:::i;:::-;11130:45;;;;:::i;:::-;11212:17;;-1:-1:-1;;;;;11185:24:17;;;;;;:18;:24;;;;;:44;11109:66;-1:-1:-1;11243:15:17;11239:52;;11274:7;;;10532:844;:::o;11239:52::-;11300:30;;-1:-1:-1;;;11300:30:17;;-1:-1:-1;;;;;8360:32:19;;;11300:30:17;;;8342:51:19;8409:18;;;8402:34;;;11300:3:17;:12;;;;8315:18:19;;11300:30:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11352:4;-1:-1:-1;;;;;11345:24:17;;11358:10;11345:24;;;;1804:25:19;;1792:2;1777:18;;1658:177;11345:24:17;;;;;;;;10580:796;;;10532:844;:::o;6679:190:3:-;6763:28;6775:7;6784:6;6763:11;:28::i;:::-;6802:60;6819:23;6844:9;6855:6;6802:16;:60::i;:::-;;;6679:190;;:::o;3143:308:11:-;3196:7;3227:4;-1:-1:-1;;;;;3236:12:11;3219:29;;:66;;;;;3269:16;3252:13;:33;3219:66;3215:230;;;-1:-1:-1;3308:24:11;;3143:308::o;3215:230::-;-1:-1:-1;3633:73:11;;;3392:10;3633:73;;;;19029:25:19;;;;3404:12:11;19070:18:19;;;19063:34;3418:15:11;19113:18:19;;;19106:34;3677:13:11;19156:18:19;;;19149:34;3700:4:11;19199:19:19;;;;19192:61;;;;3633:73:11;;;;;;;;;;19001:19:19;;;;3633:73:11;;;3623:84;;;;;;2885:113:5:o;3709:1458:3:-;4830:12;;3808:7;;;4877:229;4890:4;4884:3;:10;4877:229;;;4910:11;4924:23;4937:3;4942:4;4924:12;:23::i;:::-;4910:37;;4988:11;4965:5;4971:3;4965:10;;;;;;;;:::i;:::-;;;;;;;;;;:20;;;:34;4961:135;;;5026:3;5019:10;;4961:135;;;5074:7;:3;5080:1;5074:7;:::i;:::-;5068:13;;4961:135;4896:210;4877:229;;;5123:9;;:37;;5139:5;5145:8;5152:1;5145:4;:8;:::i;:::-;5139:15;;;;;;;;:::i;:::-;;;;;;;;;;:21;-1:-1:-1;;;5139:21:3;;-1:-1:-1;;;;;5139:21:3;5123:37;;;5135:1;5123:37;-1:-1:-1;;;;;5116:44:3;;3709:1458;-1:-1:-1;;;;;3709:1458:3:o;22165:224:15:-;22223:14;22253:6;22249:134;;22284:6;;:27;;22309:1;22284:27;;;1359:4;22284:27;22275:36;;22249:134;;;22351:21;22356:15;22360:7;22365:1;22360:4;:7::i;:::-;22369:1;22356:3;:15::i;:::-;22351:4;:21::i;11533:173:17:-;-1:-1:-1;;;;;11618:27:17;;;;;;:16;:27;;;;;:34;;-1:-1:-1;;11618:34:17;11648:4;11618:34;;;11662:37;11635:9;11689;11662:15;:37::i;3045:187:13:-;3101:6;3136:16;3127:25;;;3119:76;;;;-1:-1:-1;;;3119:76:13;;15555:2:19;3119:76:13;;;15537:21:19;15594:2;15574:18;;;15567:30;15633:34;15613:18;;;15606:62;-1:-1:-1;;;15684:18:19;;;15677:36;15730:19;;3119:76:13;15353:402:19;3119:76:13;-1:-1:-1;3219:5:13;3045:187::o;4634:1154:17:-;-1:-1:-1;;;;;4753:16:17;;4745:57;;;;-1:-1:-1;;;4745:57:17;;15962:2:19;4745:57:17;;;15944:21:19;16001:2;15981:18;;;15974:30;16040;16020:18;;;16013:58;16088:18;;4745:57:17;15760:352:19;4745:57:17;-1:-1:-1;;;;;4820:27:17;;;4812:57;;;;-1:-1:-1;;;4812:57:17;;16319:2:19;4812:57:17;;;16301:21:19;16358:2;16338:18;;;16331:30;-1:-1:-1;;;16377:18:19;;;16370:47;16434:18;;4812:57:17;16117:341:19;4812:57:17;4896:1;4887:6;:10;4879:42;;;;-1:-1:-1;;;4879:42:17;;16665:2:19;4879:42:17;;;16647:21:19;16704:2;16684:18;;;16677:30;-1:-1:-1;;;16723:18:19;;;16716:49;16782:18;;4879:42:17;16463:343:19;4879:42:17;4982:14;4998:11;5013:31;5027:6;5035:8;5013:13;:31::i;:::-;4981:63;;-1:-1:-1;4981:63:17;-1:-1:-1;;;;;;5084:13:17;3331:12:1;;;3244:106;5084:13:17;5075:22;;:6;:22;:::i;:::-;:43;;5054:118;;;;-1:-1:-1;;;5054:118:17;;17013:2:19;5054:118:17;;;16995:21:19;17052:2;17032:18;;;17025:30;17091;17071:18;;;17064:58;17139:18;;5054:118:17;16811:352:19;5054:118:17;5182:19;5198:2;5182:15;:19::i;:::-;-1:-1:-1;;;;;5211:11:17;;;;;;:7;:11;;;;;;;;5241:162;;;;;;;-1:-1:-1;;;;;5241:162:17;;;;;;;;;;;;;;;;;;;;5211:202;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5211:202:17;;;;;;;;;;;;;;;;;;;;;;5423:17;5219:2;5382:6;5423:5;:17::i;:::-;5450:51;;-1:-1:-1;;;5450:51:17;;5467:10;5450:51;;;17408:34:19;5487:4:17;17458:18:19;;;17451:43;17510:18;;;17503:34;;;5450:3:17;-1:-1:-1;;;;;5450:16:17;;;;17343:18:19;;5450:51:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;5547:20:17;;;;;;:16;:20;;;;;;;;5546:21;:52;;;;-1:-1:-1;5596:1:17;5571:13;5581:2;5571:9;:13::i;:::-;-1:-1:-1;;;;;5571:27:17;;5546:52;5542:170;;;5684:17;5694:2;5698;5684:9;:17::i;:::-;-1:-1:-1;;;;;5727:54:17;;5737:11;;;;:7;:11;;;;;:18;5727:54;;5737:22;;5758:1;;5737:22;:::i;:::-;5727:54;;;8960:25:19;;;9016:2;9001:18;;8994:34;;;9044:18;;9037:34;;;9102:2;9087:18;;9080:34;;;8947:3;8932:19;5727:54:17;8729:391:19;4339:165:11;4416:7;4442:55;4464:20;:18;:20::i;:::-;4486:10;9226:57:10;;-1:-1:-1;;;9226:57:10;;;19522:27:19;19565:11;;;19558:27;;;19601:12;;;19594:28;;;9190:7:10;;19638:12:19;;9226:57:10;;;;;;;;;;;;9216:68;;;;;;9209:75;;9097:194;;;;;7452:270;7575:7;7595:17;7614:18;7636:25;7647:4;7653:1;7656;7659;7636:10;:25::i;:::-;7594:67;;;;7671:18;7683:5;7671:11;:18::i;:::-;-1:-1:-1;7706:9:10;7452:270;-1:-1:-1;;;;;7452:270:10:o;6305:285:3:-;6389:28;6401:7;6410:6;6389:11;:28::i;:::-;3331:12:1;;-1:-1:-1;;;;;;6435:29:3;6427:90;;;;-1:-1:-1;;;6427:90:3;;17750:2:19;6427:90:3;;;17732:21:19;17789:2;17769:18;;;17762:30;17828:34;17808:18;;;17801:62;-1:-1:-1;;;17879:18:19;;;17872:46;17935:19;;6427:90:3;17548:412:19;6427:90:3;6528:55;6545:23;6570:4;6576:6;6528:16;:55::i;9120:576:1:-;-1:-1:-1;;;;;9203:21:1;;9195:67;;;;-1:-1:-1;;;9195:67:1;;18167:2:19;9195:67:1;;;18149:21:19;18206:2;18186:18;;;18179:30;18245:34;18225:18;;;18218:62;-1:-1:-1;;;18296:18:19;;;18289:31;18337:19;;9195:67:1;17965:397:19;9195:67:1;-1:-1:-1;;;;;9358:18:1;;9333:22;9358:18;;;;;;;;;;;9394:24;;;;9386:71;;;;-1:-1:-1;;;9386:71:1;;18569:2:19;9386:71:1;;;18551:21:19;18608:2;18588:18;;;18581:30;18647:34;18627:18;;;18620:62;-1:-1:-1;;;18698:18:19;;;18691:32;18740:19;;9386:71:1;18367:398:19;9386:71:1;-1:-1:-1;;;;;9491:18:1;;:9;:18;;;;;;;;;;9512:23;;;9491:44;;9555:12;:22;;9529:6;;9491:9;9555:22;;9529:6;;9555:22;:::i;:::-;;;;-1:-1:-1;;9593:37:1;;1804:25:19;;;9619:1:1;;-1:-1:-1;;;;;9593:37:1;;;;;1792:2:19;1777:18;9593:37:1;;;;;;;9641:48;9661:7;9678:1;9682:6;9641:19;:48::i;9171:101:3:-;9234:7;9260:5;9264:1;9260;:5;:::i;8432:631::-;8664:12;;8602:17;;;;8698:8;;:35;;8713:5;8719:7;8725:1;8719:3;:7;:::i;:::-;8713:14;;;;;;;;:::i;:::-;;;;;;;;;;:20;-1:-1:-1;;;8713:20:3;;-1:-1:-1;;;;;8713:20:3;8698:35;;;8709:1;8698:35;-1:-1:-1;;;;;8686:47:3;;;8755:20;8758:9;8769:5;8755:2;:20;;:::i;:::-;8743:32;;8796:1;8790:3;:7;:51;;;;-1:-1:-1;8829:12:3;8801:5;8807:7;8813:1;8807:3;:7;:::i;:::-;8801:14;;;;;;;;:::i;:::-;;;;;;;;;;:24;;;:40;8790:51;8786:271;;;8880:29;8899:9;8880:18;:29::i;:::-;8857:5;8863:7;8869:1;8863:3;:7;:::i;:::-;8857:14;;;;;;;;:::i;:::-;;;;;;;;:20;;;:52;;;;;-1:-1:-1;;;;;8857:52:3;;;;;-1:-1:-1;;;;;8857:52:3;;;;;;8786:271;;;8940:5;8951:94;;;;;;;;8974:31;8992:12;8974:17;:31::i;:::-;8951:94;;;;;;9014:29;9033:9;9014:18;:29::i;:::-;-1:-1:-1;;;;;8951:94:3;;;;;;8940:106;;;;;;;-1:-1:-1;8940:106:3;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8940:106:3;;;;;;;;;;;;8786:271;8640:423;8432:631;;;;;;:::o;678:153:12:-;740:7;813:11;823:1;814:5;;;813:11;:::i;:::-;803:21;;804:5;;;803:21;:::i;19388:1397:15:-;19436:14;1359:4;19466:1;:9;19462:82;;;19498:35;;-1:-1:-1;;;19498:35:15;;;;;1804:25:19;;;1777:18;;19498:35:15;1658:177:19;19462:82:15;19699:9;19711:37;1359:4;19738:1;:9;19711:26;:37::i;:::-;1359:4;19958:9;;;;-1:-1:-1;19699:49:15;;-1:-1:-1;20033:6:15;;;;20112:10;;20108:62;;;20142:13;;19388:1397;;;:::o;20108:62::-;670:4;20360:409;20393:9;;20360:409;;1359:4;20440:5;;;20439:15;;-1:-1:-1;20539:9:15;20534:14;;20530:225;;20635:15;;;;20735:1;20729:7;;;;;20530:225;20414:1;20404:11;20360:409;;;;19553:1226;;19388:1397;;;:::o;21270:130::-;21328:14;21363:30;21388:1;21391;21363:24;:30::i;5574:556::-;5622:14;5749:6;5744:1;:11;5740:83;;5778:34;;-1:-1:-1;;;5778:34:15;;;;;1804:25:19;;;1777:18;;5778:34:15;1658:177:19;5740:83:15;1359:4;5944:2;5939:7;;;5938:17;6092:21;5938:17;6092:12;:21::i;7413:380:3:-;7497:23;7523:20;7533:9;7523;:20::i;:::-;7497:46;;7553:24;7580:20;7590:9;-1:-1:-1;;;;;3508:18:1;3482:7;3508:18;;;;;;;;;;;;3408:125;7580:20:3;-1:-1:-1;;;;;7610:21:3;;;;;;;:10;:21;;;;;;:33;;-1:-1:-1;;;;;;7610:33:3;;;;;;;;;;7659:54;;7553:47;;-1:-1:-1;7610:33:3;7659:54;;;;;;7610:21;7659:54;7724:62;7741:15;7758:9;7769:16;7724;:62::i;5716:1603:10:-;5842:7;;6766:66;6753:79;;6749:161;;;-1:-1:-1;6864:1:10;;-1:-1:-1;6868:30:10;6848:51;;6749:161;6923:1;:7;;6928:2;6923:7;;:18;;;;;6934:1;:7;;6939:2;6934:7;;6923:18;6919:100;;;-1:-1:-1;6973:1:10;;-1:-1:-1;6977:30:10;6957:51;;6919:100;7130:24;;;7113:14;7130:24;;;;;;;;;19888:25:19;;;19961:4;19949:17;;19929:18;;;19922:45;;;;19983:18;;;19976:34;;;20026:18;;;20019:34;;;7130:24:10;;19860:19:19;;7130:24:10;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7130:24:10;;-1:-1:-1;;7130:24:10;;;-1:-1:-1;;;;;;;7168:20:10;;7164:101;;7220:1;7224:29;7204:50;;;;;;;7164:101;7283:6;-1:-1:-1;7291:20:10;;-1:-1:-1;5716:1603:10;;;;;;;;:::o;548:631::-;625:20;616:5;:29;;;;;;;;:::i;:::-;;612:561;;;548:631;:::o;612:561::-;721:29;712:5;:38;;;;;;;;:::i;:::-;;708:465;;;766:34;;-1:-1:-1;;;766:34:10;;20398:2:19;766:34:10;;;20380:21:19;20437:2;20417:18;;;20410:30;20476:26;20456:18;;;20449:54;20520:18;;766:34:10;20196:348:19;708:465:10;830:35;821:5;:44;;;;;;;;:::i;:::-;;817:356;;;881:41;;-1:-1:-1;;;881:41:10;;20751:2:19;881:41:10;;;20733:21:19;20790:2;20770:18;;;20763:30;20829:33;20809:18;;;20802:61;20880:18;;881:41:10;20549:355:19;817:356:10;952:30;943:5;:39;;;;;;;;:::i;:::-;;939:234;;;998:44;;-1:-1:-1;;;998:44:10;;21111:2:19;998:44:10;;;21093:21:19;21150:2;21130:18;;;21123:30;21189:34;21169:18;;;21162:62;-1:-1:-1;;;21240:18:19;;;21233:32;21282:19;;998:44:10;20909:398:19;939:234:10;1072:30;1063:5;:39;;;;;;;;:::i;:::-;;1059:114;;;1118:44;;-1:-1:-1;;;1118:44:10;;21514:2:19;1118:44:10;;;21496:21:19;21553:2;21533:18;;;21526:30;21592:34;21572:18;;;21565:62;-1:-1:-1;;;21643:18:19;;;21636:32;21685:19;;1118:44:10;21312:398:19;8411:389:1;-1:-1:-1;;;;;8494:21:1;;8486:65;;;;-1:-1:-1;;;8486:65:1;;21917:2:19;8486:65:1;;;21899:21:19;21956:2;21936:18;;;21929:30;21995:33;21975:18;;;21968:61;22046:18;;8486:65:1;21715:355:19;8486:65:1;8638:6;8622:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;8654:18:1;;:9;:18;;;;;;;;;;:28;;8676:6;;8654:9;:28;;8676:6;;8654:28;:::i;:::-;;;;-1:-1:-1;;8697:37:1;;1804:25:19;;;-1:-1:-1;;;;;8697:37:1;;;8714:1;;8697:37;;1792:2:19;1777:18;8697:37:1;;;;;;;8745:48;8773:1;8777:7;8786:6;8745:19;:48::i;9069:96:3:-;9127:7;9153:5;9157:1;9153;:5;:::i;7002:254::-;7193:56;7210:15;7220:4;7210:9;:15::i;:::-;7227:13;7237:2;7227:9;:13::i;:::-;7242:6;7193:16;:56::i;1135:192:13:-;1192:7;-1:-1:-1;;;;;1219:26:13;;;1211:78;;;;-1:-1:-1;;;1211:78:13;;22277:2:19;1211:78:13;;;22259:21:19;22316:2;22296:18;;;22289:30;22355:34;22335:18;;;22328:62;-1:-1:-1;;;22406:18:19;;;22399:37;22453:19;;1211:78:13;22075:403:19;13747:744:14;13809:11;-1:-1:-1;;;13836:1:14;:11;13832:75;;13869:3;13863:9;;;;13886:10;;;;:::i;:::-;;;13832:75;13925:5;13920:1;:10;13916:72;;13952:2;13946:8;;;;13968:9;;;;:::i;:::-;;;13916:72;-1:-1:-1;;;14001:1:14;:10;13997:72;;14033:2;14027:8;;;;14049:9;;;;:::i;:::-;;;13997:72;14087:5;14082:1;:10;14078:72;;14114:2;14108:8;;;;14130:9;;;;:::i;:::-;;;14078:72;14168:4;14163:1;:9;14159:69;;14194:1;14188:7;;;;14209:8;;;;:::i;:::-;;;14159:69;14246:4;14241:1;:9;14237:69;;14272:1;14266:7;;;;14287:8;;;;:::i;:::-;;;14237:69;14324:4;14319:1;:9;14315:69;;14350:1;14344:7;;;;14365:8;;;;:::i;:::-;;;14315:69;14402:4;14397:1;:9;14393:92;;14466:8;14473:1;14466:8;;:::i;14393:92::-;13747:744;;;:::o;20191:1149::-;20262:14;;;-1:-1:-1;;20377:1:14;20374;20367:20;20416:1;20413;20409:9;20400:18;;20467:5;20463:2;20460:13;20452:5;20448:2;20444:14;20440:34;20431:43;;;4210:4;20498:5;:14;20494:92;;20535:40;;-1:-1:-1;;;20535:40:14;;;;;1804:25:19;;;1777:18;;20535:40:14;1658:177:19;20494:92:14;20596:17;20623:19;20701:5;20698:1;20695;20688:19;20675:32;-1:-1:-1;;20749:18:14;20735:33;;20792:10;20788:152;;20873:11;4210:4;20856:5;:13;20855:29;20846:38;;20902:13;;;;;;20788:152;21189:11;21061:21;;;21057:39;21137:20;;;;21126:32;;;-1:-1:-1;;;21122:84:14;21029:199;;;;21250:13;21004:277;20983:341;;-1:-1:-1;20191:1149:14;;;;:::o;4886:8474::-;-1:-1:-1;;;5355:18:14;5351:22;;:26;5347:110;;5416:19;5407:28;5440:2;5406:36;5347:110;5478:18;5474:22;;:26;5470:110;;5539:19;5530:28;5563:2;5529:36;5470:110;5601:18;5597:22;;:26;5593:110;;5662:19;5653:28;5686:2;5652:36;5593:110;5724:18;5720:22;;:26;5716:110;;5785:19;5776:28;5809:2;5775:36;5716:110;5847:17;5843:21;;:25;5839:109;;5907:19;5898:28;5931:2;5897:36;5839:109;5969:17;5965:21;;:25;5961:109;;6029:19;6020:28;6053:2;6019:36;5961:109;6091:17;6087:21;;:25;6083:109;;6151:19;6142:28;6175:2;6141:36;6083:109;6213:17;6209:21;;:25;6205:109;;6273:19;6264:28;6297:2;6263:36;6205:109;6335:16;6331:20;;:24;6327:108;;6394:19;6385:28;6418:2;6384:36;6327:108;6456:16;6452:20;;:24;6448:108;;6515:19;6506:28;6539:2;6505:36;6448:108;6577:16;6573:20;;:24;6569:108;;6636:19;6627:28;6660:2;6626:36;6569:108;6698:16;6694:20;;:24;6690:108;;6757:19;6748:28;6781:2;6747:36;6690:108;6819:15;6815:19;;:23;6811:107;;6877:19;6868:28;6901:2;6867:36;6811:107;6939:15;6935:19;;:23;6931:107;;6997:19;6988:28;7021:2;6987:36;6931:107;7059:15;7055:19;;:23;7051:107;;7117:19;7108:28;7141:2;7107:36;7051:107;7179:15;7175:19;;:23;7171:107;;7237:19;7228:28;7261:2;7227:36;7171:107;7299:14;7295:18;;:22;7291:106;;7356:19;7347:28;7380:2;7346:36;7291:106;7418:14;7414:18;;:22;7410:106;;7475:19;7466:28;7499:2;7465:36;7410:106;7537:14;7533:18;;:22;7529:106;;7594:19;7585:28;7618:2;7584:36;7529:106;7656:14;7652:18;;:22;7648:106;;7713:19;7704:28;7737:2;7703:36;7648:106;7775:13;7771:17;;:21;7767:105;;7831:19;7822:28;7855:2;7821:36;7767:105;7893:13;7889:17;;:21;7885:105;;7949:19;7940:28;7973:2;7939:36;7885:105;8011:13;8007:17;;:21;8003:105;;8067:19;8058:28;8091:2;8057:36;8003:105;8129:13;8125:17;;:21;8121:105;;8185:19;8176:28;8209:2;8175:36;8121:105;8247:12;8243:16;;:20;8239:104;;8302:19;8293:28;8326:2;8292:36;8239:104;8364:12;8360:16;;:20;8356:104;;8419:19;8410:28;8443:2;8409:36;8356:104;8481:12;8477:16;;:20;8473:104;;8536:19;8527:28;8560:2;8526:36;8473:104;8598:12;8594:16;;:20;8590:104;;8653:19;8644:28;8677:2;8643:36;8590:104;8715:11;8711:15;;:19;8707:103;;8769:19;8760:28;8793:2;8759:36;8707:103;8831:11;8827:15;;:19;8823:103;;8885:19;8876:28;8909:2;8875:36;8823:103;8947:11;8943:15;;:19;8939:103;;9001:19;8992:28;9025:2;8991:36;8939:103;-1:-1:-1;;;9059:15:14;;:19;9055:103;;9117:19;9108:28;9141:2;9107:36;9055:103;9179:10;9175:14;;:18;9171:102;;9232:19;9223:28;9256:2;9222:36;9171:102;9294:10;9290:14;;:18;9286:102;;9347:19;9338:28;9371:2;9337:36;9286:102;9409:10;9405:14;;:18;9401:102;;9462:19;9453:28;9486:2;9452:36;9401:102;9524:10;9520:14;;:18;9516:102;;9577:19;9568:28;9601:2;9567:36;9516:102;9639:9;9635:13;;:17;9631:101;;9691:19;9682:28;9715:2;9681:36;9631:101;9753:9;9749:13;;:17;9745:101;;9805:19;9796:28;9829:2;9795:36;9745:101;9867:9;9863:13;;:17;9859:101;;9919:19;9910:28;9943:2;9909:36;9859:101;9981:9;9977:13;;:17;9973:101;;10033:19;10024:28;10057:2;10023:36;9973:101;10095:8;10091:12;;:16;10087:100;;10146:19;10137:28;10170:2;10136:36;10087:100;10208:8;10204:12;;:16;10200:100;;10259:19;10250:28;10283:2;10249:36;10200:100;10321:8;10317:12;;:16;10313:100;;10372:19;10363:28;10396:2;10362:36;10313:100;10434:8;10430:12;;:16;10426:100;;10485:19;10476:28;10509:2;10475:36;10426:100;10547:7;10543:11;;:15;10539:99;;10597:19;10588:28;10621:2;10587:36;10539:99;10659:7;10655:11;;:15;10651:99;;10709:19;10700:28;10733:2;10699:36;10651:99;10771:7;10767:11;;:15;10763:99;;10821:19;10812:28;10845:2;10811:36;10763:99;10883:7;10879:11;;:15;10875:99;;10933:19;10924:28;10957:2;10923:36;10875:99;10995:6;10991:10;;:14;10987:98;;11044:19;11035:28;11068:2;11034:36;10987:98;11106:6;11102:10;;:14;11098:98;;11155:19;11146:28;11179:2;11145:36;11098:98;11217:6;11213:10;;:14;11209:98;;11266:19;11257:28;11290:2;11256:36;11209:98;11328:6;11324:10;;:14;11320:98;;11377:19;11368:28;11401:2;11367:36;11320:98;11439:5;11435:9;;:13;11431:97;;11487:19;11478:28;11511:2;11477:36;11431:97;11549:5;11545:9;;:13;11541:97;;11597:19;11588:28;11621:2;11587:36;11541:97;11659:5;11655:9;;:13;11651:97;;11707:19;11698:28;11731:2;11697:36;11651:97;11769:5;11765:9;;:13;11761:97;;11817:19;11808:28;11841:2;11807:36;11761:97;11879:4;11875:8;;:12;11871:96;;11926:19;11917:28;11950:2;11916:36;11871:96;11988:4;11984:8;;:12;11980:96;;12035:19;12026:28;12059:2;12025:36;11980:96;12097:4;12093:8;;:12;12089:96;;12144:19;12135:28;12168:2;12134:36;12089:96;12206:4;12202:8;;:12;12198:96;;12253:19;12244:28;12277:2;12243:36;12198:96;12315:3;12311:7;;:11;12307:95;;12361:19;12352:28;12385:2;12351:36;12307:95;12423:3;12419:7;;:11;12415:95;;12469:19;12460:28;12493:2;12459:36;12415:95;12531:3;12527:7;;:11;12523:95;;12577:19;12568:28;12601:2;12567:36;12523:95;12639:3;12635:7;;:11;12631:95;;12685:19;12676:28;12709:2;12675:36;12631:95;4210:4;13286:15;13339:2;13334:7;;;;13327:3;:15;13315:28;;4886:8474::o;7799:627:3:-;7926:3;-1:-1:-1;;;;;7919:10:3;:3;-1:-1:-1;;;;;7919:10:3;;;:24;;;;;7942:1;7933:6;:10;7919:24;7915:505;;;-1:-1:-1;;;;;7963:17:3;;;7959:221;;-1:-1:-1;;;;;8058:17:3;;8001;8058;;;:12;:17;;;;;8001;;8041:54;;8077:9;8088:6;8041:16;:54::i;:::-;8000:95;;;;8139:3;-1:-1:-1;;;;;8118:47:3;;8144:9;8155;8118:47;;;;;;3156:25:19;;;3212:2;3197:18;;3190:34;3144:2;3129:18;;2982:248;8118:47:3;;;;;;;;7982:198;;7959:221;-1:-1:-1;;;;;8198:17:3;;;8194:216;;-1:-1:-1;;;;;8293:17:3;;8236;8293;;;:12;:17;;;;;8236;;8276:49;;8312:4;8318:6;8276:16;:49::i;:::-;8235:90;;;;8369:3;-1:-1:-1;;;;;8348:47:3;;8374:9;8385;8348:47;;;;;;3156:25:19;;;3212:2;3197:18;;3190:34;3144:2;3129:18;;2982:248;14:173;82:20;;-1:-1:-1;;;;;131:31:19;;121:42;;111:70;;177:1;174;167:12;192:186;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;575:597::-;687:4;716:2;745;734:9;727:21;777:6;771:13;820:6;815:2;804:9;800:18;793:34;845:1;855:140;869:6;866:1;863:13;855:140;;;964:14;;;960:23;;954:30;930:17;;;949:2;926:26;919:66;884:10;;855:140;;;1013:6;1010:1;1007:13;1004:91;;;1083:1;1078:2;1069:6;1058:9;1054:22;1050:31;1043:42;1004:91;-1:-1:-1;1156:2:19;1135:15;-1:-1:-1;;1131:29:19;1116:45;;;;1163:2;1112:54;;575:597;-1:-1:-1;;;575:597:19:o;1177:254::-;1245:6;1253;1306:2;1294:9;1285:7;1281:23;1277:32;1274:52;;;1322:1;1319;1312:12;1274:52;1345:29;1364:9;1345:29;:::i;:::-;1335:39;1421:2;1406:18;;;;1393:32;;-1:-1:-1;;;1177:254:19:o;1840:328::-;1917:6;1925;1933;1986:2;1974:9;1965:7;1961:23;1957:32;1954:52;;;2002:1;1999;1992:12;1954:52;2025:29;2044:9;2025:29;:::i;:::-;2015:39;;2073:38;2107:2;2096:9;2092:18;2073:38;:::i;:::-;2063:48;;2158:2;2147:9;2143:18;2130:32;2120:42;;1840:328;;;;;:::o;2173:180::-;2232:6;2285:2;2273:9;2264:7;2260:23;2256:32;2253:52;;;2301:1;2298;2291:12;2253:52;-1:-1:-1;2324:23:19;;2173:180;-1:-1:-1;2173:180:19:o;2729:248::-;2797:6;2805;2858:2;2846:9;2837:7;2833:23;2829:32;2826:52;;;2874:1;2871;2864:12;2826:52;-1:-1:-1;;2897:23:19;;;2967:2;2952:18;;;2939:32;;-1:-1:-1;2729:248:19:o;3640:322::-;3717:6;3725;3733;3786:2;3774:9;3765:7;3761:23;3757:32;3754:52;;;3802:1;3799;3792:12;3754:52;3838:9;3825:23;3815:33;;3895:2;3884:9;3880:18;3867:32;3857:42;;3918:38;3952:2;3941:9;3937:18;3918:38;:::i;:::-;3908:48;;3640:322;;;;;:::o;3967:156::-;4033:20;;4093:4;4082:16;;4072:27;;4062:55;;4113:1;4110;4103:12;4128:531;4230:6;4238;4246;4254;4262;4270;4323:3;4311:9;4302:7;4298:23;4294:33;4291:53;;;4340:1;4337;4330:12;4291:53;4363:29;4382:9;4363:29;:::i;:::-;4353:39;;4439:2;4428:9;4424:18;4411:32;4401:42;;4490:2;4479:9;4475:18;4462:32;4452:42;;4513:36;4545:2;4534:9;4530:18;4513:36;:::i;:::-;4503:46;;4596:3;4585:9;4581:19;4568:33;4558:43;;4648:3;4637:9;4633:19;4620:33;4610:43;;4128:531;;;;;;;;:::o;5059:606::-;5170:6;5178;5186;5194;5202;5210;5218;5271:3;5259:9;5250:7;5246:23;5242:33;5239:53;;;5288:1;5285;5278:12;5239:53;5311:29;5330:9;5311:29;:::i;:::-;5301:39;;5359:38;5393:2;5382:9;5378:18;5359:38;:::i;:::-;5349:48;;5444:2;5433:9;5429:18;5416:32;5406:42;;5495:2;5484:9;5480:18;5467:32;5457:42;;5518:37;5550:3;5539:9;5535:19;5518:37;:::i;:::-;5508:47;;5602:3;5591:9;5587:19;5574:33;5564:43;;5654:3;5643:9;5639:19;5626:33;5616:43;;5059:606;;;;;;;;;;:::o;5670:260::-;5738:6;5746;5799:2;5787:9;5778:7;5774:23;5770:32;5767:52;;;5815:1;5812;5805:12;5767:52;5838:29;5857:9;5838:29;:::i;:::-;5828:39;;5886:38;5920:2;5909:9;5905:18;5886:38;:::i;:::-;5876:48;;5670:260;;;;;:::o;5935:350::-;6002:6;6010;6063:2;6051:9;6042:7;6038:23;6034:32;6031:52;;;6079:1;6076;6069:12;6031:52;6102:29;6121:9;6102:29;:::i;:::-;6092:39;;6181:2;6170:9;6166:18;6153:32;6225:10;6218:5;6214:22;6207:5;6204:33;6194:61;;6251:1;6248;6241:12;6194:61;6274:5;6264:15;;;5935:350;;;;;:::o;7227:127::-;7288:10;7283:3;7279:20;7276:1;7269:31;7319:4;7316:1;7309:15;7343:4;7340:1;7333:15;8447:277;8514:6;8567:2;8555:9;8546:7;8542:23;8538:32;8535:52;;;8583:1;8580;8573:12;8535:52;8615:9;8609:16;8668:5;8661:13;8654:21;8647:5;8644:32;8634:60;;8690:1;8687;8680:12;9125:127;9186:10;9181:3;9177:20;9174:1;9167:31;9217:4;9214:1;9207:15;9241:4;9238:1;9231:15;9257:128;9297:3;9328:1;9324:6;9321:1;9318:13;9315:39;;;9334:18;;:::i;:::-;-1:-1:-1;9370:9:19;;9257:128::o;10443:125::-;10483:4;10511:1;10508;10505:8;10502:34;;;10516:18;;:::i;:::-;-1:-1:-1;10553:9:19;;10443:125::o;10573:168::-;10613:7;10679:1;10675;10671:6;10667:14;10664:1;10661:21;10656:1;10649:9;10642:17;10638:45;10635:71;;;10686:18;;:::i;:::-;-1:-1:-1;10726:9:19;;10573:168::o;10878:217::-;10918:1;10944;10934:132;;10988:10;10983:3;10979:20;10976:1;10969:31;11023:4;11020:1;11013:15;11051:4;11048:1;11041:15;10934:132;-1:-1:-1;11080:9:19;;10878:217::o;14356:184::-;14426:6;14479:2;14467:9;14458:7;14454:23;14450:32;14447:52;;;14495:1;14492;14485:12;14447:52;-1:-1:-1;14518:16:19;;14356:184;-1:-1:-1;14356:184:19:o;20064:127::-;20125:10;20120:3;20116:20;20113:1;20106:31;20156:4;20153:1;20146:15;20180:4;20177:1;20170:15", "language": "Solidity", "natspec": {"author": "Daniel Von Fange", "errors": {"PRBMathUD60x18__Exp2InputTooBig(uint256)": [{"notice": "Emitted when the input is greater than 192."}], "PRBMathUD60x18__LogInputTooSmall(uint256)": [{"notice": "Emitted when the input is less than 1."}], "PRBMath__MulDivFixedPointOverflow(uint256)": [{"notice": "Emitted when the result overflows uint256."}]}, "kind": "dev", "methods": {"DOMAIN_SEPARATOR()": {"details": "See {IERC20Permit-DOMAIN_SEPARATOR}."}, "allowance(address,address)": {"details": "See {IERC20-allowance}."}, "approve(address,uint256)": {"details": "See {IERC20-approve}. NOTE: If `amount` 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}."}, "checkpoints(address,uint32)": {"details": "Get the `pos`-th checkpoint for `account`."}, "collectRewards()": {"notice": "Collect all earned OGV rewards."}, "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 value {ERC20} uses, unless this function is 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}."}, "decreaseAllowance(address,uint256)": {"details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."}, "delegate(address)": {"details": "Delegate votes from the sender to `delegatee`."}, "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": {"details": "Delegates votes from signer to `delegatee`"}, "delegates(address)": {"details": "Get the address `account` is currently delegating to."}, "extend(uint256,uint256)": {"notice": "Extend a stake lockup for additional points. The stake end time is computed from the current time + duration, just like it is for new stakes. So a new stake for seven days duration and an old stake extended with a seven days duration would have the same end. If an extend is made before the start of staking, the start time for the new stake is shifted forwards to the start of staking, which also shifts forward the end date.", "params": {"duration": "number of seconds from now to stake for", "lockupId": "the id of the old lockup to extend"}}, "getPastTotalSupply(uint256)": {"details": "Retrieve the `totalSupply` at the end of `blockNumber`. Note, this value is the sum of all balances. It is but NOT the sum of all the delegated votes! Requirements: - `blockNumber` must have been already mined"}, "getPastVotes(address,uint256)": {"details": "Retrieve the number of votes for `account` at the end of `blockNumber`. Requirements: - `blockNumber` must have been already mined"}, "getVotes(address)": {"details": "Gets the current votes balance for `account`"}, "increaseAllowance(address,uint256)": {"details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."}, "name()": {"details": "Returns the name of the token."}, "nonces(address)": {"details": "See {IERC20Permit-nonces}."}, "numCheckpoints(address)": {"details": "Get number of checkpoints for `account`."}, "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": {"details": "See {IERC20Permit-permit}."}, "previewPoints(uint256,uint256)": {"notice": "Preview the number of points that would be returned for the given amount and duration.", "params": {"amount": "OGV to be staked", "duration": "number of seconds to stake for"}, "returns": {"_0": "points staking points that would be returned", "_1": "end staking period end date"}}, "previewRewards(address)": {"notice": "Shows the amount of OGV a user would receive if they collected rewards at this time.", "params": {"user": "to preview rewards for"}, "returns": {"_0": "OGV rewards amount"}}, "stake(uint256,uint256)": {"notice": "Stake OGV If staking before the start of staking (epoch), then the lockup start and end dates are shifted forward so that the lockup starts at the epoch. Any rewards previously earned will be paid out.Stake OGV for myself.", "params": {"amount": "OGV to lockup in the stake", "duration": "in seconds for the stake"}}, "stake(uint256,uint256,address)": {"notice": "Stake OGV to an address that may not be the same as the sender of the funds. This can be used to give staked funds to someone else. If staking before the start of staking (epoch), then the lockup start and end dates are shifted forward so that the lockup starts at the epoch. Any rewards previously earned will be paid out.", "params": {"amount": "OGV to lockup in the stake", "duration": "in seconds for the stake", "to": "address to receive ownership of the stake"}}, "symbol()": {"details": "Returns the symbol of the token, usually a shorter version of the name."}, "totalSupply()": {"details": "See {IERC20-totalSupply}."}, "unstake(uint256)": {"notice": "Collect staked OGV for a lockup and any earned rewards.", "params": {"lockupId": "the id of the lockup to unstake"}}}, "notice": "Provides staking, vote power history, vote delegation, and rewards distribution. The balance received for staking (and thus the voting power and rewards distribution) goes up exponentially by the end of the staked period.", "title": "OGV Staking", "version": 1}, "offset": [837, 11708], "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x227 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70BB45B3 GT PUSH2 0x130 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x560 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0xF1127ED8 EQ PUSH2 0x586 JUMPI DUP1 PUSH4 0xF166E920 EQ PUSH2 0x5C3 JUMPI DUP1 PUSH4 0xF7240D2F EQ PUSH2 0x5D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x4E0 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x4F3 JUMPI DUP1 PUSH4 0xC3CDA520 EQ PUSH2 0x501 JUMPI DUP1 PUSH4 0xC89258DB EQ PUSH2 0x514 JUMPI DUP1 PUSH4 0xC93D0B1E EQ PUSH2 0x527 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8E539E8C GT PUSH2 0xFF JUMPI DUP1 PUSH4 0x8E539E8C EQ PUSH2 0x469 JUMPI DUP1 PUSH4 0x900CF0CF EQ PUSH2 0x47C JUMPI DUP1 PUSH4 0x939D6237 EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x4AC JUMPI DUP1 PUSH4 0x9AB24EB0 EQ PUSH2 0x4CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x70BB45B3 EQ PUSH2 0x428 JUMPI DUP1 PUSH4 0x7628A37D EQ PUSH2 0x430 JUMPI DUP1 PUSH4 0x7B0472F0 EQ PUSH2 0x443 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x456 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x39509351 GT PUSH2 0x1B3 JUMPI DUP1 PUSH4 0x587CDE1E GT PUSH2 0x182 JUMPI DUP1 PUSH4 0x587CDE1E EQ PUSH2 0x38A JUMPI DUP1 PUSH4 0x5C19A95C EQ PUSH2 0x39D JUMPI DUP1 PUSH4 0x5FEC5C64 EQ PUSH2 0x3B0 JUMPI DUP1 PUSH4 0x6FCFFF45 EQ PUSH2 0x3D7 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x39509351 EQ PUSH2 0x31C JUMPI DUP1 PUSH4 0x3A46B1A8 EQ PUSH2 0x32F JUMPI DUP1 PUSH4 0x4423BF57 EQ PUSH2 0x342 JUMPI DUP1 PUSH4 0x4FD0E648 EQ PUSH2 0x362 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0x1FA JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2CB JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2DD JUMPI DUP1 PUSH4 0x2E17DE78 EQ PUSH2 0x2F0 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x314 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x348DBF1 EQ PUSH2 0x22C JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x264 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x279 JUMPI DUP1 PUSH4 0x142561CF EQ PUSH2 0x28C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x24F PUSH2 0x23A CALLDATASIZE PUSH1 0x4 PUSH2 0x3297 JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x26C PUSH2 0x5FD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x25B SWAP2 SWAP1 PUSH2 0x32B2 JUMP JUMPDEST PUSH2 0x24F PUSH2 0x287 CALLDATASIZE PUSH1 0x4 PUSH2 0x3307 JUMP JUMPDEST PUSH2 0x61D JUMP JUMPDEST PUSH2 0x2B3 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x24F PUSH2 0x2EB CALLDATASIZE PUSH1 0x4 PUSH2 0x3331 JUMP JUMPDEST PUSH2 0x637 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x2FE CALLDATASIZE PUSH1 0x4 PUSH2 0x336D JUMP JUMPDEST PUSH2 0x687 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x12 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2CF PUSH2 0x8DA JUMP JUMPDEST PUSH2 0x24F PUSH2 0x32A CALLDATASIZE PUSH1 0x4 PUSH2 0x3307 JUMP JUMPDEST PUSH2 0x8E9 JUMP JUMPDEST PUSH2 0x2CF PUSH2 0x33D CALLDATASIZE PUSH1 0x4 PUSH2 0x3307 JUMP JUMPDEST PUSH2 0x90B JUMP JUMPDEST PUSH2 0x2CF PUSH2 0x350 CALLDATASIZE PUSH1 0x4 PUSH2 0x3297 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x375 PUSH2 0x370 CALLDATASIZE PUSH1 0x4 PUSH2 0x3386 JUMP JUMPDEST PUSH2 0x985 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2B3 PUSH2 0x398 CALLDATASIZE PUSH1 0x4 PUSH2 0x3297 JUMP JUMPDEST PUSH2 0xB26 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x3AB CALLDATASIZE PUSH1 0x4 PUSH2 0x3297 JUMP JUMPDEST PUSH2 0xB44 JUMP JUMPDEST PUSH2 0x2CF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x3EA PUSH2 0x3E5 CALLDATASIZE PUSH1 0x4 PUSH2 0x3297 JUMP JUMPDEST PUSH2 0xB51 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2CF PUSH2 0x40D CALLDATASIZE PUSH1 0x4 PUSH2 0x3297 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x303 PUSH2 0xB73 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x43E CALLDATASIZE PUSH1 0x4 PUSH2 0x33A8 JUMP JUMPDEST PUSH2 0xB7E JUMP JUMPDEST PUSH2 0x303 PUSH2 0x451 CALLDATASIZE PUSH1 0x4 PUSH2 0x3386 JUMP JUMPDEST PUSH2 0xB8E JUMP JUMPDEST PUSH2 0x2CF PUSH2 0x464 CALLDATASIZE PUSH1 0x4 PUSH2 0x3297 JUMP JUMPDEST PUSH2 0xB9D JUMP JUMPDEST PUSH2 0x2CF PUSH2 0x477 CALLDATASIZE PUSH1 0x4 PUSH2 0x336D JUMP JUMPDEST PUSH2 0xBBB JUMP JUMPDEST PUSH2 0x2CF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x2CF PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH5 0x3B32A7A3AB PUSH1 0xD9 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x26C JUMP JUMPDEST PUSH2 0x2CF PUSH2 0x4DB CALLDATASIZE PUSH1 0x4 PUSH2 0x3297 JUMP JUMPDEST PUSH2 0xC17 JUMP JUMPDEST PUSH2 0x24F PUSH2 0x4EE CALLDATASIZE PUSH1 0x4 PUSH2 0x3307 JUMP JUMPDEST PUSH2 0xC9D JUMP JUMPDEST PUSH2 0x24F PUSH2 0x2EB CALLDATASIZE PUSH1 0x4 PUSH2 0x3307 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x50F CALLDATASIZE PUSH1 0x4 PUSH2 0x33EE JUMP JUMPDEST PUSH2 0xD23 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x522 CALLDATASIZE PUSH1 0x4 PUSH2 0x3386 JUMP JUMPDEST PUSH2 0xE77 JUMP JUMPDEST PUSH2 0x53A PUSH2 0x535 CALLDATASIZE PUSH1 0x4 PUSH2 0x3307 JUMP JUMPDEST PUSH2 0x10C6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP4 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x303 PUSH2 0x56E CALLDATASIZE PUSH1 0x4 PUSH2 0x3446 JUMP JUMPDEST PUSH2 0x1117 JUMP JUMPDEST PUSH2 0x2CF PUSH2 0x581 CALLDATASIZE PUSH1 0x4 PUSH2 0x34B0 JUMP JUMPDEST PUSH2 0x1299 JUMP JUMPDEST PUSH2 0x599 PUSH2 0x594 CALLDATASIZE PUSH1 0x4 PUSH2 0x34E3 JUMP JUMPDEST PUSH2 0x12C4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 MLOAD PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2CF PUSH2 0x5D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x3297 JUMP JUMPDEST PUSH2 0x1347 JUMP JUMPDEST PUSH2 0x2B3 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3611 PUSH1 0x24 SWAP2 CODECOPY SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x62B DUP2 DUP6 DUP6 PUSH2 0x147C JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5374616B696E673A205472616E73666572732064697361626C65640000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP1 DUP2 LT PUSH2 0x6A8 JUMPI PUSH2 0x6A8 PUSH2 0x3523 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP3 AND DUP1 DUP7 MSTORE PUSH1 0x1 PUSH1 0x80 SHL SWAP1 SWAP3 DIV AND SWAP5 DUP5 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE SWAP2 SWAP4 POP SWAP1 SWAP2 SWAP1 TIMESTAMP DUP3 GT ISZERO PUSH2 0x751 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5374616B696E673A20456E64206F66206C6F636B7570206E6F74207265616368 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x1959 PUSH1 0xF2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST DUP2 PUSH2 0x7AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5374616B696E673A20416C726561647920756E7374616B65642074686973206C PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6F636B757 PUSH1 0xDC SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST PUSH2 0x7B5 CALLER PUSH2 0x15A0 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP7 SWAP1 DUP2 LT PUSH2 0x7D6 JUMPI PUSH2 0x7D6 PUSH2 0x3523 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 KECCAK256 PUSH1 0x2 SWAP1 SWAP2 MUL ADD DUP2 DUP2 SSTORE PUSH1 0x1 ADD SSTORE PUSH2 0x7F6 CALLER DUP3 PUSH2 0x18FD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP5 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x863 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x887 SWAP2 SWAP1 PUSH2 0x3539 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP7 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE CALLER SWAP1 PUSH32 0x5B744E3E9358BC00BA3CC0C6606A4D6536134DBA00B2D2EE4B5DE169ACD6427 SWAP1 PUSH1 0x80 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8E4 PUSH2 0x191B JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x62B DUP2 DUP6 DUP6 PUSH2 0x8FC DUP4 DUP4 PUSH2 0x1299 JUMP JUMPDEST PUSH2 0x906 SWAP2 SWAP1 PUSH2 0x3571 JUMP JUMPDEST PUSH2 0x147C JUMP JUMPDEST PUSH1 0x0 NUMBER DUP3 LT PUSH2 0x95C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230566F7465733A20626C6F636B206E6F7420796574206D696E656400 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x97E SWAP1 DUP4 PUSH2 0x1A42 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 DUP4 LT ISZERO PUSH2 0x9ED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x14DD185ADA5B99CE88151BDBC81CDA1BDC9D PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH4 0x7861F80 DUP4 GT ISZERO PUSH2 0xA35 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x5374616B696E673A20546F6F206C6F6E67 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 TIMESTAMP GT PUSH2 0xA84 JUMPI PUSH32 0x0 PUSH2 0xA86 JUMP JUMPDEST TIMESTAMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA94 DUP6 DUP4 PUSH2 0x3571 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH4 0x1E13380 PUSH2 0xAC7 PUSH32 0x0 DUP5 PUSH2 0x3589 JUMP JUMPDEST PUSH2 0xAD9 SWAP1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x35A0 JUMP JUMPDEST PUSH2 0xAE3 SWAP2 SWAP1 PUSH2 0x35BF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xAF9 PUSH8 0x18FAE27693B40000 DUP4 PUSH2 0x1AFE JUMP JUMPDEST SWAP1 POP PUSH8 0xDE0B6B3A7640000 PUSH2 0xB0E DUP3 DUP11 PUSH2 0x35A0 JUMP JUMPDEST PUSH2 0xB18 SWAP2 SWAP1 PUSH2 0x35BF JUMP JUMPDEST SWAP9 SWAP3 SWAP8 POP SWAP2 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH2 0xB4E CALLER DUP3 PUSH2 0x1B3D JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x631 SWAP1 PUSH2 0x1B6A JUMP JUMPDEST PUSH2 0xB7C CALLER PUSH2 0x15A0 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0xB89 DUP4 DUP4 DUP4 PUSH2 0x1BD3 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xB99 DUP3 DUP3 CALLER PUSH2 0x1BD3 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x631 JUMP JUMPDEST PUSH1 0x0 NUMBER DUP3 LT PUSH2 0xC0C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230566F7465733A20626C6F636B206E6F7420796574206D696E656400 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH2 0x631 PUSH1 0x9 DUP4 PUSH2 0x1A42 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0xC8A JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0xC59 PUSH1 0x1 DUP4 PUSH2 0x3589 JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0xC69 JUMPI PUSH2 0xC69 PUSH2 0x3523 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH2 0xC8D JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER DUP2 PUSH2 0xCAB DUP3 DUP7 PUSH2 0x1299 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0xD0B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST PUSH2 0xD18 DUP3 DUP7 DUP7 DUP5 SUB PUSH2 0x147C JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0xD73 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230566F7465733A207369676E61747572652065787069726564000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE48329057BFD03D55E49B547132E39CFFD9C1820AD7B9D4C5307691425D15ADF PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0xDED SWAP1 PUSH2 0xDE5 SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH2 0x1F03 JUMP JUMPDEST DUP6 DUP6 DUP6 PUSH2 0x1F51 JUMP JUMPDEST SWAP1 POP PUSH2 0xE16 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE SWAP1 JUMP JUMPDEST DUP7 EQ PUSH2 0xE64 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230566F7465733A20696E76616C6964206E6F6E636500000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH2 0xE6E DUP2 DUP9 PUSH2 0x1B3D JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xE80 CALLER PUSH2 0x15A0 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP1 DUP2 LT PUSH2 0xEA1 JUMPI PUSH2 0xEA1 PUSH2 0x3523 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x2 SWAP1 SWAP5 MUL SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP3 AND DUP1 DUP8 MSTORE PUSH1 0x1 PUSH1 0x80 SHL SWAP1 SWAP3 DIV AND SWAP4 DUP6 ADD DUP5 SWAP1 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD SWAP2 DUP5 ADD DUP3 SWAP1 MSTORE SWAP3 SWAP5 POP SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP1 PUSH2 0xEFB DUP6 DUP9 PUSH2 0x985 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP4 DUP2 GT PUSH2 0xF59 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5374616B696E673A204E6577206C6F636B7570206D757374206265206C6F6E67 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x32B9 PUSH1 0xF1 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND PUSH1 0x20 DUP1 DUP9 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 DUP9 ADD DUP5 SWAP1 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 KECCAK256 DUP1 SLOAD DUP8 SWAP2 SWAP1 DUP11 SWAP1 DUP2 LT PUSH2 0xF96 JUMPI PUSH2 0xF96 PUSH2 0x3523 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD SWAP3 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x80 SHL MUL SWAP4 AND SWAP3 SWAP1 SWAP3 OR PUSH1 0x2 SWAP1 SWAP2 MUL SWAP1 SWAP2 ADD SWAP1 DUP2 SSTORE PUSH1 0x40 SWAP1 SWAP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE PUSH2 0xFE8 CALLER PUSH2 0xFE3 DUP6 DUP6 PUSH2 0x3589 JUMP JUMPDEST PUSH2 0x1F79 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1019 JUMPI POP PUSH1 0x0 PUSH2 0x100E CALLER PUSH2 0xB26 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST ISZERO PUSH2 0x1028 JUMPI PUSH2 0x1028 CALLER CALLER PUSH2 0x1B3D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP10 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE SWAP1 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP5 SWAP1 MSTORE CALLER SWAP1 PUSH32 0x5B744E3E9358BC00BA3CC0C6606A4D6536134DBA00B2D2EE4B5DE169ACD6427 SWAP1 PUSH1 0x80 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD DUP10 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE SWAP1 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE CALLER SWAP1 PUSH32 0x2720EFA4B2DD4F3F8A347DA3CBD290A522E9432DA9072C5B8E6300496FDDE282 SWAP1 PUSH1 0x80 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x10E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 PUSH1 0x2 SWAP1 SWAP2 MUL ADD DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP4 AND SWAP5 POP PUSH1 0x1 PUSH1 0x80 SHL SWAP1 SWAP3 DIV SWAP1 SWAP2 AND SWAP2 POP DUP4 JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x1167 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A206578706972656420646561646C696E65000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x0 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP9 DUP9 DUP9 PUSH2 0x11B4 DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP1 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x120F DUP3 PUSH2 0x1F03 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x121F DUP3 DUP8 DUP8 DUP8 PUSH2 0x1F51 JUMP JUMPDEST SWAP1 POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1282 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A20696E76616C6964207369676E61747572650000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH2 0x128D DUP11 DUP11 DUP11 PUSH2 0x147C JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH4 0xFFFFFFFF DUP5 AND SWAP1 DUP2 LT PUSH2 0x1308 JUMPI PUSH2 0x1308 PUSH2 0x3523 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE SWAP2 ADD SLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1353 PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1363 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC SLOAD SWAP1 POP DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE0D801DD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13C9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13ED SWAP2 SWAP1 PUSH2 0x35E1 JUMP JUMPDEST PUSH2 0x13FC SWAP1 PUSH5 0xE8D4A51000 PUSH2 0x35A0 JUMP JUMPDEST PUSH2 0x1406 SWAP2 SWAP1 PUSH2 0x35BF JUMP JUMPDEST PUSH2 0x1410 SWAP1 DUP3 PUSH2 0x3571 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x1437 SWAP1 DUP4 PUSH2 0x3589 JUMP JUMPDEST SWAP1 POP PUSH5 0xE8D4A51000 DUP2 PUSH2 0x145F DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1469 SWAP2 SWAP1 PUSH2 0x35A0 JUMP JUMPDEST PUSH2 0x1473 SWAP2 SWAP1 PUSH2 0x35BF JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x14DE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x153F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15AB PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x1793 JUMPI PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x161A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x163E SWAP2 SWAP1 PUSH2 0x35E1 JUMP JUMPDEST SWAP1 POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70BB45B3 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x16BC JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x16B9 SWAP2 DUP2 ADD SWAP1 PUSH2 0x35E1 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x16C5 JUMPI PUSH2 0x16C7 JUMP JUMPDEST POP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1730 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1754 SWAP2 SWAP1 PUSH2 0x35E1 JUMP JUMPDEST PUSH2 0x175E SWAP2 SWAP1 PUSH2 0x3589 JUMP JUMPDEST SWAP1 POP DUP3 PUSH2 0x1770 DUP3 PUSH5 0xE8D4A51000 PUSH2 0x35A0 JUMP JUMPDEST PUSH2 0x177A SWAP2 SWAP1 PUSH2 0x35BF JUMP JUMPDEST PUSH1 0xC PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x178B SWAP2 SWAP1 PUSH2 0x3571 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xC SLOAD PUSH2 0x17B9 SWAP2 SWAP1 PUSH2 0x3589 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH5 0xE8D4A51000 DUP3 PUSH2 0x17E3 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x17ED SWAP2 SWAP1 PUSH2 0x35A0 JUMP JUMPDEST PUSH2 0x17F7 SWAP2 SWAP1 PUSH2 0x35BF JUMP JUMPDEST PUSH1 0xC SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE SWAP1 POP DUP1 PUSH2 0x1820 JUMPI POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x188F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18B3 SWAP2 SWAP1 PUSH2 0x3539 JUMP JUMPDEST POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x619CAAFABDD75649B302BA8419E48CCCF64F37F1983AC4727CFB38B57703FFC9 DUP3 PUSH1 0x40 MLOAD PUSH2 0x18EF SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP JUMP JUMPDEST PUSH2 0x1907 DUP3 DUP3 PUSH2 0x2003 JUMP JUMPDEST PUSH2 0x1915 PUSH1 0x9 PUSH2 0x2158 DUP4 PUSH2 0x2164 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ DUP1 ISZERO PUSH2 0x1974 JUMPI POP PUSH32 0x0 CHAINID EQ JUMPDEST ISZERO PUSH2 0x199E JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH32 0x0 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x0 DUP3 DUP5 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP4 ADD MSTORE CHAINID PUSH1 0x80 DUP4 ADD MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1AA6 JUMPI PUSH1 0x0 PUSH2 0x1A5D DUP3 DUP5 PUSH2 0x22DB JUMP JUMPDEST SWAP1 POP DUP5 DUP7 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1A72 JUMPI PUSH2 0x1A72 PUSH2 0x3523 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x1A92 JUMPI DUP1 SWAP3 POP PUSH2 0x1AA0 JUMP JUMPDEST PUSH2 0x1A9D DUP2 PUSH1 0x1 PUSH2 0x3571 JUMP JUMPDEST SWAP2 POP JUMPDEST POP PUSH2 0x1A49 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x1AE9 JUMPI DUP5 PUSH2 0x1AB8 PUSH1 0x1 DUP5 PUSH2 0x3589 JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0x1AC8 JUMPI PUSH2 0x1AC8 PUSH2 0x3523 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH2 0x1AEC JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1B23 JUMPI DUP2 ISZERO PUSH2 0x1B12 JUMPI PUSH1 0x0 PUSH2 0x1B1C JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 JUMPDEST SWAP1 POP PUSH2 0x631 JUMP JUMPDEST PUSH2 0x97E PUSH2 0x1B38 PUSH2 0x1B32 DUP6 PUSH2 0x22F6 JUMP JUMPDEST DUP5 PUSH2 0x23A6 JUMP JUMPDEST PUSH2 0x23B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0xB99 DUP3 DUP3 PUSH2 0x23F8 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 GT ISZERO PUSH2 0x1BCF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2033 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x322062697473 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1C29 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5374616B696E673A20546F20746865207A65726F206164647265737300000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 GT ISZERO PUSH2 0x1C74 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0xA6E8C2D6D2DCCE7440A8DEDE40DAEAC6D PUSH1 0x7B SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x0 DUP4 GT PUSH2 0x1CBA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0xA6E8C2D6D2DCCE74409CDEE840CADCDEEACED PUSH1 0x6B SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1CC7 DUP6 DUP6 PUSH2 0x985 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB PUSH2 0x1CDD PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1CE7 SWAP1 DUP5 PUSH2 0x3571 JUMP JUMPDEST GT ISZERO PUSH2 0x1D35 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5374616B696E673A204D617820706F696E747320657863656564656400000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH2 0x1D3E DUP4 PUSH2 0x15A0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH1 0x60 DUP2 ADD DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP12 AND DUP3 MSTORE DUP7 DUP2 AND DUP3 DUP7 ADD SWAP1 DUP2 MSTORE SWAP4 DUP3 ADD DUP9 DUP2 MSTORE DUP4 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP7 SSTORE SWAP5 DUP9 MSTORE SWAP6 SWAP1 SWAP7 KECCAK256 SWAP2 MLOAD SWAP4 MLOAD DUP2 AND PUSH1 0x1 PUSH1 0x80 SHL MUL SWAP4 AND SWAP3 SWAP1 SWAP3 OR PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP2 ADD SWAP2 DUP3 SSTORE SWAP2 MLOAD SWAP2 ADD SSTORE PUSH2 0x1DB9 DUP4 DUP4 PUSH2 0x1F79 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1E2C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E50 SWAP2 SWAP1 PUSH2 0x3539 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1E8B JUMPI POP PUSH1 0x0 PUSH2 0x1E80 DUP5 PUSH2 0xB26 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST ISZERO PUSH2 0x1E9A JUMPI PUSH2 0x1E9A DUP4 DUP5 PUSH2 0x1B3D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH32 0x2720EFA4B2DD4F3F8A347DA3CBD290A522E9432DA9072C5B8E6300496FDDE282 SWAP1 PUSH2 0x1EE1 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x3589 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP10 SWAP1 MSTORE DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x80 ADD PUSH2 0x8CB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x631 PUSH2 0x1F10 PUSH2 0x191B JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH2 0x1901 PUSH1 0xF0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x22 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x42 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x62 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1F62 DUP8 DUP8 DUP8 DUP8 PUSH2 0x248E JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x1F6F DUP2 PUSH2 0x257B JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1F83 DUP3 DUP3 PUSH2 0x2736 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB LT ISZERO PUSH2 0x1FF5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x30 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230566F7465733A20746F74616C20737570706C79207269736B73206F PUSH1 0x44 DUP3 ADD MSTORE PUSH16 0x766572666C6F77696E6720766F746573 PUSH1 0x80 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST PUSH2 0x1915 PUSH1 0x9 PUSH2 0x281D DUP4 PUSH2 0x2164 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2063 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E2066726F6D20746865207A65726F20616464726573 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x73 PUSH1 0xF8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x20D7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E20616D6F756E7420657863656564732062616C616E PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x6365 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP4 DUP4 SUB SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x2106 SWAP1 DUP5 SWAP1 PUSH2 0x3589 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0xB89 DUP4 PUSH1 0x0 DUP5 PUSH2 0x2829 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x97E DUP3 DUP5 PUSH2 0x3589 JUMP JUMPDEST DUP3 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP1 ISZERO PUSH2 0x21AE JUMPI DUP6 PUSH2 0x217D PUSH1 0x1 DUP4 PUSH2 0x3589 JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0x218D JUMPI PUSH2 0x218D PUSH2 0x3523 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH2 0x21B1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP3 POP PUSH2 0x21CA DUP4 DUP6 DUP8 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH2 0x2208 JUMPI POP NUMBER DUP7 PUSH2 0x21E4 PUSH1 0x1 DUP5 PUSH2 0x3589 JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0x21F4 JUMPI PUSH2 0x21F4 PUSH2 0x3523 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH4 0xFFFFFFFF AND EQ JUMPDEST ISZERO PUSH2 0x2268 JUMPI PUSH2 0x2216 DUP3 PUSH2 0x2844 JUMP JUMPDEST DUP7 PUSH2 0x2222 PUSH1 0x1 DUP5 PUSH2 0x3589 JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0x2232 JUMPI PUSH2 0x2232 PUSH2 0x3523 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 ADD PUSH1 0x4 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND MUL OR SWAP1 SSTORE POP PUSH2 0x22D2 JUMP JUMPDEST DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x227D NUMBER PUSH2 0x1B6A JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2291 DUP6 PUSH2 0x2844 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP1 DUP2 AND SWAP1 SWAP2 MSTORE DUP3 SLOAD PUSH1 0x1 DUP2 ADD DUP5 SSTORE PUSH1 0x0 SWAP4 DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 SWAP1 KECCAK256 DUP4 MLOAD SWAP5 SWAP1 SWAP4 ADD MLOAD SWAP1 SWAP2 AND PUSH1 0x1 PUSH1 0x20 SHL MUL PUSH4 0xFFFFFFFF SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP2 ADD SSTORE JUMPDEST POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22EA PUSH1 0x2 DUP5 DUP5 XOR PUSH2 0x35BF JUMP JUMPDEST PUSH2 0x97E SWAP1 DUP5 DUP5 AND PUSH2 0x3571 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 DUP3 LT ISZERO PUSH2 0x2324 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36214137 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2339 PUSH8 0xDE0B6B3A7640000 DUP5 DIV PUSH2 0x28AD JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP1 DUP3 MUL SWAP4 POP SWAP1 SWAP2 POP DUP4 DUP3 SHR SWAP1 DUP2 EQ ISZERO PUSH2 0x235C JUMPI POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 JUMPDEST DUP1 ISZERO PUSH2 0x239E JUMPI PUSH8 0xDE0B6B3A7640000 DUP3 DUP1 MUL DIV SWAP2 POP PUSH8 0x1BC16D674EC80000 DUP3 LT PUSH2 0x2396 JUMPI SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SWAP2 SWAP1 SWAP2 SHR SWAP1 JUMPDEST PUSH1 0x1 SHR PUSH2 0x2366 JUMP JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x97E DUP4 DUP4 PUSH2 0x2995 JUMP JUMPDEST PUSH1 0x0 PUSH9 0xA688906BD8B000000 DUP3 LT PUSH2 0x23E0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A4F26F1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x67E JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 PUSH1 0x40 DUP4 SWAP1 SHL DIV PUSH2 0x97E DUP2 PUSH2 0x2A57 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2403 DUP4 PUSH2 0xB26 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2426 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP10 DUP7 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP5 SWAP6 POP SWAP4 SWAP3 DUP7 AND SWAP3 PUSH32 0x3134E8A2E6D97E929A7E54011EA5485D7D196DD5F0BA4D4EF95803E8E3FC257F SWAP2 SWAP1 LOG4 PUSH2 0x1915 DUP3 DUP5 DUP4 PUSH2 0x3152 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP4 GT ISZERO PUSH2 0x24C5 JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x3 PUSH2 0x2572 JUMP JUMPDEST DUP5 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0x24DD JUMPI POP DUP5 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0x24EE JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x4 PUSH2 0x2572 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2542 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x256B JUMPI PUSH1 0x0 PUSH1 0x1 SWAP3 POP SWAP3 POP POP PUSH2 0x2572 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x258F JUMPI PUSH2 0x258F PUSH2 0x35FA JUMP JUMPDEST EQ ISZERO PUSH2 0x2598 JUMPI POP JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x25AC JUMPI PUSH2 0x25AC PUSH2 0x35FA JUMP JUMPDEST EQ ISZERO PUSH2 0x25FA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x260E JUMPI PUSH2 0x260E PUSH2 0x35FA JUMP JUMPDEST EQ ISZERO PUSH2 0x265C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x2670 JUMPI PUSH2 0x2670 PUSH2 0x35FA JUMP JUMPDEST EQ ISZERO PUSH2 0x26C9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x4 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x26DD JUMPI PUSH2 0x26DD PUSH2 0x35FA JUMP JUMPDEST EQ ISZERO PUSH2 0xB4E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202776272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x278C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST DUP1 PUSH1 0x2 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x279E SWAP2 SWAP1 PUSH2 0x3571 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x27CB SWAP1 DUP5 SWAP1 PUSH2 0x3571 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0xB99 PUSH1 0x0 DUP4 DUP4 PUSH2 0x2829 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x97E DUP3 DUP5 PUSH2 0x3571 JUMP JUMPDEST PUSH2 0xB89 PUSH2 0x2835 DUP5 PUSH2 0xB26 JUMP JUMPDEST PUSH2 0x283E DUP5 PUSH2 0xB26 JUMP JUMPDEST DUP4 PUSH2 0x3152 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP3 GT ISZERO PUSH2 0x1BCF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2032 PUSH1 0x44 DUP3 ADD MSTORE PUSH7 0x32342062697473 PUSH1 0xC8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x80 SHL DUP3 LT PUSH2 0x28CD JUMPI PUSH1 0x80 SWAP2 DUP3 SHR SWAP2 PUSH2 0x28CA SWAP1 DUP3 PUSH2 0x3571 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH9 0x10000000000000000 DUP3 LT PUSH2 0x28F0 JUMPI PUSH1 0x40 SWAP2 DUP3 SHR SWAP2 PUSH2 0x28ED SWAP1 DUP3 PUSH2 0x3571 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x1 PUSH1 0x20 SHL DUP3 LT PUSH2 0x290E JUMPI PUSH1 0x20 SWAP2 DUP3 SHR SWAP2 PUSH2 0x290B SWAP1 DUP3 PUSH2 0x3571 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH3 0x10000 DUP3 LT PUSH2 0x292B JUMPI PUSH1 0x10 SWAP2 DUP3 SHR SWAP2 PUSH2 0x2928 SWAP1 DUP3 PUSH2 0x3571 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x100 DUP3 LT PUSH2 0x2947 JUMPI PUSH1 0x8 SWAP2 DUP3 SHR SWAP2 PUSH2 0x2944 SWAP1 DUP3 PUSH2 0x3571 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x10 DUP3 LT PUSH2 0x2962 JUMPI PUSH1 0x4 SWAP2 DUP3 SHR SWAP2 PUSH2 0x295F SWAP1 DUP3 PUSH2 0x3571 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x4 DUP3 LT PUSH2 0x297D JUMPI PUSH1 0x2 SWAP2 DUP3 SHR SWAP2 PUSH2 0x297A SWAP1 DUP3 PUSH2 0x3571 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x2 DUP3 LT PUSH2 0x2990 JUMPI PUSH2 0x631 PUSH1 0x1 DUP3 PUSH2 0x3571 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP5 DUP7 MULMOD DUP5 DUP7 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP PUSH8 0xDE0B6B3A7640000 DUP2 LT PUSH2 0x29D9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x698D9A01 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH8 0xDE0B6B3A7640000 DUP7 DUP9 MULMOD SWAP2 POP POP PUSH8 0x6F05B59D3B1FFFF DUP2 GT DUP3 PUSH2 0x2A13 JUMPI DUP1 PUSH8 0xDE0B6B3A7640000 DUP6 DIV ADD SWAP5 POP POP POP POP POP PUSH2 0x631 JUMP JUMPDEST PUSH3 0x40000 DUP3 DUP6 SUB DIV SWAP4 SWAP1 SWAP2 GT SWAP1 SWAP2 SUB PUSH1 0x1 PUSH1 0xEE SHL MUL SWAP2 SWAP1 SWAP2 OR PUSH32 0xACCB18165BD6FE31AE1CF318DC5B51EEE0E1BA569B88CD74C1773B91FAC10669 MUL ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0xBF SHL PUSH8 0x8000000000000000 DUP3 AND ISZERO PUSH2 0x2A7B JUMPI PUSH9 0x16A09E667F3BCC909 MUL PUSH1 0x40 SHR JUMPDEST PUSH8 0x4000000000000000 DUP3 AND ISZERO PUSH2 0x2A9A JUMPI PUSH9 0x1306FE0A31B7152DF MUL PUSH1 0x40 SHR JUMPDEST PUSH8 0x2000000000000000 DUP3 AND ISZERO PUSH2 0x2AB9 JUMPI PUSH9 0x1172B83C7D517ADCE MUL PUSH1 0x40 SHR JUMPDEST PUSH8 0x1000000000000000 DUP3 AND ISZERO PUSH2 0x2AD8 JUMPI PUSH9 0x10B5586CF9890F62A MUL PUSH1 0x40 SHR JUMPDEST PUSH8 0x800000000000000 DUP3 AND ISZERO PUSH2 0x2AF7 JUMPI PUSH9 0x1059B0D31585743AE MUL PUSH1 0x40 SHR JUMPDEST PUSH8 0x400000000000000 DUP3 AND ISZERO PUSH2 0x2B16 JUMPI PUSH9 0x102C9A3E778060EE7 MUL PUSH1 0x40 SHR JUMPDEST PUSH8 0x200000000000000 DUP3 AND ISZERO PUSH2 0x2B35 JUMPI PUSH9 0x10163DA9FB33356D8 MUL PUSH1 0x40 SHR JUMPDEST PUSH8 0x100000000000000 DUP3 AND ISZERO PUSH2 0x2B54 JUMPI PUSH9 0x100B1AFA5ABCBED61 MUL PUSH1 0x40 SHR JUMPDEST PUSH7 0x80000000000000 DUP3 AND ISZERO PUSH2 0x2B72 JUMPI PUSH9 0x10058C86DA1C09EA2 MUL PUSH1 0x40 SHR JUMPDEST PUSH7 0x40000000000000 DUP3 AND ISZERO PUSH2 0x2B90 JUMPI PUSH9 0x1002C605E2E8CEC50 MUL PUSH1 0x40 SHR JUMPDEST PUSH7 0x20000000000000 DUP3 AND ISZERO PUSH2 0x2BAE JUMPI PUSH9 0x100162F3904051FA1 MUL PUSH1 0x40 SHR JUMPDEST PUSH7 0x10000000000000 DUP3 AND ISZERO PUSH2 0x2BCC JUMPI PUSH9 0x1000B175EFFDC76BA MUL PUSH1 0x40 SHR JUMPDEST PUSH7 0x8000000000000 DUP3 AND ISZERO PUSH2 0x2BEA JUMPI PUSH9 0x100058BA01FB9F96D MUL PUSH1 0x40 SHR JUMPDEST PUSH7 0x4000000000000 DUP3 AND ISZERO PUSH2 0x2C08 JUMPI PUSH9 0x10002C5CC37DA9492 MUL PUSH1 0x40 SHR JUMPDEST PUSH7 0x2000000000000 DUP3 AND ISZERO PUSH2 0x2C26 JUMPI PUSH9 0x1000162E525EE0547 MUL PUSH1 0x40 SHR JUMPDEST PUSH7 0x1000000000000 DUP3 AND ISZERO PUSH2 0x2C44 JUMPI PUSH9 0x10000B17255775C04 MUL PUSH1 0x40 SHR JUMPDEST PUSH6 0x800000000000 DUP3 AND ISZERO PUSH2 0x2C61 JUMPI PUSH9 0x1000058B91B5BC9AE MUL PUSH1 0x40 SHR JUMPDEST PUSH6 0x400000000000 DUP3 AND ISZERO PUSH2 0x2C7E JUMPI PUSH9 0x100002C5C89D5EC6D MUL PUSH1 0x40 SHR JUMPDEST PUSH6 0x200000000000 DUP3 AND ISZERO PUSH2 0x2C9B JUMPI PUSH9 0x10000162E43F4F831 MUL PUSH1 0x40 SHR JUMPDEST PUSH6 0x100000000000 DUP3 AND ISZERO PUSH2 0x2CB8 JUMPI PUSH9 0x100000B1721BCFC9A MUL PUSH1 0x40 SHR JUMPDEST PUSH6 0x80000000000 DUP3 AND ISZERO PUSH2 0x2CD5 JUMPI PUSH9 0x10000058B90CF1E6E MUL PUSH1 0x40 SHR JUMPDEST PUSH6 0x40000000000 DUP3 AND ISZERO PUSH2 0x2CF2 JUMPI PUSH9 0x1000002C5C863B73F MUL PUSH1 0x40 SHR JUMPDEST PUSH6 0x20000000000 DUP3 AND ISZERO PUSH2 0x2D0F JUMPI PUSH9 0x100000162E430E5A2 MUL PUSH1 0x40 SHR JUMPDEST PUSH6 0x10000000000 DUP3 AND ISZERO PUSH2 0x2D2C JUMPI PUSH9 0x1000000B172183551 MUL PUSH1 0x40 SHR JUMPDEST PUSH5 0x8000000000 DUP3 AND ISZERO PUSH2 0x2D48 JUMPI PUSH9 0x100000058B90C0B49 MUL PUSH1 0x40 SHR JUMPDEST PUSH5 0x4000000000 DUP3 AND ISZERO PUSH2 0x2D64 JUMPI PUSH9 0x10000002C5C8601CC MUL PUSH1 0x40 SHR JUMPDEST PUSH5 0x2000000000 DUP3 AND ISZERO PUSH2 0x2D80 JUMPI PUSH9 0x1000000162E42FFF0 MUL PUSH1 0x40 SHR JUMPDEST PUSH5 0x1000000000 DUP3 AND ISZERO PUSH2 0x2D9C JUMPI PUSH9 0x10000000B17217FBB MUL PUSH1 0x40 SHR JUMPDEST PUSH5 0x800000000 DUP3 AND ISZERO PUSH2 0x2DB8 JUMPI PUSH9 0x1000000058B90BFCE MUL PUSH1 0x40 SHR JUMPDEST PUSH5 0x400000000 DUP3 AND ISZERO PUSH2 0x2DD4 JUMPI PUSH9 0x100000002C5C85FE3 MUL PUSH1 0x40 SHR JUMPDEST PUSH5 0x200000000 DUP3 AND ISZERO PUSH2 0x2DF0 JUMPI PUSH9 0x10000000162E42FF1 MUL PUSH1 0x40 SHR JUMPDEST PUSH1 0x1 PUSH1 0x20 SHL DUP3 AND ISZERO PUSH2 0x2E0B JUMPI PUSH9 0x100000000B17217F8 MUL PUSH1 0x40 SHR JUMPDEST PUSH4 0x80000000 DUP3 AND ISZERO PUSH2 0x2E26 JUMPI PUSH9 0x10000000058B90BFC MUL PUSH1 0x40 SHR JUMPDEST PUSH4 0x40000000 DUP3 AND ISZERO PUSH2 0x2E41 JUMPI PUSH9 0x1000000002C5C85FE MUL PUSH1 0x40 SHR JUMPDEST PUSH4 0x20000000 DUP3 AND ISZERO PUSH2 0x2E5C JUMPI PUSH9 0x100000000162E42FF MUL PUSH1 0x40 SHR JUMPDEST PUSH4 0x10000000 DUP3 AND ISZERO PUSH2 0x2E77 JUMPI PUSH9 0x1000000000B17217F MUL PUSH1 0x40 SHR JUMPDEST PUSH4 0x8000000 DUP3 AND ISZERO PUSH2 0x2E92 JUMPI PUSH9 0x100000000058B90C0 MUL PUSH1 0x40 SHR JUMPDEST PUSH4 0x4000000 DUP3 AND ISZERO PUSH2 0x2EAD JUMPI PUSH9 0x10000000002C5C860 MUL PUSH1 0x40 SHR JUMPDEST PUSH4 0x2000000 DUP3 AND ISZERO PUSH2 0x2EC8 JUMPI PUSH9 0x1000000000162E430 MUL PUSH1 0x40 SHR JUMPDEST PUSH4 0x1000000 DUP3 AND ISZERO PUSH2 0x2EE3 JUMPI PUSH9 0x10000000000B17218 MUL PUSH1 0x40 SHR JUMPDEST PUSH3 0x800000 DUP3 AND ISZERO PUSH2 0x2EFD JUMPI PUSH9 0x1000000000058B90C MUL PUSH1 0x40 SHR JUMPDEST PUSH3 0x400000 DUP3 AND ISZERO PUSH2 0x2F17 JUMPI PUSH9 0x100000000002C5C86 MUL PUSH1 0x40 SHR JUMPDEST PUSH3 0x200000 DUP3 AND ISZERO PUSH2 0x2F31 JUMPI PUSH9 0x10000000000162E43 MUL PUSH1 0x40 SHR JUMPDEST PUSH3 0x100000 DUP3 AND ISZERO PUSH2 0x2F4B JUMPI PUSH9 0x100000000000B1721 MUL PUSH1 0x40 SHR JUMPDEST PUSH3 0x80000 DUP3 AND ISZERO PUSH2 0x2F65 JUMPI PUSH9 0x10000000000058B91 MUL PUSH1 0x40 SHR JUMPDEST PUSH3 0x40000 DUP3 AND ISZERO PUSH2 0x2F7F JUMPI PUSH9 0x1000000000002C5C8 MUL PUSH1 0x40 SHR JUMPDEST PUSH3 0x20000 DUP3 AND ISZERO PUSH2 0x2F99 JUMPI PUSH9 0x100000000000162E4 MUL PUSH1 0x40 SHR JUMPDEST PUSH3 0x10000 DUP3 AND ISZERO PUSH2 0x2FB3 JUMPI PUSH9 0x1000000000000B172 MUL PUSH1 0x40 SHR JUMPDEST PUSH2 0x8000 DUP3 AND ISZERO PUSH2 0x2FCC JUMPI PUSH9 0x100000000000058B9 MUL PUSH1 0x40 SHR JUMPDEST PUSH2 0x4000 DUP3 AND ISZERO PUSH2 0x2FE5 JUMPI PUSH9 0x10000000000002C5D MUL PUSH1 0x40 SHR JUMPDEST PUSH2 0x2000 DUP3 AND ISZERO PUSH2 0x2FFE JUMPI PUSH9 0x1000000000000162E MUL PUSH1 0x40 SHR JUMPDEST PUSH2 0x1000 DUP3 AND ISZERO PUSH2 0x3017 JUMPI PUSH9 0x10000000000000B17 MUL PUSH1 0x40 SHR JUMPDEST PUSH2 0x800 DUP3 AND ISZERO PUSH2 0x3030 JUMPI PUSH9 0x1000000000000058C MUL PUSH1 0x40 SHR JUMPDEST PUSH2 0x400 DUP3 AND ISZERO PUSH2 0x3049 JUMPI PUSH9 0x100000000000002C6 MUL PUSH1 0x40 SHR JUMPDEST PUSH2 0x200 DUP3 AND ISZERO PUSH2 0x3062 JUMPI PUSH9 0x10000000000000163 MUL PUSH1 0x40 SHR JUMPDEST PUSH2 0x100 DUP3 AND ISZERO PUSH2 0x307B JUMPI PUSH9 0x100000000000000B1 MUL PUSH1 0x40 SHR JUMPDEST PUSH1 0x80 DUP3 AND ISZERO PUSH2 0x3093 JUMPI PUSH9 0x10000000000000059 MUL PUSH1 0x40 SHR JUMPDEST PUSH1 0x40 DUP3 AND ISZERO PUSH2 0x30AB JUMPI PUSH9 0x1000000000000002C MUL PUSH1 0x40 SHR JUMPDEST PUSH1 0x20 DUP3 AND ISZERO PUSH2 0x30C3 JUMPI PUSH9 0x10000000000000016 MUL PUSH1 0x40 SHR JUMPDEST PUSH1 0x10 DUP3 AND ISZERO PUSH2 0x30DB JUMPI PUSH9 0x1000000000000000B MUL PUSH1 0x40 SHR JUMPDEST PUSH1 0x8 DUP3 AND ISZERO PUSH2 0x30F3 JUMPI PUSH9 0x10000000000000006 MUL PUSH1 0x40 SHR JUMPDEST PUSH1 0x4 DUP3 AND ISZERO PUSH2 0x310B JUMPI PUSH9 0x10000000000000003 MUL PUSH1 0x40 SHR JUMPDEST PUSH1 0x2 DUP3 AND ISZERO PUSH2 0x3123 JUMPI PUSH9 0x10000000000000001 MUL PUSH1 0x40 SHR JUMPDEST PUSH1 0x1 DUP3 AND ISZERO PUSH2 0x313B JUMPI PUSH9 0x10000000000000001 MUL PUSH1 0x40 SHR JUMPDEST PUSH8 0xDE0B6B3A7640000 MUL PUSH1 0x40 SWAP2 SWAP1 SWAP2 SHR PUSH1 0xBF SUB SHR SWAP1 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x3174 JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST ISZERO PUSH2 0xB89 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO PUSH2 0x3202 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 PUSH2 0x31AF SWAP1 PUSH2 0x2158 DUP6 PUSH2 0x2164 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDEC2BACDD2F05B59DE34DA9B523DFF8BE42E5E38E818C82FDB0BAE774387A724 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x31F7 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0xB89 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 PUSH2 0x3238 SWAP1 PUSH2 0x281D DUP6 PUSH2 0x2164 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDEC2BACDD2F05B59DE34DA9B523DFF8BE42E5E38E818C82FDB0BAE774387A724 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x8CB SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2990 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x32A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x97E DUP3 PUSH2 0x3280 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x32DF JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x32C3 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x32F1 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x331A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3323 DUP4 PUSH2 0x3280 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3346 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x334F DUP5 PUSH2 0x3280 JUMP JUMPDEST SWAP3 POP PUSH2 0x335D PUSH1 0x20 DUP6 ADD PUSH2 0x3280 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x337F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3399 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x33BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH2 0x33D4 PUSH1 0x40 DUP6 ADD PUSH2 0x3280 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x2990 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x3407 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3410 DUP8 PUSH2 0x3280 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH2 0x342C PUSH1 0x60 DUP9 ADD PUSH2 0x33DD JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x3461 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x346A DUP9 PUSH2 0x3280 JUMP JUMPDEST SWAP7 POP PUSH2 0x3478 PUSH1 0x20 DUP10 ADD PUSH2 0x3280 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x3494 PUSH1 0x80 DUP10 ADD PUSH2 0x33DD JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x34C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x34CC DUP4 PUSH2 0x3280 JUMP JUMPDEST SWAP2 POP PUSH2 0x34DA PUSH1 0x20 DUP5 ADD PUSH2 0x3280 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x34F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x34FF DUP4 PUSH2 0x3280 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3518 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x354B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x97E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x3584 JUMPI PUSH2 0x3584 PUSH2 0x355B JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x359B JUMPI PUSH2 0x359B PUSH2 0x355B JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x35BA JUMPI PUSH2 0x35BA PUSH2 0x355B JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x35DC JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x35F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID JUMP PUSH16 0x746520457363726F776564204F726967 PUSH10 0x6E204465466920476F76 PUSH6 0x726E616E6365 LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSTORE 0xE0 SUB PUSH14 0x25753BD4E3F0803F1B01360A091A MULMOD PUSH26 0x3150FD8DABB2CE5802DBBF7B64736F6C634300080A0033000000 ", "sha1": "b66d6e875e1b9c1a5551d1d659b2c93f51d33151", "source": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.10;\nimport {ERC20Votes} from \"OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/extensions/ERC20Votes.sol\";\nimport {ERC20Permit} from \"OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/extensions/draft-ERC20Permit.sol\";\nimport {ERC20} from \"OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/ERC20.sol\";\nimport {PRBMathUD60x18} from \"paulrberg/prb-math@2.5.0/contracts/PRBMathUD60x18.sol\";\nimport {RewardsSource} from \"./RewardsSource.sol\";\n\n/// @title OGV Staking\n/// @author Daniel Von Fange\n/// @notice Provides staking, vote power history, vote delegation, and rewards\n/// distribution.\n///\n/// The balance received for staking (and thus the voting power and rewards\n/// distribution) goes up exponentially by the end of the staked period.\ncontract OgvStaking is ERC20Votes {\n // 1. Core Storage\n uint256 public immutable epoch; // timestamp\n uint256 public immutable minStakeDuration; // in seconds\n\n // 2. Staking and Lockup Storage\n uint256 constant YEAR_BASE = 18e17;\n struct Lockup {\n uint128 amount;\n uint128 end;\n uint256 points;\n }\n mapping(address => Lockup[]) public lockups;\n\n // 3. Reward Storage\n ERC20 public immutable ogv; // Must not allow reentrancy\n RewardsSource public immutable rewardsSource;\n mapping(address => uint256) public rewardDebtPerShare;\n uint256 public accRewardPerShare; // As of the start of the block\n\n // Used to track any calls to `delegate()` method. When this isn't\n // set to true, voting powers are delegated to the receiver of the stake\n // when `stake()` or `extend()` method are called. \n // For existing stakers with delegation set, This will remain `false` \n // unless the user calls `delegate()` method.\n mapping(address => bool) public hasDelegationSet;\n\n // Events\n event Stake(\n address indexed user,\n uint256 lockupId,\n uint256 amount,\n uint256 end,\n uint256 points\n );\n event Unstake(\n address indexed user,\n uint256 lockupId,\n uint256 amount,\n uint256 end,\n uint256 points\n );\n event Reward(address indexed user, uint256 amount);\n\n // 1. Core Functions\n\n constructor(\n address ogv_,\n uint256 epoch_,\n uint256 minStakeDuration_,\n address rewardsSource_\n ) ERC20(\"\", \"\") ERC20Permit(\"veOGV\") {\n ogv = ERC20(ogv_);\n epoch = epoch_;\n minStakeDuration = minStakeDuration_;\n rewardsSource = RewardsSource(rewardsSource_);\n }\n\n function name() public pure override returns (string memory) {\n return \"Vote Escrowed Origin DeFi Governance\";\n }\n\n function symbol() public pure override returns (string memory) {\n return \"veOGV\";\n }\n\n function transfer(address, uint256) public override returns (bool) {\n revert(\"Staking: Transfers disabled\");\n }\n\n function transferFrom(\n address,\n address,\n uint256\n ) public override returns (bool) {\n revert(\"Staking: Transfers disabled\");\n }\n\n // 2. Staking and Lockup Functions\n\n /// @notice Stake OGV to an address that may not be the same as the\n /// sender of the funds. This can be used to give staked funds to someone\n /// else.\n ///\n /// If staking before the start of staking (epoch), then the lockup start\n /// and end dates are shifted forward so that the lockup starts at the\n /// epoch.\n ///\n /// Any rewards previously earned will be paid out.\n ///\n /// @param amount OGV to lockup in the stake\n /// @param duration in seconds for the stake\n /// @param to address to receive ownership of the stake\n function stake(\n uint256 amount,\n uint256 duration,\n address to\n ) external {\n _stake(amount, duration, to);\n }\n\n /// @notice Stake OGV\n ///\n /// If staking before the start of staking (epoch), then the lockup start\n /// and end dates are shifted forward so that the lockup starts at the\n /// epoch.\n ///\n /// Any rewards previously earned will be paid out.\n ///\n /// @notice Stake OGV for myself.\n /// @param amount OGV to lockup in the stake\n /// @param duration in seconds for the stake\n function stake(uint256 amount, uint256 duration) external {\n _stake(amount, duration, msg.sender);\n }\n\n /// @dev Internal method used for public staking\n /// @param amount OGV to lockup in the stake\n /// @param duration in seconds for the stake\n /// @param to address to receive ownership of the stake\n function _stake(\n uint256 amount,\n uint256 duration,\n address to\n ) internal {\n require(to != address(0), \"Staking: To the zero address\");\n require(amount <= type(uint128).max, \"Staking: Too much\");\n require(amount > 0, \"Staking: Not enough\");\n\n // duration checked inside previewPoints\n (uint256 points, uint256 end) = previewPoints(amount, duration);\n require(\n points + totalSupply() <= type(uint192).max,\n \"Staking: Max points exceeded\"\n );\n _collectRewards(to);\n lockups[to].push(\n Lockup({\n amount: uint128(amount), // max checked in require above\n end: uint128(end),\n points: points\n })\n );\n _mint(to, points);\n ogv.transferFrom(msg.sender, address(this), amount); // Important that it's sender\n\n if (!hasDelegationSet[to] && delegates(to) == address(0)) {\n // Delegate voting power to the receiver, if unregistered\n _delegate(to, to);\n }\n\n emit Stake(to, lockups[to].length - 1, amount, end, points);\n }\n\n /// @notice Collect staked OGV for a lockup and any earned rewards.\n /// @param lockupId the id of the lockup to unstake\n function unstake(uint256 lockupId) external {\n Lockup memory lockup = lockups[msg.sender][lockupId];\n uint256 amount = lockup.amount;\n uint256 end = lockup.end;\n uint256 points = lockup.points;\n require(block.timestamp >= end, \"Staking: End of lockup not reached\");\n require(end != 0, \"Staking: Already unstaked this lockup\");\n _collectRewards(msg.sender);\n delete lockups[msg.sender][lockupId]; // Keeps empty in array, so indexes are stable\n _burn(msg.sender, points);\n ogv.transfer(msg.sender, amount);\n emit Unstake(msg.sender, lockupId, amount, end, points);\n }\n\n /// @notice Extend a stake lockup for additional points.\n ///\n /// The stake end time is computed from the current time + duration, just\n /// like it is for new stakes. So a new stake for seven days duration and\n /// an old stake extended with a seven days duration would have the same\n /// end.\n ///\n /// If an extend is made before the start of staking, the start time for\n /// the new stake is shifted forwards to the start of staking, which also\n /// shifts forward the end date.\n ///\n /// @param lockupId the id of the old lockup to extend\n /// @param duration number of seconds from now to stake for\n function extend(uint256 lockupId, uint256 duration) external {\n // duration checked inside previewPoints\n _collectRewards(msg.sender);\n Lockup memory lockup = lockups[msg.sender][lockupId];\n uint256 oldAmount = lockup.amount;\n uint256 oldEnd = lockup.end;\n uint256 oldPoints = lockup.points;\n (uint256 newPoints, uint256 newEnd) = previewPoints(\n oldAmount,\n duration\n );\n require(newEnd > oldEnd, \"Staking: New lockup must be longer\");\n lockup.end = uint128(newEnd);\n lockup.points = newPoints;\n lockups[msg.sender][lockupId] = lockup;\n _mint(msg.sender, newPoints - oldPoints);\n if (!hasDelegationSet[msg.sender] && delegates(msg.sender) == address(0)) {\n // Delegate voting power to the receiver, if unregistered\n _delegate(msg.sender, msg.sender);\n }\n emit Unstake(msg.sender, lockupId, oldAmount, oldEnd, oldPoints);\n emit Stake(msg.sender, lockupId, oldAmount, newEnd, newPoints);\n }\n\n /// @notice Preview the number of points that would be returned for the\n /// given amount and duration.\n ///\n /// @param amount OGV to be staked\n /// @param duration number of seconds to stake for\n /// @return points staking points that would be returned\n /// @return end staking period end date\n function previewPoints(uint256 amount, uint256 duration)\n public\n view\n returns (uint256, uint256)\n {\n require(duration >= minStakeDuration, \"Staking: Too short\");\n require(duration <= 1461 days, \"Staking: Too long\");\n uint256 start = block.timestamp > epoch ? block.timestamp : epoch;\n uint256 end = start + duration;\n uint256 endYearpoc = ((end - epoch) * 1e18) / 365 days;\n uint256 multiplier = PRBMathUD60x18.pow(YEAR_BASE, endYearpoc);\n return ((amount * multiplier) / 1e18, end);\n }\n\n // 3. Reward functions\n\n /// @notice Collect all earned OGV rewards.\n function collectRewards() external {\n _collectRewards(msg.sender);\n }\n\n /// @notice Shows the amount of OGV a user would receive if they collected\n /// rewards at this time.\n ///\n /// @param user to preview rewards for\n /// @return OGV rewards amount\n function previewRewards(address user) external view returns (uint256) {\n uint256 supply = totalSupply();\n if (supply == 0) {\n return 0; // No one has any points to even get rewards\n }\n uint256 _accRewardPerShare = accRewardPerShare;\n _accRewardPerShare += (rewardsSource.previewRewards() * 1e12) / supply;\n uint256 netRewardsPerShare = _accRewardPerShare -\n rewardDebtPerShare[user];\n return (balanceOf(user) * netRewardsPerShare) / 1e12;\n }\n\n /// @dev Internal function to handle rewards accounting.\n ///\n /// 1. Collect new rewards for everyone\n /// 2. Calculate this user's rewards and accounting\n /// 3. Distribute this user's rewards\n ///\n /// This function *must* be called before any user balance changes.\n ///\n /// This will always update the user's rewardDebtPerShare to match\n /// accRewardPerShare, which is essential to the accounting.\n ///\n /// @param user to collect rewards for\n function _collectRewards(address user) internal {\n uint256 supply = totalSupply();\n if (supply > 0) {\n uint256 preBalance = ogv.balanceOf(address(this));\n try rewardsSource.collectRewards() {} catch {\n // Governance staking should continue, even if rewards fail\n }\n uint256 collected = ogv.balanceOf(address(this)) - preBalance;\n accRewardPerShare += (collected * 1e12) / supply;\n }\n uint256 netRewardsPerShare = accRewardPerShare -\n rewardDebtPerShare[user];\n uint256 netRewards = (balanceOf(user) * netRewardsPerShare) / 1e12;\n rewardDebtPerShare[user] = accRewardPerShare;\n if (netRewards == 0) {\n return;\n }\n ogv.transfer(user, netRewards);\n emit Reward(user, netRewards);\n }\n\n /**\n * @dev Change delegation for `delegator` to `delegatee`.\n *\n * Emits events {DelegateChanged} and {DelegateVotesChanged}.\n */\n function _delegate(address delegator, address delegatee) internal override {\n hasDelegationSet[delegator] = true;\n super._delegate(delegator, delegatee);\n }\n}\n", "sourceMap": "837:10871:17:-:0;;;2278:325;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1835:52:5;;;;;;;;;;;;;-1:-1:-1;;;1835:52:5;;;1874:4;2455:602:11;;;;;;;;;;;;;-1:-1:-1;;;2455:602:11;;;1978:113:1;;;;;;;;;;;;;;;;;;;;;;;;2052:5;2044;:13;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2067:17:1;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;;2541:22:11;;;;;;;;;;2597:25;;;;;;2778;;;;2813:31;;;;2873:13;2854:32;;;;-1:-1:-1;3633:73:11;;2651:117;3633:73;;;876:25:19;;;917:18;;;910:34;;;-1:-1:-1;960:18:19;;953:34;;;1003:18;;;996:34;;;;3700:4:11;1046:19:19;;;1039:61;3633:73:11;;;;;;;;;;848:19:19;;3633:73:11;;3623:84;;;;;;;;2541:22;;-1:-1:-1;2597:25:11;2651:117;2896:85;;3014:4;2991:28;;3029:21;;-1:-1:-1;;;;;;;;;2454:17:17;;::::2;;::::0;-1:-1:-1;2481:14:17::2;::::0;;;;2505:36:::2;::::0;2551:45:::2;;::::0;837:10871;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;837:10871:17;;;-1:-1:-1;837:10871:17;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:177:19;93:13;;-1:-1:-1;;;;;135:31:19;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:416::-;293:6;301;309;317;370:3;358:9;349:7;345:23;341:33;338:53;;;387:1;384;377:12;338:53;410:40;440:9;410:40;:::i;:::-;400:50;;490:2;479:9;475:18;469:25;459:35;;534:2;523:9;519:18;513:25;503:35;;557:49;602:2;591:9;587:18;557:49;:::i;:::-;547:59;;196:416;;;;;;;:::o;1111:380::-;1190:1;1186:12;;;;1233;;;1254:61;;1308:4;1300:6;1296:17;1286:27;;1254:61;1361:2;1353:6;1350:14;1330:18;1327:38;1324:161;;;1407:10;1402:3;1398:20;1395:1;1388:31;1442:4;1439:1;1432:15;1470:4;1467:1;1460:15;1324:161;;1111:380;;;:::o;:::-;837:10871:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", "sourcePath": "contracts/OgvStaking.sol", "type": "contract", "deployment": {"address": "0xFd8e7DAcC16c3807E66FEdD4F7c65f26B1fEE558", "chainid": "1", "blockHeight": 18627533}} \ No newline at end of file diff --git a/build/deployments/map.json b/build/deployments/map.json index 487a9b85..eb5a54fe 100644 --- a/build/deployments/map.json +++ b/build/deployments/map.json @@ -5,13 +5,14 @@ "0x9c354503C38481a7A7a51629142963F98eCC12D0" ], "Governance": [ - "0xC6a3525e2FD8F4844a6fdfE4552a583CE5aC7EfA", - "0x3cdD07c16614059e66344a7b579DAB4f9516C0b6" + "0x3cdD07c16614059e66344a7b579DAB4f9516C0b6", + "0xC6a3525e2FD8F4844a6fdfE4552a583CE5aC7EfA" ], "MandatoryLockupDistributor": [ "0xD667091c2d1DCc8620f4eaEA254CdFB0a176718D" ], "OgvStaking": [ + "0xFd8e7DAcC16c3807E66FEdD4F7c65f26B1fEE558", "0xE61110663334794abA03c349c621A075DC590a42", "0xe61110663334794aba03c349c621a075dc590a42" ], @@ -22,6 +23,7 @@ "0x7aE2334f12a449895AD21d4c255D9DE194fe986f" ], "OriginDollarGovernance": [ + "0x190140d8D1815f6f92FD58DF0dacB758276fFFDB", "0x7DFAFe7d547Fc9083719D633B9c5f6f542C42c77", "0xEd6E3808FCe0C4A52DEa8636933f666c6dea4d1d", "0x6cE89Ff1E8a910007BAc236C27B88f8a95B0bFaD" @@ -33,8 +35,8 @@ "0x7d82E86CF1496f9485a8ea04012afeb3C7489397" ], "Timelock": [ - "0xac126C98cFc7c55a9F944770cb17d7065688C577", - "0x35918cDE7233F2dD33fA41ae3Cb6aE0e42E0e69F" + "0x35918cDE7233F2dD33fA41ae3Cb6aE0e42E0e69F", + "0xac126C98cFc7c55a9F944770cb17d7065688C577" ] }, "4": { diff --git a/common.py b/common.py index 26eee547..d4ac4bc2 100644 --- a/common.py +++ b/common.py @@ -2,6 +2,8 @@ from brownie import * import brownie +BLOCKS_PER_DAY = 86400 / 12 # 12 blocks per second + STRATEGIST = '0xF14BBdf064E3F67f51cd9BD646aE3716aD938FDC' GOV_MULTISIG = '0xbe2AB3d3d8F6a32b96414ebbd865dBD276d3d899' GOVERNOR_FIVE = '0x3cdd07c16614059e66344a7b579dab4f9516c0b6' @@ -28,24 +30,61 @@ def governanceProposal(deployment): return actions = deploymentInfo['actions'] - print('Executing governance proposal') if (len(actions) > 0): ogvGovernor = Contract.from_explorer(GOVERNOR_FIVE) - with TemporaryFork(): - propose_tx = ogvGovernor.propose( - [action['contract'].address for action in actions], - [0 for action in actions], - [action['signature'] for action in actions], - # To explain this code salad: - # - action['signature'][:action['signature'].index('(')] -> this part gets the function name from signature - # - encode_input(*action['args']) -> encodes said function data - # - [10:] trim first 10 character to trim function name signature away from data - [getattr(action['contract'], action['signature'][:action['signature'].index('(')]).encode_input(*action['args'])[10:] for action in actions], - deploymentInfo['name'], + proposal_args = [ + [action['contract'].address for action in actions], + [0 for action in actions], + [action['signature'] for action in actions], + # To explain this code salad: + # - action['signature'][:action['signature'].index('(')] -> this part gets the function name from signature + # - encode_input(*action['args']) -> encodes said function data + # - [10:] trim first 10 character to trim function name signature away from data + [getattr(action['contract'], action['signature'][:action['signature'].index('(')]).encode_input(*action['args'])[10:] for action in actions], + deploymentInfo['name'], + ] + + if is_fork: + print('Creating governance proposal on fork') + ogvGovernor.propose( + *proposal_args, {'from': GOV_MULTISIG} ) + # Simulate execution on fork + proposalId = propose_tx.events['ProposalCreated'][0][0]['proposalId'] + + # Move forward 30s so that we can vote + timetravel(30) + + # Vote on Proposal + print("Voting on the proposal") + ogvGovernor.castVote(proposalId, 1, {'from': GOV_MULTISIG}) + + # 3 days to queue (+2 for buffer since contract has a different BLOCKS_PER_DAY now) + timetravel(86400 * 5) + + print("Queueing proposal") + ogvGovernor.queue(proposalId, {'from': GOV_MULTISIG}) + + # 2 day timelock (+1 day for buffer) + timetravel(86400 * 3) + + print("Executing proposal") + ogvGovernor.execute(proposalId, {'from': GOV_MULTISIG}) + + else: + propose_data = ogvGovernor.propose.encode_input( + *proposal_args + ) + + print("Raw Args", proposal_args) + print("Execute the following transaction to create OGV Governance proposal") - print("To: {}".format(propose_tx.receiver)) - print("Data: {}".format(propose_tx.input)) + print("To: {}".format(GOVERNOR_FIVE)) + print("Data: {}".format(propose_data)) + +def timetravel(seconds): + brownie.chain.sleep(seconds + 1) + brownie.chain.mine(int(seconds / BLOCKS_PER_DAY) + 1) \ No newline at end of file diff --git a/contracts/GovernanceToken.sol b/contracts/GovernanceToken.sol index d32ef6dc..7ae84b8f 100644 --- a/contracts/GovernanceToken.sol +++ b/contracts/GovernanceToken.sol @@ -54,4 +54,8 @@ contract OriginDollarGovernance is override onlyOwner {} + + function name() public view virtual override returns (string memory) { + return "Origin DeFi Governance"; + } } diff --git a/contracts/OgvStaking.sol b/contracts/OgvStaking.sol index 39cef82e..d69283d3 100644 --- a/contracts/OgvStaking.sol +++ b/contracts/OgvStaking.sol @@ -72,7 +72,7 @@ contract OgvStaking is ERC20Votes { } function name() public pure override returns (string memory) { - return "Vote Escrowed Origin Dollar Governance"; + return "Vote Escrowed Origin DeFi Governance"; } function symbol() public pure override returns (string memory) { diff --git a/scripts/deploy_005_rebranding.py b/scripts/deploy_005_rebranding.py new file mode 100644 index 00000000..b62bcf75 --- /dev/null +++ b/scripts/deploy_005_rebranding.py @@ -0,0 +1,72 @@ +import os + +from brownie import * +from brownie.network import priority_fee +from common import * + +OGV_PROXY_ADDRESS = "0x9c354503c38481a7a7a51629142963f98ecc12d0" +VEOGV_PROXY_ADDRESS = "0x0c4576ca1c365868e162554af8e385dc3e7c66d9" +REWARDS_PROXY_ADDRESS = "0x7d82e86cf1496f9485a8ea04012afeb3c7489397" +GOVERNANCE_ADDRESS = "0x3cdd07c16614059e66344a7b579dab4f9516c0b6" + +def main(): + def deployment(deployer, FROM_DEPLOYER, local_provider, is_mainnet, is_fork, is_proposal_mode): + # Existing contracts + veogv_proxy = Contract.from_abi("OgvStakingProxy", VEOGV_PROXY_ADDRESS, OgvStakingProxy.abi) + ogv_proxy = Contract.from_abi("OriginDollarGovernance", OGV_PROXY_ADDRESS, OriginDollarGovernance.abi) + governance = Contract.from_abi("Governance", GOVERNANCE_ADDRESS, Governance.abi) + + if not is_fork: + # Dynamicly price gas, avoids over paying or TX's getting stuck + priority_fee("2 gwei") + + # these values are marked as immutable in the contract and for that reason + # the compiler does not reserve storage slots for them - rather they are + # copied to all the places in the code where they are used. It is important + # that we use the correct values in the constructor + # + # https://docs.soliditylang.org/en/v0.8.17/contracts.html#constant-and-immutable-state-variables + min_staking = 30 * 24 * 60 * 60 # 2592000 -> 30 days + epoch = 1657584000 + + # Deploy new implementations + veogv_impl = OgvStaking.deploy(OGV_PROXY_ADDRESS, epoch, min_staking, REWARDS_PROXY_ADDRESS, FROM_DEPLOYER) + print("OGVStaking Implementation deployed at {}".format(veogv_impl.address)) + + ogv_impl = OriginDollarGovernance.deploy(FROM_DEPLOYER) + print("OriginDollarGovernance Implementation deployed at {}".format(ogv_impl.address)) + + if is_mainnet: + # Verify contract on etherscan on mainnet + print("Verifying contract on Etherscan...") + + OgvStaking.publish_source(veogv_impl) + OriginDollarGovernance.publish_source(ogv_impl) + + return { + 'name': 'Rebrand OGV contracts and adjust governance parameters', + 'actions': [ + { + 'contract': veogv_proxy, + 'signature': 'upgradeTo(address)', + 'args': [veogv_impl.address] + }, + { + 'contract': ogv_proxy, + 'signature': 'upgradeTo(address)', + 'args': [ogv_impl.address] + }, + { + 'contract': governance, + 'signature': 'setVotingPeriod(uint256)', + 'args': [BLOCKS_PER_DAY * 2] # 2 days + }, + { + 'contract': governance, + 'signature': 'setLateQuorumVoteExtension(uint64)', + 'args': [BLOCKS_PER_DAY * 1] # 1 day + }, + ] + } + + governanceProposal(deployment) \ No newline at end of file diff --git a/tests/test_token.py b/tests/test_token.py index b54dfe87..1e26924a 100644 --- a/tests/test_token.py +++ b/tests/test_token.py @@ -1,52 +1,48 @@ import brownie from brownie import * -from .fixtures import token - +from .fixtures import token, staking, rewards def test_name(token): - assert token.name() == "Origin Dollar Governance" - + assert token.name() == "Origin DeFi Governance" def test_symbol(token): assert token.symbol() == "OGV" +def test_staking_name(staking): + assert staking.name() == "Vote Escrowed Origin DeFi Governance" + +def test_staking_symbol(staking): + assert staking.symbol() == "veOGV" def test_decimals(token): assert token.decimals() == 18 - def test_initial_total_supply(token): assert token.totalSupply() == 1000000000 * 10**18 - def test_owner(token): assert token.owner() == accounts[0] - def test_transfer_ownership(token): token.transferOwnership(accounts[1]) assert token.owner() == accounts[1] - def test_non_owner_cant_mint(token): with brownie.reverts( "AccessControl: account "+accounts[1].address.lower()+" is missing role 0x9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6" ): token.mint(accounts[1], 100, {"from": accounts[1]}) - def test_minter_can_mint(token): token.grantMinterRole(accounts[0], {"from": accounts[0]}) token.mint(accounts[1], 100, {"from": accounts[0]}) assert token.totalSupply() == 1000000000 * 10**18 + 100 - def test_cant_upgrade_to_non_uups(token): non_uups_token = NonUUPSToken.deploy({"from": accounts[0]}) with brownie.reverts("ERC1967Upgrade: new implementation is not UUPS"): token.upgradeTo(non_uups_token.address) - def test_upgrade(token): upgrade_to = TestToken.deploy({"from": accounts[0]}) token.upgradeTo(upgrade_to.address) @@ -54,7 +50,6 @@ def test_upgrade(token): with brownie.reverts("Upgraded"): token.proof() - def test_non_owner_cant_upgrade(token): upgrade_to = TestToken.deploy({"from": accounts[0]}) with brownie.reverts("Ownable: caller is not the owner"): @@ -69,7 +64,7 @@ def test_burn_from(token): alice = accounts[0] bob = accounts[1] - before_balance = token.balanceOf(alice); + before_balance = token.balanceOf(alice) token.approve(bob, 100, {'from': alice}) token.burnFrom(alice, 100, {'from': bob}) assert before_balance - 100 == token.balanceOf(alice) @@ -78,7 +73,7 @@ def test_burn_from_fail_not_approved(token): alice = accounts[0] bob = accounts[1] - before_balance = token.balanceOf(alice); + before_balance = token.balanceOf(alice) token.approve(bob, 90, {'from': alice}) with brownie.reverts("ERC20: insufficient allowance"): token.burnFrom(alice, 100, {'from': bob})