0 txs
0 calls
constructor
constructor(address registrar_, address voter_, address rewardsDistributor_)
functions
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
FACTORY_MANAGER_ROLE
viewfunction FACTORY_MANAGER_ROLE() view returns (bytes32)
getMinimumFunds
viewfunction getMinimumFunds(bytes1 operations, uint256 poolLength) view returns (uint96)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getUserAutomations
viewfunction getUserAutomations(address user) view returns (address[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isAutomation
viewfunction isAutomation(address) view returns (bool)
registrar
viewfunction registrar() view returns (address)
rewardsDistributor
viewfunction rewardsDistributor() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
tokenIdToAutomation
viewfunction tokenIdToAutomation(uint256) view returns (address)
voter
viewfunction voter() view returns (address)
createAutomation
nonpayablefunction createAutomation(uint256 tokenId, uint256 startTimestamp, bytes1 operations, address[] pools, uint256[] weights) returns (address automation)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setChainlinkRegistrar
nonpayablefunction setChainlinkRegistrar(address registrar_)
setRewardsDistributor
nonpayablefunction setRewardsDistributor(address rewardsDistributor_)
setVoter
nonpayablefunction setVoter(address voter_)
events
CreateAutomation
event CreateAutomation(address indexed user, uint256 indexed tokenId, address indexed automation, bytes1 operations, uint256 startTimestamp, address[] pools, uint256[] weights)
RegistrarUpdated
event RegistrarUpdated(address registrar)
RewardsDistributorUpdated
event RewardsDistributorUpdated(address rewardsDistributor)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
VoterUpdated
event VoterUpdated(address voter)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AutomationExist
error AutomationExist()
DiffLength
error DiffLength()
NoOperations
error NoOperations()
NotOwnerNorApproved
error NotOwnerNorApproved()
PastTime
error PastTime()
ZeroAddress
error ZeroAddress()
ZeroPoolLength
error ZeroPoolLength()
creation bytecode
0x60806040523480156200001157600080fd5b506040516200501538038062005015833981016040819052620000349162000154565b600180546001600160a01b038086166001600160a01b0319928316179092556002805485841690831617905560038054928416929091169190911790556200007e60003362000088565b505050506200019e565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166200012d576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620000e43390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000131565b5060005b92915050565b80516001600160a01b03811681146200014f57600080fd5b919050565b6000806000606084860312156200016a57600080fd5b620001758462000137565b9250620001856020850162000137565b9150620001956040850162000137565b90509250925092565b614e6780620001ae6000396000f3fe60806040523480156200001157600080fd5b50600436106200016b5760003560e01c8063645acf3f11620000dd578063c5e6115a116200008b578063d09581bf116200006e578063d09581bf1462000387578063d1f5c33b14620003b3578063d547741f14620003ca57600080fd5b8063c5e6115a146200033b578063cf175ddb146200037057600080fd5b806391d1485411620000c057806391d1485414620002d25780639c47e361146200030c578063a217fddf146200033257600080fd5b8063645acf3f14620002935780637929098414620002aa57600080fd5b80632f2ff15d116200013b5780633f2a5540116200011e5780633f2a5540146200025457806346c96aac14620002685780634bc2a657146200027c57600080fd5b80632f2ff15d146200022457806336568abe146200023d57600080fd5b8062504957146200017057806301ffc9a714620001ab578063248a9ca314620001c25780632b20e39714620001f7575b600080fd5b620001966200018136600462000ee3565b60056020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b62000196620001bc36600462000f0a565b620003e1565b620001e8620001d336600462000f36565b60009081526020819052604090206001015490565b604051908152602001620001a2565b6001546200020b906001600160a01b031681565b6040516001600160a01b039091168152602001620001a2565b6200023b6200023536600462000f50565b62000419565b005b6200023b6200024e36600462000f50565b62000448565b6003546200020b906001600160a01b031681565b6002546200020b906001600160a01b031681565b6200023b6200028d36600462000ee3565b62000483565b6200023b620002a436600462000ee3565b6200052d565b620001e87f9b2f137bc88b700af79ecf553ccb8185253aaa5c3a036210590647de1f4528b981565b62000196620002e336600462000f50565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b620003236200031d36600462000ee3565b620005d0565b604051620001a2919062000f83565b620001e8600081565b620003526200034c36600462001008565b62000794565b6040516bffffffffffffffffffffffff9091168152602001620001a2565b6200020b6200038136600462001084565b620008d9565b6200020b6200039836600462000f36565b6004602052600090815260409020546001600160a01b031681565b6200023b620003c436600462000ee3565b62000bb9565b6200023b620003db36600462000f50565b62000c5c565b60006001600160e01b03198216637965db0b60e01b14806200041357506301ffc9a760e01b6001600160e01b03198316145b92915050565b600082815260208190526040902060010154620004368162000c85565b62000442838362000c94565b50505050565b6001600160a01b0381163314620004725760405163334bd91960e11b815260040160405180910390fd5b6200047e828262000d42565b505050565b7f9b2f137bc88b700af79ecf553ccb8185253aaa5c3a036210590647de1f4528b9620004af8162000c85565b6001600160a01b038216620004d75760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0384169081179091556040519081527f452a1bea58b8e4d443d5b0865906cc360f45aae2ee5103ee1cadec26965bc073906020015b60405180910390a15050565b7f9b2f137bc88b700af79ecf553ccb8185253aaa5c3a036210590647de1f4528b9620005598162000c85565b6001600160a01b038216620005815760405163d92e233d60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0384169081179091556040519081527fe696533f02cb3abcaaf5e85cd893de5abf147a82fd1496ddd3e5219da0a664379060200162000521565b6040516370a0823160e01b81526001600160a01b038216600482015260609060009073fbbf371c9b0b994eebfcc977cef603f7f31c070d906370a0823190602401602060405180830381865afa1580156200062f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000655919062001121565b905060008167ffffffffffffffff8111156200067557620006756200113b565b6040519080825280602002602001820160405280156200069f578160200160208202803683370190505b50905060005b828110156200078c57604051632f745c5960e01b81526001600160a01b03861660048201526024810182905260009073fbbf371c9b0b994eebfcc977cef603f7f31c070d90632f745c5990604401602060405180830381865afa15801562000711573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000737919062001121565b60008181526004602052604090205484519192506001600160a01b0316908490849081106200076a576200076a62001151565b6001600160a01b039092166020928302919091019091015250600101620006a5565b509392505050565b6000600160fa1b831615801590620007aa575081155b15620007c95760405163502e0c8160e11b815260040160405180910390fd5b6000620007d7848462000dc7565b90506000600160009054906101000a90046001600160a01b03166001600160a01b031663c3f909d46040518163ffffffff1660e01b81526004016040805180830381865afa1580156200082e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000854919062001167565b506040516316daa9c760e21b81526000600482015263ffffffff841660248201529091506001600160a01b03821690635b6aa71c90604401602060405180830381865afa158015620008aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008d0919062001198565b95945050505050565b60405163430c208160e01b81523360048201526024810188905260009073fbbf371c9b0b994eebfcc977cef603f7f31c070d9063430c208190604401602060405180830381865afa15801562000933573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009599190620011c8565b620009775760405163096dcfe360e31b815260040160405180910390fd5b506000878152600460205260409020546001600160a01b0316801562000a2057806001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015620009d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009fc9190620011ec565b60ff1660031462000a205760405163fee42c9160e01b815260040160405180910390fd5b600160fa1b86161580159062000a34575083155b1562000a535760405163502e0c8160e11b815260040160405180910390fd5b83821462000a745760405163b9f2e73960e01b815260040160405180910390fd5b7fff00000000000000000000000000000000000000000000000000000000000000861660000362000ab857604051631216510560e31b815260040160405180910390fd5b4287101562000ada576040516321282cc360e21b815260040160405180910390fd5b8787878787878760405162000aef9062000ebf565b62000b019796959493929190620012aa565b604051809103906000f08015801562000b1e573d6000803e3d6000fd5b50600089815260046020908152604080832080546001600160a01b0319166001600160a01b038616908117909155808452600590925291829020805460ff19166001179055905191925090899033907f145a34339f13c420a47291c4902cd3a05e2ec340bdf99714f6add3eb4d3dceae9062000ba6908b908d908c908c908c908c90620012fb565b60405180910390a4979650505050505050565b7f9b2f137bc88b700af79ecf553ccb8185253aaa5c3a036210590647de1f4528b962000be58162000c85565b6001600160a01b03821662000c0d5760405163d92e233d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0384169081179091556040519081527f1cc0d0fcd88df90cde5f20b27b655722f28afe56a6384c3c7a339ec18564c4399060200162000521565b60008281526020819052604090206001015462000c798162000c85565b62000442838362000d42565b62000c91813362000e63565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1662000d39576000838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905562000cf03390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000413565b50600062000413565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161562000d39576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600162000413565b600080600160f81b84161562000de95762000de66206ddd0826200135b565b90505b600160f91b84161562000e085762000e0562027100826200135b565b90505b600160fa1b84161562000e425762000e24836201fbd062001382565b62000e3390620271006200135b565b62000e3f90826200135b565b90505b62000e4f600a82620013ad565b62000e5b90826200135b565b949350505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000ebb5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440160405180910390fd5b5050565b613a5280620013e083390190565b6001600160a01b038116811462000c9157600080fd5b60006020828403121562000ef657600080fd5b813562000f038162000ecd565b9392505050565b60006020828403121562000f1d57600080fd5b81356001600160e01b03198116811462000f0357600080fd5b60006020828403121562000f4957600080fd5b5035919050565b6000806040838503121562000f6457600080fd5b82359150602083013562000f788162000ecd565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b8181101562000fc65783516001600160a01b03168352928401929184019160010162000f9f565b50909695505050505050565b80357fff00000000000000000000000000000000000000000000000000000000000000811681146200100357600080fd5b919050565b600080604083850312156200101c57600080fd5b620010278362000fd2565b946020939093013593505050565b60008083601f8401126200104857600080fd5b50813567ffffffffffffffff8111156200106157600080fd5b6020830191508360208260051b85010111156200107d57600080fd5b9250929050565b600080600080600080600060a0888a031215620010a057600080fd5b8735965060208801359550620010b96040890162000fd2565b9450606088013567ffffffffffffffff80821115620010d757600080fd5b620010e58b838c0162001035565b909650945060808a0135915080821115620010ff57600080fd5b506200110e8a828b0162001035565b989b979a50959850939692959293505050565b6000602082840312156200113457600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600080604083850312156200117b57600080fd5b8251620011888162000ecd565b6020939093015192949293505050565b600060208284031215620011ab57600080fd5b81516bffffffffffffffffffffffff8116811462000f0357600080fd5b600060208284031215620011db57600080fd5b8151801515811462000f0357600080fd5b600060208284031215620011ff57600080fd5b815160ff8116811462000f0357600080fd5b8183526000602080850194508260005b8581101562001253578135620012378162000ecd565b6001600160a01b03168752958201959082019060010162001221565b509495945050505050565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156200129157600080fd5b8260051b80836020870137939093016020019392505050565b87815286602082015260ff60f81b8616604082015260a060608201526000620012d860a08301868862001211565b8281036080840152620012ed8185876200125e565b9a9950505050505050505050565b60ff60f81b871681528560208201526080604082015260006200132360808301868862001211565b8281036060840152620013388185876200125e565b9998505050505050505050565b634e487b7160e01b600052601160045260246000fd5b63ffffffff8181168382160190808211156200137b576200137b62001345565b5092915050565b63ffffffff818116838216028082169190828114620013a557620013a562001345565b505092915050565b600063ffffffff80841680620013d357634e487b7160e01b600052601260045260246000fd5b9216919091049291505056fe60c06040526311e1a3006007556008805463ffffffff1916620f42401790553480156200002b57600080fd5b5060405162003a5238038062003a528339810160408190526200004e9162000326565b60016000553360805260a08590526200006b62093a80856200044b565b6003556004805460ff191660f885901c17905581516200009390600590602085019062000181565b508051620000a9906006906020840190620001eb565b50620000bd838351620000e360201b60201c565b6008805463ffffffff191663ffffffff9290921691909117905550620004e59350505050565b600080600160f81b8416156200010557620001026206ddd08262000461565b90505b600160f91b841615620001245762000121620271008262000461565b90505b600160fa1b8416156200015e5762000140836201fbd062000488565b6200014f906202710062000461565b6200015b908262000461565b90505b6200016b600a82620004b3565b62000177908262000461565b9150505b92915050565b828054828255906000526020600020908101928215620001d9579160200282015b82811115620001d957825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620001a2565b50620001e792915062000229565b5090565b828054828255906000526020600020908101928215620001d9579160200282015b82811115620001d95782518255916020019190600101906200020c565b5b80821115620001e757600081556001016200022a565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562000281576200028162000240565b604052919050565b60006001600160401b03821115620002a557620002a562000240565b5060051b60200190565b600082601f830112620002c157600080fd5b81516020620002da620002d48362000289565b62000256565b8083825260208201915060208460051b870101935086841115620002fd57600080fd5b602086015b848110156200031b578051835291830191830162000302565b509695505050505050565b600080600080600060a086880312156200033f57600080fd5b855194506020808701519450604087015160ff60f81b811681146200036357600080fd5b60608801519094506001600160401b03808211156200038157600080fd5b818901915089601f8301126200039657600080fd5b8151620003a7620002d48262000289565b81815260059190911b8301840190848101908c831115620003c757600080fd5b938501935b82851015620003fe5784516001600160a01b0381168114620003ee5760008081fd5b82529385019390850190620003cc565b60808c015190975094505050808311156200041857600080fd5b50506200042888828901620002af565b9150509295509295909350565b634e487b7160e01b600052601160045260246000fd5b818103818111156200017b576200017b62000435565b63ffffffff81811683821601908082111562000481576200048162000435565b5092915050565b63ffffffff818116838216028082169190828114620004ab57620004ab62000435565b505092915050565b600063ffffffff80841680620004d957634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b60805160a0516134d76200057b600039600081816102890152818161077e0152818161088101528181610af201528181610d130152818161137c0152818161159e0152818161195b015281816119cc01528181611aa401528181611d5101528181611de501528181611e860152612267015260008181610465015281816123df015281816124df015261253f01526134d76000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c80638456cb5911610145578063d2aa789f116100bd578063ea8a1af01161008c578063f645d4f911610071578063f645d4f9146104ec578063f7b8a51f14610504578063f909d60d1461050c57600080fd5b8063ea8a1af0146104d1578063ee19b5ba146104d957600080fd5b8063d2aa789f1461049a578063d2fa635e146104a3578063df6824cd146104b6578063e4fae4e4146104c957600080fd5b8063ac4afa3811610114578063b9998a24116100f9578063b9998a241461044d578063c45a015514610460578063cd3cdd521461048757600080fd5b8063ac4afa3814610427578063b5f163ff1461043a57600080fd5b80638456cb59146103df57806389facb20146103e75780638b33b4b2146103f1578063a9ea1f801461041757600080fd5b80633f4ba83a116101d85780636e04ff0d116101a7578063762187a61161018c578063762187a61461038a5780637b103999146103925780637e9ffc9e146103b257600080fd5b80636e04ff0d1461036057806373b379bd1461038157600080fd5b80633f4ba83a1461031f5780634585e33b1461032757806362b8d6931461033a57806368742da61461034d57600080fd5b8063200d2ed211610214578063200d2ed2146102d157806330e7c992146102eb5780633cd90518146103005780633de39c111461031657600080fd5b806306fdde031461024657806312065fe01461026457806317d70f7c1461028457806319d40b08146102b9575b600080fd5b61024e610514565b60405161025b9190612c54565b60405180910390f35b61026c610523565b6040516001600160601b03909116815260200161025b565b6102ab7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161025b565b6102c16105ad565b604051901515815260200161025b565b6102d96105b8565b60405160ff909116815260200161025b565b6102fe6102f9366004612c67565b6105d2565b005b610308610637565b60405161025b929190612c8d565b6102ab60075481565b6102fe6106f4565b6102fe610335366004612d11565b6107e2565b6102fe610348366004612d83565b6108d5565b6102fe61035b366004612db1565b610945565b61037361036e366004612d11565b610bf5565b60405161025b929190612dce565b6102ab60035481565b6102ab603281565b61039a610c7e565b6040516001600160a01b03909116815260200161025b565b6008546103ca90640100000000900463ffffffff1681565b60405163ffffffff909116815260200161025b565b6102fe610c88565b6102ab62093a8081565b6004546103fe9060f81b81565b6040516001600160f81b0319909116815260200161025b565b6008546103ca9063ffffffff1681565b61039a610435366004612d83565b610d6d565b6102ab610448366004612d83565b610d97565b6102fe61045b366004612db1565b610db8565b61039a7f000000000000000000000000000000000000000000000000000000000000000081565b6102fe610495366004612e35565b610e54565b6102ab60025481565b6102fe6104b1366004612d83565b610f83565b6102ab6104c4366004612eda565b611070565b61026c6113fd565b6102fe6114c9565b6102fe6104e7366004612eda565b6115e9565b60015461039a9061010090046001600160a01b031681565b6102fe6118e3565b6103ca6119ac565b606061051e6119c5565b905090565b60006002546000036105355750600090565b61053d611a14565b6001600160a01b0316631e0104396002546040518263ffffffff1660e01b815260040161056c91815260200190565b602060405180830381865afa158015610589573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051e9190612f13565b600061051e30611a86565b60015460009060ff16600381111561051e5761051e612f30565b6105da611b2b565b6105e2611b53565b6004546005546000916105fb9160f89190911b90611b8a565b90508063ffffffff168263ffffffff16101561062a576040516360ee124760e01b815260040160405180910390fd5b61063382611c15565b5050565b606080600560068180548060200260200160405190810160405280929190818152602001828054801561069357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610675575b50505050509150808054806020026020016040519081016040528092919081815260200182805480156106e557602002820191906000526020600020905b8154815260200190600101908083116106d1575b50505050509050915091509091565b6106fc611b2b565b610704611b53565b6001805460ff191681179055610718611a14565b6001600160a01b0316635165f2f56002546040518263ffffffff1660e01b815260040161074791815260200190565b600060405180830381600087803b15801561076157600080fd5b505af1158015610775573d6000803e3d6000fd5b505050506002547f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b03167fb5b81be9e944298e73e62c67cba040cfa86ba29f350fc5caed11ad4dcd7e30de426040516107d891815260200190565b60405180910390a4565b60015461010090046001600160a01b031633146108125760405163183d164560e21b815260040160405180910390fd5b61081a611cdd565b6108375760405163fdee5cb560e01b815260040160405180910390fd5b60008061084683850185612f46565b600454919350915060f81b61085b8382611d2e565b6003805462093a808402019055604080516001600160f81b0319831681524260208201527f00000000000000000000000000000000000000000000000000000000000000009130917ffbaef28b82d3e37d66149afc0482a3514ce41cae084ab7f44f581deb6f9494fd910160405180910390a35050505050565b6108dd611b2b565b428110156108fe576040516321282cc360e21b815260040160405180910390fd5b61090b62093a8082612f7e565b6003556040518181527f99010f0b135ff600813261bb46eb4e2cf4baea5bfe138dd39a31980be6b9ff7b906020015b60405180910390a150565b61094d611efd565b610955611b2b565b61095d611b53565b61096681611f27565b6109835760405163bd6ff75b60e01b815260040160405180910390fd5b600360015460ff16600381111561099c5761099c612f30565b146109ba576040516376f1a00360e01b815260040160405180910390fd5b60085463ffffffff64010000000090910481164390911610156109f05760405163e6b2998360e01b815260040160405180910390fd5b6109f8611a14565b60025460405163744bfe6160e01b815260048101919091523060248201526001600160a01b03919091169063744bfe6190604401600060405180830381600087803b158015610a4657600080fd5b505af1158015610a5a573d6000803e3d6000fd5b505050506000610a68611f81565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610ab2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad69190612f91565b9050610ae3828483611fec565b6040516331a9108f60e11b81527f0000000000000000000000000000000000000000000000000000000000000000600482015260009073fbbf371c9b0b994eebfcc977cef603f7f31c070d90636352211e90602401602060405180830381865afa158015610b55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b799190612faa565b9050610b986001600160a01b038516826001600160601b0385166121a3565b6002546040516001600160601b03841681526001600160a01b038616919033907f62aa87e2fb76c553f1e5c0c7d479446974609c79292b00f40eb58d2031a8f9f39060200160405180910390a4505050610bf26001600055565b50565b60006060610c01612217565b60006001610c0d611cdd565b93508315610c505760045460f81b600160f91b1615610c3157610c2e612258565b91505b62093a8060035442610c439190612f7e565b610c4d9190612fdd565b90505b6040805160208101849052908101829052606001604051602081830303815290604052925050509250929050565b600061051e611a14565b610c90611b2b565b610c98611b53565b6001805460ff19166002179055610cad611a14565b6001600160a01b0316638765ecbe6002546040518263ffffffff1660e01b8152600401610cdc91815260200190565b600060405180830381600087803b158015610cf657600080fd5b505af1158015610d0a573d6000803e3d6000fd5b505050506002547f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b03167f1439651d0395c17168f43b357300e12c8ce9474aaf0aab848dd1f807ea788be9426040516107d891815260200190565b60058181548110610d7d57600080fd5b6000918252602090912001546001600160a01b0316905081565b60068181548110610da757600080fd5b600091825260209091200154905081565b610dc0611b2b565b6001600160a01b038116610de75760405163d92e233d60e01b815260040160405180910390fd5b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b038416908102919091179091556040519081527f9d90a82ec1d038d4e13317a0eb136f9c65b7ed42156fc204ec4b7c4731e739509060200161093a565b610e5c611b2b565b6001600160f81b03198516600003610e8757604051631216510560e31b815260040160405180910390fd5b6004805460ff191660f887901c179055600160fa1b851615801590610eaa575082155b15610ec85760405163bf55749760e01b815260040160405180910390fd5b828114610ee85760405163b9f2e73960e01b815260040160405180910390fd5b610ef460058585612b08565b50610f0160068383612b7f565b506000610f0e8685611b8a565b9050600254600014610f2857610f2381611c15565b610f3e565b6008805463ffffffff191663ffffffff83161790555b7fd1d684891f47a9e8baa681975524beb90bc9cd66ba619de5c2e4248d4f98a9e48660056006604051610f7393929190613071565b60405180910390a1505050505050565b610f8b611b2b565b610f93611b53565b80600003610fb457604051631f2a200560e01b815260040160405180910390fd5b60078190556000610fc482612336565b9050610fce611a14565b6001600160a01b0316638dcf0fe7600254836040518363ffffffff1660e01b8152600401610ffd9291906130ac565b600060405180830381600087803b15801561101757600080fd5b505af115801561102b573d6000803e3d6000fd5b505060025460408051918252602082018690527fb1daf6a9ad2299bf65e68bf739b901d006349eb874677e4b9ce28e208bd41c27935001905060405180910390a15050565b600061107a611efd565b611082611b2b565b600060015460ff16600381111561109b5761109b612f30565b146110b957604051630ea075bf60e21b815260040160405180910390fd5b6110c283611f27565b6110df5760405163bd6ff75b60e01b815260040160405180910390fd5b60006110ec600754612336565b905060006040518061014001604052806111046119c5565b815260408051602081810183526000808352818501929092523083850181905260085463ffffffff166060860152608085015260a084018290528251808201845282815260c0850152825190810190925280825260e083019190915261010082018590526001600160601b03871661012090920191909152909150611187611f81565b90506111a76001600160a01b03871633306001600160601b0389166123a2565b6111b2868287611fec565b60006111bc6123db565b60405163095ea7b360e01b81526001600160a01b0380831660048301526001600160601b03891660248301529192509083169063095ea7b3906044016020604051808303816000875af1158015611217573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123b91906130c5565b50604051633f678e1160e01b81526001600160a01b03821690633f678e11906112689086906004016130e7565b6020604051808303816000875af1158015611287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ab9190612f91565b945084156113d0576112bb611a14565b6001600160a01b03166379ea9943866040518263ffffffff1660e01b81526004016112e891815260200190565b602060405180830381865afa158015611305573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113299190612faa565b6001805460028890556001600160a01b03929092166101000260ff19167fffffffffffffffffffffff000000000000000000000000000000000000000000909216919091178117905560405142815285907f00000000000000000000000000000000000000000000000000000000000000009030907f9ee6116ec422a4178814ec583f3f441babcd33d18c44a08885c05ea48c984c379060200160405180910390a46113e9565b6040516365bcbc0960e01b815260040160405180910390fd5b505050506113f76001600055565b92915050565b600080611408611a14565b9050600254600003611494576008546040516316daa9c760e21b81526000600482015263ffffffff90911660248201526001600160a01b03821690635b6aa71c906044015b602060405180830381865afa15801561146a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148e9190612f13565b91505090565b600254604051631aec64c960e31b815260048101919091526001600160a01b0382169063d76326489060240161144d565b5090565b6114d1611b2b565b6114d9611b53565b6001805460ff191660031790556114f16032436131fc565b600860046101000a81548163ffffffff021916908363ffffffff160217905550611519611a14565b6001600160a01b031663c80480226002546040518263ffffffff1660e01b815260040161154891815260200190565b600060405180830381600087803b15801561156257600080fd5b505af1158015611576573d6000803e3d6000fd5b50506002546008546040805142815264010000000090920463ffffffff1660208301529193507f0000000000000000000000000000000000000000000000000000000000000000925030917f93b0a62b4fc2e4f1e6ac8dafd337d62ad0a77cf8fa92cb1fd595bc0959b8240691016107d8565b6115f1611efd565b6115f9611b53565b61160282611f27565b61161f5760405163bd6ff75b60e01b815260040160405180910390fd5b806001600160601b031660000361164957604051631f2a200560e01b815260040160405180910390fd5b6116676001600160a01b03831633306001600160601b0385166123a2565b6000611671611f81565b905061167e838284611fec565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156116c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e99190612f91565b9050826001600160601b0316816001600160601b0316101561171e57604051630826b34d60e01b815260040160405180910390fd5b6000611728611a14565b60405163095ea7b360e01b81526001600160a01b0380831660048301526001600160601b03851660248301529192509084169063095ea7b3906044016020604051808303816000875af1158015611783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a791906130c5565b5060025460405163948108f760e01b815260048101919091526001600160601b03831660248201526001600160a01b0382169063948108f790604401600060405180830381600087803b1580156117fd57600080fd5b505af1158015611811573d6000803e3d6000fd5b505060405163095ea7b360e01b81526001600160a01b038481166004830152600060248301528616925063095ea7b391506044016020604051808303816000875af1158015611864573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188891906130c5565b506002546040516001600160601b03841681526001600160a01b038716919033907f4155cdc2583f36b6761ad262c97c8327cf7f9cfea1542f22a27b574d850c910a9060200160405180910390a45050506106336001600055565b6118eb611b2b565b6118f430611a86565b6119115760405163c19f17a960e01b815260040160405180910390fd5b60045460f81b6000600160f91b8216156119305761192d612258565b90505b61193a8183611d2e565b426003819055604080516001600160f81b03198516815260208101929092527f00000000000000000000000000000000000000000000000000000000000000009130917fe58c95fb8dd238fcb2153cf595921db2afc53525a43cedc645966e5a850764f5910160405180910390a35050565b60045460055460009161051e9160f89190911b90611b8a565b60606119f07f000000000000000000000000000000000000000000000000000000000000000061243b565b604051602001611a00919061320f565b604051602081830303815290604052905090565b600080611a1f6123db565b6001600160a01b031663c3f909d46040518163ffffffff1660e01b81526004016040805180830381865afa158015611a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7f9190613254565b5092915050565b60405163430c208160e01b81526001600160a01b03821660048201527f0000000000000000000000000000000000000000000000000000000000000000602482015260009073fbbf371c9b0b994eebfcc977cef603f7f31c070d9063430c208190604401602060405180830381865afa158015611b07573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f791906130c5565b611b3433611a86565b611b515760405163096dcfe360e31b815260040160405180910390fd5b565b600060015460ff166003811115611b6c57611b6c612f30565b03611b515760405163aba4733960e01b815260040160405180910390fd5b600080600160f81b841615611ba957611ba66206ddd082613282565b90505b600160f91b841615611bc557611bc26202710082613282565b90505b600160fa1b841615611bf857611bde836201fbd061329f565b611beb9062027100613282565b611bf59082613282565b90505b611c03600a826132c7565b611c0d9082613282565b949350505050565b6008805463ffffffff191663ffffffff8316179055611c32611a14565b600254604051635395513f60e11b8152600481019190915263ffffffff831660248201526001600160a01b03919091169063a72aa27e90604401600060405180830381600087803b158015611c8657600080fd5b505af1158015611c9a573d6000803e3d6000fd5b50506002546040805191825263ffffffff851660208301527f49119538764910f83095b939a2f565f65c3da759c9053ed691f54f9a1fd81e11935001905061093a565b6000611ce830611a86565b1580611d0a57506001805460ff166003811115611d0757611d07612f30565b14155b15611d155750600090565b62093a8060035442611d279190612f7e565b1015905090565b600160f81b811615611dd057611d426124db565b60405163379607f560e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b03919091169063379607f5906024016020604051808303816000875af1158015611daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dce9190612f91565b505b8115611e625760405163a4d855df60e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201526024810183905273fbbf371c9b0b994eebfcc977cef603f7f31c070d9063a4d855df90604401600060405180830381600087803b158015611e4957600080fd5b505af1158015611e5d573d6000803e3d6000fd5b505050505b600160fa1b81161561063357611e7661253b565b6001600160a01b0316637ac09bf77f0000000000000000000000000000000000000000000000000000000000000000600560066040518463ffffffff1660e01b8152600401611ec7939291906132ea565b600060405180830381600087803b158015611ee157600080fd5b505af1158015611ef5573d6000803e3d6000fd5b505050505050565b600260005403611f2057604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b6000611f31611f81565b6001600160a01b0316826001600160a01b03161480611f6c57506001600160a01b03821673f8a0bf9cf54bb92f17374d9e9a321e6a111a51bd145b15611f7957506001919050565b506000919050565b6000611f8b611a14565b6001600160a01b031663ca30e6036040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051e9190612faa565b816001600160a01b0316836001600160a01b03161461219e5760405163095ea7b360e01b8152731fcc3b22955e76ca48bf025f1a6993685975bb9e60048201526001600160601b03821660248201526001600160a01b0384169063095ea7b3906044016020604051808303816000875af115801561206e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209291906130c5565b50604051632b7f092360e01b81526001600160601b03821660048201526001600160a01b03808516602483015283166044820152731fcc3b22955e76ca48bf025f1a6993685975bb9e90632b7f092390606401600060405180830381600087803b1580156120ff57600080fd5b505af1158015612113573d6000803e3d6000fd5b505060405163095ea7b360e01b8152731fcc3b22955e76ca48bf025f1a6993685975bb9e6004820152600060248201526001600160a01b038616925063095ea7b391506044016020604051808303816000875af1158015612178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219c91906130c5565b505b505050565b6040516001600160a01b0383811660248301526044820183905261219e91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259b565b321580159061223a57503273111111111111111111111111111111111111111114155b15611b515760405163b60ac5db60e01b815260040160405180910390fd5b604051635a2d1e0760e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152600090819073fbbf371c9b0b994eebfcc977cef603f7f31c070d9063b45a3c0e906024016040805180830381865afa1580156122cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ef9190613319565b9050600062093a80826020015161230691906131fc565b90506123166303c26700426131fc565b811161232d576123264282612f7e565b9250505090565b60009250505090565b60606020600061234582612610565b905061238f6040518060400160405280600b81526020017f6d617847617350726963650000000000000000000000000000000000000000008152508261263190919063ffffffff16565b612399818561264a565b51519392505050565b6040516001600160a01b03848116602483015283811660448301526064820183905261219c9186918216906323b872dd906084016121d0565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632b20e3976040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b6060600061244883612683565b600101905060008167ffffffffffffffff81111561246857612468613303565b6040519080825280601f01601f191660200182016040528015612492576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461249c57509392505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633f2a55406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166346c96aac6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b600080602060008451602086016000885af1806125be576040513d6000823e3d81fd5b50506000513d915081156125d65780600114156125e3565b6001600160a01b0384163b155b1561219c57604051635274afe760e01b81526001600160a01b038516600482015260240160405180910390fd5b612618612bba565b80516126249083612765565b5060006020820152919050565b61263e82600383516127dc565b815161219e90826128fd565b81516126579060c2612925565b50610633828260405160200161266f91815260200190565b60405160208183030381529060405261298e565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106126cc577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106126f8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061271657662386f26fc10000830492506010015b6305f5e100831061272e576305f5e100830492506008015b612710831061274257612710830492506004015b60648310612754576064830492506002015b600a83106113f75760010192915050565b604080518082019091526060815260006020820152612785602083613386565b156127ad57612795602083613386565b6127a0906020612f7e565b6127aa90836131fc565b91505b6020808401839052604051808552600081529081840101818110156127d157600080fd5b604052509192915050565b60178167ffffffffffffffff161161280357825161219c9060e0600585901b168317612925565b60ff8167ffffffffffffffff161161284557825161282c906018611fe0600586901b1617612925565b50825161219c9067ffffffffffffffff8316600161299b565b61ffff8167ffffffffffffffff161161288857825161286f906019611fe0600586901b1617612925565b50825161219c9067ffffffffffffffff8316600261299b565b63ffffffff8167ffffffffffffffff16116128cd5782516128b490601a611fe0600586901b1617612925565b50825161219c9067ffffffffffffffff8316600461299b565b82516128e490601b611fe0600586901b1617612925565b50825161219c9067ffffffffffffffff8316600861299b565b60408051808201909152606081526000602082015261291e83838451612a20565b9392505050565b604080518082019091526060815260006020820152825151600061294a8260016131fc565b90508460200151821061296b5761296b8561296683600261339a565b612af1565b8451602083820101858153508051821115612984578181525b5093949350505050565b61263e82600283516127dc565b60408051808201909152606081526000602082015283515160006129bf82856131fc565b905085602001518111156129dc576129dc8661296683600261339a565b600060016129ec86610100613495565b6129f69190612f7e565b90508651828101878319825116178152508051831115612a14578281525b50959695505050505050565b6040805180820190915260608152600060208201528251821115612a4357600080fd5b8351516000612a5284836131fc565b90508560200151811115612a6f57612a6f8661296683600261339a565b855180518382016020019160009180851115612a89578482525b505050602086015b60208610612ac95780518252612aa86020836131fc565b9150612ab56020826131fc565b9050612ac2602087612f7e565b9550612a91565b51815160001960208890036101000a0190811690199190911617905250849150509392505050565b8151612afd8383612765565b5061219c83826128fd565b828054828255906000526020600020908101928215612b73579160200282015b82811115612b735781547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03843516178255602090920191600190910190612b28565b506114c5929150612bef565b828054828255906000526020600020908101928215612b73579160200282015b82811115612b73578235825591602001919060010190612b9f565b6040518060400160405280612be2604051806040016040528060608152602001600081525090565b8152602001600081525090565b5b808211156114c55760008155600101612bf0565b60005b83811015612c1f578181015183820152602001612c07565b50506000910152565b60008151808452612c40816020860160208601612c04565b601f01601f19169290920160200192915050565b60208152600061291e6020830184612c28565b600060208284031215612c7957600080fd5b813563ffffffff8116811461291e57600080fd5b604080825283519082018190526000906020906060840190828701845b82811015612ccf5781516001600160a01b031684529284019290840190600101612caa565b5050508381038285015284518082528583019183019060005b81811015612d0457835183529284019291840191600101612ce8565b5090979650505050505050565b60008060208385031215612d2457600080fd5b823567ffffffffffffffff80821115612d3c57600080fd5b818501915085601f830112612d5057600080fd5b813581811115612d5f57600080fd5b866020828501011115612d7157600080fd5b60209290920196919550909350505050565b600060208284031215612d9557600080fd5b5035919050565b6001600160a01b0381168114610bf257600080fd5b600060208284031215612dc357600080fd5b813561291e81612d9c565b8215158152604060208201526000611c0d6040830184612c28565b60008083601f840112612dfb57600080fd5b50813567ffffffffffffffff811115612e1357600080fd5b6020830191508360208260051b8501011115612e2e57600080fd5b9250929050565b600080600080600060608688031215612e4d57600080fd5b85356001600160f81b031981168114612e6557600080fd5b9450602086013567ffffffffffffffff80821115612e8257600080fd5b612e8e89838a01612de9565b90965094506040880135915080821115612ea757600080fd5b50612eb488828901612de9565b969995985093965092949392505050565b6001600160601b0381168114610bf257600080fd5b60008060408385031215612eed57600080fd5b8235612ef881612d9c565b91506020830135612f0881612ec5565b809150509250929050565b600060208284031215612f2557600080fd5b815161291e81612ec5565b634e487b7160e01b600052602160045260246000fd5b60008060408385031215612f5957600080fd5b50508035926020909101359150565b634e487b7160e01b600052601160045260246000fd5b818103818111156113f7576113f7612f68565b600060208284031215612fa357600080fd5b5051919050565b600060208284031215612fbc57600080fd5b815161291e81612d9c565b634e487b7160e01b600052601260045260246000fd5b600082612fec57612fec612fc7565b500490565b600081548084526020808501945083600052602060002060005b838110156130305781546001600160a01b03168752958201956001918201910161300b565b509495945050505050565b600081548084526020808501945083600052602060002060005b8381101561303057815487529582019560019182019101613055565b60ff60f81b841681526060602082015260006130906060830185612ff1565b82810360408401526130a2818561303b565b9695505050505050565b828152604060208201526000611c0d6040830184612c28565b6000602082840312156130d757600080fd5b8151801515811461291e57600080fd5b6020815260008251610140806020850152613106610160850183612c28565b91506020850151601f19808685030160408701526131248483612c28565b93506040870151915061314260608701836001600160a01b03169052565b606087015163ffffffff81166080880152915060808701516001600160a01b03811660a0880152915060a087015160ff811660c0880152915060c08701519150808685030160e08701526131968483612c28565b935060e087015191506101008187860301818801526131b58584612c28565b9450808801519250506101208187860301818801526131d48584612c28565b945080880151925050506131f2828601826001600160601b03169052565b5090949350505050565b808201808211156113f7576113f7612f68565b7f7665544845204175746f6d6174696f6e202d2049442000000000000000000000815260008251613247816016850160208701612c04565b9190910160160192915050565b6000806040838503121561326757600080fd5b825161327281612d9c565b6020939093015192949293505050565b63ffffffff818116838216019080821115611a7f57611a7f612f68565b63ffffffff8181168382160280821691908281146132bf576132bf612f68565b505092915050565b600063ffffffff808416806132de576132de612fc7565b92169190910492915050565b8381526060602082015260006130906060830185612ff1565b634e487b7160e01b600052604160045260246000fd5b60006040828403121561332b57600080fd5b6040516040810181811067ffffffffffffffff8211171561335c57634e487b7160e01b600052604160045260246000fd5b6040528251600f81900b811461337157600080fd5b81526020928301519281019290925250919050565b60008261339557613395612fc7565b500690565b80820281158282048414176113f7576113f7612f68565b600181815b808511156133ec5781600019048211156133d2576133d2612f68565b808516156133df57918102915b93841c93908002906133b6565b509250929050565b600082613403575060016113f7565b81613410575060006113f7565b816001811461342657600281146134305761344c565b60019150506113f7565b60ff84111561344157613441612f68565b50506001821b6113f7565b5060208310610133831016604e8410600b841016171561346f575081810a6113f7565b61347983836133b1565b806000190482111561348d5761348d612f68565b029392505050565b600061291e83836133f456fea264697066735822122093b96d3424439f9d80a1bc5f913b728bd34a106e6f6aa0b83778a973675d605064736f6c63430008160033a264697066735822122096824995088ae4b906e8f12ffa39f4e98492aa56ba209d23c714e55f8a44513b64736f6c63430008160033000000000000000000000000f671f60bcc964b309d22424886ff202807381b320000000000000000000000008fbb1ecebb9e9839bc0de00b9c4c585cabdd0462000000000000000000000000a6e0e731cb1e99aede0f9c9128d04f948e18727d