@mean-finance/dca-v2-core
Version:
Core smart contracts of DCA v2 by mean.finance
1,058 lines • 84.4 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "DCAPermissionsManager",
"sourceName": "contracts/DCAPermissionsManager/DCAPermissionsManager.sol",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "_governor",
"type": "address"
},
{
"internalType": "contract IDCAHubPositionDescriptor",
"name": "_descriptor",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "ExpiredDeadline",
"type": "error"
},
{
"inputs": [],
"name": "HubAlreadySet",
"type": "error"
},
{
"inputs": [],
"name": "InvalidSignature",
"type": "error"
},
{
"inputs": [],
"name": "NotOwner",
"type": "error"
},
{
"inputs": [],
"name": "OnlyHubCanExecute",
"type": "error"
},
{
"inputs": [],
"name": "ZeroAddress",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "approved",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "ApprovalForAll",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"components": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "enum IDCAPermissionManager.Permission[]",
"name": "permissions",
"type": "uint8[]"
}
],
"indexed": false,
"internalType": "struct IDCAPermissionManager.PermissionSet[]",
"name": "permissions",
"type": "tuple[]"
}
],
"name": "Modified",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "contract IDCAHubPositionDescriptor",
"name": "descriptor",
"type": "address"
}
],
"name": "NFTDescriptorSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [],
"name": "PendingGovernorAccepted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "pendingGovernor",
"type": "address"
}
],
"name": "PendingGovernorSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [],
"name": "DOMAIN_SEPARATOR",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "MULTI_PERMISSION_PERMIT_TYPEHASH",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "PERMISSION_PERMIT_TYPEHASH",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "PERMISSION_SET_TYPEHASH",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "PERMIT_TYPEHASH",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "POSITION_PERMISSIONS_TYPEHASH",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "acceptPendingGovernor",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "approve",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_id",
"type": "uint256"
}
],
"name": "burn",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getApproved",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "governor",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_id",
"type": "uint256"
},
{
"internalType": "address",
"name": "_address",
"type": "address"
},
{
"internalType": "enum IDCAPermissionManager.Permission",
"name": "_permission",
"type": "uint8"
}
],
"name": "hasPermission",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_id",
"type": "uint256"
},
{
"internalType": "address",
"name": "_address",
"type": "address"
},
{
"internalType": "enum IDCAPermissionManager.Permission[]",
"name": "_permissions",
"type": "uint8[]"
}
],
"name": "hasPermissions",
"outputs": [
{
"internalType": "bool[]",
"name": "_hasPermissions",
"type": "bool[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "hub",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "isApprovedForAll",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_account",
"type": "address"
}
],
"name": "isGovernor",
"outputs": [
{
"internalType": "bool",
"name": "_isGovernor",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_account",
"type": "address"
}
],
"name": "isPendingGovernor",
"outputs": [
{
"internalType": "bool",
"name": "_isPendingGovernor",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "lastOwnershipChange",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_id",
"type": "uint256"
},
{
"internalType": "address",
"name": "_owner",
"type": "address"
},
{
"components": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "enum IDCAPermissionManager.Permission[]",
"name": "permissions",
"type": "uint8[]"
}
],
"internalType": "struct IDCAPermissionManager.PermissionSet[]",
"name": "_permissions",
"type": "tuple[]"
}
],
"name": "mint",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_id",
"type": "uint256"
},
{
"components": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "enum IDCAPermissionManager.Permission[]",
"name": "permissions",
"type": "uint8[]"
}
],
"internalType": "struct IDCAPermissionManager.PermissionSet[]",
"name": "_permissions",
"type": "tuple[]"
}
],
"name": "modify",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"components": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "enum IDCAPermissionManager.Permission[]",
"name": "permissions",
"type": "uint8[]"
}
],
"internalType": "struct IDCAPermissionManager.PermissionSet[]",
"name": "permissionSets",
"type": "tuple[]"
}
],
"internalType": "struct IDCAPermissionManager.PositionPermissions[]",
"name": "_permissions",
"type": "tuple[]"
}
],
"name": "modifyMany",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"components": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "enum IDCAPermissionManager.Permission[]",
"name": "permissions",
"type": "uint8[]"
}
],
"internalType": "struct IDCAPermissionManager.PermissionSet[]",
"name": "permissionSets",
"type": "tuple[]"
}
],
"internalType": "struct IDCAPermissionManager.PositionPermissions[]",
"name": "_permissions",
"type": "tuple[]"
},
{
"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": "multiPermissionPermit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "nftDescriptor",
"outputs": [
{
"internalType": "contract IDCAHubPositionDescriptor",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "nonces",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ownerOf",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "pendingGovernor",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "enum IDCAPermissionManager.Permission[]",
"name": "permissions",
"type": "uint8[]"
}
],
"internalType": "struct IDCAPermissionManager.PermissionSet[]",
"name": "_permissions",
"type": "tuple[]"
},
{
"internalType": "uint256",
"name": "_tokenId",
"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": "permissionPermit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "_tokenId",
"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": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "setApprovalForAll",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_hub",
"type": "address"
}
],
"name": "setHub",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IDCAHubPositionDescriptor",
"name": "_descriptor",
"type": "address"
}
],
"name": "setNFTDescriptor",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "__pendingGovernor",
"type": "address"
}
],
"name": "setPendingGovernor",
"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": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "tokenPermissions",
"outputs": [
{
"internalType": "uint8",
"name": "permissions",
"type": "uint8"
},
{
"internalType": "uint248",
"name": "lastUpdated",
"type": "uint248"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "tokenURI",
"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": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x6101406040523480156200001257600080fd5b5060405162003ddc38038062003ddc833981016040819052620000359162000266565b816040518060400160405280601b81526020017f4d65616e2046696e616e6365202d2044434120506f736974696f6e0000000000815250604051806040016040528060018152602001601960f91b8152506040518060400160405280601b81526020017f4d65616e2046696e616e6365202d2044434120506f736974696f6e00000000008152506040518060400160405280600881526020016704d462d4443412d560c41b8152508160009081620000ee91906200034a565b506001620000fd82826200034a565b5050825160209384012082519284019290922060e08390526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818901819052818301979097526060810194909452608080850193909352308483018190528151808603909301835260c09485019091528151919096012090529290925261012052506001600160a01b038116620001ea5760405162461bcd60e51b815260206004820152601860248201527f476f7665726e61626c653a207a65726f20616464726573730000000000000000604482015260640160405180910390fd5b600680546001600160a01b0319166001600160a01b039283161790558116620002265760405163d92e233d60e01b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b03929092169190911790555062000416565b6001600160a01b03811681146200026357600080fd5b50565b600080604083850312156200027a57600080fd5b825162000287816200024d565b60208401519092506200029a816200024d565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620002d057607f821691505b602082108103620002f157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200034557600081815260208120601f850160051c81016020861015620003205750805b601f850160051c820191505b8181101562000341578281556001016200032c565b5050505b505050565b81516001600160401b03811115620003665762000366620002a5565b6200037e81620003778454620002bb565b84620002f7565b602080601f831160018114620003b657600084156200039d5750858301515b600019600386901b1c1916600185901b17855562000341565b600085815260208120601f198616915b82811015620003e757888601518255948401946001909101908401620003c6565b5085821015620004065787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516101005161012051613976620004666000396000611e9501526000611ee401526000611ebf01526000611e1801526000611e4201526000611e6c01526139766000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c8063551e123b11610186578063a3ca2fb7116100e3578063e1fc815d11610097578063e985e9c511610071578063e985e9c5146106e8578063eef9f66714610724578063f235757f1461074b57600080fd5b8063e1fc815d1461068e578063e3056a34146106b5578063e43581b8146106c657600080fd5b8063b88d4fde116100c8578063b88d4fde14610646578063c87b56dd14610659578063df08aed51461066c57600080fd5b8063a3ca2fb7146105ff578063b3d23ffc1461062657600080fd5b80637ecebe001161013a57806393f03eed1161011f57806393f03eed1461055557806395d89b41146105e4578063a22cb465146105ec57600080fd5b80637ecebe0014610522578063823abfd91461054257600080fd5b806370a082311161016b57806370a08231146104e95780637ac2ff7b146104fc5780637cad6cd11461050f57600080fd5b8063551e123b146104b65780636352211e146104d657600080fd5b806330adf81f1161023f5780633dff0587116101f357806344267570116101cd578063442675701461047d5780634bab5900146104905780634faa3883146104a357600080fd5b80633dff05871461044457806342842e0e1461045757806342966c681461046a57600080fd5b80633644e515116102245780633644e51514610416578063365a86fc1461041e57806336b350981461043157600080fd5b806330adf81f146103dc57806331962cdc1461040357600080fd5b80630c340a241161029657806318160ddd1161027b57806318160ddd1461038c57806323b872dd146103a257806327d70dca146103b557600080fd5b80630c340a241461037357806313f6986d1461038457600080fd5b8063081812fc116102c7578063081812fc14610320578063095ea7b31461034b5780630b7d48201461036057600080fd5b806301ffc9a7146102e357806306fdde031461030b575b600080fd5b6102f66102f1366004612d4d565b61075e565b60405190151581526020015b60405180910390f35b610313610843565b6040516103029190612dba565b61033361032e366004612dcd565b6108d5565b6040516001600160a01b039091168152602001610302565b61035e610359366004612dfb565b6108fc565b005b61035e61036e366004612e73565b610a50565b6006546001600160a01b0316610333565b61035e610aae565b610394610b38565b604051908152602001610302565b61035e6103b0366004612ebf565b610bd2565b6103947fd9daa4fe1723edf458fc13a2d7c6e9147a88485b7932c0ada7e0dd16445f0dda81565b6103947f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b61035e610411366004612f00565b610c59565b610394610d16565b600954610333906001600160a01b031681565b61035e61043f366004612f1d565b610d20565b61035e610452366004612f8f565b610d7f565b61035e610465366004612ebf565b610fcf565b61035e610478366004612dcd565b610fea565b600854610333906001600160a01b031681565b61035e61049e366004612ffe565b61104d565b61035e6104b1366004613040565b6110ba565b6104c96104c4366004612f1d565b611214565b60405161030291906130ba565b6103336104e4366004612dcd565b6113b9565b6103946104f7366004612f00565b61141e565b61035e61050a366004613100565b6114b8565b61035e61051d366004612f00565b611618565b610394610530366004612f00565b600a6020526000908152604090205481565b6102f6610550366004613169565b61171f565b6105ab6105633660046131a7565b600c60209081526000928352604080842090915290825290205460ff81169061010090047effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1682565b6040805160ff90931683527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909116602083015201610302565b610313611803565b61035e6105fa3660046131d7565b611812565b6103947fd9f7585827547d4263e0fecc979ffc22c3a65181bb37e3f6662286db9d99709581565b610394610634366004612dcd565b600b6020526000908152604090205481565b61035e6106543660046132bb565b611821565b610313610667366004612dcd565b6118a9565b6102f661067a366004612f00565b6007546001600160a01b0391821691161490565b6103947f5922b2c51ed135e5c892d4fa1b63ad30a4a2c7e7bfc895ee28a38b6e8899962781565b6007546001600160a01b0316610333565b6102f66106d4366004612f00565b6006546001600160a01b0391821691161490565b6102f66106f636600461336a565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6103947f6d0b84f6e69412079eff7b36abc54c5c403692e5d353a7c5546b8d3d9237109b81565b61035e610759366004612f00565b611942565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806107f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061083d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461085290613398565b80601f016020809104026020016040519081016040528092919081815260200182805461087e90613398565b80156108cb5780601f106108a0576101008083540402835291602001916108cb565b820191906000526020600020905b8154815290600101906020018083116108ae57829003601f168201915b5050505050905090565b60006108e0826119a8565b506000908152600460205260409020546001600160a01b031690565b6000610907826113b9565b9050806001600160a01b0316836001600160a01b0316036109955760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b03821614806109cf57506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610a415760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000606482015260840161098c565b610a4b8383611a0c565b505050565b610a59836113b9565b6001600160a01b0316336001600160a01b031614610aa3576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a4b838383611a92565b6007546001600160a01b03163314610b2e5760405162461bcd60e51b815260206004820152602160248201527f476f7665726e61626c653a206f6e6c792070656e64696e6720676f7665726e6f60448201527f7200000000000000000000000000000000000000000000000000000000000000606482015260840161098c565b610b36611add565b565b600d54600954604080517f366395800000000000000000000000000000000000000000000000000000000081529051600093926001600160a01b03169163366395809160048083019260209291908290030181865afa158015610b9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc391906133e5565b610bcd919061342d565b905090565b610bdc3382611b9d565b610c4e5760405162461bcd60e51b815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f766564000000000000000000000000000000000000606482015260840161098c565b610a4b838383611c1b565b6001600160a01b038116610c99576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6009546001600160a01b031615610cdc576040517f79fb96cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000610bcd611e0b565b6009546001600160a01b03163314610d64576040517ffc88f3b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d6e8385611f32565b610d79848383612098565b50505050565b83421115610db9576040517ff87d927100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610de987876000818110610dd157610dd1613440565b9050602002810190610de3919061346f565b356113b9565b905060007fd9f7585827547d4263e0fecc979ffc22c3a65181bb37e3f6662286db9d997095610e188989612197565b80516020918201206001600160a01b0385166000908152600a9092526040822080549192610e45836134ad565b9091555060408051602081019490945283019190915260608201526080810187905260a0016040516020818303038152906040528051906020012090506000610e8d82612208565b90506000610e9d82888888612271565b9050836001600160a01b0316816001600160a01b031614610eea576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b89811015610fc25760008b8b83818110610f0957610f09613440565b9050602002810190610f1b919061346f565b3590508115610f7e576000610f2f826113b9565b9050806001600160a01b0316846001600160a01b031614610f7c576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b610fb9818d8d85818110610f9457610f94613440565b9050602002810190610fa6919061346f565b610fb49060208101906134e5565b611a92565b50600101610eed565b5050505050505050505050565b610a4b83838360405180602001604052806000815250611821565b6009546001600160a01b0316331461102e576040517ffc88f3b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61103781612299565b600d60008154611046906134ad565b9091555050565b60005b81811015610a4b576110b283838381811061106d5761106d613440565b905060200281019061107f919061346f565b3584848481811061109257611092613440565b90506020028101906110a4919061346f565b61036e9060208101906134e5565b600101611050565b834211156110f4576040517ff87d927100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110ff866113b9565b905060007f5922b2c51ed135e5c892d4fa1b63ad30a4a2c7e7bfc895ee28a38b6e8899962761112e8a8a612358565b80516020918201206001600160a01b0385166000908152600a90925260408220805491928b92919061115f836134ad565b909155506040805160208101959095528401929092526060830152608082015260a0810187905260c00160405160208183030381529060405280519060200120905060006111ac82612208565b905060006111bc82888888612271565b9050836001600160a01b0316816001600160a01b031614611209576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc2898c8c611a92565b60608167ffffffffffffffff81111561122f5761122f61320a565b604051908082528060200260200182016040528015611258578160200160208202803683370190505b509050836001600160a01b031661126e866113b9565b6001600160a01b0316036112c35760005b828110156112bd57600182828151811061129b5761129b613440565b91151560209283029190910190910152806112b5816134ad565b91505061127f565b506113b1565b6000858152600c602090815260408083206001600160a01b0388168452825280832081518083018352905460ff8116825261010090047effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16818401819052898552600b90935292205410156113af5760005b838110156113ad5761137185858381811061135157611351613440565b9050602002016020810190611366919061354d565b835160ff16906123c2565b1561139b57600183828151811061138a5761138a613440565b911515602092830291909101909101525b806113a5816134ad565b915050611334565b505b505b949350505050565b6000818152600260205260408120546001600160a01b03168061083d5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e2049440000000000000000604482015260640161098c565b60006001600160a01b03821661149c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e65720000000000000000000000000000000000000000000000606482015260840161098c565b506001600160a01b031660009081526003602052604090205490565b834211156114f2576040517ff87d927100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114fd866113b9565b6001600160a01b0381166000908152600a60205260408120805492935090917f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad918a918a918561154c836134ad565b909155506040805160208101959095526001600160a01b03909316928401929092526060830152608082015260a0810187905260c00160405160208183030381529060405280519060200120905060006115a582612208565b905060006115b582888888612271565b9050836001600160a01b0316816001600160a01b031614611602576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61160c8a8a611a0c565b50505050505050505050565b6006546001600160a01b031633146116725760405162461bcd60e51b815260206004820152601960248201527f476f7665726e61626c653a206f6e6c7920676f7665726e6f7200000000000000604482015260640161098c565b6001600160a01b0381166116b2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527f58a2b9171063c6d38177053178bc1844b920884b05d7c9126c480d86b0716bce906020015b60405180910390a150565b6000826001600160a01b0316611734856113b9565b6001600160a01b03160361174a575060016117fc565b6000848152600c602090815260408083206001600160a01b038716845282529182902082518084019093525460ff81168084526101009091047effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16918301919091526117b590846123c2565b80156117f8575080602001517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600b600087815260200190815260200160002054105b9150505b9392505050565b60606001805461085290613398565b61181d3383836123ef565b5050565b61182b3383611b9d565b61189d5760405162461bcd60e51b815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f766564000000000000000000000000000000000000606482015260840161098c565b610d79848484846124db565b6008546009546040517fe9dc63750000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101849052606092919091169063e9dc637590604401600060405180830381865afa15801561191a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261083d9190810190613568565b6006546001600160a01b0316331461199c5760405162461bcd60e51b815260206004820152601960248201527f476f7665726e61626c653a206f6e6c7920676f7665726e6f7200000000000000604482015260640161098c565b6119a581612564565b50565b6000818152600260205260409020546001600160a01b03166119a55760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e2049440000000000000000604482015260640161098c565b600081815260046020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091558190611a59826113b9565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611a9d838383612098565b7f5015559e4f379aa0dd2effee572c916b09bb68ed41ad9ab127c8066f052e1643838383604051611ad09392919061360e565b60405180910390a1505050565b6007546001600160a01b0316611b355760405162461bcd60e51b815260206004820152601f60248201527f476f7665726e61626c653a206e6f2070656e64696e6720676f7665726e6f7200604482015260640161098c565b60078054600680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b038416179091551690556040517fdc57ca23c46d823853915ed5a090ca0ee9db5eb6a46f5c58e1c9158de861fd7690600090a1565b600080611ba9836113b9565b9050806001600160a01b0316846001600160a01b03161480611bf057506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806113b15750836001600160a01b0316611c09846108d5565b6001600160a01b031614949350505050565b826001600160a01b0316611c2e826113b9565b6001600160a01b031614611caa5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e6572000000000000000000000000000000000000000000000000000000606482015260840161098c565b6001600160a01b038216611d255760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161098c565b611d30838383612620565b611d3b600082611a0c565b6001600160a01b0383166000908152600360205260408120805460019290611d6490849061342d565b90915550506001600160a01b0382166000908152600360205260408120805460019290611d929084906137ab565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611e6457507f000000000000000000000000000000000000000000000000000000000000000046145b15611e8e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6001600160a01b038216611f885760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161098c565b6000818152600260205260409020546001600160a01b031615611fed5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161098c565b611ff960008383612620565b6001600160a01b03821660009081526003602052604081208054600192906120229084906137ab565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b4360005b828110156121905760008484838181106120b8576120b8613440565b90506020028101906120ca919061346f565b6120d3906137be565b905080602001515160000361210b576000868152600c6020908152604080832084516001600160a01b03168452909152812055612187565b60405180604001604052806121238360200151612665565b60ff90811682527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80871660209384015260008a8152600c8452604080822087516001600160a01b031683528552902084519490930151166101000292169190911790555b5060010161209c565b5050505050565b606060005b8281101561220157816121d18585848181106121ba576121ba613440565b90506020028101906121cc919061346f565b6126b9565b80516020918201206040516121e7939201613888565b60408051601f19818403018152919052915060010161219c565b5092915050565b600061083d612215611e0b565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b600080600061228287878787612731565b9150915061228f8161281e565b5095945050505050565b60006122a4826113b9565b90506122b281600084612620565b6122bd600083611a0c565b6001600160a01b03811660009081526003602052604081208054600192906122e690849061342d565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b606060005b82811015612201578161239285858481811061237b5761237b613440565b905060200281019061238d919061346f565b612a0a565b80516020918201206040516123a8939201613888565b60408051601f19818403018152919052915060010161235d565b6000808260038111156123d7576123d76135df565b600160ff9182161b9490941690931615159392505050565b816001600160a01b0316836001600160a01b0316036124505760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161098c565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6124e6848484611c1b565b6124f284848484612a80565b610d795760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161098c565b6001600160a01b0381166125ba5760405162461bcd60e51b815260206004820152601860248201527f476f7665726e61626c653a207a65726f20616464726573730000000000000000604482015260640161098c565b600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527f56bddfa0cee9697cebddf9acd7f23dc6583663b05e007b877056d05017994def90602001611714565b6001600160a01b038216612641576000908152600b60205260408120555050565b6001600160a01b03831615610a4b57436000828152600b6020526040902055505050565b6000805b82518110156126b35782818151811061268457612684613440565b6020026020010151600381111561269d5761269d6135df565b600160ff9190911681901b929092179101612669565b50919050565b60607f6d0b84f6e69412079eff7b36abc54c5c403692e5d353a7c5546b8d3d9237109b82356126f36126ee60208601866134e5565b612358565b805160209182012060405161271b949392019283526020830191909152604082015260600190565b6040516020818303038152906040529050919050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156127685750600090506003612815565b8460ff16601b1415801561278057508460ff16601c14155b156127915750600090506004612815565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156127e5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661280e57600060019250925050612815565b9150600090505b94509492505050565b6000816004811115612832576128326135df565b0361283a5750565b600181600481111561284e5761284e6135df565b0361289b5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161098c565b60028160048111156128af576128af6135df565b036128fc5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161098c565b6003816004811115612910576129106135df565b036129835760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161098c565b6004816004811115612997576129976135df565b036119a55760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161098c565b60607fd9daa4fe1723edf458fc13a2d7c6e9147a88485b7932c0ada7e0dd16445f0dda612a3a6020840184612f00565b612a4f612a4a60208601866134e5565b612c1e565b805160209182012060405161271b949392019283526001600160a01b03919091166020830152604082015260600190565b60006001600160a01b0384163b15612c16576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290612add9033908990889088906004016138aa565b6020604051808303816000875af1925050508015612b18575060408051601f3d908101601f19168201909252612b15918101906138e6565b60015b612bcb573d808015612b46576040519150601f19603f3d011682016040523d82523d6000602084013e612b4b565b606091505b508051600003612bc35760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161098c565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490506113b1565b5060016113b1565b6060612c2b826020613903565b67ffffffffffffffff811115612c4357612c4361320a565b6040519080825280601f01601f191660200182016040528015612c6d576020820181803683370190505b50905060005b8281101561220157838382818110612c8d57612c8d613440565b9050602002016020810190612ca2919061354d565b6003811115612cb357612cb36135df565b60f81b826001612cc384826137ab565b612cce906020613903565b612cd8919061342d565b81518110612ce857612ce8613440565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101612c73565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146119a557600080fd5b600060208284031215612d5f57600080fd5b81356117fc81612d1f565b60005b83811015612d85578181015183820152602001612d6d565b50506000910152565b60008151808452612da6816020860160208601612d6a565b601f01601f19169290920160200192915050565b6020815260006117fc6020830184612d8e565b600060208284031215612ddf57600080fd5b5035919050565b6001600160a01b03811681146119a557600080fd5b60008060408385031215612e0e57600080fd5b8235612e1981612de6565b946020939093013593505050565b60008083601f840112612e3957600080fd5b50813567ffffffffffffffff811115612e5157600080fd5b6020830191508360208260051b8501011115612e6c57600080fd5b9250929050565b600080600060408486031215612e8857600080fd5b83359250602084013567ffffffffffffffff811115612ea657600080fd5b612eb286828701612e27565b9497909650939450505050565b600080600060608486031215612ed457600080fd5b8335612edf81612de6565b92506020840135612eef81612de6565b929592945050506040919091013590565b600060208284031215612f1257600080fd5b81356117fc81612de6565b60008060008060608587031215612f3357600080fd5b843593506020850135612f4581612de6565b9250604085013567ffffffffffffffff811115612f6157600080fd5b612f6d87828801612e27565b95989497509550505050565b803560ff81168114612f8a57600080fd5b919050565b60008060008060008060a08789031215612fa857600080fd5b863567ffffffffffffffff811115612fbf57600080fd5b612fcb89828a01612e27565b90975095505060208701359350612fe460408801612f79565b925060608701359150608087013590509295509