UNPKG

@axelar-network/interchain-token-service

Version:

Interchain token service for EVM chains to faciliate interchain token transfers and contract calls

838 lines (837 loc) 47.8 kB
{ "_format": "hh-sol-artifact-1", "contractName": "HyperliquidInterchainToken", "sourceName": "contracts/hyperliquid/HyperliquidInterchainToken.sol", "abi": [ { "inputs": [ { "internalType": "address", "name": "interchainTokenServiceAddress", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AlreadyInitialized", "type": "error" }, { "inputs": [], "name": "InterchainTokenServiceAddressZero", "type": "error" }, { "inputs": [], "name": "InvalidAccount", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "fromAccount", "type": "address" }, { "internalType": "address", "name": "toAccount", "type": "address" }, { "internalType": "uint256", "name": "accountRoles", "type": "uint256" } ], "name": "InvalidProposedRoles", "type": "error" }, { "inputs": [], "name": "InvalidS", "type": "error" }, { "inputs": [], "name": "InvalidSignature", "type": "error" }, { "inputs": [], "name": "InvalidV", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "accountRoles", "type": "uint256" } ], "name": "MissingAllRoles", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "accountRoles", "type": "uint256" } ], "name": "MissingAnyOfRoles", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint8", "name": "role", "type": "uint8" } ], "name": "MissingRole", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" } ], "name": "NotService", "type": "error" }, { "inputs": [], "name": "PermitExpired", "type": "error" }, { "inputs": [], "name": "TokenIdZero", "type": "error" }, { "inputs": [], "name": "TokenNameEmpty", "type": "error" }, { "inputs": [], "name": "TokenSymbolEmpty", "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": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "accountRoles", "type": "uint256" } ], "name": "RolesAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "fromAccount", "type": "address" }, { "indexed": true, "internalType": "address", "name": "toAccount", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "accountRoles", "type": "uint256" } ], "name": "RolesProposed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "accountRoles", "type": "uint256" } ], "name": "RolesRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "fromMinter", "type": "address" } ], "name": "acceptMintership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "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": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burn", "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": [], "name": "deployer", "outputs": [ { "internalType": "address", "name": "deployerAddr", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint8", "name": "role", "type": "uint8" } ], "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": [ { "internalType": "bytes32", "name": "tokenId_", "type": "bytes32" }, { "internalType": "address", "name": "minter", "type": "address" }, { "internalType": "string", "name": "tokenName", "type": "string" }, { "internalType": "string", "name": "tokenSymbol", "type": "string" }, { "internalType": "uint8", "name": "tokenDecimals", "type": "uint8" } ], "name": "init", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "interchainTokenId", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "interchainTokenService", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "destinationChain", "type": "string" }, { "internalType": "bytes", "name": "recipient", "type": "bytes" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "metadata", "type": "bytes" } ], "name": "interchainTransfer", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "string", "name": "destinationChain", "type": "string" }, { "internalType": "bytes", "name": "recipient", "type": "bytes" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "metadata", "type": "bytes" } ], "name": "interchainTransferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" } ], "name": "isMinter", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "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": "nameHash", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "issuer", "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": "address", "name": "minter_", "type": "address" } ], "name": "proposeMintership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter_", "type": "address" } ], "name": "transferMintership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newDeployer", "type": "address" } ], "name": "updateDeployer", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x60a06040523480156200001157600080fd5b5060405162001e5538038062001e5583398101604081905262000034916200009a565b806200005f60017fc778385ecb3e8cecb82223fa1f343ec6865b2d64c65b0c15c7e8aef225d9e21455565b6001600160a01b038116620000875760405163a76361c360e01b815260040160405180910390fd5b6001600160a01b031660805250620000cc565b600060208284031215620000ad57600080fd5b81516001600160a01b0381168114620000c557600080fd5b9392505050565b608051611d516200010460003960008181610231015281816107c1015281816109a901528181610add0152610bde0152611d516000f3fe6080604052600436106101c25760003560e01c806395a8c58d116100f7578063aa271e1a11610095578063d505accf11610064578063d505accf146105a9578063d5f39488146105c9578063dd62ed3e146105de578063f172a4ce1461061657600080fd5b8063aa271e1a14610536578063b5ef694d14610556578063bc0ba3c514610576578063cf86a95a1461058957600080fd5b80639dc29fac116100d15780639dc29fac146104c3578063a457c2d7146104e3578063a60fee3714610503578063a9059cbb1461051657600080fd5b806395a8c58d1461046e57806395d89b411461048e5780639c176677146104a357600080fd5b80633644e515116101645780634d413e7d1161013e5780634d413e7d146103d457806370a08231146103f45780637ecebe00146104215780638626698f1461044e57600080fd5b80633644e515146102ea578063395093511461039257806340c10f19146103b257600080fd5b8063129d8188116101a0578063129d81881461026957806318160ddd1461028857806323b872dd1461029e578063313ce567146102be57600080fd5b806306fdde03146101c7578063095ea7b3146101f257806309c6bed914610222575b600080fd5b3480156101d357600080fd5b506101dc61062c565b6040516101e991906116cc565b60405180910390f35b3480156101fe57600080fd5b5061021261020d36600461171b565b6106ba565b60405190151581526020016101e9565b34801561022e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020016101e9565b34801561027557600080fd5b506008545b6040519081526020016101e9565b34801561029457600080fd5b5061027a60025481565b3480156102aa57600080fd5b506102126102b9366004611745565b6106d1565b3480156102ca57600080fd5b506007546102d89060ff1681565b60405160ff90911681526020016101e9565b3480156102f657600080fd5b5060035460408051808201825260018152603160f81b60209182015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81830152808301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608401524660808401523060a0808501919091528251808503909101815260c0909301909152815191012061027a565b34801561039e57600080fd5b506102126103ad36600461171b565b610728565b3480156103be57600080fd5b506103d26103cd36600461171b565b61075f565b005b3480156103e057600080fd5b506103d26103ef366004611781565b6107b6565b34801561040057600080fd5b5061027a61040f366004611781565b60006020819052908152604090205481565b34801561042d57600080fd5b5061027a61043c366004611781565b60046020526000908152604090205481565b34801561045a57600080fd5b506103d26104693660046117f6565b610845565b34801561047a57600080fd5b50610212610489366004611891565b610a1e565b34801561049a57600080fd5b506101dc610a40565b3480156104af57600080fd5b506103d26104be366004611781565b610a4d565b3480156104cf57600080fd5b506103d26104de36600461171b565b610a59565b3480156104ef57600080fd5b506102126104fe36600461171b565b610a99565b6103d26105113660046118c4565b610ad0565b34801561052257600080fd5b5061021261053136600461171b565b610b7c565b34801561054257600080fd5b50610212610551366004611781565b610b89565b34801561056257600080fd5b506103d2610571366004611781565b610b95565b6103d2610584366004611978565b610bdb565b34801561059557600080fd5b506103d26105a4366004611781565b610c41565b3480156105b557600080fd5b506103d26105c4366004611a1c565b610c83565b3480156105d557600080fd5b50610251610fc4565b3480156105ea57600080fd5b5061027a6105f9366004611a86565b600160209081526000928352604080842090915290825290205481565b34801561062257600080fd5b5061027a60035481565b6005805461063990611ab0565b80601f016020809104026020016040519081016040528092919081815260200182805461066590611ab0565b80156106b25780601f10610687576101008083540402835291602001916106b2565b820191906000526020600020905b81548152906001019060200180831161069557829003601f168201915b505050505081565b60006106c7338484610ff3565b5060015b92915050565b6001600160a01b0383166000908152600160209081526040808320338452909152812054600019811461071257610712853361070d8685611b00565b610ff3565b61071d858585611090565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916106c791859061070d908690611b13565b600061077a61076d3361116c565b600160ff84161b16151590565b6107a75760405163bb6c163960e01b815233600482015260ff821660248201526044015b60405180910390fd5b6107b18383611180565b505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461081a576040517f0d6c7be900000000000000000000000000000000000000000000000000000000815233600482015260240161079e565b610842817f8c306a6a12fff1951878e8621be6674add1102cd359dd968efbbe797629ef84f55565b50565b7fc778385ecb3e8cecb82223fa1f343ec6865b2d64c65b0c15c7e8aef225d9e214541561089e576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c760017fc778385ecb3e8cecb82223fa1f343ec6865b2d64c65b0c15c7e8aef225d9e21455565b866108fe576040517f248fd78f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000849003610939576040517f0d7673b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000829003610974576040517ff09ce01300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005610981858783611b8a565b50600661098f838583611b8a565b506007805460ff191660ff831617905560088790556109cd7f0000000000000000000000000000000000000000000000000000000000000000611231565b6109d686611231565b610a1585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061123c92505050565b50505050505050565b6000610a39610a2c8461116c565b600160ff85161b16151590565b9392505050565b6006805461063990611ab0565b61084281336000611249565b6000610a6761076d3361116c565b610a8f5760405163bb6c163960e01b815233600482015260ff8216602482015260440161079e565b6107b1838361125a565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916106c791859061070d908690611b00565b610adb883385611305565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370756cde34610b1460085490565b8b8b8b8b8b8b8b8b6040518b63ffffffff1660e01b8152600401610b4099989796959493929190611c74565b6000604051808303818588803b158015610b5957600080fd5b505af1158015610b6d573d6000803e3d6000fd5b50505050505050505050505050565b60006106c7338484611090565b60006106cb8282610a1e565b6000610ba361076d3361116c565b610bcb5760405163bb6c163960e01b815233600482015260ff8216602482015260440161079e565b610bd733836000611349565b5050565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370756cde34610c1560085490565b848c8c8c8c8c8c8c6040518b63ffffffff1660e01b8152600401610b4099989796959493929190611c74565b6000610c4f61076d3361116c565b610c775760405163bb6c163960e01b815233600482015260ff8216602482015260440161079e565b610bd73383600061135a565b83421115610cbd576040517f1a15a3cc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0811115610d17576040517f40c1e74800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260ff16601b14158015610d2f57508260ff16601c14155b15610d66576040517f119bce3900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518060400160405280600281526020017f1901000000000000000000000000000000000000000000000000000000000000815250610e3a60035460408051808201825260018152603160f81b60209182015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81830152808301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608401524660808401523060a0808501919091528251808503909101815260c0909301909152815191012090565b6001600160a01b038a16600090815260046020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928d928d928d92909190610e8883611cdb565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810188905260e00160405160208183030381529060405280519060200120604051602001610eec93929190611cf4565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015610f57573d6000803e3d6000fd5b505050602060405103519050886001600160a01b0316816001600160a01b031614610fae576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fb9898989610ff3565b505050505050505050565b6000610fee7f8c306a6a12fff1951878e8621be6674add1102cd359dd968efbbe797629ef84f5490565b905090565b6001600160a01b038316158061101057506001600160a01b038216155b1561102e57604051630da30f6560e31b815260040160405180910390fd5b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831615806110ad57506001600160a01b038216155b156110cb57604051630da30f6560e31b815260040160405180910390fd5b6001600160a01b038316600090815260208190526040812080548392906110f3908490611b00565b90915550506001600160a01b03821660009081526020819052604081208054839290611120908490611b13565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161108391815260200190565b6000806111788361136b565b549392505050565b6001600160a01b0382166111a757604051630da30f6560e31b815260040160405180910390fd5b80600260008282546111b99190611b13565b90915550506001600160a01b038216600090815260208190526040812080548392906111e6908490611b13565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b6108428160006113d8565b8051602090910120600355565b6107b18383600160ff85161b6113e8565b6001600160a01b03821661128157604051630da30f6560e31b815260040160405180910390fd5b6001600160a01b038216600090815260208190526040812080548392906112a9908490611b00565b9250508190555080600260008282546112c29190611b00565b90915550506040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611225565b6001600160a01b03808416600090815260016020908152604080832093861683529290522054600019811461134357611343848461070d8585611b00565b50505050565b6107b18383600160ff85161b61145b565b6107b18383600160ff85161b6114ed565b60007fde9bdca322e1a848f72215bc15cf2c87fe7749145789a9ee281a2a6290af26ab826040516020016113bb92919091825260601b6bffffffffffffffffffffffff1916602082015260340190565b604051602081830303815290604052805190602001209050919050565b610bd782600160ff84161b611538565b806113f38484611599565b14611444576040517f6004fe400000000000000000000000000000000000000000000000000000000081526001600160a01b038085166004830152831660248201526044810182905260640161079e565b611450838360006115af565b6107b18383836114ed565b61146e6114678461116c565b8216821490565b61149d57604051631fe9beed60e21b81526001600160a01b03841660048201526024810182905260440161079e565b6114a88383836115af565b816001600160a01b0316836001600160a01b03167ff7158d1591c2cf17c0e6b9459d86365c47fe0969c79f40ef49e0c437d8f399148360405161108391815260200190565b6114f96114678461116c565b61152857604051631fe9beed60e21b81526001600160a01b03841660048201526024810182905260440161079e565b61153283826115c4565b6107b182825b6000816115448461116c565b1790506115518382611619565b826001600160a01b03167f34e73c57659d4b6809b53db4feee9b007b892e978114eda420d2991aba1501438360405161158c91815260200190565b60405180910390a2505050565b6000806115a6848461162c565b54949350505050565b60006115bb848461162c565b91909155505050565b600081196115d18461116c565b1690506115de8382611619565b826001600160a01b03167fccf920c8facee98a9c2a6c6124f2857b87b17e9f3a819bfcc6945196ee77366b8360405161158c91815260200190565b60006116248361136b565b919091555050565b60007ff96e07b2f4fbb81c31567d2b261589af429e98f0958d53f7e6ad5d63aea0ab7c838360405160200161168a93929190928352606091821b6bffffffffffffffffffffffff199081166020850152911b16603482015260480190565b60405160208183030381529060405280519060200120905092915050565b60005b838110156116c35781810151838201526020016116ab565b50506000910152565b60208152600082518060208401526116eb8160408501602087016116a8565b601f01601f19169190910160400192915050565b80356001600160a01b038116811461171657600080fd5b919050565b6000806040838503121561172e57600080fd5b611737836116ff565b946020939093013593505050565b60008060006060848603121561175a57600080fd5b611763846116ff565b9250611771602085016116ff565b9150604084013590509250925092565b60006020828403121561179357600080fd5b610a39826116ff565b60008083601f8401126117ae57600080fd5b50813567ffffffffffffffff8111156117c657600080fd5b6020830191508360208285010111156117de57600080fd5b9250929050565b803560ff8116811461171657600080fd5b600080600080600080600060a0888a03121561181157600080fd5b87359650611821602089016116ff565b9550604088013567ffffffffffffffff8082111561183e57600080fd5b61184a8b838c0161179c565b909750955060608a013591508082111561186357600080fd5b506118708a828b0161179c565b90945092506118839050608089016117e5565b905092959891949750929550565b600080604083850312156118a457600080fd5b6118ad836116ff565b91506118bb602084016117e5565b90509250929050565b60008060008060008060008060a0898b0312156118e057600080fd5b6118e9896116ff565b9750602089013567ffffffffffffffff8082111561190657600080fd5b6119128c838d0161179c565b909950975060408b013591508082111561192b57600080fd5b6119378c838d0161179c565b909750955060608b0135945060808b013591508082111561195757600080fd5b506119648b828c0161179c565b999c989b5096995094979396929594505050565b60008060008060008060006080888a03121561199357600080fd5b873567ffffffffffffffff808211156119ab57600080fd5b6119b78b838c0161179c565b909950975060208a01359150808211156119d057600080fd5b6119dc8b838c0161179c565b909750955060408a0135945060608a01359150808211156119fc57600080fd5b50611a098a828b0161179c565b989b979a50959850939692959293505050565b600080600080600080600060e0888a031215611a3757600080fd5b611a40886116ff565b9650611a4e602089016116ff565b95506040880135945060608801359350611a6a608089016117e5565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611a9957600080fd5b611aa2836116ff565b91506118bb602084016116ff565b600181811c90821680611ac457607f821691505b602082108103611ae457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106cb576106cb611aea565b808201808211156106cb576106cb611aea565b634e487b7160e01b600052604160045260246000fd5b601f8211156107b157600081815260208120601f850160051c81016020861015611b635750805b601f850160051c820191505b81811015611b8257828155600101611b6f565b505050505050565b67ffffffffffffffff831115611ba257611ba2611b26565b611bb683611bb08354611ab0565b83611b3c565b6000601f841160018114611bea5760008515611bd25750838201355b600019600387901b1c1916600186901b178355611c44565b600083815260209020601f19861690835b82811015611c1b5786850135825560209485019460019092019101611bfb565b5086821015611c385760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8981526001600160a01b038916602082015260c060408201526000611c9d60c08301898b611c4b565b8281036060840152611cb081888a611c4b565b905085608084015282810360a0840152611ccb818587611c4b565b9c9b505050505050505050505050565b600060018201611ced57611ced611aea565b5060010190565b60008451611d068184602089016116a8565b9190910192835250602082015260400191905056fea2646970667358221220526a1288b859e62af5ca8e14db94adb0148efda16480a75f48e63b1666f1adcd64736f6c63430008150033", "deployedBytecode": "0x6080604052600436106101c25760003560e01c806395a8c58d116100f7578063aa271e1a11610095578063d505accf11610064578063d505accf146105a9578063d5f39488146105c9578063dd62ed3e146105de578063f172a4ce1461061657600080fd5b8063aa271e1a14610536578063b5ef694d14610556578063bc0ba3c514610576578063cf86a95a1461058957600080fd5b80639dc29fac116100d15780639dc29fac146104c3578063a457c2d7146104e3578063a60fee3714610503578063a9059cbb1461051657600080fd5b806395a8c58d1461046e57806395d89b411461048e5780639c176677146104a357600080fd5b80633644e515116101645780634d413e7d1161013e5780634d413e7d146103d457806370a08231146103f45780637ecebe00146104215780638626698f1461044e57600080fd5b80633644e515146102ea578063395093511461039257806340c10f19146103b257600080fd5b8063129d8188116101a0578063129d81881461026957806318160ddd1461028857806323b872dd1461029e578063313ce567146102be57600080fd5b806306fdde03146101c7578063095ea7b3146101f257806309c6bed914610222575b600080fd5b3480156101d357600080fd5b506101dc61062c565b6040516101e991906116cc565b60405180910390f35b3480156101fe57600080fd5b5061021261020d36600461171b565b6106ba565b60405190151581526020016101e9565b34801561022e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020016101e9565b34801561027557600080fd5b506008545b6040519081526020016101e9565b34801561029457600080fd5b5061027a60025481565b3480156102aa57600080fd5b506102126102b9366004611745565b6106d1565b3480156102ca57600080fd5b506007546102d89060ff1681565b60405160ff90911681526020016101e9565b3480156102f657600080fd5b5060035460408051808201825260018152603160f81b60209182015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81830152808301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608401524660808401523060a0808501919091528251808503909101815260c0909301909152815191012061027a565b34801561039e57600080fd5b506102126103ad36600461171b565b610728565b3480156103be57600080fd5b506103d26103cd36600461171b565b61075f565b005b3480156103e057600080fd5b506103d26103ef366004611781565b6107b6565b34801561040057600080fd5b5061027a61040f366004611781565b60006020819052908152604090205481565b34801561042d57600080fd5b5061027a61043c366004611781565b60046020526000908152604090205481565b34801561045a57600080fd5b506103d26104693660046117f6565b610845565b34801561047a57600080fd5b50610212610489366004611891565b610a1e565b34801561049a57600080fd5b506101dc610a40565b3480156104af57600080fd5b506103d26104be366004611781565b610a4d565b3480156104cf57600080fd5b506103d26104de36600461171b565b610a59565b3480156104ef57600080fd5b506102126104fe36600461171b565b610a99565b6103d26105113660046118c4565b610ad0565b34801561052257600080fd5b5061021261053136600461171b565b610b7c565b34801561054257600080fd5b50610212610551366004611781565b610b89565b34801561056257600080fd5b506103d2610571366004611781565b610b95565b6103d2610584366004611978565b610bdb565b34801561059557600080fd5b506103d26105a4366004611781565b610c41565b3480156105b557600080fd5b506103d26105c4366004611a1c565b610c83565b3480156105d557600080fd5b50610251610fc4565b3480156105ea57600080fd5b5061027a6105f9366004611a86565b600160209081526000928352604080842090915290825290205481565b34801561062257600080fd5b5061027a60035481565b6005805461063990611ab0565b80601f016020809104026020016040519081016040528092919081815260200182805461066590611ab0565b80156106b25780601f10610687576101008083540402835291602001916106b2565b820191906000526020600020905b81548152906001019060200180831161069557829003601f168201915b505050505081565b60006106c7338484610ff3565b5060015b92915050565b6001600160a01b0383166000908152600160209081526040808320338452909152812054600019811461071257610712853361070d8685611b00565b610ff3565b61071d858585611090565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916106c791859061070d908690611b13565b600061077a61076d3361116c565b600160ff84161b16151590565b6107a75760405163bb6c163960e01b815233600482015260ff821660248201526044015b60405180910390fd5b6107b18383611180565b505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461081a576040517f0d6c7be900000000000000000000000000000000000000000000000000000000815233600482015260240161079e565b610842817f8c306a6a12fff1951878e8621be6674add1102cd359dd968efbbe797629ef84f55565b50565b7fc778385ecb3e8cecb82223fa1f343ec6865b2d64c65b0c15c7e8aef225d9e214541561089e576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c760017fc778385ecb3e8cecb82223fa1f343ec6865b2d64c65b0c15c7e8aef225d9e21455565b866108fe576040517f248fd78f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000849003610939576040517f0d7673b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000829003610974576040517ff09ce01300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005610981858783611b8a565b50600661098f838583611b8a565b506007805460ff191660ff831617905560088790556109cd7f0000000000000000000000000000000000000000000000000000000000000000611231565b6109d686611231565b610a1585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061123c92505050565b50505050505050565b6000610a39610a2c8461116c565b600160ff85161b16151590565b9392505050565b6006805461063990611ab0565b61084281336000611249565b6000610a6761076d3361116c565b610a8f5760405163bb6c163960e01b815233600482015260ff8216602482015260440161079e565b6107b1838361125a565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916106c791859061070d908690611b00565b610adb883385611305565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370756cde34610b1460085490565b8b8b8b8b8b8b8b8b6040518b63ffffffff1660e01b8152600401610b4099989796959493929190611c74565b6000604051808303818588803b158015610b5957600080fd5b505af1158015610b6d573d6000803e3d6000fd5b50505050505050505050505050565b60006106c7338484611090565b60006106cb8282610a1e565b6000610ba361076d3361116c565b610bcb5760405163bb6c163960e01b815233600482015260ff8216602482015260440161079e565b610bd733836000611349565b5050565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370756cde34610c1560085490565b848c8c8c8c8c8c8c6040518b63ffffffff1660e01b8152600401610b4099989796959493929190611c74565b6000610c4f61076d3361116c565b610c775760405163bb6c163960e01b815233600482015260ff8216602482015260440161079e565b610bd73383600061135a565b83421115610cbd576040517f1a15a3cc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0811115610d17576040517f40c1e74800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260ff16601b14158015610d2f57508260ff16601c14155b15610d66576040517f119bce3900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518060400160405280600281526020017f1901000000000000000000000000000000000000000000000000000000000000815250610e3a60035460408051808201825260018152603160f81b60209182015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81830152808301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608401524660808401523060a0808501919091528251808503909101815260c0909301909152815191012090565b6001600160a01b038a16600090815260046020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928d928d928d92909190610e8883611cdb565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810188905260e00160405160208183030381529060405280519060200120604051602001610eec93929190611cf4565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015610f57573d6000803e3d6000fd5b505050602060405103519050886001600160a01b0316816001600160a01b031614610fae576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fb9898989610ff3565b505050505050505050565b6000610fee7f8c306a6a12fff1951878e8621be6674add1102cd359dd968efbbe797629ef84f5490565b905090565b6001600160a01b038316158061101057506001600160a01b038216155b1561102e57604051630da30f6560e31b815260040160405180910390fd5b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831615806110ad57506001600160a01b038216155b156110cb57604051630da30f6560e31b815260040160405180910390fd5b6001600160a01b038316600090815260208190526040812080548392906110f3908490611b00565b90915550506001600160a01b03821660009081526020819052604081208054839290611120908490611b13565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161108391815260200190565b6000806111788361136b565b549392505050565b6001600160a01b0382166111a757604051630da30f6560e31b815260040160405180910390fd5b80600260008282546111b99190611b13565b90915550506001600160a01b038216600090815260208190526040812080548392906111e6908490611b13565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b6108428160006113d8565b8051602090910120600355565b6107b18383600160ff85161b6113e8565b6001600160a01b03821661128157604051630da30f6560e31b815260040160405180910390fd5b6001600160a01b038216600090815260208190526040812080548392906112a9908490611b00565b9250508190555080600260008282546112c29190611b00565b90915550506040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611225565b6001600160a01b03808416600090815260016020908152604080832093861683529290522054600019811461134357611343848461070d8585611b00565b50505050565b6107b18383600160ff85161b61145b565b6107b18383600160ff85161b6114ed565b60007fde9bdca322e1a848f72215bc15cf2c87fe7749145789a9ee281a2a6290af26ab826040516020016113bb92919091825260601b6bffffffffffffffffffffffff1916602082015260340190565b604051602081830303815290604052805190602001209050919050565b610bd782600160ff84161b611538565b806113f38484611599565b14611444576040517f6004fe400000000000000000000000000000000000000000000000000000000081526001600160a01b038085166004830152831660248201526044810182905260640161079e565b611450838360006115af565b6107b18383836114ed565b61146e6114678461116c565b8216821490565b61149d57604051631fe9beed60e21b81526001600160a01b03841660048201526024810182905260440161079e565b6114a88383836115af565b816001600160a01b0316836001600160a01b03167ff7158d1591c2cf17c0e6b9459d86365c47fe0969c79f40ef49e0c437d8f399148360405161108391815260200190565b6114f96114678461116c565b61152857604051631fe9beed60e21b81526001600160a01b03841660048201526024810182905260440161079e565b61153283826115c4565b6107b182825b6000816115448461116c565b1790506115518382611619565b826001600160a01b03167f34e73c57659d4b6809b53db4feee9b007b892e978114eda420d2991aba1501438360405161158c91815260200190565b60405180910390a2505050565b6000806115a6848461162c565b54949350505050565b60006115bb848461162c565b91909155505050565b600081196115d18461116c565b1690506115de8382611619565b826001600160a01b03167fccf920c8facee98a9c2a6c6124f2857b87b17e9f3a819bfcc6945196ee77366b8360405161158c91815260200190565b60006116248361136b565b919091555050565b60007ff96e07b2f4fbb81c31567d2b261589af429e98f0958d53f7e6ad5d63aea0ab7c838360405160200161168a93929190928352606091821b6bffffffffffffffffffffffff199081166020850152911b16603482015260480190565b60405160208183030381529060405280519060200120905092915050565b60005b838110156116c35781810151838201526020016116ab565b50506000910152565b60208152600082518060208401526116eb8160408501602087016116a8565b601f01601f19169190910160400192915050565b80356001600160a01b038116811461171657600080fd5b919050565b6000806040838503121561172e57600080fd5b611737836116ff565b946020939093013593505050565b60008060006060848603121561175a57600080fd5b611763846116ff565b9250611771602085016116ff565b9150604084013590509250925092565b60006020828403121561179357600080fd5b610a39826116ff565b60008083601f8401126117ae57600080fd5b50813567ffffffffffffffff8111156117c657600080fd5b6020830191508360208285010111156117de57600080fd5b9250929050565b803560ff8116811461171657600080fd5b600080600080600080600060a0888a03121561181157600080fd5b87359650611821602089016116ff565b9550604088013567ffffffffffffffff8082111561183e57600080fd5b61184a8b838c0161179c565b909750955060608a013591508082111561186357600080fd5b506118708a828b0161179c565b90945092506118839050608089016117e5565b905092959891949750929550565b600080604083850312156118a457600080fd5b6118ad836116ff565b91506118bb602084016117e5565b90509250929050565b60008060008060008060008060a0898b0312156118e057600080fd5b6118e9896116ff565b9750602089013567ffffffffffffffff8082111561190657600080fd5b6119128c838d0161179c565b909950975060408b013591508082111561192b57600080fd5b6119378c838d0161179c565b909750955060608b0135945060808b013591508082111561195757600080fd5b506119648b828c0161179c565b999c989b5096995094979396929594505050565b60008060008060008060006080888a03121561199357600080fd5b873567ffffffffffffffff808211156119ab57600080fd5b6119b78b838c0161179c565b909950975060208a01359150808211156119d057600080fd5b6119dc8b838c0161179c565b909750955060408a0135945060608a01359150808211156119fc57600080fd5b50611a098a828b0161179c565b989b979a50959850939692959293505050565b600080600080600080600060e0888a031215611a3757600080fd5b611a40886116ff565b9650611a4e602089016116ff565b95506040880135945060608801359350611a6a608089016117e5565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611a9957600080fd5b611aa2836116ff565b91506118bb602084016116ff565b600181811c90821680611ac457607f821691505b602082108103611ae457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106cb576106cb611aea565b808201808211156106cb576106cb611aea565b634e487b7160e01b600052604160045260246000fd5b601f8211156107b157600081815260208120601f850160051c81016020861015611b635750805b601f850160051c820191505b81811015611b8257828155600101611b6f565b505050505050565b67ffffffffffffffff831115611ba257611ba2611b26565b611bb683611bb08354611ab0565b83611b3c565b6000601f841160018114611bea5760008515611bd25750838201355b600019600387901b1c1916600186901b178355611c44565b600083815260209020601f19861690835b82811015611c1b5786850135825560209485019460019092019101611bfb565b5086821015611c385760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8981526001600160a01b038916602082015260c060408201526000611c9d60c08301898b611c4b565b8281036060840152611cb081888a611c4b565b905085608084015282810360a0840152611ccb818587611c4b565b9c9b505050505050505050505050565b600060018201611ced57611ced611aea565b5060010190565b60008451611d068184602089016116a8565b9190910192835250602082015260400191905056fea2646970667358221220526a1288b859e62af5ca8e14db94adb0148efda16480a75f48e63b1666f1adcd64736f6c63430008150033", "linkReferences": {}, "deployedLinkReferences": {} }